From 9c26db6ae4898121b2e67792ca845838d5e1873e Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:32:38 -0700 Subject: [PATCH 001/587] Add string for trial delete undo snackbar Don't want to hold up translation until we get all the code written BUG=64848776 Change-Id: I4230d323c761254fbd980b69ce7808b45f459f75 PiperOrigin-RevId: 190824410 --- LICENSE.tmp | 202 ++++++++++++++++++ .../OpenScienceJournalApplication.java | 2 +- .../modules/FeatureDiscoveryModule.java | 2 +- .../filemetadata/ExperimentCacheTest.java | 10 +- .../src/main/AndroidManifest.xml | 2 +- .../apps/forscience/ble/BleClientImpl.java | 6 +- .../apps/forscience/ble/BleDevices.java | 8 + .../android/apps/forscience/ble/BleFlow.java | 4 +- .../apps/forscience/ble/DeviceDiscoverer.java | 2 +- .../apps/forscience/ble/MyBleService.java | 4 +- .../whistlepunk/AccessibilityUtils.java | 2 +- .../forscience/whistlepunk/AddNoteDialog.java | 16 +- .../forscience/whistlepunk/AppSingleton.java | 2 +- .../whistlepunk/AudioSettingsDialog.java | 2 +- .../whistlepunk/BluetoothDisabledDialog.java | 2 +- .../whistlepunk/BuiltInSensorAppearance.java | 2 +- .../whistlepunk/CameraFragment.java | 6 +- .../whistlepunk/CardViewHolder.java | 2 +- .../whistlepunk/CommandLineSpecs.java | 4 +- .../whistlepunk/DataController.java | 4 +- .../whistlepunk/DataControllerImpl.java | 4 +- .../forscience/whistlepunk/DataService.java | 2 +- .../whistlepunk/DevOptionsFragment.java | 2 +- .../forscience/whistlepunk/ExportService.java | 8 +- .../whistlepunk/ExternalSensorAppearance.java | 2 +- .../whistlepunk/GalleryFragment.java | 12 +- .../whistlepunk/GraphPopulator.java | 4 +- .../forscience/whistlepunk/LevelActivity.java | 2 +- .../whistlepunk/LicenseActivity.java | 8 +- .../LocalSensorOptionsStorage.java | 4 +- .../forscience/whistlepunk/MainActivity.java | 10 +- .../whistlepunk/NoteViewHolder.java | 14 +- .../whistlepunk/PacketAssembler.java | 2 +- .../forscience/whistlepunk/PanesActivity.java | 8 +- .../whistlepunk/PanesBottomSheetBehavior.java | 26 +-- .../whistlepunk/PanesToolFragment.java | 2 +- .../whistlepunk/PermissionUtils.java | 6 +- .../forscience/whistlepunk/PictureUtils.java | 4 +- .../whistlepunk/PublicRecorderService.java | 2 +- .../whistlepunk/RecordFragment.java | 16 +- .../whistlepunk/RecorderController.java | 6 +- .../whistlepunk/RecorderControllerImpl.java | 18 +- .../whistlepunk/RecorderService.java | 2 +- .../whistlepunk/RelativeTimeTextView.java | 2 +- .../forscience/whistlepunk/RulerActivity.java | 4 +- .../forscience/whistlepunk/RulerView.java | 2 +- .../whistlepunk/SensorAnimationBehavior.java | 2 +- .../whistlepunk/SensorAppearance.java | 2 +- .../SensorAppearanceProviderImpl.java | 2 +- .../whistlepunk/SensorCardAdapter.java | 6 +- .../whistlepunk/SensorCardPresenter.java | 6 +- .../whistlepunk/SensorInfoActivity.java | 2 +- .../whistlepunk/SensorRegistry.java | 12 +- .../whistlepunk/SettingsActivity.java | 6 +- .../SingleLineResizableTextView.java | 2 +- .../forscience/whistlepunk/Snapshotter.java | 4 +- .../whistlepunk/StatefulRecorder.java | 2 +- .../whistlepunk/StatsAccumulator.java | 4 +- .../whistlepunk/TextToolFragment.java | 8 +- .../forscience/whistlepunk/ToggleArrow.java | 4 +- .../whistlepunk/TransitionUtils.java | 2 +- .../analytics/TrackerConstants.java | 2 +- .../scalarinput/EmptySensorAppearance.java | 2 +- .../api/scalarinput/InputDeviceSpec.java | 6 +- .../scalarinput/ScalarInputDiscoverer.java | 6 +- .../api/scalarinput/ScalarInputSpec.java | 6 +- .../ScalarSensorServiceFinder.java | 4 +- .../CompositeRecyclerAdapter.java | 2 +- .../CompositeSensitiveExpandableAdapter.java | 4 +- .../devicemanager/ConnectableSensor.java | 4 +- .../ConnectableSensorRegistry.java | 4 +- .../devicemanager/DeviceOptionsDialog.java | 2 +- .../devicemanager/DeviceParentListItem.java | 2 +- .../devicemanager/DeviceRegistry.java | 2 +- .../devicemanager/EnablementController.java | 2 +- .../ExpandableDeviceAdapter.java | 4 +- .../ExpandableServiceAdapter.java | 2 +- .../devicemanager/HeaderAdapter.java | 2 +- .../devicemanager/ManageDevicesActivity.java | 4 +- .../ManageDevicesRecyclerFragment.java | 10 +- .../devicemanager/NativeBleDiscoverer.java | 4 +- .../ScanDisabledDialogFragment.java | 4 +- .../devicemanager/SensorDiscoverer.java | 2 +- .../devicemanager/SensorTypeProvider.java | 2 +- .../ServiceParentViewHolder.java | 2 +- .../FeatureDiscoveryProvider.java | 2 +- .../whistlepunk/filemetadata/Experiment.java | 14 +- .../filemetadata/ExperimentCache.java | 8 +- .../filemetadata/FileMetadataManager.java | 6 +- .../whistlepunk/filemetadata/Label.java | 12 +- .../filemetadata/LabelListHolder.java | 2 +- .../whistlepunk/filemetadata/LabelValue.java | 2 +- .../filemetadata/PictureLabelValue.java | 2 +- .../ScienceJournalDocsProvider.java | 6 +- .../filemetadata/SensorTrigger.java | 6 +- .../filemetadata/SensorTriggerLabelValue.java | 2 +- .../whistlepunk/filemetadata/Trial.java | 12 +- .../whistlepunk/filemetadata/TrialStats.java | 2 +- .../filemetadata/UserMetadataManager.java | 4 +- .../whistlepunk/intro/AgeVerifier.java | 2 +- .../metadata/ApplicationLabel.java | 2 +- .../whistlepunk/metadata/BleSensorSpec.java | 2 +- .../whistlepunk/metadata/CropHelper.java | 2 +- .../metadata/EditTriggerActivity.java | 2 +- .../metadata/EditTriggerFragment.java | 18 +- .../whistlepunk/metadata/ExperimentRun.java | 2 +- .../metadata/ExternalSensorSpec.java | 8 +- .../metadata/SimpleMetaDataManager.java | 10 +- .../whistlepunk/metadata/TriggerHelper.java | 4 +- .../metadata/TriggerListActivity.java | 2 +- .../metadata/TriggerListFragment.java | 14 +- .../project/ExperimentListFragment.java | 16 +- .../whistlepunk/project/MetadataActivity.java | 2 +- .../experiment/ExperimentDetailItem.java | 4 +- .../experiment/ExperimentDetailsFragment.java | 24 +-- .../experiment/NameExperimentDialog.java | 2 +- .../experiment/RecordingThrobberView.java | 2 +- .../experiment/UpdateExperimentActivity.java | 4 +- .../experiment/UpdateExperimentFragment.java | 6 +- .../review/EditLabelTimeDialog.java | 2 +- .../review/ExportOptionsDialogFragment.java | 2 +- .../review/GraphExploringSeekBar.java | 8 +- .../whistlepunk/review/PinnedNoteAdapter.java | 4 +- .../whistlepunk/review/RunReviewFragment.java | 18 +- .../review/TimestampPickerController.java | 2 +- .../whistlepunk/review/UpdateRunActivity.java | 2 +- .../whistlepunk/review/UpdateRunFragment.java | 8 +- .../whistlepunk/review/ZoomPresenter.java | 2 +- .../review/labels/LabelDetailsActivity.java | 6 +- .../review/labels/LabelDetailsFragment.java | 6 +- .../labels/PictureLabelDetailsFragment.java | 4 +- .../labels/SnapshotLabelDetailsFragment.java | 4 +- .../labels/TextLabelDetailsFragment.java | 6 +- .../labels/TriggerLabelDetailsFragment.java | 6 +- .../scalarchart/ChartController.java | 4 +- .../whistlepunk/scalarchart/ChartData.java | 2 +- .../whistlepunk/scalarchart/ChartView.java | 2 +- .../scalarchart/GraphOptionsManager.java | 2 +- .../scalarchart/ScalarDisplayOptions.java | 4 +- .../sensorapi/DataViewOptions.java | 2 +- .../sensorapi/FrequencyOptionsPresenter.java | 2 +- .../whistlepunk/sensorapi/ScalarSensor.java | 6 +- .../whistlepunk/sensorapi/ScaleFilter.java | 2 +- .../sensorapi/SensorPresenter.java | 2 +- .../sensorapi/SensorStatusListener.java | 2 +- .../whistlepunk/sensorapi/StreamStat.java | 2 +- .../sensordb/SensorDatabaseImpl.java | 4 +- .../whistlepunk/sensors/BluetoothSensor.java | 6 +- .../whistlepunk/sensors/CameraPreview.java | 4 +- .../src/main/proto/sensor.proto | 2 +- .../main/res/layout-land/fragment_record.xml | 2 +- .../res/layout-w640dp/fragment_run_review.xml | 2 +- .../src/main/res/layout/activity_main.xml | 4 +- .../res/layout/activity_update_experiment.xml | 4 +- .../main/res/layout/activity_update_run.xml | 4 +- .../res/layout/fragment_experiment_list.xml | 2 +- .../res/layout/fragment_manage_devices.xml | 4 +- .../fragment_panes_experiment_details.xml | 2 +- .../src/main/res/layout/fragment_record.xml | 2 +- .../main/res/layout/fragment_run_review.xml | 2 +- .../layout/fragment_scan_disabled_dialog.xml | 2 +- .../main/res/layout/fragment_trigger_edit.xml | 12 +- .../main/res/layout/fragment_trigger_list.xml | 2 +- .../src/main/res/layout/gallery_fragment.xml | 2 +- .../res/layout/sensor_child_recycler_item.xml | 2 +- .../main/res/layout/text_label_fragment.xml | 4 +- .../src/main/res/layout/trigger_list_item.xml | 2 +- .../src/main/res/values/strings.xml | 3 + .../BuiltInSensorAppearanceTest.java | 4 +- .../whistlepunk/DevOptionsResource.java | 2 +- .../whistlepunk/ExportServiceTest.java | 2 +- .../whistlepunk/ManualSensorRegistry.java | 4 +- .../whistlepunk/MemoryRecorderController.java | 4 +- .../whistlepunk/PacketAssemblerTest.java | 2 +- .../PrefsNewOptionsStorageTest.java | 2 +- .../ProxyRecorderControllerTest.java | 2 +- .../whistlepunk/RecordFragmentTest.java | 2 +- .../whistlepunk/RecorderControllerTest.java | 8 +- .../SensorAppearanceProviderImplTest.java | 4 +- .../whistlepunk/SensorCardPresenterTest.java | 4 +- .../SensorCardPresenterUnitTest.java | 2 +- .../whistlepunk/SensorRegistryTest.java | 4 +- .../whistlepunk/StatefulRecorderTest.java | 2 +- .../whistlepunk/StatsAccumulatorTest.java | 2 +- .../forscience/whistlepunk/StubContext.java | 4 +- .../api/scalarinput/InputDeviceSpecTest.java | 4 +- .../ScalarInputDiscovererTest.java | 2 +- .../scalarinput/ScalarInputProviderTest.java | 2 +- .../scalarinput/ScalarInputSensorTest.java | 2 +- .../api/scalarinput/ScalarInputSpecTest.java | 2 +- .../ConnectableSensorRegistryTest.java | 2 +- .../devicemanager/DataControllerUnitTest.java | 2 +- .../ExpandableDeviceAdapterTest.java | 2 +- .../NativeBleDiscovererTest.java | 2 +- .../RecordingAdapterDataObserver.java | 2 +- .../filemetadata/ExperimentTest.java | 12 +- .../filemetadata/ExperimentUnitTest.java | 8 +- .../filemetadata/FileMetadataManagerTest.java | 4 +- .../whistlepunk/filemetadata/LabelTest.java | 12 +- .../filemetadata/LabelValueTest.java | 4 +- .../filemetadata/ProtoFileHelperTest.java | 2 +- .../filemetadata/SensorTriggerTest.java | 2 +- .../filemetadata/TrialStatsTest.java | 2 +- .../whistlepunk/filemetadata/TrialTest.java | 6 +- .../filemetadata/TrialUnitTest.java | 6 +- .../filemetadata/UserMetadataManagerTest.java | 6 +- .../whistlepunk/metadata/BleSensorTest.java | 2 +- .../whistlepunk/metadata/CropHelperTest.java | 2 +- .../metadata/SimpleMetaDataManagerTest.java | 6 +- .../metadata/TriggerHelperTest.java | 2 +- .../whistlepunk/review/ZoomPresenterTest.java | 4 +- .../scalarchart/ChartControllerTest.java | 6 +- .../scalarchart/ChartDataTest.java | 2 +- .../sensorapi/ScalarSensorTest.java | 8 +- .../sensordb/DataControllerTest.java | 4 +- .../sensors/BluetoothSensorTest.java | 2 +- .../sensors/CameraPreviewTest.java | 2 +- .../whistlepunk/StubDataController.java | 2 +- .../apps/forscience/whistlepunk/TestData.java | 2 +- .../api/scalarinput/ScalarInputScenario.java | 2 +- .../api/scalarinput/TestSensorDiscoverer.java | 2 +- .../devicemanager/EnumeratedDiscoverer.java | 4 +- .../whistlepunk/sensorapi/ManualSensor.java | 2 +- .../sensordb/InMemorySensorDatabase.java | 2 +- .../sensordb/MemoryMetadataManager.java | 6 +- README-pl-PL.md | 42 ---- .../AllNativeSensorProvider.java | 2 +- .../scalarapisample/DisplayActivity.java | 2 +- .../api/scalarinput/ScalarSensorService.java | 4 +- .../forscience/synthetic/MainActivity.java | 2 +- .../devices/android/AndroidAudioForJSyn.java | 144 +++---------- 231 files changed, 741 insertions(+), 654 deletions(-) create mode 100644 LICENSE.tmp delete mode 100644 README-pl-PL.md diff --git a/LICENSE.tmp b/LICENSE.tmp new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/LICENSE.tmp @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java index da16ca6f..a1cd09a7 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.opensource; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.VisibleForTesting; import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; import com.google.android.apps.forscience.whistlepunk.modules.ContextModule; diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java index cc6e5c6b..c9b622ab 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.opensource.modules; import android.content.Context; -import android.support.v4.app.FragmentActivity; +import androidx.fragment.app.FragmentActivity; import com.google.android.apps.forscience.whistlepunk.featurediscovery.FeatureDiscoveryProvider; diff --git a/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java b/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java index d9b4d02a..5077291f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java @@ -16,13 +16,13 @@ package com.google.android.apps.forscience.whistlepunk.filemetadata; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.test.InstrumentationTestCase; -import com.google.android.apps.forscience.whistlepunk.data.GoosciGadgetInfo; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciExperiment; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciGadgetInfo; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import com.google.android.apps.forscience.whistlepunk.metadata.Version; import com.google.protobuf.nano.MessageNano; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml b/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml index 55ff02d7..f85fd1f8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml @@ -216,7 +216,7 @@ android:value="com.google.android.apps.forscience.whistlepunk.SettingsActivity"/> - - - - + diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_experiment.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_experiment.xml index 0b067ebe..cbc38074 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_experiment.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_experiment.xml @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - - \ No newline at end of file + \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_run.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_run.xml index ea0af1d8..1f309303 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_run.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_update_run.xml @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - - \ No newline at end of file + \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_experiment_list.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_experiment_list.xml index d9f754a2..e80b259c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_experiment_list.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_experiment_list.xml @@ -22,7 +22,7 @@ android:fitsSystemWindows="true" tools:context=".project.ExperimentListFragment"> - - - + \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details.xml index c26098ab..5a4312b8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details.xml @@ -27,7 +27,7 @@ android:layout_height="300dp" /> - - - - - - - - - - - - - - - + diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/trigger_list_item.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/trigger_list_item.xml index b4d5feb6..f76d9b73 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/trigger_list_item.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/trigger_list_item.xml @@ -41,7 +41,7 @@ android:gravity="top" /> - Note deleted + + Recording deleted + Undo diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearanceTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearanceTest.java index 28182692..579b910a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearanceTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearanceTest.java @@ -19,9 +19,9 @@ import android.content.Context; import android.content.res.Resources; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; -import com.google.android.apps.forscience.whistlepunk.data.GoosciIcon; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciIcon; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/DevOptionsResource.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/DevOptionsResource.java index 5a5d6787..51370d73 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/DevOptionsResource.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/DevOptionsResource.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; import android.content.SharedPreferences; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.junit.rules.ExternalResource; import org.robolectric.RuntimeEnvironment; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ExportServiceTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ExportServiceTest.java index c920af59..e97b2d3d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ExportServiceTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ExportServiceTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ManualSensorRegistry.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ManualSensorRegistry.java index 3f4d16b5..966733e1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ManualSensorRegistry.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ManualSensorRegistry.java @@ -16,9 +16,9 @@ package com.google.android.apps.forscience.whistlepunk; import android.content.Context; -import android.support.v4.util.ArrayMap; +import androidx.collection.ArrayMap; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.sensorapi.ManualSensor; import java.util.Map; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/MemoryRecorderController.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/MemoryRecorderController.java index 3feccc49..818b0a67 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/MemoryRecorderController.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/MemoryRecorderController.java @@ -18,10 +18,10 @@ import android.content.Intent; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciSnapshotValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSnapshotValue; import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorObserver; import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; import com.google.android.apps.forscience.whistlepunk.wireapi.TransportableSensorOptions; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PacketAssemblerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PacketAssemblerTest.java index 02da2a4b..5519eb96 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PacketAssemblerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PacketAssemblerTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensor; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensor; import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; import org.junit.Test; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PrefsNewOptionsStorageTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PrefsNewOptionsStorageTest.java index 4834fda7..166ec27d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PrefsNewOptionsStorageTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PrefsNewOptionsStorageTest.java @@ -20,7 +20,7 @@ import android.content.Context; import android.content.SharedPreferences; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.sensorapi.NewOptionsStorage; import com.google.android.apps.forscience.whistlepunk.sensorapi.WriteableSensorOptions; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ProxyRecorderControllerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ProxyRecorderControllerTest.java index c8c6e5d6..dc094c25 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ProxyRecorderControllerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/ProxyRecorderControllerTest.java @@ -24,7 +24,7 @@ import com.google.android.apps.forscience.javalib.FallibleConsumer; import com.google.android.apps.forscience.javalib.MaybeConsumer; import com.google.android.apps.forscience.javalib.Success; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.devicemanager.FakeUnitAppearanceProvider; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecordFragmentTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecordFragmentTest.java index 3228b5f2..f11ec0df 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecordFragmentTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecordFragmentTest.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; import com.google.android.apps.forscience.javalib.Delay; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.devicemanager.FakeUnitAppearanceProvider; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerTest.java index 1f0ffdd4..c896b890 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerTest.java @@ -23,15 +23,15 @@ import com.google.android.apps.forscience.javalib.MaybeConsumer; import com.google.android.apps.forscience.javalib.Success; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.EmptySensorAppearance; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorAppearance; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorAppearance; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.devicemanager.FakeUnitAppearanceProvider; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciSnapshotValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSnapshotValue; import com.google.android.apps.forscience.whistlepunk.sensorapi.FakeBleClient; import com.google.android.apps.forscience.whistlepunk.sensorapi.ManualSensor; import com.google.android.apps.forscience.whistlepunk.sensorapi.MemorySensorEnvironment; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImplTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImplTest.java index 5deb7094..0792c6d6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImplTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImplTest.java @@ -19,8 +19,8 @@ import android.content.Context; -import com.google.android.apps.forscience.whistlepunk.data.GoosciIcon; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorAppearance; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciIcon; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorAppearance; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterTest.java index 06028fac..5f4b01a9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterTest.java @@ -21,11 +21,11 @@ import static org.junit.Assert.assertTrue; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.Delay; import com.google.android.apps.forscience.javalib.FailureListener; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.scalarchart.ScalarDisplayOptions; import com.google.android.apps.forscience.whistlepunk.sensorapi.DataViewOptions; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterUnitTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterUnitTest.java index 0b54f60e..0fd86799 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterUnitTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenterUnitTest.java @@ -24,7 +24,7 @@ import android.view.View; import com.google.android.apps.forscience.javalib.FailureListener; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorRegistryTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorRegistryTest.java index 5e4743b5..0029683f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorRegistryTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/SensorRegistryTest.java @@ -22,10 +22,10 @@ import static org.junit.Assert.assertTrue; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.Consumer; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.devicemanager.ConnectableSensor; import com.google.android.apps.forscience.whistlepunk.devicemanager.NativeBleDiscoverer; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatefulRecorderTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatefulRecorderTest.java index 1ba891cf..fecea8c3 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatefulRecorderTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatefulRecorderTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertFalse; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.sensorapi.ManualSensor; import com.google.android.apps.forscience.whistlepunk.sensorapi.RecordingSensorObserver; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatsAccumulatorTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatsAccumulatorTest.java index 121834b4..56674480 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatsAccumulatorTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StatsAccumulatorTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StubContext.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StubContext.java index 3c135679..8a4763ec 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StubContext.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/StubContext.java @@ -38,8 +38,8 @@ import android.os.Handler; import android.os.Looper; import android.os.UserHandle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.Display; import java.io.File; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/InputDeviceSpecTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/InputDeviceSpecTest.java index 01cdc51a..d716f3af 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/InputDeviceSpecTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/InputDeviceSpecTest.java @@ -18,8 +18,8 @@ import static org.junit.Assert.assertEquals; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.data.GoosciDeviceSpec; -import com.google.android.apps.forscience.whistlepunk.data.GoosciGadgetInfo; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciDeviceSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciGadgetInfo; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscovererTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscovererTest.java index d493e868..0db0be4a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscovererTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscovererTest.java @@ -28,7 +28,7 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.MockScheduler; import com.google.android.apps.forscience.whistlepunk.TestConsumers; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.devicemanager.DeviceRegistry; import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorDiscoverer; import com.google.android.apps.forscience.whistlepunk.metadata.ExternalSensorSpec; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputProviderTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputProviderTest.java index c06b190c..e97e36c5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputProviderTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputProviderTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertNotNull; import android.os.RemoteException; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.Consumer; import com.google.android.apps.forscience.whistlepunk.Arbitrary; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSensorTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSensorTest.java index 587c652b..e5225e88 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSensorTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSensorTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertTrue; import android.os.RemoteException; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.Delay; import com.google.android.apps.forscience.whistlepunk.BuildConfig; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpecTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpecTest.java index c79b93fa..634a9343 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpecTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpecTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.Arbitrary; import com.google.android.apps.forscience.whistlepunk.BuildConfig; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistryTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistryTest.java index 55877de4..f682e3f7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistryTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistryTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.Scheduler; import com.google.android.apps.forscience.javalib.Success; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DataControllerUnitTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DataControllerUnitTest.java index bf3b3fb8..f0c79b95 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DataControllerUnitTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DataControllerUnitTest.java @@ -28,7 +28,7 @@ import com.google.android.apps.forscience.whistlepunk.RecordingDataController; import com.google.android.apps.forscience.whistlepunk.RxDataController; import com.google.android.apps.forscience.whistlepunk.TestConsumers; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.sensordb.InMemorySensorDatabase; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableDeviceAdapterTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableDeviceAdapterTest.java index 35ef01f9..0ad1d72f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableDeviceAdapterTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableDeviceAdapterTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.bignerdranch.expandablerecyclerview.Adapter.ExpandableRecyclerAdapter; import com.google.android.apps.forscience.javalib.Consumer; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscovererTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscovererTest.java index 7223a293..cc16eb29 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscovererTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscovererTest.java @@ -27,7 +27,7 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.TestConsumers; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.RecordingRunnable; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; import org.junit.Test; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/RecordingAdapterDataObserver.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/RecordingAdapterDataObserver.java index 4e7c2fd2..dc54d190 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/RecordingAdapterDataObserver.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/RecordingAdapterDataObserver.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentTest.java index 40837bba..9d180399 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentTest.java @@ -23,12 +23,12 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.FakeAppearanceProvider; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciExperiment; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciLabel; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciPictureLabelValue; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabel; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciPictureLabelValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import com.google.protobuf.nano.MessageNano; import org.junit.Test; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentUnitTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentUnitTest.java index 5564be03..ff5c95f7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentUnitTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentUnitTest.java @@ -19,10 +19,10 @@ import static junit.framework.Assert.assertEquals; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciExperiment; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciSensorTrigger; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTrigger; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManagerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManagerTest.java index 499a494d..be3913a7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManagerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManagerTest.java @@ -23,8 +23,8 @@ import android.content.Context; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciLabel; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTextLabelValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabel; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTextLabelValue; import com.google.android.apps.forscience.whistlepunk.sensordb.IncrementableMonotonicClock; import org.junit.After; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelTest.java index 87e5953d..8366ae07 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelTest.java @@ -21,12 +21,12 @@ import android.os.Parcel; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciCaption; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciLabel; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciPictureLabelValue; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciSensorTriggerInformation; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciSensorTriggerLabelValue; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTextLabelValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciCaption; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabel; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciPictureLabelValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerLabelValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTextLabelValue; import com.google.protobuf.nano.MessageNano; import org.junit.Test; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValueTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValueTest.java index fd52610b..de8b0a9c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValueTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValueTest.java @@ -18,8 +18,8 @@ import static junit.framework.Assert.assertEquals; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciLabelValue; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciSensorTriggerInformation; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabelValue; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ProtoFileHelperTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ProtoFileHelperTest.java index 67705bf4..4b989bf0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ProtoFileHelperTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ProtoFileHelperTest.java @@ -25,7 +25,7 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.analytics.UsageTracker; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import org.junit.After; import org.junit.Test; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTriggerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTriggerTest.java index e3c6a726..ef10d1e9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTriggerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTriggerTest.java @@ -21,7 +21,7 @@ import static org.junit.Assert.assertTrue; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciSensorTriggerInformation +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation .TriggerInformation; import org.junit.Test; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStatsTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStatsTest.java index 74051129..d6e41208 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStatsTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStatsTest.java @@ -21,7 +21,7 @@ import static junit.framework.Assert.assertTrue; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialTest.java index f680605d..723d925f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialTest.java @@ -20,9 +20,9 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.FakeAppearanceProvider; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciLabel; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabel; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialUnitTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialUnitTest.java index 85259ffa..161f0f68 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialUnitTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialUnitTest.java @@ -27,10 +27,10 @@ import com.google.android.apps.forscience.whistlepunk.MemoryAppearanceProvider; import com.google.android.apps.forscience.whistlepunk.SensorAppearanceProvider; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.EmptySensorAppearance; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorAppearance; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorAppearance; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.devicemanager.FakeUnitAppearanceProvider; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManagerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManagerTest.java index a9b02cdb..8083cce1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManagerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManagerTest.java @@ -22,9 +22,9 @@ import android.content.Context; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.data.GoosciDeviceSpec; -import com.google.android.apps.forscience.whistlepunk.data.GoosciGadgetInfo; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciDeviceSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciGadgetInfo; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import org.junit.After; import org.junit.Before; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/BleSensorTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/BleSensorTest.java index 3bec4f4b..8539e6b3 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/BleSensorTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/BleSensorTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertEquals; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorConfig.BleSensorConfig +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorConfig.BleSensorConfig .ScaleTransform; import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorTypeProvider; import com.google.android.apps.forscience.whistlepunk.sensorapi.ValueFilter; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelperTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelperTest.java index b28c43a9..7f7fa78a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelperTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelperTest.java @@ -24,7 +24,7 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.DataControllerImpl; import com.google.android.apps.forscience.whistlepunk.TestConsumers; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManagerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManagerTest.java index cb9f4657..ea472bb3 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManagerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManagerTest.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.metadata; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import com.google.android.apps.forscience.whistlepunk.Arbitrary; @@ -30,8 +30,8 @@ import com.google.android.apps.forscience.whistlepunk.api.scalarinput.InputDeviceSpec; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.ScalarInputDiscoverer; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.ScalarInputSpec; -import com.google.android.apps.forscience.whistlepunk.data.GoosciDeviceSpec; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciDeviceSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.devicemanager.ConnectableSensor; import com.google.android.apps.forscience.whistlepunk.devicemanager.NativeBleDiscoverer; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelperTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelperTest.java index 997c3f88..ee1363e4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelperTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelperTest.java @@ -21,7 +21,7 @@ import android.text.TextUtils; import com.google.android.apps.forscience.whistlepunk.BuildConfig; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/review/ZoomPresenterTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/review/ZoomPresenterTest.java index b3710521..51a190c9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/review/ZoomPresenterTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/review/ZoomPresenterTest.java @@ -20,10 +20,10 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.FakeAppearanceProvider; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import com.google.android.apps.forscience.whistlepunk.sensorapi.ManualSensor; import com.google.android.apps.forscience.whistlepunk.sensorapi.RecordingSensorObserver; import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorRecorder; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartControllerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartControllerTest.java index a2746000..b8409345 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartControllerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartControllerTest.java @@ -18,15 +18,15 @@ import static org.junit.Assert.assertEquals; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.DataController; import com.google.android.apps.forscience.whistlepunk.ExplodingFactory; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import com.google.android.apps.forscience.whistlepunk.sensordb.InMemorySensorDatabase; import com.google.android.apps.forscience.whistlepunk.sensordb.MemoryMetadataManager; import com.google.android.apps.forscience.whistlepunk.sensordb.MonotonicClock; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartDataTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartDataTest.java index 5151335a..3d6647e5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartDataTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartDataTest.java @@ -23,7 +23,7 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciLabel; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabel; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorTest.java index 85cd4eee..61e6e13c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorTest.java @@ -19,22 +19,22 @@ import static org.junit.Assert.assertEquals; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.DataController; import com.google.android.apps.forscience.whistlepunk.RecordingDataController; import com.google.android.apps.forscience.whistlepunk.TestData; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.ExplicitExecutor; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorConfig.BleSensorConfig +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorConfig.BleSensorConfig .ScaleTransform; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.devicemanager.FakeUnitAppearanceProvider; import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorTypeProvider; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciTrial; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import com.google.android.apps.forscience.whistlepunk.scalarchart.ScalarDisplayOptions; import com.google.android.apps.forscience.whistlepunk.sensordb.InMemorySensorDatabase; import com.google.android.apps.forscience.whistlepunk.sensordb.MemoryMetadataManager; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/DataControllerTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/DataControllerTest.java index 5f0fe7fb..3b86e6c1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/DataControllerTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/DataControllerTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertNotSame; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.Consumer; import com.google.android.apps.forscience.javalib.Success; @@ -33,7 +33,7 @@ import com.google.android.apps.forscience.whistlepunk.RxDataController; import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.TestConsumers; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.devicemanager.ConnectableSensor; import com.google.android.apps.forscience.whistlepunk.devicemanager.NativeBleDiscoverer; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/BluetoothSensorTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/BluetoothSensorTest.java index ad1982aa..2e68261c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/BluetoothSensorTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/BluetoothSensorTest.java @@ -25,7 +25,7 @@ import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.MemorySensorHistoryStorage; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorConfig; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorConfig; import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorTypeProvider; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; import com.google.android.apps.forscience.whistlepunk.sensorapi.FakeBleClient; diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreviewTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreviewTest.java index b991f362..cf7b641c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreviewTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreviewTest.java @@ -15,7 +15,7 @@ */ package com.google.android.apps.forscience.whistlepunk.sensors; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.junit.Test; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/StubDataController.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/StubDataController.java index 137cb57f..495f05f5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/StubDataController.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/StubDataController.java @@ -22,7 +22,7 @@ import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.metadata.ExperimentSensors; import com.google.android.apps.forscience.whistlepunk.metadata.ExternalSensorSpec; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import com.google.android.apps.forscience.whistlepunk.metadata.MetaDataManager; import com.google.android.apps.forscience.whistlepunk.sensordb.ScalarReading; import com.google.android.apps.forscience.whistlepunk.sensordb.ScalarReadingList; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/TestData.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/TestData.java index bbc5489e..39539cec 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/TestData.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/TestData.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.scalarchart.ChartData; import com.google.android.apps.forscience.whistlepunk.sensorapi.RecordingSensorObserver; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputScenario.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputScenario.java index 850214a7..385438c9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputScenario.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputScenario.java @@ -15,7 +15,7 @@ */ package com.google.android.apps.forscience.whistlepunk.api.scalarinput; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.Arbitrary; import com.google.android.apps.forscience.whistlepunk.SensorProvider; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/TestSensorDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/TestSensorDiscoverer.java index ec314c26..ec717c45 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/TestSensorDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/TestSensorDiscoverer.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.api.scalarinput; import android.os.RemoteException; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.Consumer; import com.google.android.apps.forscience.whistlepunk.SensorProvider; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/EnumeratedDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/EnumeratedDiscoverer.java index 7641ecce..a937b071 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/EnumeratedDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/devicemanager/EnumeratedDiscoverer.java @@ -15,11 +15,11 @@ */ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.javalib.FailureListener; import com.google.android.apps.forscience.whistlepunk.SensorProvider; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.metadata.ExternalSensorSpec; import org.junit.Assert; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ManualSensor.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ManualSensor.java index 49539aaf..a270f40a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ManualSensor.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ManualSensor.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.AxisNumberFormat; import com.google.android.apps.forscience.whistlepunk.MemorySensorHistoryStorage; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java index 40505009..2be8982b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.sensordb; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.DataControllerImpl; diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/MemoryMetadataManager.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/MemoryMetadataManager.java index fcea55c5..d5acec74 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/MemoryMetadataManager.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/MemoryMetadataManager.java @@ -16,17 +16,17 @@ package com.google.android.apps.forscience.whistlepunk.sensordb; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.InputDeviceSpec; -import com.google.android.apps.forscience.whistlepunk.data.GoosciSensorLayout; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.devicemanager.ConnectableSensor; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.metadata.ExperimentSensors; import com.google.android.apps.forscience.whistlepunk.metadata.ExternalSensorSpec; -import com.google.android.apps.forscience.whistlepunk.metadata.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import com.google.android.apps.forscience.whistlepunk.metadata.MetaDataManager; import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; diff --git a/README-pl-PL.md b/README-pl-PL.md deleted file mode 100644 index c30443cf..00000000 --- a/README-pl-PL.md +++ /dev/null @@ -1,42 +0,0 @@ -[Science Journal][play-store] pozwala na pozyskiwanie danych z otaczającego Cię świata. Używa czujników otoczenia jak np.: światła czy dźwięku abyś mógł stworzyć wykresy danych, zarejestrować eksperymenty i zorganizować pytania i pomysły. Jest laboratoryjnym notesem, który zawsze jest pod ręką. - -Open Science Journal jest sercem aplikacji Science Journal z tym samym interfejsem i kodem czujników, może być skompilowany i uruchamiany samodzielnie. - -## Możliwości - -* Wizualizacja i tworzenie wykresów danych z czujników. -* Łączenie z zewnętrznymi czujnikami poprzez BLE ([firmware code][firmware-github]). -* Powiadomienia obrazkowe i tekstowe. - -## Tworzenie aplikacji - -Pobierz kod źródłowy, przejdź do katalogu OpenScienceJournal i uruchom: - - ./gradlew app:installDebug - -Lub, importuj kod źródłowy OpenScienceJournal do Android Studio (File, Import Project). - -Uwaga: Aby skompilować projekt będziesz potrzebować Android SDKw wersji 23, build tools 23.0.3, oraz Android Support Library. -Jeśli nie jesteś pewien użuj Android Studio i zaznacz odpowiednie opcje w Managerze SDK. - -Plik [OpenScienceJournal README](https://github.com/google/science-journal/tree/master/OpenScienceJournal) -zawiera szczegółowe informacje na temat organizacji kodu źródłowego i zależności od tej publikacji [published app][play-store]. - -## Współpraca - -Przeczytaj nasz [poradnik dla współpracowników][contributing]. - -## Licencja - -Open Science Journal jest oparty na licencji [Apache 2][license]. - -## Więcej - -Science Journal dostarcza [Making & Science][making-science], będący inicjatywą Google. Open Science Journal nie jest -oficjalnym  produktem Google. - -[play-store]: https://play.google.com/store/apps/details?id=com.google.android.apps.forscience.whistlepunk -[firmware-github]:https://github.com/google/science-journal-arduino -[współpraca]: https://github.com/google/science-journal/blob/master/CONTRIBUTING -[licencja]: https://github.com/google/science-journal/blob/master/LICENSE -[making-science]: https://makingscience.withgoogle.com diff --git a/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/AllNativeSensorProvider.java b/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/AllNativeSensorProvider.java index af724153..3741d3eb 100644 --- a/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/AllNativeSensorProvider.java +++ b/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/AllNativeSensorProvider.java @@ -21,7 +21,7 @@ import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.AdvertisedDevice; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.AdvertisedSensor; diff --git a/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/DisplayActivity.java b/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/DisplayActivity.java index 86e3cbbb..6058c2b2 100644 --- a/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/DisplayActivity.java +++ b/ScalarApiSampleApp/app/src/main/java/com/google/android/apps/forscience/scalarapisample/DisplayActivity.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.scalarapisample; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; /** * Main point of this activity is so that the app shows up in the launcher, as an easy way to diff --git a/api/ScienceJournalApi/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarSensorService.java b/api/ScienceJournalApi/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarSensorService.java index d76f499f..2440bf81 100644 --- a/api/ScienceJournalApi/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarSensorService.java +++ b/api/ScienceJournalApi/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarSensorService.java @@ -23,8 +23,8 @@ import android.content.pm.Signature; import android.os.Binder; import android.os.RemoteException; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.ArrayMap; import android.util.Log; diff --git a/sensor_providers/syntheticsensors/src/main/java/com/google/android/apps/forscience/synthetic/MainActivity.java b/sensor_providers/syntheticsensors/src/main/java/com/google/android/apps/forscience/synthetic/MainActivity.java index 9fba69d3..8d5d252a 100644 --- a/sensor_providers/syntheticsensors/src/main/java/com/google/android/apps/forscience/synthetic/MainActivity.java +++ b/sensor_providers/syntheticsensors/src/main/java/com/google/android/apps/forscience/synthetic/MainActivity.java @@ -15,7 +15,7 @@ */ package com.google.android.apps.forscience.synthetic; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { diff --git a/third_party/jsyn/com/jsyn/devices/android/AndroidAudioForJSyn.java b/third_party/jsyn/com/jsyn/devices/android/AndroidAudioForJSyn.java index d9bed8aa..3aba1e45 100644 --- a/third_party/jsyn/com/jsyn/devices/android/AndroidAudioForJSyn.java +++ b/third_party/jsyn/com/jsyn/devices/android/AndroidAudioForJSyn.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 Phil Burk, Mobileer Inc + * Copyright 2010 Phil Burk, Mobileer Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,19 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.jsyn.devices.android; - import java.util.ArrayList; - +import android.os.Process; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack; - import com.jsyn.devices.AudioDeviceManager; import com.jsyn.devices.AudioDeviceInputStream; import com.jsyn.devices.AudioDeviceOutputStream; - /** * Implement JSyn's AudioDeviceManager. Use Android AudioTrack to access the * audio hardware. @@ -36,11 +32,9 @@ public class AndroidAudioForJSyn implements AudioDeviceManager { private double suggestedInputLatency = 0.100; private int defaultInputDeviceID = -1; private int defaultOutputDeviceID = -1; - public AndroidAudioForJSyn() { deviceRecords = new ArrayList(); DeviceInfo deviceInfo = new DeviceInfo(); - deviceInfo.name = "Android Audio"; deviceInfo.maxInputs = 0; deviceInfo.maxOutputs = 2; @@ -48,232 +42,158 @@ public AndroidAudioForJSyn() { defaultOutputDeviceID = 0; deviceRecords.add(deviceInfo); } - - @Override - public String getName() { + public String getName() { return "JSyn Android Audio"; } - class DeviceInfo { String name; int maxInputs; int maxOutputs; - - @Override public String toString() { return "AudioDevice: " + name + ", max in = " + maxInputs + ", max out = " + maxOutputs; } } - private class AndroidAudioStream { - short[] shortBuffer; + float[] floatBuffer; int frameRate; int deviceID; int samplesPerFrame; AudioTrack audioTrack; int minBufferSize; int bufferSize; - - public AndroidAudioStream(int deviceID, int frameRate, int samplesPerFrame) { + public AndroidAudioStream(int deviceID, int frameRate, + int samplesPerFrame) { this.deviceID = deviceID; this.frameRate = frameRate; this.samplesPerFrame = samplesPerFrame; } - public double getLatency() { int numFrames = bufferSize / samplesPerFrame; - return ((double)numFrames) / frameRate; + return ((double) numFrames) / frameRate; } - } - private class AndroidAudioOutputStream extends AndroidAudioStream implements AudioDeviceOutputStream { - public AndroidAudioOutputStream(int deviceID, int frameRate, int samplesPerFrame) { + public AndroidAudioOutputStream(int deviceID, int frameRate, + int samplesPerFrame) { super(deviceID, frameRate, samplesPerFrame); } - - @Override - public void start() { + public void start() { + Process.setThreadPriority(-5); minBufferSize = AudioTrack.getMinBufferSize(frameRate, AudioFormat.CHANNEL_OUT_STEREO, - AudioFormat.ENCODING_PCM_16BIT); + AudioFormat.ENCODING_PCM_FLOAT); System.out.println("Audio minBufferSize = " + minBufferSize); bufferSize = (3 * (minBufferSize / 2)) & ~3; System.out.println("Audio bufferSize = " + bufferSize); - audioTrack = new AudioTrack( - AudioManager.STREAM_MUSIC, frameRate, + audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, frameRate, AudioFormat.CHANNEL_OUT_STEREO, - AudioFormat.ENCODING_PCM_16BIT, bufferSize, + AudioFormat.ENCODING_PCM_FLOAT, bufferSize, AudioTrack.MODE_STREAM); audioTrack.play(); } - /** Grossly inefficient. Call the array version instead. */ - @Override public void write(double value) { double[] buffer = new double[1]; buffer[0] = value; write(buffer, 0, 1); } - - @Override public void write(double[] buffer) { write(buffer, 0, buffer.length); } - - @Override public void write(double[] buffer, int start, int count) { // Allocate buffer if needed. - if ((shortBuffer == null) || (shortBuffer.length < count)) { - shortBuffer = new short[count]; + if ((floatBuffer == null) || (floatBuffer.length < count)) { + floatBuffer = new float[count]; } - // Convert float samples to shorts. - for(int i = 0; i < count; i++) { - - int sample = (int) (32767.0 * buffer[i+start]); - if (sample > Short.MAX_VALUE) { - sample = Short.MAX_VALUE; - } - else if (sample < Short.MIN_VALUE) { - sample = Short.MIN_VALUE; - } - shortBuffer[i] = (short) sample; + for (int i = 0; i < count; i++) { + floatBuffer[i] = (float) buffer[i + start]; } - - audioTrack.write(shortBuffer, 0, count); + audioTrack.write(floatBuffer, 0, count, AudioTrack.WRITE_BLOCKING); } - - @Override public void stop() { audioTrack.stop(); audioTrack.release(); } - - - @Override public void close() { } - } - private class AndroidAudioInputStream extends AndroidAudioStream implements AudioDeviceInputStream { - - public AndroidAudioInputStream(int deviceID, int frameRate, int samplesPerFrame) { + public AndroidAudioInputStream(int deviceID, int frameRate, + int samplesPerFrame) { super(deviceID, frameRate, samplesPerFrame); } - - @Override public void start() { } - - @Override public double read() { double[] buffer = new double[1]; read(buffer, 0, 1); return buffer[0]; } - - @Override public int read(double[] buffer) { return read(buffer, 0, buffer.length); } - - @Override public int read(double[] buffer, int start, int count) { return 0; } - - @Override public void stop() { } - - @Override public int available() { return 0; } - - @Override public void close() { } - } - - @Override - public AudioDeviceOutputStream createOutputStream(int deviceID, int frameRate, - int samplesPerFrame) { - return new AndroidAudioOutputStream(deviceID, frameRate, samplesPerFrame); + public AudioDeviceOutputStream createOutputStream(int deviceID, + int frameRate, int samplesPerFrame) { + return new AndroidAudioOutputStream(deviceID, frameRate, + samplesPerFrame); } - - @Override - public AudioDeviceInputStream createInputStream(int deviceID, int frameRate, - int samplesPerFrame) { - if(frameRate > 0) throw new RuntimeException("JSyn audio input not implemented on Android."); - return new AndroidAudioInputStream(deviceID, frameRate, samplesPerFrame); + public AudioDeviceInputStream createInputStream(int deviceID, int frameRate, + int samplesPerFrame) { + if (frameRate > 0) + throw new RuntimeException( + "JSyn audio input not implemented on Android."); + return new AndroidAudioInputStream(deviceID, frameRate, + samplesPerFrame); } - - @Override public double getDefaultHighInputLatency(int deviceID) { return 0.300; } - - @Override public double getDefaultHighOutputLatency(int deviceID) { return 0.300; } - - @Override public int getDefaultInputDeviceID() { return defaultInputDeviceID; } - - @Override public int getDefaultOutputDeviceID() { return defaultOutputDeviceID; } - - @Override public double getDefaultLowInputLatency(int deviceID) { return 0.100; } - - @Override public double getDefaultLowOutputLatency(int deviceID) { return 0.100; } - - - @Override public int getDeviceCount() { return deviceRecords.size(); } - - @Override public String getDeviceName(int deviceID) { return deviceRecords.get(deviceID).name; } - - @Override public int getMaxInputChannels(int deviceID) { return deviceRecords.get(deviceID).maxInputs; } - - @Override public int getMaxOutputChannels(int deviceID) { return deviceRecords.get(deviceID).maxOutputs; } - - - @Override public int setSuggestedOutputLatency(double latency) { suggestedOutputLatency = latency; return 0; } - - @Override public int setSuggestedInputLatency(double latency) { suggestedInputLatency = latency; return 0; From 0fe4f20a1747e3a7915b8b316e2070586f19c8e2 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:32:44 -0700 Subject: [PATCH 002/587] Merge "Update sound intensity string" PiperOrigin-RevId: 190824438 --- .../whistlepunk_library/src/main/res/values/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml index 8c962f98..65cfa3ec 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml @@ -605,6 +605,8 @@ All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency—only loudness. + \n\nOne important thing to know is that the microphone in your device is designed to be very sensitive to differences in sound waves over time, but not the absolute size of each wave. We have tried to choose code that is likely to produce numbers similar to the reference numbers shown below, but each device may give consistently higher or lower numbers. Scientists will usually calibrate a sensor like this to a known measurement. For now, Science Journal can tell you whether your next train ride is louder than your next rock concert, but only if you bring the same phone to both events. + \n\nAnother thing to know is that there are important differences between “sound intensity”, “sound intensity level”, and “sound pressure”. We are treating them here as the same thing, but if you want to dig deeper, there’s many online resources about the differences. \n\nThe quietest sound that the average human ear can detect is defined as 0 dB. Ordinary conversation corresponds to about 60 dB, and sounds above about 140 dB are painful to the human ear. But sounds don\'t have to be painful to be harmful. Continued exposure to sounds of 90 dB—about the loudness of a vacuum cleaner—can eventually cause hearing loss. \n\nThe decibel scale is logarithmic, which makes for some trickiness: A sound source of 40 dB isn\'t twice as intense as one with 20 dB—it\'s 100 times more intense. Meanwhile, if one ringing alarm clock produces 70 dB, two ringing alarm clocks produce not 140 dB, but 73 dB. Like we said, it\'s a strange scale. \n\n10 dB rustling leaves From 10bb3b5e53f4db0f9fa81444e505533ecbe47798 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:32:51 -0700 Subject: [PATCH 003/587] Can load experiment before creating view BUG=67428352 Change-Id: Ie164ec4d131d796aeb521433ababd2d68f07fd6f PiperOrigin-RevId: 190824460 --- .../experiment/ExperimentDetailsFragment.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java index 5904b748..3afb34b5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java @@ -98,6 +98,7 @@ import io.reactivex.Completable; import io.reactivex.functions.Consumer; +import io.reactivex.subjects.BehaviorSubject; /** * A fragment to handle displaying Experiment details, runs and labels. @@ -120,6 +121,7 @@ public class ExperimentDetailsFragment extends Fragment private String mExperimentId; private Experiment mExperiment; + private BehaviorSubject mLoadedExperiment = BehaviorSubject.create(); private ScalarDisplayOptions mScalarDisplayOptions; private boolean mIncludeArchived; private BroadcastReceiver mBroadcastReceiver; @@ -253,7 +255,18 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mDetails = (RecyclerView) view.findViewById(R.id.details_list); mDetails.setLayoutManager(new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL, /* don't reverse layout */ false)); - mAdapter = new DetailsAdapter(this, savedInstanceState); + DetailsAdapter adapter = new DetailsAdapter(this, savedInstanceState); + mLoadedExperiment.subscribe(experiment -> { + boolean includeInvalidRuns = false; + adapter.setScalarDisplayOptions(mScalarDisplayOptions); + adapter.setData(experiment, + experiment.getTrials(mIncludeArchived, includeInvalidRuns)); + if (mActiveTrialId != null) { + adapter.addActiveRecording(experiment.getTrial(mActiveTrialId)); + } + }); + mAdapter = adapter; + mDetails.setAdapter(mAdapter); mEmptyView = (TextView) view.findViewById(R.id.empty_list); @@ -278,12 +291,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, } public void loadExperimentData(final Experiment experiment) { - boolean includeInvalidRuns = false; - mAdapter.setScalarDisplayOptions(mScalarDisplayOptions); - mAdapter.setData(experiment, experiment.getTrials(mIncludeArchived, includeInvalidRuns)); - if (mActiveTrialId != null) { - mAdapter.addActiveRecording(experiment.getTrial(mActiveTrialId)); - } + mLoadedExperiment.onNext(experiment); } public void onStartRecording(String trialId) { From ca772c8854340e04316855bbcf540284fe8a4c8e Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:32:56 -0700 Subject: [PATCH 004/587] Merge "First use of correct overflow style" PiperOrigin-RevId: 190824471 --- .../whistlepunk/project/ExperimentListFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java index aa3c05bb..85bde1a4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java @@ -30,6 +30,7 @@ import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.text.format.DateFormat; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -470,7 +471,8 @@ private void bindExperiment(final ViewHolder holder, final ExperimentListItem it holder.menuButton.setOnClickListener(v -> { int position = mItems.indexOf(item); Context context = holder.menuButton.getContext(); - PopupMenu popup = new PopupMenu(context, holder.menuButton); + PopupMenu popup = new PopupMenu(context, holder.menuButton, Gravity.NO_GRAVITY, + R.attr.actionOverflowMenuStyle, 0); popup.getMenuInflater().inflate(R.menu.menu_experiment_overview, popup.getMenu()); popup.getMenu().findItem(R.id.menu_item_archive).setVisible( !overview.isArchived); From 58da438c96865c341ca702ee7027be4853f5f52e Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:03 -0700 Subject: [PATCH 005/587] Merge "Add new archive/unarchive toggle strings Add string for snapshot button description" PiperOrigin-RevId: 190824487 --- .../src/main/res/values/strings.xml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml index 65cfa3ec..9ded0242 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml @@ -1376,7 +1376,7 @@ Permissions notice: selected - Edit photo with... + Edit photo with… Show Perf Tracker Debug Screen @@ -1408,6 +1408,18 @@ Permissions notice: Open Settings + + Show archived experiments + + + Hide archived experiments + + + Hide archived recordings + + + Sensor snapshot + From 726a0ea31b7f40d1ad20bea8358010ea72222d73 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:08 -0700 Subject: [PATCH 006/587] Merge "Better debug strings for labels, for pretty-printing" PiperOrigin-RevId: 190824496 --- .../whistlepunk/filemetadata/Label.java | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java index dc4353b9..1632bc65 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java @@ -72,7 +72,7 @@ public static Label newLabelWithValue(long creationTimeMs, int type, MessageNano return result; } - public static Label fromUuidAndValue(long creationTimeMs, String uuid, int type, + public static Label fromUuidAndValue(long creationTimeMs, String uuid, int type, MessageNano data) { Label result = new Label(creationTimeMs, uuid, type); result.setLabelProtoData(data); @@ -166,7 +166,7 @@ public long getCreationTimeMs() { // You cannot edit the timestamp of some labels, like Snapshot and Trigger labels. public boolean canEditTimestamp() { return (mLabel.type != GoosciLabel.Label.SNAPSHOT && mLabel.type != - GoosciLabel.Label.SENSOR_TRIGGER); + GoosciLabel.Label.SENSOR_TRIGGER); } public String getCaptionText() { @@ -285,7 +285,41 @@ public void deleteAssets(Context context, String experimentId) { @Override public String toString() { - return mLabel.labelId + ": time: " + mLabel.timestampMs + ", type:" + mLabel.type; + return mLabel.labelId + + ": time: " + + mLabel.timestampMs + + ", type:" + + getDebugTypeString() + + ", data: " + + getDebugLabelValue(); + } + + private String getDebugTypeString() { + switch (mLabel.type) { + case GoosciLabel.Label.TEXT: + return "TEXT"; + case GoosciLabel.Label.PICTURE: + return "PICTURE"; + case GoosciLabel.Label.SENSOR_TRIGGER: + return "TRIGGER"; + case GoosciLabel.Label.SNAPSHOT: + return "SNAPSHOT"; + } + return "???"; + } + + private Object getDebugLabelValue() { + switch (mLabel.type) { + case GoosciLabel.Label.TEXT: + return getTextLabelValue(); + case GoosciLabel.Label.PICTURE: + return getPictureLabelValue(); + case GoosciLabel.Label.SENSOR_TRIGGER: + return getSensorTriggerLabelValue(); + case GoosciLabel.Label.SNAPSHOT: + return getSnapshotLabelValue(); + } + return "unknown type"; } private static void throwLabelValueException(String protoToCreate, int actualType) { From 50f24960e06909444bbf6484116b74c771a2619e Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:14 -0700 Subject: [PATCH 007/587] Photo library -> photo gallery BUG=67951946 Change-Id: I0150f963b02171b5c607970433d71754fdaa04ed PiperOrigin-RevId: 190824510 --- .../whistlepunk_library/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml index 9ded0242..41be3cb4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml @@ -1403,7 +1403,7 @@ Permissions notice: The camera cannot be used because Science Journal does not have permission to access it. - Your photo library cannot be used because Science Journal does not have permission to access it. + Your photo gallery cannot be used because Science Journal does not have permission to access it. Open Settings From 4ae950dbc751d00931ab7e57c1ff4ea913a14053 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:20 -0700 Subject: [PATCH 008/587] Update snapshot button string and add longclick tooltip FIXES=67950999 Change-Id: I39bc22fb90bc42b31013ad55258808c89cdfac0c PiperOrigin-RevId: 190824520 --- .../whistlepunk/ControlBarController.java | 33 +++++++++++++++++++ .../main/res/layout/observe_action_bar.xml | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java index 008bd48f..4b157c15 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java @@ -16,14 +16,21 @@ package com.google.android.apps.forscience.whistlepunk; import android.app.FragmentManager; +import android.content.Context; import android.content.Intent; import android.content.res.Resources; +import android.graphics.Rect; import android.net.Uri; import android.support.design.widget.Snackbar; +import androidx.core.view.GravityCompat; +import androidx.core.view.ViewCompat; +import android.util.Log; +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.TextView; +import android.widget.Toast; import com.jakewharton.rxbinding2.view.RxView; @@ -53,6 +60,32 @@ public void attachSnapshotButton(View snapshotButton) { .flatMapSingle(status -> snapshotter.addSnapshotLabel(mExperimentId, status)) .subscribe(label -> singleton.onLabelsAdded().onNext(label)); }); + // Adapted from TabLayout.java + // TODO: Replace with TooltipCompat#setTooltipText after O update b/67935835 + snapshotButton.setOnLongClickListener(view -> { + final int[] screenPos = new int[2]; + final Rect displayFrame = new Rect(); + view.getLocationOnScreen(screenPos); + view.getWindowVisibleDisplayFrame(displayFrame); + + final Context context = view.getContext(); + final int width = view.getWidth(); + final int height = view.getHeight(); + int referenceX = screenPos[0] + width / 2; + + if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_LTR) { + final int screenWidth = context.getResources().getDisplayMetrics().widthPixels; + referenceX = screenWidth - referenceX; // mirror + } + + Toast cheatSheet = Toast.makeText(context, + context.getResources().getString(R.string.snapshot_button_description), + Toast.LENGTH_SHORT); + cheatSheet.setGravity(Gravity.TOP | GravityCompat.END, referenceX, + screenPos[1] - (int) (height * 1.5)); + cheatSheet.show(); + return true; + }); } private void attachAddButton(Observable recordingState, diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/observe_action_bar.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/observe_action_bar.xml index d74b3e65..834079ef 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/observe_action_bar.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/observe_action_bar.xml @@ -38,7 +38,7 @@ android:id="@+id/snapshot_button" android:layout_width="@dimen/accessibility_touch_target_min_size" android:layout_height="@dimen/accessibility_touch_target_min_size" - android:contentDescription="@string/snapshot_button_text" + android:contentDescription="@string/snapshot_button_description" android:src="@drawable/snapshot_icon" android:layout_gravity="center" android:background="?attr/selectableItemBackgroundBorderless" From bf6bdab67f51d2026791d6b2f18688b3a489fc1c Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:28 -0700 Subject: [PATCH 009/587] Merge "Begin collecting dagger-provided services into AppServices" PiperOrigin-RevId: 190824535 --- .../forscience/whistlepunk/AppServices.java | 53 +++++++++++++++++++ .../forscience/whistlepunk/MainActivity.java | 2 +- .../whistlepunk/RecordFragment.java | 4 +- .../whistlepunk/WhistlePunkApplication.java | 53 +++++++++++-------- .../ManageDevicesRecyclerFragment.java | 2 +- .../FeatureDiscoveryProvider.java | 11 ++++ .../feedback/FeedbackProvider.java | 1 + 7 files changed, 101 insertions(+), 25 deletions(-) create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java new file mode 100644 index 00000000..9532e26e --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java @@ -0,0 +1,53 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.forscience.whistlepunk; + +import com.google.android.apps.forscience.whistlepunk.analytics.UsageTracker; +import com.google.android.apps.forscience.whistlepunk.featurediscovery.FeatureDiscoveryProvider; +import com.google.android.apps.forscience.whistlepunk.feedback.FeedbackProvider; +import com.squareup.leakcanary.RefWatcher; + +public interface AppServices { + AppServices STUB = new AppServices() { + @Override + public RefWatcher getRefWatcher() { + return RefWatcher.DISABLED; + } + + @Override + public UsageTracker getUsageTracker() { + return UsageTracker.STUB; + } + + @Override + public FeatureDiscoveryProvider getFeatureDiscoveryProvider() { + return FeatureDiscoveryProvider.STUB; + } + + @Override + public FeedbackProvider getFeedbackProvider() { + return FeedbackProvider.STUB; + } + }; + + RefWatcher getRefWatcher(); + + UsageTracker getUsageTracker(); + + FeatureDiscoveryProvider getFeatureDiscoveryProvider(); + + FeedbackProvider getFeedbackProvider(); +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java index d14f19e6..bb54e858 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java @@ -96,7 +96,7 @@ protected void onCreate(Bundle savedInstanceState) { mNavigationView.getMenu().removeItem(R.id.dev_testing_options); } - mFeedbackProvider = WhistlePunkApplication.getFeedbackProvider(this); + mFeedbackProvider = WhistlePunkApplication.getAppServices(this).getFeedbackProvider(); Bundle extras = getIntent().getExtras(); int selectedNavItemId = R.id.navigation_item_experiments; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java index b2b64b54..6ffeef91 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java @@ -224,8 +224,8 @@ public void onCreate(Bundle savedInstanceState) { mScalarDisplayOptions = new ScalarDisplayOptions(); mHandler = new Handler(this); - mFeatureDiscoveryProvider = WhistlePunkApplication.getFeatureDiscoveryProvider( - getActivity()); + mFeatureDiscoveryProvider = + WhistlePunkApplication.getAppServices(getActivity()).getFeatureDiscoveryProvider(); setHasOptionsMenu(true); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java index deca0f09..26018fbb 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java @@ -35,9 +35,10 @@ * Application subclass holding shared objects. */ public abstract class WhistlePunkApplication extends Application { - private RefWatcher mRefWatcher; + // TODO: create directly in subclasses, rather than dagger injection + @Inject UsageTracker mUsageTracker; @@ -53,33 +54,43 @@ public abstract class WhistlePunkApplication extends Application { @Inject PerfTrackerProvider mPerfTrackerProvider; - public static RefWatcher getRefWatcher(Context context) { - WhistlePunkApplication app = (WhistlePunkApplication) context.getApplicationContext(); - return app.mRefWatcher; - } + private AppServices mAppServices = new AppServices() { + @Override + public RefWatcher getRefWatcher() { + return mRefWatcher; + } - public static UsageTracker getUsageTracker(Context context) { - if (canGetUsageTracker(context)) { - // Don't try to track usage when testing - return UsageTracker.STUB; + public UsageTracker getUsageTracker() { + return mUsageTracker; } - WhistlePunkApplication app = (WhistlePunkApplication) context.getApplicationContext(); - return app.mUsageTracker; - } - private static boolean canGetUsageTracker(Context context) { - return context == null - || !(context.getApplicationContext() instanceof WhistlePunkApplication); + @Override + public FeatureDiscoveryProvider getFeatureDiscoveryProvider() { + return mFeatureDiscoveryProvider; + } + + @Override + public FeedbackProvider getFeedbackProvider() { + return mFeedbackProvider; + } + }; + + public static AppServices getAppServices(Context context) { + if (hasAppServices(context)) { + WhistlePunkApplication app = (WhistlePunkApplication) context.getApplicationContext(); + return app.mAppServices; + } else { + return AppServices.STUB; + } } - public static FeatureDiscoveryProvider getFeatureDiscoveryProvider(Context context) { - WhistlePunkApplication app = (WhistlePunkApplication) context.getApplicationContext(); - return app.mFeatureDiscoveryProvider; + public static UsageTracker getUsageTracker(Context context) { + // TODO: use directly in callers? (There's a lot of them) + return getAppServices(context).getUsageTracker(); } - public static FeedbackProvider getFeedbackProvider(Context context) { - WhistlePunkApplication app = (WhistlePunkApplication) context.getApplicationContext(); - return app.mFeedbackProvider; + private static boolean hasAppServices(Context context) { + return context != null && context.getApplicationContext() instanceof WhistlePunkApplication; } public static Map getExternalSensorDiscoverers( diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java index 4a2c774a..20a0070b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java @@ -150,7 +150,7 @@ public void onDestroy() { super.onDestroy(); // Make sure we don't leak this fragment. - RefWatcher watcher = WhistlePunkApplication.getRefWatcher(getActivity()); + RefWatcher watcher = WhistlePunkApplication.getAppServices(getActivity()).getRefWatcher(); watcher.watch(this); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/featurediscovery/FeatureDiscoveryProvider.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/featurediscovery/FeatureDiscoveryProvider.java index ac8f0f7c..799522fd 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/featurediscovery/FeatureDiscoveryProvider.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/featurediscovery/FeatureDiscoveryProvider.java @@ -23,6 +23,17 @@ * An object which can show feature discovery to the user. */ public interface FeatureDiscoveryProvider { + public static FeatureDiscoveryProvider STUB = new FeatureDiscoveryProvider() { + @Override + public boolean isEnabled(Context context, String feature) { + return false; + } + + @Override + public void show(FragmentActivity activity, String feature, String tag) { + // do nothing + } + }; public static final String FEATURE_NEW_EXTERNAL_SENSOR = "fd_new_external_sensor"; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/feedback/FeedbackProvider.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/feedback/FeedbackProvider.java index 1a9b0cbf..3539eccc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/feedback/FeedbackProvider.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/feedback/FeedbackProvider.java @@ -22,6 +22,7 @@ * An object which can build up feedback to be sent for collection. */ public interface FeedbackProvider { + FeedbackProvider STUB = onSuccess -> onSuccess.success(true); /** * Called when user is requesting a feedback report get created. From b468128f9beef93a69e04afd013860f213039b98 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:32 -0700 Subject: [PATCH 010/587] Switch error to use Material style BUG=67950611 Change-Id: I956a354c8ab87c1c1394948e56fef24654282cb0 PiperOrigin-RevId: 190824544 --- .../experiment/NameExperimentDialog.java | 11 ++++++++--- .../main/res/layout/name_experiment_dialog.xml | 18 +++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java index dcacf18b..e856c78c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java @@ -23,6 +23,8 @@ import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.Nullable; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -49,7 +51,8 @@ interface OnExperimentTitleChangeListener { } private String mExperimentId; - private EditText mInput; + private TextInputEditText mInput; + private TextInputLayout mInputLayout; public static NameExperimentDialog newInstance(String experimentId) { NameExperimentDialog dialog = new NameExperimentDialog(); @@ -79,7 +82,8 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); ViewGroup rootView = (ViewGroup) LayoutInflater.from(getActivity()).inflate( R.layout.name_experiment_dialog, null); - mInput = (EditText) rootView.findViewById(R.id.title); + mInput = (TextInputEditText) rootView.findViewById(R.id.title); + mInputLayout = (TextInputLayout) rootView.findViewById(R.id.title_input_layout); mInput.setText(previousTitle); if (savedInstanceState == null) { mInput.selectAll(); @@ -98,13 +102,14 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { Button button = result.getButton(DialogInterface.BUTTON_POSITIVE); if (mInput.getText().toString().length() == 0) { if (getActivity() != null) { - mInput.setError(getActivity().getResources().getString( + mInputLayout.setError(getActivity().getResources().getString( R.string.empty_experiment_title_error)); } if (button != null) { button.setEnabled(false); } } else if (button != null) { + mInputLayout.setErrorEnabled(false); button.setEnabled(true); } }); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/name_experiment_dialog.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/name_experiment_dialog.xml index 9957dabc..81d5b078 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/name_experiment_dialog.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/name_experiment_dialog.xml @@ -17,9 +17,10 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> - + app:errorEnabled="true"> + + + + \ No newline at end of file From 1fdb06d9f457d9808c2fa30cebca97bb64ec604e Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:38 -0700 Subject: [PATCH 011/587] Ensure mEmptyView exists before the adapter references it FIXES=68255337 Change-Id: I7221002087eb03a8cb92aadea21a297193fe5fb4 PiperOrigin-RevId: 190824556 --- .../project/experiment/ExperimentDetailsFragment.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java index 3afb34b5..1f610d7f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java @@ -252,6 +252,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, actionBar.setHomeButtonEnabled(true); } + mEmptyView = (TextView) view.findViewById(R.id.empty_list); + mEmptyView.setText(R.string.empty_experiment); + mEmptyView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, null, + view.getResources().getDrawable(R.drawable.empty_run)); + mDetails = (RecyclerView) view.findViewById(R.id.details_list); mDetails.setLayoutManager(new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL, /* don't reverse layout */ false)); @@ -269,11 +274,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mDetails.setAdapter(mAdapter); - mEmptyView = (TextView) view.findViewById(R.id.empty_list); - mEmptyView.setText(R.string.empty_experiment); - mEmptyView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, null, - view.getResources().getDrawable(R.drawable.empty_run)); - // TODO: Because mScalarDisplayOptions are static, if the options are changed during the // time we are on this page it probably won't have an effect. Since graph options are // hidden from non-userdebug users, and not shown in the ExperimentDetails menu even when From 3993b9881a7d59779f1c82f4d8533cab99ce37f7 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:45 -0700 Subject: [PATCH 012/587] Merge "Dismiss popup when fragment is destroyed" PiperOrigin-RevId: 190824582 --- .../project/ExperimentListFragment.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java index 85bde1a4..fd6b4d38 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java @@ -133,6 +133,7 @@ public void onSaveInstanceState(Bundle outState) { @Override public void onDestroy() { + // TODO: Use RxEvent here mExperimentListAdapter.onDestroy(); super.onDestroy(); } @@ -355,6 +356,7 @@ public static class ExperimentListAdapter extends RecyclerView.Adapter mParentReference; private SnackbarManager mSnackbarManager = new SnackbarManager(); + private PopupMenu mPopupMenu = null; public ExperimentListAdapter(ExperimentListFragment parent, DataController dc) { mItems = new ArrayList<>(); @@ -471,16 +473,17 @@ private void bindExperiment(final ViewHolder holder, final ExperimentListItem it holder.menuButton.setOnClickListener(v -> { int position = mItems.indexOf(item); Context context = holder.menuButton.getContext(); - PopupMenu popup = new PopupMenu(context, holder.menuButton, Gravity.NO_GRAVITY, + mPopupMenu = new PopupMenu(context, holder.menuButton, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0); - popup.getMenuInflater().inflate(R.menu.menu_experiment_overview, popup.getMenu()); - popup.getMenu().findItem(R.id.menu_item_archive).setVisible( + mPopupMenu.getMenuInflater().inflate(R.menu.menu_experiment_overview, + mPopupMenu.getMenu()); + mPopupMenu.getMenu().findItem(R.id.menu_item_archive).setVisible( !overview.isArchived); - popup.getMenu().findItem(R.id.menu_item_unarchive).setVisible( + mPopupMenu.getMenu().findItem(R.id.menu_item_unarchive).setVisible( overview.isArchived); - popup.getMenu().findItem(R.id.menu_item_delete).setEnabled( + mPopupMenu.getMenu().findItem(R.id.menu_item_delete).setEnabled( overview.isArchived); - popup.setOnMenuItemClickListener(menuItem -> { + mPopupMenu.setOnMenuItemClickListener(menuItem -> { if (menuItem.getItemId() == R.id.menu_item_archive) { setExperimentArchived(overview, position, true); return true; @@ -494,7 +497,8 @@ private void bindExperiment(final ViewHolder holder, final ExperimentListItem it } return false; }); - popup.show(); + mPopupMenu.setOnDismissListener(menu -> mPopupMenu = null); + mPopupMenu.show(); }); if (!TextUtils.isEmpty(overview.imagePath)) { @@ -616,6 +620,9 @@ private void removeExperiment(int index) { public void onDestroy() { mSnackbarManager.onDestroy(); + if (mPopupMenu != null) { + mPopupMenu.dismiss(); + } } } From 77eb7168a13bfc9f9b882298afc582dc6553184a Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:33:57 -0700 Subject: [PATCH 013/587] Import translations. DO NOT MERGE Change-Id: I362ed91dd238b6b3b4038bad69976160e85f280d Auto-generated-cl: translation import PiperOrigin-RevId: 190824611 --- .../src/main/res/values-ar/strings.xml | 14 ++-- .../src/main/res/values-b+sr+Latn/strings.xml | 14 ++-- .../src/main/res/values-bg/strings.xml | 14 ++-- .../src/main/res/values-bs-rBA/strings.xml | 14 ++-- .../src/main/res/values-ca/strings.xml | 68 ++++++++++--------- .../src/main/res/values-cs/strings.xml | 14 ++-- .../src/main/res/values-da/strings.xml | 52 +++++++------- .../src/main/res/values-de/strings.xml | 14 ++-- .../src/main/res/values-el/strings.xml | 14 ++-- .../src/main/res/values-en-rAU/strings.xml | 14 ++-- .../src/main/res/values-en-rGB/strings.xml | 14 ++-- .../src/main/res/values-en-rIN/strings.xml | 14 ++-- .../src/main/res/values-es-rUS/strings.xml | 14 ++-- .../src/main/res/values-es/strings.xml | 14 ++-- .../src/main/res/values-fi/strings.xml | 14 ++-- .../src/main/res/values-fr/strings.xml | 14 ++-- .../src/main/res/values-hi/strings.xml | 16 +++-- .../src/main/res/values-hr/strings.xml | 14 ++-- .../src/main/res/values-hu/strings.xml | 14 ++-- .../src/main/res/values-in/strings.xml | 16 +++-- .../src/main/res/values-it/strings.xml | 14 ++-- .../src/main/res/values-iw/strings.xml | 24 ++++--- .../src/main/res/values-ja/strings.xml | 14 ++-- .../src/main/res/values-ko/strings.xml | 14 ++-- .../src/main/res/values-lt/strings.xml | 14 ++-- .../src/main/res/values-lv/strings.xml | 14 ++-- .../src/main/res/values-nb/strings.xml | 14 ++-- .../src/main/res/values-nl/strings.xml | 14 ++-- .../src/main/res/values-pl/strings.xml | 16 +++-- .../src/main/res/values-pt-rPT/strings.xml | 14 ++-- .../src/main/res/values-pt/strings.xml | 14 ++-- .../src/main/res/values-ro/strings.xml | 14 ++-- .../src/main/res/values-ru/strings.xml | 16 +++-- .../src/main/res/values-sk/strings.xml | 18 +++-- .../src/main/res/values-sl/strings.xml | 14 ++-- .../src/main/res/values-sr/strings.xml | 14 ++-- .../src/main/res/values-sv/strings.xml | 14 ++-- .../src/main/res/values-th/strings.xml | 16 +++-- .../src/main/res/values-tl/strings.xml | 14 ++-- .../src/main/res/values-tr/strings.xml | 14 ++-- .../src/main/res/values-uk/strings.xml | 14 ++-- .../src/main/res/values-vi/strings.xml | 14 ++-- .../src/main/res/values-zh-rCN/strings.xml | 14 ++-- .../src/main/res/values-zh-rHK/strings.xml | 14 ++-- .../src/main/res/values-zh-rTW/strings.xml | 14 ++-- 45 files changed, 463 insertions(+), 283 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml index c7598d64..207d074e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml @@ -200,7 +200,7 @@ "تميل الأجسام إلى السكون أو الاستمرار في الحركة إذا كانت متحركة، وهو ما نُطلق عليه اسم القصور الذاتي. ويعبّر القانون الأول لنيوتن عن هذه الفكرة حيث ينص على أنّ الجسم يظل على حالته من الحركة أو السكون ما لم تؤثر عليه قوة غير متوازنة. \n\nعندما تؤدي القوة غير المتوازنة إلى تحريك الجسم قليلاً، نقول إن الجسم يتسارع: أي تتغير سرعته، فإما تزداد السرعة أو تقل أو يغيّر اتجاهه. يُقاس التسارع بالتغير في السرعة (متر/ث) في الوقت أو بالمتر في الثانية المربعة (م/ث²). \n\nيتوفر في الهاتف جهاز لقياس التغييرات في الحركة وهو مقياس التسارع. وداخل جهاز التسارع، ثمة كتل صغيرة معلقة تتحرك بطريقة غير ثابتة. تؤدي تغيرات الحركة إلى إزاحة هذه الكتل، كما يحدث عندما تميل رأسك للأمام أثناء ركوب سيارة تتوقف فجأة. ومن خلال قياس تغيرات الإزاحة الدقيقة الناتجة عن القصور الذاتي، يمكن لمقياس التسارع في الهاتف اكتشاف تغيرات الحركة والاتجاه، ويُعدّ ذلك مفيدًا لتحويل الشاشة من الوضع الأفقي إلى الوضع العمودي وتشغيل الألعاب على الهاتف والكثير غير ذلك." "ربما لاحظت التسارع المستمر للمحور ع حتى مع بقاء الهاتف على المنضدة من دون تحريكه. هذا هو التسارع الذي نشعر به على سطح الأرض نتيجة سحب الجاذبية، ويصل تقريبًا إلى 9,8 م/ث²." "تصدر الأصوات عن طريق الاهتزاز. على سبيل المثال، يصدر صوتك نتيجة اهتزاز الحبال الصوتية في الحلق. وتؤدي هذه الاهتزازات إلى تكوين مناطق متتالية من ضغط الهواء المرتفع والمنخفض الذي يتحرّك نحو الخارج، كما يحدث عند اتساع موجة دائرية نتيجة إلقاء حصاة في بركة مياه." - "يمكن وصف جميع الأصوات باستخدام التردد والشدة. \n\nنقيس الشدة هنا في Science Journal بوحدة الديسيبل. وتعتمد الشدة أو ارتفاع الصوت على المسافة التي يتحرك فيها الجسم المهتز كل مرة يهتز فيها، ونسمع أصواتًا أكثر شدة مع زيادة ارتفاع الصوت. \n\nتردد موجة الصوت (يسمى أيضًا الحدة أو درجة الصوت) يساوي معدل الاهتزاز. فكلما كان اهتزاز الجسم أسرع، كانت حدة الصوت الناتج أعلى. لا يقيس Science Journal التردد بل يقيس ارتفاع الصوت فقط. \n\nشدة أهدأ صوت يمكن أن تكتشفه أذن الإنسان العادي هي 0 ديسيبل. وشدة المحادثة العادية 60 ديسيبل. أما الأصوات الأعلى من 140 ديسيبل فتسبب ألمًا في أذن الإنسان. ليس من الضروري أن تكون الأصوات مؤلمة لكي تكون ضارة، فالتعرض المستمر لأصوات شدتها 90 ديسيبل، أي صوت المكنسة الكهربائية مثلاً، يمكن أن يؤدي في النهاية إلى فقدان السمع. \n\nيعتمد مقياس الديسيبل على اللوغاريتم، لذا فهو مربك بعض الشيء: فشدة مصدر الصوت التي مقدارها 40 ديسيبل ليست ضعف شدة 20 ديسيبل، بل أشد منها بـ 100 مرة. وبالمثل، إذا كانت شدة الصوت الصادر من ساعة تنبيه واحدة هي 70 ديسيبل، فلا تكون شدة الصوت الصادر من ساعتي تنبيه 140 ديسيبل بل 73 ديسيبل. كما ذكرنا سابقًا، إنه مقياس غريب. \n\nتبلغ شدة صوت حفيف الأوراق 10 ديسيبل \nتبلغ شدة الهمس على بعد 5 أقدام 20 ديسيبل \nتبلغ شدة الهمس 30 ديسيبل \nتبلغ شدة صوت سقوط المطر 50 ديسيبل \nتبلغ شدة المحادثة العادية 60 ديسيبل \nتبلغ شدة صوت الخلاط 90 ديسيبل \nتبلغ شدة سيارة بدون كاتم صوت العادم 100 ديسيبل \nتبلغ شدة الصراخ في الأذن 110 ديسيبل \nتبلغ شدة الرعد 120 ديسيبل \nتبلغ شدة صوت آلة ثقب الصخور 130 ديسيبل \nتبلغ شدة صوت إقلاع الطائرة 140 ديسيبل" + "يمكن قياس كل الأصوات من حيث تردّدها وكثافتها. \n\nإنّ كثافة الصوت هي العامل الذي تقيسه هنا باستخدام تطبيق Science Journal بوحدة القياس ديسيبل. وتعتمد كثافة الصوت أو جهارته على المسافة التي يجتازها الجسم المهتز مع كل اهتزاز، فنحن نسمع الكثافة الأكبر كارتفاع في جهارة الصوت. \n\nأما التردّد (المُسمى أيضًا حدّة الصوت أو النبرة) لموجة الصوت، فهو يساوي معدل الاهتزاز. كلّما كان اهتزاز الجسم سريعًا، ارتفعت حدّة الصوت الناتج منه. لكن تطبيق Science Journal لا يقيس التردّد، إنما الجهارة فقط. \n\nوتجدر الإشارة إلى أنّه تمّ تصميم الميكروفون في جهازك لكي يستشعر بدقة الاختلافات في موجات الصوت مع مرور الوقت، ولكنه لا يستشعر الحجم المطلق لكل موجة. لقد حاولنا اختيار رمز من المرجّح أن يُنتج أرقامًا مشابهة للأرقام المرجعية المعروضة أدناه، ولكن قد يسجّل كلّ جهاز أرقامًا أعلى أو أقل باستمرار. يلجأ العلماء في العادة إلى معايرة مستشعر مشابه بالذي نستخدمه إلى قياس معروف. يمكنك حاليًا الاستعانة بـ Science Journal لمعرفة ما إذا كان صوت القطار في رحلتك القادمة أعلى من صوت حفل موسيقى الروك القادم، شرط استخدام الهاتف نفسه في الحدثين. \n\nتجدر الإشارة أيضًا إلى وجود اختلافات مهمة بين \"كثافة الصوت\" و\"مستوى كثافة الصوت و\"ضغط الصوت\". إنّنا نتعامل مع هذه المفاهيم بالطريقة نفسها ولكن إذا أردت التعمّق في التفاصيل، يمكنك مراجعة الكثير من المصادر المتوفرة على الإنترنت بشأن الاختلافات. \n\nإن الحد الأدنى للصوت الذي تستطيع الأذن البشرية العادية سماعه هو 0 ديسيبل. وتعادل المحادثة العادية 60 ديسيبل، وتُعتبر الأصوات التي تتخطى 140 ديسيبل مؤلمة للأذن البشرية. ولكن ليس بالضرورة أن يكون الصوت مؤلمًا ليكون مضرًّا. إن التعرّض بشكل متواصل لأصوات تبلغ 90 ديسيبل، ما يعادل ارتفاع صوت المكنسة الكهربائية، قد يؤدي في النهاية إلى فقدان السمع. \n\nإن مقياس الديسيبل لوغاريتمي، لذا فهو معقّد بعض الشيء: فالصوت الذي تبلغ كثافته 40 ديسيبل لا يشكّل ضعف كثافة صوت تبلغ كثافته 20 ديسبيل، ولكنه 100 مرة أكثر كثافة. وكذلك، إذا كان رنين المنبّه يُصدر كثافة 70 ديسيبل، لن يُصدر رنين منبّهين 140 ديسيبل، بل 73 ديسيبل. كما سبق وذكرنا، إنه مقياس غريب بعض الشيء. \n\nصوت حفيف الأوراق: 10 ديسيبل \nالهمس على مسافة 5 أقدام: 20 ديسيبل \nالهمس الخافت: 30 ديسيبل \nصوت هطول المطر: 50 ديسيبل \nمحادثة عادية: 60 ديسيبل \nصوت الخلاط: 90 ديسيبل \nصوت سيارة بدون كاتم صوت العادم: 100 ديسيبل \nصياح في الأذن: 110 ديسيبل \nصوت الرعد: 120 ديسيبل \nصوت آلة ثقب الصخور: 130 ديسيبل \nصوت طائرة تقلع: 140 ديسبيل" "الدورة في الدقيقة هي مقياس تكرار الدوران حول محور ثابت في الدقيقة. \n\nفمع تحرّك الجزء الدوّار، يتم تدوير قرص وحدة الترميز:" "يؤدي ذلك إلى تكوّن فترات من الضوء والظلام على المستشعر ويتم تسجيلها في Science Journal كدورة." "إنّ البيانات المعروضة هنا ناتجة عن اتصال مستشعر خارجي بالهاتف عبر بلوتوث. \n\nتعرض القيمة النسبة المئوية للقراءة الأولية من وحدة التحكم الدقيقة مباشرةً. وهي عادة النسبة المئوية لانخفاض الفولطية في المستشعر." @@ -232,6 +232,7 @@ "المستشعر التالي: %s" "إضافة ملاحظة جديدة" "تم حذف الملاحظة" + "تمّ حذف التسجيل" "تراجع" "إضافة ملاحظة إلى هذا التسجيل" "إضافة ملاحظة مع صورة" @@ -430,7 +431,7 @@ "اختيار صورة" "تمّ التقاط الصورة في %s" "تمّ تحديدها" - "تعديل الصورة باستخدام..." + "تعديل الصورة باستخدام…" "عرض دُرج الأدوات" "توسيع دُرج الأدوات" "تصغير دُرج الأدوات" @@ -438,7 +439,10 @@ "إضافة ملاحظة نصّية" "معاينة الصور المباشرة" "لا يمكن استخدام الكاميرا، لأن Science Journal لا يملك الإذن للوصول إليها." - "لا يمكن استخدام مكتبة الصور، لأن Science Journal لا يملك الإذن للوصول إليها." - - + "لا يمكن استخدام معرض الصور لأنّ Science Journal لا يملك الإذن بالوصول إليها." + "فتح الإعدادات" + "إظهار التجارب المؤرشَفة" + "إخفاء التجارب المؤرشفة" + "إخفاء التسجيلات المؤرشَفة" + "لقطة المستشعر" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml index 08a4dd14..a3bac447 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml @@ -200,7 +200,7 @@ "Tela nastoje da miruju ili da nastave da kreću ako se već kreću. Ta osobina se naziva inercija. Ta pojava je definisana prvim Njutnovim zakonom: Svako telo ostaje u stanju relativnog mirovanja ili ravnomernog pravolinijskog kretanja sve dok ga delovanje ili dejstvo drugog tela ne prisili da to stanje promeni. \n\nKada se dejstvom neke sile utiče na to da se telo pomeri, kaže se da telo ubrzava: menja mu se brzina, bilo da se smanjuje ili povećava, ili mu se menja smer. Ubrzanje se definiše kao promena brzine (metri u sekundi) u jedinici vremena, odnosno po metrima u sekundi na kvadrat (m/s²). \n\nVaš telefon ima uređaj za merenje takvih promena kretanja – akcelerometar. Unutar akcelerometra se nalaze suspendovana tela male mase, koja mogu da se slobodno kreću. Promene u kretanju dovode do promene položaja tih tela – kao što vam glava klimne u kolima koja naglo zakoče. Merenjem tih suptilnih pomeranja koje izaziva inercija, akcelerometar u telefonu može da otkriva promene u kretanju i orijentaciji, što je korisno pri prebacivanju ekrana u vertikalni ili horizontalni režim, igranju igara na telefonu i drugim situacijama." "Verovatno ste primetili postojano ubrzanje po Z osi, čak i dok telefon nepomično leži na stolu. To je ubrzanje koje se oseti na površini Zemlje zbog dejstva gravitacione sile od oko 9,8 m/s²." "Zvukovi nastaju vibracijom. Vaš glas, na primer, nastaje vibracijom glasnih žica u grlu. Tim vibracijama se stvaraju naizmenične zone visokog i niskog vazdušnog pritiska koje se šire okolo – kao talasići od kamička bačenog u vodu." - "Svi zvukovi se mogu opisati pomoću svoje frekvencije i intenziteta. \n\nIntenzitet je ono što merite u Naučnom dnevniku, u decibelima (dB). Intenzitet ili jačina zvuka zavisi od rastojanja koje predmet koji vibrira prelazi pri svakoj vibraciji. Veći intenzitet čujemo kao veću jačinu zvuka. \n\nFrekvencija (odnosno intonacija ili ton) zvučnog talasa je brzina vibracije predmeta. Što brže objekt vibrira, to je intonacija proizvedenog zvuka veća. Naučni dnevnik ne meri frekvenciju, već samo jačinu zvuka. \n\nNajtiši zvuk koje prosečno ljudsko uho može da čuje se definiše kao 0 dB. Običan razgovor odgovara jačini od oko 60 dB, a zvuke iznad oko 140 dB ljudsko uho registruje kao bol. Dugotrajnije izlaganje zvucima od oko 90 dB, što je otprilike jačina zvuka usisivača, može da izazove gubitak sluha. \n\nDecibelska skala je logaritmička, tako da preračunavanje nije očigledno: Zvučni izvor jačine 40 dB nije dvostruko jači od onog od 20 dB – jači je 100 puta. Takođe, ako jedan budilnik zvoni jačinom od 70 dB, dva budilnika ne proizvode zvuk od 140 dB (mada tako izgleda), nego od 73 dB. Čudna je ta skala. \n\n10 dB – šuštanje lišća \n20 dB – šaputanje na 1,5 metara \n30 dB – tih šapat \n50 dB – kiša \n60 dB – normalan razgovor \n90 dB – blender \n100 dB – automobil bez auspuha \n110 dB – vikanje u uvo \n120 dB – grmljavina \n130 dB – pneumatski čekić \n140 dB – uzletanje aviona" + "Svi zvukovi se mogu opisati pomoću svoje frekvencije i intenziteta. \n\nIntenzitet je ono što merite u Naučnom dnevniku, u decibelima (dB). Intenzitet ili jačina zvuka zavisi od rastojanja koje predmet koji vibrira prelazi pri svakoj vibraciji. Veći intenzitet čujemo kao veću jačinu zvuka. \n\nFrekvencija (odnosno intonacija ili ton) zvučnog talasa je brzina vibracije predmeta. Što brže objekt vibrira, to je intonacija proizvedenog zvuka veća. Naučni dnevnik ne meri frekvenciju, već samo jačinu zvuka. \n\nTreba da znate da je mikrofon u vašem uređaju veoma osetljiv na razlike između zvučnih talasa tokom vremena, ali ne i na apsolutnu jačinu svakog talasa. Probali smo da napravimo sistem koji će najverovatnije davati referentne brojeve prikazane u nastavku, ali svaki zaseban uređaj će možda ujednačeno davati veće ili manje vrednosti. Naučnici obično kalibrišu ovakav senzor prema poznatoj vrednosti merenja. Za sada, Naučni dnevnik može da vam kaže da li je auspuh autobusa u kojem se vozite glasniji od rok svirke na koju idete sutra, ali samo ako u obe prilike nosite isti telefon. \n\nTreba znati i da postoje značajne razlike između „intenziteta zvuka“, „nivoa intenziteta zvuka“ i „pritiska zvuka“. Ovde ih tretiramo kao istu stvar, a ako vas zanima u čemu je razlika, na raspolaganju su vam brojni onlajn resursi. \n\nNajtiši zvuk koji prosečno ljudsko uho može da čuje se definiše kao 0 dB. Običan razgovor odgovara jačini od oko 60 dB, a zvuke iznad oko 140 dB ljudsko uho registruje kao bol. Međutim, zvuk ne mora da bude bolan da bi bio štetan. Dugotrajnije izlaganje zvucima od oko 90 dB, što je otprilike jačina zvuka usisivača, može da izazove gubitak sluha. \n\nDecibelska skala je logaritamska, tako da preračunavanje nije očigledno: Zvučni izvor jačine 40 dB nije dvostruko jači od onog od 20 dB – jači je 100 puta. Takođe, ako jedan budilnik zvoni jačinom od 70 dB, dva budilnika ne proizvode zvuk od 140 dB (mada tako izgleda), nego od 73 dB. Čudna je ta skala. \n\n10 dB – šuštanje lišća \n20 dB – šaputanje na 1,5 metar \n30 dB – tih šapat \n50 dB – kiša \n60 dB – normalan razgovor \n90 dB – blender \n100 dB – automobil bez auspuha \n110 dB – vikanje u uvo \n120 dB – grmljavina \n130 dB – pneumatski čekić \n140 dB – uzletanje aviona" "Broj obrtaja u minutu (o/min) je mera učestalosti rotiranja oko nepomične ose u minutu. \n\nPropeler vašeg senzora svojim okretanjem rotira disk kodera:" "To stvara periode svetlosti i tame na senzoru, koji se u Naučnom dnevniku registruju kao rotacija." "Ovde prikazani podaci potiču od komunikacije spoljnog senzora sa telefonom preko Bluetooth-a. \n\nVrednost pokazuje procenat neobrađenih podataka očitanih direktno sa mikrokontrolera. To je obično procenat pada napona na celom senzoru." @@ -232,6 +232,7 @@ "sledeći senzor: %s" "Dodajte novu belešku" "Beleška je izbrisana" + "Zabeleška je izbrisana" "Opozovi" "Dodajte belešku uz ovaj snimak" "Dodavanje slikovne beleške" @@ -430,7 +431,7 @@ "Izaberite sliku" "Slikano %s" "izabrano" - "Izmenite sliku pomoću..." + "Izmenite sliku koristeći…" "Prikaži fioku sa alatkama" "Proširi fioku sa alatkama" "Skupi fioku sa alatkama" @@ -438,7 +439,10 @@ "Dodaj tekstualnu belešku" "Prikaz uživo sa kamere" "Kamera ne može da se koristi jer Naučni dnevnik nema dozvolu da joj pristupi." - "Fototeka ne može da se koristi jer Naučni dnevnik nema dozvolu da joj pristupi." - - + "Galerija fotografija ne može da se koristi jer Naučni dnevnik nema dozvolu da joj pristupa." + "Otvori podešavanja" + "Prikaži arhivirane eksperimente" + "Sakrij arhivirane eksperimente" + "Sakrij arhivirane zabeleške" + "Snimak sa senzora" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml index e0a631cf..4a51ab7a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml @@ -200,7 +200,7 @@ "Телата имат свойството да останат в покой или да продължат да се движат, ако са в движение – това свойство се нарича инерция. Първият закон на Нютон изразява тази идея официално: Всяко тяло запазва състоянието си на движение или покой, докато външна сила не го изведе от това състояние. \n\nКогато върху тялото действа външна сила, то се ускорява: скоростта му се променя, като се увеличава или намалява, или като се променя посоката. Ускорението се измерва като промяна на скоростта (метра в секунда) във времето или метра в секунда на квадрат (м/сек²). \n\nТелефонът ви разполага с устройство за измерване на промяната в движението – акселерометър. В него има малки окачени маси, които се движат свободно. Промяната в движението кара тези маси да се местят, подобно да главата ви, която се накланя напред, когато пътувате в автомобил и той внезапно спре. Измервайки тези фини инерционни премествания, акселерометърът в телефона може да открива промени в движението и ориентацията, които са полезни при превключване на екрана от хоризонтален към вертикален режим, когато играете игри на телефона и в много други случаи." "Вероятно сте забелязали постоянно ускорение по оста Z, дори когато телефонът ви стои неподвижно върху повърхност. Това е ускорението, пораждано на повърхността на Земята от силата на гравитацията – приблизително 9,8 м/сек²." "Звуците представляват трептене на материята. Гласът ви например е резултат от трептенето на гласните струни в гърлото ви. Тези трептения създават променливи зони с високо и ниско налягане, които се разпространяват в окръжаващата среда – подобно на разширяващите се кръгове, които виждате, когато хвърлите камъче в езеро." - "Всички звуци могат да бъдат описани от гледна точка на тяхната честота и интензитет. \n\nИнтензитетът е това, което измервате с Научно списание в децибели (dB). Интензитетът (или силата на звука) се определя от разстоянието, изминавано от трептящо тяло при всяко трептене. Колкото по-голям е интензитетът, толкова по-силно се чува звукът. \n\nЧестотата (или височината на тона) на звуковата вълна е еквивалентна на честотата на трептене. Колкото по-голяма е тя, толкова по-голяма е височината на тона на получения звук. Научно списание не измерва честотата, а само силата на звука. \n\nНай-тихият звук, доловим от човешко ухо, се определя като 0 dB. Нормалният говор съответства на около 60 dB, а звуци около 140 dB са болезнени за човешкото ухо. Но не е задължително звуците да са болезнени, за да са вредни. Продължителното излагане на звуци от 90 dB, като звука от прахосмукачка, може да доведе до загуба на слуха. \n\nСкалата на децибелите е логаритмична, което я прави малко сложна. Например източник на звук от 40 dB не е два пъти по-силен от такъв от 20 dB – той е 100 пъти по-интензивен. Също така, ако един будилник излъчва звук от 70 dB, този от два будилника няма да е 140 dB, а 73 dB. Странна скала, както казахме. \n\n10 dB – шумолящи листа; \n20 dB – шепнене на разстояние от около 1,5 метра; \n30 dB – тих шепот; \n50 dB – дъжд; \n60 dB – нормален говор; \n90 dB – блендер; \n100 dB – автомобил без ауспух; \n110 dB – крещене в ухото; \n120 dB – гръм; \n130 dB – пневматичен чук; \n140 dB – излитащ самолет" + "Всички звуци могат да бъдат описани от гледна точка на тяхната честота и интензитет. \n\nИнтензитетът е това, което измервате с Научно списание в децибели (dB). Интензитетът (или силата на звука) се определя от разстоянието, изминавано от трептящо тяло при всяко трептене. Колкото по-голям е той, толкова по-силно се чува звукът. \n\nЧестотата (или височината на тона) на звуковата вълна е еквивалентна на честотата на трептене. Колкото по-голяма е тя, толкова по-голяма е височината на тона на получения звук. Научно списание не измерва честотата, а само силата на звука. \n\nВажно е да знаете, че микрофонът в устройството ви е много чувствителен към възникващите с течение на времето разлики в звуковите вълни, но не и към абсолютния размер на всяка вълна. Опитахме да изберем код, който е вероятно да доведе до стойности, подобни на референтните по-долу, но всяко отделно устройство може да отчита по-високи или по-ниски нива. Учените обикновено калибрират такива сензори до определена стойност. Засега с Научно списание можете да разберете дали даден влак е по-шумен от рок концерт, но само ако използвате един и същ телефон за двете измервания. \n\nВажно е също да знаете, че има значителна разлика между „интензитет на звука“, „ниво на интензитета на звука“ и „звуково налягане“. Тук ги приемаме за едно и също нещо, но ако искате да научите повече за разликите, има много онлайн ресурси, които можете да използвате за целта. \n\nНай-тихият звук, доловим от човешко ухо, се определя като 0 dB. Нормалният говор съответства на около 60 dB, а звуци около 140 dB са болезнени за човешкото ухо. Но не е задължително звуците да са болезнени, за да са вредни. Продължителното излагане на звуци от 90 dB, като звука от прахосмукачка, може да доведе до загуба на слуха. \n\nСкалата на децибелите е логаритмична, което я прави малко сложна. Например източник на звук от 40 dB не е два пъти по-силен от такъв от 20 dB – той е 100 пъти по-интензивен. Също така, ако един будилник излъчва звук от 70 dB, този от два будилника няма да е 140 dB, а 73 dB. Странна скала, както казахме. \n\n10 dB – шумолящи листа; \n20 dB – шепнене на разстояние от около 1,5 метра; \n30 dB – тих шепот; \n50 dB – дъжд; \n60 dB – нормален говор; \n90 dB – блендер; \n100 dB – автомобил без ауспух; \n110 dB – крещене в ухото; \n120 dB – гръм; \n130 dB – пневматичен чук; \n140 dB – излитащ самолет." "Оборот в минута (об/мин) е мерна единица за честота на въртене около фиксирана ос за една минута. \n\nКогато вятърната ви перка се върти, тя завърта диска на кодера:" "Това създава периоди на светлина и тъмнина върху сензора, които Научно списание регистрира като оборот." "Показаните тук данни са предадени от външен сензор до телефона ви през Bluetooth. \n\nСтойността показва процента необработени данни, прочетени директно от микроконтролера ви. Това обикновено е процентът на спад на напрежението в сензора." @@ -232,6 +232,7 @@ "следващ сензор: %s" "Добавете нова бележка" "Бележката е изтрита" + "Записът е изтрит" "Отмяна" "Добавете бележка към този запис" "Добавяне на снимка като бележка" @@ -430,7 +431,7 @@ "Избор на снимка" "Изображение, заснето на %s" "избрано" - "Редактиране на снимката чрез…" + "Редактиране на снимката чрез…" "Показване на слоя с инструменти" "Разгъване на слоя с инструменти" "Свиване на слоя с инструменти" @@ -438,7 +439,10 @@ "Добавяне на текст. бележка" "Изглед на живо от камерата" "Не можете да използвате камерата, тъй като Научно списание няма разрешение за достъп до нея." - "Не можете да използвате фотобиблиотеката, тъй като Научно списание няма разрешение за достъп до нея." - - + "Не можете да използвате фотогалерията, тъй като Научно списание няма разрешение за достъп до нея." + "Отваряне на настройките" + "Показване на архивираните експерименти" + "Скриване на архивираните експерименти" + "Скриване на архив. записи" + "Моментна снимка на сензорите" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml index 028f6e1d..b244a979 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml @@ -200,7 +200,7 @@ "Tijela imaju tendenciju mirovanja, odnosno gibanja ako su u pokretu – tu tendenciju nazivamo inercijom. Prvi Newtonov zakon tu ideju formalizira na sljedeći način: svako tijelo ostaje u stanju mirovanja ili gibanja sve dok neka sila ne dovede do promjene tog stanja. \n\nKad sila uzrokuje pomicanje tijela, kažemo da ono ubrzava: njegova se brzina mijenja, bilo da se radilo o ubrzavanju, usporavanju ili promjeni smjera. Ubrzanje se mjeri kao promjena brzine u jedinici vremena (metri u sekundi), odnosno u metrima u sekundi na kvadrat (m/s²). \n\nVaš telefon ima uređaj koji mjeri te promjene kretanja – akcelerometar. U akcelerometru se nalaze male mase koje se slobodno kreću. Uslijed promjena u gibanju te se mase pomiču, slično kao što se vaša glava pomiče unaprijed ako se nađete u automobilu koji naglo zakoči. Mjereći te suptilne inercijske pomake, akcelerometar u telefonu prepoznaje promjene u pokretima i smjeru, što je korisna značajka prilikom okretanja zaslona iz pejzažnog u portretni način rada, igranja igara na telefonu i prilikom drugih radnji." "Vjerojatno ste primijetili neprekidno ubrzanje po osi Z, čak i kad telefon leži na stolu. To je ubrzanje kojem smo izloženi zbog Zemljine gravitacije koja nas privlači brzinom od približno 9,8 m/s²." "Zvukove proizvode vibracije. Primjerice, vaš glas nastaje vibriranjem vaših glasnica. Te vibracije stvaraju različite zone visokog i niskog zračnog tlaka koje se šire prema van – slično kružnom širenju valova koji nastaju kada u jezero bacite kamenčić." - "Svi se zvukovi mogu opisati kroz svoju frekvenciju i intenzitet. \n\nPomoću Science Journala mjerite intenzitet u decibelima (dB). Intenzitet, odnosno glasnoća, ovisi o udaljenosti koju tijelo koje vibrira prijeđe prilikom svake vibracije; veći intenzitet doživljavamo kao veću glasnoću. \n\nFrekvencija (ili visina tona) zvučnog vala ekvivalent je brzine vibracije. Što brže tijelo vibrira, to je nastali zvuk viši. Science Journal ne mjeri frekvenciju, već samo glasnoću. \n\nNajtiši zvuk koji prosječno ljudsko uho može čuti definira se kao 0 dB. Uobičajeni razgovor odgovara vrijednosti od približno 60 dB, a zvukovi iznad 140 dB bolni su za ljudsko uho. Međutim, zvukovi ne moraju biti bolni da bi bili štetni. Neprekidna izloženost zvukovima od 90 dB – što otprilike odgovara buci koju proizvodi usisavač – može naposljetku dovesti do gubitka sluha. \n\nLjestvica decibela je logaritamska, zbog čega izvor zvuka od 40 dB nije dvostruko intenzivniji od 20 dB, već 100 puta intenzivniji. Osim toga, ako jedna budilica daje 70 dB, dvije budilice ne daju 140 dB, već 73 dB. Kao što smo rekli, to je osebujna ljestvica. \n\n10 dB: šuštanje lišća \n20 dB: šapat s 1,5 m \n30 dB: tihi šapat \n50 dB: kiša \n60 dB: normalan razgovor \n90 dB: mikser \n100 dB: automobil bez ispušnog prigušivača \n110 dB: vikanje u uho \n120 dB: grmljavina \n130 dB: pneumatska bušilica \n140 dB: uzlijetanje zrakoplova" + "Svi se zvukovi mogu opisati kroz svoju frekvenciju i intenzitet. \n\nOvdje pomoću Science Journala mjerite intenzitet u decibelima (dB). Intenzitet, odnosno glasnoća, ovisi o udaljenosti koju tijelo koje vibrira prijeđe prilikom svake vibracije; veći intenzitet doživljavamo kao veću glasnoću. \n\nFrekvencija (ili visina tona) zvučnog vala ekvivalent je brzine vibriranja. Što brže tijelo vibrira, to je nastali zvuk viši. Science Journal ne mjeri frekvenciju, već samo glasnoću. \n\nVažno je napomenuti da je mikrofon u vašem uređaju dizajniran tako da bude vrlo osjetljiv na razlike u zvučnim valovima tijekom vremena, ali ne i na apsolutnu veličinu svakog vala. Pokušali smo odabrati kôd koji će vjerojatno generirati brojeve slične referentnim brojevima koji su navedeni ispod, no svaki uređaj može dati konzistentno veće ili manje brojeve. Znanstvenici takve senzore obično kalibriraju prema poznatim mjerenjima. Science Journal vam zasad može reći je li vaše sljedeće putovanje vlakom glasnije od sljedećeg rock koncerta, no samo ako ponesete telefon na ta mjesta. \n\nJoš jedna bitna napomena: postoje važne razlike između \"intenziteta zvuka\", \"razine intenziteta zvuka\" i \"tlaka zvuka\". Ovdje ih tretiramo kao istu stvar, no ako želite produbiti svoja znanja, dostupni su brojni online resursi o njihovim razlikama. \n\nNajtiši zvuk koji prosječno ljudsko uho može čuti definira se kao 0 dB. Uobičajeni razgovor odgovara vrijednosti od približno 60 dB, a zvukovi iznad 140 dB bolni su za ljudsko uho. Međutim, zvukovi ne moraju biti bolni da bi bili štetni. Neprekidna izloženost zvukovima od 90 dB – što otprilike odgovara buci koju proizvodi usisavač – može u konačnici dovesti do gubitka sluha. \n\nLjestvica decibela logaritamska je, što je čini pomalo osebujnom: izvor zvuka od 40 dB nije dvostruko intenzivniji od 20 dB, već 100 puta intenzivniji. Osim toga, ako jedna budilica daje 70 dB, dvije budilice ne daju 140 dB, već 73 dB. Kao što smo rekli, to je neobična ljestvica. \n\n10 dB: šuštanje lišća \n20 dB: šapat na 1,5 m \n30 dB: tihi šapat\n50 dB: kiša \n60 dB: normalan razgovor \n90 dB: mikser \n100 dB: automobil bez prigušivača \n110: vikanje u uho \n120 dB: grmljavina \n130 dB: pneumatska bušilica \n140 dB: uzlijetanje zrakoplova" "Broj okretaja u minuti (o/min) mjera je frekvencije okretanja oko fiksne osi u jednoj minuti. \n\nKako se okreće, vjetromjer okreće disk kodera:" "Tako nastaju razdoblja osvijetljenosti i zatamnjenja na senzoru, što Science Journal registrira kao okretaj." "Ovdje prikazani podaci rezultat su komunikacije vanjskog senzora s vašim telefonom putem Bluetooth veze. \n\nVrijednost prikazuje postotak izravnog neobrađenog očitanja s mikrokontrolera. To je obično vrijednost pada napona na senzoru." @@ -232,6 +232,7 @@ "sljedeći senzor: %s" "Dodajte novu bilješku" "Napomena izbrisana" + "Snimka izbrisana" "Poništi" "Dodaj bilješku za tu snimku" "Snimanje fotografije za bilješku" @@ -430,7 +431,7 @@ "Odabir fotografije" "Datum snimanja fotografije: %s" "odabrano" - "Uredite fotografiju pomoću aplikacije..." + "Uredite fotografiju pomoću aplikacije…" "Prikaži ladicu s alatima" "Proširi ladicu s alatima" "Sažmi ladicu s alatima" @@ -438,7 +439,10 @@ "Dodaj tekstnu napomenu" "Prikaz slike s fotoaparata uživo" "Fotoaparat se ne može upotrijebiti jer Science Journal nema dopuštenje da mu pristupi." - "Zbirka fotografija ne može se upotrijebiti jer Science Journal nema dopuštenje da joj pristupi." - - + "Galerija fotografija ne može se upotrijebiti jer Science Journal nema dopuštenje da joj pristupi." + "Otvori postavke" + "Prikaži arhivirane eksperimente" + "Sakrij arhivirane eksperimente" + "Sakrij arhivirane snimke" + "Snimka senzora" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml index 60d0fc38..e4fa3e46 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml @@ -66,17 +66,17 @@ "Regle (80 mm)" "Afegeix una nota a l\'experiment" "Afegeix una nota a la prova" - "Inicia l\'enregistrament" - "Atura l\'enregistrament" + "Inicia la gravació" + "Atura la gravació" "Sensor desconegut" - "No s\'ha iniciat l\'enregistrament; torna-ho a provar" - "No s\'ha pogut iniciar l\'enregistrament perquè un sensor està desconnectat. Torna-ho a provar." + "No s\'ha iniciat la gravació; torna-ho a provar" + "No s\'ha pogut iniciar la gravació perquè un sensor està desconnectat. Torna-ho a provar." "No s\'estan enregistrant dades" "Un o més dels teus sensors no han enregistrat cap dada. Vols cancel·lar aquest enregistrament?" "Continua" - "Cancel·la l\'enregistrament" - "No s\'ha pogut aturar l\'enregistrament perquè un sensor està desconnectat. Vols cancel·lar-lo?" - "No s\'ha pogut aturar l\'enregistrament o desar la prova. Torna-ho a provar." + "Cancel·la la gravació" + "No s\'ha pogut aturar la gravació perquè un sensor està desconnectat. Vols cancel·lar-lo?" + "No s\'ha pogut aturar la gravació o desar la prova. Torna-ho a provar." "%1d s" "%1d min %2d s" "%1d segons" @@ -86,7 +86,7 @@ "%1d:%02d,%1d" "%1d:%02d:%02d,%1d" "%1$s, %2$s %3$s." - "Foto de l\'enregistrament" + "Foto de la gravació" "Previsualització de la nota fotogràfica" "Activitats" "Configuració" @@ -103,7 +103,7 @@ "No pots configurar opcions per a %1$s" "Configura les opcions per a %1$s" "Estableix la freqüència de l\'ona sinusoïdal en mil·lisegons:" - "Estableix la velocitat d\'enregistrament de l\'emissió de vídeo en fotogrames per segon:" + "Estableix la velocitat de gravació de l\'emissió de vídeo en fotogrames per segon:" "el gràfic" "Opcions del gràfic" "Opcions del gràfic" @@ -134,8 +134,8 @@ "Experiment nou" "L\'experiment s\'ha arxivat." "S\'ha tret l\'experiment de l\'arxiu." - "S\'ha arxivat l\'enregistrament." - "S\'ha tret l\'enregistrament de l\'arxiu." + "S\'ha arxivat la gravació." + "S\'ha tret la gravació de l\'arxiu." "%1s (arxivat)" "Títol de l\'experiment" "Descripció de l\'experiment" @@ -200,7 +200,7 @@ "Els objectes tenen tendència a quedar-se quiets o bé a continuar en moviment si s\'estan movent: és el que anomenem principi d\'inèrcia. La primera llei de Newton expressa aquesta idea formalment: un objecte manté el seu estat de moviment o de repòs llevat que hi actuï una força desequilibradora. \n\nQuan una força desequilibradora provoca que un objecte es desplaci, diem que l\'objecte accelera: la seva velocitat (o rapidesa) canvia, ja sigui perquè accelera, desaccelera o perquè canvia de direcció. L\'acceleració es mesura com un canvi de la velocitat en el temps, en metres per segon o en metres per segon al quadrat (m/s²). \n\nEl teu telèfon té un dispositiu per mesurar aquests canvis en el moviment: un acceleròmetre. Dins de l\'acceleròmetre hi ha petites masses suspeses que tenen llibertat per moure\'s. Els canvis en el moviment provoquen que aquestes masses es desplacin, de la mateixa manera que el teu cap té tendència a caure endavant quan vas en un cotxe que frena de cop. Mesurant aquests desplaçaments subtils causats per la inèrcia, l\'acceleròmetre d\'un telèfon pot detectar canvis en el moviment i en l\'orientació, fet que resulta útil per canviar la pantalla del mode horitzontal al vertical, per jugar a videojocs al telèfon i molt més." "Probablement has notat una acceleració persistent en l\'eix Z, fins i tot amb el telèfon sobre una taula. Aquesta és l\'acceleració que experimentem a la superfície de la Terra a causa de la força de la gravetat, d\'aproximadament 9,8 m/s²." "Els sons els produeixen les vibracions. La teva veu, per exemple, prové de les vibracions de les cordes vocals de la gola. Aquestes vibracions creen zones alternes de pressió d\'aire alta i baixa que es desplacen cap a l\'exterior, de la mateixa manera que s\'expandeixen les ones produïdes en llançar una pedra a l\'aigua." - "Tots els sons es poden descriure en termes de freqüència i intensitat. \n\nLa intensitat és el que mesures amb Science Journal, expressada en decibels (dB). La intensitat, o el volum, depèn de la distància que es mou un objecte quan vibra; com més alt és el volum, més intensitat sentim. \n\nLa freqüència (també altura tonal o to) d\'una ona sonora equival a la velocitat de la vibració. Com més ràpid vibri un objecte, més alta serà l\'altura tonal del so resultant. Science Journal només mesura el volum, no la freqüència. \n\nEl so més baix que pot detectar l\'oïda humana es defineix com a 0 dB. Una conversa normal correspon a 60 dB, i els sons que superen els 140 dB causen dolor a l\'oïda humana. Tot i això, els sons poden ser perjudicials encara que no causin dolor. L\'exposició contínua a sons superiors als 90 dB (d\'un volum aproximat al d\'un aspirador) pot acabar causant pèrdua d\'audició. \n\nL\'escala de decibels és logarítmica, cosa que pot generar confusions: una font sonora de 40 dB no és el doble d\'intensa que una de 20 dB, sinó que és 100 vegades més intensa. D\'altra banda, si l\'alarma d\'un despertador produeix 70 dB, les alarmes de dos despertadors no produeixen 140 dB, sinó 73 dB. Com ja hem dit, es tracta d\'una escala peculiar. \n\nRemor de fulles: 10 dB \nXiuxiueig a 1,5 metres: 20 dB \nXiuxiueig suau: 30 dB \nPluja: 50 dB \nConversa normal: 60 dB \nBatedora: 90 dB \nCotxe sense silenciador: 100 dB \nCrit a l\'orella: 110 dB \nTro: 120 dB \nTrepant amb percussor: 130 dB \nAvió enlairant-se: 140 dB" + "Es poden descriure tots els sons en termes de freqüència i intensitat. \n\nLa intensitat és el que mesures amb Science Journal, expressada en decibels (dB). La intensitat, o el volum, depèn de la distància que recorre un objecte cada cop que vibra; com més alt és el volum, més intensitat sentim. \n\nLa freqüència (també altura tonal o to) d\'una ona sonora equival a la velocitat de la vibració. Com més ràpid vibri un objecte, més alta serà l\'altura tonal del so resultant. Science Journal només mesura el volum, no la freqüència. \n\nÉs important que tinguis en compte que el micròfon del teu dispositiu és molt sensible a les diferències de les ones sonores al llarg del temps, però no a la mida absoluta de cada ona. Hem triat un codi capaç de produir uns resultats semblants als de referència, que es mostren més avall. Tot i això, és possible que cada dispositiu doni, de manera sistemàtica, uns resultats més alts o baixos. Els científics calibren els sensors d\'aquest tipus en funció d\'una mesura coneguda. Ara per ara, Science Journal només pot dir-te si el pròxim viatge en tren és més sorollós que el pròxim concert de rock si portes el mateix telèfon a tots dos llocs. \n\nUna altra cosa que cal saber és que hi ha diferències importants entre \"intensitat acústica\", \"nivell d\'intensitat acústica\" i \"pressió acústica\". Els tractem com si fossin el mateix, però si vols saber-ne més, a Internet trobaràs molta informació sobre les diferències. \n\nEl so més baix que pot detectar l\'oïda humana es defineix com a 0 dB. Una conversa normal correspon a 60 dB, i els sons que superen els 140 dB causen dolor a l\'oïda humana. Tot i això, els sons poden ser perjudicials encara que no causin dolor. L\'exposició contínua a sons superiors als 90 dB (d\'un volum aproximat al d\'un aspirador) pot acabar causant pèrdua d\'audició. \n\nL\'escala de decibels és logarítmica, cosa que pot generar confusions: una font sonora de 40 dB no és el doble d\'intensa que una de 20 dB, sinó que és 100 vegades més intensa. D\'altra banda, si l\'alarma d\'un despertador produeix 70 dB, les alarmes de dos despertadors no produeixen 140 dB, sinó 73 dB. Com ja hem dit, es tracta d\'una escala peculiar. \n\nRemor de fulles: 10 dB \nXiuxiueig a 1,5 metres: 20 dB \nXiuxiueig suau: 30 dB \nPluja: 50 dB \nConversa normal: 60 dB \nBatedora: 90 dB \nCotxe sense silenciador: 100 dB \nCrit a l\'orella: 110 dB \nTro: 120 dB \nTrepant amb percussor: 130 dB \nAvió enlairant-se: 140 dB" "Les rotacions per minut (RPM) indiquen la freqüència de rotació al voltant d\'un eix fix en un minut. \n\nA mesura que gira el molinet de vent, també ho fa el disc del codificador:" "Això crea períodes de llum i de foscor en el sensor que es registren a Science Journal com una rotació." "Les dades que es mostren aquí provenen de la comunicació d\'un sensor extern amb el teu telèfon per Bluetooth. \n\nEl valor mostra el percentatge de la lectura de dades sense processar directament des del microcontrolador. Aquest sol ser el percentatge d\'una caiguda de tensió en un sensor." @@ -227,13 +227,14 @@ "Retalla" "Afegeix una nota" "%1$s (%2$s)" - "Enregistrament %1$d" + "Gravació %1$d" "sensor anterior: %s" "sensor següent: %s" "Afegeix una nota nova" "S\'ha suprimit la nota" + "S\'ha suprimit la gravació" "Desfés" - "Afegeix una nota a aquest enregistrament" + "Afegeix una nota a aquesta gravació" "Fes una foto per afegir-la com a nota" "Afegeix una nota" "--" @@ -241,8 +242,8 @@ "Inclou els experiments arxivats" "Vols suprimir l\'experiment?" "Confirmes que vols suprimir aquest experiment? Els enregistraments i les notes que conté se suprimiran. Aquesta acció no es pot desfer." - "Suprimir l\'enregistrament?" - "Confirmes que vols suprimir aquest enregistrament? Les notes i les dades enregistrades se suprimiran. Aquesta acció no es pot desfer." + "Suprimir la gravació?" + "Confirmes que vols suprimir aquesta gravació? Les notes i les dades gravades se suprimiran. Aquesta acció no es pot desfer." "menú" "Verifica la teva edat" "Data de naixement:" @@ -256,8 +257,8 @@ "posa la reproducció d\'àudio en pausa" "inicia la reproducció d\'àudio" "Activa els tipus de sonificació de desenvolupadors" - "Edita l\'enregistrament" - "Títol de l\'enregistrament" + "Edita la gravació" + "Títol de la gravació" "Mostra els enregistraments arxivats" "No s\'ha pogut exportar." "No hi ha cap aplicació instal·lada que permeti exportar en CSV." @@ -265,7 +266,7 @@ "Science Journal" "Explora el teu món." "Funcions noves i millores: \n• Interfície completament nova per prendre notes i documentar experiments científics. \n• Nova funció per fer instantànies i capturar punts de dades concrets. \n• Sensors nous: acceleròmetre lineal, magnetòmetre i brúixola \n• Galeria redissenyada per cercar experiments \n• Ara també disponible per a dispositius iOS." - "Google t\'ofereix Science Journal, una llibreta científica digital gratuïta. \n \nTant si ensenyes ciències com si t\'agrada fer experiments científics a casa, pots prendre notes, fer fotos i anotar observacions en un sol lloc. Fes servir els sensors del teu telèfon per mesurar i crear gràfics de fenòmens com ara la llum, el so i el moviment, o connecta\'l per Bluetooth a sensors externs per dur a terme experiments en el teu entorn. \n\nL\'aplicació Science Journal et permet fer el següent: \n• Mesurar la llum, el so, l\'acceleració, la pressió atmosfèrica i molts altres fenòmens amb els sensors integrats al teu telèfon mòbil. \n• Prendre notes i fer fotos per documentar els teus experiments científics. Aviat afegirem més tipus de notes. \n• Connectar el dispositiu a sensors externs per Bluetooth (només amb determinats dispositius Arduino i Vernier compatibles). \n• Exportar les dades enregistrades amb els sensors com a fitxers CSV. \n• Crear activadors automàtics per enregistrar dades i prendre notes. \n• Fer servir la sonificació per sentir el moviment dels teus gràfics. \n\nScience Journal està disponible de manera gratuïta per a Android, iPhone, iPad i dispositius Chromebook compatibles. \n\nActivitats educatives dels nostres col·laboradors: https://makingscience.withgoogle.com/science-journal/activities. \nAssistència: https://productforums.google.com/forum/#!forum/sciencejournal. \nCodi obert disponible a https://github.com/google/science-journal. \n\n Avís de permisos: \n• Ubicació: es necessita per cercar dispositius amb sensors Bluetooth. \n• Càmera: es necessita per fer fotos per documentar experiments. \n• Micròfon: es necessita per utilitzar el sensor d\'intensitat del so. \n• Emmagatzematge: es necessita per accedir a les fotos i inserir-les als experiments." + "Google t\'ofereix Science Journal, una llibreta científica digital gratuïta. \n \nTant si ensenyes ciències com si t\'agrada fer experiments científics a casa, pots prendre notes, fer fotos i anotar observacions en un sol lloc. Fes servir els sensors del teu telèfon per mesurar i crear gràfics de fenòmens com ara la llum, el so i el moviment, o connecta\'l per Bluetooth a sensors externs per dur a terme experiments en el teu entorn. \n\nL\'aplicació Science Journal et permet fer el següent: \n• Mesurar la llum, el so, l\'acceleració, la pressió atmosfèrica i molts altres fenòmens amb els sensors integrats al teu telèfon mòbil. \n• Prendre notes i fer fotos per documentar els teus experiments científics. Aviat afegirem més tipus de notes. \n• Connectar el dispositiu a sensors externs per Bluetooth (només amb determinats dispositius Arduino i Vernier compatibles). \n• Exportar les dades enregistrades amb els sensors com a fitxers CSV. \n• Crear activadors automàtics per gravar dades i prendre notes. \n• Fer servir la sonificació per sentir el moviment dels teus gràfics. \n\nScience Journal està disponible de manera gratuïta per a Android, iPhone, iPad i dispositius Chromebook compatibles. \n\nActivitats educatives dels nostres col·laboradors: https://makingscience.withgoogle.com/science-journal/activities. \nAssistència: https://productforums.google.com/forum/#!forum/sciencejournal. \nCodi obert disponible a https://github.com/google/science-journal. \n\n Avís de permisos: \n• Ubicació: es necessita per cercar dispositius amb sensors Bluetooth. \n• Càmera: es necessita per fer fotos per documentar experiments. \n• Micròfon: es necessita per utilitzar el sensor d\'intensitat del so. \n• Emmagatzematge: es necessita per accedir a les fotos i inserir-les als experiments." "Cerca sensors de tercers" "Cerca aplicacions que admetin l\'API de sensors de tercers i permet que s\'afegeixin aquests sensors als experiments." "Activa la temperatura ambient" @@ -293,8 +294,8 @@ "Tipus d\'activador" "Activa\'l quan" "Valor de l\'activador" - "Inicia l\'enregistrament" - "Atura l\'enregistrament" + "Inicia la gravació" + "Atura la gravació" "Escriu una nota" "Avisa\'m" "El valor és igual" @@ -331,12 +332,12 @@ "detecti un valor superior a" "detecti un valor inferior a" - "Activa\'l només en enregistrar" + "Activa\'l només en gravar" "%1$s %2$s %3$.2f %4$s" "%1$s %2$s %3$.2f %4$s" "mostra" "No s\'ha pogut trobar el servei: %s" - "L\'enregistrament s\'ha completat." + "La gravació s\'ha completat." "Desactiva els activadors" "activadors" "Has de seleccionar com a mínim un tipus d\'alerta per a aquest activador." @@ -383,7 +384,7 @@ "La prova no es pot retallar fora dels límits enregistrats prèviament" "La prova no es pot retallar fins a menys d\'un segon" "%1s: %1s" - "visualització general" + "captura" "Exporta…" "Temps relatiu" "Nota activada: %1s" @@ -405,8 +406,8 @@ "%1$s %2$s" "Edita el temps" "Afegeix una nota a la cronologia" - "Afegeix una descripció de l\'enregistrament aquí" - "Detalls visualització general" + "Afegeix una descripció de la gravació aquí" + "Detalls de la captura" "Detalls de la nota activada" "Eines disponibles" "Escriu" @@ -416,13 +417,13 @@ "Posa nom a l\'experiment" "El nom no pot estar buit" "%1$s…" - "Enregistrament en curs" + "Gravació en curs" "%1$s %2$s" "Descripció" "Detalls" "Afegeix una observació" "Et donem la benvinguda a Science Journal" - "Prova de prendre notes i enregistrar dades amb la barra d\'eines que hi ha a més avall." + "Prova de prendre notes i gravar dades amb la barra d\'eines que hi ha a més avall." "Et donem la benvinguda a Science Journal!" "Troba activitats per fer a \ng.co/sciencejournalactivities" "Tria una foto de l\'experiment" @@ -430,7 +431,7 @@ "Tria una foto" "Foto feta el dia %s" "seleccionada" - "Edita la foto amb..." + "Edita la foto amb…" "Mostra el tauler d\'eines" "Desplega el tauler d\'eines" "Replega el tauler d\'eines" @@ -438,7 +439,10 @@ "Afegeix una nota de text" "Vista en directe de la càmera" "No es pot fer servir la càmera perquè Science Journal no té permís per accedir-hi." - "No es pot fer servir la biblioteca de fotos perquè Science Journal no té permís per accedir-hi." - - + "No es pot fer servir la galeria de fotos perquè Science Journal no té permís per accedir-hi." + "Obre la configuració" + "Mostra els experiments arxivats" + "Amaga els experiments arxivats" + "Amaga els enregistraments arxivats" + "Visualització general dels sensors" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml index cf0ff16b..b49c0c08 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml @@ -200,7 +200,7 @@ "Tělesa mají tendenci zůstávat v klidu, případně pokračovat v započatém pohybu. Tuto skutečnost nazýváme setrvačností. Popisuje ji první Newtonův zákon: Těleso zůstává v klidu nebo rovnoměrném přímočarém pohybu, není-li nuceno vnějšími silami tento stav změnit. \n\nPokud je těleso uvedeno do pohybu vnější silou, mluvíme o zrychlení – mění se rychlost pohybu (zvyšuje se, snižuje nebo mění směr). Zrychlení se měří jako změna rychlosti (metry za sekundu) v čase nebo v metrech na druhou mocninu sekundy (m/s²). \n\nVáš telefon je vybaven zařízením, které dokáže změny pohybu měřit – takzvaným akcelerometrem. Uvnitř akcelerometru je drobné zavěšené těleso, které se může volně pohybovat. Při změně pohybu se toto těleso posune, podobně jako se například posune vaše tělo, když při jízdě autem náhle zabrzdíte. Měřením těchto nepatrných posunů dokáže akcelerometr v telefonu sledovat změny pohybu a směru náklonu. Tato funkce je užitečná například při přepínání obrazovky na výšku a na šířku nebo při hraní her." "Možná jste si všimli trvalého zrychlení naměřeného na ose Z, a to i v době, kdy telefon leží v klidu na stole. Jedná se o zrychlení, kterému jsme trvale vystaveni na povrchu Země z důvodu působení gravitace. Přibližná hodnota tohoto zrychlení je 9,8 m/s²." "Zvuky jsou tvořeny vibracemi. Váš hlas například vzniká vibracemi hlasivek ve vašem hrdle. Tyto vibrace vytvářejí střídající se pole vysokého a nízkého tlaku vzduchu, které se šíří směrem od zdroje – podobně jako se šíří kruhy na vodě, když do ní hodíte kámen." - "Všechny zvuky lze popsat hodnotou frekvence a intenzity. \n\nIntenzitu lze měřit zde ve Vědeckém žurnálu; její jednotkou jsou decibely (dB). Intenzita neboli hlasitost závisí na tom, jak velký pohyb vibrující objekt během vibrace vykonává. Vyšší intenzitu vnímáme jako větší hlasitost. \n\nFrekvence (a také výška, tón) zvukové vlny odpovídá rychlosti vibrací. Čím rychleji objekt vibruje, tím vyšší je výsledný zvuk. Náš Vědecký žurnál nedokáže změřit frekvenci, ale měří pouze hlasitost. \n\nNejtišší zvuk, jaký je lidské ucho průměrně schopno zaslechnout, je definován jako 0 dB. Běžná konverzace odpovídá přibližně 60 dB a zvuky nad 140 dB jsou pro ucho bolestivé. Škodlivý zvuk ale nemusí být nutně bolestivý. Dlouhodobé vystavení zvuku o síle 90 dB (přibližně hlasitost vysavače) může vést k trvalé ztrátě sluchu. \n\nDecibelová stupnice je logaritmická, což může být trochu matoucí. Zvuk o síle 40 dB není dvojnásobkem 20 dB – jedná se o stonásobnou hodnotu. Podobně když jeden budík vydává 70 decibelů, dva budíky dohromady nedávají 140, ale 73 decibelů. Jak už jsme říkali, tato stupnice je poněkud složitá. \n\n10 dB má šumění listí \n20 dB šepot na vzdálenost 1,5 metru \n30 dB tichý šepot \n50 dB déšť \n60 dB běžná konverzace \n90 dB mixér \n100 dB automobil bez tlumiče \n110 dB křik do ucha \n120 dB hrom \n130 dB sbíječka \n140 dB startující letadlo" + "Všechny zvuky lze popsat pomocí frekvence a intenzity. \n\nIntenzitu můžeme měřit tady ve Vědeckém žurnálu; její jednotkou jsou decibely (dB). Intenzita neboli hlasitost závisí na tom, jak velký pohyb vibrující objekt během vibrace vykonává. Vyšší intenzitu vnímáme jako větší hlasitost. \n\nFrekvence (a také výška, tón) zvukové vlny odpovídá rychlosti vibrací. Čím rychleji objekt vibruje, tím vyšší je výsledný zvuk. Náš Vědecký žurnál nedokáže změřit frekvenci, ale měří pouze hlasitost. \n\nJe důležité uvědomit si, že mikrofon v zařízení je velmi citlivý na změny zvukových vln v průběhu času, nedokáže ale přesně určit absolutní velikost jednotlivých vln. Snažili jsme se vybrat kód, který by měl přinést podobné hodnoty jako referenční údaje níže, ale u některých zařízení získáte vždy soustavně vyšší či nižší hodnoty. V takovém případě by skuteční vědci senzor nakalibrovali na známou hodnotu. My se budeme muset spokojit s tím, že nám Vědecký žurnál prozradí, jestli byla jízda vlakem hlasitější než rockový koncert, ale jen za předpokladu, že si na obě akce vezmeme stejný telefon. \n\nDalší důležitá věc je, že pojmy „intenzita zvuku“, „úroveň intenzity zvuku“ a „akustický tlak“ nejsou úplně totožné. My je tady sice vzájemně zaměňujeme, ale pokud vás toto téma zajímá víc, na internetu najdete řadu zdrojů s podrobnějšími informacemi. \n\nNejtišší zvuk, jaký je lidské ucho průměrně schopno zaslechnout, je definován jako 0 dB. Běžná konverzace odpovídá přibližně 60 dB a zvuky nad 140 dB jsou pro ucho bolestivé. Škodlivý zvuk ale nemusí být nutně bolestivý. Dlouhodobé vystavení zvuku o síle 90 dB (přibližně hlasitost vysavače) může vést k trvalé ztrátě sluchu. \n\nDecibelová stupnice je logaritmická, což může být trochu matoucí. Zvuk o síle 40 dB není dvojnásobkem 20 dB – jedná se o stonásobnou hodnotu. Podobně když jeden budík vydává 70 decibelů, dva budíky dohromady nedávají 140, ale 73 decibelů. Jak už jsme říkali, tato stupnice je poněkud složitá. \n\n10 dB má šumění listí \n20 dB šepot na vzdálenost 1,5 metru \n30 dB tichý šepot \n50 dB déšť \n60 dB běžná konverzace \n90 dB mixér \n100 dB automobil bez tlumiče \n110 dB křik do ucha \n120 dB hrom \n130 dB sbíječka \n140 dB startující letadlo" "Otáčivý pohyb měříme počtem otočení kolem dané osy za minutu. \n\nJak se otáčí větrník, otáčí se také disk kodéru:" "Dochází ke střídání světla a tmy, což senzor ve Vědeckém žurnálu vyhodnotí jako rotaci." "Zde zobrazená data pocházejí z externího senzoru, který s vaším telefonem komunikuje přes Bluetooth. \n\nHodnota uvádí nezpracovaný odečet přímo z mikrořadiče. Jedná se obvykle o pokles napětí na senzoru vyjádřený v procentech." @@ -232,6 +232,7 @@ "další senzor: %s" "Přidat novou poznámku" "Poznámka smazána" + "Nahrávka byla smazána" "Vrátit zpět" "Přidat poznámku k této nahrávce" "Přidat fotografickou poznámku" @@ -430,7 +431,7 @@ "Vybrat fotku" "Snímek pořízen %s" "vybráno" - "Upravit fotku pomocí…" + "Upravit fotku pomocí…" "Zobrazit panel nástroje" "Rozbalit panel nástroje" "Sbalit panel nástroje" @@ -438,7 +439,10 @@ "Přidat textovou poznámku" "Živý přenos z kamery" "Fotoaparát nelze použít, protože Vědecký žurnál k němu nemá povolen přístup." - "Vaši knihovnu fotografií nelze použít, protože Vědecký žurnál k ní nemá povolen přístup." - - + "Galerii fotografií nelze použít, protože Vědecký žurnál k ní nemá povolen přístup." + "Otevřít Nastavení" + "Zobrazit archivované experimenty" + "Skrýt archivované experimenty" + "Skrýt archivované nahrávky" + "Snímek záznamu senzoru" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml index 356e90dc..7c519004 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml @@ -200,7 +200,7 @@ "Objekter har en tendens til at blive, hvor de er, eller fortsætte en eventuel igangværende bevægelse. Denne tendens kaldes for interti. Newtons første lov udtrykker denne ide formelt: Et objekt fortsætter sin bevægelsestilstand, medmindre det påvirkes af en ubalanceret kraft. \n\nNår en ubalanceret kraft får et objekt til at bevæge sig, siger man, at objektet accelererer: Objektets hastighed eller fart ændres, enten ved forøgelse eller reduktion af hastigheden, eller ved at bevægelsesretningen ændres. Acceleration måles som ændring af hastighed (meter pr. sekund) over tid, eller som meter pr. sekund i anden (m/s²). \n\nDin telefon har en enhed, der kan måle disse ændringer af bevægelse. Enheden hedder et accelerometer. Et accelerometer indeholder små masser, der kan bevæge sig frit. En ændring af bevægelsen får disse masser til at bevæge sig, lidt på samme måde som dit hoved har en tendens til at bevæge sig fremefter, når du sidder i en bil, der pludselig stopper. Ved at måle næsten umærkelige ændringer i intertien kan accelerometeret i en telefon registrere ændringer i bevægelse og retning. Dette er nyttigt, når skærmen skal skifte mellem liggende og stående tilstand, eller når du spiller spil på telefonen og meget mere." "Du har sikkert bemærket en konstant acceleration langs Z-aksen, selv når telefonen ligger helt stille på et bord. Dette er den acceleration, vi oplever her på jordens overflade, der skyldes tyngdekraftens virkning (tyngdeaccelerationen), som er på ca. 9,8 m/s²." "Lyd skabes af svingninger. For eksempel opstår lyden af din stemme på grund af svingninger i stemmebåndene i din hals. Svingningerne skaber områder med skiftevist lavt og højt lufttryk, der bevæger sig udefter, lidt på samme måde som ringe i vandet, når du kaster en sten i en sø." - "Alle lyde kan beskrives ved hjælp af deres frekvens og intensitet. \n\nIntensiteten er det, du måler her vha. Science Journal, og den måles i decibel (dB). Intensiteten eller lydstyrken afhænger af den afstand, et vibrerende objekt bevæger sig, hver gang det vibrerer. Vi oplever større intensitet som forøget lydstyrke. \n\nFrekvensen (kaldes også pitch eller tone) for en lydbølge svarer til dens svingningsfrekvens. Jo hurtigere, et objekt vibrerer, jo højere er pitch for den resulterende lyd. Science Journal måler ikke frekvens, kun lydstyrke. \n\nDen mest stille lyd, som kan opfattes af det menneskelige øre, er defineret som 0 dB. Almindelig samtale svarer til ca. 60 dB, og lyd på over 140 dB giver smerter i det menneskelige øre. Men lyde behøver ikke at give smerter eller være skadelige. Konstant udsættelse for lyd på 90 dB (svarer omtrent til lydstyrken for en støvsuger) kan med tiden medføre høretab. \n\nDecibelskalaen er logaritmisk og kan derfor være lidt drilsk: En lydkilde på 40 dB er ikke dobbelt så intens som en lydkilde på 20 dB. Den er 100 gange så intens! Og hvis et vækkeur ringer med 70 dB, ringer to vækkeure ikke med 140 dB, men med 73 dB. Som allerede nævnt, er det en underlig skala. \n\n10 dB raslende blade \n20 dB hvisken over 1,5 meter \n30 dB stille hvisken \n50 dB regnvejr \n60 dB almindelig samtale \n90 dB blender \n100 dB bil uden lydpotte \n110 dB råben direkte ind i øret \n120 dB torden \n130 dB trykluftsbor \n140 dB fly, der letter" + "Alle lyde kan beskrives ved hjælp af deres frekvens og deres intensitet. \n\nDet er intensiteten, du måler med Science Journal, og det foregår i enheden decibel (dB). Intensiteten, eller lydstyrken, afhænger af den afstand, som et vibrerende objekt bevæger sig, hver gang det vibrerer. Vi oplever større intensitet som øget lydstyrke. \n\nFrekvensen (også kaldet pitch eller tone) af en lydbølge svarer til dens vibrationshastighed. Jo hurtigere et objekt vibrerer, jo højere er tonehøjden af den resulterende lyd. Science Journal måler ikke frekvens, kun lydstyrke. \n\nDet er vigtigt at vide, at mikrofonen i din enhed er designet til at være meget følsom over for forskelle i lydbølger over tid, men ikke den enkelte lydbølges absolutte størrelse. Vi har forsøgt at udvælge kode, der med stor sandsynlighed kan producere tal, der ligger tæt på referencenumrene nedenfor, men hver enkelt enhed kan give tal, der konsekvent er højere eller lavere. Forskere vil normalt kalibrere en sensor som denne til en kendt måling. Indtil videre kan Science Journal fortælle dig, om lydstyrken på din næste togtur er højere end til din næste rockkoncert, men kun hvis du medbringer den samme telefon begge steder. \n\nDet er også værd at vide, at der er væsentlige forskelle mellem \"lydintensitet\", \"lydintensitetsniveau\" og \"lydtryk\". Her behandler vi dem som det samme, men hvis du vil dykke længere ned i det, findes der mange onlineressourcer om forskellene. \n\nDen mindste lyd, der kan opfattes af det menneskelige øre, er defineret som 0 dB. Almindelig samtale svarer til ca. 60 dB, og lyd over 140 dB giver smerter i det menneskelige øre. Lyd behøver imidlertid ikke at forårsage smerte for at være skadelig. Konstant udsættelse for lyd på 90 dB (svarer omtrent til lydstyrken af en støvsuger) kan med tiden medføre høretab. \n\nDecibelskalaen er logaritmisk og kan derfor være svær at gå til: En lydkilde på 40 dB er ikke dobbelt så intens som en lydkilde på 20 dB – den er 100 gange så intens! På samme skala har du et vækkeur, der ringer med 70 dB, men to vækkeure ringer ikke med 140 dB, de ringer med 73 dB. Som allerede nævnt er det en underlig skala. \n\n10 dB raslende blade \n20 dB hvisken over 1,5 meter \n30 dB stille hvisken \n50 dB regnvejr \n60 dB almindelig samtale \n90 dB blender \n100 dB bil uden lydpotte \n110 dB råben direkte ind i øret \n120 dB torden \n130 dB trykluftsbor \n140 dB et fly, der letter" "Rotationer pr. minut (RPM, rotations per minute) er et mål for antal omdrejninger pr. minut rundt om en fast akse. \n\nNår vindmøllen drejer, får den konverteringsskiven til at dreje rundt:" "Dette skaber perioder med lys og mørke på sensoren, og dette registreres i Science Journal som rotation." "Dataene, der vises her, kommer fra kommunikation mellem en ekstern sensor og din telefon via Bluetooth. \n\nVærdien viser procentdelen for den ubehandlede aflæsning direkte fra mikrocontrolleren. Dette er normalt det procentvise spændingsfald i en sensor." @@ -232,6 +232,7 @@ "næste sensor: %s" "Tilføj en ny note" "Noten er slettet" + "Registrering slettet" "Fortryd" "Føj note til denne registrering" "Tag et billede, og tilføj det som note" @@ -265,7 +266,7 @@ "Science Journal" "Udfør forsøg på verden omkring dig." "Nye funktioner og forbedringer: \n• Helt ny grænseflade til notetagning og dokumentation af videnskabelige eksperimenter. \n• Ny fotofunktion til registrering af individuelle datapunkter. \n• Nye sensorer: Lineært accelerometer, magnetometer og kompas \n• Nydesignet galleri til søgning blandt eksperimenter \n• Nu tilgængeligt på iOS-enheder!" - "Science Journal er den gratis digitale videnskabsnotesbog fra Google. \n \nUanset om du underviser i naturvidenskab eller blot beskæftiger dig med det på hobbyplan, kan du samle dine noter, fotos og observationer på ét praktisk sted. Brug sensorerne i din telefon til at måle og illustrere fænomener som lys, lyd og bevægelse, eller opret forbindelse til eksterne sensorer via Bluetooth for at udføre eksperimenter på verden omkring dig. \n \nMed appen Science Journal kan du: \n• Måle lys, lyd, acceleration, lufttryk og meget mere med telefonens indbyggede sensorer. \n• Tage noter og fotos til dokumentation af dine videnskabelige eksperimenter. (Der kommer snart flere notetyper). \n• Oprette forbindelse til eksterne sensorer ved hjælp af udvalgte Bluetooth-aktiverede Arduino- og Vernier-enheder. \n• Eksportere registrerede sensordata som CSV-filer. \n• Oprette automatiske udløsere til optagelse af data og notetagning. \n• Bruge sonificering til at høre bevægelserne i dine grafer. \n \nScience Journal er gratis til Android, iPhone, iPad og kompatible Chromebook-enheder. \n \nUddannelsesmæssige aktiviteter fra vores partnere: https://makingscience.withgoogle.com/science-journal/activities \nSupport: https://productforums.google.com/forum/#!forum/sciencejournal \nTilgængelig open source-kode: https://github.com/google/science-journal \n\n Meddelelse om tilladelser: \n• Placering: Påkrævet for at kunne scanne efter sensorenheder med Bluetooth. \n• Kamera: Påkrævet for at tage billeder til dokumentation af eksperimenter. \n• Mikrofon: Påkrævet for at kunne bruge sensor til registrering af lydstyrke. \n• Lager: Påkrævet for at få adgang til fotos til indsættelse i eksperimenter." + "Science Journal er den gratis digitale videnskabsnotesbog fra Google. \n \nUanset om du underviser i naturvidenskab eller blot beskæftiger dig med det på hobbyplan, kan du samle dine noter, fotos og observationer på ét praktisk sted. Brug sensorerne i din telefon til at måle og illustrere fænomener som lys, lyd og bevægelse, eller opret forbindelse til eksterne sensorer via Bluetooth for at udføre eksperimenter på verden omkring dig. \n \nMed appen Science Journal kan du: \n• Måle lys, lyd, acceleration, lufttryk og meget mere med telefonens indbyggede sensorer. \n• Tage noter og fotos til dokumentation af dine videnskabelige eksperimenter. (Der kommer snart flere notetyper). \n• Oprette forbindelse til eksterne sensorer ved hjælp af udvalgte Bluetooth-aktiverede Arduino- og Vernier-enheder. \n• Eksportere registrerede sensordata som CSV-filer. \n• Oprette automatiske triggers til optagelse af data og notetagning. \n• Bruge sonificering til at høre bevægelserne i dine grafer. \n \nScience Journal er gratis til Android, iPhone, iPad og kompatible Chromebook-enheder. \n \nUddannelsesmæssige aktiviteter fra vores partnere: https://makingscience.withgoogle.com/science-journal/activities \nSupport: https://productforums.google.com/forum/#!forum/sciencejournal \nTilgængelig open source-kode: https://github.com/google/science-journal \n\n Meddelelse om tilladelser: \n• Placering: Påkrævet for at kunne scanne efter sensorenheder med Bluetooth. \n• Kamera: Påkrævet for at tage billeder til dokumentation af eksperimenter. \n• Mikrofon: Påkrævet for at kunne bruge sensor til registrering af lydstyrke. \n• Lager: Påkrævet for at få adgang til fotos til indsættelse i eksperimenter." "Scan efter tredjepartssensorer" "Se efter apps, der understøtter tredjepartssensorens API, og aktivér tilføjelse af de pågældende sensorer til eksperimenter." "Aktivér omgivende temperatur" @@ -281,17 +282,17 @@ "Flere valgmuligheder" "Der blev ikke fundet nogen licenser." "%1s ♪" - "Indstil udløsere" - "Rediger udløsere" - "Liste over udløsere" - "Udløsere for %s" - "Opret udløser" - "Der er ikke indstillet nogen udløsere" - "Rediger udløser" - "Rediger %s-udløser" - "Ny %s-udløser" + "Indstil triggers" + "Rediger triggers" + "Liste over triggers" + "Triggers for %s" + "Opret trigger" + "Der er ikke indstillet nogen triggers" + "Rediger trigger" + "Rediger %s-trigger" + "Ny %s-trigger" "Udløsertype" - "Udløs, når værdien" + "Aktivér, når værdien" "Udløserværdi" "Start registrering" "Stop registrering" @@ -308,7 +309,7 @@ "Lyd" "Vibration" "Visuel underretning" - "Du skal indtaste en numerisk værdi, hvorved denne udløser aktiveres." + "Du skal indtaste en numerisk værdi, hvorved denne trigger aktiveres." "%1$s, når værdien er ved %2$s %3$s" "%1$s, når værdien overstiger %2$s %3$s" "%1$s, når værdien falder til under %2$s %3$s" @@ -331,15 +332,15 @@ "ligger over" "ligger under" - "Udløs kun under registrering" + "Aktivér kun under registrering" "%1$s %2$s %3$.2f %4$s" "%1$s %2$s %3$.2f %4$s" "vis" "Tjenesten blev ikke fundet: %s" "Registreringen er gennemført." - "Deaktiver udløsere" - "udløsere" - "Du skal vælge mindst én type underretning for denne udløser." + "Deaktiver triggers" + "triggers" + "Du skal vælge mindst én type underretning for denne trigger." "Udløseren er aktiveret" "afkortningens start: %1$s, %2$s %3$s" "afkortningens slutning: %1$s, %2$s %3$s" @@ -386,8 +387,8 @@ "foto" "Eksportér…" "Relativ tid" - "Udløst note: %1s" - "Udløst note: %1s; %2s" + "Aktiveret note: %1s" + "Aktiveret note: %1s; %2s" "Kompas" "grader" "Telefonens placering i forhold til jordens magnetfelt." @@ -407,7 +408,7 @@ "Føj note til tidslinje" "Tilføj en beskrivelse af registreringen her" "Fotooplysninger" - "Oplysninger om udløst note" + "Oplysninger om aktiveret note" "Tilgængelige værktøjer" "Skriv tekst" "Observer sensorer" @@ -430,7 +431,7 @@ "Vælg et billede" "Billede taget %s" "valgt" - "Rediger billede med…" + "Rediger billede med…" "Vis værktøjsskuffe" "Udvid værktøjsskuffe" "Skjul værktøjsskuffe" @@ -438,7 +439,10 @@ "Tilføj tekstnote" "Livevisning for kamera" "Kameraet kan ikke bruges, da Science Journal ikke har tilladelse til at åbne det." - "Din billedsamling kan ikke bruges, da Science Journal ikke har tilladelse til at åbne den." - - + "Dit fotogalleri kan ikke bruges, da Science Journal ikke har adgang til det." + "Åbn indstillinger" + "Vis arkiverede eksperimenter" + "Skjul arkiverede eksperimenter" + "Skjul arkiv. registreringer" + "Øjebliksbillede fra sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml index 361d5bef..37dd079d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml @@ -200,7 +200,7 @@ "Objekte neigen dazu, sich nicht vom Fleck zu rühren oder, wenn sie sich in Bewegung befinden, sich weiter zu bewegen. Dies wird als Trägheit oder Beharrungsvermögen bezeichnet. Im ersten Newtonschen Gesetz wird dies folgendermaßen formuliert: Ein Körper verharrt im Zustand der Ruhe oder der Bewegung, sofern er nicht durch einwirkende Kräfte zur Änderung seines Zustands gezwungen wird. \n\nWenn sich ein Objekt aufgrund einer einwirkenden Kraft in Bewegung setzt, spricht man von einer Beschleunigung des Objekts: Seine Geschwindigkeit ändert sich. Es wird schneller oder langsamer oder ändert seine Richtung. Die Maßeinheit für Beschleunigung ist Meter pro Quadratsekunde (m/s²). \n\nIhr Smartphone verfügt über ein Gerät, um diese Veränderungen der Bewegung zu messen – einen Beschleunigungsmesser. Im Inneren eines Beschleunigungsmessers befinden sich kleine aufgehängte Massen, die sich frei bewegen können. Bewegungsänderungen verursachen eine Verlagerung dieser Massen, wie zum Beispiel, wenn Ihr Kopf nach vorne sackt, wenn Sie in einem Auto sitzen, das plötzlich bremst. Durch das Messen dieser geringfügigen Verlagerungen kann ein Beschleunigungsmesser in einem Smartphone Bewegungs- und Richtungsänderungen wahrnehmen, was z. B. hilfreich ist, wenn die Displaynetzwerk-Anzeige vom Querformat zum Hochformat wechseln soll oder Sie auf Ihrem Smartphone Spiele spielen." "Sie haben wahrscheinlich eine ständige Beschleunigung entlang der Z-Achse bemerkt, selbst wenn das Smartphone ruhig auf dem Tisch liegt. Es handelt sich hierbei um die Beschleunigung, die wir aufgrund der Schwerkraft auf der Erdoberfläche erleben und die etwa 9,8 m/s² beträgt." "Töne werden durch Vibration verursacht. Ihre Stimme zum Beispiel entsteht durch die Schwingungen der Stimmbänder in Ihrem Kehlkopf. Diese Schwingungen erzeugen abwechselnd Zonen mit hohem und niedrigem Luftdruck, die nach außen strömen – ähnlich wie die immer größer werdenden Kreise, die entstehen, wenn man einen Kieselstein in einen Teich wirft." - "Alle Töne können hinsichtlich ihrer Frequenz und Intensität beschrieben werden. \n\nDie Intensität können Sie hier mit dem Science Journal in Dezibel (dB) messen. Die Intensität bzw. Lautstärke hängt von der Entfernung ab, die ein vibrierendes Objekt bei jeder Vibration zurücklegt. Größere Intensität hören wir als erhöhte Lautstärke. \n\nDie Frequenz bzw. Tonhöhe einer Schallwelle entspricht ihrer Schwingungsrate. Je schneller ein Objekt vibriert, desto höher ist der daraus entstehende Ton. Das Science Journal misst nicht die Frequenz, sondern nur die Lautstärke. \n\nDas leiseste Geräusch, das das durchschnittliche menschliche Ohr wahrnehmen kann, wird als 0 dB definiert. Normale Gespräche entsprechen ungefähr 60 dB und Töne oberhalb von etwa 140 dB werden vom menschlichen Ohr als schmerzhaft empfunden. Aber auch Geräusche, die nicht als schmerzhaft empfunden werden, können schädlich sein. Ist man fortwährend einer Lautstärke von 90 dB ausgesetzt – dies entspricht in etwa der Lautstärke eines Staubsaugers – kann dies letztlich zu Gehörschäden führen. \n\nDie Dezibelskala ist logarithmisch, was das Ganze ein wenig kompliziert macht: Eine Schallquelle von 40 dB ist nicht doppelt so intensiv wie eine Schallquelle von 20 dB – sie ist 100 Mal so intensiv. Ein klingelnder Wecker produziert 70 dB, aber zwei klingelnde Wecker produzieren keine 140 dB, sondern 73 dB. Wie gesagt, die Sache ist etwas kompliziert. \n\n10 dB – raschelndes Laub \n20 dB – Flüstern aus 1,50 m Entfernung \n30 dB – leises Flüstern \n50 dB – Regen \n60 dB – normale Unterhaltungen \n90 dB – Mixer \n100 dB – Auto ohne Schalldämpfer \n110 dB – Schreien ins Ohr \n120 dB – Donner \n130 dB – Presslufthammer \n140 dB – startendes Flugzeug" + "Alle Töne können anhand ihrer Frequenz und Intensität beschrieben werden. \n\n Die Intensität können Sie hier mit dem Science Journal in Dezibel (dB) messen. Die Intensität bzw. Lautstärke hängt von der Distanz ab, die ein vibrierendes Objekt bei jeder Vibration zurücklegt. Größere Intensität hören wir als erhöhte Lautstärke. \n\n Die Frequenz bzw. Tonhöhe einer Schallwelle entspricht ihrer Schwingungsrate. Je schneller ein Objekt vibriert, desto höher ist der daraus entstehende Ton. Mit Science Journal wird nicht die Frequenz, sondern nur die Lautstärke gemessen. \n\n Es ist wichtig zu wissen, dass das Mikrofon in Ihrem Gerät sehr empfindlich darauf reagiert, wie sich Schallwellen über die Zeit verändern – auf die absolute Größe jeder Welle reagiert es jedoch nicht. Wir haben versucht, einen Code auszuwählen, der mit hoher Wahrscheinlichkeit ähnliche Zahlen wie die ausgibt, die Sie unten unter Referenz finden. Es kann jedoch sein, dass ein Gerät durchweg höhere oder niedrigere Zahlen angibt. Wissenschaftler würden im Normalfall einen Sensor für eine bekannte Messgröße kalibrieren. Auf dem jetzigen Stand kann Science Journal Ihnen sagen, ob Ihre nächste Zugfahrt oder Ihr nächster Konzertbesuch lauter ist – aber nur, wenn Sie Ihr Handy zu beidem mitnehmen. \n\n Auch gut zu wissen ist, dass es wichtige Unterschiede zwischen \"Schallintensität\", \"Schallintensitätspegel\" und \"Schalldruck\" gibt. Wir sehen sie hier als dasselbe an, doch wenn Sie sich mit dem Thema näher beschäftigen möchten, gibt es viele Onlineressourcen zu den Unterschieden. \n\nDas leiseste Geräusch, das das durchschnittliche menschliche Ohr wahrnehmen kann, wird als 0 dB definiert. Normale Gespräche entsprechen ungefähr 60 dB und Töne oberhalb von etwa 140 dB werden vom menschlichen Ohr als schmerzhaft empfunden. Aber auch Geräusche, die nicht als schmerzhaft empfunden werden, können schädlich sein. Ist man fortwährend einer Lautstärke von 90 dB ausgesetzt – dies entspricht in etwa der Lautstärke eines Staubsaugers – kann dies letztlich zu Gehörschäden führen. \n\nDie Dezibelskala ist logarithmisch, was das Ganze ein wenig kompliziert macht: Eine Schallquelle von 40 dB ist nicht doppelt, sondern hundertmal so intensiv wie eine Schallquelle von 20 dB. Ein klingelnder Wecker erzeugt 70 dB, aber zwei klingelnde Wecker erzeugen keine 140 dB, sondern 73 dB. Wie gesagt, die Sache ist nicht ganz einfach. \n\n10 dB – raschelndes Laub \n20 dB – Flüstern aus 1,5 m Entfernung \n30 dB – leises Flüstern \n50 dB – Regen \n60 dB – normale Unterhaltung \n90 dB – Mixer \n100 dB – Auto ohne Schalldämpfer \n110 dB – Schreien ins Ohr \n120 dB – Donner \n130 dB – Presslufthammer \n140 dB – startendes Flugzeug" "\"Umdrehungen pro Minute\" ist eine Maßeinheit für die Anzahl der Drehungen um eine feste Achse innerhalb einer Minute. \n\nIhr Windrad dreht sich und bringt dadurch die Encoderscheibe zum Drehen:" "Dadurch entstehen abwechselnd Helligkeit und Dunkelheit auf dem Sensor, was im Science Journal als Drehung registriert wird." "Die hier angezeigten Daten stammen aus einer externen Sensorkommunikation mit Ihrem Smartphone über Bluetooth. \n\nDer Wert zeigt den Prozentsatz der Rohdatenlesung direkt von Ihrem Mikrocontroller an. In der Regel entspricht dies dem Prozentsatz eines Spannungsabfalls an einem Sensor." @@ -232,6 +232,7 @@ "Nächster Sensor: %s" "Neue Notiz hinzufügen" "Notiz gelöscht" + "Aufzeichnung gelöscht" "Rückgängig" "Notiz dieser Aufzeichnung hinzufügen" "Bildnotiz erstellen" @@ -430,7 +431,7 @@ "Bild auswählen" "Bild aufgenommen am %s" "ausgewählt" - "Foto bearbeiten mit ..." + "Foto bearbeiten mit..." "Tool-Leiste anzeigen" "Tool-Leiste maximieren" "Tool-Leiste minimieren" @@ -438,7 +439,10 @@ "Textnotiz hinzufügen" "Kamera-Liveansicht" "Die Kamera kann nicht verwendet werden, da Science Journal keine Zugriffsberechtigung dafür hat." - "Ihre Fotogalerie kann nicht verwendet werden, da Science Journal keine Zugriffsberechtigung dafür hat." - - + "Ihre Fotogalerie kann nicht verwendet werden, da Science Journal keine Zugriffsberechtigung dafür hat." + "Einstellungen öffnen" + "Archivierte Experimente anzeigen" + "Archivierte Experimente ausblenden" + "Archivierte Aufz. ausblenden" + "Momentaufnahme des Sensors" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml index 48c33348..7660d029 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml @@ -200,7 +200,7 @@ "Τα αντικείμενα έχουν την τάση να παραμένουν στη θέση τους ή να συνεχίσουν να κινούνται, σε περίπτωση που κινούνται. Αυτή η τάση λέγεται \"αδράνεια\". Ο Πρώτος Νόμος του Νεύτωνα διατυπώνει αυτήν την έννοια με πιο επίσημο τρόπο: \"Τα αντικείμενα διατηρούν την κατάσταση κινητικότητας ή ακινησίας τους, εκτός και αν ασκηθεί επάνω τους μια μη εξισορροπημένη δύναμη. \n\nΌταν μια μη εξισορροπημένη δύναμη προκαλεί τη μετακίνηση ενός αντικειμένου, λέμε ότι το αντικείμενο βρίσκεται σε επιτάχυνση, δηλαδή μεταβάλλεται η ταχύτητά του, είτε αυξάνεται, είτε μειώνεται, είτε αλλάζει κατεύθυνση. Η επιτάχυνση υπολογίζεται ως μεταβολή της ταχύτητας σε συνάρτηση με το χρόνο (μέτρα ανά δευτερόλεπτο) ή μέτρα ανά δευτερόλεπτο στο τετράγωνο (m/s²). \n\nΤο τηλέφωνό σας διαθέτει μια συσκευή που υπολογίζει αυτές τις μεταβολές στην κίνηση, η οποία είναι γνωστή ως επιταχυνσιόμετρο. Στο εσωτερικό του επιταχυνσιόμετρου υπάρχουν μικρές, αιωρούμενες μάζες που μπορούν να κινούνται ελεύθερα. Οι μεταβολές στην κίνηση προκαλούν τη μετακίνηση αυτών των μαζών, περίπου όπως πέφτει το κεφάλι σας προς τα εμπρός όταν βρίσκεστε σε ένα αυτοκίνητο που φρενάρει απότομα. Τα επιταχυνσιόμετρα των τηλεφώνων μπορούν να υπολογίσουν αυτές τις μετατοπίσεις λόγω αδράνειας και να ανιχνεύσουν με αυτόν τον τρόπο μεταβολές στην κίνηση και τον προσανατολισμό. Αυτή η τεχνολογία χρησιμοποιείται για την αυτόματη εναλλαγή του προσανατολισμού της οθόνης, για συγκεκριμένους χειρισμούς στα παιχνίδια που παίζετε στο τηλέφωνό σας και για άλλους σκοπούς." "Λογικά, θα παρατηρήσατε μια σταθερή επιτάχυνση στον άξονα Z, ακόμη και όταν το τηλέφωνο είναι ακίνητο επάνω σε ένα τραπέζι. Αυτή είναι η επιτάχυνση στην οποία υποβάλλονται όλα τα αντικείμενα στην επιφάνεια της Γης, λόγω της έλξης της βαρύτητας, η οποία υπολογίζεται περίπου στα 9,8 m/s²." "Οι ήχοι δημιουργούνται από τις δονήσεις. Η φωνή σας, για παράδειγμα, προέρχεται από τις δονήσεις των φωνητικών χορδών στον λάρυγγά σας. Αυτές οι δονήσεις δημιουργούν εναλλάξ ζώνες με υψηλή και χαμηλή πίεση αέρα, οι οποίες εξαπλώνονται προς τα έξω, περίπου όπως και οι κυκλικοί κυματισμοί που δημιουργούνται στην επιφάνεια μιας ήρεμης λιμνούλας όταν πετάξετε μέσα της μια πέτρα." - "Όλοι οι ήχοι μπορούν να προσδιοριστούν βάσει της συχνότητας και της έντασής τους. \n\nΗ ένταση είναι το χαρακτηριστικό που μετράτε εδώ με το Science Journal και η μονάδα μέτρησής της είναι τα ντεσιμπέλ (dB). Η ένταση ή δύναμη του ήχου εξαρτάται από την απόσταση που καλύπτει ένα δονούμενο αντικείμενο κάθε φορά που δονείται. Η υψηλότερη ένταση έχει ως αποτέλεσμα πιο δυνατό ήχο. \n\nΗ συχνότητα (ή αλλιώς τονικό ύψος ή τονικότητα) ενός ηχητικού κύματος είναι ισοδύναμη με τη συχνότητα της δόνησης που τον προκαλεί. Όσο πιο γρήγορα δονείται ένα αντικείμενα, τόσο υψηλότερη είναι η τονικότητα του ήχου που προκύπτει. Το Science Journal δεν υπολογίζει τη συχνότητα, αλλά μόνο την ένταση. \n\nΗ χαμηλότερη ένταση ήχου που μπορεί να συλλάβει το ανθρώπινο αυτί ορίζεται στα 0 dB. Μια κανονική συζήτηση αντιστοιχεί περίπου σε 60 dB, ενώ οι ήχοι που ξεπερνούν σε ένταση τα 140 dB είναι οδυνηροί για το ανθρώπινο αυτί. Όμως οι ήχοι δεν είναι απαραίτητο να είναι οδυνηροί για να θεωρηθούν βλαβεροί. Η διαρκής έκθεση σε ήχους 90 dB (περίπου η ένταση μιας ηλεκτρικής σκούπας) μπορεί να προκαλέσει απώλεια ακοής μακροπρόθεσμα. \n\nΗ κλίμακα των ντεσιμπέλ είναι λογαριθμική και αυτό προκαλεί ορισμένες στατιστικές δυσκολίες: μια πηγή ήχου 40 dB δεν έχει διπλάσια ένταση από μια πηγή ήχου στα 20 dB—είναι 100 φορές πιο έντονη. Επίσης, αν ένα ξυπνητήρι που χτυπά παράγει ήχο έντασης 70 dB, η ένταση δύο ξυπνητηριών που χτυπούν δεν είναι 140 dB, αλλά 73 dB. Όπως καταλαβαίνετε, είναι μια αρκετά περίπλοκη κλίμακα. \n\nθρόισμα φύλλων = 10 dB \nψίθυρος στo 1,5 μέτρο = 20 dB \nαπαλός ψίθυρος = 30 dB \nβροχόπτωση = 50 dB \nκανονική συζήτηση = 60 dB \nμπλέντερ = 90 dB \nαυτοκίνητο χωρίς σιλανσιέ = 100 dB \nφωνή στο αυτί = 110 dB \nκεραυνός = 120 dB \nκομπρεσέρ = 130 dB \nαπογείωση αεροπλάνου = 140 dB" + "Όλοι οι ήχοι μπορούν να προσδιοριστούν βάσει της συχνότητας και της έντασής τους. \n\nΗ ένταση είναι η ιδιότητα που μετράτε εδώ με το Science Journal και η μονάδα μέτρησής της είναι τα ντεσιμπέλ (dB). Η ένταση ή δύναμη του ήχου εξαρτάται από την απόσταση που καλύπτει ένα δονούμενο αντικείμενο κάθε φορά που δονείται. Η υψηλότερη ένταση έχει ως αποτέλεσμα πιο δυνατό ήχο. \n\nΗ συχνότητα (ή αλλιώς τονικό ύψος ή τονικότητα) ενός ηχητικού κύματος είναι ισοδύναμη με τη συχνότητα της δόνησης που τον προκαλεί. Όσο πιο γρήγορα δονείται ένα αντικείμενο, τόσο υψηλότερη είναι η τονικότητα του ήχου που προκύπτει. Το Science Journal δεν μετράει τη συχνότητα, αλλά μόνο την ένταση. \n\nΈνα πολύ σημαντικό στοιχείο που πρέπει να γνωρίζετε είναι ότι το μικρόφωνο στη συσκευή σας είναι σχεδιασμένο έτσι ώστε να έχει αυξημένη ευαισθησία στις διαφορές των ηχητικών κυμάτων ως προς τον χρόνο, αλλά όχι στο απόλυτο μέγεθος κάθε κύματος. Δοκιμάσαμε να επιλέξουμε κώδικα που είναι πιθανό να παράγει αριθμούς παρόμοιους με τους αριθμούς αναφοράς που εμφανίζονται παρακάτω, αλλά κάθε συσκευή μπορεί να δώσει σταθερά υψηλότερους ή χαμηλότερους αριθμούς. Οι επιστήμονες συχνά βαθμονομούν έναν αισθητήρα σαν αυτόν ως προς μια γνωστή τιμή. Προς το παρόν, το Science Journal μπορεί να σας πει αν η επόμενη μετάβασή σας με τρένο έχει μεγαλύτερη ένταση ήχου από την επόμενη ροκ συναυλία που θα πάτε, αλλά μόνο αν και στις δύο περιπτώσεις, πάρετε μαζί σας το τηλέφωνο.\n\nΚάτι άλλο που θα πρέπει να ξέρετε είναι ότι υπάρχουν σημαντικές διαφορές ανάμεσα στην \"ένταση ήχου\", το \"επίπεδο έντασης ήχου\" και την \"ηχητική πίεση\". Εδώ τα αντιμετωπίζουμε όλα το ίδιο, αλλά αν θέλετε να εμβαθύνετε περισσότερο, υπάρχουν πολλοί διαδικτυακοί πόροι για να δείτε τις διαφορές. \n\nΗ χαμηλότερη ένταση ήχου που μπορεί να συλλάβει το ανθρώπινο αυτί ορίζεται στα 0 dB. Μια κανονική συζήτηση αντιστοιχεί περίπου σε 60 dB, ενώ οι ήχοι που ξεπερνούν σε ένταση τα 140 dB είναι οδυνηροί για το ανθρώπινο αυτί. Όμως οι ήχοι δεν είναι απαραίτητο να είναι οδυνηροί για να θεωρηθούν βλαβεροί. Η διαρκής έκθεση σε ήχους 90 dB (περίπου η ένταση μιας ηλεκτρικής σκούπας) μπορεί να προκαλέσει απώλεια ακοής μακροπρόθεσμα. \n\nΗ κλίμακα των ντεσιμπέλ είναι λογαριθμική, γεγονός που προκαλεί ορισμένες στατιστικές δυσκολίες: Μια πηγή ήχου 40 dB δεν έχει διπλάσια ένταση από μια πηγή ήχου στα 20 dB – είναι 100 φορές πιο έντονη. Επίσης, αν ένα ξυπνητήρι που χτυπά παράγει ήχο έντασης 70 dB, η ένταση δύο ξυπνητηριών που χτυπούν δεν είναι 140 dB, αλλά 73 dB. Όπως καταλαβαίνετε, είναι μια αρκετά περίπλοκη κλίμακα. \n\nθρόισμα φύλλων = 10 dB \nψίθυρος στο 1,5 μέτρο = 20 dB \nαπαλός ψίθυρος = 30 dB \nβροχόπτωση = 50 dB \nκανονική συζήτηση = 60 dB \nμπλέντερ = 90 dB \nαυτοκίνητο χωρίς σιλανσιέ = 100 dB \nφωνή στο αυτί = 110 dB \nκεραυνός = 120 dB \nκομπρεσέρ = 130 dB \nαπογείωση αεροπλάνου = 140 dB" "Οι περιστροφές ανά λεπτό (RPM) είναι μια μονάδα μέτρησης της συχνότητας περιστροφής γύρω από έναν σταθερό άξονα μέσα σε ένα λεπτό. \n\nΚαθώς γυρίζει ο στρόβιλος, περιστρέφει τον δίσκο κωδικοποίησης:" "Αυτό δημιουργεί στον αισθητήρα σκοτεινές και φωτεινές περιόδους που καταγράφονται στο Science Journal ως μια περιστροφή." "Τα δεδομένα που εμφανίζονται εδώ προέρχονται από έναν εξωτερικό αισθητήρα που επικοινωνεί με το τηλέφωνό σας μέσω Bluetooth. \n\nΗ τιμή απεικονίζει το ποσοστό της καθαρής μέτρησης απευθείας από τον μικροελεγκτή. Συνήθως αντιστοιχεί στο ποσοστό πτώσης της τάσης σε έναν αισθητήρα." @@ -232,6 +232,7 @@ "επόμενος αισθητήρας: %s" "Προσθήκη νέας σημείωσης" "Η σημείωση διαγράφηκε" + "Η εγγραφή διαγράφηκε" "Αναίρεση" "Προσθήκη σημείωσης σε αυτήν την εγγραφή" "Τραβήξτε φωτογραφία για τη σημείωση" @@ -430,7 +431,7 @@ "Επιλογή εικόνας" "Η φωτογραφία βγήκε στις %s" "επιλεγμένη" - "Επεξεργασία φωτογραφίας με…" + "Επεξεργασία φωτογραφίας με…" "Εμφάνιση συρταριού εργαλείου" "Ανάπτυξη συρταριού εργαλείου" "Σύμπτυξη συρταριού εργαλείου" @@ -438,7 +439,10 @@ "Βάλτε σημείωση κειμένου" "Ζωντανή προβολή κάμερας" "Δεν είναι δυνατή η χρήση της κάμερας, επειδή το Science Journal δεν έχει άδεια πρόσβασης." - "Δεν είναι δυνατή η χρήση της βιβλιοθήκης φωτογραφιών, επειδή το Science Journal δεν έχει άδεια πρόσβασης." - - + "Δεν είναι δυνατή η χρήση της συλλογής φωτογραφιών, επειδή το Science Journal δεν έχει άδεια πρόσβασης." + "Άνοιγμα ρυθμίσεων" + "Εμφάνιση αρχειοθετημένων πειραμάτων" + "Απόκρυψη αρχειοθετημένων πειραμάτων" + "Απόκρυψη αρχειοθετημένων εγγραφών" + "Στιγμιότυπο αισθητήρα" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml index ca996d3b..8d048273 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml @@ -200,7 +200,7 @@ "Objects have a tendency to stay put, or to keep moving if they\'re moving – we call this tendency inertia. Newton\'s First Law expresses this idea formally: An object continues in its state of motion or rest unless acted on by an unbalanced force. \n\nWhen an unbalanced force does cause an object to budge, we say the object accelerates: its velocity, or speed, changes – either by speeding up, slowing down, or changing direction. Acceleration is measured as a change of velocity (metres per second) in time, or metres per second squared (m/s²). \n\nYour phone has a device to measure these changes in motion – an accelerometer. Inside an accelerometer, small suspended masses are free to move. Changes in motion cause these masses to shift, much as your own head tends to flop forward when you\'re in a car that stops suddenly. Measuring these subtle inertial shifts, an accelerometer in a phone can detect changes in motion and orientation, useful for switching the screen from landscape to portrait mode, for playing games on your phone and more." "You probably noticed a persistent acceleration in the Z axis, even with the phone sitting still on a table. This is the acceleration we experience here at the Earth\'s surface due to the pull of gravity, approximately 9.8 m/s²." "Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward – much like the expanding circular ripple made by a pebble thrown into a pond." - "All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency, only loudness. \n\nThe quietest sound that the average human ear can detect is defined as 0 dB. Ordinary conversation corresponds to about 60 dB, and sounds above about 140 dB are painful to the human ear. But sounds don\'t have to be painful to be harmful. Continued exposure to sounds of 90 dB – about the loudness of a vacuum cleaner – can eventually cause hearing loss. \n\nThe decibel scale is logarithmic, which makes for some trickiness: A sound source of 40 dB isn\'t twice as intense as one with 20 dB – it\'s 100 times more intense. Meanwhile, if one ringing alarm clock produces 70 dB, two ringing alarm clocks produce not 140 dB, but 73 dB. Like we said, it\'s a strange scale. \n\n10 dB rustling leaves \n20 dB whispering at 1.5 metres \n30 dB soft whisper \n50 dB rainfall \n60 dB normal conversation \n90 dB blender \n100 dB car without silencer \n110 dB shouting in ear \n120 dB thunder \n130 dB jackhammer \n140 dB aeroplane taking off" + "All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency – only loudness. \n\nOne important thing to understand is that the microphone in your device is designed to be very sensitive to differences in sound waves over time, but not the absolute size of each wave. We have tried to choose code that is likely to produce numbers similar to the reference numbers shown below, but each device may give consistently higher or lower numbers. Scientists will usually calibrate a sensor like this to a known measurement. For now, Science Journal can tell you whether your next train ride is louder than your next rock concert, but only if you bring the same phone to both events. \n\nAnother thing to note is that there are important differences between \'sound intensity\', \'sound intensity level\' and \'sound pressure\'. We are treating them here as the same thing, but if you want to dig deeper, there are many online resources about the differences. \n\nThe quietest sound that the average human ear can detect is defined as 0 dB. Ordinary conversation corresponds to about 60 dB, and sounds above about 140 dB are painful to the human ear. But sounds don\'t have to be painful to be harmful. Continued exposure to sounds of 90 dB – about the loudness of a vacuum cleaner – can eventually cause hearing loss. \n\nThe decibel scale is logarithmic, which makes for some trickiness: A sound source of 40 dB isn\'t twice as intense as one with 20 dB – it\'s 100 times more intense. Meanwhile, if one ringing alarm clock produces 70 dB, two ringing alarm clocks produce not 140 dB, but 73 dB. Like we said, it\'s a strange scale. \n\n10 dB rustling leaves \n20 dB whispering at 5 feet \n30 dB soft whisper \n50 dB rainfall \n60 dB normal conversation \n90 dB blender \n100 dB car without muffler \n110 dB shouting in ear \n120 dB thunder \n130 dB jackhammer \n140 dB aeroplane taking off" "Rotations per minute (RPM) is a measure of the frequency of rotation around a fixed axis in one minute. \n\nAs your wind spinner turns, it rotates the encoder disc:" "This creates periods of light and dark on the sensor that register in the Science Journal as a rotation." "The data displayed here is coming from an external sensor communication with your phone via Bluetooth. \n\nThe value shows the percentage of the raw reading directly from your microcontroller. This is usually the percentage of a voltage drop across a sensor." @@ -232,6 +232,7 @@ "next sensor: %s" "Add a new note" "Note deleted" + "Recording deleted" "Undo" "Add note to this recording" "Take picture note" @@ -430,7 +431,7 @@ "Choose picture" "Image taken on %s" "selected" - "Edit photo with..." + "Edit photo with…" "Show tool drawer" "Expand tool drawer" "Collapse tool drawer" @@ -438,7 +439,10 @@ "Add text note" "Camera live view" "The camera cannot be used because Science Journal does not have permission to access it." - "Your photo library cannot be used because Science Journal does not have permission to access it." - - + "Your photo gallery cannot be used because Science Journal does not have permission to access it." + "Open Settings" + "Show archived experiments" + "Hide archived experiments" + "Hide archived recordings" + "Sensor snapshot" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml index ca996d3b..8d048273 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml @@ -200,7 +200,7 @@ "Objects have a tendency to stay put, or to keep moving if they\'re moving – we call this tendency inertia. Newton\'s First Law expresses this idea formally: An object continues in its state of motion or rest unless acted on by an unbalanced force. \n\nWhen an unbalanced force does cause an object to budge, we say the object accelerates: its velocity, or speed, changes – either by speeding up, slowing down, or changing direction. Acceleration is measured as a change of velocity (metres per second) in time, or metres per second squared (m/s²). \n\nYour phone has a device to measure these changes in motion – an accelerometer. Inside an accelerometer, small suspended masses are free to move. Changes in motion cause these masses to shift, much as your own head tends to flop forward when you\'re in a car that stops suddenly. Measuring these subtle inertial shifts, an accelerometer in a phone can detect changes in motion and orientation, useful for switching the screen from landscape to portrait mode, for playing games on your phone and more." "You probably noticed a persistent acceleration in the Z axis, even with the phone sitting still on a table. This is the acceleration we experience here at the Earth\'s surface due to the pull of gravity, approximately 9.8 m/s²." "Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward – much like the expanding circular ripple made by a pebble thrown into a pond." - "All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency, only loudness. \n\nThe quietest sound that the average human ear can detect is defined as 0 dB. Ordinary conversation corresponds to about 60 dB, and sounds above about 140 dB are painful to the human ear. But sounds don\'t have to be painful to be harmful. Continued exposure to sounds of 90 dB – about the loudness of a vacuum cleaner – can eventually cause hearing loss. \n\nThe decibel scale is logarithmic, which makes for some trickiness: A sound source of 40 dB isn\'t twice as intense as one with 20 dB – it\'s 100 times more intense. Meanwhile, if one ringing alarm clock produces 70 dB, two ringing alarm clocks produce not 140 dB, but 73 dB. Like we said, it\'s a strange scale. \n\n10 dB rustling leaves \n20 dB whispering at 1.5 metres \n30 dB soft whisper \n50 dB rainfall \n60 dB normal conversation \n90 dB blender \n100 dB car without silencer \n110 dB shouting in ear \n120 dB thunder \n130 dB jackhammer \n140 dB aeroplane taking off" + "All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency – only loudness. \n\nOne important thing to understand is that the microphone in your device is designed to be very sensitive to differences in sound waves over time, but not the absolute size of each wave. We have tried to choose code that is likely to produce numbers similar to the reference numbers shown below, but each device may give consistently higher or lower numbers. Scientists will usually calibrate a sensor like this to a known measurement. For now, Science Journal can tell you whether your next train ride is louder than your next rock concert, but only if you bring the same phone to both events. \n\nAnother thing to note is that there are important differences between \'sound intensity\', \'sound intensity level\' and \'sound pressure\'. We are treating them here as the same thing, but if you want to dig deeper, there are many online resources about the differences. \n\nThe quietest sound that the average human ear can detect is defined as 0 dB. Ordinary conversation corresponds to about 60 dB, and sounds above about 140 dB are painful to the human ear. But sounds don\'t have to be painful to be harmful. Continued exposure to sounds of 90 dB – about the loudness of a vacuum cleaner – can eventually cause hearing loss. \n\nThe decibel scale is logarithmic, which makes for some trickiness: A sound source of 40 dB isn\'t twice as intense as one with 20 dB – it\'s 100 times more intense. Meanwhile, if one ringing alarm clock produces 70 dB, two ringing alarm clocks produce not 140 dB, but 73 dB. Like we said, it\'s a strange scale. \n\n10 dB rustling leaves \n20 dB whispering at 5 feet \n30 dB soft whisper \n50 dB rainfall \n60 dB normal conversation \n90 dB blender \n100 dB car without muffler \n110 dB shouting in ear \n120 dB thunder \n130 dB jackhammer \n140 dB aeroplane taking off" "Rotations per minute (RPM) is a measure of the frequency of rotation around a fixed axis in one minute. \n\nAs your wind spinner turns, it rotates the encoder disc:" "This creates periods of light and dark on the sensor that register in the Science Journal as a rotation." "The data displayed here is coming from an external sensor communication with your phone via Bluetooth. \n\nThe value shows the percentage of the raw reading directly from your microcontroller. This is usually the percentage of a voltage drop across a sensor." @@ -232,6 +232,7 @@ "next sensor: %s" "Add a new note" "Note deleted" + "Recording deleted" "Undo" "Add note to this recording" "Take picture note" @@ -430,7 +431,7 @@ "Choose picture" "Image taken on %s" "selected" - "Edit photo with..." + "Edit photo with…" "Show tool drawer" "Expand tool drawer" "Collapse tool drawer" @@ -438,7 +439,10 @@ "Add text note" "Camera live view" "The camera cannot be used because Science Journal does not have permission to access it." - "Your photo library cannot be used because Science Journal does not have permission to access it." - - + "Your photo gallery cannot be used because Science Journal does not have permission to access it." + "Open Settings" + "Show archived experiments" + "Hide archived experiments" + "Hide archived recordings" + "Sensor snapshot" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml index ca996d3b..8d048273 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml @@ -200,7 +200,7 @@ "Objects have a tendency to stay put, or to keep moving if they\'re moving – we call this tendency inertia. Newton\'s First Law expresses this idea formally: An object continues in its state of motion or rest unless acted on by an unbalanced force. \n\nWhen an unbalanced force does cause an object to budge, we say the object accelerates: its velocity, or speed, changes – either by speeding up, slowing down, or changing direction. Acceleration is measured as a change of velocity (metres per second) in time, or metres per second squared (m/s²). \n\nYour phone has a device to measure these changes in motion – an accelerometer. Inside an accelerometer, small suspended masses are free to move. Changes in motion cause these masses to shift, much as your own head tends to flop forward when you\'re in a car that stops suddenly. Measuring these subtle inertial shifts, an accelerometer in a phone can detect changes in motion and orientation, useful for switching the screen from landscape to portrait mode, for playing games on your phone and more." "You probably noticed a persistent acceleration in the Z axis, even with the phone sitting still on a table. This is the acceleration we experience here at the Earth\'s surface due to the pull of gravity, approximately 9.8 m/s²." "Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward – much like the expanding circular ripple made by a pebble thrown into a pond." - "All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency, only loudness. \n\nThe quietest sound that the average human ear can detect is defined as 0 dB. Ordinary conversation corresponds to about 60 dB, and sounds above about 140 dB are painful to the human ear. But sounds don\'t have to be painful to be harmful. Continued exposure to sounds of 90 dB – about the loudness of a vacuum cleaner – can eventually cause hearing loss. \n\nThe decibel scale is logarithmic, which makes for some trickiness: A sound source of 40 dB isn\'t twice as intense as one with 20 dB – it\'s 100 times more intense. Meanwhile, if one ringing alarm clock produces 70 dB, two ringing alarm clocks produce not 140 dB, but 73 dB. Like we said, it\'s a strange scale. \n\n10 dB rustling leaves \n20 dB whispering at 1.5 metres \n30 dB soft whisper \n50 dB rainfall \n60 dB normal conversation \n90 dB blender \n100 dB car without silencer \n110 dB shouting in ear \n120 dB thunder \n130 dB jackhammer \n140 dB aeroplane taking off" + "All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency – only loudness. \n\nOne important thing to understand is that the microphone in your device is designed to be very sensitive to differences in sound waves over time, but not the absolute size of each wave. We have tried to choose code that is likely to produce numbers similar to the reference numbers shown below, but each device may give consistently higher or lower numbers. Scientists will usually calibrate a sensor like this to a known measurement. For now, Science Journal can tell you whether your next train ride is louder than your next rock concert, but only if you bring the same phone to both events. \n\nAnother thing to note is that there are important differences between \'sound intensity\', \'sound intensity level\' and \'sound pressure\'. We are treating them here as the same thing, but if you want to dig deeper, there are many online resources about the differences. \n\nThe quietest sound that the average human ear can detect is defined as 0 dB. Ordinary conversation corresponds to about 60 dB, and sounds above about 140 dB are painful to the human ear. But sounds don\'t have to be painful to be harmful. Continued exposure to sounds of 90 dB – about the loudness of a vacuum cleaner – can eventually cause hearing loss. \n\nThe decibel scale is logarithmic, which makes for some trickiness: A sound source of 40 dB isn\'t twice as intense as one with 20 dB – it\'s 100 times more intense. Meanwhile, if one ringing alarm clock produces 70 dB, two ringing alarm clocks produce not 140 dB, but 73 dB. Like we said, it\'s a strange scale. \n\n10 dB rustling leaves \n20 dB whispering at 5 feet \n30 dB soft whisper \n50 dB rainfall \n60 dB normal conversation \n90 dB blender \n100 dB car without muffler \n110 dB shouting in ear \n120 dB thunder \n130 dB jackhammer \n140 dB aeroplane taking off" "Rotations per minute (RPM) is a measure of the frequency of rotation around a fixed axis in one minute. \n\nAs your wind spinner turns, it rotates the encoder disc:" "This creates periods of light and dark on the sensor that register in the Science Journal as a rotation." "The data displayed here is coming from an external sensor communication with your phone via Bluetooth. \n\nThe value shows the percentage of the raw reading directly from your microcontroller. This is usually the percentage of a voltage drop across a sensor." @@ -232,6 +232,7 @@ "next sensor: %s" "Add a new note" "Note deleted" + "Recording deleted" "Undo" "Add note to this recording" "Take picture note" @@ -430,7 +431,7 @@ "Choose picture" "Image taken on %s" "selected" - "Edit photo with..." + "Edit photo with…" "Show tool drawer" "Expand tool drawer" "Collapse tool drawer" @@ -438,7 +439,10 @@ "Add text note" "Camera live view" "The camera cannot be used because Science Journal does not have permission to access it." - "Your photo library cannot be used because Science Journal does not have permission to access it." - - + "Your photo gallery cannot be used because Science Journal does not have permission to access it." + "Open Settings" + "Show archived experiments" + "Hide archived experiments" + "Hide archived recordings" + "Sensor snapshot" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml index 97c1ca78..eb3077fa 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml @@ -200,7 +200,7 @@ "Los objetos tienden a quedarse quietos o a seguir en movimiento si lo están. Esta tendencia se denomina \"inercia\". La primera ley de Newton expresa esta idea de manera formal: un objeto continúa en su estado de movimiento o de reposo a menos que se ejerza sobre él una fuerza desequilibrada. \n\nCuando una fuerza desequilibrada hace que un objeto se desplace, decimos que el objeto acelera: su velocidad cambia, ya sea porque acelera, frena o cambia de dirección. La aceleración se mide como un cambio de velocidad (metros por segundo) en el tiempo, o metros por segundo al cuadrado (m/s²). \n\nTu teléfono tiene un dispositivo para medir estos cambios de movimiento: un acelerómetro. Dentro de un acelerómetro, hay pequeñas masas suspendidas en libertad de movimiento. Los cambios en el movimiento hacen que estas masas se desplacen, de la misma manera en la que tu cabeza se mueve hacia adelante cuando el vehículo en el que vas frena repentinamente. Con esta medición de cambios sutiles en la inercia, el acelerómetro de un teléfono puede detectar cambios en el movimiento y la orientación, que sirven para cambiar la pantalla de modo horizontal a vertical, jugar en el teléfono y otras acciones." "Probablemente notaste una aceleración constante del eje Z, incluso cuando el teléfono está quieto sobre una mesa. Esta es la aceleración que experimentamos en la superficie de la Tierra debido a la fuerza de gravedad, aproximadamente 9.8 m/s²." "Los sonidos se generan mediante vibraciones. Por ejemplo, tu voz viene de vibraciones en las cuerdas vocales. Estas vibraciones crean zonas alternas de presión de aire alta y baja que viajan hacia afuera, al igual que las ondas circulares que se expanden cuando se arroja una piedra a un estanque." - "Todos los sonidos se pueden describir en términos de su frecuencia y su intensidad. \n\nLa intensidad es lo que mides aquí en Science Journal, en unidades de decibeles (dB). La intensidad, o el volumen, depende de la distancia que se mueve un objeto vibrante en cada vibración. Oímos una mayor intensidad como un volumen más alto. \n\nLa frecuencia (o tono) de una onda sonora es equivalente a su índice de vibración. Cuanto más rápido vibre un objeto, mayor será el tono del sonido resultante. Science Journal no mide frecuencia, sino solo volumen. \n\nLa menor intensidad que puede detectar el oído humano promedio se define como 0 dB. Una conversación común corresponde a cerca de 60 dB, y los sonidos por sobre los 140 dB producen dolor en el oído humano. Sin embargo, los sonidos no necesitan ser dolorosos para ser dañinos. La exposición prolongada a sonidos de 90 dB, similar a la intensidad de una aspiradora, puede provocar pérdida auditiva eventualmente. \n\nLa escala de decibeles es logarítmica, lo que la hace algo difícil: una fuente de sonido de 40 dB no tiene el doble de intensidad que una de 20 dB; es 100 veces más intensa. A la vez, si un reloj despertador produce 70 dB, dos relojes despertadores no producen 140 dB, sino 73 dB. Como mencionamos, es una escala extraña. \n\n10 dB: hojas que se mueven con el viento \n20 dB: susurros a un metro y medio \n30 dB: susurro suave \n50 dB: lluvia \n60 dB: conversación normal \n90 dB: licuadora \n100 dB: automóvil sin silenciador \n110 dB: grito al oído \n120 dB: trueno \n130 dB: martillo neumático \n140 dB: despegue de un avión" + "Todos los sonidos se pueden describir en función de su intensidad y frecuencia. \n\nCon Science Journal, puedes medir la intensidad en unidades llamadas decibeles (dB). La intensidad (o volumen) depende de la distancia que recorre un objeto oscilante cada vez que vibra. Cuando la intensidad aumenta, oímos un volumen más alto. \n\nLa frecuencia (también conocida como registro o tono) de una onda de sonido es equivalente a la frecuencia con la que vibra. Cuanto más rápido vibre un objeto, mayor será el tono del sonido resultante. Science Journal no mide la frecuencia, solo el volumen. \n\nTen presente que el micrófono de tu dispositivo se diseñó para detectar las diferencias en las ondas de sonido durante un período determinado, pero no detecta la longitud absoluta de cada onda. Intentamos usar un código que generara valores similares a los que se muestran como referencia a continuación, pero es posible que los resultados sean más altos o más bajos en función del dispositivo que uses. Por lo general, los científicos calibran este tipo de sensores con una medida conocida. Por el momento, Science Journal puede indicarte si tu viaje en tren es más ruidoso que un concierto de rock, siempre y cuando uses el mismo teléfono en ambos eventos. \n\nOtro aspecto que debes considerar es que existen grandes diferencias entre \"intensidad del sonido”, “nivel de intensidad del sonido” y “presión del sonido”. Aquí los usamos como sinónimos, pero existen muchos recursos en línea que explican las diferencias en caso de que quieras obtener más información. \n\nEl sonido más bajo que puede detectar el oído humano promedio se define como 0 dB. Una conversación normal corresponde a unos 60 dB, y los sonidos de más de 140 dB, aproximadamente, son dolorosos para el oído humano. Sin embargo, los sonidos no tienen por qué ser dolorosos para ser nocivos. La exposición continua a sonidos de 90 dB (similares al volumen de una aspiradora) puede causar pérdida de la audición con el tiempo. \n\nLa escala de decibeles es logarítmica, así que puede ser un poco difícil de entender. Una fuente de sonido de 40 dB no es dos veces más intensa que una de 20 dB, sino 100 veces más intensa. Asimismo, si un reloj despertador produce un sonido de 70 dB, dos relojes no producen 140 dB, sino 73 dB. Como mencionamos, es una escala extraña. \n\n10 dB: sonido de las hojas que se mueven con el viento \n20 dB: murmullos a 1.5 metros \n30 dB: susurro suave \n50 dB: lluvia \n60 dB: conversación normal \n90 dB: licuadora \n100 dB: automóvil sin silenciador \n110 dB: gritos en el oído \n120 dB: truenos \n130 dB: martillo mecánico \n140 dB despegue de un avión" "Las revoluciones por minuto (RPM) son una medida de la frecuencia de rotación sobre un eje fijo en un minuto. \n\nA medida que el molinillo gira, se mueve el disco codificador:" "Esto crea períodos de luz y oscuridad en el sensor que se registran en Science Journal como una rotación." "Los datos que aquí se muestran provienen de la comunicación de un sensor externo con el teléfono a través de Bluetooth. \n\nEl valor muestra el porcentaje de la lectura en crudo proveniente directamente del microcontrolador. Por lo general, este es el porcentaje de una caída de voltaje en un sensor." @@ -232,6 +232,7 @@ "Sensor siguiente: %s" "Agregar una nota nueva" "Se borró la nota" + "Se borró la grabación" "Deshacer" "Agregar una nota a esta grabación" "Capturar nota de imagen" @@ -430,7 +431,7 @@ "Elegir foto" "La imagen se capturó el %s" "seleccionada" - "Editar foto con…" + "Editar foto con…" "Mostrar panel lateral de herramientas" "Expandir panel lateral de herramientas" "Contraer panel lateral de herramientas" @@ -438,7 +439,10 @@ "Agregar nota de texto" "Video en vivo de la cámara" "No se puede usar la cámara porque Science Journal no tiene permiso para acceder a ella." - "No se puede usar la biblioteca de fotos porque Science Journal no tiene permiso para acceder a ella." - - + "No se puede usar la galería de fotos porque Science Journal no tiene permiso para acceder a ella." + "Abrir configuración" + "Mostrar experimentos archivados" + "Ocultar experimentos archivados" + "Ocultar grabaciones archivadas" + "Instantánea del sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml index 3a5a14a8..2fc242f0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml @@ -200,7 +200,7 @@ "Los objetos que están quietos tienden a quedarse como están, y los que están en movimiento tienden a seguir moviéndose. A esto lo llamamos inercia. La primera ley de Newton lo explica de manera más formal: un objeto continúa en su estado de reposo o de movimiento a menos que actúe sobre él una fuerza no equilibrada. \n\nCuando una fuerza no equilibrada hace que se mueva un objeto, decimos que el objeto se acelera, es decir, que su velocidad varía; puede que se acelere, que frene o que cambie de dirección. La aceleración se mide como un cambio de la velocidad (metros por segundo) en el tiempo, o metros por segundo al cuadrado (m/s²). \n\nTu teléfono tiene un dispositivo que mide estos cambios en el movimiento: un acelerómetro. Dentro de él se mueven libremente pequeñas masas suspendidas. Los cambios en el movimiento hacen que estas masas se desplacen, igual que tu cabeza se inclina hacia delante cuando vas en coche y da un frenazo. Al medir estas oscilaciones provocadas por la inercia, el acelerómetro del teléfono puede detectar los cambios en el movimiento y la orientación. Esto sirve para cambiar el modo de la pantalla de horizontal a vertical, para jugar a videojuegos, etc." "Puede que hayas visto la aceleración persistente que hay en el eje Z, incluso cuando el teléfono está quieto sobre la mesa. Es la aceleración que experimentamos en la superficie de la Tierra debido a la fuerza de la gravedad, de unos 9,8 m/s²." "Los sonidos se producen por vibración. Tu voz, por ejemplo, suena porque vibran las cuerdas vocales que tienes en la garganta. Esas vibraciones crean zonas de presiones bajas y altas que se van alternando y se proyectan hacia fuera, como sucede con las ondas circulares que se crean en un estanque cuando lanzas una piedra." - "Todos los sonidos se pueden describir en términos de frecuencia e intensidad. \n\nLa intensidad (o volumen) es lo que medimos aquí con Science Journal, en decibelios (dB). Depende de la distancia a la que se mueve un objeto vibratorio cada vez que vibra. Cuanto mayor es la intensidad, más fuertes percibimos los sonidos. \n\nLa frecuencia (o tono) de una onda de sonido equivale a su frecuencia de vibración. Cuanto más rápido vibra un objeto, más agudo es su sonido. En Science Journal no se mide la frecuencia: solo el volumen. \n\nEl sonido más suave que puede percibir el oído humano medio es el que se ha fijado como 0 dB. Una conversación normal corresponde a unos 60 dB y los sonidos que sobrepasan los 140 dB resultan dolorosos para nuestros oídos. Sin embargo, no todos los sonidos dañinos provocan dolor. Una exposición continua a sonidos de 90 dB (el volumen de una aspiradora) puede llegar a causar pérdida auditiva. \n\nLa escala de decibelios es logarítmica, lo que complica un poco las cosas: una fuente de sonido de 40 dB no es el doble de intensa que una de 20 dB, sino que es 100 veces más intensa. Por otra parte, si un despertador produce un sonido de 70 dB, dos no emiten 140 dB, sino 73 dB. Como ves, es una escala peculiar. \n\n10 dB: crujido de hojas \n20 dB: un susurro a metro y medio \n30 dB: un susurro suave \n50 dB: lluvia \n60 dB: conversación normal \n90 dB: batidora \n100 dB: coche sin silenciador \n110 dB: grito en la oreja \n120 dB: trueno \n130 dB: taladradora \n140 dB: avión despegando" + "Todos los sonidos pueden describirse en términos de frecuencia e intensidad. \n\nLa intensidad (o volumen) es lo que medimos aquí con Science Journal en decibelios (dB). Esta magnitud depende de la distancia a la que se mueve un objeto vibratorio cada vez que vibra. Cuanto mayor es la intensidad, más fuertes percibimos los sonidos. \n\nLa frecuencia (o tono) de una onda de sonido equivale a su frecuencia de vibración. Cuanto más rápido vibra un objeto, más agudo es su sonido. En Science Journal no se mide la frecuencia, solo el volumen. \n\nEs importante señalar que el micrófono de tu dispositivo está diseñado para percibir incluso los cambios más sutiles en las ondas sonoras a lo largo del tiempo, pero no para determinar el tamaño absoluto de cada onda. Hemos tratado de elegir un código que probablemente dé como resultado cifras similares a las que aparecen abajo, aunque cada dispositivo puede mostrar números superiores o inferiores de forma constante. Los científicos suelen calibrar este tipo de sensores con un patrón de referencia conocido. A día de hoy, Science Journal es capaz de determinar si la intensidad del sonido del próximo tren que cojas es mayor que el próximo concierto de rock al que asistas, siempre y cuando lleves el mismo teléfono en ambas ocasiones. \n\nOtro aspecto destacable es que hay diferencias entre la intensidad del sonido (o intensidad acústica), el nivel de intensidad del sonido y la presión sonora. Aquí los tratamos como sinónimos, pero si investigas un poco por Internet, descubrirás las diferencias. \n\nEl sonido más suave que puede percibir el oído humano medio es el que se ha fijado como 0 dB. Una conversación normal corresponde a unos 60 dB y los sonidos que sobrepasan los 140 dB resultan dolorosos para nuestros oídos. Sin embargo, no todos los sonidos dañinos provocan dolor. Una exposición continua a sonidos de 90 dB (el volumen de una aspiradora) puede llegar a causar pérdida auditiva. \n\nLa escala de decibelios es logarítmica, lo que complica un poco las cosas: una fuente de sonido de 40 dB no es el doble de intensa que una de 20 dB, sino que es 100 veces más intensa. Por otra parte, si un despertador produce un sonido de 70 dB, dos no emiten 140 dB, sino 73 dB. Como ves, se trata de una escala peculiar. \n\n10 dB: crujido de hojas \n20 dB: un susurro a metro y medio \n30 dB: un susurro suave \n50 dB: lluvia \n60 dB: conversación normal \n90 dB: batidora \n100 dB: coche sin silenciador \n110 dB: grito en la oreja \n120 dB: trueno \n130 dB: taladradora \n140 dB: avión despegando" "Las revoluciones por minuto (RPM) son una medida de frecuencia de rotación en torno a un eje fijo en un minuto. \n\nCuando el molinillo de viento gira, hace que rote el disco del codificador:" "Esto genera periodos de luz y oscuridad en el sensor que se registran en Science Journal como una rotación." "Los datos que se muestran aquí proceden de la comunicación de un sensor externo con tu teléfono a través de Bluetooth. \n\nEl valor que aparece muestra el porcentaje de lectura sin procesar obtenido directamente del microcontrolador. Suele ser el porcentaje de la caída de tensión en un sensor." @@ -232,6 +232,7 @@ "siguiente sensor: %s" "Añade una nueva nota" "Nota eliminada" + "Grabación eliminada" "Deshacer" "Añadir nota a esta grabación" "Añadir imagen como nota" @@ -430,7 +431,7 @@ "Elegir imagen" "Imagen tomada el %s" "seleccionada" - "Editar foto con..." + "Editar foto con…" "Mostrar panel de herramientas" "Expandir panel de herramientas" "Ocultar panel de herramientas" @@ -438,7 +439,10 @@ "Añadir nota de texto" "Vídeo en directo de la cámara" "No se puede usar la cámara porque Science Journal no tiene permiso para acceder a ella." - "No se puede usar la biblioteca de fotos porque Science Journal no tiene permiso para acceder a ella." - - + "No se puede usar la galería de fotos porque Science Journal no tiene permiso para acceder a ella." + "Abrir Ajustes" + "Mostrar experimentos archivados" + "Ocultar experimentos archivados" + "Ocultar grabaciones archivadas" + "Captura del sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml index 51fde90e..0f874300 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml @@ -200,7 +200,7 @@ "Paikallaan olevalla kappaleella on taipumus pysyä paikallaan ja liikkuvalla kappaleella taipumus jatkaa liikettään tasaisesti. Tätä kutsutaan jatkavuudeksi, ja se on määritelty virallisesti Newtonin I laissa eli mekaniikan I peruslaissa: Kappale säilyttää liiketilansa, ellei mikään ulkoinen voima muuta sitä. \n\nKun jokin ulkoinen voima vaikuttaa kappaleen liiketilaan, sanotaan, että kappaleen vauhti kiihtyy eli sen nopeus muuttuu: kappaleen vauhti joko nopeutuu tai hidastuu tai kappale vaihtaa suuntaa. Kiihtyvyyttä mitataan nopeuden muutoksena tietyssä ajassa (metriä sekunnissa) tai metreinä neliösekunnissa (m/s²). \n\nPuhelimessasi on kiihtyvyysmittari, jolla voi mitata nopeuden muutoksia. Kiihtyvyysmittarin sisällä on pieniä painoja, jotka liikkuvat vapaasti nopeuden muutosten mukaan – vähän samaan tapaan kuin matkustajan pää heilahtaa eteenpäin, kun auto jarruttaa äkillisesti. Puhelimen kiihtyvyysmittari tunnistaa pienetkin liikkeet ja puhelimen asennon, mitä hyödynnetään esimerkiksi ruudun kääntämisessä vaakasuunnasta pystysuuntaan ja takaisin sekä mobiilipelien pelaamisessa." "Huomasit varmaankin, että anturi rekisteröi kiihtyvyyttä Z-akselilla, vaikka puhelin olisi liikkumatta pöydällä. Kyseessä on Maapallon painovoiman aiheuttama vetokiihtyvyys, joka on noin 9,8 m/s²." "Ääni muodostuu värähdysliikkeistä. Esimerkiksi oma puheesi syntyy kurkussa sijaitsevien äänihuulien värähtelystä, joka synnyttää vuorotellen korkeita ja matalia paineaaltoja. Nämä paineaallot leviävät ympäristöön kuin järveen heitetyn kiven aiheuttamat renkaat." - "Kaikille äänille voidaan määrittää taajuus ja intensiteetti. \n\nScience Journalissa voit mitata äänen intensiteettiä desibeleinä (dB). Äänen intensiteetti eli voimakkuus riippuu etäisyydestä, jonka värisevä kappale liikkuu väristessään; mitä suurempi intensiteetti, sitä kovempi ääni. \n\nÄäniaallon taajuus (eli säveltaso tai äänen sävy) vastaa sen synnyttävän värinän taajuutta. Mitä nopeammin kappale värisee, sitä korkeampi ääni siitä syntyy. Science Journalissa ei voi mitata äänen taajuutta vaan vain sen voimakkuutta. \n\nHiljaisin ääni, jonka keskiverto ihmiskorva erottaa, on 0 dB. Normaali keskustelu on voimakkuudeltaan noin 60 dB. Yli 140 dB:n äänet aiheuttavat ihmisille kipua, mutta jo sitä alempi melu voi vaurioittaa kuuloa. Jatkuva altistuminen vähintään 90 dB:n melulle (vastaa pölynimurin käyntiääntä) voi aiheuttaa kuulovamman. \n\nKannattaa kiinnittää huomiota siihen, että desibeliasteikko on logaritminen: 40 dB ei ole kaksi kertaa voimakkaampi kuin 20 dB – se on 100 kertaa voimakkaampi. Jos yksi herätyskello tuottaa 70 dB, kaksi herätyskelloa ei tuota 140 dB vaan 73 dB. Asteikko ei siis ole täysin suoraviivainen. \n\n10 dB: lehtien kahina \n20 dB: kuiskaus 1,5 metrin päästä \n30 dB: pehmeä kuiskaus \n50 dB: sade \n60 dB: normaali keskustelu \n90 dB: tehosekoitin \n100 dB: auto ilman äänenvaimenninta \n110 dB: huutaminen korvan juuressa \n120 dB: ukkonen \n130 dB: paineilmavasara \n140 dB: lentokoneen nousukiito" + "Kaikkia ääniä voidaan kuvailla sekä taajuuden että voimakkuuden mukaan. \n\nScience Journalilla mitataan voimakkuutta desibeleinä (dB). Voimakkuus eli intensiteetti riippuu siitä etäisyydestä, jonka värähtelevä esine liikkuu aina värähdellessään. Mitä suurempi intensiteetti on, sitä kovemmalta ääni kuulostaa. \n\nÄäniaallon taajuus (tai korkeus) riippuu värähtelynopeudesta. Mitä nopeammin esine värähtelee, sitä korkeamman äänen se tuottaa. Science Journal ei mittaa taajuutta vaan pelkästään voimakkuutta. \n\nLaitteesi mikrofoni tunnistaa erittäin herkästi ääniaaltojen muutokset ajan suhteen mutta ei kunkin aallon absoluuttista kokoa. Olemme pyrkineet valitsemaan sellaisen koodin, joka todennäköisesti tuottaa alla olevien viitelukemien kaltaisia lukemia, mutta käytettävä laite voi antaa suurempia tai pienempiä lukemia. Yleensä tutkijat kalibroivat käytettävän anturin jonkin tunnetun mitan mukaan. Tällä hetkellä Science Journal pystyy kertomaan, onko äänenvoimakkuus suurempi junamatkalla vai rock-konsertissa, mutta vain jos käytät mittaamiseen samaa puhelinta. \n\nOn myös hyvä tietää, että äänen intensiteetillä, äänen intensiteettitasolla ja äänenpaineella on tiettyjä eroja. Tässä käsittelemme niitä samana asiana, mutta netissä on paljon tietoa eroista. \n\nHiljaisimman tavallisen ihmiskorvan kuuleman äänen voimakkuudeksi on määritetty 0 dB. Normaalin keskustelun äänenvoimakkuus on noin 60 dB, ja voimakkuudeltaan yli noin 140 desibelin äänet sattuvat ihmiskorvaan. Haitalliset äänet eivät kuitenkaan aina aiheuta kipua. Jatkuva altistuminen 90 desibelin äänille – eli voimakuudeltaan suurin piirtein imurin ääntä vastaaville äänille – voi aiheuttaa kuulon heikkenemistä pitkällä aikavälillä. \n\nDesibeliasteikko on logaritminen, mikä hankaloittaa asioita hieman. Jos äänilähteen intensiteetti on 40 dB, sen äänenvoimakkuus ei ole kaksinkertainen 20 desibelin äänilähteeseen verrattuna vaan satakertainen. Yksi herätyskello tuottaa 70 desibelin äänen, mutta kaksi herätyskelloa tuottaa 140 desibelin sijaan 73 desibelin äänen. Kuten sanottu, asteikko on siis erikoinen. \n\n10 dB – lehtien havina \n20 dB – kuiskaus 1,5 metrin etäisyydeltä \n30 dB – hiljainen kuiskaus \n50 dB – sateen ropina\n60 dB – normaali keskustelu \n90 dB – tehosekoitin \n100 dB – auto, jossa ei ole äänenvaimenninta \n110 dB – korvaan huutaminen \n120 dB – ukkonen \n130 dB – porakone\n140 dB – lentokoneen nouseminen ilmaan" "Kierr./min on pyörimisnopeuden yksikkö, joka kertoo, kuinka monta kierrosta kappale pyörähtää akselinsa ympäri minuutissa \n\nKun hyrrä pyörii, se pyörittää enkooderilevyä:" "Näin valo ja varjo vuorottelevat joka kierroksella, ja anturi muuttaa tämän tiedon kierr./min-arvoksi Science Journalissa." "Tässä näkyvät tiedot ovat peräisin ulkoisesta anturista, joka on yhteydessä puhelimeen Bluetoothin kautta. \n\nArvo kertoo suoraan mikro-ohjaimesta saadun raakalukeman prosenttiluvun. Tämä on yleensä anturin jännitehäviön prosenttiosuus." @@ -232,6 +232,7 @@ "Seuraava anturi: %s" "Lisää uusi muistiinpano" "Muistiinpano poistettu" + "Tallenne poistettu" "Kumoa" "Lisää muistiinpano tähän tallenteeseen" "Luo kuvamuistiinpano" @@ -430,7 +431,7 @@ "Valitse kuva" "Kuva otettu %s" "valittu" - "Muokkaa kuvaa sovelluksella…" + "Muokkaa kuvaa sovelluksella…" "Näytä työkaluvetopaneeli" "Laajenna työkaluvetopaneeli" "Tiivistä työkaluvetopaneeli" @@ -438,7 +439,10 @@ "Lisää tekstimuistiinpano" "Kameran näkymä" "Kameraa ei voi käyttää, koska Science Journalilla ei ole lupaa käyttää sitä." - "Kuvakirjastoa ei voi käyttää, koska Science Journalilla ei ole lupaa käyttää sitä." - - + "Kuvagalleriaa ei voi käyttää, koska Science Journalilla ei ole lupaa käyttää sitä." + "Avaa Asetukset" + "Näytä arkistoidut kokeet" + "Piilota arkistoidut kokeet" + "Piilota arkistoidut tallenteet" + "Anturiotos" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml index 02a4209c..d5490007 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml @@ -200,7 +200,7 @@ "Les objets ont tendance à rester immobiles ou à rester en mouvement s\'ils l\'étaient au départ. On appelle cette tendance \"inertie\". La première loi de Newton l\'énonce ainsi : un objet demeure à l\'état de repos ou de mouvement uniforme en ligne droite dans lequel il se trouve, à moins qu\'une force déséquilibrée n\'agisse sur lui. \n\nLorsqu\'une force déséquilibrée entraîne un mouvement de l\'objet, nous disons que l\'objet accélère. Sa vélocité ou vitesse change. Elle peut augmenter, diminuer ou l\'objet peut changer de direction. L\'accélération est mesurée en fonction de la variation de la vélocité (en mètres par seconde) sur la durée, ou en mètres par seconde carrée (m/s²). \n\nVotre téléphone dispose d\'un appareil permettant de mesurer ces changements de mouvement : un accéléromètre. L\'accéléromètre se compose de petites masses suspendues libres de leurs mouvements. Les changements de mouvement entraînent un déplacement de ces masses, de même que votre tête est entraînée vers l\'avant lorsque vous êtes dans une voiture qui freine brusquement. En mesurant ces légers déplacements, l\'accéléromètre de votre téléphone peut détecter des changements de mouvement et de direction, ce qui est très utile pour lui permettre de passer du mode portrait ou mode paysage, pour les jeux vidéo et bien d\'autres applications." "Vous avez probablement remarqué une accélération continue sur l\'axe Z, même lorsque votre téléphone est posé sur une table. Il s\'agit de l\'accélération que nous ressentons ici, à la surface de la Terre, en raison de la force de gravité. Elle est d\'environ 9,8 m/s²." "Les sons proviennent des vibrations. Par exemple, votre voix est émise par les vibrations des cordes vocales de votre gorge. Ces vibrations créent des zones alternées de haute et basse pression d\'air qui se propagent vers l\'extérieur, un peu comme des ondulations circulaires qui apparaissent lorsque vous jetez un caillou dans un étang." - "Tous les sons peuvent être décrits en termes de fréquence et d\'intensité. \n\nL\'intensité est ce que vous mesurez avec Science Journal et s\'exprime en décibels (dB). L\'intensité, ou la sonie, dépend de la distance parcourue par l\'objet en mouvement à chaque vibration ; nous percevons une intensité plus importante lorsque la sonie augmente. \n\nLa fréquence (ou hauteur, ou ton) d\'une onde sonore équivaut à son taux de vibration. Plus un objet vibre vite, plus la hauteur du son émis est élevée. Science Journal ne mesure pas la fréquence, mais seulement la sonie. \n\nLe son le plus discret que l\'oreille d\'un être humain moyen peut percevoir est de zéro décibel. Une conversation ordinaire atteint environ 60 dB, et les sons supérieurs à 140 dB sont douloureux pour l\'oreille humaine. Cependant, même les sons qui ne font pas mal peuvent être dangereux. Une exposition continue à des sons de 90 dB (ce qui équivaut à la sonie d\'un aspirateur) peut entraîner une perte de l\'audition. \n\nL\'échelle des décibels est logarithmique, ce qui peut être assez trompeur : une source sonore de 40 dB n\'est pas deux fois plus intense qu\'une source de 20 dB. Elle est en réalité 100 fois plus intense. Dans le même temps, si l\'alarme d\'un réveil génère 70 dB, deux alarmes ne produiront pas 140, mais 73 dB. Cette échelle fonctionne en effet étrangement. \n\n10 dB : bruissements de feuilles \n20 dB : chuchotement à 1,5 m \n30 dB : léger chuchotement \n50 dB : pluie \n60 dB : conversation normale \n90 dB : mixeur \n100 dB : voiture sans silencieux \n110 dB : cri dans l\'oreille \n120 dB : tonnerre \n130 dB : marteau-piqueur \n140 dB : décollage d\'un avion" + "Tous les sons peuvent être décrits en termes de fréquence et d\'intensité. \n\nL\'intensité est ce que vous mesurez avec Science Journal et s\'exprime en décibels (dB). L\'intensité, ou la sonie, dépend de la distance parcourue par l\'objet en mouvement à chaque vibration ; nous percevons une intensité plus importante lorsque la sonie augmente. \n\nLa fréquence (ou hauteur, ou ton) d\'une onde sonore équivaut à son taux de vibration. Plus un objet vibre vite, plus la hauteur du son émis est élevée. Science Journal ne mesure pas la fréquence, mais seulement la sonie. \n\nIl faut savoir que le micro de votre appareil est conçu pour être très sensible aux différences d\'ondes sonores dans le temps, mais pas à la taille absolue de chaque onde. Nous avons essayé de choisir un code susceptible de générer des données similaires aux références présentées ci-dessous, mais chaque appareil peut invariablement fournir des données plus ou moins élevées. Les scientifiques étalonnent généralement un capteur comme celui-ci en fonction d\'une mesure connue. Pour l\'instant, Science Journal peut vous indiquer si votre prochain voyage en train sera plus bruyant que le concert de rock auquel vous assisterez, mais seulement si vous utilisez le même téléphone dans les deux situations. \n\nUne autre chose à savoir est qu\'il existe d\'importantes différences entre l\'intensité du son, le niveau d\'intensité du son et la pression acoustique. Nous utilisons ici ces termes indifféremment, mais si vous souhaitez en savoir plus, vous trouverez de nombreuses ressources en ligne expliquant leurs caractéristiques. \n\nLe son le plus discret que l\'oreille d\'un être humain lambda peut percevoir est de zéro décibel. Une conversation ordinaire atteint environ 60 dB, et les sons supérieurs à 140 dB sont douloureux pour l\'oreille humaine. Cependant, même les sons qui ne font pas mal peuvent être dangereux. Une exposition continue à des sons de 90 dB (ce qui équivaut à la sonie d\'un aspirateur) peut entraîner une perte de l\'audition. \n\nL\'échelle des décibels est logarithmique, ce qui peut être assez trompeur : une source sonore de 40 dB n\'est pas deux fois plus intense qu\'une source de 20 dB. Elle est en réalité 100 fois plus intense. Dans le même temps, si l\'alarme d\'un réveil génère 70 dB, deux alarmes ne produiront pas 140, mais 73 dB. Cette échelle fonctionne en effet étrangement. \n\n10 dB : bruissements de feuilles \n20 dB : chuchotement à 1,5 m \n30 dB : léger chuchotement \n50 dB : pluie \n60 dB : conversation normale \n90 dB : mixeur \n100 dB : voiture sans silencieux \n110 dB : cri dans l\'oreille \n120 dB : tonnerre \n130 dB : marteau-piqueur \n140 dB : décollage d\'un avion" "Le tour par minute (tr/min) est une unité permettant de mesurer la fréquence de rotation autour d\'un axe fixe en une minute. \n\n Lorsque votre girouette tourne, elle entraîne une rotation du disque codeur :" "Cela est interprété en périodes de lumière et d\'obscurité par le capteur et enregistré dans Science Journal en tant que rotation." "Les données qui s\'affichent ici proviennent d\'un capteur externe et sont transmises à votre téléphone par Bluetooth. \n\nLa valeur indique le pourcentage de la mesure brute obtenue directement à partir du microcontrôleur. Il s\'agit généralement du pourcentage d\'une chute de tension rencontrée par le capteur." @@ -232,6 +232,7 @@ "Capteur suivant : %s" "Ajouter une note" "Note supprimée" + "Enregistrement supprimé" "Annuler" "Ajouter une note à cet enregistrement" "Ajouter une photo à la note" @@ -430,7 +431,7 @@ "Sélectionner une photo" "Photo prise le %s" "sélectionnée" - "Modifier la photo avec…" + "Modifier la photo avec…" "Afficher le panneau des outils" "Développer le panneau des outils" "Réduire le panneau des outils" @@ -438,7 +439,10 @@ "Ajouter note textuelle" "Aperçu de l\'enregistrement en direct" "Impossible d\'utiliser l\'appareil photo, car Science Journal n’est pas autorisé à y accéder." - "Impossible d\'utiliser votre photothèque, car Science Journal n’est pas autorisé à y accéder." - - + "Impossible d\'utiliser votre galerie photo, car Science Journal n\'est pas autorisé à y accéder." + "Ouvrir les paramètres" + "Afficher les expériences archivées" + "Masquer les expériences archivées" + "Masquer les enregist. archivés" + "Instantané des capteurs" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml index 1f990d57..ce292989 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml @@ -18,7 +18,7 @@ "विज्ञान शोध पत्रिका" - "फ़ीडबैक भेजें" + "सुझाव भेजें" "सेटिंग" "संक्षिप्त परिचय" "सहेजें" @@ -200,7 +200,7 @@ "वस्तु की प्रवृत्ति यथास्थिति बने रहने की या यदि वो चल रहे हों तो चलते रहने कि होती है—इस प्रवृत्ति को हम जड़त्व कहते हैं. न्यूटन का पहला नियम इस विचार को औपचारिक रूप से व्यक्त करता है: कोई वस्तु तब तक उसकी गति की अवस्था में या स्थिर अवस्था में बनी रहेगी, जब तक उस पर किसी असंतुलित बल द्वारा क्रिया नहीं की जाती है. \n\nजब कोई असंतुलित बल किसी वस्तु को हिलाने का कारण बनता है, तो हम कहते हैं कि वह वस्तु त्वरण करती है: उसके वेग में परिवर्तन, वेग में कमी या दिशा में परिवर्तन के द्वारा उसकी गति या चाल में बदलाव आता है. त्वरण का मापन समय में गति (मीटर प्रति सेकंड) में हुए परिवर्तन या मीटर प्रति सेकंड वर्ग (m/s²) के रूप में किया जाता है. \n\nचाल में हुए इन परिवर्तनों को मापने का डिवाइस—एक्सेलेरोमीटर आपके फ़ोन में मौजूद है. एक्सेलेरोमीटर के अंदर, गति करने के लिए स्वतंत्र कम द्रव्यमान वाली निलंबित वस्तुएं होती हैं. गति में होने वाले परिवर्तनों के कारण ये वस्तुएं बहुत कुछ वैसे ही स्थानांतरित होती हैं, जैसे कार में होने के दौरान उसके अचानक रुक जाने पर आपका सिर आगे की ओर झुक जाता है. सूक्ष्म रूप से होने वाले इन जड़त्व संबंधी स्थानांतरणों को मापकर फ़ोन में मौजूद एक्सेलेरोमीटर चाल और अभिविन्यास में हुए उन परिवर्तनों का पता लगा सकता है, जो स्क्रीन को लैंडस्केप से पोर्ट्रेट मोड में बदलने, आपके फ़ोन पर गेम खेलने और अन्य कार्यों के लिए उपयोगी है." "संभवतः आपने टेबल पर फ़ोन के स्थिर होने पर भी Z अक्ष में होते सतत त्वरण पर ध्यान दिया होगा. यह त्वरण है, जिसका अनुभव हमें यहां पृथ्वी की सतह पर गुरुत्वाकर्षण बल के कारण होता है, जो लगभग 9.8 मी/से² है." "कंपन से ध्वनियां बनती हैं. उदाहरण के लिए आपकी आवाज़ आपके कंठ की स्वरतंत्री में हुए कंपनों से आती है. ये कंपन उच्च और निम्न वायु दबाव के एकांतर क्षेत्र बनाते हैं जो बाहर की ओर गति करते हैं—बहुत कुछ वैसे ही जैसे किसी तालाब में पत्थर फेंकने पर विस्तारित होती हुई गोलाकार लहरें बनती हैं." - "सभी ध्वनियों का वर्णन आवृत्ति और तीव्रता के रूप में किया जा सकता है. \n\nतीव्रता वह है, जिसका मापन आप यहां विज्ञान शोध पत्रिका में डेसिबल(dB) की इकाइयों में करते हैं. तीव्रता या आवाज़ की तेज़ी, उस दूरी पर निर्भर है, जितनी दूरी तक कंपन करती हुई कोई वस्तु कंपन करते समय प्रत्येक बार जाती है; हम अधिक तीव्रता को अधिक तेज़ी के रूप में सुनते हैं. \n\nध्वनि तरंग की आवृत्ति (इसे पिच या टोन भी कहते हैं) कंपन की दर के समतुल्य होती है. कोई वस्तु जितनी तेज़ी से कंपन करती है, परिणामी ध्वनि का पिच भी उतना ही अधिक होता है. विज्ञान शोध पत्रिका आवृत्ति का नहीं—केवल आवाज़ की तेज़ी का मापन करती है. \n\nवह सबसे त्वरित ध्वनि जिसका पता औसत मानवीय कर्ण लगा सकता है उसे 0 dB के रूप में परिभाषित किया जाता है. सामान्य वार्तालाप लगभग 60 dB के संगत होता है, और लगभग 140 dB से अधिक की ध्वनियां मानवीय कर्ण के लिए पीड़ादायी होती हैं. लेकिन हानिकारक होने के लिए ध्वनियों का पीड़ादायी होना आवश्यक नहीं है. 90 dB की ध्वनियां—किसी वैक्यूम क्लीनर के शोर के लगभग ध्वनि के सतत संपर्क में रहने के परिणामस्वरूप श्रवण शक्ति की हानि हो सकती है. \n\nडेसिबल पैमाना, लघुगणक रूप में है, जो कुछ जटिलता उत्पन्न करता है: 40 dB का कोई ध्वनि स्रोत 20 dB वाले ध्वनि स्रोत की तीव्रता के दो गुना के बराबर नहीं है—यह 100 गुना अधिक तीव्र है. इसके साथ ही, यदि बजने वाली कोई अलार्म घड़ी 70 dB उत्पन्न करती है, तो दो अलार्म घड़ियां 140 dB नहीं बल्कि 73 dB उत्पन्न करेंगी. जैसा कि हमने कहा कि यह एक अनोखा पैमाना है. \n\nपत्तों से उत्पन्न आवाज़ें 10 dB \n5 फ़ीट की दूरी पर फुसफुसाहट 20 dB \nधीरे-धीरे फुसफुसाना 30 dB \nवर्षा 50 dB \nसामान्य वार्तालाप 60 dB \nब्लेंडर 90 dB \nमफ़लर के बिना कार ड्राइवर करना 100 dB \nकान में चिल्लाना 110 dB \nतूफ़ान 120 dB \nहथौड़े की आवाज़ 130 dB \nहवाई ज़हाज़ का टेक ऑफ़ करना 140 dB" + "सभी ध्वनियों का वर्णन उनकी आवृत्ति और तीव्रता के रूप में किया जा सकता है. \n\nतीव्रता वह है, जिसका मापन आप यहां विज्ञान शोध पत्रिका से डेसिबल (dB) की इकाई में करते हैं. तीव्रता या प्रबलता उस दूरी पर निर्भर है जिसमें कंपन करती है जिसे कोई ऑब्जेक्ट प्रत्येक बार कंपन करने पर तय करता है; हमें प्रबलता के बढ़ने पर अधिक तीव्रता सुनाई देती है. \n\nध्वनि की किसी तरंग की *आवृत्ति* (इसे पिच या टोन भी कहते हैं) इसके कंपन की दर के समान होती है. जितनी तेज़ी से कोई ऑब्जेक्ट कंपन करता है, परिणामी ध्वनि का पिच भी उतना ही अधिक होगा. विज्ञान शोध पत्रिका, आवृत्ति का मापन नहीं करती है, केवल प्रबलता का मापन करती है. \n\n एक महत्वपूर्ण बात जानना ज़रूरी है कि आपके डिवाइस का माइक्रोफ़ोन इस प्रकार डिज़ाइन किया गया है कि जिससे वह समय के साथ ध्वनि तरंगों में अंतर के प्रति बहुत संवेदनशील होता है, लेकिन यह हर तरंग का सटीक आकार नहीं जान पाता है. हमने ऐसा कोड चुनने की कोशिश की है, जो नीचे दिखाए गए संदर्भ नंबर के समान नंबर देता है, लेकिन हर एक डिवाइस लगातार अधिक या कम संख्या दिखा सकते हैं. वैज्ञानिक, माप निकालने के लिए आमतौर पर इस तरह के सेंसर का उपयोग करते हैं. अभी के लिए, विज्ञान शोध पत्रिका से आपको पता चल सकता है कि आपकी अगली ट्रेन की सवारी की ध्वनि आपके अगले रॉक कंसर्ट की ध्वनि की तुलना में अधिक तेज है या नहीं, लेकिन इसके लिए आपकों दोनों जगहों पर समान फ़ोन उपयोग में लाना होगा. \n\n एक और बात जानना ज़रूरी है कि “ध्वनि की तीव्रता”, “ध्वनि की तीव्रता का स्तर” और “ध्वनि का दबाव” इनके बीच महत्वपूर्ण अंतर है. हालांकि यहां हम उन्हें एक जैसा ही मान रहे हैं, लेकिन अगर आप विस्तार में जानकारी चाहते हैं, तो इनके बीच के अंतरों के बारे में जानने के लिए कई ऑनलाइन संसाधन उपलब्ध हैं. \n\nवह सबसे कम ध्वनि, जिसका पता किसी सामान्य व्यक्ति के कानों से लगाया जा सकता है 0 dB के रूप में निर्धारित की गई है. सामान्य वार्तालाप 60 dB के संगत होता है, और लगभग 140 dB से अधिक ध्वनियां मनुष्य के कानों के लिए परेशानी भरी होती हैं. लेकिन हानिकारक होने के लिए ध्वनियों का परेशानी भरा होना आवश्यक नहीं है. 90 dB की ध्वनि के लगातार संपर्क में रहने—जो कि किसी वैक्यूम क्लीनर की ध्वनि के जितनी तीव्र होती है—अंततः बहरापन हो सकता है. \n\nडेसिबल पैमाना लघुगणकीय है, जिसे दक्षता के लिए बनाया गया है: 40 dB के ध्वनि स्रोत की तीव्रता 20 dB वाले ध्वनि स्रोत से दोगुनी नहीं होती है—यह उससे 100 गुना अधिक तेज होती है. इसके साथ, अगर बजने वाली कोई अलार्म घड़ी 70 dB ध्वनि उत्पन्न करती है, तो बजने वाली दो अलार्म घड़ियां 140 dB ध्वनि उत्पन्न नहीं करती हैं, बल्कि 73 dB ध्वनि उत्पन्न करती हैं. जैसा कि हमने कहा कि यह एक अनोखा पैमाना है. \n\nपत्तियों की सरसराहट 10 dB \n5 फ़ीट की दूरी पर फुसफुसाहट 20 dB \nधीमी फ़ुसफ़ुसाहट 30 dB \nवर्षा 50 dB \nसामान्य वार्तालाप 60 dB \nब्लेंडर 90 dB\nसाइलेंसर के बिना कार 100 dB \nकान में चिल्लाना 110 dB \nतूफ़ान 120 dB\nहथौड़े की आवाज़ 130 dB \n140 dB पर ज़मीन से उड़ान भर रहा विमान" "परिक्रमण प्रति मिनट (RPM) एक मिनट में किसी नियत अक्ष के चारों ओर परिक्रमण की आवृत्ति है. \n\nजैसे ही आपका विंड स्पिनर घूमता है, यह एन्कोडर डिस्क को घुमाती है:" "यह सेंसर पर प्रकाश और अंधेरे की अवधि बनाता है, जिसे विज्ञान शोध पत्रिका में परिक्रमण के रूप में पंजीकृत किया गया है." "यहांं प्रदर्शित डेटा ब्लूटूथ के माध्यम से आपके फ़ोन के साथ बाहरी सेंसर के संचार से आ रहा है. \n\nमान आपके माइक्रोकंट्रोलर से सीधे असंसाधित रीडिंग का प्रतिशत दर्शाता है. यह आमतौर पर सेंसर में वोल्टेज की गिरावट का प्रतिशत होता है." @@ -232,6 +232,7 @@ "अगला सेंसर: %s" "नया नोट जोड़ें" "नोट हटाया गया" + "रिकॉर्डिंग हटाई गई" "पूर्ववत करें" "इस रिकॉर्डिंग में नोट जोड़ें" "चित्र नोट लें" @@ -430,7 +431,7 @@ "चित्र चुनें" "%s को ली गई इमेज" "चुना गया" - "इसके साथ फ़ोटो संपादित करें..." + "इसके साथ फ़ोटो में बदलाव करें…" "टूल ड्रॉवर दिखाएं" "टूल ड्रॉवर बड़ा करें" "टूल ड्रॉवर छोटा करें" @@ -438,7 +439,10 @@ "लेख नोट जोड़ें" "कैमरा लाइव व्यू" "कैमरे का उपयोग नहीं किया जा सकता क्योंकि विज्ञान शोध पत्रिका के पास इसके एक्सेस की अनुमति नहीं है." - "आपकी फ़ोटो लायब्रेरी का उपयोग नहीं किया जा सकता क्योंकि विज्ञान शोध पत्रिका के पास इसके एक्सेस की अनुमति नहीं है." - - + "आपकी फ़ोटो गैलरी का उपयोग नहीं किया जा सकता है क्योंकि विज्ञान शोध पत्रिका के पास इसके एक्सेस की अनुमति नहीं है." + "सेटिंग खोलें" + "संग्रहित प्रयोगों को दिखाएं" + "संग्रहित प्रयोगों को छिपाएं" + "संग्रहित रिकॉर्डिंग छिपाएं" + "सेंसर स्नैपशॉट" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml index 028f6e1d..b244a979 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml @@ -200,7 +200,7 @@ "Tijela imaju tendenciju mirovanja, odnosno gibanja ako su u pokretu – tu tendenciju nazivamo inercijom. Prvi Newtonov zakon tu ideju formalizira na sljedeći način: svako tijelo ostaje u stanju mirovanja ili gibanja sve dok neka sila ne dovede do promjene tog stanja. \n\nKad sila uzrokuje pomicanje tijela, kažemo da ono ubrzava: njegova se brzina mijenja, bilo da se radilo o ubrzavanju, usporavanju ili promjeni smjera. Ubrzanje se mjeri kao promjena brzine u jedinici vremena (metri u sekundi), odnosno u metrima u sekundi na kvadrat (m/s²). \n\nVaš telefon ima uređaj koji mjeri te promjene kretanja – akcelerometar. U akcelerometru se nalaze male mase koje se slobodno kreću. Uslijed promjena u gibanju te se mase pomiču, slično kao što se vaša glava pomiče unaprijed ako se nađete u automobilu koji naglo zakoči. Mjereći te suptilne inercijske pomake, akcelerometar u telefonu prepoznaje promjene u pokretima i smjeru, što je korisna značajka prilikom okretanja zaslona iz pejzažnog u portretni način rada, igranja igara na telefonu i prilikom drugih radnji." "Vjerojatno ste primijetili neprekidno ubrzanje po osi Z, čak i kad telefon leži na stolu. To je ubrzanje kojem smo izloženi zbog Zemljine gravitacije koja nas privlači brzinom od približno 9,8 m/s²." "Zvukove proizvode vibracije. Primjerice, vaš glas nastaje vibriranjem vaših glasnica. Te vibracije stvaraju različite zone visokog i niskog zračnog tlaka koje se šire prema van – slično kružnom širenju valova koji nastaju kada u jezero bacite kamenčić." - "Svi se zvukovi mogu opisati kroz svoju frekvenciju i intenzitet. \n\nPomoću Science Journala mjerite intenzitet u decibelima (dB). Intenzitet, odnosno glasnoća, ovisi o udaljenosti koju tijelo koje vibrira prijeđe prilikom svake vibracije; veći intenzitet doživljavamo kao veću glasnoću. \n\nFrekvencija (ili visina tona) zvučnog vala ekvivalent je brzine vibracije. Što brže tijelo vibrira, to je nastali zvuk viši. Science Journal ne mjeri frekvenciju, već samo glasnoću. \n\nNajtiši zvuk koji prosječno ljudsko uho može čuti definira se kao 0 dB. Uobičajeni razgovor odgovara vrijednosti od približno 60 dB, a zvukovi iznad 140 dB bolni su za ljudsko uho. Međutim, zvukovi ne moraju biti bolni da bi bili štetni. Neprekidna izloženost zvukovima od 90 dB – što otprilike odgovara buci koju proizvodi usisavač – može naposljetku dovesti do gubitka sluha. \n\nLjestvica decibela je logaritamska, zbog čega izvor zvuka od 40 dB nije dvostruko intenzivniji od 20 dB, već 100 puta intenzivniji. Osim toga, ako jedna budilica daje 70 dB, dvije budilice ne daju 140 dB, već 73 dB. Kao što smo rekli, to je osebujna ljestvica. \n\n10 dB: šuštanje lišća \n20 dB: šapat s 1,5 m \n30 dB: tihi šapat \n50 dB: kiša \n60 dB: normalan razgovor \n90 dB: mikser \n100 dB: automobil bez ispušnog prigušivača \n110 dB: vikanje u uho \n120 dB: grmljavina \n130 dB: pneumatska bušilica \n140 dB: uzlijetanje zrakoplova" + "Svi se zvukovi mogu opisati kroz svoju frekvenciju i intenzitet. \n\nOvdje pomoću Science Journala mjerite intenzitet u decibelima (dB). Intenzitet, odnosno glasnoća, ovisi o udaljenosti koju tijelo koje vibrira prijeđe prilikom svake vibracije; veći intenzitet doživljavamo kao veću glasnoću. \n\nFrekvencija (ili visina tona) zvučnog vala ekvivalent je brzine vibriranja. Što brže tijelo vibrira, to je nastali zvuk viši. Science Journal ne mjeri frekvenciju, već samo glasnoću. \n\nVažno je napomenuti da je mikrofon u vašem uređaju dizajniran tako da bude vrlo osjetljiv na razlike u zvučnim valovima tijekom vremena, ali ne i na apsolutnu veličinu svakog vala. Pokušali smo odabrati kôd koji će vjerojatno generirati brojeve slične referentnim brojevima koji su navedeni ispod, no svaki uređaj može dati konzistentno veće ili manje brojeve. Znanstvenici takve senzore obično kalibriraju prema poznatim mjerenjima. Science Journal vam zasad može reći je li vaše sljedeće putovanje vlakom glasnije od sljedećeg rock koncerta, no samo ako ponesete telefon na ta mjesta. \n\nJoš jedna bitna napomena: postoje važne razlike između \"intenziteta zvuka\", \"razine intenziteta zvuka\" i \"tlaka zvuka\". Ovdje ih tretiramo kao istu stvar, no ako želite produbiti svoja znanja, dostupni su brojni online resursi o njihovim razlikama. \n\nNajtiši zvuk koji prosječno ljudsko uho može čuti definira se kao 0 dB. Uobičajeni razgovor odgovara vrijednosti od približno 60 dB, a zvukovi iznad 140 dB bolni su za ljudsko uho. Međutim, zvukovi ne moraju biti bolni da bi bili štetni. Neprekidna izloženost zvukovima od 90 dB – što otprilike odgovara buci koju proizvodi usisavač – može u konačnici dovesti do gubitka sluha. \n\nLjestvica decibela logaritamska je, što je čini pomalo osebujnom: izvor zvuka od 40 dB nije dvostruko intenzivniji od 20 dB, već 100 puta intenzivniji. Osim toga, ako jedna budilica daje 70 dB, dvije budilice ne daju 140 dB, već 73 dB. Kao što smo rekli, to je neobična ljestvica. \n\n10 dB: šuštanje lišća \n20 dB: šapat na 1,5 m \n30 dB: tihi šapat\n50 dB: kiša \n60 dB: normalan razgovor \n90 dB: mikser \n100 dB: automobil bez prigušivača \n110: vikanje u uho \n120 dB: grmljavina \n130 dB: pneumatska bušilica \n140 dB: uzlijetanje zrakoplova" "Broj okretaja u minuti (o/min) mjera je frekvencije okretanja oko fiksne osi u jednoj minuti. \n\nKako se okreće, vjetromjer okreće disk kodera:" "Tako nastaju razdoblja osvijetljenosti i zatamnjenja na senzoru, što Science Journal registrira kao okretaj." "Ovdje prikazani podaci rezultat su komunikacije vanjskog senzora s vašim telefonom putem Bluetooth veze. \n\nVrijednost prikazuje postotak izravnog neobrađenog očitanja s mikrokontrolera. To je obično vrijednost pada napona na senzoru." @@ -232,6 +232,7 @@ "sljedeći senzor: %s" "Dodajte novu bilješku" "Napomena izbrisana" + "Snimka izbrisana" "Poništi" "Dodaj bilješku za tu snimku" "Snimanje fotografije za bilješku" @@ -430,7 +431,7 @@ "Odabir fotografije" "Datum snimanja fotografije: %s" "odabrano" - "Uredite fotografiju pomoću aplikacije..." + "Uredite fotografiju pomoću aplikacije…" "Prikaži ladicu s alatima" "Proširi ladicu s alatima" "Sažmi ladicu s alatima" @@ -438,7 +439,10 @@ "Dodaj tekstnu napomenu" "Prikaz slike s fotoaparata uživo" "Fotoaparat se ne može upotrijebiti jer Science Journal nema dopuštenje da mu pristupi." - "Zbirka fotografija ne može se upotrijebiti jer Science Journal nema dopuštenje da joj pristupi." - - + "Galerija fotografija ne može se upotrijebiti jer Science Journal nema dopuštenje da joj pristupi." + "Otvori postavke" + "Prikaži arhivirane eksperimente" + "Sakrij arhivirane eksperimente" + "Sakrij arhivirane snimke" + "Snimka senzora" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml index 157634e3..ddb2ca14 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml @@ -200,7 +200,7 @@ "A tárgyak egy helyben, vagy ha mozognak, mozgásban maradnak – ezt tehetetlenségnek hívjuk. Newton első törvénye formálisan is megfogalmazza ezt a tételt: minden test megmarad a mozgás állapotában, vagy megtartja nyugalmi állapotát, míg valamilyen kiegyenlítetlen erő nem hat rá. \n\nHa valamilyen kiegyenlítetlen erő kimozdítja a testet ebből az állapotából, akkor a test gyorsulásáról beszélünk: a sebessége változik – vagy nagyobb, vagy kisebb lesz, vagy megváltozik az iránya. A gyorsulást a sebesség (méter per szekundum) időbeli változásaként, vagyis méter per szekundumnégyzet (m/s²) mértékegységben határozzuk meg. \n\nA telefonodban működik egy olyan eszköz, amellyel a mozgásnak ezek a változásai mérhetők: ez a gyorsulásmérő. Ebben a szerkezetben kis felfüggesztett tömegek szabad mozgásra képesek. A mozgásban bekövetkező változások ezeket a tömegeket elmozdulásra késztetik, hasonlóképpen ahhoz, mint amikor a fejünk egy hirtelen fékező autóban előrebillen. Ezeknek a tehetetlenségből adódó apró kis elmozdulásoknak a mérésével a telefonban működő gyorsulásmérő képes a mozgás gyorsaságában és irányában bekövetkező változások észlelésére, amelynek segítségével például fekvőből állóra tudja állítani a képernyőt, vagy különféle telefonos játékokat tesz lehetővé." "Valószínűleg neked is feltűnt, hogy a Z-tengely irányában egy állandó gyorsulás mutatkozik, még akkor is, ha a telefonod le van rakva az asztalra. Ez a Föld felszínén érzékelhető nehézségi gyorsulás, amit a gravitáció okoz, nagysága körülbelül 9,8 m/s²." "A hangokat rezgések okozzák. Az emberi hang például a torkunkban lévő hangszálak rezgése révén keletkezik. Ezek a rezgések váltakozóan nagyobb és kisebb nyomású rétegeket hoznak létre a levegőben, amely nyomáseltérés a forrástól távolodik – nagyon hasonlóan ahhoz, mint amikor a tóba dobott kavics egyre táguló körkörös hullámokat képez." - "Minden hang leírható a frekvenciájával és az intenzitásával. \n\nA Science Journal alkalmazással az intenzitást mérjük decibelben (dB). Az intenzitás vagy hangosság a rezgő test által az egyes rezgések során megtett távolság függvénye – a nagyobb intenzitást hangosabbnak észleljük. \n\nA hanghullám frekvenciája (más néven hangmagassága) a rezgése gyorsaságának felel meg. Minél gyorsabban rezeg egy test, annál magasabb, vagyis nagyobb frekvenciájú hangot képez. A Science Journal frekvenciát nem mér, csak hangosságot. \n\nAz átlagos emberi fül által észlelhető leghalkabb hang meghatározás szerint 0 dB. A mindennapi beszélgetések nagyjából 60 dB-nek felelnek meg, és körülbelül 140 dB az a határ, amelynél erősebb hangok már fájdalmat okoznak az emberi fülnek. De nem csak a fájdalmas hangok lehetnek károsak. Már az is halláskárosodást okozhat, ha valaki folyamatosan 90 dB-es – körülbelül egy porszívó hangosságának megfelelő – hangoknak van kitéve. \n\nA decibel-skála logaritmikus, ami egy kicsit megbonyolítja a dolgokat: egy 40 dB-es hangforrás nem kétszer olyan erős, mint egy 20 dB-es – hanem 100-szor. Ugyanakkor ha egy csörgő ébresztőóra intenzitása 70 dB, akkor két csörgő ébresztőóráé nem 140 dB, hanem 73 dB. Amint említettük, fura egy skála. \n\n10 dB zörgő avar \n20 dB suttogás 1,5 méterről \n30 dB halk suttogás \n50 dB zivatar \n60 dB átlagos beszélgetés \n90 dB turmixgép \n100 dB autó kipufogódob nélkül \n110 dB fülbekiabálás \n120 dB mennydörgés \n130 dB légkalapács \n140 dB felszálló repülőgép" + "Minden hang leírható a frekvenciájával és az intenzitásával. \n\nA Science Journal alkalmazással az intenzitást mérjük decibelben (dB).Az intenzitás vagy hangosság a rezgő test által az egyes rezgések során megtett távolság függvénye – a nagyobb intenzitást hangosabbnak észleljük. \n\nA hanghullám frekvenciája (más néven hangmagassága) a rezgése gyorsaságának felel meg. Minél gyorsabban rezeg egy test, annál magasabb hangot képez. A Science Journal frekvenciát nem mér, csak hangosságot. \n\nA készüléked mikrofonjával kapcsolatos egyik fontos tudnivaló, hogy a hanghullámok időbeli változására rendkívül érzékeny, viszont az egyes hullámok abszolút méretére nem. Próbáltunk olyan kódot választani, amely nagy valószínűséggel az alábbi referenciaértékekhez hasonló értékeket eredményez, de az egyes készülékek következetesen magasabb vagy alacsonyabb értékeket jelezhetnek. A tudósok általában egy ismert értékhez kalibrálják a hasonló szenzorokat. Jelenleg a Science Journal csak annak a megállapítására képes, hogy a következő vonatutad nagyobb hangerővel jár-e, mint a következő rockkoncerted, de csak akkor, ha mindkét helyzetben nálad van ugyanaz a telefon. \n\nEgy másik fontos tudnivaló, hogy a „hangerő”, „a hangerősség szintje” és a „hangnyomás” számos fontos dologban különbözik egymástól. Itt úgy kezeljük őket, mintha ugyanarra vonatkoznának, de ha mélyrehatóbban szeretnéd tanulmányozni a kérdést, számos internetes forrásból tájékozódhatsz a különbségeket illetően. \n\nAz átlagos emberi fül által észlelhető leghalkabb hang meghatározás szerint 0 dB. A mindennapi beszélgetések nagyjából 60 dB-nek felelnek meg, és körülbelül 140 dB az a határ, amelynél erősebb hangok már fájdalmat okoznak az emberi fülnek. De nem csak a fájdalmas hangok lehetnek károsak. Már az is halláskárosodást okozhat, ha valaki folyamatosan 90 dB-es – körülbelül egy porszívó hangosságának megfelelő – hangoknak van kitéve. \n\nA decibel-skála logaritmikus, ami egy kicsit megbonyolítja a dolgokat: egy 40 dB-es hangforrás nem kétszer olyan erős, mint egy 20 dB-es – hanem 100-szor. Ugyanakkor ha egy csörgő ébresztőóra intenzitása 70 dB, akkor két csörgő ébresztőóráé nem 140 dB, hanem 73 dB. Amint említettük, fura egy skála. \n\n10 dB zörgő avar \n20 dB suttogás 1,5 méterről \n30 dB halk suttogás \n50 dB eső \n60 dB átlagos beszélgetés \n90 dB turmixgép \n100 dB kipufogódob nélküli autó \n110 dB fülbekiabálás \n120 dB mennydörgés \n130 dB légkalapács \n140 dB felszálló repülőgép" "A percenkénti fordulatszám (ford./perc) a fix tengely körüli forgások egy perc alatti gyakoriságának mértékegysége. \n\nA szélforgód a forgómozgásával megforgatja a kódolótárcsát:" "Az érzékelő ezt fényes és sötét periódusok sorozataként észleli, amit a Science Journal forgásként rögzít." "Az itt megjelenített adatok egy olyan külső érzékelőtől érkeznek, amelyik Bluetooth-on keresztül kommunikál a telefonoddal. \n\nAz érték a mikrokontrolleredről származó nyers adat százalékos értékét mutatja. Ez általában az érzékelő feszültségesésének százalékát jelenti." @@ -232,6 +232,7 @@ "következő érzékelő: %s" "Új jegyzet hozzáadása" "Jegyzet törölve" + "Felvétel törölve" "Visszavonás" "Adj hozzá jegyzetet ehhez a felvételhez" "Képjegyzet készítése" @@ -430,7 +431,7 @@ "Kép kiválasztása" "Kép készítésének dátuma: %s" "kiválasztva" - "Fotó szerkesztése a következővel:" + "Fotó szerkesztése a következővel:" "Eszközfiók megjelenítése" "Eszközfiók kibontása" "Eszközfiók összecsukása" @@ -438,7 +439,10 @@ "Szövegjegyzet hozzáadása" "Kamera élő nézete" "A kamerát nem lehet használni, mert a Science Journal alkalmazásnak nincs engedélye a hozzáféréshez." - "A fotótárat nem lehet használni, mert a Science Journal alkalmazásnak nincs engedélye a hozzáféréshez." - - + "A fotógalériát nem lehet használni, mert a Science Journal alkalmazásnak nincs engedélye a hozzáféréshez." + "Beállítások megnyitása" + "Archivált kísérletek megjelenítése" + "Archivált kísérletek elrejtése" + "Archivált felvételek elrejtése" + "Aktuális szenzorérték" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml index 1138a612..5bf5a339 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml @@ -200,7 +200,7 @@ "Benda-benda memiliki kecenderungan untuk tetap diam, atau tetap bergerak jika sedang bergerak—hal ini disebut sebagai kelembaman (inersia). Hukum Pertama Newton menyatakan gagasan ini secara formal: Setiap benda akan mempertahankan keadaan bergerak atau diamnya, kecuali dipengaruhi gaya yang tidak seimbang. \n\nBila gaya yang tidak seimbang menyebabkan benda bergerak, maka benda tersebut dikatakan mengalami percepatan: velositas, atau kecepatannya, berubah—baik dengan semakin cepat, semakin lambat, atau berubah arah. Percepatan diukur sebagai perubahan kecepatan (meter per detik) dalam waktu, atau meter per detik kuadrat (m/s²). \n\nPonsel Anda memiliki perangkat untuk mengukur perubahan gerak ini—yaitu akselerometer. Di dalam akselerometer, terdapat sejumlah massa kecil dan tergantung yang bebas bergerak. Perubahan gerak menyebabkan massa ini berpindah, sebagaimana kepala kita cenderung tersentak ke depan saat berada dalam mobil yang berhenti mendadak. Dengan mengukur perpindahan kelembaman yang samar ini, akselerometer dalam ponsel dapat mendeteksi perubahan gerak dan arah. Hal ini berguna untuk mengalihkan layar dari mode lanskap ke potret, untuk bermain game di ponsel, dan lainnya." "Anda mungkin melihat percepatan terus-menerus dalam sumbu Z, bahkan saat ponsel diam di atas meja. Ini adalah percepatan yang kita alami di permukaan Bumi akibat gravitasi, yaitu sekitar 9,8 m/s²." "Suara ditimbulkan oleh getaran. Suara Anda, misalnya, berasal dari getaran dalam pita suara di tenggorokan. Getaran ini menciptakan zona-zona bertekanan udara tinggi dan rendah yang saling bergantian dan merambat ke luar. Mirip riak air melingkar yang disebabkan oleh batu yang dilempar ke kolam." - "Semua suara dapat diuraikan menurut frekuensi dan intensitasnya. \n\nIntensitas adalah yang Anda ukur di sini dengan Jurnal Sains, dalam satuan desibel (dB). Intensitas, atau kenyaringan, bergantung pada jarak yang ditempuh benda bergetar saat bergetar. Peningkatan intensitas kita dengar sebagai peningkatan kenyaringan. \n\nFrekuensi (juga tinggi nada atau nada) gelombang suara sama dengan laju getarannya. Semakin cepat benda bergetar, semakin tinggi nada dari suara yang dihasilkannya. Jurnal Sains tidak mengukur frekuensi—hanya kenyaringan. \n\nSuara terendah yang dapat dideteksi oleh telinga manusia ditetapkan sebagai 0 dB. Percakapan biasa memiliki intensitas kurang lebih 60 dB, dan suara dengan intensitas di atas sekitar 140 dB akan terasa menyakitkan bagi telinga manusia. Namun, suara yang berbahaya tidak selalu menyakitkan. Pemaparan terus-menerus pada suara sebesar 90 dB—kurang lebih sama dengan kenyaringan mesin penghisap debu—bisa juga menyebabkan hilangnya pendengaran. \n\nSkala desibel bersifat logaritmis, sehingga pemahamannya sedikit rumit: Intensitas sumber suara sebesar 40 dB tidak sama dengan dua kali intensitas suara 20 dB—melainkan 100 kali lebih kuat. Sementara itu, jika dering satu jam alarm menghasilkan 70 dB, maka dering dua jam alarm tidak menghasilkan 140 dB, melainkan 73 dB. Seperti disebutkan sebelumnya, ini memang skala yang aneh. \n\n10 dB sama dengan suara gemerisik dedaunan \n20 dB sama dengan suara berbisik dari jarak 1,5 m \n30 dB sama dengan suara bisikan lembut \n50 dB sama dengan suara hujan \n60 dB sama dengan suara percakapan normal \n90 dB sama dengan suara mesin blender \n100 dB sama dengan suara mobil tanpa peredam \n110 dB sama dengan suara teriakan di telinga \n120 dB sama dengan suara petir \n130 dB sama dengan suara mesin bobok beton (jackhammer) \n140 dB sama dengan suara pesawat lepas landas" + "Semua suara dapat dijelaskan menurut frekuensi dan intensitasnya. \n\nIntensitas adalah yang Anda ukur di sini dengan Jurnal Sains, dalam satuan desibel (dB). Intensitas, atau kenyaringan, bergantung pada jarak yang ditempuh benda bergetar saat bergetar. Peningkatan intensitas kita dengar sebagai peningkatan kenyaringan. \n\nFrekuensi (atau tinggi nada atau nada) gelombang suara sama dengan laju getarannya. Semakin cepat benda bergetar, semakin tinggi nada dari suara yang dihasilkannya. Jurnal Sains tidak mengukur frekuensi—hanya kenyaringan. \n\nSatu hal penting untuk diketahui adalah bahwa mikrofon dalam perangkat Anda dirancang untuk bersifat sangat sensitif terhadap perbedaan gelombang suara dari waktu ke waktu, tetapi bukan pada ukuran absolut dari setiap gelombang. Kami telah mencoba memilih kode yang kemungkinan akan memberikan angka yang mirip dengan angka acuan yang ditampilkan di bawah. Namun, setiap perangkat bisa memberikan angka yang secara konsisten lebih tinggi atau lebih rendah. Para ilmuwan biasanya akan mengkalibrasi sensor seperti ini ke sebuah ukuran yang diketahui. Untuk sementara, Jurnal Sains dapat memberi tahu apakah suara kereta api yang Anda naiki lebih bising daripada konser musik rock yang Anda hadiri, tetapi itu hanya jika Anda menggunakan ponsel yang sama untuk mengukur kedua peristiwa tersebut. \n\nHal lain yang perlu diketahui adalah bahwa ada perbedaan penting antara “intensitas suara”, “tingkat intensitas suara”, dan “tekanan suara”. Kita memperlakukan ketiganya di sini sebagai hal yang sama. Namun, jika Anda ingin mempelajarinya lebih dalam, ada banyak referensi online mengenai perbedaan ketiganya. \n\nSuara terendah yang dapat dideteksi oleh telinga manusia ditetapkan sebesar 0 dB. Percakapan biasa memiliki intensitas kurang lebih 60 dB, dan suara dengan intensitas di atas sekitar 140 dB akan terasa menyakitkan bagi telinga manusia. Namun, suara yang berbahaya tidak selalu menyakitkan. Paparan terus-menerus pada suara sebesar 90 dB—kurang lebih sama dengan kenyaringan mesin pengisap debu—pada akhirnya bisa menyebabkan hilangnya pendengaran. \n\nSkala desibel bersifat logaritmis, sehingga pemahamannya sedikit rumit: Intensitas sumber suara sebesar 40 dB tidak sama dengan 2 kali intensitas suara 20 dB—melainkan 100 kali lebih kuat. Sementara itu, jika dering 1 jam alarm menghasilkan 70 dB, maka dering 2 jam alarm tidak menghasilkan 140 dB, melainkan 73 dB. Seperti disebutkan tadi, skala ini memang aneh. \n\n10 dB sama dengan suara gemersik dedaunan \n20 dB sama dengan suara berbisik dari jarak 1,5 m \n30 dB sama dengan suara bisikan lembut \n50 dB sama dengan suara hujan \n60 dB sama dengan suara percakapan normal \n90 dB sama dengan suara mesin blender \n100 dB sama dengan suara mobil tanpa knalpot \n110 dB sama dengan suara teriakan di dekat telinga \n120 dB sama dengan suara petir \n130 dB sama dengan suara mesin bobok beton (jackhammer) \n140 dB sama dengan suara pesawat lepas landas" "Rotasi per menit (RPM) adalah ukuran frekuensi putaran pada sumbu tetap dalam satu menit. \n\nPemutar angin yang berputar akan memutar disk encoder:" "Sensor ini menciptakan periode terang dan gelap pada sensor yang tercatat dalam Jurnal Sains sebagai rotasi." "Data yang ditampilkan di sini berasal dari komunikasi sensor eksternal dengan ponsel Anda melalui Bluetooth. \n\nNilai ini menampilkan persentase data mentah langsung dari pengontrol mikro Anda. Nilai tersebut biasanya merupakan persentase penurunan tegangan pada sensor." @@ -232,6 +232,7 @@ "sensor berikutnya: %s" "Tambahkan catatan baru" "Catatan dihapus" + "Rekaman dihapus" "Urungkan" "Tambahkan catatan ke rekaman ini" "Ambil gambar catatan" @@ -265,7 +266,7 @@ "Jurnal Sains" "Eksperimen di sekitar Anda." "Fitur dan peningkatan baru: \n• Antarmuka baru untuk mencatat dan mendokumentasikan eksperimen sains. \n• Fitur snapshot baru untuk merekam titik-titik data individual. \n• Sensor baru: akselerometer linear, magnetometer, dan kompas \n• Galeri yang dirancang ulang untuk mengakses berbagai eksperimen \n• Kini tersedia di perangkat iOS!" - "Jurnal Sains adalah buku catatan sains digital gratis dari Google. \n \nBaik sebagai pengajar sains maupun sekadar penikmat sains di rumah, Anda bisa menyimpan catatan, foto, dan hasil pengamatan di 1 tempat yang mudah diakses. Gunakan sensor di ponsel Anda untuk mengukur dan membuat grafik dari berbagai fenomena seperti cahaya, bunyi, dan gerakan, atau hubungkan ke sensor eksternal melalui bluetooth untuk mengadakan eksperimen tentang dunia di sekitar Anda. \n \nDengan aplikasi Jurnal Sains, Anda dapat: \n• Mengukur cahaya, suara, akselerasi, tekanan udara, dan sebagainya menggunakan sensor bawaan ponsel. \n• Membuat catatan dan mengambil foto untuk mendokumentasikan eksperimen sains Anda. Jenis catatan lainnya akan segera tersedia! \n• Membuat koneksi ke sensor eksternal menggunakan perangkat Arduino dan Vernier tertentu yang memiliki kapabilitas bluetooth. \n• Mengekspor rekaman data sensor sebagai file CSV. \n• Membuat pemicu otomatis untuk merekam data dan membuat catatan. \n• Menggunakan sonification untuk mendengarkan gerakan grafik Anda. \n \nJurnal Sains tersedia gratis di perangkat Android, iPhone, iPad, dan perangkat Chromebook yang kompatibel. \n \nAktivitas edukatif dari para partner kami: https://makingscience.withgoogle.com/science-journal/activities \nUntuk mendapatkan dukungan: https://productforums.google.com/forum/#!forum/sciencejournal \nKode open source tersedia di: https://github.com/google/science-journal \n\n Pemberitahuan izin: \n• Lokasi: diperlukan untuk mendeteksi perangkat yang memiliki sensor bluetooth. \n• Kamera: diperlukan untuk mengambil gambar guna mendokumentasikan eksperimen. \n• Mikrofon: diperlukan untuk sensor intensitas suara. \n• Penyimpanan: diperlukan untuk mengakses foto yang akan dimasukkan ke dalam eksperimen." + "Jurnal Sains adalah buku catatan sains digital gratis dari Google. \n \nBaik sebagai pengajar sains maupun sekadar penikmat sains di rumah, Anda bisa menyimpan catatan, foto, dan hasil pengamatan di 1 tempat yang mudah diakses. Gunakan sensor di ponsel Anda untuk mengukur dan membuat grafik dari berbagai fenomena seperti cahaya, bunyi, dan gerakan, atau hubungkan ke sensor eksternal melalui bluetooth untuk mengadakan eksperimen tentang dunia di sekitar Anda. \n \nDengan aplikasi Jurnal Sains, Anda dapat: \n• Mengukur cahaya, suara, akselerasi, tekanan udara, dan sebagainya menggunakan sensor built-in ponsel. \n• Membuat catatan dan mengambil foto untuk mendokumentasikan eksperimen sains Anda. Jenis catatan lainnya akan segera tersedia! \n• Membuat koneksi ke sensor eksternal menggunakan perangkat Arduino dan Vernier tertentu yang memiliki kapabilitas bluetooth. \n• Mengekspor rekaman data sensor sebagai file CSV. \n• Membuat pemicu otomatis untuk merekam data dan membuat catatan. \n• Menggunakan sonification untuk mendengarkan gerakan grafik Anda. \n \nJurnal Sains tersedia gratis di perangkat Android, iPhone, iPad, dan perangkat Chromebook yang kompatibel. \n \nAktivitas edukatif dari para partner kami: https://makingscience.withgoogle.com/science-journal/activities \nUntuk mendapatkan dukungan: https://productforums.google.com/forum/#!forum/sciencejournal \nKode open source tersedia di: https://github.com/google/science-journal \n\n Pemberitahuan izin: \n• Lokasi: diperlukan untuk mendeteksi perangkat yang memiliki sensor bluetooth. \n• Kamera: diperlukan untuk mengambil gambar guna mendokumentasikan eksperimen. \n• Mikrofon: diperlukan untuk sensor intensitas suara. \n• Penyimpanan: diperlukan untuk mengakses foto yang akan dimasukkan ke dalam eksperimen." "Pindai sensor pihak ketiga" "Cari aplikasi yang mendukung sensor API pihak ketiga dan sebisa mungkin gunakan sensor tersebut dalam eksperimen." "Aktifkan suhu sekitar" @@ -430,7 +431,7 @@ "Pilih gambar" "Gambar diambil tanggal %s" "dipilih" - "Edit foto dengan..." + "Edit foto dengan…" "Tampilkan panel samping fitur" "Luaskan panel samping fitur" "Ciutkan panel samping fitur" @@ -438,7 +439,10 @@ "Tambahkan catatan teks" "Tampilan live kamera" "Kamera tidak dapat digunakan karena Jurnal Sains tidak memiliki izin untuk mengaksesnya." - "Galeri foto Anda tidak dapat digunakan karena Jurnal Sains tidak memiliki izin untuk mengaksesnya." - - + "Galeri foto tidak dapat digunakan karena Jurnal Sains tidak memiliki izin untuk mengaksesnya." + "Buka Setelan" + "Tampilkan arsip eksperimen" + "Sembunyikan arsip eksperimen" + "Sembunyikan arsip rekaman" + "Rekam sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml index 2b064be4..d827a288 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml @@ -200,7 +200,7 @@ "La tendenza degli oggetti a rimanere nel loro stato di quiete o di moto viene detta inerzia. La prima legge di Newton esprime questo principio formalmente: un oggetto permane nel suo stato di quiete o di moto a meno che non intervenga una forza esterna non bilanciata a modificare tale stato. \n\nSe una forza esterna non bilanciata causa lo spostamento dell\'oggetto, si dice che l\'oggetto accelera: la sua velocità cambia, aumentando, diminuendo o cambiando direzione. L\'accelerazione viene misurata come cambiamento della velocità (espressa in metri al secondo) nel tempo e viene calcolata in metri al secondo quadrato (m/s²). \n\nIl tuo telefono è dotato di un dispositivo che misura questi cambiamenti di movimento: l\'accelerometro. All\'interno di un accelerometro sono presenti piccole masse sospese che sono libere di muoversi. I cambiamenti di movimento provocano lo spostamento di queste masse, un po\' come quando la tua testa si flette in avanti quando ti trovi in un\'auto che si arresta bruscamente. Misurando questi sottili spostamenti inerziali, l\'accelerometro del telefono è in grado di rilevare i cambiamenti di movimento e orientamento, utili per esempio per passare dalla schermata in modalità orizzontale a quella verticale, per quando usi app di giochi sul telefono e altro ancora." "Probabilmente avrai notato un\'accelerazione permanente sull\'asse Z, anche con il telefono ancora sul tavolo. Questa è l\'accelerazione registrata sulla superficie terrestre dovuta alla forza di gravità, pari a circa 9,8 m/s²." "I suoni sono composti da vibrazioni. La tua voce, ad esempio, proviene dalla vibrazione delle corde vocali. Queste vibrazioni creano zone alternate di alta e bassa pressione dell\'aria che si muovono verso l\'esterno, all\'incirca come le onde circolari create da un sasso lanciato in uno specchio d\'acqua." - "Tutti i suoni possono essere descritti in termini di frequenza e intensità. \n\nL\'intensità è la grandezza che misuri con Science Journal ed è espressa in unità di decibel (dB). L\'intensità, o la rumorosità, dipende dalla distanza a cui si trova l\'oggetto che vibra; all\'aumentare dell\'intensità avvertiamo una maggiore rumorosità. \n\nLa frequenza (o anche altezza o tonalità) di un\'onda sonora equivale alla frequenza delle vibrazioni. Maggiore è la frequenza con cui un oggetto vibra, più alta sarà la tonalità del suono che emette. Science Journal non misura la frequenza, ma solo la rumorosità. \n\nIl suono più basso percepibile dall\'orecchio umano ha un\'intensità di 0 dB. Una normale conversazione si attesta sui 60 dB circa, mentre i suoni di intensità superiore ai 140 dB risultano dolorosi per l\'orecchio umano. Tuttavia, a creare danni non sono solo i suoni dolorosi. Un\'esposizione continua a suoni di 90 dB, all\'incirca la rumorosità di un aspirapolvere, possono causare la perdita dell\'udito. \n\nLa scala dei decibel è logaritmica e questo può trarre in inganno. Una sorgente sonora da 40 dB non ha il doppio dell\'intensità di una sorgente da 20 dB, ma è 100 volte più intensa. Allo stesso modo, se una sveglia produce 70 dB, due sveglie non producono 140 dB, ma 73 dB. Come abbiamo già detto, si tratta di una scala particolare. \n\n10 dB fruscio delle foglie \n20 dB bisbiglio a 1,5 metri \n30 dB bisbiglio leggero \n50 dB pioggia\n60 dB normale conversazione\n90 dB frullatore\n100 dB auto senza marmitta \n110 dB urlo nell\'orecchio \n120 dB tuono \n130 dB martello pneumatico \n140 dB aeroplano che decolla" + "Tutti i suoni possono essere descritti in termini di frequenza e intensità. \n\nL\'intensità è la grandezza che misuri con Science Journal ed è espressa in unità di decibel (dB). L\'intensità, o la rumorosità, dipende dalla distanza a cui si trova l\'oggetto che vibra; all\'aumentare dell\'intensità avvertiamo una maggiore rumorosità. \n\nLa frequenza (o anche altezza o tonalità) di un\'onda sonora equivale alla frequenza delle vibrazioni. Maggiore è la frequenza con cui un oggetto vibra, più alta sarà la tonalità del suono che emette. Science Journal non misura la frequenza, ma solo la rumorosità. \n\nUn aspetto importante da sapere è che il microfono del tuo dispositivo è molto sensibile alle differenze tra le onde sonore nel tempo, ma non alla dimensione assoluta delle singole onde. Abbiamo provato a scegliere un codice che fosse in grado di produrre numeri analoghi a quelli di riferimento mostrati di seguito, ma ogni dispositivo può comunque produrre numeri sistematicamente più alti o più bassi. Gli scienziati in genere calibrano sensori come questo in base a una misurazione nota. Per il momento, Science Journal è in grado di indicarti se il tuo prossimo viaggio in treno sarà più rumoroso del tuo prossimo concerto rock, ma solo se utilizzi lo stesso telefono in entrambe le occasioni. \n\nUn\'altra cosa da sapere è che esistono differenze notevoli tra \"intensità del suono\", \"livello di intensità del suono\" e \"pressione sonora\". In questo contesto le stiamo considerando come un unico parametro, ma se vuoi approfondire l\'argomento e analizzare le differenze, puoi consultare numerose risorse online. \n\nIl suono più basso percepibile dall\'orecchio umano ha un\'intensità di 0 dB. Una normale conversazione si attesta sui 60 dB circa, mentre i suoni di intensità superiore ai 140 dB risultano dolorosi per l\'orecchio umano. Tuttavia, a creare danni non sono solo i suoni dolorosi. Un\'esposizione continua a suoni di 90 dB, all\'incirca la rumorosità di un aspirapolvere, può causare la perdita dell\'udito. \n\nLa scala dei decibel è logaritmica e questo può trarre in inganno. Una sorgente sonora da 40 dB non ha il doppio dell\'intensità di una sorgente da 20 dB, ma è 100 volte più intensa. Allo stesso tempo, se una sveglia produce 70 dB, due sveglie non producono 140 dB, ma 73 dB. Come abbiamo già detto, si tratta di una scala particolare. \n\n10 dB fruscio delle foglie \n20 dB bisbiglio a 1,5 metri \n30 dB bisbiglio leggero \n50 dB pioggia \n60 dB normale conversazione \n90 dB frullatore \n100 dB auto senza marmitta \n110 dB urlo nell\'orecchio \n120 dB tuono \n130 dB martello pneumatico \n140 dB aeroplano che decolla" "I giri al minuto (RPM) sono l\'unità di misura della frequenza di rotazione attorno a un asse fisso in un minuto. \n\nGirando, la tua girandola fa ruotare il disco dell\'encoder:" "Ciò produce dei periodi di luce e oscurità sul sensore che vengono registrati in Science Journal come una rotazione." "I dati visualizzati qui provengono da un sensore esterno che comunica con il tuo telefono tramite Bluetooth. \n\nIl valore indica la percentuale di dati grezzi letti direttamente dal tuo microcontroller. Solitamente si tratta della percentuale di un calo di voltaggio di un sensore." @@ -232,6 +232,7 @@ "sensore successivo: %s" "Aggiungi una nuova nota" "Nota eliminata" + "Registrazione eliminata" "Annulla" "Aggiungi una nota a questa registrazione" "Aggiungi nota fotografica" @@ -430,7 +431,7 @@ "Scegli foto" "Immagine scattata il giorno %s" "selezionata" - "Modifica foto con…" + "Modifica foto con…" "Mostra riquadro a scomparsa degli strumenti" "Espandi riquadro a scomparsa degli strumenti" "Comprimi riquadro a scomparsa degli strumenti" @@ -438,7 +439,10 @@ "Aggiungi nota di testo" "In diretta dalla fotocamera" "Impossibile utilizzare la fotocamera in quanto Science Journal non dispone dell\'autorizzazione all\'accesso." - "Impossibile utilizzare la raccolta fotografica in quanto Science Journal non dispone dell\'autorizzazione all\'accesso." - - + "Impossibile utilizzare la galleria fotografica perché Science Journal non dispone dell\'autorizzazione all\'accesso." + "Apri impostazioni" + "Mostra esperimenti archiviati" + "Nascondi esperimenti archiviati" + "Nascondi registrazioni archiviate" + "Snapshot sensore" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml index 2daaba15..fd3c45a7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml @@ -39,7 +39,7 @@ "ברומטר" "טמפרטורת הסביבה" "זרם וידאו" - "מטר לשנייה בריבוע (m/s²)" + "m/s²" "לוקס" "μT" "דציבלים" @@ -183,9 +183,9 @@ "קוד גישה" "תדר" "אי אפשר לשלוח משוב." - "התאוצה של הטלפון שמאלה וימינה ביחידות של מטר לשנייה בריבוע (m/s²)" - "התאוצה של הטלפון קדימה ואחורה ביחידות של מטר לשנייה בריבוע (m/s²)" - "התאוצה של הטלפון כלפי מעלה ומטה ביחידות של מטר לשנייה בריבוע (m/s²)" + "התאוצה של הטלפון שמאלה וימינה ביחידות של m/s²" + "התאוצה של הטלפון קדימה ואחורה ביחידות של m/s²" + "התאוצה של הטלפון כלפי מעלה ומטה ביחידות של m/s²" "עוצמת הקול שמגיעה לחיישן הקול או למיקרופון ונמדדת ביחידות דציבל (dB)." "כמות האור שמגיעה לחיישן האור בסביבה ונמדדת ביחידות לוקס." "העוצמה של השדה המגנטי של כדור הארץ במיקרו-טסלה." @@ -200,7 +200,7 @@ "עצמים נוטים להישאר ללא תנועה, או להמשיך לנוע אם הם כבר נמצאים בתנועה – לתופעה זו קוראים אינרציה. החוק הראשון של ניוטון מנסח את הרעיון הזה כעיקרון: כל גוף יתמיד במצבו – עמידה או תנועה – כל עוד לא פועלים עליו שום כוחות חיצוניים. \n\nכאשר כוח חיצוני גורם לגוף לזוז ממקומו, אנו אומרים שהגוף מאיץ: המהירות שלו משתנה – עולה, יורדת או משנה כיוון. התאוצה נמדדת כשינוי במהירות (מטרים לשנייה) למשך זמן, או מטרים לשנייה בריבוע (m/s²). ‏\n\nהטלפון מצויד בהתקן המודד שינויים אלו בתנועה ונקרא מד תאוצה. בתוך מד התאוצה תלויות משקולות קטנות בעלות חופש תנועה. שינויים בתנועה גורמים להן לזוז, בדומה לאופן שבו הראש שלך נוטה לזוז קדימה כאשר מכונית שאתה נוסע בה עוצרת בפתאומיות. באמצעות מדידה של תנועות האינרציה העדינות האלו במד התאוצה, הטלפון יכול לזהות שינויים בתנועה ובכיוון. מידע כזה שימושי לצורך שינוי כיוון תצוגה של המסך לאורך או לרוחב, לצורך משחקים בטלפון ועוד." "בוודאי הבחנת בתאוצה קבועה ויציבה בציר ה-Z, גם כאשר הטלפון מונח על השולחן. זוהי התאוצה המורגשת על קליפת כדור הארץ כתוצאה מכוח המשיכה, בערך 9.8 מטרים לשנייה בריבוע ( m/s²)." "צלילים נוצרים על ידי רטט. הקול שלך, למשל, נוצר מרעידות של מיתרי הקול בגרונך. רעידות אלו יוצרות אזורים מתחלפים של לחץ אוויר גבוה ונמוך שמתפשטים החוצה – ממש כמו מעגלי הגלים המתרחבים שנוצרים כאשר מישהו זורק חלוק נחל לאגם." - "ניתן לתאר את כל סוגי הצלילים באמצעות התדר והעוצמה שלהם. \n\nהעוצמה היא הערך אותו מודדים בעזרת מגזין המדע ביחידות דציבל (dB). העוצמה או חוזק הצליל תלויים במרחק אותו עובר גוף רוטט בכל פעם שהוא רוטט; עוצמה רבה יותר נשמעת באוזנינו כצליל חזק יותר. \n\nהתדר (שנקרא גם גובה הצליל או הטון) של גל קול שווה לקצב הרעידה שלו. ככל שהרעידה של גוף מהירה יותר, הצליל הנוצר יהיה גבוה יותר. מגזין המדע אינו מודד תדרים, אלא רק את עוצמת הקול. \n\nהצליל החלש ביותר, שאוזן אנושית ממוצעת יכולה לשמוע, מוגדר כ-0 דציבלים. עוצמת הקול של שיחה ממוצעת היא כ-60 דציבלים, וצלילים בעוצמה גבוהה מ-140 דציבלים גורמים כאב לאוזן האנושית; אבל צלילים לא חייבים להכאיב כדי לגרום נזק. חשיפה ממושכת לצלילים בעוצמה של 90 דציבלים – כעוצמת הרעש המופק על ידי שואב אבק – עלולים לגרום לאיבוד שמיעה בסופו של דבר. \n\nסולם הדציבלים הוא סולם לוגריתמי שלעתים יכול להיות מבלבל: מקור צליל בעוצמה של 40 דציבלים אינו כפול בעוצמתו מזה המפיק 20 דציבלים – למעשה הוא חזק פי 100. לעומת זאת, אם שעון מעורר אחד מייצר 70 דציבלים, שני שעונים מעוררים אינם מייצרים 140 דציבלים, אלא 73 דציבלים. כבר אמרנו שזה סולם מבלבל, נכון? \n\n10 דציבלים של עלים מרשרשים \n20 דציבלים של לחישה ממרחק של מטר וחצי \n30 דציבלים של לחישה רכה \n50 דציבלים של ממטרי גשם \n60 דציבלים של שיחה רגילה \n90 דציבלים של רעש מבלנדר \n100 דציבלים ממכונית ללא עמם פליטה \n110 דציבלים של צעקה באוזן \n120 דציבלים מרעם \n130 דציבלים מפטיש אויר \n140 דציבלים ממטוס ממריא" + "ניתן לתאר את כל סוגי הצלילים באמצעות התדר והעוצמה שלהם. \n\nעוצמה היא ערך שאפשר למדוד בעזרת יומן המדע ביחידות של דציבלים (dB). עוצמה, או חוזק צליל, תלויים במרחק שעצם רוטט עובר בכל פעם שהוא רוטט. עוצמה רבה יותר נשמעת באוזנינו כצליל חזק יותר. \n\nתדר (הנקרא גם גובה צליל או טון) של גל קול שווה לקצב שבו הוא רוטט. ככל שעצם רוטט במהירות גבוהה יותר, כך הצליל שנוצר גבוה יותר. יומן המדע לא מודד תדרים, אלא רק עוצמת קול. \n\nדבר אחד שחשוב לדעת הוא שהמיקרופון במכשיר נועד להיות רגיש מאוד להבדלים בין גלי הקול לאורך הזמן, אך לא לגודל המוחלט של כל גל. ניסינו לבחור קוד שיש סיכוי גבוה שיפיק מספרים הדומים למספרי הסימוכין המופיעים בהמשך. עם זאת, כל מכשיר עשוי להציג בעקביות מספרים גבוהים או נמוכים יותר. מדענים בדרך כלל מכיילים חיישן כמו זה למידה ידועה. בשלב זה, יומן המדע יכול לומר לכם אם עוצמת הקול של נסיעת הרכבת הבאה שלכם תהיה גבוהה יותר מזו של מופע הרוק הבא שתלכו אליו, אבל רק אם תביאו את אותו הטלפון לשני האירועים. \n\nדבר אחר שכדאי לדעת הוא שישנם הבדלים משמעותיים בין \"עוצמת קול\", \"הרמה של עוצמת הקול\" ו\"לחץ קול\". אנחנו מתייחסים אליהם כאן כאל אותו הדבר, אבל אם תרצו לחקור יותר לעומק, יש משאבים רבים באינטרנט שאפשר ללמוד מהם על ההבדלים האלה. \n\nהצליל החלש ביותר שאוזן אנושית ממוצעת יכולה לשמוע מוגדר כ-0 דציבלים. עוצמת הקול של שיחה ממוצעת היא כ-60 דציבלים, וצלילים בעוצמה הגבוהה מ-140 דציבלים מכאיבים לאוזן האנושית. עם זאת, צלילים לא חייבים להכאיב כדי לגרום נזק. חשיפה ממושכת לצלילים בעוצמה של 90 דציבלים, כמו למשל עוצמת הרעש המופק על ידי שואב אבק, עלולים לגרום לאיבוד שמיעה בסופו של דבר. \n\nסולם הדציבלים הוא סולם לוגריתמי, ומעט מבלבל: מקור צליל המפיק 40 דציבלים אינו כפול בעוצמתו ממקור המפיק 20 דציבלים. למעשה, הוא חזק ממנו פי 100. לעומת זאת, אם שעון מעורר אחד מייצר 70 דציבלים, שני שעונים מעוררים לא מייצרים 140 דציבלים, אלא 73 דציבלים בלבד. כבר אמרנו שזה סולם מבלבל? \n\nעלים מרשרשים: 10 דציבלים \nלחישה ממרחק של מטר וחצי: 20 דציבלים \nלחישה רכה: 30 דציבלים \nגשם: 50 דציבלים \nשיחה רגילה: 60 דציבלים \nבלנדר: 90 דציבלים\nמכונית ללא עמם פליטה: 100 דציבלים \nצעקה באוזן: 110 דציבלים \nרעם: 120 דציבלים \nפטיש אוויר: 130 דציבלים \nמטוס ממריא: 140 דציבלים" "סיבובים לדקה (סל\"ד) היא מידה של תדירות סיבובים סביב ציר קבוע במשך דקה אחת. ‏\n\nכאשר השבשבת מסתובבת, היא מסובבת את הדיסקית המקודדת:" "תנועה זו יוצרת פרקי זמן קצרים של אור וחושך על החיישן, ואלה מתועדים כתנועה במגזין המדע." "הנתונים המופיעים כאן מגיעים מתקשורת של חיישן חיצוני עם הטלפון דרך Bluetooth. ‏\n‏\nהערך מייצג את אחוז הקריאה הגולמית ישירות מהמיקרו-בקר. נתון זה הוא בדרך כלל אחוז נפילת המתח בכל הבקר." @@ -232,6 +232,7 @@ "החיישן הבא: %s" "הוסף הערה חדשה" "ההערה נמחקה" + "המדידה נמחקה" "ביטול" "הוספת הערה למדידה הזו" "צלם הערת תמונה" @@ -399,7 +400,7 @@ "הוספת תיאור" "MMMM yyyy" "מד תאוצה לינארי" - "התאוצה הכוללת של הטלפון, לא כולל את כוח הכבידה, במטר לשנייה בריבוע (m/s²)" + "התאוצה הכוללת של הטלפון, לא כולל את כוח הכבידה, ביחידות של m/s²" "עצמים שאינם זזים נוטים להישאר ללא תנועה, אבל אם הם כבר נמצאים בתנועה, הם נוטים להמשיך לנוע. לתופעה הזו קוראים אינרציה או הֶתְמֵד. העיקרון הזה נקרא \"החוק הראשון של ניוטון\": כל גוף יתמיד במצבו, כלומר יישאר במנוחה או בתנועה, כל עוד לא פועלים עליו שום כוחות חיצוניים. \n\nכאשר כוח חיצוני גורם לגוף לזוז ממקומו, אנחנו אומרים שהגוף מאיץ: המהירות שלו משתנה – עולה, יורדת או משנה כיוון. תאוצה נמדדת כשינוי במהירות (מטרים לשנייה) למשך זמן, ויחידות המידה שלה הן מטרים לשנייה בריבוע (m/s²). ‏\n\nבטלפון יש התקן שמודד את השינויים האלו בתנועה ונקרא מד תאוצה. בתוך מד התאוצה תלויות משקולות קטנות בעלות חופש תנועה. שינויים בתנועה גורמים להן לזוז, בדומה לאופן שבו הראש זז קדימה כשהמכונית שבה נוסעים בולמת בפתאומיות. באמצעות מדידה של השינויים העדינים האלה באינרציה, מד התאוצה בטלפון יכול לזהות שינויים בתנועה ובכיוון. המידע הזה משמש לצרכים שונים בטלפון, למשל לשינוי כיוון התצוגה של המסך לאורך או לרוחב, למשחקים בטלפון ועוד." "החיישן המשולב של מד התאוצה הלינארי מתעד את התאוצה הכוללת בכל שלושת הצירים של הטלפון, לא כולל כוח הכבידה." "%1$s %2$s" @@ -430,7 +431,7 @@ "בחירת תמונה" "התמונה צולמה בתאריך %s" "נבחרה" - "עריכת התמונה באמצעות..." + "עריכת התמונה באמצעות…" "הצגה של חלונית ההזזה עם הכלים" "הרחבה של חלונית ההזזה עם הכלים" "ההזזה עם הכלים" @@ -438,7 +439,10 @@ "הוספת הערת טקסט" "תצוגה מקדימה של מצלמה" "לא ניתן להשתמש במצלמה מפני שליומן המדע אין הרשאה לגשת אליה." - "לא ניתן להשתמש בספריית התמונות מפני שליומן המדע אין הרשאה לגשת אליה." - - + "לא ניתן להשתמש בגלריית התמונות מפני שליומן המדע אין הרשאה לגשת אליה." + "פתיחת ההגדרות" + "הצגת ניסויים מהארכיון" + "הסתרת ניסויים מהארכיון" + "הסתרת מדידות מהארכיון" + "תמונת מצב של חיישן" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml index 8c290c3d..e858475e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml @@ -200,7 +200,7 @@ "物体にはその位置に留まる性質、また移動している場合は動き続ける性質があります。この性質を慣性といいます。ニュートンの第 1 法則では、この考え方を明確に説明しています。つまり、物体は外部から不平衡力が加わらない限り、移動または静止した状態を保ち続けます。\n\n不平衡力が物体自体を変化させない状況を物体の加速と呼び、物体の速力または速度が変化します。これは、加速、減速、または方向の変化のいずれかを指します。加速度は時間あたりの速力(メートル/秒)、またはメートル毎秒毎秒(m/s²)の変化として測定されます。\n\nスマートフォンにはこのような動きの変化を測定する装置が搭載されており、加速度計と呼ばれています。加速度計の内部には小さな重りが吊り下げられていて、自由に移動できるようになっています。動きに変化が発生すると、このような重りの移動にも変化が生まれます。たとえば、車が急に停止すると頭が前に倒れるような感じです。このような微妙な慣性の変化を測定することで、スマートフォンの加速度計は動きの変化と方向を検出することができます。これは、画面を横向きから縦向きに切り替えたり、スマートフォンでゲームをプレイしたりする場合に利用されています。" "スマートフォンをテーブルに置いて動かしていない場合でも、Z 軸には絶えず加速度が発生していることにお気付きでしょうか。これは重力によって地球上で発生する加速度であり、約 9.8 m/s² です。" "音は振動によって生じます。たとえば、皆さんの声も喉の声帯が振動することで生み出されています。このような振動によって、気圧が高いところと低いところが交互に発生する領域が生まれ、外側に向かって広がっていきます。池に小石を投げると、輪状の波が広がっていくような感じです。" - "すべての音は、周波数と強さという観点から表すことができます。\n\nサイエンス ジャーナルで測定するのは強さであり、単位はデシベル(dB)です。強さまたは音量は、振動する物体が振動するたびに移動する距離によって変化し、強さが大きくなるほど聞こえる音量も大きくなります。\n\n音波の周波数(ピッチまたはトーンとも呼ばれます)は、振動の速さに相当します。物体の振動が速いほど、生み出される音のピッチも高くなります。サイエンス ジャーナルでは周波数は測定されず、音量だけが測定されます。\n\n平均的な人間の耳で聴き取れる最小の音量が 0 dB と定義されています。日常会話の音量は 60 dB ほどで、140 dB を超える音は人間の耳には苦痛に感じられます。ただし有害な音量が必ずしも苦痛に感じられるわけではありません。掃除機の音量は 90 dB ほどですが、この音量の環境に継続的にさらされていると難聴を引き起こす原因となります。\n\nデシベルは対数的な尺度であるため、少々注意を要します。たとえば、40 dB の音源は 20 dB の音源と比較して強さが 2 倍というわけではなく、100 倍になります。また、音量が 70 dB のアラーム時計を 2 台鳴らした場合、音量は 140 dB ではなく 73 dB になります。このように、少しわかりにくい尺度といえます。\n\n葉が触れ合う音: 10 dB\n距離 1.5 m でのささやき: 20 dB\n小声の話し声: 30 dB\n雨音: 50 dB\n日常会話: 60 dB\nミキサーの音: 90 dB\nマフラーなしの自動車: 100 dB\n耳元での大声: 110 dB\n雷の音: 120 dB\n削岩機の音: 130 dB\n飛行機の離陸: 140 dB" + "すべての音は、周波数と強さという観点から表すことができます。\n\nサイエンス ジャーナルで測定するのは強さであり、単位はデシベル(dB)です。音の強さ、つまり音量は、物体が振動する幅によって変化し、強さが大きくなるほど聞こえる音量も大きくなります。\n\n音波の周波数(ピッチやトーンとも呼ばれます)は、振動の速さに相当します。物体の振動が速いほど、生み出される音のピッチも高くなります。サイエンス ジャーナルでは周波数は測定されず、音量だけが測定されます。\n\nただし、端末のマイクは、時間の経過による音波の変化には非常に敏感ですが、それぞれの音波の絶対的なサイズを測ることはあまり得意ではないことは覚えておいてください。アプリの開発にあたっては、以下に示す参照数値と同じような数値を生成するコードを選択しようと努めてきましたが、高めに測定されたり低めに出たりと、端末ごとに違うクセがあります。科学者は通常、既知の測定数値に合致させるために、このようなセンサーに対して較正という作業を行います。現時点では、サイエンス ジャーナルで電車の騒音とロック コンサートの音量を測ることはできますが、どちらの音量が大きいかを比べるためには、同じスマートフォンで両方の音量を測定する必要があります。\n\nまた、「音の強さ」、「音の強さのレベル」、「音圧」の違いを理解することも重要です。ここではすべて同じものとして扱っていますが、それらの違いについて詳しく知りたい場合は、多くのオンライン リソースが公開されているのでそちらをご覧ください。\n\n平均的な人間の耳で聴き取れる最小の音量が 0 dB と定義されています。日常会話の音量は 60 dB ほどで、140 dB を超える音は人間の耳には苦痛に感じられます。ただし、そこまで大きくなくても有害な音はあります。たとえば、掃除機の音量は 90 dB ほどですが、この音量の環境に継続的にさらされていると難聴を引き起こす原因となります。\n\nデシベルは対数的な尺度であるため、少々注意を要します。たとえば、40 dB の音源は 20 dB の音源と比較して強さが 2 倍ではなく、100 倍になります。また、音量が 70 dB のアラーム時計を 2 台鳴らした場合、音量は 140 dB ではなく 73 dB になります。このように、この尺度には少し直観的ではない部分もあります。\n\n木の葉のこすれる音は 10 dB\n1.5 メートル離れたところからのささやき声は 20 dB\n優しいささやき声は 30 dB\n雨音は 50 dB\n普通の会話は 60 dB\nブレンダーの音は 90 dB\nマフラーのない自動車の音は 100 dB\n耳元での叫び声は 110 dB\n雷は 120 dB\nドリルの音は 130 dB\n飛行機の離陸音は 140 dB" "回転/分(RPM)は、固定軸を中心とした 1 分あたりの回転数を表す測定単位です。\n\n風車が回転すると、エンコーダ ディスクが回ります。" "これによりセンサー上に明暗の周期が生じ、サイエンス ジャーナルに回転として登録されます。" "ここに表示されるデータは、スマートフォンが Bluetooth 経由で外部センサーと通信して取得したデータです。\n\nこの値は、マイクロコントローラから直接取得した未加工の読み取り値の割合を表し、通常はセンサー間の電圧降下の割合を表します。" @@ -232,6 +232,7 @@ "次のセンサー: %s" "新しいメモを追加" "メモが削除されました" + "記録が削除されました" "元に戻す" "この記録にメモを追加" "写真メモを撮影" @@ -430,7 +431,7 @@ "写真を選択" "%s に撮影した画像" "選択済み" - "写真編集に使用するアプリ..." + "写真編集に使用するアプリ…" "ツールドロワーを表示" "ツールドロワーを展開" "ツールドロワーを折りたたむ" @@ -438,7 +439,10 @@ "テキストメモを追加" "カメラライブ ビュー" "サイエンス ジャーナルにカメラへのアクセス権限がないため、カメラを使用できません。" - "サイエンス ジャーナルにフォト ライブラリへのアクセス権限がないため、フォト ライブラリを使用できません。" - - + "サイエンス ジャーナルにフォト ギャラリーへのアクセス許可がないので、フォト ギャラリーを使用できません。" + "設定を開く" + "アーカイブ済みの実験を表示" + "アーカイブ済みの実験を非表示" + "アーカイブ済みの記録を非表示" + "センサーのスナップショット" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml index f99b536c..69da965c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml @@ -200,7 +200,7 @@ "물체는 그대로 있거나 이동 중인 경우에는 계속 이동하려는 경향이 있으며 이러한 경향을 관성이라고 합니다. 이 개념을 공식적으로 표현한 것이 뉴턴의 제1법칙입니다. 물체는 이동 상태로 계속 진행하거나 불균형한 힘이 작용하지 않는 한 움직이지 않습니다. \n\n불균형한 힘이 물체를 움직이게 하면 물체가 가속된다고 합니다. 가속, 감속 또는 방향 변경에 의해 물체의 속도가 변합니다. 가속도는 시간에 따른 속도 변화(초당 미터) 또는 미터 매 초 제곱(m/s²)으로 측정됩니다. \n\n휴대전화에 이러한 움직임 변화를 측정하는 장치인 가속도계가 있습니다. 가속도계 내부에 달려 있는 소형 질량 물체는 이동이 가능하며 움직임에 변화가 있을 때 이동합니다. 이는 자동차가 갑자기 멈출 때 탑승자의 머리가 앞쪽으로 이동하는 것과 같습니다. 휴대전화의 가속도계는 이러한 미묘한 관성에 의한 이동을 측정하여 움직임과 방향의 변화를 감지하므로 휴대전화에서 게임 등의 활동을 할 때 화면을 가로에서 세로 모드로 전환하는 데 유용합니다." "휴대전화를 탁자 위에 놓아둔 상태에서도 z축의 지속적인 가속을 확인할 수 있습니다. 이는 중력의 당기는 힘에 의해 지구 표면에서 발생하는 가속도이며 약 9.8m/s²입니다." "소리는 진동에 의해 발생합니다. 예를 들어 목소리는 성대의 진동을 통해 발생합니다. 이러한 진동은 높고 낮은 공기압이 번갈아 밖으로 배출되는 공간을 만듭니다. 이는 연못에 조약돌을 던지면 원형의 잔물결이 확대되는 것과 같습니다." - "모든 소리는 주파수와 세기로 설명할 수 있습니다. \n\n세기는 과학 저널에서 데시벨(dB) 단위로 측정하는 항목입니다. 소리의 강도나 세기는 진동하는 물체가 진동할 때마다 이동하는 거리에 따라 다릅니다. 소리가 커지면 더 큰 세기의 소리를 듣게 됩니다. \n\n음파의 주파수, 음높이 또는 음색은 진동 속도와 같습니다. 물체가 빠르게 진동할수록 진동에 의한 소리의 음높이가 더 높습니다. 과학 저널은 주파수가 아닌 세기만 측정합니다. \n\n평균적인 인간의 귀로 감지할 수 있는 가장 작은 소리는 0dB로 정의됩니다. 일반적인 대화는 약 60dB이며 약 140dB 이상의 소리는 인간의 귀에 고통스럽습니다. 하지만 이러한 고통이 해로운 소리의 기준이 아닙니다. 진공청소기의 세기와 비슷한 90dB의 소리에 지속적으로 노출되어도 청력을 상실할 수 있습니다. \n\n데시벨 등급은 로그 방식이므로 이해하는 것이 조금 까다로울 수 있습니다. 40dB의 소리는 20dB 세기의 2배가 아닌 100배입니다. 한편 자명종 1개는 70dB이지만 자명종 2개는 140dB이 아닌 73dB입니다. 설명한 것처럼 친숙하지 않은 방식의 등급입니다. \n\n10dB: 나뭇잎이 바스락거리는 소리 \n20dB: 1.5미터 거리에서 속삭이는 소리 \n30dB: 부드럽게 속삭이는 소리 \n50dB: 빗소리 \n60dB: 일반적인 대화 \n90dB: 믹서기 \n100dB: 소음기가 없는 자동차 \n110dB: 귀에 대고 지르는 고함 \n120dB: 천둥 \n130dB: 착암기 \n140dB: 비행기 착륙" + "모든 소리는 주파수와 세기로 표현할 수 있습니다. \n\n세기는 과학 저널에서 데시벨(dB) 단위로 측정되는 수치입니다. 소리의 강도나 세기는 진동하는 물체가 진동할 때마다 이동하는 거리에 따라 다릅니다. 소리가 커지면 더 큰 세기의 소리를 듣게 됩니다. \n\n음파의 주파수, 음높이 또는 음색은 진동 속도와 같습니다. 물체가 빠르게 진동할수록 진동에 의한 소리의 음높이가 더 높습니다. 과학 저널은 주파수가 아닌 세기만 측정합니다. \n\n기기의 마이크는 시간 경과에 따른 음파의 차이에 매우 민감하게 감지하도록 설계되어 있지만 각 음파의 절대적인 크기에는 민감하지 않다는 점을 알고 있어야 합니다. 과학 저널은 아래에 나와 있는 참조 수치와 비슷한 수치가 나올 가능성이 높은 코드를 채택했지만 각각의 기기에서 지속적으로 더 높거나 낮은 수치가 나올 수 있습니다. 과학자는 대개 이와 같은 센서를 알려진 측정값에 맞게 보정합니다. 현재 과학 저널로 다음에 탑승할 열차가 다음에 관람할 록 콘서트보다 시끄러운지 확인할 수 있지만 기차와 콘서트장 모두 동일한 휴대전화를 가져가는 경우에만 가능합니다. \n\n\'소리 세기\', \'소리 세기 수준\', \'음압\' 사이에 중요한 차이점이 있다는 점도 알고 있어야 합니다. 과학 저널에서는 모두 동일한 것으로 취급하고 있지만 더 자세히 알아보고 싶은 경우 이러한 차이점에 대한 다양한 온라인 리소스를 확인해 보세요. \n\n평균적인 사람의 청각이 감지할 수 있는 가장 작은 소리를 0dB로 정의합니다. 보통의 대화는 약 60dB이며, 약 140dB을 초과한 소리는 사람이 듣기에 고통스럽다고 합니다. 그러나 고통을 주지 않는 소리도 해로울 수 있습니다. 진공청소기가 내는 소음 수준인 90dB의 소리에 지속적으로 노출되어도 청력을 상실할 수 있습니다. \n\n데시벨 수치는 지수적이므로 착각하기 쉽습니다. 예를 들어 40dB의 음원은 20dB의 음원보다 2배가 아니라 100배나 강한 것입니다. 또한 자명종 하나가 70dB의 소리를 낸다면 자명종 두 개는 140dB이 아닌 73dB의 소리를 냅니다. 이상하죠? \n\n10dB: 나뭇잎이 바스락거리는 소리 \n20dB: 1.5미터 거리에서 속삭이는 소리 \n30dB: 부드럽게 속삭이는 소리 \n50dB: 빗소리 \n60dB: 일반적인 대화 \n90dB: 믹서기 \n100dB: 소음기가 없는 자동 \n110dB: 귀에 대고 지르는 고함 \n120dB thunder \n130dB: 착암기 \n140dB: 비행기 이륙" "분당 회전수(RPM)는 고정된 축에서 1분 동안 회전하는 빈도를 측정합니다. \n\n풍력 회전자가 돌아가면 인코더 디스크가 회전합니다." "과학 저널에서 회전으로 인식되는 밝고 어두운 부분이 센서에서 생성됩니다." "여기에 표시되는 데이터는 블루투스를 통해 휴대전화와 외부 센서가 통신하여 제공합니다. \n\n값은 마이크로 컨트롤러에서 직접 읽은 원본 비율을 보여줍니다. 이 값은 보통 센서의 전압 강하 비율입니다." @@ -232,6 +232,7 @@ "다음 센서: %s" "새 메모 추가" "메모를 삭제했습니다." + "기록이 삭제되었습니다." "실행취소" "이 기록에 메모 추가" "메모 촬영" @@ -430,7 +431,7 @@ "사진 선택" "%s에 촬영한 이미지" "선택됨" - "사진을 수정할 앱 선택..." + "사진을 수정할 앱 선택..." "도구 창 표시" "도구 창 펼치기" "도구 창 접기" @@ -438,7 +439,10 @@ "텍스트 메모 추가" "카메라 실시간 보기" "카메라에 액세스할 수 있는 권한이 없어 과학 저널에서 카메라를 사용할 수 없습니다." - "사진 라이브러리에 액세스할 수 있는 권한이 없어 과학 저널에서 사진 라이브러리를 사용할 수 없습니다." - - + "과학 저널에 사진 갤러리 액세스 권한이 없어 사진 갤러리를 사용할 수 없습니다." + "설정 열기" + "보관처리된 실험 표시" + "보관처리된 실험 숨기기" + "보관처리된 기록 숨기기" + "센서 스냅샷" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml index ad06d922..b8737d82 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml @@ -200,7 +200,7 @@ "Objektai turi polinkį likti vietoje arba judėti toliau, jei juda, – tai vadiname inercija. Pirmasis Niutono dėsnis nusako šią idėją pagal tokią formulę: jei objekto nepaveikia išorinė jėga, jis toliau tolygiai juda arba išlaiko rimties būseną. \n\nKai išorinė jėga išjudina objektą, sakome, kad objektas įgyja pagreitį: pasikeičia jo greitis ar tempas – objekto judėjimas pagreitėja, sulėtėja ar pakeičia kryptį. Pagreitis matuojamas įvertinant greičio pokytį per laiką (metrais per sekundę) arba metrais per sekundę kvadratu (m/s²). \n\nJūsų telefone yra įrenginys, matuojantis šiuos judėjimo pokyčius – akselerometras. Jame pakabinti nedideli laisvai judantys svoriai. Pasikeitus judėjimui pajudinami ir šie svoriai, panašiai kaip jūsų galva, krestelėjusi pirmyn, jums sėdint automobilyje, kuris staiga sustoja. Matuodamas šiuos vos pastebimus inertinius judesius telefono akselerometras gali aptikti judėjimo ir orientacijos pokyčius. Tai naudinga perjungiant ekrano padėtį iš gulsčio režimo į stačią, žaidžiant žaidimus ir pan." "Tikriausiai pastebėjote nuolatinį pagreitį Z ašyje, net kai telefonas padėtas ant stalo. Tai vidutiniškai 9,8 m/s² pagreitis, kurį patiriame Žemės paviršiuje dėl gravitacijos." "Garsus sukelia vibracija. Pavyzdžiui, jūsų balsas randasi dėl gerklėje esančių balso stygų vibracijos. Šios vibracijos sukelia besikeičiančias aukšto ir žemo oro slėgio sritis, kurios plinta išorėn panašiai kaip besiplečiantys raibuliuojantys ratilai vandens paviršiuje įmetus akmenuką į tvenkinį." - "Visi garsai gali būti aprašomi pagal jų dažnį ir stiprį. \n\nStiprį matuojate naudodamiesi „Science Journal“, jis matuojamas decibelais (dB). Garso stipris, arba garsumas, priklauso nuo atstumo, kurį nukeliauja vibruojantis objektas kas kartą, kai jis vibruoja, – didesnio stiprio garsą girdime kaip garsesnį. \n\nGarso bangos dažnis (taip pat aukštis ar tonas) yra lygus jos vibracijos dažniui. Kuo greičiau vibruoja objektas, tuo aukštesnis garsas išgaunamas. „Science Journal“ nematuoja dažnio, tik garsumą. \n\nTyliausias vidutinio žmogaus ausiai girdimas garsas yra 0 dB. Eilinis pokalbis atitinka apie 60 dB, o garsai, viršijantys apie 140 dB, yra skausmingi žmogaus ausiai. Bet garsas nebūtinai turi kelti skausmą, kad būtų žalingas. Nuolatinis 90 dB garso poveikis (maždaug dulkių siurblio skleidžiamo garsumo) gali ilgainiui sukelti klausos sutrikimų. \n\nDecibelų skalė yra logaritminė ir turi tam tikrų subtilybių: 40 dB garso šaltinis nėra dvigubai stipresnis nei 20 dB šaltinis – jis stipresnis 100 kartų. Taip pat vienam skambančiam žadintuvui skleidžiant 70 dB garsą, dviejų skambančių žadintuvų garsas sudarys ne 140 dB, o 73 dB. Kaip sakėme, ši skalė keista. \n\n10 dB kelia lapų čežėjimas \n20 dB – šnabždėjimas maždaug už pusantro metro \n30 dB – tylus šnabždesys \n50 dB – liūtis \n60 dB – įprastas pokalbis \n90 dB – plaktuvas \n100 dB – automobilis be duslintuvo \n110 dB – rėkimas į ausį \n120 dB – griaustinis \n130 dB – pneumatinis kūjis \n140 dB – kylantis lėktuvas" + "Visi garsai gali būti aprašomi pagal jų dažnį ir stiprį. \n\nStiprį matuojate naudodamiesi „Science Journal“, jis matuojamas decibelais (dB). Garso stipris, arba garsumas, priklauso nuo atstumo, kurį nukeliauja vibruojantis objektas kas kartą, kai jis vibruoja, – didesnio stiprio garsą girdime kaip garsesnį. \n\nGarso bangos dažnis (taip pat aukštis ar tonas) yra lygus jos vibracijos dažniui. Kuo greičiau vibruoja objektas, tuo aukštesnis garsas išgaunamas. „Science Journal“ nematuoja dažnio, tik garsumą. \n\nVienas svarbūs dalykas, kurį turėtumėte žinoti, yra tai, kad įrenginyje esantis mikrofonas sukurtas taip, kad jautriai fiksuotų garso bangų skirtumus per laiką, bet ne pagal absoliutų kiekvienos bangos dydį. Bandėme pasirinkti kodą, kurį naudojant gaunamos vertės, panašios į toliau parodytas normines vertes, bet kiekvienas įrenginys gali pateikti nuosekliai didesnes ar mažesnes vertes. Mokslininkai tokius jutiklius paprastai kalibruoja pagal žinomus matavimus. Kol kas „Science Journal gali nustatyti, ar kitas jūsų pasivažinėjimas traukiniu bus garsesnis už kitą roko koncertą, į kurį eisite, bet tik tokiu atveju, jei abu kartus turėsite tą patį telefoną. \n\nVienas svarbūs dalykas, kurį turėtumėte žinoti, yra tai, kad egzistuoja svarbūs skirtumai tarp „garso stiprio“, „garso stiprio lygio“ ir „garso slėgio“. Šiuose eksperimentuose juos vertiname kaip tą patį dalyką, bet jei norite sužinoti daugiau, paieškokite internete – yra daug išteklių apie šių matavimo vienetų skirtumus. \n\nTyliausias vidutinio žmogaus ausiai girdimas garsas yra 0 dB. Eilinis pokalbis atitinka apie 60 dB, o garsai, viršijantys apie 140 dB, yra skausmingi žmogaus ausiai. Bet garsas nebūtinai turi kelti skausmą, kad būtų žalingas. Nuolatinis 90 dB garso poveikis (maždaug dulkių siurblio skleidžiamo garsumo) gali ilgainiui sukelti klausos sutrikimų. \n\nDecibelų skalė yra logaritminė ir turi tam tikrų subtilybių: 40 dB garso šaltinis nėra dvigubai stipresnis nei 20 dB šaltinis – jis stipresnis 100 kartų. Taip pat vienam skambančiam žadintuvui skleidžiant 70 dB garsą, dviejų skambančių žadintuvų garsas sudarys ne 140 dB, o 73 dB. Kaip sakėme, ši skalė keista. \n\n10 dB garsą sukelia lapų čežėjimas \n20 dB – šnabždėjimas maždaug už pusantro metro \n30 dB – tylus šnabždesys \n50 dB – liūtis \n60 dB – įprastas pokalbis \n90 dB – plaktuvas \n100 dB – automobilis be duslintuvo \n110 dB – rėkimas į ausį \n120 dB – griaustinis \n130 dB – pneumatinis kūjis \n140 dB – kylantis lėktuvas" "Apsisukimai per minutę (APM) – tai apsisukimo apie fiksuotą ašį dažnio per vieną minutę matavimas. \n\nSukdamasis vėjo malūnėlis sukioja kodavimo diską:" "Jutiklis fiksuoja šviesos ir tamsos tarpsnius, kurie „Science Journal“ registruojami kaip apsisukimai." "Čia rodomi duomenys gaunami iš išorinio jutiklio, susieto su jūsų telefonu „Bluetooth“ ryšiu. \n\nVertė nurodo pirminių duomenų nuskaitymą tiesiai iš jūsų mikrovaldiklio procentais. Paprastai tai yra procentais išreikštas įtampos kritimas, kurį aptinka jutiklis." @@ -232,6 +232,7 @@ "Kitas jutiklis: „%s“" "Pridėti naują pastabą" "Pastaba ištrinta" + "Įrašas ištrintas" "Anuliuoti" "Pridėti pastabą prie šio įrašo" "Nufotografuoti ir pridėti pastabą" @@ -430,7 +431,7 @@ "Pasirinkti nuotrauką" "Vaizdas nufotografuotas %s" "pasirinkta" - "Redaguokite nuotrauką naudodami..." + "Redaguokite nuotrauką naudodami..." "Rodyti įrankio skydelį" "Išskleisti įrankio skydelį" "Sutraukti įrankio skydelį" @@ -438,7 +439,10 @@ "Pridėti užrašą" "Tiesioginis fotoaparato rodinys" "Fotoaparato naudoti negalima, nes „Science Journal“ neturi leidimo pasiekti jį." - "Nuotraukų galerijos naudoti negalima, nes „Science Journal“ neturi leidimo pasiekti ją." - - + "Nuotraukų galerijos naudoti negalite, nes „Science Journal“ neturi leidimo jos pasiekti." + "Atidaryti nustatymus" + "Rodyti suarchyvuotus eksperimentus" + "Slėpti suarchyvuotus eksperimentus" + "Slėpti suarchyvuotus įrašus" + "Jutiklio duomenų įrašas" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml index 86474546..c3816ebf 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml @@ -200,7 +200,7 @@ "Objektiem ir tendence palikt uz vietas vai turpināt kustēties, ja tie kustas, — mēs šo tendenci saucam par inerci. Ņūtona pirmais likums izsaka šo ideju formāli: katrs ķermenis paliek mierā vai turpina vienmērīgu taisnlīnijas kustību tikmēr, kamēr tam pieliktie spēki to neizmaina. \n\nKad mierā esošam ķermenim tiek pielikts ārējs spēks, apgalvojam, ka objekts paātrinās: tā ātrums vai attālums mainās — palielinoties, samazinoties vai mainot virzienu. Paātrinājumu mēra kā ātruma izmaiņas laikā (metri sekundē) vai metrus kvadrātsekundē (m/s²). \n\nJūsu tālrunī ir iekārta, lai izmērītu šīs kustību izmaiņas, — akselerometrs. Akselerometrā mazās noteiktās masas var brīvi pārvietoties. Masas objekta novirze no sākotnējā stāvokļa liek šīm masām pārvietoties, tāpat kā jūsu galva smagi sasveras uz priekšu, mašīnai strauji apstājoties. Mērot šīs pēkšņās inerces svārstības, akselerometrs tālrunī var noteikt izmaiņas kustībā un orientācijā, kas noder, pārslēdzoties no ainavas režīma uz portreta režīmu vai spēlējot spēles tālrunī, kā arī citām funkcijām." "Iespējams, esat ievērojis paātrinājumu Z asij pat tad, kad tālrunis atrodas uz galda. Tas ir paātrinājums, ko izjūtam uz Zemes virsmas tās gravitācijas dēļ, un tas ir apmēram 9,8 m/s²." "Skaņas veido vibrācija. Piemēram, jūsu balss veidojas no rīkles balss saišu vibrācijām. Šīs vibrācijas rada augsta un zema gaisa spiediena zonu mainību, kas virzās uz āru — ļoti līdzīgi apļveida kustībai, ko rada dīķī iemests olis." - "Visas skaņas var raksturot pēc to frekvences un intensitātes. \n\nIntensitāte tiek mērīta lietotnē Science Journal decibelos (dB). Intensitāte jeb skaļums ir atkarīgs no attāluma, kādā vibrējot pārvietojas objekts; jo lielāks skaļums, jo lielāka dzirdamības intensitāte. \n\nSkaņas viļņa frekvence (arī pakāpe vai tonis) ir līdzvērtīgs tā vibrācijas rādītājam. Jo ātrāk objekts vibrē, jo augstāka ir skaņas pakāpe. Lietotne Science Journal nemēra biežumu, tikai skaļumu. \n\nKlusākā skaņa, ko vidusmēra cilvēks spēj uztver, ir 0 dB. Parasta saruna atbilst apmēram 60 dB, un skaņas virs apmēram 400 dB ir cilvēka ausij sāpīgas. Skaņām nav jārada sāpes, lai tās nodarītu ļaunumu. Ilgstoša 90 dB skaņas iedarbība — līdzīgi putekļsūcēja radītajam troksnim — var izraisīt kurlumu. \n\nDecibelu skala ir logaritmiska, tāpēc tā ir viltīga: 40 dB skaņas avots nav divreiz spēcīgāks par 20 dB skaņu — tas ir 100 reizes spēcīgāks. Tajā pašā laikā, ja viens zvanošs modinātājs rada 70 dB, divi zvanoši modinātāji nerada 140 dB, bet tikai 73 dB. Jau teicām, tā ir dīvaina skala. \n\n10 dB lapu čaboņa \n20 dB čukstēšana no 5 pēdu attāluma \n30 dB kluss čuksts \n50 dB lietus \n60 dB normāla saruna \n90 dB blenderis \n100 dB automašīna bez trokšņu slāpētāja \n110 dB kliegšana ausī \n120 dB pērkons \n130 dB elektriskais urbis \n140 dB lidmašīnas pacelšanās" + "Visas skaņas var raksturot ar to frekvenci un intensitāti. \n\nIntensitāte ir vērtība, ko nosakāt, izmantojot Science Journal, tās mērvienība ir decibels (dB). Intensitāte jeb skaļums ir atkarīgs no attāluma, kādā vibrējošs objekts pārvietojas pie katras vibrācijas. Lielāku intensitāti mūsu ausis uztver kā lielāku skaļumu. \n\nSkaņas viļņa frekvence (jeb tonis) izsaka tā vibrēšanas biežumu. Jo ātrāk objekts vibrē, jo augstāks ir skaņas tonis. Lietotnē Science Journal nevar izmērīt frekvenci, var izmērīt tikai skaļumu. \n\nSvarīgi zināt, ka jūsu ierīces mikrofons ir izveidots tā, lai tas būtu ļoti jutīgs pret skaņas viļņu atšķirībām noteiktā laika posmā, bet ne pret katra viļņa absolūto lielumu. Mēs mēģinājām izvēlēties kodu, kas, visticamāk, sniegs rādītājus, kuri ir līdzīgi tālāk minētajiem atsauces rādītājiem, bet katra ierīce var sniegt konsekventi augstākus vai zemākus rādītājus. Zinātnieki parasti kalibrē šādu sensoru, izmantojot zināmu mērījumu. Pagaidām lietotnē Science Journal var noteikt, vai brauciens ar vilcienu ir skaļāks par rokmūzikas koncertu, bet tikai tad, ja abās situācijas tiek izmantots viens un tas pats tālrunis. \n\nVērts iegaumēt arī to, ka pastāv nozīmīgas atšķirības starp “skaņas intensitāti”, “skaņas intensitātes līmeni” un “skaņas spiedienu”. Šeit mēs pieņemam, ka šīs vērtības ir viena un tā pati lieta, bet, ja vēlaties uzzināt detalizētāku informāciju, pieejami daudzi tiešsaistes resursi par šīm atšķirībām. \n\nKlusākā skaņa, ko var uztvert vidusmēra cilvēka auss, tiek pielīdzināta 0 dB vērtībai. Parastas sarunas skaļums atbilst aptuveni 60 dB, savukārt skaņas virs aptuveni 140 dB izraisa cilvēka ausī sāpju sajūtu. Kaitīga ietekme var būt ne tikai tām skaņām, kas izraisa sāpes. Ilgstoša atrašanās pat 90 dB skaņas ietekmē — strādājoša putekļsūcēja troksnis — var izraisīt paliekošu dzirdes zudumu. \n\nDecibelu skala ir logaritmiska — tas nozīmē, ka 40 dB skaņas avots ir nevis divreiz intensīvāks par 20 dB skaņu, bet gan 100 reizes lielāks. Ja modinātājpulkstenis zvana, radot 70 dB troksni, divi modinātājpulksteņi radīs nevis 140 dB, bet gan 73 dB troksni. Dīvaina skala, vai ne? \n\n10 dB lapu čaboņa \n20 dB čukstēšana no 1,5 metru attāluma \n30 dB kluss čuksts \n50 dB lietus \n60 dB normāla saruna \n90 dB blenderis \n100 dB automašīna bez trokšņu slāpētāja \n110 dB kliegšana ausī \n120 dB pērkons \n130 dB elektriskais urbis \n140 dB lidmašīnas pacelšanās" "Apgriezieni minūtē (RPM) ir biežuma rādītājs rotācijai ap fiksētu asi vienā minūtē. \n\nKad vēja rādītājs pagriežas, tas pagriež arī kodēšanas disku:" "Tas rada gaismas un tumsas periodus sensorā, kuri lietotnē Science Journal tiek reģistrēti kā rotācija." "Šeit redzamie dati nāk no ārējā sensora saziņas ar jūsu tālruni, izmantojot Bluetooth savienojumu. \n\nVērtība rāda neapstrādātā lasījuma procentus no mikrokontrolera. Parasti tie ir procenti no sprieguma krituma visā sensorā." @@ -232,6 +232,7 @@ "nākamais sensors: %s" "Pievienojiet jaunu piezīmi" "Piezīme ir izdzēsta" + "Ieraksts ir dzēsts" "Atsaukt" "Pievienojiet piezīmi šim ierakstam" "Uzņemt attēlu kā piezīmi" @@ -430,7 +431,7 @@ "Izvēlieties fotoattēlu" "Attēla uzņemšanas datums: %s" "atlasīts" - "Fotoattēla rediģēšana..." + "Fotoattēla rediģēšana, izmantojot lietotni..." "Rādīt rīku atvilktni" "Izvērst rīku atvilktni" "Sakļaut rīku atvilktni" @@ -438,7 +439,10 @@ "Pievienot teksta piezīmi" "Kameras priekšskatījums" "Nevar izmantot kameru, jo lietotne Science Journal nevar piekļūt tai." - "Nevar izmantot fotoattēlu bibliotēku, jo lietotnei Science Journal nevar piekļūt tai." - - + "Fotoattēlu galeriju nevar izmantot, jo lietotne Science Journal nevar tai piekļūt." + "Atvērt iestatījumus" + "Rādīt arhivētos eksperimentus" + "Slēpt arhivētos eksperimentus" + "Slēpt arhivētos ierakstus" + "Sensora momentuzņēmums" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml index 25d54633..0b367429 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml @@ -200,7 +200,7 @@ "Objekter har en tendens til å holde seg i ro eller, hvis de er i bevegelse, holde seg i bevegelse. Dette kalles «treghet» (inertia). Denne ideen er formelt definert ved Newtons første lov: Et objekt forblir i ro eller fortsetter i en rettlinjet bevegelse hvis ingen ubalansert kraft virker på det. \n\nNår en ubalansert kraft virker på et objekt, sier vi at objektet akselererer: Objektets hastighet endres ved at hastigheten øker eller reduseres eller gjennom en retningsendring. Akselerasjon måles som hastighetsforandring (meter per sekund) per tidsenhet eller som meter per kvadratsekund (m/s²). \n\nGjennom en innretning på telefonen din kan du måle disse endringene i bevegelse. Denne innretningen kalles et akselerometer. Inne i et akselerometer finnes det små suspenderte masser som kan bevege seg. Bevegelsesendringer fører til at disse massene beveger på seg – på samme måte som hodet ditt gjerne tipper fremover om du sitter i en bil som plutselig bråbremser. Gjennom å måle slike små treghetsendringer kan et akselerometer på en telefon registrere endringer i bevegelse og retning, noe som kan være nyttig for å bytte mellom liggende og stående skjermformat, for å spille spill på telefonen med mer." "Du la sikkert merke til en vedvarende akselerasjon i Z-aksen selv om telefonen lå i ro på et bord. Dette er akselerasjonen på omtrent 9,8 m/s² som vi opplever på jordens overflate som følge av gravitasjonskreftene." "Lyder lages av vibrasjoner. Stemmen din er for eksempel et resultat av vibrasjoner i stemmebåndene i halsen din. Disse vibrasjonene skaper varierende soner med høyt og lavt lufttrykk som sprer seg utover – på samme måte som de voksende, sirkelformede bølgene som oppstår når du kaster en stein i et vann." - "Alle lyder kan beskrives ut fra frekvensen og intensiteten lyden har. \n\nIntensitet er det du måler her i Science Journal, i måleenheten desibel (dB). Intensiteten, eller lydstyrken, avhenger av avstanden et vibrerende objekt forflytter seg over ved hver vibrasjon. Høyere intensitet høres som økt lydstyrke. \n\nFrekvensen (også kalt tonen eller tonehøyden) til en lydbølge tilsvarer vibrasjonsfrekvensen. Jo fortere et objekt vibrerer, desto høyere tone får lyden det skaper. Frekvens måles ikke i Science Journal, bare lydstyrke. \n\nDen laveste lyden et vanlig menneskeøre kan registrere, defineres som 0 dB. Vanlige samtaler har en lydstyrke på omtrent 60 dB, og lyder på over 140 dB er smertefulle for menneskeører. Lyder trenger imidlertid ikke å være smertefulle for å være skadelige. Vedvarende eksponering for lyder på 90 dB – omtrent lydnivået til en støvsuger – kan på sikt føre til hørselstap. \n\nDesibelskalaen er logaritmisk, noe som kan være litt forvirrende. En lydkilde på 40 dB er nemlig ikke dobbelt så intens som en på 20 dB – den er faktisk 100 ganger mer intens. Hvis én ringende vekkerklokke produserer 70 dB, er det ikke slik at to vekkerklokker produserer 140 dB, men 73 dB. Som vi har nevnt, er skalaen litt merkelig. \n\n10 dB – raslende løv \n20 dB – hvisking på 1,5 meters avstand \n30 dB – lav hvisking \n50 dB – regn \n60 dB – normal samtale \n90 dB – blender \n100 dB – bil uten lydpotte \n110 dB – roping i øret \n120 dB – torden \n130 dB – trykkluftbor \n140 dB – fly som tar av" + "Alle lyder kan beskrives ut fra frekvensen og intensiteten lyden har. \n\nIntensitet er det du måler her i Science Journal, i måleenheten desibel (dB). Intensiteten, eller lydstyrken, avhenger av avstanden et vibrerende objekt forflytter seg over for hver vibrasjon. Høyere intensitet oppfattes som økt lydstyrke. \n\nFrekvensen (også kalt tonen eller tonehøyden) til en lydbølge er det samme som vibrasjonshastigheten. Jo fortere et objekt vibrerer, desto høyere tone får lyden det skaper. Frekvensen måles ikke i Science Journal – bare lydstyrken. \n\nNoe som er viktig å huske på, er at mikrofonen i enheten din er laget slik at det er forskjellene i lydbølger over tid som er viktig – ikke den absolutte størrelsen på hver lydbølge. Vi har prøvd å programmere appen slik at tallene du ser, samsvarer med referansetallene nedenfor, men det kan hende at du ser konsekvent høyer eller lavere tall på enkelte enheter. Forskere bruker vanligvis kjente størrelser til å kalibrere slike sensorer. Du kan altså bruke Science Journal til å finne ut om den neste togturen din har et høyere lydnivå enn den neste rockekonserten du går på, men bare hvis du måler med den samme telefonen i begge tilfellene. \n\nNoe annet som er viktig å huske på, er at det finnes viktige forskjeller mellom «lydintensitet», «lydintensitetsnivå» og «lydtrykk». Her skiller vi ikke mellom disse, men hvis du vil dykke ned i lydbølgene, finnes det mange ressurser på nettet der du får forklart forskjellen. \n\n0 dB er definert som den laveste lyden et vanlig menneskeøre kan registrere. Vanlige samtaler har en lydstyrke på omtrent 60 dB, og lyder over 140 dB opplever vi som smertefulle. Men lyd kan også være skadelig uten å være smertefull. Langvarig eksponering for lyder på 90 dB – omtrent lydnivået til en støvsuger – kan på sikt føre til hørselstap. \n\nDesibelskalaen er logaritmisk, noe som kan være litt forvirrende. En lydkilde på 40 dB er nemlig ikke dobbelt så intens som en på 20 dB – den er 100 ganger mer intens. Hvis ringelyden fra én vekkerklokke er på 70 dB, er ikke ringelyden fra to vekkerklokker på 140 dB, men på 73 dB. Skalaen er som sagt litt merkelig. \n\n10 dB – løv som rasler i vinden \n20 dB – hvisking på 1,5 meters avstand \n30 dB – lav hvisking \n50 dB – regn \n60 dB – normal samtale \n90 dB – blender \n100 dB – bil uten lydpotte \n110 dB – roping rett i øret \n120 dB – torden \n130 dB – trykkluftbor \n140 dB – fly som tar av" "Rotasjoner per minutt (RPM) er et mål på frekvensen av rotasjon rundt en fast akse på ett minutt. \n\nNår vindhjulet ditt snurrer, roteres kodeskiven:" "Dette skaper perioder med lys og mørke på sensoren, og disse registreres i Science Journal som en rotasjon." "Dataene som vises her, registreres gjennom en ekstern sensorkommunikasjon med telefonen din via Bluetooth. \n\nVerdien vises som prosentandelen av rådataene som er lest av direkte fra mikrokontrolleren din. Dette er vanligvis prosentandelen av et spenningsfall for en sensor." @@ -232,6 +232,7 @@ "neste sensor: %s" "Legg til et nytt notat" "Notatet er slettet" + "Registreringen er slettet" "Angre" "Legg til et notat for denne registreringen" "Ta et notatbilde" @@ -430,7 +431,7 @@ "Velg et bilde" "Bildet ble tatt %s" "valgt" - "Rediger bildet med …" + "Rediger bildet med …" "Vis uttrekksmenyen for verktøy" "Utvid uttrekksmenyen for verktøy" "Skjul uttrekksmenyen for verktøy" @@ -438,7 +439,10 @@ "Legg til et tekstnotat" "Sanntidsvisning fra kameraet" "Kameraet kan ikke brukes fordi Science Journal ikke har tilgang til det." - "Bildebiblioteket ditt kan ikke brukes fordi Science Journal ikke har tilgang til det." - - + "Du kan ikke bruke bildegalleriet fordi du ikke har gitt Science Journal tilgang til det." + "Åpne innstillingene" + "Vis arkiverte eksperimenter" + "Skjul arkiverte eksperimenter" + "Skjul arkiverte registreringer" + "Øyeblikksbilde fra sensorer" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml index 7653487d..b990b5a8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml @@ -200,7 +200,7 @@ "Objecten hebben de neiging om op hun plek te blijven, of om te blijven bewegen als ze al in beweging zijn. Dit noemen we inertie. In de eerste wet van Newton wordt dit als volgt beschreven: een object blijft in zijn staat van beweging of rust, tenzij er een onevenwichtige kracht op wordt uitgeoefend. \n\nWanneer een onevenwichtige kracht een object verplaatst, zeggen we dat het object versnelt: de snelheid verandert, hetzij door sneller of langzamer te gaan, hetzij door een richtingsverandering. Versnelling wordt gemeten als verandering van snelheid (meter per seconde) in tijd, of in meter per seconde kwadraat (m/s²). \n\nIn uw telefoon zit een apparaatje waarmee u deze bewegingsveranderingen kunt meten: een accelerometer. Deze meter bevat kleine zwevende massa\'s die vrij bewegen. Bij een verandering in beweging verschuiven deze massa\'s, net zoals uw hoofd naar voren klapt als u in een auto zit die plotseling stopt. Door deze subtiele verschuivingen te meten, kan de accelerometer in uw telefoon veranderingen in beweging en richting waarnemen. Dat is handig bij het schakelen van de verticale naar de horizontale schermmodus, bij het spelen van games op uw telefoon en nog veel meer." "U heeft waarschijnlijk al opgemerkt dat er een constante versnelling op de Z-as is, zelfs als uw telefoon op tafel ligt. Deze versnelling is het gevolg van de zwaartekracht hier op het aardoppervlak en bedraagt ongeveer 9,8 m/s²." "Geluiden worden gemaakt door trillingen. Uw stem is bijvoorbeeld het resultaat van trillingen van de stembanden in uw keel. Deze trillingen maken gebiedjes met hoge en lage luchtdruk die naar buiten bewegen, net als de rimpelingen die ontstaan als u een steentje in een vijver gooit." - "Alle geluiden kunnen worden beschreven in termen van frequentie en intensiteit. \n\nIntensiteit is wat u hier met de Science-journal meet in decibellen (dB). Intensiteit of geluidssterkte, is afhankelijk van de afstand die een trillend object aflegt bij elke trilling; hoe hoger de intensiteit, hoe harder het geluid. \n\nDe frequentie (ook wel toonhoogte of toon genoemd) van een geluidsgolf is gelijk aan de trillingssnelheid. Hoe sneller een object trilt, hoe hoger de toonhoogte van het resulterende geluid. De Science-journal meet de frequentie niet, alleen de geluidssterkte. \n\nHet zachtste geluid dat het gemiddelde menselijke oor kan detecteren, is gedefinieerd als 0 dB. Een normaal gesprek komt overeen met ongeveer 60 dB en geluiden boven ongeveer 140 dB zijn pijnlijk voor het menselijk oor. Maar geluiden hoeven niet pijnlijk te zijn om ook schadelijk te zijn. Voortdurende blootstelling aan geluid van 90 dB - ongeveer de geluidssterkte van een stofzuiger - kan uiteindelijk leiden tot gehoorverlies. \n\nDe decibelschaal is logaritmisch, en dat maakt het lastig: een geluidsbron van 40 dB is niet twee keer zo intens als een geluidsbron van 20 dB - het is 100 keer intenser. Als één wekker 70 dB produceert, produceren twee wekkers niet 140 dB, maar 73 dB. We zeiden het al: het is een vreemde schaal. \n\n10 dB ritselende bladeren \n20 dB gefluister op 1,5 meter \n30 dB zacht gefluister \n50 dB regen\n60 dB normaal gesprek \n90 dB blender \n100 dB auto zonder uitlaat \n110 dB geschreeuw in oor \n120 dB donder \n130 dB drilboor \n140 dB opstijgend vliegtuig" + "Alle geluiden kunnen worden beschreven in termen van frequentie en intensiteit. \n\nIntensiteit is wat je hier meet met de Science Journal-app, met decibel (dB) als eenheid. De intensiteit (ook wel geluidssterkte genoemd) hangt af van de afstand die een trillend object bij elke trilling aflegt. Geluiden met een grotere intensiteit horen we luider. \n\nDe frequentie (ook wel toonhoogte genoemd) van een geluidsgolf is gelijk aan het trillingsniveau. Hoe sneller een object trilt, hoe hoger de toonhoogte van het geluid dat het object voortbrengt. De Science Journal-app meet alleen de geluidssterkte, niet de frequentie. \n\nHet is belangrijk om te weten dat de microfoon in je toestel zo is ontworpen dat hij heel gevoelig is voor verschillen in geluidsgolven in de loop van de tijd, maar niet voor de absolute grootte van afzonderlijke geluidsgolven. In de app hebben we code gebruikt die waarden oplevert die vergelijkbaar zijn met de onderstaande referentiewaarden, maar ieder apparaat kan structureel hogere of lagere waarden opleveren. Meestal kalibreren wetenschappers een sensor zoals deze op basis van een bekende meting. Op dit moment kan Science Journal je vertellen of het geluid van de trein waarin je zit luider is dan dat van het rockconcert dat je hebt bezocht, maar alleen als je beide geluiden met dezelfde telefoon opneemt. \n\nOok is het goed om te weten dat er een belangrijk verschil is tussen de geluidsintensiteit, het geluidsintensiteitsniveau en de geluidsdruk. We behandelen ze hier als één concept, maar als je je erin wilt verdiepen, kun je online veel informatie over de verschillen vinden. \n\n0 dB is het zachtste geluid dat het gemiddelde menselijke oor kan waarnemen. Een gewoon gesprek wordt met ongeveer 60 dB gevoerd en geluiden boven 140 dB doen pijn aan je oren. Maar ook geluiden die niet pijnlijk zijn, kunnen toch schadelijk zijn. Voortdurende blootstelling aan geluiden van 90 dB (ongeveer de geluidssterkte van een stofzuiger) kan uiteindelijk gehoorverlies veroorzaken. \n\nDe decibelschaal is logaritmisch en dat levert merkwaardige dingen op. Zo is een geluidsbron van 40 dB niet tweemaal zo intens als een geluidsbron van 20 dB: hij is 100 keer zo intens. Wanneer één wekker 70 dB produceert, produceren twee van deze rinkelende wekkers niet 140 dB, maar 73 dB. We zeiden het al: dit is een merkwaardige schaal. \n\n10 dB: ruisende bladeren \n20 dB: gefluister op 1,5 meter afstand \n30 dB: zacht gefluister in je oor \n50 dB: het geluid van regen \n60 dB: normaal gesprek \n90 dB: blender \n100 dB: auto zonder knaldemper \n110 dB: geschreeuw in je oor \n120 dB: donder \n130 dB: drilboor \n140 dB: opstijgend vliegtuig" "Rotaties per minuut (RPM) is een maateenheid voor de rotatiefrequentie om een ​​vaste as in één minuut. \n\nUw windmolentje laat de encoderschijf draaien:" "Dit zorgt voor lichte en donkere perioden op de sensor die in de Science-journal als rotatie worden geregistreerd." "De hier getoonde gegevens zijn afkomstig van een externe sensorcommunicatie met uw telefoon via Bluetooth. \n\nDe waarde geeft het percentage weer van de onbewerkte lezing van uw microcontroller. Dit is meestal het percentage van een spanningsdaling over een sensor." @@ -232,6 +232,7 @@ "volgende sensor: %s" "Voeg een nieuwe notitie toe" "Opmerking verwijderd" + "Opname verwijderd" "Ongedaan maken" "Notitie toevoegen aan deze opname" "Fotonotitie maken" @@ -430,7 +431,7 @@ "Afbeelding kiezen" "Afbeelding gemaakt op %s" "geselecteerd" - "Foto bewerken met..." + "Foto bewerken met…" "Toolmenu weergeven" "Toolmenu uitvouwen" "Toolmenu samenvouwen" @@ -438,7 +439,10 @@ "Tekstnotitie toevoegen" "Live cameraweergave" "Je kunt de camera niet gebruiken omdat Science Journal hier geen toegang toe heeft." - "Je kunt je fotobibliotheek niet gebruiken omdat Science Journal hier geen toegang toe heeft." - - + "Je kunt je fotogalerij niet gebruiken omdat Science Journal hier geen toegang toe heeft." + "Instellingen openen" + "Gearchiveerde experimenten weergeven" + "Gearchiveerde experimenten verbergen" + "Archiefopnamen verbergen" + "Momentopname van sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml index b120df60..fcdf0006 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml @@ -200,7 +200,7 @@ "Obiekty mają tendencję do pozostawania w spoczynku lub w ruchu (jeśli się poruszają) – co określa się mianem bezwładności. Pierwsza zasada dynamiki Newtona wyraża tę myśl w sposób ścisły: obiekt, na który nie działają żadne niezrównoważone siły, pozostaje w spoczynku lub porusza się ruchem jednostajnym prostoliniowym. \n\nGdy na obiekt zadziała niezrównoważona siła, mówimy, że obiekt przyspiesza, czyli jego prędkość zmienia wartość (zwiększa się lub zmniejsza) albo kierunek. Przyspieszenie mierzy się jako zmianę prędkości (w metrach na sekundę) w czasie, czyli w metrach na sekundę do kwadratu (m/s²). \n\nTelefon jest wyposażony w urządzenie do pomiaru tych zmian ruchu – akcelerometr. W akcelerometrze zawieszone są niewielkie ciężarki, które mogą się swobodnie poruszać. Zmiany w ruchu powodują przesunięcie tych ciężarków, podobnie jak głowa osoby jadącej samochodem opada do przodu podczas gwałtownego hamowania. Mierząc te nieznaczne przesunięcia spowodowane bezwładnością, akcelerometr w telefonie może wykryć zmiany w ruchu i zmiany kierunku. Przydaje się to między innymi przy zmianie orientacji ekranu z poziomej na pionową oraz w grach." "Wyraźnie widać stałe przyspieszenie w osi Z, mimo że telefon leży nieruchomo na stole. Jest to przyspieszenie, którego doświadczamy na powierzchni Ziemi z powodu grawitacji. Ma ono wartość około 9,8 m/s²." "Dźwięki są generowane przez drgania. Na przykład Twój głos wydobywa się z drgających w gardle strun głosowych. Drgania wytwarzają naprzemiennie strefy wysokiego i niskiego ciśnienia powietrza, które przemieszczają się na zewnątrz – podobnie jak kręgi rozchodzące się po wodzie po wrzuceniu kamyka do stawu." - "Każdy dźwięk można opisać za pomocą częstotliwości i natężenia. \n\nNatężenie jest wielkością mierzoną tutaj za pomocą Science Journal w jednostkach nazywanych decybelami (dB). Natężenie, czyli głośność, zależy od odległości, jaką pokonuje drgający obiekt; większe natężenie odczuwamy jako większą głośność. \n\nCzęstotliwość fali dźwiękowej (nazywana również wysokością dźwięku lub tonem) odpowiada szybkości drgań. Im szybciej drga obiekt, tym większa jest wysokość powstającego dźwięku. Science Journal nie mierzy częstotliwości, a jedynie głośność. \n\nNajcichszy dźwięk, jaki może wykryć ucho przeciętnego człowieka, ma głośność zdefiniowaną jako 0 dB. Zwykła rozmowa ma głośność około 60 dB, a dźwięki powyżej około 140 dB są bolesne dla ludzkiego ucha. Jednak dźwięki nie muszą być bolesne, aby szkodzić. Stałe narażenie na hałas o głośności 90 dB – w przybliżeniu dźwięk odkurzacza – może doprowadzić do utraty słuchu. \n\nSkala decybeli jest logarytmiczna, co sprawia pewną trudność: źródło dźwięku 40 dB nie jest dwa razy głośniejsze od źródła 20 dB – jest 100 razy bardziej intensywne. Z drugiej strony, jeśli jeden budzik generuje dźwięk o głośności 70 dB, dwa budziki generują nie 140 dB, a 73 dB. Jak już wspomnieliśmy, jest to osobliwa skala. \n\n10 dB – szelest liści \n20 dB – szept z odległości 1,5 m \n30 dB – cichy szept \n50 dB – deszcz \n60 dB – normalna rozmowa \n90 dB – blender kuchenny \n100 dB – samochód bez tłumika \n110 dB – krzyk do ucha \n120 dB – piorun \n130 dB – młot pneumatyczny \n140 dB – startujący samolot" + "Każdy dźwięk można opisać za pomocą częstotliwości i natężenia.\n\nNatężenie jest wielkością mierzoną tutaj za pomocą Science Journal w jednostkach nazywanych decybelami (dB). Natężenie, czyli głośność, zależy od odległości, jaką pokonuje drgający obiekt; większe natężenie odczuwamy jako większą głośność.\n\nCzęstotliwość fali dźwiękowej (nazywana również wysokością dźwięku lub tonem) odpowiada szybkości drgań. Im szybciej drga obiekt, tym większa jest wysokość powstającego dźwięku. Science Journal nie mierzy częstotliwości, a jedynie głośność.\n\nMusisz pamiętać, że mikrofon w Twoim urządzeniu jest bardzo wyczulony na różnice w falach dźwiękowych na przestrzeni czasu, ale nie na wielkość bezwzględną każdej fali. Staraliśmy się dobrać kod, który byłby w stanie wygenerować wartości podobne do wartości referencyjnych pokazanych poniżej, ale każde urządzenie może konsekwentnie generować wyższe lub niższe wartości. Zazwyczaj naukowcy kalibrują czujniki tego typu do znanego pomiaru. Na razie Science Journal jest w stanie określić, czy pociąg, którym podróżujesz, jest głośniejszy od koncertu, na który się wybierzesz, ale tylko pod warunkiem, że w obu przypadkach będziesz korzystać z tego samego telefonu.\n\nWarto też wiedzieć, że występują istotne różnice między „natężeniem dźwięku”, „poziomem natężenia dźwięku” a „ciśnieniem akustycznym”. Tutaj traktujemy je tak samo, ale jeżeli interesuje Cię ten temat, znajdziesz wiele materiałów online, które opisują te różnice. \n\nNajcichszy dźwięk, jaki może wykryć ucho przeciętnego człowieka, ma głośność zdefiniowaną jako 0 dB. Zwykła rozmowa ma głośność około 60 dB, a dźwięki powyżej około 140 dB są bolesne dla ludzkiego ucha. Jednak dźwięki nie muszą być bolesne, aby szkodzić. Stałe narażenie na hałas o głośności 90 dB – w przybliżeniu dźwięk odkurzacza – może doprowadzić do utraty słuchu.\n\nSkala decybeli jest logarytmiczna, co sprawia pewną trudność: źródło dźwięku 40 dB nie jest dwa razy głośniejsze od źródła 20 dB – jest 100 razy bardziej intensywne. Z drugiej strony, jeśli jeden budzik generuje dźwięk o głośności 70 dB, dwa budziki generują nie 140 dB, a 73 dB. Jak już wspomnieliśmy, jest to osobliwa skala.\n\n10 dB – szelest liści\n20 dB – szept z odległości 1,5 metra\n30 dB – cichy szept\n50 dB – deszcz\n60 dB – normalna rozmowa\n90 dB – blender kuchenny\n100 dB – samochód bez tłumika\n110 dB – krzyk do ucha\n120 dB – grzmot pioruna\n130 dB – młot pneumatyczny\n140 dB – startujący samolot" "Obroty na minutę (obr./min) są miarą prędkości obrotowej wokół stałej osi. \n\nŁopatki wiatromierza obracają tarczę enkodera:" "W rezultacie czujnik wykrywa okresy oświetlenia i zaciemnienia, które są rejestrowane w Science Journal jako obrót." "Dane wyświetlane tutaj pochodzą z czujnika zewnętrznego komunikującego się z telefonem za pośrednictwem technologii Bluetooth. \n\nPokazywana jest wartość procentowa nieprzetworzonego bezpośredniego odczytu z mikrokontrolera. Jest to zazwyczaj procentowy spadek napięcia na czujniku." @@ -232,6 +232,7 @@ "Następny czujnik: %s" "Dodaj nową notatkę" "Notatka usunięta" + "Usunięto zarejestrowane dane" "Cofnij" "Dodaj notatkę do zarejestrowanych danych" "Zrób notatkę w formie obrazu" @@ -264,7 +265,7 @@ "Więcej informacji" "Science Journal" "Eksperymentuj w swoim świecie." - "Nowe funkcje i ulepszenia: \n• nowy interfejs do robienia notatek i dokumentowania doświadczeń; \n• nowa funkcja migawki do rejestrowania pojedynczych punktów danych; \n• nowe czujniki: akcelerometr liniowy, magnetometr i kompas; \n• nowy wygląd galerii pozwalającej na przeglądanie doświadczeń; \n• teraz również na urządzenia z iOS." + "Nowe funkcje i ulepszenia: \n• nowy interfejs do robienia notatek i dokumentowania doświadczeń; \n• nowa funkcja zrzutu do rejestrowania pojedynczych punktów danych; \n• nowe czujniki: akcelerometr liniowy, magnetometr i kompas; \n• nowy wygląd galerii pozwalającej na przeglądanie doświadczeń; \n• teraz również na urządzenia z iOS." "Science Journal to bezpłatny cyfrowy notatnik naukowy stworzony przez Google. \n \nNiezależnie od tego, czy zajmujesz się nauczaniem, czy też nauka to Twoja pasja, którą realizujesz w domu, możesz gromadzić wszystkie notatki, zdjęcia i obserwacje w jednym miejscu. Korzystaj z czujników, w które jest wyposażony Twój telefon, aby mierzyć i dokumentować takie zjawiska jak światło, dźwięk i ruch. Możesz też podłączać czujniki zewnętrzne przez Bluetooth, by eksperymentować w otaczającym Cię świecie. \n \nAplikacja Science Journal pozwala: \n• mierzyć światło, dźwięk, przyspieszenie, ciśnienie powietrza i inne wskaźniki za pomocą czujników w telefonie; \n• robić notatki i zdjęcia, aby dokumentować doświadczenia – wkrótce udostępnimy nowe typy notatek; \n• podłączać czujniki zewnętrzne za pomocą urządzeń Arduino i Vernier z Bluetoothem; \n• eksportować zarejestrowane przez czujniki dane do plików CSV; \n• tworzyć automatyczne wyzwalacze do rejestrowania danych i robienia notatek; \n• wykorzystywać udźwiękowienie, aby słyszeć zmiany na wykresach. \n \nAplikacja Science Journal jest dostępna bezpłatnie na urządzeniach z Androidem, iPhone\'ach, iPadach i zgodnych Chromebookach. \n \nĆwiczenia przygotowane przez naszych partnerów: https://makingscience.withgoogle.com/science-journal/activities \nPomoc: https://productforums.google.com/forum/#!forum/sciencejournal \nKod open source: https://github.com/google/science-journal \n\n Powiadomienie o uprawnieniach: \n• Lokalizacja: potrzebna do skanowania w poszukiwaniu urządzeń z czujnikami komunikujących się przez Bluetooth. \n• Aparat: potrzebny, aby robić zdjęcia podczas doświadczeń. \n• Mikrofon: potrzebny, aby korzystać z czujnika natężenia dźwięku. \n• Pamięć: potrzebna, by mieć dostęp do zdjęć, które mają zostać umieszczone w opisach doświadczeń." "Wyszukaj czujniki innych firm" "Znajdź aplikacje, które obsługują interfejs API czujnika innej firmy, i włącz możliwość dodawania ich do doświadczeń." @@ -430,7 +431,7 @@ "Wybierz zdjęcie" "Zdjęcie zrobione %s" "wybrano" - "Edytuj zdjęcie za pomocą…" + "Edytuj zdjęcie za pomocą…" "Pokaż panel z narzędziami" "Rozwiń panel z narzędziami" "Zwiń panel z narzędziami" @@ -438,7 +439,10 @@ "Dodaj notatkę tekstową" "Widok na żywo z aparatu" "Nie można użyć aparatu, bo aplikacja Science Journal nie ma uprawnień dostępu." - "Nie można użyć biblioteki zdjęć, bo aplikacja Science Journal nie ma uprawnień dostępu." - - + "Nie można użyć galerii zdjęć, ponieważ Science Journal nie ma uprawnień dostępu do niej." + "Otwórz ustawienia" + "Pokaż zarchiwizowane doświadczenia" + "Ukryj zarchiwizowane doświadczenia" + "Ukryj zarchiwizowane zarejestrowane dane" + "Zrzut czujnika" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml index eb92a2c0..11c97984 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml @@ -200,7 +200,7 @@ "Os objetos têm uma tendência para permanecer parados, ou para permanecer em movimento se estiverem em movimento. Chamamos a isto inércia. A Primeira Lei de Newton expressa esta ideia formalmente: um objeto permanece no respetivo estado de movimento ou repouso, exceto quando uma força não nula é exercida sobre ele. \n\nQuando uma força não nula causa o movimento de um objeto, dizemos que este acelera; a respetiva velocidade muda, seja por aceleração ou desaceleração. A aceleração é medida como uma alteração da velocidade (metros por segundo) no tempo, ou metros por segundo ao quadrado (m/s²). \n\nO seu telemóvel tem um dispositivo para medir estas alterações de movimento; um acelerómetro. No interior do acelerómetro, existem pequenas massas suspensas que se podem mover livremente. As alterações de movimento causam a deslocação destas massas, tal como quando inclina a sua cabeça para a frente porque está num carro que para repentinamente. Ao medir estas subtis deslocações inerciais, um acelerómetro num telemóvel pode detetar alterações de movimento e de orientação, o que é útil para mudar o ecrã do modo de paisagem para o modo de retrato, para jogar jogos e muito mais." "Reparou provavelmente numa aceleração persistente no eixo Z, mesmo com o telefone em repouso em cima da mesa. Esta é a aceleração que sentimos na superfície da terra devido à gravidade, e que é de aproximadamente 9,8 m/s²." "Os sons são gerados por vibração. A voz, por exemplo, provém de vibrações das cordas vocais da garganta. Estas vibrações criam zonas alternadas de pressão de ar elevada e reduzida que se deslocam para o exterior, tal como acontece com a onda circular gerada pelo lançamento de uma pedra à água." - "É possível descrever todos os sons em termos da respetiva frequência e intensidade. \n\nA intensidade é o que mede com o Science Journal em unidades de decibéis (dB). A intensidade, ou a sonoridade, depende da distância que um objeto em vibração percorre cada vez que vibra. Sentimos uma intensidade superior como um aumento da sonoridade. \n\nA frequência (também designada por \"tom\") de uma onda sonora é equivalente à respetiva taxa de vibração. Quanto mais rápido um objeto vibra, mais alto é o tom do som resultante. O Science Journal não mede a frequência, apenas a sonoridade. \n\nO som mais reduzido que o ouvido humano comum pode detetar é 0 dB. Uma conversa normal corresponde a 60 dB e sons acima de 140 dB são dolorosos para o ouvido humano. Mas os sons não precisam de ser dolorosos para lesionar. A exposição contínua a sons de 90 dB, sensivelmente a sonoridade de um aspirador, podem gerar eventualmente a perda de audição. \n\nA escala de decibéis é logarítimica, o que complica a situação: uma fonte sonora de 40 dB não é duas vezes mais intensa que uma de 20 dB, é 100 vezes mais intensa. No entanto, se um alarme de despertador produz 70 dB, dois alarmes de despertador não produzem 140 dB, mas 73 dB. Como referido, é uma escala estranha. \n\n10 dB o farfalhar de folhas \n20 dB o sussurro a 1,5 m \n30 dB o sussurro suave \n50 dB o som da chuva \n60 dB uma conversa normal \n90 dB a batedeira \n100 dB um carro sem silenciador \n110 dB gritar ao ouvido \n120 dB trovões \n130 dB uma britadeira \n140 dB um avião a descolar." + "É possível descrever todos os sons em termos da respetiva frequência e intensidade. \n\nA intensidade é o que mede com o Science Journal, em unidades de decibéis (dB). A intensidade, ou a sonoridade, depende da distância que um objeto em vibração percorre cada vez que vibra. Sentimos uma intensidade superior como um aumento da sonoridade. \n\nA *frequência* (também designada por \"tom\") de uma onda sonora é equivalente à respetiva taxa de vibração. Quanto mais rápido um objeto vibra, mais alto é o tom do som resultante. O Science Journal não mede a frequência, apenas a sonoridade. \n\nUm aspeto importante que deve saber é que o microfone do seu dispositivo foi concebido para ser muito sensível às diferenças nas ondas sonoras ao longo do tempo, mas não ao tamanho absoluto de cada onda. Tentámos escolher código com probabilidade de produzir números semelhantes aos números de referência apresentados abaixo, mas cada dispositivo pode apresentar de forma consistente números mais elevados ou mais baixos. Normalmente, os cientistas calibram sensores como este para uma medida conhecida. Por agora, o Science Journal pode dizer-lhe se a sua próxima viagem de comboio é mais sonora do que o seu próximo concerto de rock, mas apenas se levar o mesmo telemóvel a ambos os eventos. \n\nOutro aspeto a ter em conta são as importantes diferenças entre \"intensidade do som\", \"nível de intensidade do som\" e \"pressão do som\". Aqui, tratamo-los como a mesma coisa, mas se quiser ir mais longe, existem vários recursos online acerca das diferenças. \n\nO som mais baixo que o ouvido humano consegue detetar é definido como 0 dB. O som de uma conversa normal corresponde a 60 dB e os sons acima de 140 dB são dolorosos para o ouvido humano. No entanto, os sons não precisam de ser dolorosos para serem nocivos. A exposição contínua a sons de 90 dB (aproximadamente a sonoridade de um aspirador), pode acabar por provocar a perda de audição. \n\nA escala de decibéis é logarítmica, o que complica a situação: uma fonte sonora de 40 dB não é duas vezes mais intensa do que uma de 20 dB, é 100 vezes mais intensa. No entanto, se um alarme de despertador produz 70 dB, dois alarmes de despertador não produzem 140 dB, mas sim 73 dB. Como referimos, é uma escala estranha. \n\n10 dB o murmúrio das folhas \n20 dB um sussurro a 1,5 metros \n30 dB um sussurro suave \n50 dB o som da chuva \n60 dB uma conversa normal \n90 dB uma batedeira \n100 dB um carro sem silenciador \n110 dB gritar ao ouvido \n120 dB trovões \n130 dB uma britadeira \n140 dB um avião a descolar" "Rotações por minuto (RPM) é uma medida de frequência de rotação em torno de um eixo fixo num minuto. \n\nÀ medida que o cata-vento gira, roda o disco codificador:" "Isto cria períodos de luz e ausência de luz no sensor que são registados no Science Journal como uma rotação." "Os dados apresentados aqui provêm de uma comunicação entre o sensor externo e o seu telemóvel através de Bluetooth. \n\nEste valor mostra a percentagem de leitura por processar diretamente a partir do seu microcontrolador. Corresponde habitualmente à percentagem de uma queda de tensão num sensor." @@ -232,6 +232,7 @@ "sensor seguinte: %s" "Adicionar uma nova nota" "Nota eliminada" + "Registo eliminado" "Anular" "Adicionar nota a este registo" "Capturar nota fotográfica" @@ -430,7 +431,7 @@ "Selecionar imagem" "Imagem captada a %s" "selecionado" - "Editar foto com..." + "Editar foto com…" "Mostrar gaveta de ferramentas" "Expandir gaveta de ferramentas" "Reduzir gaveta de ferramentas" @@ -438,7 +439,10 @@ "Adicionar nota de texto" "Vista em direto da câmara" "Não é possível utilizar a câmara porque o Science Journal não tem autorização para lhe aceder." - "Não é possível utilizar a biblioteca de fotos porque o Science Journal não tem autorização para lhe aceder." - - + "Não pode utilizar a sua galeria de fotos porque o Science Journal não tem autorização de acesso." + "Abrir definições" + "Mostrar experiências arquivadas" + "Ocultar experiências arquivadas" + "Ocultar registos arquivados" + "Instantâneo do sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml index f2c5dbf4..48fa70be 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml @@ -200,7 +200,7 @@ "Os objetos têm a tendência de permanecerem inertes ou de continuarem a se mover se já estiverem em movimento. Isso é chamado de inércia. A Primeira Lei de Newton expressa essa ideia formalmente: um objeto continua no estado de repouso ou de movimento a menos que seja forçado a mudar de estado por forças aplicadas a ele. \n\nQuando uma força causa o movimento de um objeto, dizemos que o objeto acelera: a velocidade dele muda ao aumentar, diminuir ou mudar de direção. A aceleração é medida como uma mudança na velocidade (metros por segundo) durante um período ou metros por segundo ao quadrado (m/s²). \n\nExiste em seu smartphone um dispositivo para medir essas alterações de movimento: um acelerômetro. Dentro de um acelerômetro, pequenas massas suspensas se movem. Mudanças no movimento causam uma variação nessas massas, da mesma forma que sua cabeça se move quando você está dentro de um carro que freia inesperadamente. Por medir essas variações sutis de inércia, um acelerômetro em um smartphone pode detectar alterações no movimento e na orientação, o que é útil para alternar entre os modos retrato e paisagem da tela, para jogar em seu smartphone e muito mais." "Você provavelmente notou uma aceleração permanente no eixo Z, mesmo com o smartphone parado sobre uma mesa. Essa é a aceleração que nós sentimos aqui na superfície da Terra por causa da tração da gravidade, que é de aproximadamente 9,8 m/s²." "Sons são gerados por vibrações. Sua voz, por exemplo, vem de vibrações nas suas cordas vocais. Essas vibrações criam zonas de variação de pressão alta e baixa do ar que é expelido, da mesma forma que ocorre com as ondas circulares geradas quando uma pedra é jogada em um lago." - "Todos os sons podem ser descritos em termos de frequência e intensidade. \n\nIntensidade é o que se mede aqui com o Science Journal, em unidades de decibéis (dB). A intensidade (ou ruído) depende da distância percorrida por um objeto sonoro cada vez que ele vibra. Ouvimos maior intensidade como um ruído mais alto. \n\nA frequência de uma onda sonora é equivalente à taxa de vibração dela. Quanto maior a velocidade de vibração de um objeto, maior é a frequência do som resultante. O Science Journal não mede a frequência, mas o ruído. \n\nO menor volume que o ouvido humano pode detectar é definido como 0 dB. Uma conversa normal corresponde a cerca de 60 dB, e sons acima de 140 dB causam dor ao ouvido humano. Porém, os sons não precisam causar dor para serem danosos. A exposição contínua a sons de 90 dB (que é o ruído de um aspirador de pó) pode levar à perda de audição. \n\nA escala de decibéis é logarítmica, o que traz certa dificuldade: uma origem de som de 40 dB não tem o dobro de intensidade de uma com 20 dB; ela é 100 vezes mais intensa. Entretanto, se um despertador produz 70 dB, dois despertadores não produzem 140 dB, mas 73 dB. Como dissemos, é uma escala peculiar. \n\nFolhas ao vento - 10 dB\nSussurrar a 1,5 m de distância - 20 dB \nSussurros suaves - 30 dB \nChuva - 50 dB \nConversa normal - 60 dB \nLiquidificador - 90 dB \nCarro sem silencioso - 100 dB \nGritos no ouvido - 110 dB \nTrovão - 120 dB \nBritadeira - 130 dB \nAvião decolando - 140 dB" + "Todos os sons podem ser descritos em termos de frequência e intensidade. \n\nA intensidade é o que se mede aqui, com o Science Journal, em unidades de decibéis (dB). A intensidade (ou volume) depende da distância percorrida por um objeto sonoro cada vez que ele vibra. Ouvimos maior intensidade como um volume mais alto. \n\nA frequência de uma onda sonora é equivalente à taxa de vibração dela. Quanto maior a velocidade de vibração de um objeto, maior é a frequência do som resultante. O Science Journal não mede a frequência, somente o volume. \n\nO microfone do seu dispositivo foi projetado para ter grande sensibilidade às variações nas ondas sonoras no decorrer do tempo, mas não ao tamanho absoluto de cada onda. Tentamos escolher códigos com maior probabilidade de gerar valores parecidos com os números de referência exibidos abaixo, mas cada dispositivo pode gerar números consistentemente mais altos ou mais baixos. Geralmente, os cientistas calibram sensores como esse usando medições conhecidas. Por enquanto, o Science Journal consegue informar se o último trem que você pegou era mais barulhento do que o último show de rock ao qual você foi, mas apenas se você tiver levado seu smartphone para esses dois lugares. \n\nVocê também precisa saber que há diferenças importantes entre a intensidade do som, o nível de intensidade do som e a pressão do som. Aqui, tratamos essas medidas como se fossem a mesma coisa, mas, se você quiser se aprofundar no assunto, há muitos recursos na Internet que mostram as diferenças entre elas. \n\nO volume mais baixo que o ouvido humano pode detectar é representado como 0 dB. Uma conversa normal corresponde a cerca de 60 dB, e sons acima de 140 dB causam dor ao ouvido humano. Porém, os sons não precisam causar dor para serem danosos. A exposição contínua a sons de 90 dB (que é o volume de um aspirador de pó) pode levar à perda de audição. \n\nA escala de decibéis é logarítmica e por isso pode ser um pouco difícil de entender: uma fonte sonora de 40 dB não tem o dobro da intensidade de uma com 20 dB; ela é 100 vezes mais intensa. Da mesma forma, se um despertador emite 70 dB, dois despertadores não emitem 140 dB, mas 73 dB. Como dissemos, é uma escala peculiar. \n\nFolhas ao vento - 10 dB \nSussurros a 1,5 m de distância - 20 dB \nSussurros suaves - 30 dB \nChuva - 50 dB \nConversa normal - 60 dB \nLiquidificador - 90 dB \nCarro sem silenciador - 100 dB \nGritos no ouvido - 110 dB \nTrovão - 120 dB \nBritadeira - 130 dB \nAvião decolando - 140 dB" "As rotações por minuto (RPM) são uma medida da frequência de rotação ao redor de um eixo fixo durante um minuto. \n\nConforme o rotor gira, ele faz o disco do codificador girar:" "Isso cria períodos de luz e de sombra no sensor que aparecem no Science Journal como uma rotação." "Os dados exibidos aqui vêm da comunicação de um sensor externo com seu smartphone pelo Bluetooth. \n\nO valor mostra a porcentagem de leitura bruta diretamente de seu microcontrolador. Em geral, essa é a porcentagem de uma queda de tensão elétrica em um sensor." @@ -232,6 +232,7 @@ "próximo sensor: %s" "Adicionar uma nova observação" "Observação excluída" + "Gravação excluída" "Desfazer" "Adicionar observação a esta gravação" "Tirar foto da observação" @@ -430,7 +431,7 @@ "Escolher uma imagem" "Foto tirada em %s" "selecionada" - "Editar foto com..." + "Editar foto com…" "Mostrar gaveta de ferramentas" "Expandir gaveta de ferramentas" "Recolher gaveta de ferramentas" @@ -438,7 +439,10 @@ "Adicionar observação" "Visualização pela câmera ao vivo" "Não é possível usar a câmera porque o Science Journal não tem permissão para acessá-la." - "Não é possível usar sua biblioteca de fotos porque o Science Journal não tem permissão para acessá-la." - - + "Não é possível usar a galeria de fotos porque o Science Journal não tem permissão para acessá-la." + "Abrir configurações" + "Mostrar experimentos arquivados" + "Ocultar experimentos arquivados" + "Ocultar gravações arquivadas" + "Instantâneo do sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml index 84be8edc..46253878 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml @@ -200,7 +200,7 @@ "Obiectele tind să rămână pe loc sau, dacă sunt în mișcare, să se miște în continuare. Această tendință se numește inerție. Principiul I al mecanicii al lui Newton exprimă formal această idee: Un corp își menține starea de repaus sau de mișcare rectilinie uniformă atât timp cât asupra sa nu acționează alte forțe sau suma forțelor care acționează asupra sa este nulă. \n\nAtunci când o forță neechilibrată determină mișcarea unui obiect, spunem că obiectul accelerează: viteza acestuia se schimbă (scade, crește sau obiectul își schimbă direcția). Accelerația este măsurată ca o schimbare a vitezei (metri pe secundă) în timp sau metri pe secundă la pătrat (m/s²). \n\nTelefonul dvs. are un dispozitiv care măsoară aceste schimbări de mișcare, un accelerometru. În interiorul unui accelerometru există mase suspendate mici, în mișcare liberă. Schimbarea mișcării duce la deplasarea maselor, așa cum capul dvs. tinde să se încline în față când vă aflați într-o mașină care se oprește brusc. Prin măsurarea acestor deplasări subtile, un accelerometru dintr-un telefon poate să detecteze schimbări de mișcare și orientare, lucru util pentru comutarea ecranului din modul peisaj în modul portret, pentru jocuri video și altele." "Ați observat probabil o accelerație persistentă pe axa Z, chiar și cu telefonul așezat nemișcat pe masă. Aceasta este accelerația la care suntem supuși aici, pe suprafața Pământului, din cauza atracției gravitaționale de aproximativ 9,8 m/s²." "Sunetele sunt generate prin vibrații. De exemplu, vocea dvs. apare ca urmare a vibrațiilor corzilor vocale. Aceste vibrații creează zone alternante cu presiune ridicată și scăzută a aerului care se deplasează spre exterior, la fel ca undele circulare în expansiune generate prin aruncarea unei pietre într-un iaz." - "Toate sunetele pot fi descrise din punct de vedere al frecvenței și al intensității. \n\nIntensitatea este cea măsurată cu aplicația Science Journal, în decibeli (dB). Intensitatea sau volumul depind de distanța parcursă de un obiect care vibrează, de fiecare dată când vibrează. O intensitate mai mare este percepută ca un volum mai ridicat. \n\nFrecvența (înălțimea sau tonalitatea) unei unde sonore este echivalentă cu ritmul vibrației. Cu cât un obiect vibrează mai rapid, cu atât înălțimea sunetului rezultat va fi mai mare. Aplicația Science Journal nu măsoară frecvența, doar intensitatea. \n\nCel mai încet sunet pe care îl poate detecta urechea umană este definit ca fiind de 0 dB. O conversație obișnuită corespunde cu aproximativ 60 dB, iar sunetele de peste 140 dB sunt dureroase pentru urechea umană. Dar sunetele nu trebuie să fie dureroase pentru a fi nocive. Expunerea continuă la sunete de 90 dB, aproximativ volumul unui aspirator, poate duce într-un final la pierderea auzului. \n\nScara decibelilor este logaritmică, ceea ce complică lucrurile, de exemplu, o sursă sonoră de 40 dB nu este de două ori mai intensă decât una de 20 dB, este de 100 de ori mai intensă. În schimb, dacă alarma unui ceas produce 70 dB, două alarme de ceas nu produc 140 dB, ci 73 dB. După cum spuneam, este o scară ciudată. \n\n10 dB foșnitul frunzelor \n20 dB vorbitul încet de la 1,5 m \n30 dB vorbitul în șoaptă \n50 dB ploaia \n60 dB conversația normală \n90 dB blenderul \n100 dB mașina fără tobă \n110 dB țipatul în ureche \n120 dB tunetul \n130 dB pichamerul \n140 dB avionul la decolare" + "Toate sunetele pot fi descrise din punct de vedere al frecvenței și al intensității. \n\nIntensitatea este cea măsurată cu aplicația Science Journal, în decibeli (dB). Intensitatea sau volumul depinde de distanța parcursă de un obiect care vibrează, de fiecare dată când vibrează. O intensitate mai mare este percepută ca un volum mai ridicat. \n\nFrecvența (înălțimea sau tonalitatea) unei unde sonore este echivalentă cu ritmul vibrației. Cu cât un obiect vibrează mai rapid, cu atât înălțimea sunetului rezultat va fi mai mare. Aplicația Science Journal nu măsoară frecvența, doar intensitatea. \n\nUn aspect important de reținut este faptul că microfonul din dispozitiv dvs. este conceput pentru a fi foarte sensibil la diferențele în timp ale undelor sonore, dar nu și la volumul absolut al fiecărei unde. Am încercat să alegem un cod cu șanse mari să producă valori similare cu valorile de referință de mai jos, dar fiecare dispozitiv poate arăta constant valori mai mari sau mai mici. De obicei, cercetătorii vor calibra un senzor precum acesta folosind o măsurătoare cunoscută. Momentan, Science Journal vă poate spune dacă o călătorie cu trenul este mai zgomotoasă decât un concert, dar doar dacă folosiți același telefon pentru ambele evenimente. \n\nAlt aspect de reținut este faptul că există diferențe importante între „intensitatea sunetului”, „nivelul de intensitate a sunetului” și „presiunea sunetului”. În aplicație, le tratăm ca fiind identice, dar dacă doriți să aflați mai multe, există numeroase resurse online despre diferențe. \n\nCel mai încet sunet pe care îl poate detecta urechea umană este definit ca fiind de 0 dB. O conversație obișnuită corespunde cu aproximativ 60 dB, iar sunetele de peste 140 dB sunt dureroase pentru urechea umană. Dar sunetele nu trebuie să fie dureroase pentru a fi nocive. Expunerea continuă la sunete de 90 dB, aproximativ volumul unui aspirator, poate duce într-un final la pierderea auzului. \n\nScara decibelilor este logaritmică, ceea ce complică lucrurile. De exemplu, o sursă sonoră de 40 dB nu este de două ori mai intensă decât una de 20 dB, este de 100 de ori mai intensă. În schimb, dacă alarma unui ceas produce 70 dB, două alarme de ceas nu produc 140 dB, ci 73 dB. După cum spuneam, este o scară ciudată. \n\n10 dB foșnitul frunzelor \n20 dB șoptitul la 1,5 m \n30 dB șoptitul \n50 dB ploaia \n60 dB conversația obișnuită \n90 dB blenderul \n100 dB mașina fără tobă \n110 dB țipătul în ureche \n120 dB tunetul \n130 dB pichamerul \n140 dB avionul la decolare" "Rotații pe minut (rpm) este o măsură a frecvenței de rotație în jurul unei axe fixe, într-un minut. \n\nPe măsură ce se rotește, elicea rotește și discul de codificare:" "Acest lucru creează perioade de lumină și întuneric pe senzor, care sunt înregistrate de aplicația Science Journal ca o rotație." "Datele afișate aici provin de la comunicarea prin Bluetooth dintre un senzor extern și telefonul dvs. \n\nValoarea indică procentul citirii brute direct de pe microcontroler. Acesta este în general procentul unei căderi de tensiune în senzor." @@ -232,6 +232,7 @@ "senzorul următor: %s" "Adăugați o notă nouă" "Nota a fost ștearsă" + "Înregistrarea a fost ștearsă." "Anulați" "Adăugați o notă la înregistrare" "Adăugați o notă foto" @@ -430,7 +431,7 @@ "Alegeți o fotografie" "Imagine fotografiată pe %s" "selectat" - "Editați fotografia cu..." + "Modificați fotografia cu…" "Afișați panoul de instrumente" "Extindeți panoul de instrumente" "Restrângeți panoul de instrumente" @@ -438,7 +439,10 @@ "Adăugați o notă text" "Vedere live a camerei" "Camera nu poate fi folosită deoarece Science Journal nu are permisiunea să o acceseze." - "Galeria foto nu poate fi folosită deoarece Science Journal nu are permisiunea să o acceseze." - - + "Galeria foto nu poate fi folosită deoarece Science Journal nu are permisiunea să o acceseze." + "Deschideți Setările" + "Afișați experimentele arhivate" + "Ascundeți experimentele arhivate" + "Ascundeți înregistrările arhivate" + "Instantaneu de la senzor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml index 87057c37..d2c3169b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml @@ -88,7 +88,7 @@ "%1$s, %2$s %3$s." "Снимок тестирования" "Предварительный просмотр снимка тестирования" - "Эксперименты" + "Деятельность" "Настройки" "Параметры тестирования" "Научный журнал – %s" @@ -200,7 +200,7 @@ "Как известно из первого закона Ньютона, объекты находятся в состоянии покоя или равномерного движения, если на них не действует сила других тел. Это свойство называется инерцией. \n\nЕсли же на объект действует другое тело, скорость его движения меняется. Величиной, которая характеризует быстроту изменения скорости, является ускорение. Оно измеряется в м/с или в м/с². \n\nВ современных смартфонах есть датчик, который отслеживает эти изменения. Он называется акселерометр. Внутри акселерометра есть подвижный груз, который перемещается при изменении положения телефона. Данные, которые акселерометр получает в результате этих передвижений, используются, например, для смены ориентации экрана." "Возможно, вы заметили постоянное ускорение по оси Z, даже если телефон просто лежит на столе. Это ускорение силы тяжести, равное примерно 9,8 м/с²." "Любой звук образуется в результате колебаний, например голос – из-за колебаний голосовых связок. Благодаря колебаниям возникают чередующиеся области высокого и низкого давления воздуха. Это можно сравнить с тем, как расходятся круги от брошенного в воду камня." - "Каждый звук обладает такими свойствами, как сила и частота. \n\nСила звука, или его громкость, измеряется в децибелах и зависит от расстояния, которое источник звука преодолевает при колебании. \n\nОт частоты звуковой волны зависит высота звука: чем быстрее колебания, тем выше звук. В приложении \"Научный журнал\" можно определить только силу звука. \n\nСамый тихий звук, который может уловить человеческое ухо, – 0 дБ. При этом в разговорной речи – 60 дБ, а все звуки свыше 140 дБ считаются опасными для человеческого слуха. Опасным для здоровья также является продолжительный шум в 90 дБ. То есть, даже шум от работающего пылесоса при длительном воздействии может привести к потере слуха. \n\nДецибелы – это необычные единицы, поскольку для их измерения используется логарифмическая шкала. Это значит, что мощность одного источника с силой звука в 40 дБ может быть в 100 раз интенсивнее, чем мощность двух источников по 20 дБ. К примеру, если звук будильника равен 70 дБ, звук двух будильников будет не 140 дБ, а только 73 дБ. \n\n10 дБ – шелест листьев \n20 дБ – шепот на расстоянии 1,5 м \n30 дБ – тихий шепот \n50 дБ – дождь\n60 дБ – разговорная речь \n90 дБ – шум работающего блендера \n100 дБ – звук машины без глушителя \n110 дБ – громкий крик \n120 дБ – гром\n130 дБ – звук работающего молоткового перфоратора \n140 дБ – шум при взлете самолета" + "Все звуки можно охарактеризовать двумя величинами: интенсивностью и частотой.\n\nИнтенсивность (или громкость) измеряется в децибелах (дБ), и ее можно зафиксировать с помощью Научного журнала. Значение этого показателя зависит от дистанции, которую колеблющийся предмет проходит за каждое колебание. Чем выше интенсивность звука, тем он громче.\n\nВ свою очередь частота звуковой волны равна периодичности ее колебаний. Чем чаще объект колеблется, тем выше частота производимого им звука. Измерить эту величину с помощью Научного журнала нельзя.\n\nВажно отметить, что микрофон в вашем устройстве очень чувствителен к различиям между разными звуковыми волнами, но не к их уровням частоты. Мы постарались настроить приложение так, чтобы интенсивность звуков, приведенных ниже, соответствовала указанным значениям. При этом на практике вы можете заметить, что громкость каждого из них меньше или больше. Кстати, ученые обычно тоже калибруют свои датчики в соответствии с известными значениями. С помощью Научного журнала вы можете узнать, например, где звук громче: на рок-концерте или в движущемся поезде. Помните, что в таком случае измерять звук нужно с помощью одного и того же устройства.\n\nВ приложении термины \"интенсивность звука\", \"уровень интенсивности звука\" и \"звуковое давление\" обозначают одну величину. На самом деле между этими понятиями есть важные различия. Подробнее о них можно узнать на специализированных онлайн-ресурсах.\n\nИнтенсивность самого тихого звука, который может услышать здоровый человек, равна 0 дБ. Громкость обычной речи составляет 60 дБ, в то время как звук с интенсивностью 140 дБ причиняет боль в ушах. Длительное воздействие шума с интенсивностью в 90 дБ (это громкость пылесоса) может привести к потере слуха.\n\nШкала децибел является логарифмической, что иногда усложняет ее понимание. Так, источник звука с интенсивностью в 40 дБ громче источника с интенсивностью, равной 20 дБ, не в два, а в сто раз. И ещё один пример: громкость звука одного будильника составляет 70 дБ, а двух – не 140, а 73 дБ. В приложении интенсивность звука фиксируется относительно следующих значений:\n\nшелест листьев – 10 дБ;\nшепот на расстоянии 1,5 м – 20 дБ;\nшепот – 30 дБ;\nдождь – 50 дБ;\nобычный разговор – 60 дБ;\nблендер – 90 дБ;\nавтомобиль без глушителя – 100 дБ;\nкрик в ухо – 110 дБ;\nгром – 120 дБ;\nотбойный молоток – 130 дБ;\nвзлетающий самолет – 140 дБ." "Количество оборотов в минуту – это единица измерения частоты вращения объекта вокруг оси за одну минуту. \n\nИндикатор движется, и в соответствии с этим вращается диск датчика:" "В результате движения диска на датчик периодически попадает свет. Благодаря этому регистрируется вращение." "Представленные здесь данные получены в результате подключения к вашему телефону внешнего датчика через Bluetooth. \n\nЗначение представляет из себя процент необработанных данных, которые были считаны с вашего микроконтроллера. Обычно эти данные связаны с перепадами напряжения в датчике." @@ -232,6 +232,7 @@ "следующий датчик: \"%s\"" "Введите текст комментария" "Комментарий удален" + "Запись удалена" "Отменить" "Введите текст комментария" "Сделать снимок" @@ -430,7 +431,7 @@ "Выбрать снимок" "Дата создания фото: %s" "выбрано" - "Выберите приложение для редактирования фото" + "Выберите приложение для редактирования фото" "Показать панель инструментов" "Развернуть панель инструментов" "Свернуть панель инструментов" @@ -438,7 +439,10 @@ "Добавить комментарий" "Видеосъемка" "У приложения \"Научный журнал\" нет доступа к камере, поскольку вы не установили нужное разрешение." - "У приложения \"Научный журнал\" нет доступа к галерее, поскольку вы не установили нужное разрешение." - - + "У Научного журнала нет разрешения на доступ к галерее." + "Открыть настройки" + "Показать эксперименты из архива" + "Скрыть эксперименты из архива" + "Скрыть записи из архива" + "Сохранить показания датчиков" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml index c6417d0f..c4f1b295 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml @@ -200,7 +200,7 @@ "Objekty majú tendenciu zostať na mieste, ak stoja, alebo zostať v pohybe, ak sa hýbu – nazýva sa to zákon zotrvačnosti. Newtonov prvý zákon vyjadruje túto myšlienku formálne: každý objekt zotrváva v pohybe alebo v pokoji, ak naň nepôsobí vonkajšia sila. \n\nKeď vonkajšia sila spôsobí pohyb objektu, hovoríme, že objekt zrýchli: jeho rýchlosť sa zmení – buď zrýchli, spomalí, alebo zmení smer. Zrýchlenie sa meria ako zmena rýchlosti (metre za sekundu) v čase alebo ako metre za sekundu na druhú (m/s²). \n\nVáš telefón obsahuje zariadenie, ktoré meria tieto zmeny pohybu – akcelerometer. Vnútri akcelerometra sa nachádzajú malé zavesené závažia, ktoré sa môžu voľne pohybovať. Zmeny pohybu spôsobujú posun týchto závaží presne tak, ako keď sa vaša hlava posunie dopredu pri rýchlom zabrzdení auta. Meraním týchto jemných zotrvačných posunov dokáže akcelerometer v telefóne zaznamenať zmeny pohybu a orientácie, čo je užitočné napríklad pri prepínaní obrazovky medzi režimom na šírku a režimom na výšku, pri hraní hier v telefóne a na iné účely." "Pravdepodobne ste si všimli neustále zrýchľovanie na osi Z, aj keď je váš telefón v pokoji na stole. Ide o zrýchlenie, ktoré pôsobí na povrchu Zeme vďaka gravitačnej sile, s hodnotou približne 9,8 m/s²." "Zvuky sa tvoria pomocou vibrácií. Napríklad váš hlas vytvárajú vibrácie vašich hlasiviek. Tieto vibrácie vytvárajú striedavé zóny vysokého a nízkeho tlaku, ktoré sa šíria vpred – podobne ako kruhy na vode po hodení kamienka do jazera." - "Všetky zvuky možno charakterizovať frekvenciou a intenzitou. \n\nIntenzita je veličina, ktorú meriate v aplikácii Vedecký zápisník, a jej jednotkou sú decibely (dB). Intenzita alebo hlasitosť závisí od vzdialenosti, ktorú vibrujúci objekt prejde pri každej vibrácii. Väčšiu intenzitu vnímame ako vyššiu hlasitosť. \n\nFrekvencia (tiež označovaná ako výška alebo tón) zvukovej vlny je ekvivalentná rýchlosti vibrovania. Čím rýchlejšie objekt vibruje, tým väčšia je výška (vyšší tón) výsledného zvuku. Vedecký zápisník nemeria frekvenciu – len hlasitosť. \n\nNajtichší zvuk, ktorý dokáže priemerné ľudské ucho zachytiť, je definovaný ako 0 dB. Bežný rozhovor zodpovedá približne 60 dB a zvuky zhruba nad 140 dB sú už pre ľudské ucho bolestivé. Ale zvuky nemusia byť bolestivé, aby boli škodlivé. Dlhotrvajúce vystavenie zvukom nad 90 dB (to je približne ekvivalentné zvuku vysávača) dokáže v konečnom dôsledku spôsobiť stratu sluchu. \n\nDecibelová mierka je logaritmická, takže jej pochopenie je trochu náročné: zdroj zvuku s intenzitou 40 dB nie je dvakrát intenzívnejší ako zvuk s hodnotou 20 dB – je 100-krát intenzívnejší. Okrem toho tiež platí, že ak jeden budík vyprodukuje zvuk s intenzitou 70 dB, dva budíky nevyprodukujú 140 dB, ale 73 dB. Takže sami vidíte, že je to problematické. \n\n10 dB – šum lístia \n20 dB – šepot zo vzdialenosti 1,5 metra \n30 dB – jemný šepot \n50 dB – dážď \n60 dB – bežný rozhovor \n90 dB – mixér \n100 dB – auto bez tlmiča výfuku \n110 dB – kričanie do ucha \n120 dB – hrom \n130 dB – zbíjačka \n140 dB – lietadlo pri vzlete" + "Všetky zvuky možno charakterizovať z hľadiska ich frekvencie a intenzity. \n\nIntenzita je veličina, ktorú meriate v aplikácii Vedecký zápisník a jej jednotkou sú decibely (dB). Intenzita alebo hlasitosť závisí od vzdialenosti, ktorú vibrujúci objekt prejde pri každej vibrácii. Väčšiu intenzitu vnímame ako vyššiu hlasitosť. \n\nFrekvencia (tiež označovaná ako výška alebo tón) zvukovej vlny je ekvivalentná rýchlosti vibrovania. Čím rýchlejšie objekt vibruje, tým väčšia je výška (vyšší tón) výsledného zvuku. Vedecký zápisník nemeria frekvenciu – len hlasitosť. \n\nJe dôležité vedieť, že mikrofón vo vašom zariadení je navrhnutý tak, aby bol veľmi citlivý na rozdiely vo zvukových vlnách v priebehu času, nie však na absolútnu veľkosť každej vlny. Pokúsili sme sa vybrať kód, ktorý pravdepodobne produkuje hodnoty podobné referenčným hodnotám zobrazeným nižšie, no každé zariadenie môže poskytovať systematicky vyššie alebo nižšie hodnoty. Vedci zvyčajne takýto senzor kalibrujú na známe meranie. Zatiaľ vám Vedecký zápisník prezradí, či je vaša ďalšia jazda vlakom hlasnejšia ako váš ďalší rockový koncert, ale iba vtedy, keď v oboch prípadoch použijete ten istý telefón. \n\nDôležité je tiež vedieť, že medzi intenzitou zvuku, hladinou intenzity zvuku a akustickým tlakom sú dôležité rozdiely. My ich tu nerozlišujeme, no ak chcete vedieť viac, na internete nájdete množstvo zdrojov o rozdieloch medzi nimi. \n\nNajtichší zvuk, ktorý dokáže priemerné ľudské ucho zachytiť, je definovaný ako 0 dB. Bežný rozhovor zodpovedá približne 60 dB a zvuky zhruba nad 140 dB sú už pre ľudské ucho bolestivé. Ale zvuky nemusia byť bolestivé, aby boli škodlivé. Dlhotrvajúce vystavenie zvukom nad 90 dB (čo je približne hlasitosť vysávača) dokáže v konečnom dôsledku spôsobiť stratu sluchu. \n\nDecibelová mierka je logaritmická, takže je to s ňou trochu komplikované: zdroj zvuku s intenzitou 40 dB nie je dvakrát intenzívnejší ako zvuk s hodnotou 20 dB – je 100-krát intenzívnejší. Okrem toho tiež platí, že ak jeden budík vyprodukuje zvuk s intenzitou 70 dB, dva budíky nevyprodukujú 140 dB, ale 73 dB. Ako sme už uviedli, táto mierka je trochu zvláštna. \n\n10 dB – šum lístia \n20 dB – šepot na vzdialenosť 1,5 metra \n30 dB – jemný šepot \n50 dB – dážď \n60 dB – bežný rozhovor \n90 dB – mixér \n100 dB – auto bez tlmiča výfuku \n110 B – kričanie do ucha \n120 dB – hrom \n130 dB – zbíjačka \n140 dB – lietadlo pri vzlete" "Otáčky za minútu (ot./min) merajú frekvenciu otáčok okolo pevnej osi za jednu minútu. \n\nOtáčanie veternej vrtule otáča disk kódovača:" "To vytvára obdobia svetla a tmy na senzore, ktoré sa vo Vedeckom zápisníku zaznamenajú ako rotácia." "Údaje zobrazené v tejto časti pochádzajú z externého senzora, ktorý s vaším telefónom komunikuje prostredníctvom rozhrania Bluetooth. \n\nHodnota ukazuje percento hrubého merania priamo z vášho mikroovládača. Väčšinou ide o percento poklesu napätia v rámci senzora." @@ -232,6 +232,7 @@ "nasledujúci senzor: %s" "Pridať novú poznámku" "Poznámka bola odstránená" + "Záznam bol odstránený" "Späť" "Pridať poznámku k tomuto záznamu" "Nasnímať obrázkovú poznámku" @@ -383,7 +384,7 @@ "Pokus nemožno orezať mimo pôvodne zaznamenaného rozsahu" "Pokus nemožno orezať na menej ako jednu sekundu" "%1s: %1s" - "snímka" + "prehľad stavu" "Exportujú sa dáta…" "Relatívny čas" "Spustená poznámka: %1s" @@ -406,7 +407,7 @@ "Upraviť čas" "Pridať poznámku k časovej osi" "Tu pridajte popis záznamu" - "Podrobnosti snímky" + "Podrobnosti prehľadu stavu" "Podrobnosti spustenej poznámky" "Dostupné nástroje" "Napísať text" @@ -430,7 +431,7 @@ "Vybrať obrázok" "Fotka zo dňa %s" "vybraté" - "Upraviť fotku pomocou aplikácie…" + "Upraviť fotku pomocou aplikácie…" "Zobraziť vysúvací panel nástrojov" "Rozbaliť vysúvací panel nástrojov" "Zbaliť vysúvací panel nástrojov" @@ -438,7 +439,10 @@ "Pridať textovú poznámku" "Živé zobrazenie z fotoaparátu" "Fotoaparát nie je možné použiť, pretože k nemu Vedecký zápisník nemá povolený prístup." - "Knižnicu fotiek nie je možné použiť, pretože k nej Vedecký zápisník nemá povolený prístup." - - + "Vašu galériu fotiek nemožno použiť, pretože Vedecký zápisník k nej nemá povolený prístup." + "Otvoriť nastavenia" + "Zobraziť archivované experimenty" + "Skryť archivované experimenty" + "Skryť archivované záznamy" + "Prehľad stavu senzorov" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml index 8f2ae07e..4cbb1e92 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml @@ -200,7 +200,7 @@ "Predmeti so nagnjeni k temu, da ostanejo na svojem mestu ali da nadaljujejo z gibanjem, če se gibljejo – temu pravimo vztrajnost. Formalno jo opisuje Newtonov prvi zakon: predmet nadaljuje z gibanjem ali ostane na svojem mestu, razen če nanj deluje neizenačena sila. \n\nKo neizenačena sila povzroči, da se predmet premakne, pravimo, da predmet pospešuje: njegova hitrost se spremeni – predmet pospeši, upočasni ali spremeni smer gibanja. Pospeševanje se meri kot sprememba hitrosti (ta se meri v metrih na sekundo) v času ali v metrih na kvadratno sekundo (m/s²). \n\nV telefonu je naprava, ki meri te spremembe gibanja – merilnik pospeška. Znotraj merilnika pospeška se prosto gibljejo majhne viseče uteži. Spremembe v gibanju povzročijo, da se te uteži premaknejo, podobno kot se vaša glava v avtomobilu, ki nenadoma zavre, premakne naprej. Merilnik pospeška v telefonu meri te majhne vztrajnostne premike in tako zazna spremembe v gibanju in usmerjenosti. To je uporabno za preklapljanje zaslona iz ležeče usmeritve v pokončno, igranje iger na telefonu in drugo." "Verjetno ste opazili nenehen pospešek v smeri osi Z, tudi ko telefon odložite na mizo. To je pospešek, ki zaradi gravitacijskega privlaka deluje na nas na površini Zemlje, in znaša približno 9,8 m/s²." "Zvok ustvarjajo vibracije. Vaš glas na primer ustvarjajo vibracije glasilk v vašem grlu. Te vibracije ustvarjajo izmenjujoča se območja visokega in nizkega zračnega tlaka, ki potujejo navzven, podobno kot okrogli valovi, ki se širijo navzven, ko v jezero vržete kamen." - "Vse zvoke je mogoče opisati z njihovo frekvenco in jakostjo. \n\nZ aplikacijo Science Journal tukaj merite jakost v decibelih (dB). Jakost, ali glasnost, je odvisna od razdalje, za katero se predmet premakne ob vsaki vibraciji. Večjo jakost slišimo kot višjo glasnost. \n\nFrekvenca (tudi višina ali ton) zvočnega vala je enakovredna njegovi hitrosti vibriranja. Hitreje kot predmet vibrira, višji bo ustvarjen zvok. Aplikacija Science Journal ne meri frekvence, pač pa le glasnost. \n\nGlasnost najtišjega zvoka, ki ga lahko zazna uho povprečnega človeka, je 0 dB. Glasnost običajnega pogovora je okrog 60 dB, zvoki nad 140 dB pa so za človeško uho boleči. Škodljivi so lahko tudi neboleči zvoki. Neprekinjena izpostavljenost zvokom glasnosti 90 dB, kar približno ustreza glasnosti sesalnika, lahko sčasoma povzroči izgubo sluha. \n\nMerilna lestvica za decibele je logaritemska, zaradi česar je merjenje nekoliko zapleteno: vir zvoka glasnosti 40 dB ni dvakrat močnejši kot vir zvoka glasnosti 20 dB – je stokrat močnejši. Če ena zvoneča budilka ustvari zvok z glasnostjo 70 dB, dve budilki ne ustvarita zvoka glasnosti 140, pač pa 73 dB. Kot smo omenili, je merilna lestvica nenavadna. \n\nŠumenje listov – 10 dB \nŠepetanje z razdalje 1,5 m – 20 dB \nTiho šepetanje – 30 dB \nDež – 50 dB \nObičajni pogovor – 60 dB \nMešalnik – 90 dB \nAvtomobil brez dušilca – 100 dB \nVpitje v uho – 110 dB \nGrmenje – 120 dB \nPnevmatsko kladivo – 130 dB \nVzlet letala – 140 dB" + "Vse zvoke je mogoče opisati z njihovo frekvenco in jakostjo.\n\nZ aplikacijo Science Journal tukaj merite jakost v decibelih (dB). Jakost, ali glasnost, je odvisna od razdalje, za katero se vibrirajoči predmet premakne ob vsaki vibraciji. Večjo jakost slišimo kot višjo glasnost. \n\nFrekvenca (tudi višina ali ton) zvočnega vala je enakovredna njegovi hitrosti vibriranja. Hitreje kot predmet vibrira, višji bo ustvarjen zvok. Aplikacija Science Journal ne meri frekvence, pač pa le glasnost.\n\nUpoštevati morate, da je mikrofon v vaši napravi zasnovan tako, da je zelo občutljiv na spremembe zvočnih valov skozi čas, ne pa tudi na absolutno velikost vsakega vala. Poskusili smo izbrati kodo, ki bo zagotavljala številke, podobne spodaj navedenim referenčnim, vendar lahko naprave izmerijo dosledno višje ali nižje številke. Znanstveniki taka tipala običajno umerijo glede na znano meritev. Science Journal vam trenutno lahko pove, ali bo vožnja z vlakom glasnejša od rokovskega koncerta, vendar le, če imate na obeh dogodkih isti telefon.\n\nVedeti morate tudi, da so med »jakostjo zvoka«, »ravnjo jakosti zvoka« in »zvočnim tlakom« pomembne razlike. Tukaj vse tri meritve obravnavamo enako, če pa želite več podrobnosti, vam je na voljo veliko število spletnih virov, kjer so opisane razlike.\n\nGlasnost najtišjega zvoka, ki ga lahko zazna uho povprečnega človeka, je 0 dB. Glasnost običajnega pogovora je okrog 60 dB, zvoki nad 140 dB pa so za človeško uho boleči. Škodljivi so lahko tudi neboleči zvoki. Neprekinjena izpostavljenost zvokom glasnosti 90 dB, kar približno ustreza glasnosti sesalnika, lahko sčasoma povzroči okvaro sluha. \n\nMerilna lestvica za decibele je logaritemska, zaradi česar je merjenje nekoliko zapleteno: vir zvoka glasnosti 40 dB ni dvakrat močnejši kot vir zvoka glasnosti 20 dB – je stokrat močnejši. Če ena zvoneča budilka ustvari zvok z glasnostjo 70 dB, dve budilki ne ustvarita zvoka glasnosti 140, pač pa 73 dB. Kot smo omenili, je merilna lestvica nenavadna. \n\nŠumenje listov – 10 dB\nŠepetanje z razdalje 1,5 m – 20 dB\nTiho šepetanje – 30 dB\nDež – 50 dB\nObičajni pogovor – 60 dB\nKuhinjski mešalnik – 90 dB\nAvtomobil brez dušilca – 100 dB\nVpitje v uho – 110 dB\nGrmenje – 120 dB\nPnevmatsko kladivo – 130 dB\nVzlet letala – 140 dB" "Vrtljaji na minuto (vrt./min) so meritev frekvence vrtenja okoli nepremične osi v eni minuti. \n\nKo se vetrnica vrti, poganja tudi disk kodirnika:" "To ustvarja obdobja svetlobe in teme na tipalu, kar se v aplikaciji Science Journal zazna kot vrtljaj." "Tukaj prikazani podatki prihajajo iz komunikacije zunanjega tipala s telefonom prek povezave Bluetooth. \n\nVrednost prikazuje odstotek neobdelanih podatkov, odčitanih neposredno iz mikrokrmilnika. To je običajno odstotek padca napetosti prek tipala." @@ -232,6 +232,7 @@ "naslednje tipalo: %s" "Dodajte novo opombo" "Opomba je izbrisana" + "Posnetek je izbrisan" "Razveljavi" "Dodajte opombo temu posnetku" "Zajemi slikovno opombo" @@ -430,7 +431,7 @@ "Izbira slike" "Slika je bila zajeta %s" "izbrano" - "Urejanje fotografije z aplikacijo ..." + "Urejanje fotografije z aplikacijo …" "Pokaži predal z orodjem" "Razširi predal z orodjem" "Strni predal z orodjem" @@ -438,7 +439,10 @@ "Dodaj besedilni zapisek" "Pogled fotoaparata v živo" "Fotoaparata ni mogoče uporabiti, ker Science Journal nima dovoljenja za dostop do njega." - "Knjižnice fotografij ni mogoče uporabiti, ker Science Journal nima dovoljenja za dostop do nje." - - + "Galerije fotografij ni mogoče uporabiti, ker Science Journal nima dovoljenja za dostop do nje." + "Odpri nastavitve" + "Pokaži arhivirane poskuse" + "Skrij arhivirane poskuse" + "Skrij arhivirane posnetke" + "Posnetek tipala" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml index 85707ed7..568c7e48 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml @@ -200,7 +200,7 @@ "Тела настоје да мирују или да наставе да крећу ако се већ крећу. Та особина се назива инерција. Та појава је дефинисана првим Њутновим законом: Свако тело остаје у стању релативног мировања или равномерног праволинијског кретања све док га деловање или дејство другог тела не присили да то стање промени. \n\nКада се дејством неке силе утиче на то да се тело помери, каже се да тело убрзава: мења му се брзина, било да се смањује или повећава, или му се мења смер. Убрзање се дефинише као промена брзине (метри у секунди) у јединици времена, односно по метрима у секунди на квадрат (m/s²). \n\nВаш телефон има уређај за мерење таквих промена кретања – акцелерометар. Унутар акцелерометра се налазе суспендована тела мале масе, која могу да се слободно крећу. Промене у кретању доводе до промене положаја тих тела – као што вам глава климне у колима која нагло закоче. Мерењем тих суптилних померања које изазива инерција, акцелерометар у телефону може да открива промене у кретању и оријентацији, што је корисно при пребацивању екрана у вертикални или хоризонтални режим, игрању игара на телефону и другим ситуацијама." "Вероватно сте приметили постојано убрзање по Z оси, чак и док телефон непомично лежи на столу. То је убрзање које се осети на површини Земље због дејства гравитационе силе од око 9,8 m/s²." "Звукови настају вибрацијом. Ваш глас, на пример, настаје вибрацијом гласних жица у грлу. Тим вибрацијама се стварају наизменичне зоне високог и ниског ваздушног притиска које се шире около – као таласићи од камичка баченог у воду." - "Сви звукови се могу описати помоћу своје фреквенције и интензитета. \n\nИнтензитет је оно што мерите у Научном дневнику, у децибелима (dB). Интензитет или јачина звука зависи од растојања које предмет који вибрира прелази при свакој вибрацији. Већи интензитет чујемо као већу јачину звука. \n\nФреквенција (односно интонација или тон) звучног таласа је брзина вибрације предмета. Што брже објект вибрира, то је интонација произведеног звука већа. Научни дневник не мери фреквенцију, већ само јачину звука. \n\nНајтиши звук које просечно људско ухо може да чује се дефинише као 0 dB. Обичан разговор одговара јачини од око 60 dB, а звуке изнад око 140 dB људско ухо региструје као бол. Дуготрајније излагање звуцима од око 90 dB, што је отприлике јачина звука усисивача, може да изазове губитак слуха. \n\nДецибелска скала је логаритмичка, тако да прерачунавање није очигледно: Звучни извор јачине 40 dB није двоструко јачи од оног од 20 dB – јачи је 100 пута. Такође, ако један будилник звони јачином од 70 dB, два будилника не производе звук од 140 dB (мада тако изгледа), него од 73 dB. Чудна је та скала. \n\n10 dB – шуштање лишћа \n20 dB – шапутање на 1,5 метара \n30 dB – тих шапат \n50 dB – киша \n60 dB – нормалан разговор \n90 dB – блендер \n100 dB – аутомобил без ауспуха \n110 dB – викање у уво \n120 dB – грмљавина \n130 dB – пнеуматски чекић \n140 dB – узлетање авиона" + "Сви звукови се могу описати помоћу своје фреквенције и интензитета. \n\nИнтензитет је оно што мерите у Научном дневнику, у децибелима (dB). Интензитет или јачина звука зависи од растојања које предмет који вибрира прелази при свакој вибрацији. Већи интензитет чујемо као већу јачину звука. \n\nФреквенција (односно интонација или тон) звучног таласа је брзина вибрације предмета. Што брже објект вибрира, то је интонација произведеног звука већа. Научни дневник не мери фреквенцију, већ само јачину звука. \n\nТреба да знате да је микрофон у вашем уређају веома осетљив на разлике између звучних таласа током времена, али не и на апсолутну јачину сваког таласа. Пробали смо да направимо систем који ће највероватније давати референтне бројеве приказане у наставку, али сваки засебан уређај ће можда уједначено давати веће или мање вредности. Научници обично калибришу овакав сензор према познатој вредности мерења. За сада, Научни дневник може да вам каже да ли је ауспух аутобуса у којем се возите гласнији од рок свирке на коју идете сутра, али само ако у обе прилике носите исти телефон. \n\nТреба знати и да постоје значајне разлике између „интензитета звука“, „нивоа интензитета звука“ и „притиска звука“. Овде их третирамо као исту ствар, а ако вас занима у чему је разлика, на располагању су вам бројни онлајн ресурси. \n\nНајтиши звук који просечно људско ухо може да чује се дефинише као 0 dB. Обичан разговор одговара јачини од око 60 dB, а звуке изнад око 140 dB људско ухо региструје као бол. Међутим, звук не мора да буде болан да би био штетан. Дуготрајније излагање звуцима од око 90 dB, што је отприлике јачина звука усисивача, може да изазове губитак слуха. \n\nДецибелска скала је логаритамска, тако да прерачунавање није очигледно: Звучни извор јачине 40 dB није двоструко јачи од оног од 20 dB – јачи је 100 пута. Такође, ако један будилник звони јачином од 70 dB, два будилника не производе звук од 140 dB (мада тако изгледа), него од 73 dB. Чудна је та скала. \n\n10 dB – шуштање лишћа \n20 dB – шапутање на 1,5 метар \n30 dB – тих шапат \n50 dB – киша \n60 dB – нормалан разговор \n90 dB – блендер \n100 dB – аутомобил без ауспуха \n110 dB – викање у уво \n120 dB – грмљавина \n130 dB – пнеуматски чекић \n140 dB – узлетање авиона" "Број обртаја у минуту (о/мин) је мера учесталости ротирања око непомичне осе у минуту. \n\nПропелер вашег сензора својим окретањем ротира диск кодера:" "То ствара периоде светлости и таме на сензору, који се у Научном дневнику региструју као ротација." "Овде приказани подаци потичу од комуникације спољног сензора са телефоном преко Bluetooth-а. \n\nВредност показује проценат необрађених података очитаних директно са микроконтролера. То је обично проценат пада напона на целом сензору." @@ -232,6 +232,7 @@ "следећи сензор: %s" "Додајте нову белешку" "Белешка је избрисана" + "Забелешка је избрисана" "Опозови" "Додајте белешку уз овај снимак" "Додавање сликовне белешке" @@ -430,7 +431,7 @@ "Изаберите слику" "Сликано %s" "изабрано" - "Измените слику помоћу..." + "Измените слику користећи…" "Прикажи фиоку са алаткама" "Прошири фиоку са алаткама" "Скупи фиоку са алаткама" @@ -438,7 +439,10 @@ "Додај текстуалну белешку" "Приказ уживо са камере" "Камера не може да се користи јер Научни дневник нема дозволу да јој приступи." - "Фототека не може да се користи јер Научни дневник нема дозволу да јој приступи." - - + "Галерија фотографија не може да се користи јер Научни дневник нема дозволу да јој приступа." + "Отвори подешавања" + "Прикажи архивиране експерименте" + "Сакриј архивиране експерименте" + "Сакриј архивиране забелешке" + "Снимак са сензора" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml index d4092cd5..3b78cde2 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml @@ -200,7 +200,7 @@ "Föremål förblir i vila eller så fortsätter de att röra på sig om de har satts i rörelse. Vi kallar detta tröghetslagen. I Newtons första lag uttrycks det så här: Varje kropp förblir i sitt tillstånd av vila eller likformig och rätlinjig rörelse, om den inte påverkas av någon kraft. \n\nNär en kraft påverkar ett föremål så att det rör sig säger vi att det accelererar. Dess hastighet ändras antingen genom att öka eller minska, eller ändra riktning. Acceleration mäts som hastighetsändring (meter per sekund) över tid, eller meter per sekundkvadrat (m/s²). \n\nI din telefon ingår en så kallad accelerometer för att mäta de här rörelseändringarna. Inuti en accelerometer finns små tyngder som rör sig fritt. Vid rörelseändringar rör sig även dessa tyngder, ungefär som när ditt huvud rör sig framåt om du sitter i en bil som plötsligt bromsar in. Genom att mäta sådana subtila rörelseändringar, känner telefonens accelerometer av ändringar i rörelse och riktning. Detta är viktigt för att du ska kunna växla skärmen från liggande till stående visning, spela spel på telefonen och mycket mer." "Du har förmodligen upptäckt den ihållande accelerationen för Z-axeln även när telefonen ligger på bordet. Det är jordens acceleration som orsakas av tyngdkraften – ungefär 9,8 m/s²." "Vibration genererar ljud. Din röst genereras till exempel av vibrationer i stämbanden. De här vibrationerna genererar alternerande zoner med högt och lågt lufttryck som förs ut, ungefär som ringarna på vattnet som sprids efter att man kastat i en sten." - "Alla ljud kan beskrivas med frekvens och styrka. \n\nStyrkan kan du mäta här med Science Journal och måttet är decibel (dB). Ljudets styrka beror på avståndet som ett vibrerande objekt rör sig varje gång det vibrerar, och större intensitet hör vi som starkare ljud. \n\nEn ljudvågs frekvens (och ton) motsvarar dess vibrationshastighet. Ju snabbare ett föremål vibrerar desto högre tonljud. Med Science Journal mäts inte frekvensen, bara styrkan. \n\nDet svagaste ljud en människa kan höra definieras som 0 dB. Vanlig konversation motsvarar ungefär 60 dB och ljud över 140 dB är smärtsamma för en människas öra. Men ljud behöver inte vara smärtsamt för att orsaka skada. Att ständigt vistas i ljudmiljöer på 90 dB, ungefär lika högt som en dammsugare, kan så småningom leda till nedsatt hörsel. \n\nDecibelskalan är logaritmisk, vilket gör det lite krångligare. En ljudkälla på 40 dB är inte dubbelt så stark som en på 20 dB – den är 100 gånger så stark. Om en väckarklocka till exempel genererar ett larm på 70 dB, genererar två sådana väckarklockor ett larm på 73 dB – inte 140 dB. Det är som sagt en annorlunda skala. \n\n10 dB löv som rasslar \n20 dB någon viskar på 1,5 meters avstånd \n30 dB svagt viskande \n50 dB regn \n60 dB normal konversation \n90 dB mixer \n100 dB bil utan ljuddämpare \n110 dB rop direkt i örat \n120 dB åska \n130 dB tryckluftsborr \n140 dB flygplan som lyfter" + "Alla ljud kan beskrivas utifrån frekvens och styrka. \n\nStyrkan kan du mäta här med Science Journal och måttet är decibel (dB). Ljudets styrka beror på avståndet som ett vibrerande objekt rör sig varje gång det vibrerar, och större intensitet hör vi som starkare ljud. \n\nEn ljudvågs frekvens (och ton) motsvarar dess vibrationshastighet. Ju snabbare ett föremål vibrerar desto högre tonljud. Med Science Journal mäts inte frekvensen, bara styrkan. \n\nDet är viktigt att veta att mikrofonen i din enhet har utformats för att vara väldigt känslig för skillnader i ljudvågor över tid, men inte för varje vågs absoluta storlek. Vi har försökt välja kod som sannolikt genererar siffror som liknar de referenssiffror som visas nedan, men varje enhet kan ge konsekvent högre eller lägre siffror. Forskare kalibrerar vanligtvis en sensor som denna efter ett känt mått. Just nu kan Science Journal tala om ifall din nästa tågresa innebär en högre ljudstyrka än din nästa rockkonsert, men bara om du tar med samma telefon till båda evenemangen. \n\nEn annan sak som är viktigt att veta är att det finns viktiga skillnader mellan ”ljudstyrka”, ”ljudstyrkans nivå” och ”ljudtryck”. Vi ser dem som samma sak, men om du gräver djupare finns det många onlineresurser som beskriver dessa skillnader. \n\nDet svagaste ljud en människa kan höra är 0 dB. Ett vanligt samtal motsvarar ungefär 60 dB och ljud över 140 dB är smärtsamma för en människas öra. Men ljud behöver inte vara smärtsamt för att orsaka skada. Att ständigt vistas i ljudmiljöer på 90 dB kan så småningom leda till nedsatt hörsel. Det är ungefär så högt en dammsugare låter. \n\nDecibelskalan är logaritmisk, vilket gör det hela lite krångligt. En ljudkälla på 40 dB är inte dubbelt så stark som en på 20 dB – den är 100 gånger så stark. Om en väckarklocka till exempel genererar ett larm på 70 dB, genererar två sådana väckarklockor ett larm på 73 dB – inte 140 dB. Det är som sagt en annorlunda skala. \n\n10 dB löv som rasslar \n20 dB någon som viskar på 1,5 meters avstånd \n30 dB svagt viskande \n50 dB regn \n60 dB normal konversation \n90 dB mixer \n100 dB bil utan ljuddämpare \n110 dB rop direkt i örat \n120 dB åska \n130 dB tryckluftsborr \n140 dB flygplan som lyfter" "Varv per minut (r/min) är antalet varv per minut runt en fast axel. \n\nNär vindspelet roterar, roteras även omkodarens skiva:" "Detta genererar ljusa och mörka perioder på sensorn som registreras som en rotation i Science Journal." "Den data som visas här kommer från Bluetooth-kommunikation mellan en extern sensor och din telefon. \n\nVärdet visar procentandelen obearbetad avläsning direkt från din mikrokontroller. Detta brukar vara procentandelen för en sensors spänningsfall." @@ -232,6 +232,7 @@ "nästa sensor: %s" "Lägg till ny anteckning" "Anteckningen har tagits bort" + "Inspelning raderad" "Ångra" "Lägg till anteckning i den här inspelningen" "Ta bildanteckning" @@ -430,7 +431,7 @@ "Välj en bild" "Bilden togs %s" "markerad" - "Redigera bilden med …" + "Redigera fotot med …" "Visa verktygslådan" "Utöka verktygslådan" "Komprimera verktygslådan" @@ -438,7 +439,10 @@ "Lägg till textanteckning" "Kameraförhandsgranskning" "Kameran kan inte användas eftersom Science Journal inte har åtkomst." - "Det går inte att använda bildbiblioteket eftersom Science Journal inte har åtkomst." - - + "Det går inte att använda fotogalleriet eftersom Science Journal inte har åtkomst." + "Öppna inställningarna" + "Visa arkiverade experiment" + "Dölj arkiverade experiment" + "Dölj arkiverade inspelningar" + "Ögonblicksbild för sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml index ac2fe359..04383efb 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml @@ -200,7 +200,7 @@ "วัตถุมีแนวโน้มที่จะอยู่นิ่งหรือเคลื่อนที่ต่อไปหากกำลังเคลื่อนที่อยู่ แนวโน้มนี้เรียกว่าความเฉื่อย กฎข้อที่ 1 ของนิวตันกล่าวว่า วัตถุจะคงสถานะการเคลื่อนไหวหรืออยู่นิ่งจนกระทั่งได้รับผลกระทบจากแรงที่ไม่สมดุล \n\nเมื่อแรงที่ไม่สมดุลทำให้วัตถุเคลื่อนที่ เราเรียกว่าวัตถุมีความเร่ง นั่นคือ อัตราเร็วหรือความเร็วของวัตถุจะเปลี่ยนแปลงเป็นเร็วขึ้น ช้าลง หรือเปลี่ยนทิศทาง ความเร่งจะวัดจากการเปลี่ยนแปลงอัตราเร็ว (เมตรต่อวินาที) ในระยะเวลาหนึ่ง หรือเมตรต่อวินาทียกกำลังสอง (เมตร/วินาที²) \n\nโทรศัพท์ของคุณมีอุปกรณ์วัดการเปลี่ยนแปลงความเคลื่อนไหวที่เรียกว่าตัววัดความเร่ง ภายในตัววัดความเร่งจะมีมวลสารเล็กๆ ลอยอยู่อย่างเป็นอิสระ การเคลื่อนไหวที่เปลี่ยนไปจะทำให้มวลสารเคลื่อนที่ เช่นเดียวกับตอนที่ศีรษะเหวี่ยงไปด้านหน้าเมื่อรถหยุดกระทันหัน การวัดการเปลี่ยนแปลงความเฉื่อยที่ซับซ้อนนี้ทำให้ตัววัดความเร่งในโทรศัพท์สามารถตรวจจับความเคลื่อนไหวและทิศทางที่เปลี่ยนไปได้ ซึ่งมีประโยชน์ในการสลับหน้าจอจากโหมดแนวนอนเป็นแนวตั้งสำหรับการเล่นเกมในโทรศัพท์และอื่นๆ" "คุณอาจสังเกตเห็นว่าในแกน Z มีการเพิ่มความเร็วอยู่ตลอดแม้ว่าโทรศัพท์จะวางนิ่งอยู่บนโต๊ะ นี่เป็นความเร่งที่เกิดขึ้นบนพื้นผิวโลกเนื่องจากแรงดึงของแรงดึงดูด ประมาณ 9.8 เมตร/วินาที²" "เสียงเกิดจากการสั่นสะเทือน ตัวอย่างเช่น เสียงของคุณมาจากการสั่นสะเทือนของเส้นเสียงในกล่องเสียงในลำคอของคุณ การสั่นสะเทือนเหล่าจะสร้างพื้นที่ที่มีแรงกดอากาศสูงและต่ำสลับกันที่เปล่งออกมาภายนอก คล้ายกับวงน้ำที่ขยายตัวออกเมื่อโยนก้อนหินลงบ่อน้ำ" - "เสียงทั้งหมดสามารถอธิบายได้ในแง่ของความถี่และความเข้ม \n\nความเข้มคือสิ่งที่คุณวัดที่นี่ด้วยวารสารวิทยาศาสตร์เป็นหน่วยเดซิเบล (dB) ความเข้มหรือความดังขึ้นอยู่กับระยะทางที่วัตถุที่สั่นสะเทือนมีการเคลื่อนที่ในแต่ละครั้งที่สั่นสะเทือน เราจะได้ยินความเข้มมากขึ้นเมื่อความดังเพิ่มขึ้น \n\nความถี่ (หรือระดับเสียงหรือโทนเสียง) ของคลื่นเสียงจะเท่ากับอัตราการสั่นสะเทือน ยิ่งวัตถุสั่นเร็วขึ้นเท่าใดเสียงที่ออกมาก็จะสูงขึ้นเท่านั้น วารสารวิทยาศาสตร์ไม่ได้วัดความถี่ แต่วัดเฉพาะความดัง \n\nเสียงเบาที่สุดที่หูของมนุษย์ทั่วไปสามารถได้ยินมีการระบุไว้เท่ากับ 0 dB การสนทนาโต้ตอบธรรมดาดังประมาณ 60 dB และเสียงที่ดังกว่า 140 dB จะสร้างความเจ็บปวดต่อหูของมนุษย์ แต่เสียงที่เป็นอันตรายอาจไม่ใช่เสียงที่สร้างความเจ็บปวดเสมอไป การฟังเสียงดัง 90 dB หรือดังประมาณเสียงเครื่องดูดฝุ่นอย่างต่อเนื่องเป็นเวลานานก็สามารถทำให้สูญเสียการได้ยินได้ในที่สุด \n\nตารางเดซิเบลเป็นแบบลอการิทึมซึ่งทำให้สับสนได้ง่าย: แหล่งที่มาของเสียงดัง 40 dB ไม่ได้มีความเข้มเป็น 2 เท่าของแหล่งที่มาของเสียงดัง 20 dB แต่เข้มกว่า 100 เท่า ส่วนนาฬิกาปลุกที่กำลังดัง 1 เรือนจะสร้างเสียง 70 dB แต่นาฬิกาปลุกที่กำลังดัง 2 เรือนไม่ได้สร้างเสียง 140 dB แต่เป็น 73 dB อย่างที่เราได้กล่าวไว้ ตารางเดซิเบลค่อนข้างเป็นตารางที่แปลก\n\nใบไม้ดังกรอบแกรบเท่ากับ 10 dB \nเสียงกระซิบระยะ 5 ฟุตดัง 20 dB \nเสียงกระซิบเบาๆ ดัง 30 dB \nฝนตกดัง 50 dB \nการสนทนาปกติดัง 60 dB \nเครื่องปั่นดัง 90 dB \nรถที่ไม่มีกระบอกลดเสียงดัง 100 dB \nการตะโกนใกล้ๆ หูดัง 110 dB \nฟ้าผ่าดัง 120 dB \nเครื่องเจาะหินดัง 130 dB \nเครื่องบินขึ้นดัง 140 dB" + "เสียงทั้งหมดอธิบายได้ในแง่ของความถี่และความเข้ม\n\nความเข้มคือสิ่งที่คุณวัดที่นี่ด้วยวารสารวิทยาศาสตร์เป็นหน่วยเดซิเบล (dB) ความเข้มหรือความดังขึ้นอยู่กับระยะทางที่วัตถุที่สั่นสะเทือนมีการเคลื่อนที่ในแต่ละครั้งที่สั่นสะเทือน เราจะได้ยินความเข้มมากขึ้นเมื่อความดังเพิ่มขึ้น\n\nความถี่ (หรือระดับเสียงหรือโทนเสียง) ของคลื่นเสียงจะเท่ากับอัตราการสั่นสะเทือน ยิ่งวัตถุสั่นเร็วขึ้นเท่าใดเสียงที่ออกมาก็จะสูงขึ้นเท่านั้น วารสารวิทยาศาสตร์ไม่ได้วัดความถี่ แต่วัดเฉพาะความดัง\n\nสิ่งสำคัญที่คุณต้องรู้คือ ไมโครโฟนในอุปกรณ์นั้นได้รับการออกแบบมาให้ไวต่อคลื่นเสียงในระดับที่ต่างกันตลอดเวลา แต่ไม่ไวต่อความดังของแต่ละคลื่นเสียง เราได้พยายามเลือกโค้ดที่มีแนวโน้มจะระบุค่าที่ใกล้เคียงกับค่าอ้างอิงที่ปรากฏด้านล่าง อย่างไรก็ตาม อุปกรณ์แต่ละเครื่องอาจแสดงค่าที่สูงกว่าหรือต่ำกว่าเสมอ นักวิทยาศาสตร์มักปรับเทียบเซ็นเซอร์นี้กับการวัดที่เป็นมาตรฐาน ขณะนี้ Science Journal จะบอกว่าเสียงรถไฟขบวนถัดไปนั้นดังกว่าเสียงคอนเสิร์ตร็อคที่คุณจะไปได้ก็ต่อเมื่อคุณใช้โทรศัพท์เครื่องเดียวกันในการวัดเท่านั้น\n\nอีกสิ่งที่ต้องรู้คือ “ความเข้มเสียง”, “ระดับความเข้มเสียง” และ “ความดันเสียง” นั้นมีความแตกต่างที่สำคัญอยู่ แต่เราถือว่าทั้งสามสิ่งนี้เป็นสิ่งเดียวกัน หากต้องการรู้ให้ลึกขึ้น คุณอาจค้นหาเกี่ยวกับความแตกต่างเหล่านี้ได้จากแหล่งข้อมูลออนไลน์\n\nเสียงเบาที่สุดที่หูของมนุษย์ทั่วไปได้ยินเท่ากับ 0 dB การสนทนาโต้ตอบธรรมดาดังประมาณ 60 dB และเสียงที่ดังกว่า 140 dB จะสร้างความเจ็บปวดต่อหูของมนุษย์ แต่เสียงที่เป็นอันตรายอาจไม่ใช่เสียงที่สร้างความเจ็บปวดเสมอไป การฟังเสียงดัง 90 dB หรือดังประมาณเสียงเครื่องดูดฝุ่นอย่างต่อเนื่องเป็นเวลานานก็เป็นสาเหตุให้สูญเสียการได้ยินได้ในที่สุด\n\nตารางเดซิเบลเป็นแบบลอการิทึมซึ่งทำให้สับสนได้ง่าย: แหล่งที่มาของเสียงดัง 40 dB ไม่ได้มีความเข้มเป็น 2 เท่าของแหล่งที่มาของเสียงดัง 20 dB แต่เข้มกว่า 100 เท่า ส่วนนาฬิกาปลุกที่กำลังดัง 1 เรือนจะสร้างเสียง 70 dB แต่นาฬิกาปลุกที่กำลังดัง 2 เรือนไม่ได้สร้างเสียง 140 dB แต่เป็น 73 dB อย่างที่เราได้กล่าวไว้ ตารางเดซิเบลค่อนข้างเป็นตารางที่แปลกทีเดียว\n\nเสียงใบไม้ดังกรอบแกรบ 10 dB \nเสียงกระซิบระยะ 5 ฟุต 20 dB \nเสียงกระซิบเบาๆ 30 dB \nเสียงฝนตก 50 dB\nการสนทนาปกติดัง 60 dB\nเครื่องปั่นดัง 90 dB\nรถที่ไม่มีกระบอกลดเสียงดัง 100 dB\nการตะโกนใกล้ๆ หูดัง 110 dB\nฟ้าผ่าดัง 120 dB\nเครื่องเจาะหินดัง 130 dB\nเครื่องบินขึ้นดัง 140 dB" "รอบต่อนาที (RPM) คือการวัดความถี่ของการหมุนรอบแกนคงที่ใน 1 นาที \n\nเมื่อกังหันลมหมุน กังหันก็จะหมุนจานเข้ารหัส:" "ซึ่งจะสร้างช่วงของความสว่างและความมืดบนเซ็นเซอร์ที่บันทึกไว้เป็นการหมุนในวารสารวิทยาศาสตร์" "ข้อมูลที่แสดงที่นี่มาจากการสื่อสารของเซ็นเซอร์ภายนอกกับโทรศัพท์ของคุณผ่านบลูทูธ \n\nค่าดังกล่าวจะแสดงการอ่านข้อมูลดิบโดยตรงจากไมโครคอนโทรลเลอร์คิดเป็นเปอร์เซ็นต์ ซึ่งมักเป็นเปอร์เซ็นต์ของแรงดันไฟตกในเซ็นเซอร์" @@ -232,6 +232,7 @@ "เซ็นเซอร์ถัดไป: %s" "เพิ่มบันทึกใหม่" "ลบบันทึกแล้ว" + "ลบการบันทึกแล้ว" "เลิกทำ" "เพิ่มบันทึกในการบันทึกนี้" "บันทึกด้วยภาพ" @@ -265,7 +266,7 @@ "วารสารวิทยาศาสตร์" "ทำการทดลองกับโลกรอบตัวคุณ" "ฟีเจอร์ใหม่และการปรับปรุง: \n• อินเทอร์เฟซใหม่ล่าสุดสำหรับการจดบันทึกและทำเอกสารการทดลองทางวิทยาศาสตร์ \n• ฟีเจอร์สแนปชอตใหม่สำหรับการบันทึกข้อมูลทีละจุด \n• เซ็นเซอร์ใหม่: ตัวตรวจวัดความเร่งเชิงเส้น เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก และเข็มทิศ \n• แกลเลอรีที่ออกแบบใหม่สำหรับเรียกดูการทดลองต่างๆ \n• พร้อมใช้งานบนอุปกรณ์ iOS แล้ววันนี้" - "วารสารวิทยาศาสตร์คือสมุดบันทึกทางวิทยาศาสตร์แบบดิจิทัลซึ่งจัดทำโดย Google \n \nโดยไม่ว่าคุณจะเป็นครูสอนวิทยาศาสตร์หรือผู้ที่ชื่นชอบการทดลองวิทยาศาสตร์ คุณก็จะเก็บบันทึก รูปภาพ และการสังเกตการณ์ได้อย่างสะดวกในที่เดียว ใช้เซ็นเซอร์ในโทรศัพท์เพื่อการวัดและสร้างกราฟจากปรากฏการณ์ต่างๆ เช่น แสง เสียง การเคลื่อนไหว หรือเชื่อมต่อกับเซ็นเซอร์ภายนอกผ่านทางบลูทูธเพื่อทำการทดลองต่างๆ ในโลกรอบตัวคุณ \n \nแอปวารสารวิทยาศาสตร์ช่วยให้คุณทำสิ่งต่างๆ ต่อไปนี้ได้ \n• วัดแสง เสียง ความเร่ง ความดันอากาศ และอีกมากมายด้วยเซ็นเซอร์ในโทรศัพท์ \n• จดบันทึกและถ่ายภาพเพื่อสร้างเอกสารการทดลองวิทยาศาสตร์ และเตรียมคอยพบกับบันทึกแบบใหม่เร็วๆ นี้ \n• เชื่อมต่อกับเซ็นเซอร์ภายนอกด้วยการเลือกอุปกรณ์ Arduino และ Vernier ที่รองรับการใช้งานบลูทูธ \n• ส่งออกไฟล์ข้อมูลเซ็นเซอร์ที่บันทึกไว้ในรูปแบบไฟล์ CSV \n• สร้างทริกเกอร์แบบอัตโนมัติสำหรับการบันทึกข้อมูลและจดบันทึก \n• ใช้การแปลงข้อมูลเป็นเสียงเพื่อฟังเสียงกราฟ \n \nวารสารวิทยาศาสตร์พร้อมใช้งานได้ฟรีบนอุปกรณ์ Android, iPhone, iPad และ Chromebook ที่ใช้งานร่วมกันได้ \n \n กิจกรรมด้านการศึกษาจากพาร์ทเนอร์ของเรา: https://makingscience.withgoogle.com/science-journal/activities \nหากต้องการการสนับสนุน: https://productforums.google.com/forum/#!forum/sciencejournal \nโค้ดโอเพนซอร์สที่พร้อมใช้งาน: https://github.com/google/science-journal \n\nประกาศเกี่ยวกับสิทธิ์: \n• ตำแหน่ง: ใช้เพื่อสแกนหาอุปกรณ์เซ็นเซอร์บลูทูธ \n• กล้องถ่ายรูป: ใช้เพื่อถ่ายรูปทำบันทึกการทดลอง \n• ไมโครโฟน: ใช้เป็นเซ็นเซอร์วัดความเข้มเสียง \n• พื้นที่เก็บข้อมูล: ใช้เพื่อเข้าถึงรูปภาพที่จะนำมาใส่ในการทดลอง" + "วารสารวิทยาศาสตร์คือสมุดบันทึกทางวิทยาศาสตร์แบบดิจิทัลซึ่งจัดทำโดย Google \n \nโดยไม่ว่าคุณจะเป็นครูสอนวิทยาศาสตร์หรือผู้ที่ชื่นชอบการทดลองวิทยาศาสตร์ คุณก็จะเก็บบันทึก รูปภาพ และการสังเกตการณ์ได้อย่างสะดวกในที่เดียว ใช้เซ็นเซอร์ในโทรศัพท์เพื่อการวัดและสร้างกราฟจากปรากฏการณ์ต่างๆ เช่น แสง เสียง การเคลื่อนไหว หรือเชื่อมต่อกับเซ็นเซอร์ภายนอกผ่านทางบลูทูธเพื่อทำการทดลองต่างๆ ในโลกรอบตัวคุณ \n \nแอปวารสารวิทยาศาสตร์ช่วยให้คุณทำสิ่งต่างๆ ต่อไปนี้ได้ \n• วัดแสง เสียง ความเร่ง ความดันอากาศ และอีกมากมายด้วยเซ็นเซอร์ในโทรศัพท์ \n• จดบันทึกและถ่ายภาพเพื่อสร้างเอกสารการทดลองวิทยาศาสตร์ และเตรียมคอยพบกับบันทึกแบบใหม่เร็วๆ นี้ \n• เชื่อมต่อกับเซ็นเซอร์ภายนอกด้วยการเลือกอุปกรณ์ Arduino และ Vernier ที่รองรับการใช้งานบลูทูธ \n• ส่งออกไฟล์ข้อมูลเซ็นเซอร์ที่บันทึกไว้ในรูปแบบไฟล์ CSV \n• สร้างทริกเกอร์แบบอัตโนมัติสำหรับการบันทึกข้อมูลและจดบันทึก \n• ใช้การแปลงข้อมูลเป็นเสียงเพื่อฟังเสียงกราฟ \n \nวารสารวิทยาศาสตร์พร้อมใช้งานได้ฟรีบนอุปกรณ์ Android, iPhone, iPad และ Chromebook ที่ใช้งานร่วมกันได้ \n \n กิจกรรมด้านการศึกษาจากพาร์ทเนอร์ของเรา: https://makingscience.withgoogle.com/science-journal/activities \nสำหรับการสนับสนุน: https://productforums.google.com/forum/#!forum/sciencejournal \nโค้ดโอเพนซอร์สที่พร้อมใช้งาน: https://github.com/google/science-journal \n\nประกาศเกี่ยวกับสิทธิ์: \n• ตำแหน่ง: ใช้เพื่อสแกนหาอุปกรณ์เซ็นเซอร์บลูทูธ \n• กล้องถ่ายรูป: ใช้เพื่อถ่ายรูปทำบันทึกการทดลอง \n• ไมโครโฟน: ใช้เป็นเซ็นเซอร์วัดความเข้มเสียง \n• พื้นที่เก็บข้อมูล: ใช้เพื่อเข้าถึงรูปภาพที่จะนำมาใส่ในการทดลอง" "ค้นหาเซ็นเซอร์ของบุคคลที่สาม" "ค้นหาแอปที่สนับสนุน API เซ็นเซอร์ของบุคคลที่สาม และเปิดใช้การเพิ่มเซ็นเซอร์เหล่านั้นลงในการทดลอง" "เปิดใช้อุณหภูมิแวดล้อม" @@ -430,7 +431,7 @@ "เลือกภาพ" "ถ่ายภาพเมื่อ %s" "เลือกไว้" - "แก้ไขรูปภาพด้วย..." + "แก้ไขรูปภาพด้วย…" "แสดงลิ้นชักเครื่องมือ" "ขยายลิ้นชักเครื่องมือ" "ยุบลิ้นชักเครื่องมือ" @@ -438,7 +439,10 @@ "เพิ่มบันทึกข้อความ" "มุมมองกล้องแบบสด" "ไม่สามารถใช้งานกล้องได้เนื่องจากวารสารวิทยาศาสตร์ยังไม่มีสิทธิ์เข้าถึง" - "ไม่สามารถใช้คลังภาพได้เนื่องจากวารสารวิทยาศาสตร์ยังไม่มีสิทธิ์เข้าถึง" - - + "ใช้แกลเลอรีรูปภาพไม่ได้เนื่องจากวารสารวิทยาศาสตร์ไม่มีสิทธิ์ในการเข้าถึง" + "เปิด \"การตั้งค่า\"" + "แสดงการทดลองที่เก็บถาวร" + "ซ่อนการทดลองที่เก็บถาวร" + "ซ่อนบันทึกที่เก็บถาวร" + "สแนปชอตเซ็นเซอร์" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml index a4f744fb..850cb2e9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml @@ -200,7 +200,7 @@ "Likas sa mga bagay ang manatili sa kinalalagyan, o kumilos kung kumikilos ang mga ito—tinatawag nating inertia ang likas na katangiang ito. Pormal na inihahayag ng Unang Batas ni Newton ang ideyang ito: Patuloy na kikilos o mananatili ang isang bagay maliban kung maapektuhan ng isang hindi balanseng puwersa. \n\nKapag may hindi balanseng puwersa na nagdulot ng paggalaw ng isang bagay, sinasabi natin na nag-a-accelerate (bumibilis ang pagkilos) ng bagay: nagbabago ang velocity nito, o bilis—maaaring sa pamamagitan ng pagbilis, pagbagal, o pagbabago ng direksyon. Sinusukat ang acceleration bilang isang pagbabago ng velocity (metro kada segundo) sa oras, o metro kada segundo kuwadrado (m/s²). \n\nMay device ang iyong telepono upang masukat ang mga pagbabagong ito sa paggalaw—isang accelerometer. Sa loob ng isang accelerometer, malayang nakakagalaw ang maliliit na nakasuspinding bagay. Ang mga pagbabago sa paggalaw ang nagiging sanhi ng pagkilos ng mga bagay na ito, tulad ng iyong likas na pagsubsob kapag nakasakay ka sa kotse na biglang huminto. Sa pagsukat ng mga hindi kapansin-pansing pagkilos na ito na dulot ng inertia, nadedetekta ng accelerometer sa isang telepono ang mga pagbabago sa galaw at orientation, kapaki-pakinabang para sa paglipat ng screen mula sa landscape tungo sa portrait mode, para sa paglalaro sa iyong telepono, at marami pang iba." "Marahil ay may napansin kang patuloy na acceleration sa Z axis, kahit pa nakapirmi ang telepono sa ibabaw ng isang mesa. Ito ang acceleration na nararanasan natin dito sa ibabaw ng Daigdig dahil sa paghila ng gravity, humigit-kumulang ay 9.8 m/s²." "Mula sa vibration ang mga tunog. Ang iyong boses, halimbawa, ay mula sa mga vibration ng mga vocal chord sa iyong lalamunan. Ang mga vibration na ito ay gumagawa ng mga nagsasalitang sona ng mataas at mababang presyon ng hangin na naglalakbay palabas—tulad ng maliliit na along ginawa ng isang maliit na batong inihagis sa tubig." - "Lahat ng tunog ay mailalarawan ayon sa kanilang frequency at tindi. \n\nTindi ang sinusukat mo rito sa Science Journal, sa mga unit ng decibels (DB). Nakadepende ang tindi, o lakas ng tunog, sa distansyang iginagalaw ng isang nagba-vibrate na bagay sa tuwing nagba-vibrate ito; mas matindi ang naririnig natin bilang nadagdagang lakas ng tunog. \n\nAng frequency (pitch o tono rin) ng isang sound wave ay katumbas ng kanyang rate ng vibration. Mas mabilis na magba-vibrate ang isang bagay, mas mataas ang pitch ng magreresultang tunog. Hindi sinusukat ng Science Journal ang frequency—kundi ang lakas ng tunog lamang. \n\nAng pinakatahimik na tunog na madedetekta ng karaniwang tainga ng tao ay itinakda bilang 0 dB. Tumutugma sa humigit-kumulang 60 dB ang ordinaryong pag-uusap, at masakit sa tainga ng tao ang mga tunog na lagpas pa sa humigit-kumulang 140 dB. Ngunit hindi kailangang maging masakit o mapanganib ng mga tunog. Ang patuloy na pagkakalantad sa mga tunog na 90 dB—halos kasing-ingay ng isang vacuum cleaner—ay maaaring maging sanhi ng pagkawala ng pandinig. \n\nLogarithmic ang decibel scale, na dahilan para sa ilang trick: Ang pinagmumulan ng tunog na 40 dB ay hindi dalawang beses na kasintindi ng isa na may 20 dB—100 beses na mas matindi ito. Samantala, kung ang isang nagri-ring na alarm clock ay gumagawa ng 70 dB, ang dalawang nagri-ring na alarm clock ay gumagawa ng hindi 140 DB, kundi 73 dB. Gaya ng sinabi namin, kakaibang sukatan ito. \n\n10 dB kumakaluskos na dahon \n20 dB pagbulong sa layong 5 piye \n30 dB mahinang bulong \n50 dB patak ng ulan \n60 dB normal na pag-uusap \n90 dB blender \n100 dB kotse na walang muffler \n110 dB sigaw sa tainga \n120 dB kulog \n130 dB jackhammer \n140 dB lilipad na eroplano" + "Lahat ng tunog ay mailalarawan ayon sa kanilang dalas (frequency) at katindihan (intensity). \n\nKatindihan ang sinusukat mo rito sa Science Journal, sa mga unit na decibels (dB). Ang katindihan, o lakas ng tunog, ay nakasalalay sa layo ng ikinikilos ng isang nagba-vibrate na bagay sa bawat pag-vibrate nito; mas matindi ang nadidinig natin bilang malakas na ingay. \n\nAng dalas o frequency (tining (pitch) o tono (tone) rin) ng isang sound wave ay katumbas ng bilis ng vibration nito. Mas mabilis mag-vibrate ang isang bagay, mas matining ang nabubuong tunog. Hindi sinusukat ng Science Journal ang dalas o frequency—lakas ng tunog lang. \n\nIsang mahalagang bagay na dapat malaman ay dinisenyo ang mikropono sa iyong device para maging napakasensitibo sa mga kaibahan sa mga sound wave sa kalaunan, pero hindi ang ganap na laki ng bawat wave. Sinubukan naming pumili ng code na malamang na gumawa ng mga numerong katulad ng mga reference na numerong ipinapakita sa ibaba, pero maaaring magbigay ng patuloy na mas mataas o mas mababang numero ang bawat device. Karaniwang ika-calibrate ng mga scientist ang isang sensor na tulad nito sa isang kilalang sukatan. Sa ngayon, masasabi sa iyo ng Science Journal kung ang susunod mong pagsakay sa tren ay mas maingay kaysa susunod na rock concert mo, pero kung dadalhin mo lang ang mismong telepono sa parehong event. \n\nIsa pang dapat malaman ay may mahahalagang kaibahan sa pagitan ng “sound intensity” (tindi ng tunog), “sound intensity level” (antas ng tindi ng tunog), at “sound pressure” (pressure ng tunog). Itinuturing namin na pare-pareho lang ang mga ito rito, pero kung gusto mo pang mag-usisa, maraming online resource tungkol sa mga pagkakaiba. \n\nAng pinakatahimik na tunog na nadedetekta ng karaniwang tainga ng tao ay tinukoy bilang 0 dB. Ang ordinaryong pag-uusap ay katumbas ng humigit-kumulang 60 dB, at ang mga tunog na higit pa sa 140 dB ay masakit sa tainga ng tao. Ngunit hindi kailangang maging masakit ang mga tunog upang makapaminsala. Ang patuloy na pagkakalantad sa mga tunog na 90 dB—mga kasinglakas ng vacuum cleaner—ay maaaring humantong sa pagkabingi. \n\nLogarithmic ang decibel scale, na kung minsan ay nakakalito: Ang isang pinagmumulan ng tunog na 40 dB ay hindi doble ng tindi ng isang 20 dB—100 beses na mas matindi ito. Samantala, kung ang isang tumutunog na alarm clock ay gumagawa ng 70 dB, ang dalawang tumutunog na alarm clock ay hindi gumagawa ng 140 dB, sa halip ay 73 dB. Tulad ng sinabi namin, kakaibang sukatan ito. \n\n10 dB kumakaluskos na dahon \n20 dB pagbulong sa layong 5 talampakan \n30 dB mahinang pagbulong \n50 dB ulan \n60 dB normal na pag-uusap \n90 dB blender \n100 dB kotseng walang muffler \n110 dB pagsigaw sa tainga \n120 dB kulog \n130 dB jackhammer \n140 dB palipad na eroplano" "Ang rotations per minute (RPM) ay isang sukat sa frequency ng pag-ikot sa paligid ng isang nakapirming axis sa loob ng isang minuto. \n\nHabang pumipihit ang iyong wind spinner, pinaiikot nito ang encoder disc:" "Gumagawa ito ng mga panahon ng liwanag at dilim sa sensor na nagrerehistro sa Science Journal bilang pag-ikot." "Ang data na ipinapakita rito ay nagmumula sa komunikasyon ng isang external sensor sa iyong telepono sa pamamagitan ng Bluetooth. \n\nIpinapakita ng value ang porsyento ng raw reading na direkta mula sa iyong microcontroller. Karaniwang porsyento ito ng isang pagbagsak ng boltahe sa kabuuan ng isang sensor." @@ -232,6 +232,7 @@ "susunod na sensor: %s" "Lagyan ng bagong tala" "Na-delete ang tala" + "Na-delete ang recording" "I-undo" "Maglagay ng tala sa recording na ito" "Tala sa pagkuha ng larawan" @@ -430,7 +431,7 @@ "Pumili ng litrato" "Nakunan ang litrato noong %s" "napili" - "Mag-edit ng litrato gamit ang..." + "Mag-edit ng litrato gamit ang..." "Ipakita ang tool drawer" "I-expand ang tool drawer" "I-collapse ang tool drawer" @@ -438,7 +439,10 @@ "Maglagay ng text na tala" "Camera live view" "Hindi magagamit ang camera dahil walang pahintulot ang Science Journal na ma-access ito." - "Hindi magagamit ang iyong photo library dahil walang pahintulot ang Science Journal na ma-access ito." - - + "Hindi magagamit ang iyong photo gallery dahil walang pahintulot ang Science Journal na ma-access ito." + "Buksan ang Mga Setting" + "Ipakita ang mga na-archive na ekperimento" + "Itago ang mga na-archive na eksperimento" + "Itago: na-archive na recording" + "Snapshot ng sensor" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml index a265758b..4769b4ab 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml @@ -200,7 +200,7 @@ "Cisimler durağan halde kalma veya hareket ediyorlarsa hareketlerine devam etme eğilimindedir. Buna eylemsizlik yasası denir. Newton\'ın Birinci Hareket Yasası bu fikri resmi olarak şu şekilde ifade ediyor: Bir cisim üzerine dengelenmemiş bir kuvvet etki etmedikçe hareket durumunu veya durağanlığını korur. \n\nCisim üzerine dengelenmemiş bir kuvvet etki edip harekete geçtiğinde buna cismin hızı artarak, azalarak veya yönü değişerek ivme kazanması (hızının veya süratinin değişmesi) diyoruz. İvme, zaman içinde hızdaki değişimle (saniyede alınan metre) veya metre bölü saniyenin karesiyle (m/s²) ölçülür. \n\nTelefonunuzda hareketteki bu değişimleri ölçen, ivmeölçer adında bir cihaz bulunur. İvmeölçerin içinde serbestçe hareket eden askı halindeki küçük kütleler bulunur. Nasıl ki aniden duran bir arabada kafanız öne doğru sarsılıyorsa hareketteki değişimler de bu kütlelerin yer değiştirmesine neden olur. Telefonlardaki ivmeölçer, bu ani eylemsizlik değişimlerini ölçerek hareketteki ve yöndeki değişimleri algılayabilir. Ekranı yatay moddan dikey moda geçirirken, telefonunuzda oyun oynarken ve daha birçok şey yaparken bu araçtan faydalanılır." "Telefon masada hareketsiz haldeyken bile Z ekseninde aralıksız bir ivmelenme fark etmişsinizdir. Bu, Dünya\'nın yüzeyine etki eden yaklaşık 9,8 m/s²\'lik yer çekimi kuvvetinden kaynaklanan ivmelenmedir." "Sesler, titreşimle oluşur. Örneğin, kendi sesinizin kaynağı gırtlağınızdaki ses tellerinde meydana gelen titreşimlerdir. Bu titreşimler, dışa doğru hareket eden ve birbiri ardına gelen yüksek ve alçak hava basıncı alanları oluşturur. Bunu, bir su birikintisine attığımız taşın oluşturduğu genişleyen dairesel dalgalara benzetebiliriz." - "Tüm sesler, frekansları ve şiddetleri açısından açıklanabilir. \n\nŞiddet, burada Science Journal ile desibel (dB) biriminden ölçtüğünüz şeydir. Ses şiddeti veya yüksekliği, titreşen bir nesnenin her titreştiğinde aldığı mesafeye bağlıdır; yüksek seste şiddet de büyüktür. \n\nBir ses dalgasının frekansı (perde veya ton olarak da kullanılır), titreşim hızına eşdeğerdir. Bir nesne ne kadar hızlı titreşirse ortaya çıkan sesin perdesi de o kadar yüksek olur. Science Journal, sadece ses yüksekliğini ölçer. Frekansı ölçmez. \n\nOrtalama bir insan kulağının duyabileceği en düşük ses seviyesi 0 dB olarak bulunmuştur. Normal bir konuşma yaklaşık 60 dB değerine karşılık gelir. 140 dB üzerindeki sesler insan kulağına zarar verir. Ancak seslerin zarar vermesi için illa bu seviyenin üstünde olması gerekmez. Örneğin, 90 dB seviyesindeki seslere (elektrik süpürgesi gibi) sürekli maruz kalınması sonunda duyma kaybına yol açabilir. \n\nDesibel ölçeği logaritmiktir. Bu noktada ölçüme dikkat edilmesi gerekir. Örneğin, 40 dB değerindeki bir ses kaynağı, 20 dB değerindeki ses kaynağının iki katı değil 100 katı şiddetindedir. Başka bir örnek verecek olursak, bir çalar saat alarmı 70 dB şiddetinde ses üretiyorsa iki çalar saat alarmı 140 değil, 73 dB şiddet üretir. Daha önce de söylediğimiz gibi, bu ölçek biraz farklı. \n\nYaprak ışıltısı 10 dB\'dir \n1,5 metre yakından fısıldama 20 dB\'dir \nHafif fısıltı 30 dB\'dir \nYağmur sesi 50 dB\'dir \nGünlük konuşmalar 60 dB\'dir \nMikser sesi 90 dB\'dir \nSusturucusuz araba sesi 100 dB\'dir \nKulağın içine bağırmak 110 dB\'dir \nGök gürültüsü 120 dB\'dir \nKaya matkabı sesi 130 dB\'dir \nKalkmakta olan uçak sesi 140 dB\'dir" + "Tüm sesler, frekansları ve şiddetleri açısından açıklanabilir. \n\nŞiddet, burada Science Journal ile desibel (dB) biriminden ölçtüğünüz şeydir. Ses şiddeti veya yüksekliği, titreşen bir nesnenin her titreştiğinde aldığı mesafeye bağlıdır; yüksek seste şiddet de büyüktür. \n\nBir ses dalgasının frekansı (perde veya ton olarak da kullanılır), titreşim hızına eşdeğerdir. Bir nesne ne kadar hızlı titreşirse ortaya çıkan sesin perdesi de o kadar yüksek olur. Science Journal, sadece ses yüksekliğini ölçer. Frekansı ölçmez. \n\nBilinmesi gereken önemli bir nokta şudur: Cihazınızdaki mikrofon, zaman içinde ses dalgalarındaki farklılıklara karşı çok hassas olacak şekilde tasarlanmıştır ancak her bir dalganın mutlak büyüklüğüne karşı hassas değildir. Aşağıda gösterilen referans sayılara benzer değerler üretmesi beklenen kodu seçmeye çalıştık, ancak her cihaz sürekli olarak daha yüksek veya daha düşük değerler verebilir. Bilim insanları genellikle böyle bir sensörü bilinen bir değere kalibre ederler. Science Journal şimdilik size sadece tren yolculuğunuzun gittiğiniz rock konserinden daha gürültülü olup olmadığını söyleyebilir, tabii iki etkinliğe de aynı telefonu getirmeniz koşuluyla. \n\nBilinmesi gereken bir diğer nokta da \"ses şiddeti\", \"ses şiddeti düzeyi\" ve \"ses basıncı\" kavramları arasında önemli farklar olmasıdır. Biz burada bunları aynı kavram gibi ele alıyoruz ancak daha derine inmek istiyorsanız farklılıkları hakkında birçok online kaynak bulabilirsiniz. \n\nOrtalama bir insan kulağının duyabileceği en düşük ses seviyesi 0 dB olarak bulunmuştur. Normal bir konuşma yaklaşık 60 dB değerine karşılık gelir. 140 dB üzerindeki sesler insan kulağına zarar verir. Ancak seslerin zarar vermesi için illa bu seviyenin üstünde olması gerekmez. Örneğin, 90 dB seviyesindeki seslere (elektrik süpürgesi gibi) sürekli maruz kalınması, sonunda duyma kaybına yol açabilir. \n\nDesibel ölçeği logaritmiktir. Bu noktada ölçüme dikkat edilmesi gerekir. Örneğin, 40 dB değerindeki bir ses kaynağı, 20 dB değerindeki ses kaynağının iki katı değil 100 katı şiddetindedir. Başka bir örnek verecek olursak, bir çalar saat alarmı 70 dB şiddetinde ses üretiyorsa iki çalar saat alarmı 140 değil, 73 dB şiddet üretir. Daha önce de söylediğimiz gibi, bu ölçek biraz farklı. \n\nYaprak hışırtısı 10 dB\'dir \n1,5 metre yakından fısıldama 20 dB\'dir \nHafif fısıltı 30 dB\'dir \nYağmur sesi 50 dB\'dir \nGünlük konuşmalar 60 dB\'dir \nMikser sesi 90 dB\'dir \nSusturucusuz araba sesi 100 dB\'dir \nKulağın içine bağırmak 110 dB\'dir \nGök gürültüsü 120 dB\'dir \nKaya matkabı sesi 130 dB\'dir \nKalkmakta olan uçak sesi 140 dB\'dir" "Dakikadaki devir sayısı (RPM), sabit bir eksen üzerinde bir dakikadaki dönüş sıklığının ölçümüdür. \n\nRüzgar pervanesi döndükçe kodlayıcı diski döndürür:" "Bu şekilde sensörde aydınlık ve karanlık periyotlar oluşturulur. Bunlar Science Journal\'da devir olarak kaydolur." "Burada gösterilen veriler, telefonunuzun Bluetooth aracılığıyla iletişim kurduğu harici bir sensörden geliyor. \n\nDeğer, doğrudan mikrodenetleyicinizden gelen ham okuma değerlerinin yüzdesini gösteriyor. Bu, genelde bir sensördeki gerilim düşüşünün yüzdesidir." @@ -232,6 +232,7 @@ "sonraki sensör: %s" "Yeni bir not ekleyin" "Not silindi" + "Kayıt silindi" "Geri al" "Bu kayda not ekleyin" "Resimli not çek" @@ -430,7 +431,7 @@ "Resim seç" "Resmin çekilme tarihi: %s" "seçili" - "Fotoğraf düzenlemek için kullanılacak uygulama" + "Fotoğraf düzenlemek için kullanılacak uygulama" "Araç çekmecesini göster" "Araç çekmecesini genişlet" "Araç çekmecesini daralt" @@ -438,7 +439,10 @@ "Yazılı not ekle" "Canlı kamera görünümü" "Science Journal\'ın erişme izni olmadığı için kamera kullanılamıyor." - "Science Journal\'ın erişme izni olmadığı için fotoğraf kitaplığınız kullanılamıyor." - - + "Science Journal\'ın erişim izni olmadığı için fotoğraf galeriniz kullanılamıyor." + "Ayarlar\'ı Aç" + "Arşivlenmiş deneyleri göster" + "Arşivlenmiş deneyleri gizle" + "Arşivlenmiş kayıtları gizle" + "Sensör anlık görüntüsü" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml index b9ac491c..6e743d7e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml @@ -200,7 +200,7 @@ "Об’єкти мають властивість залишатись нерухомими або продовжувати пересуватися – ця властивість називається інерцією. Перший закон Ньютона так формулює цю думку: об’єкт зберігає стан спокою або руху, допоки діюча на нього неврівноважена сила не виведе його з цього стану. \n\nКоли неврівноважена сила змушує об’єкт рухатися, ми говоримо, що він прискорюється: його швидкість змінюється за рахунок прискорення, уповільнення або зміни напрямку. Прискорення – це зміна швидкості (виражається в метрах за секунду) у часі, тому вона вимірюється в метрах за секунду у квадраті (м/с²). \n\nВаш телефон має акселерометр – пристрій для вимірювання таких змін руху. Усередині акселерометра є малі підвішені маси, що можуть вільно переміщуватися. Зміни руху призводять до переміщення цих мас так само, як голова нахиляється вперед під час різкого гальмування авто. Вимірюючи ці майже непомітні інерційні переміщення, акселерометр телефона може фіксувати зміни руху й напрямку. Це потрібно для перемикання екрана з альбомної в книжкову орієнтацію, під час ігор тощо." "Ви, напевно, помітили постійне прискорення по осі Z, навіть коли телефон нерухомо лежить на столі. Таке прискорення ми відчуваємо на поверхні Землі через силу тяжіння. Воно становить приблизно 9,8 м/с²." "Звуки утворюються в результаті вібрації. Наприклад, голос виникає під час вібрації голосових зв’язок. Ці вібрації створюють перемінні зони високого й низького тиску повітря, що спрямовані назовні – подібно до того, як по поверхні води розходяться кола, якщо у воду кинути камінець." - "Усі звуки можна охарактеризувати за їх частотою й інтенсивністю. \n\nУ додатку Науковий журнал інтенсивність можна вимірювати в децибелах (дБ). Інтенсивність або гучність залежить від відстані, на якій під час кожного коливання рухається об’єкт, що коливається. Більшу інтенсивність звуку ми чуємо як вищу гучність. \n\nЧастота (висота або тон звуку) звукової хвилі дорівнює швидкості її коливань. Що швидше коливається об’єкт, то більша висота кінцевого звуку. У додатку Науковий журнал можна вимірювати лише гучність, а не частоту звуків. \n\nНайтихіший звук, який може вловити вухо людини, відповідає 0 дБ. Рівень гучності звичайної розмови становить приблизно 60 дБ, а при гучності більше 140 дБ звуки спричиняють біль для людського вуха. Проте звуки можуть завдавати шкоди не лише через біль. Тривалий вплив звуків гучністю 90 дБ (це, наприклад, гучність пилососа) може з часом призвести до втрати слуху. \n\nШкала гучності в децибелах є логарифмічною, а тому іноді може вводити в оману: гучність у 40 дБ перевищує гучність звуку у 20 дБ не у два рази, а в 100 разів. І навпаки: якщо один будильник виробляє сигнал гучністю 70 дБ, то гучність сигналу двох таких будильників становить не 140 дБ, а лише 73 дБ. Ось така дивна шкала. \n\n10 дБ – це шелест листя \n20 дБ – це шепіт на відстані 5 футів \n30 дБ – це тиха розмова \n50 дБ – це шум водоспаду \n60 дБ – це звичайна розмова \n90 дБ – це гучність блендера \n100 дБ – це звук автомобіля без глушника \n110 дБ – це крик у вухо \n120 дБ – це грім \n130 дБ – це звук відбійного молотка \n140 дБ – це літак на злеті" + "Усі звуки можна охарактеризувати за їх частотою й інтенсивністю. \n\nУ додатку Науковий журнал інтенсивність можна вимірювати в децибелах (дБ). Інтенсивність (або гучність звуку) залежить від відстані, на якій під час кожного коливання перебуває об’єкт, що коливається. Тому більшу інтенсивність звуку ми чуємо гучніше. \n\nЧастота (висота або тон звуку) звукової хвилі дорівнює швидкості її коливань. Що швидше коливається об’єкт, то більша висота створеного звуку. У додатку Науковий журнал не можна вимірювати частоту звуків, а лише їх гучність. \n\nВажливо знати, що мікрофон у вашому пристрої дуже чутливий до змін звукових хвиль у часі, але не до абсолютної величини кожної хвилі. Ми намагалися підібрати алгоритм, який давав би значення, подібні до показаних нижче контрольних значень, але кожен пристрій може постійно давати вищі або нижчі значення. Учені зазвичай калібрують такий датчик за відомим вимірюванням. Додаток Науковий журнал може визначити, чи буде поїздка поїздом гучніша за рок-концерт, але лише якщо на обидві події ви візьмете той самий телефон. \n\nТакож треба знати, що між поняттями \"інтенсивність звуку\", \"рівень інтенсивності звуку\" та \"звуковий тиск\" є важливі відмінності. У цьому додатку ми їх не розрізняємо, але якщо ви захочете дізнатися більше, в Інтернеті можна знайти чимало ресурсів. \n\nНайтихіший звук, який може вловити вухо людини, визначається як 0 дБ. Рівень гучності звичайної розмови становить приблизно 60 дБ, а звуки гучністю понад 140 дБ болючі для людського вуха. Проте звуки можуть завдавати шкоди не лише через біль. Тривалий вплив звуків гучністю 90 дБ (це, наприклад, звук пилососа) може з часом призвести до втрати слуху. \n\nШкала гучності в децибелах є логарифмічною, тому іноді може вводити в оману: гучність у 40 дБ за інтенсивністю перевищує гучність звуку у 20 дБ не у два, а в 100 разів. І навпаки: якщо сигнал одного будильника має гучність 70 дБ, то гучність сигналу двох таких будильників становить не 140 дБ, а лише 73 дБ. Ось така дивна шкала. \n\n10 дБ – це шелест листя \n20 дБ – шепіт на відстані 1,5 метра \n30 дБ – тиха розмова \n50 дБ – шум дощу \n60 дБ – звичайна розмова \n90 дБ – звук блендера \n100 дБ – звук автомобіля без глушника \n110 дБ – крик у вухо \n120 дБ – грім \n130 дБ – звук відбійного молотка \n140 дБ – літак на злеті" "Оберт за хвилину (об/хв) – це одиниця вимірювання частоти обертів, здійснених тілом навколо нерухомої осі за одну хвилину. \n\nПід час обертання флюгер обертає диск датчика розташування:" "Це створює світлі й темні проміжки на датчику, що реєструються в додатку Науковий журнал як обертання." "Показані тут дані надходять із зовнішнього датчика, під’єднаного до вашого телефона через Bluetooth. \n\nЗначення вказує на відсоток необроблених даних, зчитаних безпосередньо з вашого мікроконтролера. Зазвичай це відсоток падіння напруги в датчику." @@ -232,6 +232,7 @@ "Наступний датчик: %s" "Додайте нову нотатку" "Нотатку видалено" + "Запис видалено" "Відмінити" "Додати нотатку до цього запису" "Зробити фотонотатку" @@ -430,7 +431,7 @@ "Вибрати фото" "Зображення зроблено %s" "вибрано" - "Редагувати фото…" + "Редагувати фото в додатку…" "Показати панель інструментів" "Розгорнути панель інструментів" "Згорнути панель інструментів" @@ -438,7 +439,10 @@ "Додати текстову нотатку" "Відеозапис експерименту" "Камеру не можна використовувати, оскільки додаток Науковий журнал не має доступу до неї." - "Бібліотеку фотографій не можна використовувати, оскільки додаток Науковий журнал не має доступу до неї." - - + "Фотогалерею не можна використовувати, оскільки додаток Науковий журнал не має доступу до неї." + "Відкрити налаштування" + "Показати заархівовані експерименти" + "Сховати заархівовані експерименти" + "Сховати заархівовані записи" + "Знімок датчика" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml index 9c6f2d3d..0c96e9fc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml @@ -200,7 +200,7 @@ "Các đối tượng có xu hướng đứng yên hay tiếp tục di chuyển nếu chúng đang di chuyển—chúng tôi gọi xu hướng này là quán tính. Định luật thứ nhất của Newton chính thức thể hiện ý tưởng này: Một đối tượng tiếp tục trạng thái chuyển động hoặc đứng yên của mình trừ khi có lực không cân bằng tác động lên. \n\nKhi một lực không cân bằng khiến đối tượng chuyển động, chúng ta nói đối tượng đó có gia tốc: vận tốc hay tốc độ thay đổi—bằng cách tăng tốc, giảm tốc hay thay đổi hướng. Gia tốc được đo dưới dạng thay đổi vận tốc (m/s) theo thời gian hoặc mét trên giây bình phương (m/s²). \n\nĐiện thoại của bạn có thiết bị để đo những thay đổi về chuyển động này—gọi là gia tốc kế. Bên trong một gia tốc kế, các khối lượng treo nhỏ chuyển động tự do. Thay đổi về chuyển động khiến những khối lượng này thay đổi mặc dù đầu bạn luôn có xu hướng gập về phía trước khi ngồi trong một chiếc xe dừng đột ngột. Khi đo những thay đổi quán tính tinh tế này, một gia tốc kế trong điện thoại có thể phát hiện thay đổi về chuyển động và hướng, hữu ích để chuyển màn hình từ chế độ ngang sang chế độ dọc để phát trò chơi trên điện thoại của bạn và hơn thế nữa." "Bạn có thể nhận thấy gia tốc liên tục ở trục Z, ngay cả khi điện thoại nằm yên trên bàn. Đây là gia tốc chúng ta gặp ở bề mặt trái đất do sức hút của trọng lực, khoảng 9,8 m/s²." "Âm thanh do sự rung động tạo ra. Chẳng hạn, giọng nói của bạn là do các dây thanh âm của cổ họng rung lên. Những rung động này tạo nên các vùng áp lực không khí cao và thấp thay thế di chuyển ra bên ngoài — gần giống với việc mở rộng gợn sóng hình tròn do ném một viên sỏi vào ao." - "Tất cả âm thanh đều có thể diễn tả được về tần số và cường độ. \n\nCường độ là chỉ số bạn đo được ở đây bằng Science Journal theo đơn vị decibel (dB). Cường độ hay âm lượng phụ thuộc vào khoảng cách mà đối tượng rung di chuyển mỗi lần rung; chúng ta nghe thấy cường độ lớn hơn khi âm lượng tăng lên. \n\nTần số (còn gọi là khoảng bước hoặc quãng âm) của sóng âm thanh tương đương với tốc độ rung của nó. Đối tượng rung càng nhanh thì khoảng bước của âm thanh thu được càng cao. Science Journal không đo tần số, chỉ đo âm lượng. \n\nÂm thanh yên tĩnh nhất mà tai của một người bình thường có thể phát hiện được xác định là 0 dB. Một cuộc trò chuyện bình thường tương tứng với khoảng 60 dB và âm thanh trên mức 140 dB sẽ gây đau cho tai người. Tuy nhiên, không phải âm thanh gây đau là âm thanh có hại. Liên tục tiếp xúc với âm thanh 90 dB—khoảng âm lượng của máy hút bụi—rốt cuộc cũng có thể làm giảm thính lực. \n\nThang đo decibel là lôgarít với một vài điểm phức tạp: Nguồn âm thanh 40 dB không mạnh gấp hai lần nguồn âm thanh 20 dB mà mạnh hơn gấp 100 lần. Trong khi đó, nếu một chiếc đồng hồ báo thức đang reo tạo ra 70 dB thì hai chiếc đồng hồ báo thức đang reo không tạo ra 140 dB mà tạo ra 73 dB. Như chúng tôi đã nói, đó là một thang đo lạ. \n\n10 dB là tiếng lá rơi xào xạc \n20 dB là tiếng thầm thì ở 5 feet \n30 dB là tiếng thì thầm nhẹ \n50 dB là tiếng mưa rơi \n60 dB là tiếng nói chuyện bình thường \n90 dB là tiếng máy trộn \n100 dB là tiếng xe hơi không có bộ giảm thanh \n110 dB là tiếng hét vào tai \n120 dB là tiếng sấm \n130 dB là tiếng búa khoan \n140 dB là tiếng máy bay cất cánh" + "Tất cả âm thanh đều có thể diễn tả được về tần số và cường độ. \n\n Cường độ là chỉ số bạn đo được ở đây bằng Science Journal theo đơn vị decibel (dB). Cường độ hay âm lượng phụ thuộc vào khoảng cách mà đối tượng rung di chuyển mỗi lần rung; chúng ta nghe thấy cường độ lớn hơn khi âm lượng tăng lên. \n\nTần số (còn gọi là khoảng bước hoặc quãng âm) của sóng âm thanh tương đương với tốc độ rung của nó. Đối tượng rung càng nhanh thì khoảng bước của âm thanh thu được càng cao. Science Journal không đo tần số, chỉ đo âm lượng. \n\n Một điều quan trọng cần biết là micrô trong thiết bị của bạn được thiết kế để phản ứng rất nhạy với sự khác biệt về sóng âm theo thời gian chứ không phải theo kích thước tuyệt đối của mỗi sóng âm. Chúng tôi đã thử chọn mã có khả năng tạo ra số đo giống như số tham chiếu minh họa bên dưới nhưng mỗi thiết bị luôn cho kết quả là số cao hơn hoặc thấp hơn. Thông thường, các nhà khoa học sẽ hiệu chỉnh loại cảm biến như vậy đến số đo đã xác định. Giờ đây, ứng dụng Science Journal có thể cho bạn biết liệu chuyến đi tàu sắp tới của bạn có âm lượng to hơn buổi hòa nhạc rock sắp tới không nhưng với điều kiện là bạn phải mang cùng một chiếc điện thoại đến cả hai sự kiện này. \n\nMột điều nữa cần biết là “cường độ âm thanh”, “mức cường độ âm thanh” và “áp suất âm thanh” có nhiều điểm khác nhau quan trọng. Ở đây, chúng tôi coi cả ba khái niệm này là một nhưng nếu bạn muốn tìm hiểu sâu hơn, thì có nhiều tài nguyên trực tuyến trình bày về các điểm khác nhau này. \n\nÂm thanh yên tĩnh nhất mà tai của một người bình thường có thể phát hiện được xác định là 0 dB. Một cuộc trò chuyện bình thường tương tứng với khoảng 60 dB và âm thanh trên mức 140 dB sẽ gây đau cho tai người. Tuy nhiên, không phải âm thanh gây đau là âm thanh có hại. Liên tục tiếp xúc với âm thanh 90 dB—khoảng âm lượng của máy hút bụi—rốt cuộc có thể làm giảm thính lực. \n\nThang đo decibel là lôgarít với một vài điểm phức tạp: Nguồn âm thanh 40 dB không mạnh gấp hai lần nguồn âm thanh 20 dB mà mạnh hơn gấp 100 lần. Trong khi đó, nếu một chiếc đồng hồ báo thức đang reo tạo ra 70 dB thì hai chiếc đồng hồ báo thức đang reo không tạo ra 140 dB mà tạo ra 73 dB. Như chúng tôi đã nói, đó là một thang đo lạ. \n\n10 dB là tiếng lá rơi xào xạc \n20 dB là tiếng thầm thì cách 5 feet (1,5 mét) \n30 dB là tiếng thì thầm nhẹ \n50 dB là tiếng mưa rơi \n60 dB là tiếng nói chuyện bình thường \n90 dB là tiếng máy xay sinh tố \n100 dB là tiếng xe hơi không có bộ giảm thanh \n110 dB là tiếng hét vào tai \n120 dB là tiếng sấm \n130 dB là tiếng búa khoan \n140 dB là tiếng máy bay cất cánh" "Số vòng trên phút (RPM) là đơn vị đo tần suất quay xung quanh một trục cố định trong một phút. \n\nKhi máy quay gió xoay, nó sẽ xoay quanh đĩa bộ mã hóa:" "Điều này tạo ra các kỳ sáng tối trên cảm biến đăng ký trong Science Journal dưới dạng chuyển động quay." "Dữ liệu hiển thị ở đây là từ cảm biến bên ngoài giao tiếp với điện thoại thông qua Bluetooth. \n\nGiá trị này cho biết phần trăm chỉ số đọc thô ngay từ bộ vi điều khiển. Đây thường là phần trăm sụt áp trên cảm biến." @@ -232,6 +232,7 @@ "cảm biến tiếp theo: %s" "Thêm một ghi chú mới" "Đã xóa ghi chú" + "Bản ghi đã bị xóa" "Hoàn tác" "Thêm ghi chú vào bản ghi này" "Chụp ảnh ghi chú" @@ -430,7 +431,7 @@ "Chọn ảnh" "Ảnh chụp vào %s" "đã chọn" - "Chỉnh sửa ảnh bằng..." + "Chỉnh sửa ảnh bằng…" "Hiển thị ngăn công cụ" "Mở rộng ngăn công cụ" "Thu gọn ngăn công cụ" @@ -438,7 +439,10 @@ "Thêm ghi chú văn bản" "Xem trực tiếp trên máy ảnh" "Không sử dụng được máy ảnh vì Science Journal không có quyền truy cập vào máy ảnh." - "Không sử dụng được thư viện ảnh vì Science Journal không có quyền truy cập vào thư viện ảnh." - - + "Không sử dụng được thư viện ảnh của bạn do ứng dụng Science Journal không có quyền truy cập vào thư viện." + "Mở cài đặt" + "Hiện thí nghiệm đã lưu trữ" + "Ẩn thí nghiệm đã lưu trữ" + "Ẩn bản ghi đã lưu trữ" + "Ảnh chụp nhanh cảm biến" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml index fe4b7714..3a6c01ac 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml @@ -200,7 +200,7 @@ "物体保持静止不动或匀速移动(在移动状态下)的倾向称之为惯性。牛顿第一定律正式提出了这个观点:除非有不平衡的力作用于物体,否则物体会保持匀速运动或静止状态。\n\n如果不平衡的力改变了物体的运动状态,我们就会说物体获得了加速度:速率或速度发生了改变。加速、减速或改变方向都会带来加速度。加速度通过一定时间内的速率(每秒米数)变化来衡量(也就是米/秒²)。\n\n您的手机配有计算这些运动变化的设备 - 加速计。在加速计内部有处于悬浮状态的微粒,这些微粒可以自由移动。手机运动状态的变化会使这些微粒移动,如同您坐在汽车中,汽车突然刹车时,您的头会不由自主前倾一样。通过计算这些微粒的移动情况,手机中的加速计可以检测自身的运动状态和方向变化,从而能够轻松将手机屏幕从横屏模式切换为纵向模式,方便您玩游戏或进行其他活动。" "您可能注意到了 Z 轴上持续存在的加速度,即使手机仍放在桌子上也是如此。这是我们在地球表面上由于重力所体验到的加速度,约为 9.8 米/秒²。" "声音是通过振动产生的。例如,人的声音是喉咙中的声带振动发出的。这些振动产生了交替出现的高气压区和低气压区,并向外传播,就如将鹅卵石扔进池塘形成不断扩大的环形涟漪一样。" - "所有声音都可以从频率和强度两个角度进行描述。\n\n强度(以分贝为单位)就是您在此使用科学日志测量的方面。强度(也称为响度)取决于振动物体每次振动时移动的距离;响度增大,我们听到的声音强度也越大。\n\n声波的频率(也称为音高或音色)等于其振动频率。物体振动越快,发出的声音的音高就越高。科学日志不会测量频率,仅测量响度。\n\n人们将人耳平均可以分辨的最小声音定义为 0 分贝。日常交谈的声音约为 60 分贝。超过 140 分贝的声音会使人耳产生痛感,但会对人体造成伤害的声音并不一定会带来痛感。持续暴露在声音为 90 分贝(大约是真空吸尘器的响度)的环境中会使人逐渐丧失听力。\n\n分贝的计量是呈对数级增加的,有一点欺骗性:40 分贝声源的强度并非 20 分贝声源的两倍,而是 100 倍。另外,如果一个闹钟的响度是 70 分贝,那么同时响铃的两个闹钟发出的响声不是 140 分贝,而是 73 分贝。这种计量方式确实有点奇怪。\n\n10 分贝相当于落叶发出的沙沙声\n20 分贝相当于 5 英尺之外的低语\n30 分贝相当于低声耳语\n50 分贝相当于下雨的声音\n60 相当于正常交谈的声音\n90 分贝相当于搅拌器发出的声音\n100 分贝相当于汽车未安装消声器的情况下发出的声音\n110 分贝相当于在耳边喊叫的声音\n120 分贝相当于打雷发出的声音\n130 分贝相当于电钻发出的声音\n140 分贝相当于飞机起飞的声音" + "所有声音都可以从频率和强度两个角度进行描述。\n\n在本次实验中,你要使用科学日志测量的是强度,以分贝 (dB) 为单位。强度(或响度)取决于振动物体每次振动时移动的距离;我们听到的更大的声音强度表现为更高的响度。\n\n声波的频率(或者音高或音色)等于其振动频率。物体振动越快,发出的声音的音高就越高。科学日志不会测量频率,仅测量响度。\n\n值得注意的是,由于设计原因,你设备中的麦克风能够灵敏地感应一段时间内声波的变化,而非每个声波的绝对振幅大小。我们尽量选择了可能会产生与下方显示的参考数字接似的代码,但是,每台设备给出的数字可能仍会持续性地较高或较低。科学家们通常会使用一个已知的测量结果来对这类传感器进行校准。目前,科学日志可以比较你下次乘坐火车与参加摇滚音乐会时哪个声音更大。不过,体验这两项活动时,你必须携带同一部手机,只有这样才有可比性。\n\n需要注意的另一点是,“声强”、“声强度级”和“声压”之间有重要区别。在这里,我们把它们当成一回事,但如果你想要深入研究,可以参阅网上大量的资源来了解它们之间的区别。\n\n人们将人耳平均可以分辨的最小声音定义为 0 分贝。日常交谈的声音约为 60 分贝。超过 140 分贝的声音会使人耳产生痛感,但会对人体造成伤害的声音并不一定会带来痛感。持续暴露在声音为 90 分贝(大约是真空吸尘器的响度)的环境中会使人逐渐丧失听力。\n\n分贝的计量是以对数级增加的,有一点欺骗性:40 分贝声源的强度并非 20 分贝声源的两倍,而是 100 倍。另外,如果一个闹钟的响度是 70 分贝,那么同时响铃的两个闹钟发出的响声不是 140 分贝,而是 73 分贝。这种计量方式确实有点奇怪。\n\n10 分贝相当于落叶发出的沙沙声\n20 分贝相当于 5 英尺之外的低语\n30 分贝相当于低声耳语\n50 分贝相当于下雨的声音\n60 分贝相当于正常交谈的声音\n90 分贝相当于搅拌器发出的声音\n100 分贝相当于汽车未安装消声器的情况下发出的声音\n110 分贝相当于在耳边喊叫的声音\n120 分贝相当于打雷发出的声音\n130 分贝相当于手持式凿岩机发出的声音\n140 分贝相当于飞机起飞的声音" "转/分钟 (RPM) 是衡量一分钟内绕固定轴旋转的频率的方法。\n\n当您启动风铃时,它会使编码器码盘旋转:" "这会产生传感器检测到的明亮和黑暗时段(在科学日志中记录为旋转)。" "此处所示的数据来自通过蓝牙与手机进行通信的外部传感器。\n\n其中的值显示的是直接来自您的微型控制器的原始百分比读数。这通常是传感器内部电压下降的百分比。" @@ -232,6 +232,7 @@ "下一个传感器:%s" "添加新备注" "已删除备注" + "已删除记录" "撤消" "为本次记录添加备注" "添加图片备注" @@ -430,7 +431,7 @@ "选择照片" "照片拍摄日期:%s" "已选择" - "使用以下应用编辑图片…" + "选择用于修改照片的应用…" "显示工具箱" "展开工具箱" "收起工具箱" @@ -438,7 +439,10 @@ "添加文字备注" "摄像头取景器预览" "无法使用相机,因为科学日志没有对它的访问权限。" - "无法使用照片图库,因为科学日志没有对它的访问权限。" - - + "无法使用照片图库,因为科学日志没有使用权限。" + "打开设置" + "显示已归档的实验" + "隐藏已归档的实验" + "隐藏已归档的记录" + "传感器快照" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml index 03681625..3b70c4ce 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml @@ -200,7 +200,7 @@ "物體在原地保持不動、或在移動過程中持續移動的趨勢,稱為慣性。牛頓第一定律正式闡述了這個概念:除非施加不平衡力,否則物體的移動或靜止狀態不會改變。\n\n如果不平衡力造成物件輕微移動,就稱為物體「加速」,表示物體的速度或速率有變化 (無論是因速度增加、減緩或改變方向所造成)。加速度是指速度 (單位為 m/s) 之於時間的變化率,單位為 m/s²。\n\n手機裡的加速計可用於測量移動中的加速度變化。加速計內含有可任意移動的細小懸浮物質,運動產生變化時,這些物質就會隨之移動,就像人的頭部會在緊急煞車時往前傾一樣。只要測量這些物質的慣性移動,手機裡的加速計就能偵測運動與定向的變化,方便您將螢幕從橫向切換成縱向模式、在手機上玩遊戲或進行其他操作。" "您可能會發現,即使將手機靜置在桌面上,Z 軸的加速度仍然持續存在。這是地球表面上因重力牽引產生的加速度,大約為 9.8 m/s²。" "我們聽到的聲音是由空氣振動所產生。舉例來說,喉嚨的聲帶振動就會發出聲音。這些振動會產生向外移動的高氣壓和低氣壓,形成多個彼此交會的區域,原理類似把石子扔進池塘後形成的擴散漣漪。" - "所有聲音都能以頻率和強度來表示。\n\n強度是科學日誌使用的測量數值,以分貝 (dB) 為單位。強度或響度皆取決於物體振動時移動的距離。響度越大,人耳聽到的聲音越強。\n\n聲波的頻率、音高或音調相當於物體的振動速率。物體振動得越快,產生的音高也越高。科學日誌中不提供測量頻率,只能測量聲音的響度。\n\n人耳勉強能聽見的聲音強度定義為 0 分貝,一般談話約為 60 分貝,超過 140 分貝的聲音則會令人耳感到疼痛。但即使是不會引發耳朵疼痛的聲音,也可能對人有害。持續暴露在 90 分貝 (約等於吸塵器的響度) 的環境中,最終會導致聽力衰退。\n\n分貝的規模為對數性質,因此不太容易計算:40 分貝的聲源強度並不是 20 分貝聲源的 2 倍,而是 100 倍。另外,如果鬧鐘的聲音強度是 70 分貝,由兩個鬧鐘產生的聲音強度並不是 140 分貝,而是 73 分貝。誠如先前所述,分貝規模的計算方式較為繁複。\n\n10 dB 微風吹動樹葉的沙沙聲 \n20 dB 5 呎外的低語聲 \n30 dB 輕聲說話 \n50 dB 下雨聲 \n60 dB 一般談話 \n90 dB 果汁機的聲音 \n100 dB 未裝消音器的汽車聲 \n110 dB 在耳邊尖叫的聲音 \n120 dB 雷聲 \n130 dB 電鑽聲 \n140 dB 飛機起飛的聲音" + "所有聲音都能以頻率和強度來表示。\n\n強度是科學日誌使用的測量基準,以分貝 (dB) 為單位。強度 (又稱響度) 取決於物體振動時移動的距離。強度越高,人耳聽到的聲音也就越響亮。\n\n聲波的頻率 (亦即音高或音調) 相當於物體的振動速率。物體振動得越快,產生的音高也越高。科學日誌無法測量頻率,只能測量聲音的響度。\n\n雖然行動裝置的麥克風非常靈敏,能夠偵測聲波在一段時間內產生的變化,但無法測量每段音波的絕對大小。我們試著從程式設計上著手,讓各種裝置產生的數值盡可能接近下方的參考數值,但不同裝置得出的數值仍可能有高有低 (同一部裝置測出的數值高低則是一致的)。科學家通常會藉由調校感測器,讓得出的結果符合已知的數值。現階段來說,科學日誌能讓你知道某一班火車的音量是否超越某一場搖滾音樂會,但前提是你必須使用同一支手機來測量這兩種情境中的數據。\n\n另外,也請留意「聲音強度」、「聲強級別」和「聲壓」三者之間的差異。雖然我們在這裡將這三者一視同仁,但如要深入探究箇中的差異,網路上有許多相關資料可供參考。\n\n人耳勉強能聽見的聲音強度定義為 0 分貝,一般談話約為 60 分貝,超過 140 分貝的聲音則會令人耳感到疼痛。但即使是不會引發耳朵疼痛的聲音,也可能對人有害。持續暴露在 90 分貝 (約等於吸塵器的響度) 的環境中,最終可能會導致聽力衰退。\n\n分貝的大小屬於對數性質,因此不太容易計算:40 分貝的聲源強度並不是 20 分貝聲源的 2 倍,而是 100 倍。同理,假設鬧鐘的聲音強度是 70 分貝,兩個鬧鐘產生的聲音強度並不是 140 分貝,而是 73 分貝。分貝強弱的計算方式難以一言以蔽之。\n\n微風吹動樹葉的沙沙聲約為 10 分貝\n5 呎外的低語聲約為 20 分貝\n輕聲說話約為 30 分貝\n下雨聲約為 50 分貝\n一般談話約為 60 分貝\n果汁機的聲音約為 90 分貝\n未裝消音器的汽車聲約為 100 分貝\n在耳邊尖叫的聲音約為 110 分貝\n雷聲約為 120 分貝\n電鑽聲約為 130 分貝\n飛機起飛的聲音約為 140 分貝" "每分鐘旋轉次數 (RPM) 可測量定軸在 1 分鐘內的旋轉頻率。\n\n風動裝置開始旋轉時,編碼器碟片也會一併轉動 (如下圖):" "這會在感測器上產生斷斷續續的光影,科學日誌則會根據光影的規律來判讀旋轉的次數。" "這個畫面會顯示外部感測器透過藍牙傳送到手機的資料。\n\n資料中顯示的值是微控器傳送的原始讀數百分比 (通常是電流通過感測器時的電壓百分比)。" @@ -232,6 +232,7 @@ "下一個感測器:%s" "加入新的附註" "已刪除附註" + "已刪除紀錄" "復原" "為這項紀錄新增附註" "拍攝附註圖片" @@ -430,7 +431,7 @@ "選擇相片" "拍攝於 %s" "已選取" - "選擇相片編輯程式..." + "選擇相片編輯程式…" "顯示工具導覽匣" "展開工具導覽匣" "收合工具導覽匣" @@ -438,7 +439,10 @@ "新增文字附註" "相機即時預覽功能" "由於「科學日誌」沒有相機的存取權,因此無法使用相機。" - "由於「科學日誌」沒有照片圖庫的存取權,因此無法使用你的照片圖庫。" - - + "由於「科學日誌」沒有圖片庫的存取權,因此無法使用你的圖片庫。" + "開啟設定" + "顯示已封存的實驗" + "隱藏已封存的實驗" + "隱藏已封存的紀錄" + "感測器數據匯報" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml index 03681625..3b70c4ce 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml @@ -200,7 +200,7 @@ "物體在原地保持不動、或在移動過程中持續移動的趨勢,稱為慣性。牛頓第一定律正式闡述了這個概念:除非施加不平衡力,否則物體的移動或靜止狀態不會改變。\n\n如果不平衡力造成物件輕微移動,就稱為物體「加速」,表示物體的速度或速率有變化 (無論是因速度增加、減緩或改變方向所造成)。加速度是指速度 (單位為 m/s) 之於時間的變化率,單位為 m/s²。\n\n手機裡的加速計可用於測量移動中的加速度變化。加速計內含有可任意移動的細小懸浮物質,運動產生變化時,這些物質就會隨之移動,就像人的頭部會在緊急煞車時往前傾一樣。只要測量這些物質的慣性移動,手機裡的加速計就能偵測運動與定向的變化,方便您將螢幕從橫向切換成縱向模式、在手機上玩遊戲或進行其他操作。" "您可能會發現,即使將手機靜置在桌面上,Z 軸的加速度仍然持續存在。這是地球表面上因重力牽引產生的加速度,大約為 9.8 m/s²。" "我們聽到的聲音是由空氣振動所產生。舉例來說,喉嚨的聲帶振動就會發出聲音。這些振動會產生向外移動的高氣壓和低氣壓,形成多個彼此交會的區域,原理類似把石子扔進池塘後形成的擴散漣漪。" - "所有聲音都能以頻率和強度來表示。\n\n強度是科學日誌使用的測量數值,以分貝 (dB) 為單位。強度或響度皆取決於物體振動時移動的距離。響度越大,人耳聽到的聲音越強。\n\n聲波的頻率、音高或音調相當於物體的振動速率。物體振動得越快,產生的音高也越高。科學日誌中不提供測量頻率,只能測量聲音的響度。\n\n人耳勉強能聽見的聲音強度定義為 0 分貝,一般談話約為 60 分貝,超過 140 分貝的聲音則會令人耳感到疼痛。但即使是不會引發耳朵疼痛的聲音,也可能對人有害。持續暴露在 90 分貝 (約等於吸塵器的響度) 的環境中,最終會導致聽力衰退。\n\n分貝的規模為對數性質,因此不太容易計算:40 分貝的聲源強度並不是 20 分貝聲源的 2 倍,而是 100 倍。另外,如果鬧鐘的聲音強度是 70 分貝,由兩個鬧鐘產生的聲音強度並不是 140 分貝,而是 73 分貝。誠如先前所述,分貝規模的計算方式較為繁複。\n\n10 dB 微風吹動樹葉的沙沙聲 \n20 dB 5 呎外的低語聲 \n30 dB 輕聲說話 \n50 dB 下雨聲 \n60 dB 一般談話 \n90 dB 果汁機的聲音 \n100 dB 未裝消音器的汽車聲 \n110 dB 在耳邊尖叫的聲音 \n120 dB 雷聲 \n130 dB 電鑽聲 \n140 dB 飛機起飛的聲音" + "所有聲音都能以頻率和強度來表示。\n\n強度是科學日誌使用的測量基準,以分貝 (dB) 為單位。強度 (又稱響度) 取決於物體振動時移動的距離。強度越高,人耳聽到的聲音也就越響亮。\n\n聲波的頻率 (亦即音高或音調) 相當於物體的振動速率。物體振動得越快,產生的音高也越高。科學日誌無法測量頻率,只能測量聲音的響度。\n\n雖然行動裝置的麥克風非常靈敏,能夠偵測聲波在一段時間內產生的變化,但無法測量每段音波的絕對大小。我們試著從程式設計上著手,讓各種裝置產生的數值盡可能接近下方的參考數值,但不同裝置得出的數值仍可能有高有低 (同一部裝置測出的數值高低則是一致的)。科學家通常會藉由調校感測器,讓得出的結果符合已知的數值。現階段來說,科學日誌能讓你知道某一班火車的音量是否超越某一場搖滾音樂會,但前提是你必須使用同一支手機來測量這兩種情境中的數據。\n\n另外,也請留意「聲音強度」、「聲強級別」和「聲壓」三者之間的差異。雖然我們在這裡將這三者一視同仁,但如要深入探究箇中的差異,網路上有許多相關資料可供參考。\n\n人耳勉強能聽見的聲音強度定義為 0 分貝,一般談話約為 60 分貝,超過 140 分貝的聲音則會令人耳感到疼痛。但即使是不會引發耳朵疼痛的聲音,也可能對人有害。持續暴露在 90 分貝 (約等於吸塵器的響度) 的環境中,最終可能會導致聽力衰退。\n\n分貝的大小屬於對數性質,因此不太容易計算:40 分貝的聲源強度並不是 20 分貝聲源的 2 倍,而是 100 倍。同理,假設鬧鐘的聲音強度是 70 分貝,兩個鬧鐘產生的聲音強度並不是 140 分貝,而是 73 分貝。分貝強弱的計算方式難以一言以蔽之。\n\n微風吹動樹葉的沙沙聲約為 10 分貝\n5 呎外的低語聲約為 20 分貝\n輕聲說話約為 30 分貝\n下雨聲約為 50 分貝\n一般談話約為 60 分貝\n果汁機的聲音約為 90 分貝\n未裝消音器的汽車聲約為 100 分貝\n在耳邊尖叫的聲音約為 110 分貝\n雷聲約為 120 分貝\n電鑽聲約為 130 分貝\n飛機起飛的聲音約為 140 分貝" "每分鐘旋轉次數 (RPM) 可測量定軸在 1 分鐘內的旋轉頻率。\n\n風動裝置開始旋轉時,編碼器碟片也會一併轉動 (如下圖):" "這會在感測器上產生斷斷續續的光影,科學日誌則會根據光影的規律來判讀旋轉的次數。" "這個畫面會顯示外部感測器透過藍牙傳送到手機的資料。\n\n資料中顯示的值是微控器傳送的原始讀數百分比 (通常是電流通過感測器時的電壓百分比)。" @@ -232,6 +232,7 @@ "下一個感測器:%s" "加入新的附註" "已刪除附註" + "已刪除紀錄" "復原" "為這項紀錄新增附註" "拍攝附註圖片" @@ -430,7 +431,7 @@ "選擇相片" "拍攝於 %s" "已選取" - "選擇相片編輯程式..." + "選擇相片編輯程式…" "顯示工具導覽匣" "展開工具導覽匣" "收合工具導覽匣" @@ -438,7 +439,10 @@ "新增文字附註" "相機即時預覽功能" "由於「科學日誌」沒有相機的存取權,因此無法使用相機。" - "由於「科學日誌」沒有照片圖庫的存取權,因此無法使用你的照片圖庫。" - - + "由於「科學日誌」沒有圖片庫的存取權,因此無法使用你的圖片庫。" + "開啟設定" + "顯示已封存的實驗" + "隱藏已封存的實驗" + "隱藏已封存的紀錄" + "感測器數據匯報" From a292945b21aa47b9b6879db808f250bef588d114 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:34:52 -0700 Subject: [PATCH 014/587] Implemented sound frequency sensor Change-Id: Id69a4db56a992453272d66aa446ae9c066c79bf8 PiperOrigin-RevId: 190824753 --- .../whistlepunk/DevOptionsFragment.java | 5 + .../whistlepunk/RecordFragment.java | 41 ++-- .../whistlepunk/SensorAnimationBehavior.java | 80 ++++++- .../SensorAppearanceProviderImpl.java | 11 + .../whistlepunk/SensorCardPresenter.java | 8 +- .../whistlepunk/SensorRegistry.java | 5 + .../sensors/SoundFrequencySensor.java | 209 ++++++++++++++++++ .../main/res/drawable-hdpi/frequency_high.png | Bin 0 -> 555 bytes .../main/res/drawable-hdpi/frequency_low.png | Bin 0 -> 520 bytes .../res/drawable-hdpi/frequency_piano_1.png | Bin 0 -> 520 bytes .../res/drawable-hdpi/frequency_piano_10.png | Bin 0 -> 608 bytes .../res/drawable-hdpi/frequency_piano_11.png | Bin 0 -> 491 bytes .../res/drawable-hdpi/frequency_piano_12.png | Bin 0 -> 659 bytes .../res/drawable-hdpi/frequency_piano_13.png | Bin 0 -> 497 bytes .../res/drawable-hdpi/frequency_piano_14.png | Bin 0 -> 647 bytes .../res/drawable-hdpi/frequency_piano_15.png | Bin 0 -> 484 bytes .../res/drawable-hdpi/frequency_piano_16.png | Bin 0 -> 488 bytes .../res/drawable-hdpi/frequency_piano_17.png | Bin 0 -> 680 bytes .../res/drawable-hdpi/frequency_piano_18.png | Bin 0 -> 494 bytes .../res/drawable-hdpi/frequency_piano_19.png | Bin 0 -> 623 bytes .../res/drawable-hdpi/frequency_piano_2.png | Bin 0 -> 672 bytes .../res/drawable-hdpi/frequency_piano_20.png | Bin 0 -> 471 bytes .../res/drawable-hdpi/frequency_piano_21.png | Bin 0 -> 470 bytes .../res/drawable-hdpi/frequency_piano_22.png | Bin 0 -> 633 bytes .../res/drawable-hdpi/frequency_piano_23.png | Bin 0 -> 517 bytes .../res/drawable-hdpi/frequency_piano_24.png | Bin 0 -> 700 bytes .../res/drawable-hdpi/frequency_piano_25.png | Bin 0 -> 506 bytes .../res/drawable-hdpi/frequency_piano_26.png | Bin 0 -> 681 bytes .../res/drawable-hdpi/frequency_piano_27.png | Bin 0 -> 505 bytes .../res/drawable-hdpi/frequency_piano_28.png | Bin 0 -> 502 bytes .../res/drawable-hdpi/frequency_piano_29.png | Bin 0 -> 676 bytes .../res/drawable-hdpi/frequency_piano_3.png | Bin 0 -> 509 bytes .../res/drawable-hdpi/frequency_piano_30.png | Bin 0 -> 510 bytes .../res/drawable-hdpi/frequency_piano_31.png | Bin 0 -> 608 bytes .../res/drawable-hdpi/frequency_piano_32.png | Bin 0 -> 473 bytes .../res/drawable-hdpi/frequency_piano_33.png | Bin 0 -> 467 bytes .../res/drawable-hdpi/frequency_piano_34.png | Bin 0 -> 633 bytes .../res/drawable-hdpi/frequency_piano_35.png | Bin 0 -> 505 bytes .../res/drawable-hdpi/frequency_piano_36.png | Bin 0 -> 698 bytes .../res/drawable-hdpi/frequency_piano_37.png | Bin 0 -> 506 bytes .../res/drawable-hdpi/frequency_piano_38.png | Bin 0 -> 666 bytes .../res/drawable-hdpi/frequency_piano_39.png | Bin 0 -> 499 bytes .../res/drawable-hdpi/frequency_piano_4.png | Bin 0 -> 480 bytes .../res/drawable-hdpi/frequency_piano_40.png | Bin 0 -> 498 bytes .../res/drawable-hdpi/frequency_piano_41.png | Bin 0 -> 674 bytes .../res/drawable-hdpi/frequency_piano_42.png | Bin 0 -> 517 bytes .../res/drawable-hdpi/frequency_piano_43.png | Bin 0 -> 627 bytes .../res/drawable-hdpi/frequency_piano_44.png | Bin 0 -> 487 bytes .../res/drawable-hdpi/frequency_piano_45.png | Bin 0 -> 492 bytes .../res/drawable-hdpi/frequency_piano_46.png | Bin 0 -> 634 bytes .../res/drawable-hdpi/frequency_piano_47.png | Bin 0 -> 526 bytes .../res/drawable-hdpi/frequency_piano_48.png | Bin 0 -> 691 bytes .../res/drawable-hdpi/frequency_piano_49.png | Bin 0 -> 504 bytes .../res/drawable-hdpi/frequency_piano_5.png | Bin 0 -> 643 bytes .../res/drawable-hdpi/frequency_piano_50.png | Bin 0 -> 696 bytes .../res/drawable-hdpi/frequency_piano_51.png | Bin 0 -> 513 bytes .../res/drawable-hdpi/frequency_piano_52.png | Bin 0 -> 493 bytes .../res/drawable-hdpi/frequency_piano_53.png | Bin 0 -> 655 bytes .../res/drawable-hdpi/frequency_piano_54.png | Bin 0 -> 507 bytes .../res/drawable-hdpi/frequency_piano_55.png | Bin 0 -> 598 bytes .../res/drawable-hdpi/frequency_piano_56.png | Bin 0 -> 469 bytes .../res/drawable-hdpi/frequency_piano_57.png | Bin 0 -> 461 bytes .../res/drawable-hdpi/frequency_piano_58.png | Bin 0 -> 612 bytes .../res/drawable-hdpi/frequency_piano_59.png | Bin 0 -> 510 bytes .../res/drawable-hdpi/frequency_piano_6.png | Bin 0 -> 483 bytes .../res/drawable-hdpi/frequency_piano_60.png | Bin 0 -> 685 bytes .../res/drawable-hdpi/frequency_piano_61.png | Bin 0 -> 500 bytes .../res/drawable-hdpi/frequency_piano_62.png | Bin 0 -> 650 bytes .../res/drawable-hdpi/frequency_piano_63.png | Bin 0 -> 497 bytes .../res/drawable-hdpi/frequency_piano_64.png | Bin 0 -> 506 bytes .../res/drawable-hdpi/frequency_piano_65.png | Bin 0 -> 697 bytes .../res/drawable-hdpi/frequency_piano_66.png | Bin 0 -> 515 bytes .../res/drawable-hdpi/frequency_piano_67.png | Bin 0 -> 637 bytes .../res/drawable-hdpi/frequency_piano_68.png | Bin 0 -> 494 bytes .../res/drawable-hdpi/frequency_piano_69.png | Bin 0 -> 487 bytes .../res/drawable-hdpi/frequency_piano_7.png | Bin 0 -> 591 bytes .../res/drawable-hdpi/frequency_piano_70.png | Bin 0 -> 645 bytes .../res/drawable-hdpi/frequency_piano_71.png | Bin 0 -> 517 bytes .../res/drawable-hdpi/frequency_piano_72.png | Bin 0 -> 716 bytes .../res/drawable-hdpi/frequency_piano_73.png | Bin 0 -> 516 bytes .../res/drawable-hdpi/frequency_piano_74.png | Bin 0 -> 701 bytes .../res/drawable-hdpi/frequency_piano_75.png | Bin 0 -> 521 bytes .../res/drawable-hdpi/frequency_piano_76.png | Bin 0 -> 483 bytes .../res/drawable-hdpi/frequency_piano_77.png | Bin 0 -> 674 bytes .../res/drawable-hdpi/frequency_piano_78.png | Bin 0 -> 497 bytes .../res/drawable-hdpi/frequency_piano_79.png | Bin 0 -> 627 bytes .../res/drawable-hdpi/frequency_piano_8.png | Bin 0 -> 447 bytes .../res/drawable-hdpi/frequency_piano_80.png | Bin 0 -> 459 bytes .../res/drawable-hdpi/frequency_piano_81.png | Bin 0 -> 454 bytes .../res/drawable-hdpi/frequency_piano_82.png | Bin 0 -> 628 bytes .../res/drawable-hdpi/frequency_piano_83.png | Bin 0 -> 502 bytes .../res/drawable-hdpi/frequency_piano_84.png | Bin 0 -> 688 bytes .../res/drawable-hdpi/frequency_piano_85.png | Bin 0 -> 501 bytes .../res/drawable-hdpi/frequency_piano_86.png | Bin 0 -> 674 bytes .../res/drawable-hdpi/frequency_piano_87.png | Bin 0 -> 494 bytes .../res/drawable-hdpi/frequency_piano_88.png | Bin 0 -> 510 bytes .../res/drawable-hdpi/frequency_piano_9.png | Bin 0 -> 445 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 0 -> 153 bytes .../main/res/drawable-mdpi/frequency_high.png | Bin 0 -> 345 bytes .../main/res/drawable-mdpi/frequency_low.png | Bin 0 -> 330 bytes .../res/drawable-mdpi/frequency_piano_1.png | Bin 0 -> 328 bytes .../res/drawable-mdpi/frequency_piano_10.png | Bin 0 -> 393 bytes .../res/drawable-mdpi/frequency_piano_11.png | Bin 0 -> 307 bytes .../res/drawable-mdpi/frequency_piano_12.png | Bin 0 -> 443 bytes .../res/drawable-mdpi/frequency_piano_13.png | Bin 0 -> 315 bytes .../res/drawable-mdpi/frequency_piano_14.png | Bin 0 -> 412 bytes .../res/drawable-mdpi/frequency_piano_15.png | Bin 0 -> 295 bytes .../res/drawable-mdpi/frequency_piano_16.png | Bin 0 -> 308 bytes .../res/drawable-mdpi/frequency_piano_17.png | Bin 0 -> 445 bytes .../res/drawable-mdpi/frequency_piano_18.png | Bin 0 -> 306 bytes .../res/drawable-mdpi/frequency_piano_19.png | Bin 0 -> 411 bytes .../res/drawable-mdpi/frequency_piano_2.png | Bin 0 -> 434 bytes .../res/drawable-mdpi/frequency_piano_20.png | Bin 0 -> 297 bytes .../res/drawable-mdpi/frequency_piano_21.png | Bin 0 -> 295 bytes .../res/drawable-mdpi/frequency_piano_22.png | Bin 0 -> 411 bytes .../res/drawable-mdpi/frequency_piano_23.png | Bin 0 -> 336 bytes .../res/drawable-mdpi/frequency_piano_24.png | Bin 0 -> 453 bytes .../res/drawable-mdpi/frequency_piano_25.png | Bin 0 -> 329 bytes .../res/drawable-mdpi/frequency_piano_26.png | Bin 0 -> 432 bytes .../res/drawable-mdpi/frequency_piano_27.png | Bin 0 -> 316 bytes .../res/drawable-mdpi/frequency_piano_28.png | Bin 0 -> 319 bytes .../res/drawable-mdpi/frequency_piano_29.png | Bin 0 -> 436 bytes .../res/drawable-mdpi/frequency_piano_3.png | Bin 0 -> 316 bytes .../res/drawable-mdpi/frequency_piano_30.png | Bin 0 -> 314 bytes .../res/drawable-mdpi/frequency_piano_31.png | Bin 0 -> 406 bytes .../res/drawable-mdpi/frequency_piano_32.png | Bin 0 -> 298 bytes .../res/drawable-mdpi/frequency_piano_33.png | Bin 0 -> 304 bytes .../res/drawable-mdpi/frequency_piano_34.png | Bin 0 -> 412 bytes .../res/drawable-mdpi/frequency_piano_35.png | Bin 0 -> 330 bytes .../res/drawable-mdpi/frequency_piano_36.png | Bin 0 -> 453 bytes .../res/drawable-mdpi/frequency_piano_37.png | Bin 0 -> 327 bytes .../res/drawable-mdpi/frequency_piano_38.png | Bin 0 -> 436 bytes .../res/drawable-mdpi/frequency_piano_39.png | Bin 0 -> 312 bytes .../res/drawable-mdpi/frequency_piano_4.png | Bin 0 -> 305 bytes .../res/drawable-mdpi/frequency_piano_40.png | Bin 0 -> 329 bytes .../res/drawable-mdpi/frequency_piano_41.png | Bin 0 -> 444 bytes .../res/drawable-mdpi/frequency_piano_42.png | Bin 0 -> 326 bytes .../res/drawable-mdpi/frequency_piano_43.png | Bin 0 -> 407 bytes .../res/drawable-mdpi/frequency_piano_44.png | Bin 0 -> 303 bytes .../res/drawable-mdpi/frequency_piano_45.png | Bin 0 -> 303 bytes .../res/drawable-mdpi/frequency_piano_46.png | Bin 0 -> 417 bytes .../res/drawable-mdpi/frequency_piano_47.png | Bin 0 -> 329 bytes .../res/drawable-mdpi/frequency_piano_48.png | Bin 0 -> 451 bytes .../res/drawable-mdpi/frequency_piano_49.png | Bin 0 -> 325 bytes .../res/drawable-mdpi/frequency_piano_5.png | Bin 0 -> 425 bytes .../res/drawable-mdpi/frequency_piano_50.png | Bin 0 -> 432 bytes .../res/drawable-mdpi/frequency_piano_51.png | Bin 0 -> 323 bytes .../res/drawable-mdpi/frequency_piano_52.png | Bin 0 -> 319 bytes .../res/drawable-mdpi/frequency_piano_53.png | Bin 0 -> 433 bytes .../res/drawable-mdpi/frequency_piano_54.png | Bin 0 -> 317 bytes .../res/drawable-mdpi/frequency_piano_55.png | Bin 0 -> 405 bytes .../res/drawable-mdpi/frequency_piano_56.png | Bin 0 -> 294 bytes .../res/drawable-mdpi/frequency_piano_57.png | Bin 0 -> 292 bytes .../res/drawable-mdpi/frequency_piano_58.png | Bin 0 -> 404 bytes .../res/drawable-mdpi/frequency_piano_59.png | Bin 0 -> 325 bytes .../res/drawable-mdpi/frequency_piano_6.png | Bin 0 -> 297 bytes .../res/drawable-mdpi/frequency_piano_60.png | Bin 0 -> 445 bytes .../res/drawable-mdpi/frequency_piano_61.png | Bin 0 -> 314 bytes .../res/drawable-mdpi/frequency_piano_62.png | Bin 0 -> 419 bytes .../res/drawable-mdpi/frequency_piano_63.png | Bin 0 -> 319 bytes .../res/drawable-mdpi/frequency_piano_64.png | Bin 0 -> 314 bytes .../res/drawable-mdpi/frequency_piano_65.png | Bin 0 -> 449 bytes .../res/drawable-mdpi/frequency_piano_66.png | Bin 0 -> 314 bytes .../res/drawable-mdpi/frequency_piano_67.png | Bin 0 -> 413 bytes .../res/drawable-mdpi/frequency_piano_68.png | Bin 0 -> 303 bytes .../res/drawable-mdpi/frequency_piano_69.png | Bin 0 -> 306 bytes .../res/drawable-mdpi/frequency_piano_7.png | Bin 0 -> 388 bytes .../res/drawable-mdpi/frequency_piano_70.png | Bin 0 -> 418 bytes .../res/drawable-mdpi/frequency_piano_71.png | Bin 0 -> 331 bytes .../res/drawable-mdpi/frequency_piano_72.png | Bin 0 -> 458 bytes .../res/drawable-mdpi/frequency_piano_73.png | Bin 0 -> 336 bytes .../res/drawable-mdpi/frequency_piano_74.png | Bin 0 -> 448 bytes .../res/drawable-mdpi/frequency_piano_75.png | Bin 0 -> 327 bytes .../res/drawable-mdpi/frequency_piano_76.png | Bin 0 -> 312 bytes .../res/drawable-mdpi/frequency_piano_77.png | Bin 0 -> 434 bytes .../res/drawable-mdpi/frequency_piano_78.png | Bin 0 -> 306 bytes .../res/drawable-mdpi/frequency_piano_79.png | Bin 0 -> 399 bytes .../res/drawable-mdpi/frequency_piano_8.png | Bin 0 -> 278 bytes .../res/drawable-mdpi/frequency_piano_80.png | Bin 0 -> 286 bytes .../res/drawable-mdpi/frequency_piano_81.png | Bin 0 -> 280 bytes .../res/drawable-mdpi/frequency_piano_82.png | Bin 0 -> 409 bytes .../res/drawable-mdpi/frequency_piano_83.png | Bin 0 -> 322 bytes .../res/drawable-mdpi/frequency_piano_84.png | Bin 0 -> 445 bytes .../res/drawable-mdpi/frequency_piano_85.png | Bin 0 -> 310 bytes .../res/drawable-mdpi/frequency_piano_86.png | Bin 0 -> 431 bytes .../res/drawable-mdpi/frequency_piano_87.png | Bin 0 -> 303 bytes .../res/drawable-mdpi/frequency_piano_88.png | Bin 0 -> 313 bytes .../res/drawable-mdpi/frequency_piano_9.png | Bin 0 -> 274 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 0 -> 122 bytes .../res/drawable-xhdpi/frequency_high.png | Bin 0 -> 762 bytes .../main/res/drawable-xhdpi/frequency_low.png | Bin 0 -> 747 bytes .../res/drawable-xhdpi/frequency_piano_1.png | Bin 0 -> 720 bytes .../res/drawable-xhdpi/frequency_piano_10.png | Bin 0 -> 883 bytes .../res/drawable-xhdpi/frequency_piano_11.png | Bin 0 -> 684 bytes .../res/drawable-xhdpi/frequency_piano_12.png | Bin 0 -> 948 bytes .../res/drawable-xhdpi/frequency_piano_13.png | Bin 0 -> 698 bytes .../res/drawable-xhdpi/frequency_piano_14.png | Bin 0 -> 927 bytes .../res/drawable-xhdpi/frequency_piano_15.png | Bin 0 -> 686 bytes .../res/drawable-xhdpi/frequency_piano_16.png | Bin 0 -> 688 bytes .../res/drawable-xhdpi/frequency_piano_17.png | Bin 0 -> 951 bytes .../res/drawable-xhdpi/frequency_piano_18.png | Bin 0 -> 700 bytes .../res/drawable-xhdpi/frequency_piano_19.png | Bin 0 -> 884 bytes .../res/drawable-xhdpi/frequency_piano_2.png | Bin 0 -> 959 bytes .../res/drawable-xhdpi/frequency_piano_20.png | Bin 0 -> 653 bytes .../res/drawable-xhdpi/frequency_piano_21.png | Bin 0 -> 650 bytes .../res/drawable-xhdpi/frequency_piano_22.png | Bin 0 -> 912 bytes .../res/drawable-xhdpi/frequency_piano_23.png | Bin 0 -> 720 bytes .../res/drawable-xhdpi/frequency_piano_24.png | Bin 0 -> 987 bytes .../res/drawable-xhdpi/frequency_piano_25.png | Bin 0 -> 709 bytes .../res/drawable-xhdpi/frequency_piano_26.png | Bin 0 -> 964 bytes .../res/drawable-xhdpi/frequency_piano_27.png | Bin 0 -> 716 bytes .../res/drawable-xhdpi/frequency_piano_28.png | Bin 0 -> 698 bytes .../res/drawable-xhdpi/frequency_piano_29.png | Bin 0 -> 953 bytes .../res/drawable-xhdpi/frequency_piano_3.png | Bin 0 -> 708 bytes .../res/drawable-xhdpi/frequency_piano_30.png | Bin 0 -> 708 bytes .../res/drawable-xhdpi/frequency_piano_31.png | Bin 0 -> 885 bytes .../res/drawable-xhdpi/frequency_piano_32.png | Bin 0 -> 663 bytes .../res/drawable-xhdpi/frequency_piano_33.png | Bin 0 -> 655 bytes .../res/drawable-xhdpi/frequency_piano_34.png | Bin 0 -> 910 bytes .../res/drawable-xhdpi/frequency_piano_35.png | Bin 0 -> 709 bytes .../res/drawable-xhdpi/frequency_piano_36.png | Bin 0 -> 984 bytes .../res/drawable-xhdpi/frequency_piano_37.png | Bin 0 -> 722 bytes .../res/drawable-xhdpi/frequency_piano_38.png | Bin 0 -> 972 bytes .../res/drawable-xhdpi/frequency_piano_39.png | Bin 0 -> 711 bytes .../res/drawable-xhdpi/frequency_piano_4.png | Bin 0 -> 678 bytes .../res/drawable-xhdpi/frequency_piano_40.png | Bin 0 -> 695 bytes .../res/drawable-xhdpi/frequency_piano_41.png | Bin 0 -> 953 bytes .../res/drawable-xhdpi/frequency_piano_42.png | Bin 0 -> 717 bytes .../res/drawable-xhdpi/frequency_piano_43.png | Bin 0 -> 880 bytes .../res/drawable-xhdpi/frequency_piano_44.png | Bin 0 -> 664 bytes .../res/drawable-xhdpi/frequency_piano_45.png | Bin 0 -> 654 bytes .../res/drawable-xhdpi/frequency_piano_46.png | Bin 0 -> 898 bytes .../res/drawable-xhdpi/frequency_piano_47.png | Bin 0 -> 705 bytes .../res/drawable-xhdpi/frequency_piano_48.png | Bin 0 -> 970 bytes .../res/drawable-xhdpi/frequency_piano_49.png | Bin 0 -> 716 bytes .../res/drawable-xhdpi/frequency_piano_5.png | Bin 0 -> 922 bytes .../res/drawable-xhdpi/frequency_piano_50.png | Bin 0 -> 943 bytes .../res/drawable-xhdpi/frequency_piano_51.png | Bin 0 -> 726 bytes .../res/drawable-xhdpi/frequency_piano_52.png | Bin 0 -> 688 bytes .../res/drawable-xhdpi/frequency_piano_53.png | Bin 0 -> 941 bytes .../res/drawable-xhdpi/frequency_piano_54.png | Bin 0 -> 700 bytes .../res/drawable-xhdpi/frequency_piano_55.png | Bin 0 -> 863 bytes .../res/drawable-xhdpi/frequency_piano_56.png | Bin 0 -> 645 bytes .../res/drawable-xhdpi/frequency_piano_57.png | Bin 0 -> 641 bytes .../res/drawable-xhdpi/frequency_piano_58.png | Bin 0 -> 890 bytes .../res/drawable-xhdpi/frequency_piano_59.png | Bin 0 -> 697 bytes .../res/drawable-xhdpi/frequency_piano_6.png | Bin 0 -> 683 bytes .../res/drawable-xhdpi/frequency_piano_60.png | Bin 0 -> 957 bytes .../res/drawable-xhdpi/frequency_piano_61.png | Bin 0 -> 705 bytes .../res/drawable-xhdpi/frequency_piano_62.png | Bin 0 -> 934 bytes .../res/drawable-xhdpi/frequency_piano_63.png | Bin 0 -> 693 bytes .../res/drawable-xhdpi/frequency_piano_64.png | Bin 0 -> 716 bytes .../res/drawable-xhdpi/frequency_piano_65.png | Bin 0 -> 976 bytes .../res/drawable-xhdpi/frequency_piano_66.png | Bin 0 -> 725 bytes .../res/drawable-xhdpi/frequency_piano_67.png | Bin 0 -> 915 bytes .../res/drawable-xhdpi/frequency_piano_68.png | Bin 0 -> 675 bytes .../res/drawable-xhdpi/frequency_piano_69.png | Bin 0 -> 673 bytes .../res/drawable-xhdpi/frequency_piano_7.png | Bin 0 -> 855 bytes .../res/drawable-xhdpi/frequency_piano_70.png | Bin 0 -> 939 bytes .../res/drawable-xhdpi/frequency_piano_71.png | Bin 0 -> 728 bytes .../res/drawable-xhdpi/frequency_piano_72.png | Bin 0 -> 1020 bytes .../res/drawable-xhdpi/frequency_piano_73.png | Bin 0 -> 739 bytes .../res/drawable-xhdpi/frequency_piano_74.png | Bin 0 -> 1003 bytes .../res/drawable-xhdpi/frequency_piano_75.png | Bin 0 -> 731 bytes .../res/drawable-xhdpi/frequency_piano_76.png | Bin 0 -> 677 bytes .../res/drawable-xhdpi/frequency_piano_77.png | Bin 0 -> 936 bytes .../res/drawable-xhdpi/frequency_piano_78.png | Bin 0 -> 684 bytes .../res/drawable-xhdpi/frequency_piano_79.png | Bin 0 -> 858 bytes .../res/drawable-xhdpi/frequency_piano_8.png | Bin 0 -> 627 bytes .../res/drawable-xhdpi/frequency_piano_80.png | Bin 0 -> 636 bytes .../res/drawable-xhdpi/frequency_piano_81.png | Bin 0 -> 629 bytes .../res/drawable-xhdpi/frequency_piano_82.png | Bin 0 -> 896 bytes .../res/drawable-xhdpi/frequency_piano_83.png | Bin 0 -> 689 bytes .../res/drawable-xhdpi/frequency_piano_84.png | Bin 0 -> 976 bytes .../res/drawable-xhdpi/frequency_piano_85.png | Bin 0 -> 697 bytes .../res/drawable-xhdpi/frequency_piano_86.png | Bin 0 -> 939 bytes .../res/drawable-xhdpi/frequency_piano_87.png | Bin 0 -> 684 bytes .../res/drawable-xhdpi/frequency_piano_88.png | Bin 0 -> 711 bytes .../res/drawable-xhdpi/frequency_piano_9.png | Bin 0 -> 618 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 0 -> 186 bytes .../res/drawable-xxhdpi/frequency_high.png | Bin 0 -> 1339 bytes .../res/drawable-xxhdpi/frequency_low.png | Bin 0 -> 1300 bytes .../res/drawable-xxhdpi/frequency_piano_1.png | Bin 0 -> 1249 bytes .../drawable-xxhdpi/frequency_piano_10.png | Bin 0 -> 1487 bytes .../drawable-xxhdpi/frequency_piano_11.png | Bin 0 -> 1167 bytes .../drawable-xxhdpi/frequency_piano_12.png | Bin 0 -> 1589 bytes .../drawable-xxhdpi/frequency_piano_13.png | Bin 0 -> 1177 bytes .../drawable-xxhdpi/frequency_piano_14.png | Bin 0 -> 1578 bytes .../drawable-xxhdpi/frequency_piano_15.png | Bin 0 -> 1171 bytes .../drawable-xxhdpi/frequency_piano_16.png | Bin 0 -> 1181 bytes .../drawable-xxhdpi/frequency_piano_17.png | Bin 0 -> 1596 bytes .../drawable-xxhdpi/frequency_piano_18.png | Bin 0 -> 1175 bytes .../drawable-xxhdpi/frequency_piano_19.png | Bin 0 -> 1507 bytes .../res/drawable-xxhdpi/frequency_piano_2.png | Bin 0 -> 1617 bytes .../drawable-xxhdpi/frequency_piano_20.png | Bin 0 -> 1112 bytes .../drawable-xxhdpi/frequency_piano_21.png | Bin 0 -> 1107 bytes .../drawable-xxhdpi/frequency_piano_22.png | Bin 0 -> 1516 bytes .../drawable-xxhdpi/frequency_piano_23.png | Bin 0 -> 1202 bytes .../drawable-xxhdpi/frequency_piano_24.png | Bin 0 -> 1619 bytes .../drawable-xxhdpi/frequency_piano_25.png | Bin 0 -> 1208 bytes .../drawable-xxhdpi/frequency_piano_26.png | Bin 0 -> 1580 bytes .../drawable-xxhdpi/frequency_piano_27.png | Bin 0 -> 1182 bytes .../drawable-xxhdpi/frequency_piano_28.png | Bin 0 -> 1192 bytes .../drawable-xxhdpi/frequency_piano_29.png | Bin 0 -> 1605 bytes .../res/drawable-xxhdpi/frequency_piano_3.png | Bin 0 -> 1232 bytes .../drawable-xxhdpi/frequency_piano_30.png | Bin 0 -> 1203 bytes .../drawable-xxhdpi/frequency_piano_31.png | Bin 0 -> 1522 bytes .../drawable-xxhdpi/frequency_piano_32.png | Bin 0 -> 1130 bytes .../drawable-xxhdpi/frequency_piano_33.png | Bin 0 -> 1127 bytes .../drawable-xxhdpi/frequency_piano_34.png | Bin 0 -> 1520 bytes .../drawable-xxhdpi/frequency_piano_35.png | Bin 0 -> 1204 bytes .../drawable-xxhdpi/frequency_piano_36.png | Bin 0 -> 1630 bytes .../drawable-xxhdpi/frequency_piano_37.png | Bin 0 -> 1206 bytes .../drawable-xxhdpi/frequency_piano_38.png | Bin 0 -> 1603 bytes .../drawable-xxhdpi/frequency_piano_39.png | Bin 0 -> 1207 bytes .../res/drawable-xxhdpi/frequency_piano_4.png | Bin 0 -> 1157 bytes .../drawable-xxhdpi/frequency_piano_40.png | Bin 0 -> 1199 bytes .../drawable-xxhdpi/frequency_piano_41.png | Bin 0 -> 1604 bytes .../drawable-xxhdpi/frequency_piano_42.png | Bin 0 -> 1231 bytes .../drawable-xxhdpi/frequency_piano_43.png | Bin 0 -> 1514 bytes .../drawable-xxhdpi/frequency_piano_44.png | Bin 0 -> 1143 bytes .../drawable-xxhdpi/frequency_piano_45.png | Bin 0 -> 1146 bytes .../drawable-xxhdpi/frequency_piano_46.png | Bin 0 -> 1521 bytes .../drawable-xxhdpi/frequency_piano_47.png | Bin 0 -> 1212 bytes .../drawable-xxhdpi/frequency_piano_48.png | Bin 0 -> 1624 bytes .../drawable-xxhdpi/frequency_piano_49.png | Bin 0 -> 1230 bytes .../res/drawable-xxhdpi/frequency_piano_5.png | Bin 0 -> 1575 bytes .../drawable-xxhdpi/frequency_piano_50.png | Bin 0 -> 1600 bytes .../drawable-xxhdpi/frequency_piano_51.png | Bin 0 -> 1226 bytes .../drawable-xxhdpi/frequency_piano_52.png | Bin 0 -> 1181 bytes .../drawable-xxhdpi/frequency_piano_53.png | Bin 0 -> 1593 bytes .../drawable-xxhdpi/frequency_piano_54.png | Bin 0 -> 1194 bytes .../drawable-xxhdpi/frequency_piano_55.png | Bin 0 -> 1517 bytes .../drawable-xxhdpi/frequency_piano_56.png | Bin 0 -> 1124 bytes .../drawable-xxhdpi/frequency_piano_57.png | Bin 0 -> 1120 bytes .../drawable-xxhdpi/frequency_piano_58.png | Bin 0 -> 1513 bytes .../drawable-xxhdpi/frequency_piano_59.png | Bin 0 -> 1199 bytes .../res/drawable-xxhdpi/frequency_piano_6.png | Bin 0 -> 1159 bytes .../drawable-xxhdpi/frequency_piano_60.png | Bin 0 -> 1610 bytes .../drawable-xxhdpi/frequency_piano_61.png | Bin 0 -> 1202 bytes .../drawable-xxhdpi/frequency_piano_62.png | Bin 0 -> 1609 bytes .../drawable-xxhdpi/frequency_piano_63.png | Bin 0 -> 1193 bytes .../drawable-xxhdpi/frequency_piano_64.png | Bin 0 -> 1219 bytes .../drawable-xxhdpi/frequency_piano_65.png | Bin 0 -> 1644 bytes .../drawable-xxhdpi/frequency_piano_66.png | Bin 0 -> 1227 bytes .../drawable-xxhdpi/frequency_piano_67.png | Bin 0 -> 1552 bytes .../drawable-xxhdpi/frequency_piano_68.png | Bin 0 -> 1160 bytes .../drawable-xxhdpi/frequency_piano_69.png | Bin 0 -> 1156 bytes .../res/drawable-xxhdpi/frequency_piano_7.png | Bin 0 -> 1477 bytes .../drawable-xxhdpi/frequency_piano_70.png | Bin 0 -> 1569 bytes .../drawable-xxhdpi/frequency_piano_71.png | Bin 0 -> 1233 bytes .../drawable-xxhdpi/frequency_piano_72.png | Bin 0 -> 1671 bytes .../drawable-xxhdpi/frequency_piano_73.png | Bin 0 -> 1259 bytes .../drawable-xxhdpi/frequency_piano_74.png | Bin 0 -> 1637 bytes .../drawable-xxhdpi/frequency_piano_75.png | Bin 0 -> 1230 bytes .../drawable-xxhdpi/frequency_piano_76.png | Bin 0 -> 1143 bytes .../drawable-xxhdpi/frequency_piano_77.png | Bin 0 -> 1570 bytes .../drawable-xxhdpi/frequency_piano_78.png | Bin 0 -> 1170 bytes .../drawable-xxhdpi/frequency_piano_79.png | Bin 0 -> 1487 bytes .../res/drawable-xxhdpi/frequency_piano_8.png | Bin 0 -> 1084 bytes .../drawable-xxhdpi/frequency_piano_80.png | Bin 0 -> 1086 bytes .../drawable-xxhdpi/frequency_piano_81.png | Bin 0 -> 1081 bytes .../drawable-xxhdpi/frequency_piano_82.png | Bin 0 -> 1474 bytes .../drawable-xxhdpi/frequency_piano_83.png | Bin 0 -> 1171 bytes .../drawable-xxhdpi/frequency_piano_84.png | Bin 0 -> 1585 bytes .../drawable-xxhdpi/frequency_piano_85.png | Bin 0 -> 1177 bytes .../drawable-xxhdpi/frequency_piano_86.png | Bin 0 -> 1576 bytes .../drawable-xxhdpi/frequency_piano_87.png | Bin 0 -> 1161 bytes .../drawable-xxhdpi/frequency_piano_88.png | Bin 0 -> 1239 bytes .../res/drawable-xxhdpi/frequency_piano_9.png | Bin 0 -> 1071 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 0 -> 264 bytes .../res/drawable/sound_frequency_drawable.xml | 108 +++++++++ .../src/main/res/values/strings.xml | 27 ++- .../src/main/res/xml/dev_options.xml | 7 + 374 files changed, 480 insertions(+), 21 deletions(-) create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_high.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_low.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_1.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_10.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_11.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_12.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_13.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_14.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_15.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_16.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_17.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_18.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_19.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_2.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_20.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_21.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_22.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_23.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_24.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_25.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_26.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_27.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_28.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_29.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_3.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_30.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_31.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_32.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_33.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_34.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_35.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_36.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_37.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_38.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_39.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_4.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_40.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_41.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_42.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_43.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_44.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_45.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_46.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_47.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_48.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_49.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_5.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_50.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_51.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_52.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_53.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_54.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_55.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_56.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_57.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_58.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_59.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_6.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_60.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_61.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_62.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_63.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_64.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_65.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_66.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_67.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_68.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_69.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_7.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_70.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_71.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_72.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_73.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_74.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_75.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_76.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_77.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_78.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_79.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_8.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_80.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_81.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_82.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_83.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_84.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_85.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_86.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_87.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_88.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_sensor_sound_frequency_white_24dp.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_high.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_low.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_1.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_10.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_11.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_12.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_13.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_14.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_15.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_16.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_17.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_18.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_19.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_2.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_20.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_21.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_22.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_23.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_24.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_25.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_26.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_27.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_28.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_29.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_3.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_30.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_31.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_32.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_33.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_34.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_35.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_36.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_37.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_38.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_39.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_4.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_40.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_41.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_42.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_43.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_44.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_45.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_46.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_47.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_48.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_49.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_5.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_50.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_51.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_52.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_53.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_54.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_55.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_56.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_57.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_58.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_59.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_6.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_60.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_61.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_62.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_63.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_64.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_65.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_66.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_67.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_68.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_69.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_7.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_70.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_71.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_72.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_73.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_74.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_75.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_76.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_77.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_78.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_79.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_8.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_80.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_81.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_82.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_83.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_84.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_85.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_86.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_87.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_88.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/ic_sensor_sound_frequency_white_24dp.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_high.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_low.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_1.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_10.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_11.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_12.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_13.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_14.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_15.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_16.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_17.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_18.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_19.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_2.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_20.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_21.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_22.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_23.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_24.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_25.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_26.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_27.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_28.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_29.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_3.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_30.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_31.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_32.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_33.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_34.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_35.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_36.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_37.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_38.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_39.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_4.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_40.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_41.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_42.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_43.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_44.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_45.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_46.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_47.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_48.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_49.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_5.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_50.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_51.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_52.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_53.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_54.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_55.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_56.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_57.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_58.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_59.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_6.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_60.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_61.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_62.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_63.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_64.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_65.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_66.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_67.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_68.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_69.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_7.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_70.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_71.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_72.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_73.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_74.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_75.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_76.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_77.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_78.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_79.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_8.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_80.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_81.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_82.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_83.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_84.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_85.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_86.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_87.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_88.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_sensor_sound_frequency_white_24dp.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_high.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_low.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_1.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_10.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_11.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_12.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_13.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_14.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_15.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_16.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_17.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_18.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_19.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_2.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_20.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_21.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_22.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_23.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_24.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_25.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_26.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_27.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_28.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_29.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_3.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_30.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_31.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_32.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_33.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_34.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_35.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_36.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_37.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_38.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_39.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_4.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_40.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_41.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_42.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_43.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_44.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_45.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_46.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_47.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_48.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_49.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_5.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_50.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_51.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_52.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_53.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_54.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_55.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_56.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_57.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_58.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_59.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_6.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_60.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_61.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_62.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_63.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_64.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_65.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_66.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_67.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_68.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_69.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_7.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_70.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_71.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_72.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_73.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_74.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_75.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_76.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_77.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_78.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_79.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_8.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_80.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_81.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_82.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_83.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_84.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_85.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_86.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_87.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_88.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/ic_sensor_sound_frequency_white_24dp.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable/sound_frequency_drawable.xml diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/DevOptionsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/DevOptionsFragment.java index 9871820c..233e71ec 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/DevOptionsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/DevOptionsFragment.java @@ -40,6 +40,7 @@ public class DevOptionsFragment extends PreferenceFragment { private static final String KEY_STRICT_MODE = "strict_mode"; public static final String KEY_DEV_SONIFICATION_TYPES = "enable_dev_sonification_types"; public static final String KEY_AMBIENT_TEMPERATURE_SENSOR = "enable_ambient_temp_sensor"; + public static final String KEY_SOUND_FREQUENCY_SENSOR = "enable_sound_frequency_sensor"; private static final String KEY_PERF_DEBUG_SCREEN = "show_perf_tracker_debug"; public static DevOptionsFragment newInstance() { @@ -124,6 +125,10 @@ public static boolean isAmbientTemperatureSensorEnabled(Context context) { return getBoolean(KEY_AMBIENT_TEMPERATURE_SENSOR, false, context); } + public static boolean isSoundFrequencySensorEnabled(Context context) { + return getBoolean(KEY_SOUND_FREQUENCY_SENSOR, false, context); + } + private static boolean getBoolean(String key, boolean defaultBool, Context context) { if (!isDebugVersion()) { return defaultBool; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java index 6ffeef91..8260f52a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java @@ -64,6 +64,7 @@ import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; import com.google.android.apps.forscience.whistlepunk.sensorapi.WriteableSensorOptions; import com.google.android.apps.forscience.whistlepunk.sensors.DecibelSensor; +import com.google.android.apps.forscience.whistlepunk.sensors.SoundFrequencySensor; import com.google.android.apps.forscience.whistlepunk.wireapi.RecordingMetadata; import com.google.common.base.Suppliers; import com.google.common.collect.Lists; @@ -170,10 +171,10 @@ public interface CallbacksProvider { private BehaviorSubject mRecordingStatus = BehaviorSubject.createDefault(RecordingStatus.UNCONNECTED); - // A temporary variable to store a sensor card presenter that wants to use - // the decibel sensor before the permission to use microphone is granted - // in Android M. - private SensorCardPresenter mDecibelSensorCardPresenter; + // A temporary variable to store a sensor card presenter that wants to use the decibel or + // frequency sensor before the permission to use microphone is granted in Android M. + private SensorCardPresenter mSensorCardPresenterForAudio; + private String mSensorIdForAudio; private Handler mHandler; private FeatureDiscoveryProvider mFeatureDiscoveryProvider; @@ -231,22 +232,22 @@ public void onCreate(Bundle savedInstanceState) { } private void onAudioPermissionChanged(@PermissionUtils.PermissionState int newState) { - if (mDecibelSensorCardPresenter == null || getActivity() == null) { + if (mSensorCardPresenterForAudio == null || getActivity() == null) { return; } if (newState == PermissionUtils.GRANTED) { - mDecibelSensorCardPresenter.retryConnection(getActivity()); + mSensorCardPresenterForAudio.retryConnection(getActivity()); } else if (newState == PermissionUtils.DENIED) { // If the sensor can't be loaded, still show it as selected on the card // so the user understands that they wanted this sensor but can't use it. - mDecibelSensorCardPresenter.setConnectingUI(DecibelSensor.ID, true, + mSensorCardPresenterForAudio.setConnectingUI(mSensorIdForAudio, true, getActivity(), true); } else { - mDecibelSensorCardPresenter.setConnectingUI(DecibelSensor.ID, true, + mSensorCardPresenterForAudio.setConnectingUI(mSensorIdForAudio, true, getActivity(), false); } // in either case, we have our answer. Stop waiting for it. - mDecibelSensorCardPresenter = null; + mSensorCardPresenterForAudio = null; updateAvailableSensors(); } @@ -876,11 +877,14 @@ public void onSourceError(String id, int error, String errorMessage) { private void tryStartObserving(SensorCardPresenter sensorCardPresenter, String sensorId, RecordingStatus status) { - if (TextUtils.equals(sensorId, DecibelSensor.ID) && mDecibelSensorCardPresenter == null && + if ((TextUtils.equals(sensorId, DecibelSensor.ID) || + TextUtils.equals(sensorId, SoundFrequencySensor.ID)) && + mSensorCardPresenterForAudio == null && !PermissionUtils.hasPermission(getActivity(), PermissionUtils.REQUEST_RECORD_AUDIO)) { - mDecibelSensorCardPresenter = sensorCardPresenter; - sensorCardPresenter.setConnectingUI(DecibelSensor.ID, true, + mSensorCardPresenterForAudio = sensorCardPresenter; + mSensorIdForAudio = sensorId; + sensorCardPresenter.setConnectingUI(mSensorIdForAudio, true, getActivity().getApplicationContext(), true); PermissionUtils.tryRequestingPermission(getActivity(), PermissionUtils.REQUEST_RECORD_AUDIO, @@ -915,16 +919,21 @@ private void updateAvailableSensors() { mSensorCardAdapter.getSensorCardPresenters(); // Available Sensors includes only sensors that are not being observed. - // Check if a card wants to show the decibel sensor but permission was denied. - // Remove this from the list of available sensors so the decibel sensor icon doesn't show - // up in other cards. + // Check if a card wants to show the decibel and frequency sensors but permission was + // denied. + // Remove these from the list of available sensors so the decibel and frequency sensor + // icons don't show up in other cards. // TODO: Extend this to work for any sensor that doesn't have the permission granted. // See b/27439593 - if (availableSensors.contains(DecibelSensor.ID)) { + if (availableSensors.contains(DecibelSensor.ID) || + availableSensors.contains(SoundFrequencySensor.ID)) { for (SensorCardPresenter presenter : sensorCardPresenters) { if (TextUtils.equals(presenter.getSelectedSensorId(), DecibelSensor.ID)) { availableSensors.remove(DecibelSensor.ID); } + if (TextUtils.equals(presenter.getSelectedSensorId(), SoundFrequencySensor.ID)) { + availableSensors.remove(SoundFrequencySensor.ID); + } } } for (SensorCardPresenter presenter : sensorCardPresenters) { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java index 7610ab32..ce4835e0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java @@ -25,6 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Defines sensor animation behavior for sensor cards. @@ -33,7 +36,8 @@ public class SensorAnimationBehavior { // The different types of behavior for the sensor animation. @IntDef({TYPE_STATIC_ICON, TYPE_ACCELEROMETER_SCALE, TYPE_RELATIVE_SCALE, - TYPE_POSITIVE_RELATIVE_SCALE, TYPE_ROTATION, TYPE_ACCELEROMETER_SCALE_ROTATES}) + TYPE_POSITIVE_RELATIVE_SCALE, TYPE_ROTATION, TYPE_ACCELEROMETER_SCALE_ROTATES, + TYPE_SOUND_FREQUENCY}) @Retention(RetentionPolicy.SOURCE) public @interface BehaviorType { } @@ -44,6 +48,11 @@ public class SensorAnimationBehavior { public static final int TYPE_POSITIVE_RELATIVE_SCALE = 4; public static final int TYPE_ROTATION = 5; public static final int TYPE_ACCELEROMETER_SCALE_ROTATES = 6; + public static final int TYPE_SOUND_FREQUENCY = 7; + + private static final double HALF_STEP_FREQUENCY_RATIO = 1.0595; + + private static final List noteFrequencies = new ArrayList(); private final int mBehaviorType; private int mLevelDrawableId; @@ -100,6 +109,8 @@ private int getUpdatedLevel(double newValue, double yMin, double yMax) { } else { index = 0; } + } else if (mBehaviorType == TYPE_SOUND_FREQUENCY) { + index = soundFrequencyToLevel(newValue); } else { double scaled; if (mBehaviorType == TYPE_POSITIVE_RELATIVE_SCALE) { @@ -160,4 +171,71 @@ void initializeLargeIcon(ImageView largeIcon) { largeIcon.setImageLevel(3); } } + + private static void fillNoteFrequencies() { + // Fill the noteFrequencies list with the notes for an 88 key piano. + double[] highNotes = { + 4186.01, // c + 3951.07, // b + 3729.31, // a# + 3520, // a + 3322.44, // g# + 3135.96, // g + 2959.96, // f# + 2793.83, // f + 2637.02, // e + 2489.02, // d# + 2349.32, // d + 2217.46, // c# + }; + double multiplier = 1; + while (noteFrequencies.size() < 88) { + for (double note : highNotes) { + if (noteFrequencies.size() == 88) { + break; + } + noteFrequencies.add(note * multiplier); + } + multiplier /= 2; + } + Collections.reverse(noteFrequencies); + // Add first and last items to make lookup easier. Use the approximate half-step ratio to + // determine the first and last items. + noteFrequencies.add(0, noteFrequencies.get(0) / HALF_STEP_FREQUENCY_RATIO); + noteFrequencies.add( + noteFrequencies.get(noteFrequencies.size() - 1) * HALF_STEP_FREQUENCY_RATIO); + } + + /** + * Returns the index corresponding to the given sound frequency, where indices 1-88 represent + * the notes of keys on a piano. + */ + private static int soundFrequencyToLevel(double frequency) { + if (noteFrequencies.isEmpty()) { + fillNoteFrequencies(); + } + int i = Collections.binarySearch(noteFrequencies, frequency); + // If there is an exact match, i will be a non-negative number, which is the index of the + // matching value. + if (i >= 0) { + return i; + } + // If there is no exact match, i will provide the insertion point, where the observed + // frequency would belong in the list, as (-(insertion point) - 1). + // This is the usual case, since in most cases the observed frequency will not match a + // specific note exactly. + // Calculate the insertion point + i = -i - 1; + if (i == 0) { + // frequency is significantly lower than the lowest note. + return 0; + } + if (i == noteFrequencies.size()) { + // frequency is significantly higher than the highest note. + return noteFrequencies.size() - 1; + } + // frequency is between two notes. + double midpoint = (noteFrequencies.get(i - 1) + noteFrequencies.get(i)) / 2; + return (frequency < midpoint) ? (i - 1) : i; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java index 3b552792..ce7ca149 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java @@ -32,6 +32,7 @@ import com.google.android.apps.forscience.whistlepunk.sensors.LinearAccelerometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.MagneticStrengthSensor; import com.google.android.apps.forscience.whistlepunk.sensors.SineWavePseudoSensor; +import com.google.android.apps.forscience.whistlepunk.sensors.SoundFrequencySensor; import com.google.common.base.Preconditions; import java.util.HashMap; @@ -172,6 +173,16 @@ public SensorAppearanceProviderImpl(DataController dataController) { SensorAnimationBehavior.TYPE_RELATIVE_SCALE), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, DecibelSensor.ID)); + putAppearance(SoundFrequencySensor.ID, BuiltInSensorAppearance.create( + R.string.sound_frequency, R.drawable.ic_sensor_sound_frequency_white_24dp, + R.string.hertz_units, R.string.sensor_desc_short_sound_frequency, + R.string.sensor_desc_first_paragraph_sound_frequency, + R.string.sensor_desc_second_paragraph_sound_frequency, + R.drawable.learnmore_sound, + new SensorAnimationBehavior(R.drawable.sound_frequency_drawable, + SensorAnimationBehavior.TYPE_SOUND_FREQUENCY), + BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, SoundFrequencySensor.ID)); + putAppearance(BarometerSensor.ID, BuiltInSensorAppearance.create(R.string.barometer, R.drawable.ic_sensor_barometer_white_24dp, R.string.barometer_units, R.string.sensor_desc_short_barometer, diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java index f1bcccfa..d8f6dcbb 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java @@ -59,6 +59,7 @@ import com.google.android.apps.forscience.whistlepunk.sensors.DecibelSensor; import com.google.android.apps.forscience.whistlepunk.sensors.LinearAccelerometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.MagneticStrengthSensor; +import com.google.android.apps.forscience.whistlepunk.sensors.SoundFrequencySensor; import com.google.android.apps.forscience.whistlepunk.wireapi.RecordingMetadata; import com.google.common.collect.Lists; import com.google.protobuf.nano.InvalidProtocolBufferNanoException; @@ -146,9 +147,10 @@ public interface OnCloseClickedListener { // The sensor ID ordering. private static final String[] SENSOR_ID_ORDER = {AmbientLightSensor.ID, DecibelSensor.ID, - LinearAccelerometerSensor.ID, AccelerometerSensor.Axis.X.getSensorId(), - AccelerometerSensor.Axis.Y.getSensorId(), AccelerometerSensor.Axis.Z.getSensorId(), - BarometerSensor.ID, CompassSensor.ID, MagneticStrengthSensor.ID}; + SoundFrequencySensor.ID, LinearAccelerometerSensor.ID, + AccelerometerSensor.Axis.X.getSensorId(), AccelerometerSensor.Axis.Y.getSensorId(), + AccelerometerSensor.Axis.Z.getSensorId(), BarometerSensor.ID, CompassSensor.ID, + MagneticStrengthSensor.ID}; // Update the back data textview every .25 seconds maximum. private static final int MAX_TEXT_UPDATE_TIME_MS = 250; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java index 4a24f6a8..6daf218f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java @@ -40,6 +40,7 @@ import com.google.android.apps.forscience.whistlepunk.sensors.LinearAccelerometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.MagneticStrengthSensor; import com.google.android.apps.forscience.whistlepunk.sensors.SineWavePseudoSensor; +import com.google.android.apps.forscience.whistlepunk.sensors.SoundFrequencySensor; import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; import com.google.common.collect.Lists; @@ -207,6 +208,10 @@ public boolean isSensorAvailable(int sensorType) { } addBuiltInSensor(new DecibelSensor()); + if (DevOptionsFragment.isSoundFrequencySensorEnabled(context)) { + addBuiltInSensor(new SoundFrequencySensor()); + } + if (AccelerometerSensor.isAccelerometerAvailable(available)) { addBuiltInSensor(new AccelerometerSensor(AccelerometerSensor.Axis.X)); addBuiltInSensor(new AccelerometerSensor(AccelerometerSensor.Axis.Y)); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java new file mode 100644 index 00000000..17fbc5f3 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java @@ -0,0 +1,209 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.forscience.whistlepunk.sensors; + +import android.content.Context; +import android.media.AudioFormat; +import android.media.AudioRecord; +import android.media.MediaRecorder; + +import com.google.android.apps.forscience.whistlepunk.Clock; +import com.google.android.apps.forscience.whistlepunk.sensorapi.AbstractSensorRecorder; +import com.google.android.apps.forscience.whistlepunk.sensorapi.ReadableSensorOptions; +import com.google.android.apps.forscience.whistlepunk.sensorapi.ScalarSensor; +import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorEnvironment; +import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorRecorder; +import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; +import com.google.android.apps.forscience.whistlepunk.sensorapi.StreamConsumer; +import com.softsynth.math.FourierMath; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Displays sound frequency in Hertz (Hz). + */ +public class SoundFrequencySensor extends ScalarSensor { + private static final int SAMPLE_RATE_IN_HZ = 44100; + private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; + private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; + public static final String ID = "SoundFrequencySource"; + private AudioRecord mRecord; + private final ExecutorService mExecutor; + private final int mMinBufferSize; + private final int mBytesInBuffer; + private final int mShortsInBuffer; + private AtomicBoolean mRunning = new AtomicBoolean(false); + + public SoundFrequencySensor() { + super(ID); + mMinBufferSize = + AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG, AUDIO_FORMAT); + int bytesInBuffer = 0; + int shortsInBuffer = 0; + if (mMinBufferSize > 0) { + shortsInBuffer = mMinBufferSize / 2; + // Increase mShortsInBuffer to power of 2, if necessary. + if ((shortsInBuffer & (shortsInBuffer - 1)) != 0) { + shortsInBuffer = Integer.highestOneBit(shortsInBuffer) << 1; + } + bytesInBuffer = shortsInBuffer * 2; + } + this.mBytesInBuffer = bytesInBuffer; + this.mShortsInBuffer = shortsInBuffer; + mExecutor = Executors.newSingleThreadExecutor(); + } + + @Override + protected SensorRecorder makeScalarControl(final StreamConsumer c, + final SensorEnvironment environment, Context context, + final SensorStatusListener listener) { + final Clock clock = environment.getDefaultClock(); + return new AbstractSensorRecorder() { + @Override + public void startObserving() { + // TODO(lizlooney): Extract common logic from here and DecibelSensor to a place it + // can be reused. + listener.onSourceStatus(getId(), SensorStatusListener.STATUS_CONNECTED); + if (mMinBufferSize < 0) { + // If this is the case, AudioRecord.getMinBufferSize returned an error. + listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, + "Could not connect to microphone"); + return; + } + mRunning.set(true); + // Use VOICE_COMMUNICATION to filter out audio coming from the speakers + mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, + SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG, AUDIO_FORMAT, mBytesInBuffer); + if (mRecord.getState() != AudioRecord.STATE_INITIALIZED) { + listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, + "Could not connect to microphone"); + return; + } + mRecord.startRecording(); + // Check to see if we actually started recording before continuing. + // AudioRecord#startRecording() logs an error but it has no return value and + // doesn't throw an exception when someone else is using the mic. + if (mRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) { + listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, + "Microphone in use by another application"); + return; + } + mExecutor.execute(new Runnable() { + private FftAnalyzer fftAnalyzer; + + @Override + public void run() { + short[] tempBuffer = new short[mShortsInBuffer]; + + fftAnalyzer = new FftAnalyzer(tempBuffer.length); + + int readShorts = 0; + while (mRunning.get()) { + readShorts += mRecord.read( + tempBuffer, readShorts, tempBuffer.length - readShorts); + if (readShorts == tempBuffer.length) { + sendBuffer(tempBuffer); + readShorts = 0; + } + } + } + + private void sendBuffer(short[] tempBuffer) { + final long timestampMillis = clock.getNow(); + double frequency = fftAnalyzer.determineFrequency(tempBuffer); + c.addData(timestampMillis, frequency); + } + }); + } + + @Override + public void stopObserving() { + mRunning.set(false); + if (mRecord != null) { + if (mRecord.getState() == AudioRecord.STATE_INITIALIZED) { + mRecord.stop(); + } + mRecord.release(); + } + mRecord = null; + listener.onSourceStatus(getId(), SensorStatusListener.STATUS_DISCONNECTED); + } + + @Override + public void applyOptions(ReadableSensorOptions settings) { + // do nothing, no settings apply to collection + } + }; + } + + /** + * Determines the frequency by using FFT (Fast Fourier Transform) and looking for the frequency + * with the largest magnitude. + */ + private static class FftAnalyzer { + private final int length; + // Preallocated arrays to hold complex numbers (a + bi), and frequency magnitudes. + private final double[] a; + private final double[] b; + private final double[] magnitudes; + + private FftAnalyzer(int length) { + // Make sure n is a power of 2. + if ((length & (length - 1)) != 0) { + throw new RuntimeException("FFT sampling size must be power of 2"); + } + + this.length = length; + a = new double[length]; + b = new double[length]; + magnitudes = new double[length]; + } + + private double determineFrequency(short[] samples) { + if (samples.length != length) { + throw new RuntimeException( + "Samples length is " + samples.length + ". Expected " + length + "."); + } + + // Copy the samples into the a array, converting shorts to doubles. + for (int i = 0; i < length; i++) { + a[i] = ((double) samples[i]) / Short.MAX_VALUE; + b[i] = 0.0; + } + + // Use FFT. + FourierMath.fft(length, a, b); + + // Calculate the magnitudes of different frequencies. + FourierMath.calculateMagnitudes(a, b, magnitudes); + + // Find the frequency with the maximum magnitude. + double maxMagnitude = 0; + int indexOfMax = 0; + for (int i = 0; i < length / 2; i++) { + if (magnitudes[i] > maxMagnitude) { + maxMagnitude = magnitudes[i]; + indexOfMax = i; + } + } + // Convert index to frequency. + return ((double) indexOfMax) * SAMPLE_RATE_IN_HZ / length; + } + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_high.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_high.png new file mode 100644 index 0000000000000000000000000000000000000000..63f5a4161ddcb2d32c621a8ccac54dd54de8414f GIT binary patch literal 555 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEp9i;uunK>+Nkvz9s_!hroCB znXy?tZDMH&bM{T&u-NqA`n6rRnY(VrFu8Cpa+#vw1*HU37qJ8?dBLd;p}-~$K~*s2 zIHg0#rBee=!8HN(qG$s0;F>^sku?E%=oaP_Y}|JJ;!i`@$S0gKlGp}Qrfj-O03=5ZX?Z8D{>FNnX_oia*(;2aLZgZ zPn9k@^TW$y$|4_Y_bH3^=$?8pUlJ&K_;dQ*35s5UZF*+|x3B9AnzC^II_3ONqN=L# z9=Yo~y#tgz0=q8lUZQcm`|TOK;3-S=Pv8CjLiJQypwcO$LM2$hQW!=k;fp0w6b}ds Y)S91So*3{9m+LN^zC#KE4uS9L zGk51a;!0~vV|uT;&c)~Tb%nP-9E}faI!saUa^YO$0-;y}mAnL07s06}4MEiop+E@b z(y8G%r9%it!8L*OB5MK}0oMf7i>wJ`1j53~LkD}mH)^Hqgq=O%??r#f6TPkmC@ta$cZ>8DFBQw}PWANlhC&Z&sNIGNP4H5#rn|2;6O zPYX*HTB@=Atl;0Rb9z60S*sUl)>)+L05Wiq$Wjg0pOsT)etpb4-Ou%=!l@H&yEI%Q zx2dXl1#Y`-BfeDQc5GVDo@dJx)^{0IJG)-xmAtqV=&G5s@{d=APFbWA%?~sN>T!hQ nA^u18_;LnlSWz{|7WT9Ec*bq?*~`ujj9~^(S3j3^P6+LOXzC#8)4vzQ# zU)tcJBjBsBE%dy{8?7i)e_#7fb`xPg#zicFN?ro0P^v>Hut`Hu6;8QyYB)~m5CT&Q zUM`%AT&BP&xF(=p6iq-LToX_)iY6crVd1Gvb)~rdtNw<`HfzjgpDB8Dxx`V;Q#{JetqaYrFYr89tjuCQ)?aVMGv3*@5f`z zqUjZAw%==BkK>d@B1<*i8BT!Gws)+f3QYA+V* z&lGCcaJ^~ewYsIv{pV?g`Ew4fT`uzUo5K8_OQ(thr@8MGdgh{d;?{NJB$JSQS(hyVy zQ;t(Qgj_l`;1paFP%nxmAP=qyq!(EekcVWUD7*c?`W~6&r}r;pu1PEbTQa)^qu(d}>8<%Kq&2JWf+w1Kr}LY3UU% z+EXw^k}=e0mWIAq>NEE5t6Cd0^hKU-&senhjGg?VJ2~DNPg=Tyrg$$pb5H13`JuFb zJ6$wST?-7$%j({g;jQsXLVMAgf7@I^2Kr`P&EAujSzEPF!@Sq%m+Ug5Q~vhiPmcwb z-CaH>_C-h0W{v%=H=at%2HvwcwI+93$81BF%!R^IPjhA%2S(L)7yVd#=*|1}QBOKH zS)6)Pn0~Kvo~YMR+5d}l`i!!Z?&oH{H7W}<>-hABrF>6I7fRqzAw(4raR-eQTv2#3 b)|QbuuyBIOa)Wuml*8cZ>gTe~DWM4f5q9Q2 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_11.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_11.png new file mode 100644 index 0000000000000000000000000000000000000000..eb7b25d8ecea6f3c3764d1db454454658c8ba3ff GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF;C;uunK>+Nkvz7_=@hroCB znR^+T6qnxkE@UpOF7)g8QJ34yCrzRoG#saN2)T4ZD9%MLQxv>h;1o-sl9zz$A_&zX z6xgI8s0ycGnm~GyHGzzPYXa&;(FEinEZlTSZOgyHSHBjCJiZ`UnH$JuWa1Op^~tzn z=I8SDiBF0H#kh)|{tkRCyj0=x+Q2DC7j1D1+~wUBG-W$q^pr(g`~vS8zX|@Y2ozW( zvQ)!W^VHhIVqn@Ta2;RFltn(~1%X{gckcq_eZ-e(xJrsWd-EBnHZ@{~WPIm}A11rX zOZeOry#n=)f4nZ=isUjOL>QoZ2NWXkFhKDRBp8u{0ww$~g5nkv!j>ho#I=`JE@@HU RRtk(n22WQ%mvv4FO#pqts`vl^ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_12.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_12.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b9b3603fe7fb0bf10c9a2ab83f1e7db7100e7b GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV2bi|aSW-r_4c-B(IEp72gm#W zFKt+U;KU{Qlo#tx>3vj?+hlO=W5ZdQHip0^4MEioAt>e2so^-KLkLE3E^?Wo;N=3L z1XLHX1S)yKDYzz}USv%mBjB2VdQmh1c?b(rzc$J|x1acXrB%Ode}2iG|5m5+4c+)7 zo;A43WV;I7Os;vYk=_&|YZBOH^oDhgKBwwndsdg?H*}5yQa%1`9b{l z-NjQPUq8I<7FjvdVm7CX=Ba7I_2M4K>g;pt)8;SI>DyE_ZB5h>_jMOtZc3zv|Cu>G zH?XTH%l>Be$*aX;PoD*@yXP&uRO7$isfmvxZJ(_x-J#LFxJT;8OzHpOeLH{M77G;1 zQLesrvggwqUe#0b9Y)F9PX4-Am!hd~YSC@=$iTGNe@2VvaE49kRk!=}JzcTn{3PY$ zdZ&(Qq{|=MA(VP-`TMEwx4Q03oU%IcU4i!sWv}`Bqz~=+Ws@2{B`|-*<{wsRo`Guh z5gl_xS6@F8%6~8Hzx1ixMQ7yZSi8@ZZPs9B%PgC19d~bEt-$NLE&eE>3yL6kl%Rwz vBvz4Q1|>StV+J`oK`8>322i52?yB(2Jn3g)l}|ST6B~o4tDnm{r-UW|m74=I literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_13.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_13.png new file mode 100644 index 0000000000000000000000000000000000000000..fee7a753ba9abd3c153f02f49378aebca55eaaaf GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF#9;uunK>+LOXt_A}hhlBV2 zU)og?8kjMw$xpYD(&P6U$6ueyE6ic9zmw@Ub2-P7J z*rXw-3a4P2KzflifsBA_0_sK41mqzs{Io^daGvhtS(4YqQzt7dK0KpU!z-{WXv*HE zo}T2gy1=d?Dd#YmMIuWzTyG}7TDM6^e5r=_p8K6aQ`UD&1$J$^5^SU`1k$kRjdAJ! zo9wA{nQt}3hE!DWrn|GwrrSgXpJHpKf$3g-L*`p|-gYHq}&;bT8JV>DdjG`AFq=ARR Z%-z~&wyfXQn+uFe22WQ%mvv4FO#s(zuf_lX literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_14.png new file mode 100644 index 0000000000000000000000000000000000000000..1efeefdb18473209c61746160d18a014ba60da8c GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVDj^HaSW-r_4bx$*&zoW2gi5y znVZfWQ(immN!iuvH4;g;=HEC`v+u&0<3b8v0;-Ex0+k?ClZK#bhfpA#a-7m3~;x88mHf%9}O zaRtWJ>PtGh)OEP*beNJ}A3x>nqMo=VYoDL(F#6OyO*Zvf=4GKkH=RpyQv|vHzy6uj zuAzPIsq4)-4+;a%o0JujVat7~PkqSE3u5}bdH zY|ihyrF5!EW4_69n_mu{MjtQOzW$SQtbTS!;MI$N%ijw>ZC>=oWcePcr#FjTZyKD? zZa=VC+hvhR>MK9n>K+Z(NTJkk9vW4DLPgK4UMypITzYRxxaiXt?={bA?%#XArv3E^ zeJu!rBk1M*cCkGF5f~bL=n&kc)X%V5ir8w@roKnEPYH=#iLO1cyAqhd7(8A5T-G@yGywpX>H=T@ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_15.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_15.png new file mode 100644 index 0000000000000000000000000000000000000000..5d0a3793ecdede5498a07f925f691b0c06191f32 GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|j9#;uunK>+S78J_iF4*Msls zFTZgJ*-;ypE_6SG-*f3P#-lvW4H}M9I)q$0Ar$8#mnjNfE^vw^P{~U`brFQ>5DIM4 z5LAUzFijx6$eKV#z%>E&qG$s05EgFw-P^x2`RLY;peYwE!tFU0<%m3u-U#GP547QY zvHEj&(3IfG^Euq6ED~9&;i~Bs*cCLTTBl@{t+Nkvz6J#zhJ*k9 zU;f1;%-EQeE|f1Nb+bG0aZ}16U56>LNJRq#>x}cLq(k+#I=cnnt}) z%ITlV+1t*kooaIY7Bj!rEl`ZB==z#PIzme$T{9QEYM#1m9yw)^$!d+#ws>&#!&@UYb4K{buz7 z_p*qvDax<+Saoy=XTR1^<|~@2Q6Jl$6_|G9rWWhX&p+oi?@~H-u{mD#)V;6vcBiJ+ z_sw54r!?QHYUw-6pR4XYmY06|iuZ5Kvp0;FXA5V3@rqYHqrE6*>z~k%=OrS$KW)+o zzrW&q&!bs9Z>d8)Ku(s}oM+=d({QfZ zsgs6b(l7SZE)w2&->c`3|IDlvcK()+Z+<^j8vKu>J3U%=+imlWR4=6v*J|>gTe~DWM4f;VBj- literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_18.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_18.png new file mode 100644 index 0000000000000000000000000000000000000000..bfebad5921c81b27b6177c7dd17d33c4be5b1be0 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBG5I;uunK>+S78u0sX_4hQf2 zzf{%c;TeBN@`L@f>rHn{YZcOVvUCW!bZR(Gfl>-yE}V;8robry)kQ3UN?u^9NkdSz zLnshV!8HN(qG$s0;F>^sku`ygKv?+yEBE@n=Wjn3T&mH}8noNer80Ah|FOUwhAxsl zpRO0ovpN1w(#6u|l$XrqLn2RG6T5<@bXvG*p1N~6Xv(59tV&*i%a}gCj-Im8V~>zf zs@AEM!LosFi%rr*fb5svl8bs=Grc{gtju81Jar{FXu=|&v-?fhoDtxo~t Ok-^i|&t;ucLK6T}W3A}` literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_19.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_19.png new file mode 100644 index 0000000000000000000000000000000000000000..634eb95ed30457dcb6e3fcb85c2202660e3e623b GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU^4S`aSW-r_4f9~JSIf}hroaT zmw&x`B-Sx)W@GUryR8?kcII)fdCPjzMA>1Af|m>DA{Pk75~$=Qpt=Z7HE9T{b_fMR zD3?wR$0;2`Fbb{-q!(Ee$OyP5pk8E6AR`bKO8z~v_PzF_pW%D@c3-~|)%UZz$Z^4P zx1GO|Hsnq*Zc{zAr*K(EQOSh=EE0mL%d~&oeSh1!IM7e-+IEd}o;^`hE^f9nIyEt| z_TQN^iSK1nkG#HZc50&i|G@V(fnA$^XMI1S6*pzkpPz>7lth+lOn0A|>%HQZ)A3i; zpOQN^ojVmhg>_Mk;PF?%a~Cf@vrl!)qmrYBj~8iZzX^`pJF$%K(+-Wr=PoF3n^CoY zyZ3~pi{D5-()&GS;`WcJoJF%Ws*`$RUWD`*MNddwEMs}LGU;oq?x`NfX+1^HVx6Wg z>iM%>`L1TrR1N?A^FK{dxa=ZXtNvy3ZH>+EZTj~)rS19sr{g?GyB1rZpN!v?M~cZ) z{NK5E!2=gHoH!9N0*xP(hzXQpL{)$s`k)AeMH#xOC^4sA$sD}sfbsOOoLFE&V(@hJ Kb6Mw<&;$VL%K2dc literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_2.png new file mode 100644 index 0000000000000000000000000000000000000000..734aba280ee92e1a2de34afe0ca95b809ff672a7 GIT binary patch literal 672 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU`qFNaSW-r_4fAZyk-Lt2giT^ zmtRg@+Qr28J@HJ>l+amXbDWcTZrT~lJS(8!C7`;9B~S@MHE9T{b_fN+DaR=tLN1*e zV2X2*%M=AK7dQpi1k#JF31kFJ6G$(zCXf*b3*X$B@%H<~kGmId|9EO~)o-P5u2a~V zw>V7+|Gw0y?FF;f6#m{%Z{CNyPWU>%Zl}g#_SE;Kl7Vh=8L@$VcK=UlC_kH)-W+TD zey-}NiOfrk&xE^3TAo<#aQ=l7<*S95qR|cl#elH4? zb1g0x_+A(Pz0>dc&Fvb^WmP2s=gw(aPj6W@ZH#vH=U1R?BO}dNbsc9Okr?)JczJJr> zg6RPt&fVLaa$WT4-QSvv4;R>{eh9QbT>9k9&w``Jms_8AwcK-7)bU53--n6!Yo#Ne zZI@h~{2|v35tb~7SVNBhV06G^4K)HFaflpw$T5x?d2I{`TPkPEA6!*auJU8{9bn31 N@O1TaS?83{1OR2?7?}V7 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_20.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_20.png new file mode 100644 index 0000000000000000000000000000000000000000..636c984cd134b30ecdd3689b1438a4ab20e06d49 GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4Uaa;uunK>+P*Tt_B4W2FLgH zFLyby*@?|*+_yG{Y3o;qGoQEwR6B$Mn=}L=l;e~RA(u`KIHlm_!nw$03YcOERPqu~ zT?D7#nm~GyH34~WO(4C5#_q<9B+) zr!4ZRJL#(F^+P+BoDBv73TWzf~p-tfe^~2Q^Rpe zhY*Z{YXa#-)&w#Ft_i3YSrfn}cImUg6r=20NNkdSzLkLQ_bZR(G=@5cZoQqthD0sO* zC;`<)EP+a1a0;#os25oi$OyP5pk5SBKpw)v)Z@pFf1Gc8JL0G0q;Ff3=DSLYq#oV3 z-mWp|kx1(0y8oO0X9lk8GFCek`99qCLb{W8_oo->BB_p3Hg603yVka8*<9_zcdSm$ zWZ#xN!RgP0?NslgKVoO!XsqsU*T~hYYduTFkm*O_qZ^7BPGG7pTs zqslF2x=0E=UC+GtQw80k02K9BEC}mBk@w-gd^)f7F_*(f{D4V{!PC{xWt~$(69C`& B{apY6 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_23.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_23.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1a96be72aea80824d28669710232027429187d GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9gL;uunK>+S7Cu4V(ChKu+9 zUwX%6wZhEA_g?eg+Zh|>lQYcpJkoZsbO^b0YB)}TQVL!!oQqthz$pRMMJ$0zUSO(8 zLr}FtC=gD;H39XaXae%!nm~GyHGzykSZE#F^6`IYZfu~OOmc{Z^)->yiwfbco3eod zVo%Qe4qt1(+dt5Z^V8Yq{$#Nd7P#zJZMuf@l$DD_QXXsEm#auIXv&dz+O=ZQBEcmZ_Poh! z_}nL)UHnJN@yiB%-^F{n6U*iqC0&^QEYPlXTJ5JhoAVQw{p|14I4UXEq~SVnVU*Y} ZA8zG*D?#p05-@rhJYD@<);T3K0RSq;xOo5o literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_24.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_24.png new file mode 100644 index 0000000000000000000000000000000000000000..a001bbcbe2cc11523d082ee723eaf70004c20d51 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~2YsaSW-r_4bx$QL}-FgX8`G zmrmXjw0{KJ1`f09n>hHWgt}{OzJS$i1Dsy$U z)%u>Is|o!zAM2mb&<+ca+kR$8*31p3*9c2Ky~+CZi9)<^>X97bt$FoN!ycS;oaScv zIqUk1UvEz__V*O2+*r;sQ|@Wk%}=N9&uKowB&OB>nbox0xUBE!R+I&n}rgw`tEWg=s%)m!L!n(J?8wRMCOR=mRDjSVDm& g8@Me`eCrsmBtGMfn;P~Um?{}OUHx3vIVCg!0C=DyEdT%j literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_25.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_25.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e285df51d0c4900f7deb20d68aa4eca626bb68 GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9vQ;uunK>+Q|kTn-K*Z5J#5 zPk$EVC0KndzIts@_m5kT4a_)K(DzHud4r~U-DTAl0pUXO@geCw@c(z>t literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_26.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_26.png new file mode 100644 index 0000000000000000000000000000000000000000..8feaddad6b908c18fdbfe7d3310f2d89eb3a7462 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU@Gu*aSW-r_4d}mvL*uohroaT zm)~A0-IAa-({smnneZ^~kC6#4KC&N`nZ^*xak-o^N)9Y@4I(w+VMAUU*D|@yr*-G zFL2wt(=QaoZRzEEcHU4ee8_Y^Xq@lDVnOVy}Rg}hepx0@Mn3aX1hD-TFY0S&fEI1 z(oH7x-K!}bMMqkXu5b=Iuj%@_)$iC{(e0Az?mI8d`SgnWYn#I5MKYxvHoqGdi`yiH zlz#nl`FR<4(Q6IuvzpP1_f)@?Zu05eq<&(W^Mk9hN`cq-jciZ7xPEqC@H(l~r%-#V z{)q03Tg_%^dukr*%e|@7MN{AZ58kJH;);fQ|HM`Eg#Q~Ii+cDdXiB%+&yt?4myRT# z)JW%BukC7CT}xpcfub26u_$o_NgK%Vi;^gS_O`tL$0)$K!h2CuXFf0qGI+ZBxvX+P*TzGejh*T8T4 zU+!vQYd$yo0eo zflV5Ms&ERX38WWU6UYd-CZJvvO+X&P!lGaN@zwLY-Ya+o?h{Kt)FSY7frh_Jkfox_ zO_fvDf^#LR%VPq&KAkXJ{(jXWk<`j5Qy+H)O<5$eRKwLWW8vjQrp`^3Q%>GC3cJ6k zhZiWJ)BpLjf2qsPPf8zW1WpP3|9;OD#Zzy&|ECx1K_;GVY&|FZK2+({C0#|w zu21+S78u4V%f*Mo2B zFYjVKi}xGGq6K@(Ml=zDUOc&c$a-* z5qQexX!rBq?ZW-DrfZn<7CrkuwOC}S!tJxcQyc?lE!WW9rs4YYcx%~r-BV@$3^vO} zQcr74?%ecq>ZSYJHEy?Qc?Hf|t)aWcpm}l0R*|KxVoNpB^Hf|kPw5_7b5B*})CB|W zZ^7q!9>0s8;a%PmzQ0QG)B=Om$GT$pJ@54|`{dFQ$1DjAkpT#ph$k$!G?tgSE4{T&5^^ zxj-lZ)kQ3UN?vdZt_i3YSrfb3{Zi1wTJ z-pXI|)KR`q!5zD67Ac=vGW|u*jCPll>{zpH zo{`m!S+*xS=e$WInp;@m)VI zwRX0laz~%xwjOw7L8Fc;aR!QZctoSb86>TM+S7Cp(X`^hQN3A znYPS34!!$y&u9NEuh)~63T-Bw`5>m?C7`;9B~S@MHE9T{b_fN+DaR=tLN1*eV2X2* z%M=AK7dQpi1k#JF31kFJ6G$(zCXf*b3*YRyocyjVtJ+2L)Z4-|OAVJui&G~YHuYXx zv?h2Z+NF=pa!(U!tQI5sMm3Cg;n;fR> z{y$A{sm9?&Z$4FrO*!l46@Pz`kMYG$p5Q5qOn!@{-q%?CNMNaktEN|=n|;5r)gqCl z8rgm&N{hF6c}(#RjPln!wKg!#;%>&%of^S0e1@B4uh-fwDluIQ@jLB;fCUlQ(4dEh c`JG3s3+S78z9s_!*NgA! zFYjPxZaOpjoMq?!sE1KG%&!{^PAfW0QSfr%T;u|wSOS&21XLHnsU{6U)efOR2<6hL z;W(v32u8s*f%GD40vQ3<1k{VH31kGq!kw?h^s_eX1V zPd(D8?|t@iW6aN*K)(J@(F(H1bWWXJyoM)u%Ay`_7a%cP*H!b>439PYTqC8HzEud^ z)>)(!Xf{(bcAu-{&-s^}+@~0>P7LfaGMeO>*!Ag|YA8@o*QVP%`lomomjt(IEcVOu zny^UZ>HTe~=k`q3UDy~HcCT{Y2a7fh^NvkLGKx3#zicFN?ro0P^v>Hut`Hu6;8QyYB)~m5CT&Q zUM`%AT&BP&xF(=p6iq-LToX_)iY6crVd1G4>T>7h1kcYel)2xR*(0^SQA3#N?{f`f zf41DkF&iTmt&vXa)JPZqIGsUx(V7yr{h#gaBl838IKE8R2-o@18JH#;eOn{_(4RkZ zr=~Lob`|}4TwmI=NaX34n?=X<;-)Ox^VfWxlE~9r@82$()3NE6#|p10&!)^?e8*Pk zl}PHVnNd@=F1}N^^Xi8^0aLEJJ4H^En5XVid1%h3SG_6U?`oV{k^MqYdD(LN*CJ`Z zEmOZ7e{gQ%1P%VKqG!7&YPjzFl90ac*_#`+-Jkpy$5c+g;2F5=h@p$5*|HZRsZZQa zd1O4E`+Q=zRPFQ1C&$jreST0sZM(+eMJwc<1O~e0%4xanRPN|9T;`4vJjh`RiWYc8 vpoJ+YTHq0Z5~h&2M2QdNNJNg0C40@~BTs1C^Q_JXrW^)OS3j3^P6+Ov|p=Jdhhl6+i zU#emYm}GEs?nmj|xLifK47D1T4k4FL4aX@^O2Ny8bCJswI3=LEh$T?T3rsa>2n z1;Qz~CZJvvO+X%86G$(zCXf*b3)O9E-o!7zF1}PFc=4IO_$iD2)W!z#^=?YKJ2k^q z)9bssmorcf$O2L8<#yfOuHoIEA;aGJX_kijdDkg>?@y`Q_jh^D?^MC18h7Vw@W#$q zB(hY4H)aZma-F%68>p{;-A+Ow;oDBv%4hP@t z-*QeM<8sTL#`~h5LvH<8F!KY4fNF`7j0jCtaTsRlGOaW6Yfl6Ki zs*B(hToXtyvL+x8t_h?USrf+!DFNOKNM&_q+bQpke%N zuTsaEV%<~6G{V3Ap8I#cSZer;uU9_x z_4EB}M>zx2`djSw23VV4Z~1)x-xjf_cQiI98`|VcaJuF$Rz9`PgXg@w(egD_z5A8d zhX2q1`uBpy;`iT9X~h5Cr#xYuL4SAAt2ssG3zbi`%YKRN2)4T@_*C3|rfFK|52H2> z-4dt8cX*4{PxVGe9GclsI(%%^I}CdEcSZO?QDw Oiow&>&t;ucLK6Un-u&_a literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_35.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_35.png new file mode 100644 index 0000000000000000000000000000000000000000..6b5475cd36e27d99c080daa2943c86dba0f8e4f3 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9XI;uunK>+S8^yv+szu8!aD zo0K$EoGiaSZ{iQ{6mCC-2m?Niv>U7)LN1*ej#HqNf|m>DB9|#}NAR`bKmfzxhT;<)X>t%TFmQZqc(1c(m&%Y8bH#JVE z&;MV{SARBe3ODP|XTMke>OEBR z%jW5I3!&t$O_?(`&tvl6*QR)i^{`LR?z@GS9j=OQFn{Csf+HfZprJr)n00ErWkL-& egwB?oe*f*fFHM;}V+Alu89ZJ6T-G@yGywpadb0)q literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_36.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_36.png new file mode 100644 index 0000000000000000000000000000000000000000..84fc40805211c76a1c12302b0d4309f52d145951 GIT binary patch literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~2SqaSW-r_4fANq9y}@hQNFO zm%iN_{L^#OZcfYeW#zh$zA-Dl`q+3<#;rlaaY~1fODBZlT;wuE!OI0su>>l438*fD zP#r>nO&Wr#a0;dgq!(Ee$OyP5pk5SBKpw(EqiXlQ&+{ktPyT9?c4z-?pR!g|^ z>l8gu{${G&u_jVqGSz#+-orwv?>rM$YRtF$InD9!_v%1rxv&0bdyGCkh|)W?X7kDQ z8p>>c_uiek_{=W5IJHw}ls{Dep4hK@YP!qJj}emWht|K{ZnI2d^5Qdg-f6Kr{@>cB zA>O@7>)(m#Z@0Vbyn46Xb;`y6UsgXiNjkcqsB*=V1v4y9-D~XJRC{b`dRE}EeP_PD zEB@wttE~I^W*5t>8@k;8{lD$hnzUBzy!&2Xi_?+nMyED2pSt^96Dd&{c4nWN+{b@EU(8%y z{!vrRa>>-iXMWsS{{BS?-|EuY#&KWb?{+MZPu4V%f*NboJ zFPCa;S;1ji`RN?va;|5SzTE!UXmD8DVTyv63+Eyi2*nbpLtStOGB?BZOJ77bTP@fMA@lMEea>~pQ$@qu%Gd)9TgDV2fO z_~-Y%D?PrV|M{Xld%4$jIL}zrGq=GtvZh4+KmT2+Wg4!Ur?#{0RN@Q#r7J1k4m8KM zwR_Wp7jc3o?sne)k~_VoW_!)y0#&a-u1%(=>UF;ee-}*txu6;0c7&rL{zmpNN+_Xu s7$uZ|0SymYXh5Urg#~S=M&c^o)s5MkT=q6c0^^jy)78&qol`;+0DAxak;6&gUK}cF%u2_x78&uWNZ1?YR+X z?Na%D>lu!uBL`JZwJzTC>;Kh7XLvS;@@`5$E@PYLGG!wBtuq>%{di8hNfze*)IHT9 z`}g(Nq*e{>nA_c-PD?sWSyb~yP<&%@-=lLseuzC~3v_!k@ z({V3S*6&l^{#`WCO=e^Ick|^n->iam-_SgDQ+eTu%J``o-Z6F||5kMTIhD8d;m;Ql zJm;;?HBAgm>uITzoR{wU>DR-bXEefR1<#WW2)o}YelzfTx^my2j=-xo@6Z32d)#1q z@1{$0KIKgb?-xxys8C%Opx_ngS0B9oow8TpG8fBg6%pHitAyOYaqUTEz4?3YH?6>L z|K=H0HKwVE)LaSwAy@h2>xUD@Pgb}t)e!Ih^io2*c(?J^(59MQ4^|4LZf$jaDsfrN oinuTa#w{#1p>a!jq{cm#m#*009Ba^N0ZelYp00i_>zopr068iW761SM literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_39.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_39.png new file mode 100644 index 0000000000000000000000000000000000000000..50f71fb3405e4b20bf299566b5819c5468988b35 GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF>D;uunK>+P*Xz9s{nhKqOq zUn*dg@QuFqU8w%mvYJ_IcIaiK{p1i(?GOrV(h!7Dj#D~>Tsk%2l!BKF=OULWV2UMB z$xA?W5uAc+0_jE81mwXrf%GD40vUm@aNfUT*LS-gwR6!tb;ZKEM$x6xV@lw}lAlY( zQZH+iGj&DT7yAavi9DVDJmgLAltm&-HC#2l0=t5y{N=Y2z0A1$ePUo(e_Bto%TC$U zZ*j-sqyw)V&#cfpwU*hXOr`DlqLN=?Pwf|rEQ4tSnV`&X_3ll_CYw_yEavTLn|R@a z#%A^xbKj|Tewv`M`MO+ruFK1Q34||E9Srd^vS*P)2;H+NAp{I$c(9^}5HP&p!D@7r ZcSjAMKnmlF7GPvDc)I$ztaD0e0su}lt-1gJ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_4.png new file mode 100644 index 0000000000000000000000000000000000000000..fff2a550b3b043f89d863c6e481eeec601af2e4c GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|jC$;uunK>+Nkvz7_=@hroCB znYN6brUBix`h~`YOdIRNnjbeMwYfKFI8Nyha_NLnoQqthD0sQRDV9JbF9Fp>5UN8c zut`Hu6;8o4f%GD40vQ3<1k{V73CKfOxal>s+LN^t`-9U*MoQd zU)ohVnWO8Zc`R!l+Z8pNGiMU46?`_cbO^b0YB)}TQVL!!oQqthz$pRMMJ$0zUSO(8 zLr}FtC=gD;H39XaXae%!nm~GyHGzykSg5V%_F7*1xxi9^{QjGtJAx*hKIBv3)orA6 z;%fA(ueTQI$UT|-dH)>GDNQ}IGQZ5!;C7j57W`|@A|0XBe7Qg_qdd95E~B*DVoNoW z(*>7mJboqsWNpg@3YM_}iFf}Ni9GvKt-hB-$t$ocXv$*)7tK?;hvo>jzn^lbr(%B4 zl%tDlcFzUM1SY=w*X%RJo^#8k{Vb@i2lC)vMs+qwXToX_)iY6crt_i3YMH7&Ru<(>*^UZJn-{qNC*DOA^C)f6Q(n^i>ekD&B z&UP6YJ>v`P+oxfpb*jtrozT;phG+VW9{YWrp|SqmkDLGhevfpU5;^&{>Z#SgfB(=h z&Ocrq*!L?>YHv`y1Pr2Wc7gOupCY*Mgx%KawAMQ4h<^7wA z)=ld$%J$S$KD9UZOh-|^kGD&tQ|BCSp>ZvH+kzQpC{%AJ!!kK9u{CAhz~dsE>I|B6!GUHj)=DtdVVG^g^B-KFc0H!?#Pgg&ebxsLQ05e|+LO1zC#8gE{^yA zU)tc>p(y6Jt9O;kv_C8r7JUhK7M%GYrr;%@x`-uE2|_h#2n1;Q!EDIG#Cof=?@ zbCJsw1uqvk1=j@9i>wJ`1WXf1FR~_(5eN(aTo<=_CYSqM+bhtmIpfcyj!inJv=?W@ z?sTpE)P7gy*yD{Znx}r;d-u~~kw~h^nefl9nx}&2+ZW#yTdMJR_0!!ufx;#w@mdMwKV%;PdGKIB x^${dckV6AG2+>0WB?y7B01tPhAiTDNc~+PlLt{|sd|>o4c)I$ztaD0e0swh~y`TU9 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_43.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_43.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b975c13de31bdc4eae5b37b0946a5550288c55 GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6yUbaSW-r_4d~7bxj5$u7Usl zFaLU1W7&aQdwVC&F<-pAlu5T}Pl7?aro$8kFBi^5E)a?(P{~U`brGCu(hyYb5DJ7) zE}a^VQ#yoT6kHQXFR~_(5pYdFy~vtCMj$Ml`R~EvxB4G{+8+Cu?{i#XdFPiu`hrg{ z3#**kX4tt&!6$HAZ~AVH%fesZZtc`?w`#sG>z|b4?OIvB_OtdWb+wwM8urJPP9@Bk zzrOO*r7d1l?jKV;_2H@g*2OWpr=Hx{*7fO)tybB`&F(+5c^2{PIUd=v=+FQE-9|D` zGq$(5b#HpqAe`DB?X=mo^7#U>r^f=9)Z4^IO??f%}=Z<=2naDSe(+{|19Lq zKG&U@Q~d2zO@gP`UMs&gMZE8Wb^Mn#f#gTe~DWM4fBa{H% literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_44.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_44.png new file mode 100644 index 0000000000000000000000000000000000000000..f151087e967f1eac6fa84db34fc4baac2ad1da2f GIT binary patch literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|i?v;uunK>+KCgzGedfSI7JR zFI`Y(Y)ksyoURhJxl{ho$r}o1K8PxK38*e&2~>hmO&Wr#9YTR{%5h4EkV~fqnBrXI zGDX451x~>=f%GD40vQ3*1k#JF31kGq!au*+<=?M=b<;)j)HMxjIi|p_Pal02#TcC0 zGBfD8@YAF~x#xmQH6Et{iR8H3i$qd?FPnc>(JS!SS%p(a7r*&s{UXaZuxpdesokco znx`&lq+b(WYMlCeeJ)Ti_j3AsZJ^S-!BZCX*d1RdwnD>I(<`tmXo|e;X3OBNOErtm z-1>4P94?IPJ%ke>zC`vOa+sid4<$^1!3qyZ^e_R25Ii7VrUc}(v;FZuH+#+NY+wX3 Nc)I$ztaD0e0suN7t_A=A literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_45.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_45.png new file mode 100644 index 0000000000000000000000000000000000000000..407e8c5ef5ce7b9490c4bbdee1b699a2be9a3e19 GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBGBK;uunK>+LN^uEPdAu8#Nr zUwUh|rE_lU7f0g>xog7K3pib8Kco}SxQHcC$xA>LN_7YYHfac|!YP+d4aX@RLSRb4 z%Y}21%M>^T*96pyq6x@@YXa&;(FEinEIh?2UpF`Ys&Qw~l(m6ne>hw;Pd$!wv9vff zCGyfUp{Ex#))#jGrB44hZPsv=6ij`U+^W&;`tyBFVArP9pXKS@K~r?sH@|zQ=@mH5 z{bz|kP}t#eqdM7ltm&-fd=j_ zI1gs&#zO>v#z2FDJnsO55gu^R5FtMNPJUtKKD9nC=UTiuFcuj+UHx3vIVCg!08c)x ARsaA1 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_46.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_46.png new file mode 100644 index 0000000000000000000000000000000000000000..19e37819fe24e3d3a72d590ba7e452eca73e0a8e GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~=?yaSW-r_4bxy-ys7Yhl}_A zU)tcx!RY(uM&|v=Y23cQ+Ji1XW;`pijUli}Lr}Ft2uithYB)~m5Q0&hi(IBCc)36* z0o6q;fl6L*3a$yL7g-a?2)HJoUKCA09>T(>UFP=Z{`c;2e=21q`})N!mz|zdB#+-y zJk?<^ki({0^TJ;lnWmV7_)@5;KKPqnd&e7cN2 z8EttqDNOX~^3qNti&H%fVRM$e(gHD!^{e7QNX{Tj2+Yich#^QZLbn+x$%8Ux+t zUI<Er)H7vBAGrd) zKXvzM2sA=Xy2dYaiWFMGh!n1i_*N8bP#;nVrq*6XXpqaB4l51*RzmPgg&ebxsLQ E0J3`gfdBvi literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_47.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_47.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1475ba4d40d5859f8762e0b8f41ce8847f869e GIT binary patch literal 526 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV7%(-;uunK>+P-6e1{Z7Tm%38 zU;g%vqx_Ns3(MCY>Fo4)CAKQ}x8saw0t#LNs*6|xl^|4;hM;PPP#~OgoYEoW(y0Na zI2XB0QSfqsQ*ccny~vtCM!+d`nqGm&T6g|Ri+?_)^-xWf{ZgPgx@V584W4qS$9lT( zQj5oRAwYk@y^rb>NMN9Z!cyl3NWf7k{65TMzOvEs$z|mq;=p)j@O1TaS?83{1OUcK B!tMY7 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_48.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_48.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f87aa5f18c5608ff76540d1af82e5f2cb1bc0b GIT binary patch literal 691 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV5;(TaSW-r_4d~7z9s_^hroaT zmw&yh;bb}8ELMBwcF&cm#e$Y`1~U%}DR>E}E@BB(f>2Ewf~p-tfpE%kN{5h3rv{kf zT;wuE!OI0s!8L*OB5MK}0n-H1i>wJ`1j52K^G+206W=*^)p^6mf84$w4-5R)ZD@7j z3~S$v*F1q~^F)^Q7pa_B-mP+KW9=r_DdqM*PAJv>-oJ*m&#ED<)96uH%1VvZ=hXHu zIur5Yd|`Nx(JNye@zkfO4~zet$z3n^boO-gSx@8^eY*(k}2J*!8e|GFZzD)xsq!qdp^Bsm{oXhk<5*QGacRj z<<&n8TaYDR;Wu;7ipc5vdoIl~<>D)JKr|mH+4>WVL{AF}(a(?gB z?G8jFzo)pr`Je78S?VzN==9QQBB_t3x1QLX^wsvGj=pP- z^wW$P<;UVoPo0z4-v23U&f?^AJ0_>q7`vl{I7&1DV;UZ}=+Oj>GW(;{Tl8IEVr1}i^>bP0l+XkKos%Bk literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_49.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_49.png new file mode 100644 index 0000000000000000000000000000000000000000..21c22e7d58494f1354676f0cd17ff32f20c9c847 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBGKN;uunK>+RKpT+I#wE(ibq zpKo@&!hkXHZr)a|J*sCG_?PDdr0rns5OV3%aGV0A6uewG7r9J-j5MoqEV|ly?x>wU9Z4vdj%HlIe4-5SrkyzRkG7)YqN&D$deuo7tK?d?u#^B zf8Nlzo!(_sQ?mZodJWggo6cfOHC#2l9JjTiyByiOpb&$H5xRGQo`;7Ks&~Ogpad0i f_##<&<~!rZ(#Rt@Yg&&0W0b+u)z4*}Q$iB}YMHPK literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_5.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_5.png new file mode 100644 index 0000000000000000000000000000000000000000..241fad550107b41dbc16697db2d2296a14248ac8 GIT binary patch literal 643 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVDj>GaSW-r_4c-RQL}-7gX7)* zm%eH3Zg9+SQ@$8Gb!xE4q5k;?-ZCFGnavQ`q#>xs`qzLojt>P07qb4nZ!+t-u(2L(#pQ?v&~Wsap@nC9lLEV3Z@=9;Lf-2m(A0T z^!tl+WS()YU-z}|`}MC&G=vY|d0Ttx-t4uJ=9Y{86b65Ka`wd#cNB$JiLWDR<-~l5I7ERDdqke4Ve_;*zV13MY TV>B>TF)(<#`njxgN@xNAW#$a?U~Ly$?5N>E|S^Gy(wmjAhYmZyV~L@ z7nA>YX{=xLa_*na-)Gk@4u1LW_p2Q)l^-9@=R0@T;rtyTsjaD3i*JghI!#%;y+vvM zs~#SO>^sx@H>EyOlE1ljTjjj1op*QbyK8r@bOJ(hfIU84r`;x$|RZ%U<}S2Zs_)npUM#uyw^zf}QuWluXs3&}<3q2NN3Yea-dDM||4o|f&EM6hBnxw-Q@>4f zyK4GT|8~Ucn6oZB6Q=lY-+S8+T+Id|t{4CO z_kVq*(W9o|ec<&bzS+w*Neit^ZZtTo>M%vY%Y}213xr|`RPqu~T?D6^Gz3*UgaRRy zOQ(k8lnx;n1=j@9i>wJ`1Y8qPFR~_(5eN%^KGnB9w^!(yhF9RWV>3S;7I@0NXibN5 z=2o%P;3=7_uYEIi(L8nhesOu+B9YYWDb+S7Cu4V(ChKu+9 zU#enScvXevv)qsT2}%2T?>^hLVCGX11up^BMJ$0z5UNQ-P_;uS5KcKx=@4@1)BsbQ zi(IBCc)7qSxF(QZWKAF=V46UBku`ygKv+1Z%IVtYKttu?bsF_TNp2d8L{cjz#3u_b z)#!g@QCWK=#zj(WhKB1+trI7Hc5HGLStPPl!&UP{$L{>Vu1&F1CO;NQ{j5>zuX*Z{ z=^PhrufV9)8o6K2sV~!T&D^_a%SEvAmr=e`7WwdQRuU?|e@N%2{nOc&i$v01>FZwY zkLxH3m=U_!?OnUd_r)t~lzZ+mOF{!;0K&tgh`BMUzwf2yrEXv}GI+ZBxvXP686-pG+MC$8<^}n~*|J74I^`bLg*X#R~-bPoyJF!z1 zzw=!j{%RWkd<}E%O{O<43NM?-AN0jb|I}IbC*`{(Klaav?EaJ*n09|nf6u2p=|yv7 zo}N)yt!{NOca70+vD8o7TqWa$gi;T=xKF7Kl-uv8dFq>n@%!HBMWU%rQ?7bDP1IPu zK4y_mSJBkcQ`a=++r@}J&wlma*7Q`5_L(&r%KNQfW>r3U^mFCwDU0sBQJC*!^R%;1 z!+f`YWbNFdBb)OB^<j{an^LB{Ts5hj9&0 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_54.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_54.png new file mode 100644 index 0000000000000000000000000000000000000000..1bac19a2a5bf6b64c27eb9121838e847344f3b83 GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9jM;uunK>+S8+ybTH>u8zO* zqqqwm@;`Yr+w+dp72zhA+iZ!mq8l_Er*sIpbV4Z3MJ`hmyjvZr(l{udXY7OjDTwb>P686$@L&M>Zz&DJ@%~N5$8#mv Uw%E-#21Y7_r>mdKI;Vst0J0CR5&!@I literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_55.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_55.png new file mode 100644 index 0000000000000000000000000000000000000000..9992de551a37b1f49012effa86ffcff3257ad0a5 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV3PH8aSW-r_4bzIq-F&HhroCB zFH`2Xb}reS`Ec*5o4!W{>q{JtanF)$V+d^05LE3Df>JJ>8je#sgkTisB9|!&UM>(y zKy?vIppqAyf@=cmMb-o|0 z%F8a+aJ8)6zGlYJ?w~35^~XY67QHcjY-e;T&)ezl;uy*2*8;=zIp0bwE%gdqwoas` z?%CX8q13=Bcc-_6-QVdFDe+YJn&$d_9@^^yUl#gz8NHURy1KaZWUTiT%lnUFuW7pe zT%eKuFHwA{hO>X!vs}NUZ=$EPyGic!e&HE7tJd7+;pOkaZvJOB9jltHvAKL+I$zee zbDz(2&NR0=DPFu?WAmaHa!(d7Iy1|rq-T>7$L+MZPzQYPU437W* zUw*=D`Jh8$Li&<9im9QZ=4>)*H7p%ME}a^VQ=pWBmkZ}2mnm>cKy?vIppqAuYSIu? z?GOrtQ*cc{y(pT1JhUSv%mBM=r^@2RP&*SapcRKr!%E3hkQ%KE~Ri0~vUN zd%K3~%t+(n*J7!cHCD5|ux|UhNaX1y)988K8t4D~-~Dwb530M6Jp&34cnF|-2Iw_- p2%vffYy?U`Acr1OK>T^ksQ1zHiulq?;lSu(@O1TaS?83{1OVW4pThtE literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_57.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_57.png new file mode 100644 index 0000000000000000000000000000000000000000..32f735617b8a1039ecef65eaf71e6cb6de3cc4c8 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4ULV;uunK>+Q{hybTHht_R=l z&wSgkWBPd|Cfn7mU7KuDHnq=Rn4&^M>aD|8~ z`~6-dlKQ3VSm^|f{=Q4LOEne;mOWGUxCGsN|Q}QVr|m zQop-EjX65?B`%dIQ?9@3)c7pe5eV}u`ObDk1Q68cM26G13dXsXD@)W`ZfpQX6N9I# KpUXO@geCwrm7K-^ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_58.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_58.png new file mode 100644 index 0000000000000000000000000000000000000000..5394d4c1fc5f79471cb93899bd0630b4d9b6459c GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVAA$qx?fa)TaKqW6Q z)ubV)+94DOr{J1^dQmh1d2mf2y~vtCMj$NI=BtbOFKKz~)b|USYm}eIOfl~=N`A9Q zB=zNv|C0MPX1hv${k}>6i$_N6Vw2@D5~)`VH@&~L=#Ijv6YhaWlYOV~_ZcZK=<3!y z)$TgeGIIT_Ki!`k1LwI4%cg$&`C`K_vD5?Kj@-<4v8+4iI&;gU6Q zEcIE_+fz5rYBtN)3m%UUeEQ0Iy2kAH!C`-U&+D#TUB2VZ@);WHi+lDR4srYW`n&fd zfz*34TMx%3mn~F2HGA*N%>uh?7Ac?VU3}(NTIUa=HVxepr^R!4i`BeV=Lhoni>AfT z-+Q7{ZoLNk;x#w)PX2mUdDZEHx)pzi(QBsq+n1s&pQXlj7=3ptpL6`@Gy&uQqC%)T kBH|AkF}R{}QtV#FzT4W@mdCoQ08mdKI;Vst00;8$d;kCd literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_59.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_59.png new file mode 100644 index 0000000000000000000000000000000000000000..08dd72f45ea2a060a3c92e32c67ec80c28a11560 GIT binary patch literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9#S;uunK>+S78uEPo6Bdc2hD^vm%Npp`qTm&HELO%v^VANGJ3Cw}Q>Mf|7I}I$Lu>ID z>!ljri|0tjPg&Gsu@j`g!D`;LMK%wv2&Fb_yw6*w;VQX(C(xujnVLW|T3>$CJ+;Xo z{r>VAsS|yMu9X=xLjA+b{_#3bsh4=xS9tsF>7&~;j%Xl-2a2D7K7+S78J_iE<*NgA! zFY7qe2+XWBeXdf+x>sxAHO9ng-VGX#Q#yoPIw2J2B9|!&UM_HoB~ZyrKy?v>>JSQS z(hyXIQ!q^+y~vtCM!+=z^`dA3@(>n&TCcumUhduFs$PN9*k+XkcNAUL*x%+3vAX6X=e>C|wX0;LqZTsRlGOo3AZs*6|xmAt@I zlZK#bhfpA#f@=cmMbQN0!8L*OB5MK}fv|A1`IF**`Om60*&Xk?U7mg|aC5!Sl(o!K zvO!NKr01;G=wAGWv#2Csk;v06vNw!Z{Qnn!WkUMfD{nOB2J^98+x)n1QO^y<{ij8r zHZMB!C-X;a-IHCeJ3XgJzCQIsNk(^n`rJi6eMY}EW|lsx+maJ#r*mr659Ru8^Cg~Y zh2L4k_#K3vA3(NLIf7+#?+-DYe{_XoYTyH80cezYaUSGD=Me^%s zamm#8I~Qnl+dY}P-=2HnFOACd+pduksqarq=mxsQ)b`t47kk6-|+RUt9If z)?&@Q)O8horKO5tf3xndz9+;4i!AhTM~*B|e8XcHJ+gpN2ajQBd?V|{8PT7#>aG7> VlT|dE*9T0744$rjF6*2UngFL+76bqQ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_61.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_61.png new file mode 100644 index 0000000000000000000000000000000000000000..13f6861f60d3b5aa4da80773f772f3cb3adf4bfc GIT binary patch literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBGEL;uunK>+KCkJ_iEh3!7ULi0~cIp2q+upq^zISK0 zdQ@PPYA}!LB9YWr8mn7xYO&A!``Zs}=y$FnSD8g$bZ6@E0SyV2S@ymu`g@n>j`Bz1 zOGAxnp598_A+%J3HPZCd`nZxKrAH!aE+DxZ;b4fLkv)qXLg=1F2_ax0!-EwX$jEx( f!Rj)_;40^5mf%xN3i&62vB}`+>gTe~DWM4frJk;B literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_62.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_62.png new file mode 100644 index 0000000000000000000000000000000000000000..a248c8974be1007e2a03e45f87b21544eb040fa2 GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU<&kfaSW-r_4bzIq-F&Hhrsvs zFK4EjO=~K--0?m%b^1w(Kb;OX{}K$_6&P6NBG6G>?WTC!5ntP_-P0NVLK({#)mVb5)?E3Uc+Iz~P zH@l9w@;r#VBRV}lFi#-$2t%6x9oLZ`f6)*T>9_Hby}w`{?=S9p0PK0wZH4ky}esr z&G~WCEbMAwxZqPIYxcnJliXy>mp;~Y{H9kC)>*W*a?b7+2Uy@E0uT}h$bpX%V|W9f o6A{hONJr5Ni)K)a)!elI!7wA*VX6EPU>alaboFyt=akR{05rP_VgLXD literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_63.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_63.png new file mode 100644 index 0000000000000000000000000000000000000000..70f9c631fb015f1b3752c9fdc2b0aa7a700ce416 GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF#9;uunK>+Q`zzGejh*T8T4 zGw(JE8rz*H@Vj*X(yQLo7dsM+534#%QSfr%T;u|wSOS&21XLHnsU{6U)efOR2<6hL z;W(v32u8s*f%GD40vQ3<1k{VH31kGq!kd4)`*((K|LS^E;nXV&7tK?fG*&YSF4d4< z{6i?9sJ7ZG(9KC`sfMejS72Arltm&>Z#Mg7{Ste6Fz{WSA5hTkQGp*&lX~jc^WV=r z7hY=n^!;xy=7}2HXYJc>chObz)Z0TMNZM29JF1Izyo{bQQQ`ic_Tp2A7yHOBSpU!5 za|-WbpY^qO_6k1TWpG4;*5M(z)Vl#CP>@1$LMiipzi*OUla&I1QOV%x>gTe~DWM4f D_OP)R literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_64.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_64.png new file mode 100644 index 0000000000000000000000000000000000000000..ca664a71e647a23f97a76711f5c6c41fcdea20f2 GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9vQ;uunK>+Q`zz7_=@2gi5y znYN9c3foxICjGtbD_q;nc$@X8$#jOmCJjN=4k0Mz(y8G%r9%itaV~P1qTuBMp#)SH zu>>l4!6~>Vpk8E6AS2+KfO=6h0eJ`upLU8bwyiIlqkW3i`H%IK7nO_dn4E}QnDU3y zWoN7<)Z$vbL}TrwMIujM)VMn?(h**2 z>=ihz%jmW4Bn?-~KQqLZYFu8lC0aanrN-MEt~2W?uL-sUENTGWg qIix^=4GUiMkOBoZGxkC*Vw?xPq5}>LQjvB?#4|A*k9R6bPprr*sIpbZUSp z&P6U$6ueyE6kHQXFR~_(5im_4y~vtCMj$Mlv(f1I*ZY^Bx~;#zqSUT$@3+5`0`J*g zu(i$%n_~NVj;!Mo&TT1EB-wX*OAvDmsq)R&`AZh%bKgHLW1CP_q!hYS>#W>~DSbv+KLf4nj-1#P zHDy`LxgV=jo``>)7#OFkY&GRo_{lFC#?5nVFT9L(OPdm!E1BAQ@q1Qa*i4K2TBovt zomRU<=Jo|m;dZgKny`jlY*9`}(YGl9{!;?qGj7ofp5h2pxqOfG)BTgPOQu|PdwttY zvherGu1(K3pU_;mcJY}T2j)K4bln*-<-gONr=924X#ZQiNM`56tIsvvZGMZTJ~Rlg zC|z4#9qo2#=I{F7jef^8HUv#kzQ4R@&*nWgU=d4YX7I=y?J}`y(5txU*+Rc|IRY}TNe2uwWkOXiO?veN?ZbC7M=i5;}Vh_!0F)T aDR$AX$8^sy7##*CNd`|>KbLh*2~7auF&*Ln literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_66.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_66.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4478e7be420502661af062bd42185ab57db641 GIT binary patch literal 515 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9mN;uunK>+P*ru0sX_ZWrIw zUoK^Dopt8RWlQ#&$pK%bPMqJRaORV!f|r2mB9=fU2-Tz^sM;YE2&WvUbO^b0YJe%u zMJ`hmyjC^{})r&ml z?R32<^K|>h5cbONae;jOpY-N!pYJ|pkq&3^D<`)p?di)_X$U@@s8OC|SsP3#Yv5*WBlzP78VVv3mSqMoixS+PKosEys9)W2)GYM%OJ;G%iz zt^Br6Z=$Cx>e->1vQYWd+nXyN+dciFaNK?7hQi#(F;gb0Yc`3bzB%*6=-371P(k(? q(4X+&fCdf~LWKnp{(`Doelkq=c%go#j?WnwxeT7JelF{r5}E+l>Alqe literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_67.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_67.png new file mode 100644 index 0000000000000000000000000000000000000000..bf11ed2284d659e672f7dfc22234739dac585a35 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~=(vaSW-r_4bxy(P0H1hroCB zFH7dP#&R%m-kbe$)m*iM_JtGf+D-7;%+ev`(y8G%1xhJ+xo|FWnF6N-R2Q)XDtUpa zCJjN=4xvCe1=j@Bi=qk0gKGlmMb-o|0%74|`5j;Xy4d{dyZ-Uptfgrhh{naE5ao5O1zn@>+ zX33^*yZb9N&@I-vU&8R~KfNLql~WBzZBzX;PdNql%~_S#TlB=TyXevG+OKnhrc8IU z{H(XoE6}a4HK#;vPjvpC`9)_tjrbc?5|7oeGT?$5Q zky@u#oOM2?F@3(C@ZFw`rjUTAUHCg9Vj3ES@CZNtoB8I_hGGp93148cV(@hJb6Mw< G&;$S~iS_dU literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_68.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_68.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d71b8cd59e647bf2de379280aebe67533f02a8 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBG5I;uunK>+Q`*p=JdUSI2Mr zGh-W>`SwI#h$0;2`E}amHbCJsw1uqvk#S*CGC7`+pLUjlQ zHfac|!YP<0kX~d>AS2+KfO=6h0eJ`ui@xdKnuw}SY==U(VneL|EjB>y{OG$?KD#Js-Ci_r)$%% z^}d0>d~g1pA+}WG^r9_M;;A81!rm+rS*qds^XLvRy|ZkJnAM`5nTPD=GJ1%KDp!gaksL*|l98|#2hKDa|P_-16)p<&>Y@PS> R4=^4XJYD@<);T3K0RT|suIK;& literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_69.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_69.png new file mode 100644 index 0000000000000000000000000000000000000000..524a58fcad44a324b40885c21e3a00097189a764 GIT binary patch literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|i?v;uunK>+Q`zzGejxSI2Mr zGh-W%iBBn4Hun5KE9tBt>v6`!w%`U0$0;2`E}amHbCJsw1uqvk#S*CGC7`+pLUjlQ zHfac|!YP<0kX~d>AS2+KfO=6h0eJ`ui`wn&U(KI-T)`_)uXodHC4r?H%a4mbJr-CN z$5DP?bg4$YAsW|3lxjm*c~)wk;qf&$DLsMUSQOV4x==+O{yxVerV**={9;a x(|5w6o>-5LKw5`_lGkzu)Sy6wU*cNf)ekC{+`h2>E-(TaJYD@<);T3K0RXxEtT+Gw literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_7.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_7.png new file mode 100644 index 0000000000000000000000000000000000000000..51a24906e6c09e259809c3a23ee279b552627282 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU=s6maSW-r_4alk-ysD72gi5y znR^?;6yIz*;PYtuv8bA`gz$pbU7tTd4Q@|8U zpput>>LNG=*96jwtO>}2YXa#-)&w#FVWC_8j<0u>w(U={uX`JuZF-MAP>a~3_!cRSB_`9#z{Rrv%00M>(ZOu2~)Pm`)AHIvOM)d`~2oUJ;CsK?yZ|%k?L$aTm@catf$+2n9B22tp{wDIG#Cof>dT!OMknk;@b? z#S*CGC7`+pPQf*S^df5l^5B|4dXY7Oj6hfz_U4bpf8$O4bDv*$8R34;af*1CQQ@1b zf=jN&Op(_6a-#76^B>yG9_xPQE{fT@_e-lB=i2Bg=|FW0HNxL2*IvITxKw=ZBaQGn z-q4z*p)Qvmx;~p2s3x}WkyDs^riw`1f+x*YSMM&Zs!=_aFy+2jb?KCsUn_paekxL4 zIPs|1)AyfWm{{!ho$_+xg`3=_pC7L3+4Q(4Xv*2eKK9b(vI}MhoAnwA9-o=pwdv=a zOG33lHblxNy`@hDSf_5j+MZPp+gD+u8!~O zU+ySh=qmGI_RDoe%O`rxb2+g?;Y`7j0jCtaTsRlGOaW6Y zfl6Kis*B(hToXtyvL+x8t_h?USrfnuWq}>f14Acg>(Kn zb{JWlnE8FaM7xGGYvuFL+Q*zOYfR2-pDS*(h-dCh7EQ0sOEk_-O7je~Q}U92zG%*_ zqhW2I>SU^?Eb8epde}Kh!_~6XC$OvN^#4m!)V&soJoTU0`RQTcy}cV2iKO1iiIi;9 zaE&yI?h2Yxn7FR%lGF0aDWa?IuQJHt?EI9SvDs9JuJ=gcP`IzBB#GVUc1pGH(Y)FN3G6pUXO@geCwt61A-W literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_72.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_72.png new file mode 100644 index 0000000000000000000000000000000000000000..054b9c231eb17962c9c0fcc2b5e5eacad40e8c3d GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4Cdd;uunK>+LPaNzDoZ4uS9M zU!Jium15bI`E>89o4%6G_8PA~HYV{oH)uFc=@4@1gixG|T&5^^xxguwKqW5$)kP4h zLnyFGLr@h?!8C#NB5MK}0oMf7i=qk0Ls)23?cVo#|IGQ5zuIcOi$DJ(U;OEMiFE#; zCkp3pTz|u1bnH)H;5QaaE00BQr2p$K+VlHpHQUSm|GT9gM6#P`H(3AP={hBH^U265 zg8Toye`}|C>aDod%;l}`-@4a*o4hDy?*vWR)MM$XGA*0mey>R@n{xZU(5ZQec2amo&n8Yo28O&I}Cu`b%Rm|F8A$O&<3-ep|E8>dvLWzI)cfPxrFkoaSG0 zPb~HHzn*uW-#CQXY!FCwo+8LzaqYWZ^xpF|XKwBC4P?tvF1|K%@A+{16*mLJqSxjN zrXE?T@yg_eQE}>hp<8OFCWh~R=OS5}DJ>b*6x zHyRX&o!O^0@8chvq&LC4f9Qz)OnG=RFpVY9@Pts{Hok!OX4+LN^u4V@whl@M^ zFTK6=LhFnvD!P^YceGxV&ylpz|6zDs*I|l+mkZ}27YM}?sN^M}x(H4+X$Y!z2n9kY zmrf1GDIG#E3a$yH7g-a?2)HJoUSv%mBM=tueCsyn^^85=o-2AeZaY>W{`i@JtEI@( z%L=ZVC#Fd#T^CxqGo^Y;N0E&ew`AZlrj-8rg+Zl#c$>?yEO?f)i}OrOO*K27wRU(c7a_%Qx^T1ub_QM zWU0nw{)j1yVuY8rp8KS+zw&@^v3InS+sTU;FCE*daeQ%4%g&2}Phw`27v?=v*Fppl l`M%{ugex?Zi3#4&dl?s%f1Ow|%?TL044$rjF6*2UngCm)xOe~n literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_74.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_74.png new file mode 100644 index 0000000000000000000000000000000000000000..5b33ddfe77604b947020082ac072dcbe4364cfa0 GIT binary patch literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~2JnaSW-r_4f9`vL*uohroaT zm)~A0eKaA>NO;G0neZ^~m(Cs=j?0@AOE9@`E^?Wo;02`wR2Q)XDtW=F4xzv%4M9~f zTU6z_Wk`v)d8y( z$=scORnSE~WYHaiQ~CSrQyC=Zf7#w`R26Vg_Z!yLR>BH@n;- zrJkN(aJjeXcJ48_zD=)l z{;uFN`ut1hafryqkkW5|u0A)K-r^!Dle)b0)J2W`d&8#iHp^JD&bzBvRW#+Ich2@+ zqhF<~uWPz$o?6-ZLT|g|dbgQ7by5}??_9ij`)XTU zSnbxI)4l29DaR}2p32`Bp4#X=Aza-ic2SJ2o#5}Fv;S)^_rc+S7}T!##J94`L* z@Be!DgOu1=OTNi`@NM6f9ce71pON;1OF*?lD6mOG5JEXl=@4@1)PPe8UM`%AT&932 zmOv#h0o6rt3a$yH7g-aK2iFABi>wJ`1j539pWEfW%Uyl%Ic1Sg@8Zk+&Qqk_BxT*V zUyYjLyJ!w)dgz4k^P)>NoZ}`}+5~nPl}vS+vKHu^r-4zbu9EvMZuIIZs+@8&d1n4` zV=kf8n>C+4&q$lHsAfyhx*L_!3%ZM5?b0*qvp(1vG(~my`}pJ5hCYF6@8_f|2`|-f z)jYL%QB9SvwpUpDQ1D&0W!r m`rdCs1T-`RafJ7Yk8Jg3$2|ELUH=1&Vg^rFKbLh*2~7aT`nv@H literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_76.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_76.png new file mode 100644 index 0000000000000000000000000000000000000000..6947b997e89548957b3a7d852cf475056ce7f6ca GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|i+t;uunK>+P*Xt`-G>hQRmr zFRdD<7~Q(DhyCyE*tTC6M6<+IF5h8t;auc0MZpV738*e&2~_feQyoHqO&Wr#V9Iey zhmcFB2AqOx0_sK41mwXrf%GD40`ib749)j=9lyH%|4X5z0@GQPyaJbXyG&Um!&|Mo0V9vW)78&qol`;+0C*Rr^Z)<= literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_77.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_77.png new file mode 100644 index 0000000000000000000000000000000000000000..07d93e67708cab7b15ebd995f67d8626cc80f16c GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV9NA#aSW-r_4c-7QL_P$L*Tpm zmu2@gIVGYe9j!KwUFzKU$Ku9?$Lw8}bC_H>7r9JP@PbkTs*6|xmAv3ohfrXXhM+2# za-7m3$~cYor#*F-(B?8_177V z^VUkxFh!6i;kkr-7jCgo?`s2Hhs;cxAAxAbSy?|55rBnLF((b#i-;wbHracBvS3j3^P6+S78t`-9UmxFiy zU)n7`p;ffkwoLSg{8vLk#n;S<)7%?09H(>$xpYD(&P6U$6ueyE6ic9zmw@Ub2-P7J z*rXw-3a4P2KzflifsBA_0_sK41mqzs{Iu45&%fP4*ES~mE|L*?8f(}QG-djcf>eP; zB2N=}(hqyaZPtjFd%E6X{;W4Zp~sC|ST#>EP6Vn7yu7LKwOHzpFIhZ6Qx0z2;^!I2 z*SYDPY-iAvMIuYrMo-ziI7j8whKyUwmuN6A&g2i8vMn#rum92%k<^eW*89G?Xr2l- z{Kczs>UMnHqnUHd7V%iNDR>3C&21MFVdQ&MBb@0FQgHKmY&$ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_79.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_79.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9c542326295fbfffbfa9269df55edc55d69767 GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6yUbaSW-r_4bxyQL_P$L*Tpm zmnHLAS00>{`g8Bhb+Tsk$t z6z3wBDGFXLa0;#oq!(Ee$OxDwkX~d>AR`bK_S8Mhexv>9Yq-qu^~t-|MHTng@Nerc z`c~kgd1~e1nT861U7yM<{Mmo19q7=|Ui(0_e{JZL^2U9gMaK^8cH5aX^^Vagb>`py zX3k``S3IS>exI@5|G@cmfn7xvTTk!kdN20$RPgs}f&ZSD-{B3PVj6yO@uD@`R6|Tp zU0t2>TVwO~mR+tp-{cFVzSY(iuT)O8(L1%G z`h{S$&*J;9H+kjBK0P6@`%Q3~>&_bQRnAkC4c+2ibbNZCG5^lllRJLhGd<5!H8v*+KJ7L) ze)VW!(iHW(K{}!+fr%Ug=z)n61HedxM;m$!0OJE5ZKyE-F#;BQlfM09FuTRXaLDcA R5@2Ft@O1TaS?83{1OSj6{>A_R literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_8.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_8.png new file mode 100644 index 0000000000000000000000000000000000000000..02cebee80de314a0d5b96f5d30e7f5e0544ad9cd GIT binary patch literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~KbraSW-r_4dYYP6h=Yhl6kS zZxPE=Fm&6)oNd3yNr-tCr+Qt_-Eqi10tO0P6S|K; mfdUT(6dyrC5;-(lQkk;z`unDC7Tynx7zR&QKbLh*2~7aTQ;zBY literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_80.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_80.png new file mode 100644 index 0000000000000000000000000000000000000000..24a1b26d924daf5cad65e1fe77a38f7a62939c72 GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4URX;uunK>+Ox3ybT6CE{@;t zn_LlSIWlYR#2;!8mKU61O+2RSFh#-3g>#V$gklL)@)A&81gDxb1XVkP0wI)3r-tK{ z4j~u?*96jwtO;ZUToX_)vL=ub2n%l(eEj_9Mu}fwSJ0G2B1<*urIvo}ymW!TJS4E| z(k++F4~s-nzdV>Ne|J%gKg zeXoo4D5yV|c@cfFJFM7o#zvM7A(u`K$0<-s!OMknk;@b~C7`;9B~Zx=Of_i;s&)tk z!YQ~Wpk5SBKptEZNH4M`kP!$Aqs0>D*~j;NE%OQN3YxM=WT^&!|D`=HnV-e|Ljt=l z&2iCW2<$SlYWTJ~ddkDVYwtQWitEl=sJcqZrhc8*0o3uu@8v78r~enNxi1{}uK%E> z=BXDNf=e}AHN6}m2J*`U$_cB2Om@}ufcXU7QOG_41qR&v=sp4Z3+{bXpMZ@(2?gY! eQ}Vj;p3PG5w^DsWJRdNA7(8A5T-G@yGywpwPn8=0 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_82.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_82.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee49ccce989b2103bde4da7b9801638582f4eee GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6ygfaSW-r_4d|9zrzMR4j2FZ z_wNsHG1;KSs%*0MskA`1y>Z`M?sKm7o}&HSZHnjd6LDL2yX-8QDkGozB zuJkl$sd-H~yy(mx&-J_Jly($-U0Urki=Vwub;FiM=tg2Db-Wg?S4S|f4=Owec}CH8v0F$en8wp3Nlya7y244$rjF6*2Ung9s# B|4{${ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_83.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_83.png new file mode 100644 index 0000000000000000000000000000000000000000..9d834fd861f4bc9973e75d9661c11f81685db8ed GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBG8J;uunK>+P**zGejx*T84? znX-+?oc6PZx0D9)zEh> zeExUyu~+7)9uxfS_MeJyl@xe#=Hsnec9+aOi?(>}D($|crRgPpQ%m#I{>5{C?lG|R z2*wf>y{Y$5;bh)V^u{xz-iobqE>Xegz7At!NuG-V#Q_o|DBeO23k+{v5>Y^e8hQW#g99FF ir~v>DLv&jXm0F8Lwaz#v#e5zZpA4R^elF{r5}E)sN3qKQ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_84.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_84.png new file mode 100644 index 0000000000000000000000000000000000000000..9383e00604d8db367f7ec09d7d6c7ac3ca71af52 GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU@G@?aSW-r_4bx$QL}-7L*Tpm zmnrX!BwBVwAFd9)r^@pv+Q;r+fpToXtyvL=uba7{qH$eKV#AS|4@SMm7Q<AUfjO#%A2>oxss=3YP?`dj>- z!~oYRqU$}kcWrw5EP2ZFDSP(?gntY@JL$H&WaZ`y#bIamslEI7ujX0gCYw{&4Cd=p zU(;~^G55f>z+P+BT+Id|E*Jm& z_kX>qTg+AE<%>DY>$vxM$2nV@aTxDma^YO$GDX1)N(rbgVhL38f>RwrflV5Ms$j}- zN{5h3rv{vYYXa&;(FEkdHG%XZYXb6+EX>tUs+lJ`zwoPIYT*Q9Wr3v{u9~O5v&I#;Mw!}X`>pL(~8`*y8fY$H|YHD&8&!BjsPKhHon z_sG9nPrW*4xz$DU)a8fkdyc#kOD&o5)~$Gg=6-u?RaZ$_)zrXyoJCjnw`=qnsY*F^ z1x;CWCiX6;xS+U9;615-Z!`pf*8hB?knW=5p^g*|D1HI@3?2ZeegOvuN;n_~9(p(+ j2OcQ=;UT`LgTe~DWM4f)a( zsqYV-==${XzLHnqwA(ut>4>F%X_&Kjz5A4j_FEQTXbef4pt`t6V#;a_Wwu}UA0Lfe zbY`CF_D-Xs1?62uw>Q6Eoe;(LT<2ZS-R&CU9Y#q7Rq`9w%cQo(mRC(FZ@#eW<9R#% z-!AH(-&9YF+!QiJu({;>ue;YZ(`Twq?=Jc>Dd34!{8Ej}>2FT$KXbynY_smX{&_oH ze*Vf$c6FV(QRU0|M?YU^Yfmk^d)vkGvenbO{8{ahM!Ki&T~AzpO;ef8HfiOncR%Cj zN9Rt9u{!1TdW!$zKi}@jrk$Lk5#3a?iF?m(Cl#+izPl^#$0?t(Y>Lr4b080VrkqJr+S78zGejh*T8T4 zGh>?=S>?`IdhXA@JzLTFQkmn7XW9-^6uewG7r8(vmOv#h0o6rts!2mowL>TnLb-Hm zI8Nyhf>CfyAic<%Kt{kd0retl0vUm@@aK2_d%xnW?^jL>hBA&)Cb>UZ9M|{{`@drY^drgDVv%K)~)Fg=oeMuqIv3V;JQE6 zEgG&n|1!l+SX3jsl+}HTVBj*{7^vro^8hCzsGtEyNr*Y^mp+P*XJ{JRlhKu+9 zUz+2Pv2||ZJ?}rtn;&kT9rd;$Wma&5hU1hDA(u`F#kt63ih`F5oMH)7@)A&81fe>F z0-H1hRpAs&6G$(zCXf+uO+dXUnt(ing_|Co%(#C0-ONQIN!Pa(uhU@NsXDD=w!;*8 z-c9NMrxvenzsX`*_NV8j@psYGhYIQE#FuIW$7BR{1x;Bb@}%c{;#b{MCadfFn_XrW zJ$x!J8@TM>v@f4^Pfbv`|4!X2FsiouQ+#0Gne`IOo&z;3)o|53<-*Mo*i{rcV{zk` zb8B}oeYZ>f@Ow&=$kW^ztK~D?_q^0Q#gzDNUgW!3GB#bRkJ>ba zmuKhbdhqUQPIJ5`aIE2Yi>QK^fa)TaKqUy(q#>x$xpZoPDb7VMQxv>h z;1paFNH4M`kP$FVAic<%Kt>=e{FBO9_-|8schHojfnjd?UV&XfQ@$^LGe_Mk&`!Kr z!&MV3vPfhpn7Qo8h01k;5H?WZzbP;YAP1ef({l6g42Xe?L=dhc&RHOzX*-~}8^yE0 o@PdaBx@Uo2hldczvk__^*1p&Kdd=k;Fj^QqUHx3vIVCg!03&~oSO5S3 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_sensor_sound_frequency_white_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_sensor_sound_frequency_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..383c2d79f3be674dac561633ff775edeff43b3a4 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB5~)y?&6FL4m_L@LRl; zeq67FaP*n?OnaKUdKLO78#k0GNJr=;u}^xqN#f?hX^X=Sr>r=oV1428_f@7R(n>wn z+nyE`P;h8qVBGa4ev|(m*VQMQ8M0V6tvdBFn$7h<>+}gzqqYO>V(@hJb6Mw<&;$T= C#W$t^ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_high.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_high.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb40a08f256d512018d1a74cdcafba288e14b42 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU{vsQaSW-r_4bA%*I@+#hrsvs znVU84wn!WkxOK5oKE{>%YvAl9rMi)uSs$?YJvhKQ=Rl*d1rQZ5sTY7mSor1~;FJN0 zG%~9fFtI~LAj&`@5M>~ZneIET*(tw%p35nIcggO`2L~E|tHyj=EH1Mn%Khp0UzPVV z?q+qe+}bzr8^mm(;uX*o7&Rdrx8=)`((wLZ}JgL?@q3lxFg^1RRA=B z`T4UWj~RBnl{;`y_unb*m`$7Z`>>f;7BlHFp3BQfeXwcYL-y|i`7hsJVa4iJY+eGn g72>6WsAbH~5ADCNIkN62Fvu7@UHx3vIVCg!06@=;{{R30 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_low.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_low.png new file mode 100644 index 0000000000000000000000000000000000000000..dbd8c1cec5dc434a2a5ba7ae169ebed617960576 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU=;LpaSW-r_4dYTJ_iF4hlBtA z`)}Uh7*egeYOSTG_`GhurY#vKCTTLL7cjB=Jz(LRbAWTsfkt7AMrNRhdcgx0zXu=@ zP8kcJAWQ_T3@idx2GsaPc*m4&iUki2G%~ZltGH9=axUI#+jj0Ot{vK2G#GXqE7*Cm zPwCFVuRngsNv->~F@l-#9rKPCcF#*MrWPFVdQ I&MBb@07Tn?hX4Qo literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_1.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a2b0ab0b305928336345c4abbb0b671d5e7dd3f GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC467aSW-r_4Z~USF?eL>%r~+ zeP1tESai(g<0}~rku7y8KF(XzT*KNJ<{aRZv1k;wC}2`AU}E=sz`_RZ_e+rSWF N@O1TaS?83{1OOK|fWiO( literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_10.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_10.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c804ce8f39e8311d50532871711f1b919f9231 GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU<~kdaSW-r_4bA*-ys75SI7JR zFKuvl`S?Nl;f{Gnx)cw(u2FltR5yDX!<+-0G8T=(76nY|1x)OI4_NqsB6AJ^MH-ob zBI*SXSo|KqL?FsQB4A}ejhER9*50+RvS0ovrmpbL>c`F6HtnnA&zKb$zxUQj&_8$e zv*(VhrZ>g%z7z|Emz-pp&#-;dRuwUhJCDS|E4Mas&waA}d&BR|D>r3Xyp;8LcaA-V zA@9lQWe+DU{$m*Y^i0#zxcN7>^~?IL`p=N5W5=nJ+rG!8K03a+YV%)>9T)dAY`*<=@q;hB;T{5c5ub;!hJ^Jh Zb3a?huLlqO*#Qh<22WQ%mvv4FO#oDls$>8F literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_11.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_11.png new file mode 100644 index 0000000000000000000000000000000000000000..82a751c4d92351f71509269a752085d506d4d457 GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2zdT(WLn>~)z2VK(V8G*W@Xr5B zUm2SAt6e=|Q=l$rH2a!FR%8UDMWe7q0h4;c0~WsrEPQhgaLRy08kyA#nAm|Leh&_C z&N%=RfhYrsK$L+rDkuF9Il~&xF>T|UGm#JYrd5ACclqY#;sd@7DLOKDxC>axj;%a(<^!ommUB!Foc?n$##B7!qbLKi>0n2I ioQ2;J$gU4gl|D1W;}7$VDo0=_FnGH9xvX>l|Y^aQXwJh}D57wr=drVTgH5t?knArUuu<*?}z&YnYqp(FIGf+gm-~o%@ z1CR)(j0I2-CIVIl76B^*YBZ6!v#I94jIH0(h;tVA@5$Ve%H!54W>h{D8uNW+!9+*5 ze{q%*=RfcENl=aXGE2WTTQWvF=Gmh44X4kXUHec;IQ(Nrq`dMkmkOSkrw6vF?JkOW zV0AZl>ixn8lbEwBPp@kFUEcTN=Rws6eK93s>pq3n&2mo_(K9ZT+%eC4(#nUM=6^e( zcHrK|?{(pSW3AsyoCS& literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_13.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_13.png new file mode 100644 index 0000000000000000000000000000000000000000..d869f8cf928fec30a6774b0f4ab1b820b474c77a GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W-iaSW-r_4c|WSAzi$!@)oQ zFIRm~;7D5Oxxs?FX}OYQPG(NjCIhAdCiQ{`EPf9TaLzfvDPz$nYylEsV)uK%!Uq(Y za{wsP$P5*MC`tPKP+EWw(7s%x5N`|62L%V@O1TaS?83{1OT6va}59h literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_14.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4465474b2b95e8cab5758803423c1009a795b4 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU`+OOaSW-r_4c~AP?LdxgX6pU z%-F2JrpadnIKHe-TC8DsR$Wiu_hu5;0nRxG8ig$ynbixJ)C(T4_&orLaLQN!1wkTA z?0yee_+TPnWgroVGN2k?w(UCe*M9#zGx^`GRsG_!>^oHM+$#_BDLBtrthwVoqdWWl zd+N;BiM{cIT?TmTcMcOCMZIFMDmQR@}`PZgWH9j+D%uqYt;)8Q(U} zi`sGGNN>cPIa^n;Oplq9@<40)r~c;Gb9cNkUiWC#d_KLRZSM0O-PdY;|8}!V*ZAZ1 z_TOLcg+9ouJ-YQzc=tN1gS;)L-&ixfyB`{F`?9~q`cs)~q)e~fzk(gBuHNU^(RKT8 j?t>Dz56JVn?J9Fs%Rf4wC%IVyL!H6X)z4*}Q$iB}$$+cz literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_15.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_15.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ad4b38a8668c7db9635ae8adb98e8237b8a3e7 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2?>t=`Ln>~)y(XcV?+WL7U=QZIPG;`aa~!YN|`6a z;e&~Qm4QSc%7AK2+q!?$ZMx6Dj^o|?8@ugT3JxFG{4xAK_c{T+;(~$)2O5iyHST^I z#>ppRkshPGW6i~bjm+%p4ob4WI}rW!)c#Xl(%L(YBpxKz6$r>_)|cn?#db$+ Ro(c3hgQu&X%Q~loCIB0OaRvYY literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_16.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_16.png new file mode 100644 index 0000000000000000000000000000000000000000..ab72809a827a6dd1e271042e7d0490b498fa3c92 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2zdc~)z3Ir+V8G*g@Xr5B zy9%@=k^=4KvcFs6#m1T~+qI^LVa@?g8H+|?ivlL~0w#992P}L*kvRu|B8|*I5%q!x zEPfAQA`oRD5wJ3l#vQNQUjO@%En9Hd(Z6k9k#50RNBg;#W8a_MdO+9db%W13PQ9Ft z2Ttr9dOtFmpPO>>N$tomDOi|c$L@4-+kXas*Y1Ybk9@yt2X8(pv+LrXr}?rlOW{@! hb{oPAK)1!0Fs=7bdK4JOx&s&t44$rjF6*2UngISlaWnt` literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_17.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_17.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5a487e2b87471f5752713b8a6a2b0a37ae1da0 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KVpaSW-r_4dZaO-%|S4uSvv zFMqxFvC}2`A z0Ew{h%{jm+0}}x&1BpPC0X16jtlRp&e&YG_x6)E>uYGI(O}C)DdAenT?d^TP?_Fe^ zSNg~MVO80?SAWl6cYEOWJ->vLn>~)z3Ir;q9EXMao_)? zAK5aPe1ksK8AXeI71IiKo;a2B0OyIDy2{2qWrIAtt=f*=tlcE1NK zd@vEPGLQ&F8Bk3uSGei_(z*QWB=b^VtSdg)`<*e|?VXkQoga2_$4@-qJM>mY>dwNC z2O2;3c(;EJlVq9xL6==mfHy{C*83d+CIt&K_BY%vjh{Kq``Lx=XRH5TV??r(9H(8m a$?W~XR6v47`vEWz7(8A5T-G@yGywo*Y;f=Z literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_19.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_19.png new file mode 100644 index 0000000000000000000000000000000000000000..15a37fea28caab5dea681bc6df7b050183aa6a5c GIT binary patch literal 411 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU`+CKaSW-r_4dZWO-%+o4j2FZ z_kVp#Qhb5KtqCu78s}YEe&A!~t&ahx+q@b49-7b(cds~0nxYH;Wfr*m zz2XUB(R=J%^yPi}qos%DGWIFmVcq^}hu6Wkw%<$Zzq}T`)71Qn?fXBA9c%^B-~V&P z{Jy_K`G28g@YC3Wx64j(+`0PjiPoJrf_2}b*4f;-+HGFEV&>Lu+WQ&iTh0lYp`|Qd z#~O9A^p02<>khAsr4O}yr_OvIFSPFQwD4!|U%xH5=zDFd^_O(Bna1YZy$`4AH7OSu vw@nNyIK>V2FU)IrLjV*eXd$p;|0~YyR5ruhwk_qrKxgoD^>bP0l+XkK`{}UL literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7999266660605a4b65ab12867a12cce8a29314 GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV660XaSW-r_4bChP?LdxgX6pU z%vi6;CeJh`$+zK8kI6T-3EY*_y7^3?LD-^^S-pUX-R}X5--833a}G2DMT9L1nA8hE zA}oA!4sgoAM8L{GA`oRjjaqEmbJrh#@m%@#pD!ow#hte}!200aKI7L9`sP`9A9%}t z%j(7V?=BDA{Fd}ES8wT+tnfbk^H{G$b-^7MRc&@0U{bB>?~eJJ`Y`I;w`*?{>Vs4NFwQev8pHVg?W*%JGE;w?&StxF z=H;%`LX%{kmD~rlFK$|XEN(~7%eoSom-Qt!Ax2~)y>XJa!GOor@%w#~ zDHCLLp7cNWjA?$7$a!V)iBlX0IOiN_6t-w&Rxe;uFL=P>_W&fqDPsW?1c@-Q`#oUc zgNcBZfkYt6fNFHxR`0U5y2fHIvF^7LL%BrB^D6Td584j;TFYA$JUGzGd&&CU_EjZ%+UK literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_21.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_21.png new file mode 100644 index 0000000000000000000000000000000000000000..2e499cb1186c181958e13340dcfbfc3fbcafaa9e GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2?>t=`Ln>~)z2VK(U?AXfaOeM} zUpdkQQ)aDW&r|l1tpBXB$&jglNxk3!i{FC-oO2Fv%2+fCTYyBE*!>=`@Bu~U8~}9x3ydS0uJgn-!9QBcyOSRTV`4Mo%8uq zeRuQ5Xv~UE)sWf|U{bI!<7>gnjH?AFGqx6}+s~{$-uSu=ZX(2Dd``jU;-h=N@6Efm T?}CN~(B}-Eu6{1-oD!M=`@Xa~EIp;v5utg&?P(;1p0gK-Q zkO-%Y1yB$s0#*hV0V@M)+`<@hn@|1fcBb%xnbPsC+pZLRs=N|f zSEhd_E91D&)V<4ZWbMe>vUL8Okls7C!B2ZGe+w*_Iyv|C=2L63ORqLRd;Fj(pV26P x()QNNd*FTr`5xj|kngei736!gK>EG<-kfwZ#=@Gd|A2wc;OXk;vd$@?2>{5Evnl`p literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_23.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_23.png new file mode 100644 index 0000000000000000000000000000000000000000..d34c47d9f4cfa131b4ab806b58f7cca9b9ce78fc GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU=;UsaSW-r_4cMCSBrsw>%o2h zmp*26xuUZ7$3nR?c^wyy_NZM8NJ(XRz~cAd0Oyr1x57NIay7SJt1XA~Yu78l PkYez3^>bP0l+XkKf|`e> literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_24.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_24.png new file mode 100644 index 0000000000000000000000000000000000000000..15b2bb36f36a465ed655047b0d60cf915d7bece8 GIT binary patch literal 453 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC?a9aSW-r_4elJpu+|Nu8#lz z`yaMTknk=S;rtb{vGEZ9*0mAmzAjYW&BJKXC~Q%{q+alV#qR+N-<$)SG9ZygX7vIl zcA$vgg9Ds%4!}ep%0MCzWd%&j4?kG<`t|u2Ws{C?s;b}od_T{-cMIJ8ADHa;@>9QY zwM@*@_p;29H_Nl?JGnC??@VT{;xaE@wEE$s$6I7$QXdF~KYwku%J|U!#_n@>@AH&> z+Ht`2ZtltRJMKQ%_Pb}b-Gq>N>w*gQzg@iRzwG;M$q(H8%Ea{ka?FoAy*G8$nnP!K z?(oDspY+84@Y%SxQ(ZsY-S)ojx?!sP&c5H74RP;x$v!A^%5Ge}FKkuZP383`R&l?5 z_3u*f*Nf}-?3$;Q{{GLA!-3{eGVe~BT;1B|b*R+u^6i7YI*eB0cl`gWe>A;vvA`;4 tl?b-Lz!qkpPy~k=C={V#wtVhymc^A^x)0)gD}d3%;OXk;vd$@?2>_^f&1L`q literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_25.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_25.png new file mode 100644 index 0000000000000000000000000000000000000000..fe65acef832f9f761464f1632264453dcdb5bc32 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU=;9laSW-r_4fKft_B4WSI7VV zmuFv8;$Z6jzNoucAtUu+!m}G9Hw{=Hu=qVVz&YnYqp$@K6)>q6fJ9jM<{aRZ0f{s+ zs~0e_Lq#CUKq3%jAdRy6Hs@An%~@r5(Dd-#g{q8wE?Zvzon5#q+++va4)ybl;eR^c z#7I7vr7kREQGMrnwcl5j->Z3Aysb_*a=Ual%(m1Cmp!q#&u#T#)kS~h^2DC%#%V?I z#IQRV-P%-exBA(og1PhUU=||W1rovQE{OA?8soPx-{o~?@-$100tOL-r>mdKI;Vst E0K<8DyZ`_I literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_26.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_26.png new file mode 100644 index 0000000000000000000000000000000000000000..8baf0566a283fc23f4af94dbf505fcb16c2e1ae8 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU@Z4^aSW-r_4bA%Uz34=L*Tpm z%-F1s7YEKvG21tPN8pwd+Cg{ZqBfmXWKb_)V)uK%!Z+st=bQtL!WNCpKoRwV2P}RM zKq8zn7C=Fm2v`|d1gs3Gaf`&AZF}Xy@6VU~e0g!zo)H9ODta;UR`rYlf1;1~Wev_I!bMAw#as#gI?Cj>2cP>_k z?K)PfcjeYYCHA}{kDl~}K0UEHw`#}g?#VncUxoI)j?44fv6@}4x_7n3Yxf0H54omQ zf04Sfb=9A3XD=4dv=@k~uS;+E{pFTUf$^fL2j}h#?_OsW-YVS~#y9>m zKYM?}>pwgDbo$)-YPn;so{?d^UO9P>%$#?GJPQpI9HF#h|0_=C$sa771D13GV}ilc L)z4*}Q$iB}m)5

%r~+ zeXnzA3HPo$*SL>~xjkSDpKI7MhB*f~Wh@$nEee>_3z*pb9pKkMd86(mg~khjgPUE8=mxM$UmOr$ZF2H?&;s2{3d30 zzB_E$F|UuY-Z@`3^<=&DjsTPF7>!#-1)*@fQcO_ z;`iVH=bQsD5r{I72t*l3<8AT2$LE7zH+b_|8Gkvo^+2r5mz##luT#&nuH(q9&v|Nj z&{SG!$1-M?=XuQL#oJ#MF3_A~eJ)?dqC$@SK1WK; v_3!R0|Chc%6=5-|Q}DVNtR8AqN61`LCztDnm{r-UW|skV3& literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_29.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_29.png new file mode 100644 index 0000000000000000000000000000000000000000..390ceabba5a4f7993ba17fd368b517851514763b GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV666ZaSW-r_4dZ?NzDoZ4vzo+ zFP~g~+J&vH`_}TT__EV0N=h0(UDVZXW0-S*Q^ulE*rI?*y?}|`?*R)RP-M;lphzP# zP(;1p0gK-QmsF%k7^nX|mA|uZ?X|)vgcm`c#v3-E&_WNJ^{==$TZt)V TzxK-j#s-6@tDnm{r-UW|<(%o2h zmwsho^E~mv)3!i$*9)#A3*}tH+!*{Gu<*?}z$s(VC~VQltX{yx4ixcwaDa2p0g#BW zMFEp~0Zas<3?u?p2Gsa6XveB=hL8U}5IfMzQ}wKg;kv|=6ASjQ^F7$z_Pe+)#j(Mf z=iPbJ<&PVgr*A&q$X&aNg`IDX?K`6#^Awwz+4H_m*xMk#>G;<}Kc8&TmE?P@`4=&vmdWBK@LZA=8n}>jJMR-?R4{fE&@Y^!PC{xWt~$(695jldA9%n literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_30.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_30.png new file mode 100644 index 0000000000000000000000000000000000000000..215a3a203fe21b94fcf9e436f03104add447d6b1 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W@kaSW-r_4dX=-WCHM2FLIB zOI|26$f!r0@%sL_=}Bcn=fY{Nf(^nJjm+u=OzeISSo|Iw;GA=y5hx;TQNW~L01{#0 zn{$9u1||Yl1`>fN18V%G7<1%Lc&Xivq#b7#tUkwT{*HZyeL1M3P;4W?nN!{}^=;Rb(K0<23=9(nPgg&ebxsLQ0AICt?f?J) literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_31.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_31.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf7a73df04e6033bb7b58293f378f4f853c1607 GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV2t&2aSW-r_4cN>P_u%7gX6pU zmrt0EO*%h8@=f?uUoo~EU&U?xUf1R@6)>q6JYeyAaDa2p0Ztis`5Z$L9dCyb`9V50swm=Y4l_N!5b1 z2W2rT{`KXi_sn+4J&0_nKj_-4EqdqfRLkntCT^*a^YL6em~)z3Ir;puppL@ZSGR zRV)z>m*tt?w&P&Ia($+PZpZR9)0@7l+}ZNEk(r$@=7vJ9->mYf z>es(n32;5{``p8P-S))GiU$W8nae9XR&NzD)3h^cugmxreY_gKMNs#^tj2WV<)w8_ XG1gp4-+n9xdY-}4)z4*}Q$iB}N2G2E literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_33.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_33.png new file mode 100644 index 0000000000000000000000000000000000000000..57544039cfbb52786f4a9f86b3e414532ceda564 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2-#uL%Ln>~)y?Kzg#em1v@%w#~ zDHCMoXvEJ`FXWxn9?NuP`H52;2RP>(XcV?+WL7U=QZIPG;`aa~!YN|`6a z;e&~Qm4QSc%7AKk+g3-(%f4=`mRR>&iDA3po6Fg%4||)dU&cH*(8w%q;WK;k>D{N! zmD=*P9Qt{5=kdnfwr5yu3V@Q<7ALM+Y0jRq@x9jNc$5A=t9||(2>_h|Gn{xgK%ENG c*!G?I5O>m}8Q-f6fI-0E>FVdQ&MBb@092H7MgRZ+ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_34.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_34.png new file mode 100644 index 0000000000000000000000000000000000000000..109523d84b11d78f2fc0b8f9662764b285ee0115 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU`+OOaSW-r_4cOcq(cS*u8w#A zU)rFqaN)!0<~jO{!p|mXZ;WmGc1bsT8pE6eoH7=T!WIQg>IF>feh*mqfFg4a07V*^ zfgY z?7b}U?e)}No*vBJ} qa)@S literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_35.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_35.png new file mode 100644 index 0000000000000000000000000000000000000000..f0214b0a0eb8ca2a4faf461184751e0516dc769c GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU=;LpaSW-r_4Z~oSBrsw>%n{f zmpx{3VX916cdhZ~WS)|TK0Q}OA|)9u8ig$inA8g%u=qV-;hS@SQwAi`$gEz##10hk zdvJhr&HWi~q70;Q?W=#0d*eiRtWDT__})gf9qo+Y*GWc}f3ZHe)l^}1JC9yT z#RDgH_H%dH@~(&3eVoV;^V#CVtMgZ1CI0T`Znc(uAAG*>L6e{F0oKR8IT}^h=k4?S zc}DT`i^$Yhj>Uhn=gxe%Y@cLDGd5R(tOvUiGrY My85}Sb4q9e0H5D~iU0rr literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_36.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_36.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c64a38608df611c69fa4904cfd1b57cffb6731 GIT binary patch literal 453 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC?a9aSW-r_4bB$QL}-7gX6pU z%<6u7(@Q-^627lKrM6OHA)8L2P04A#U(k~m+^1QsmV8M_q_R;-~8L;#ZBQI(lK9u<~Mfp z=zaPwDlBPP_VuHY_yw~a6B&CCrTUea$2_&!+T86EbM$KEzn&Mu5Az>*v42k6q?Ivel=)E)nVIT_E*>6ihBRJ#1|eE jpuoWw6j;OXZ>YaI!#}NFEkze#^e}k3`njxgN@xNA^p(Y? literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_37.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_37.png new file mode 100644 index 0000000000000000000000000000000000000000..2a81f4c660e5ea05f9d375f20c902853b5d82a63 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC3_3aSW-r_4bA%*I@%5SI4{m zFP+;IpuwUtvu*}^t4@#j%pDtp-6u|sX7GE!!Z+str;J6Tutg)YdI1wVP{i-S0nRxG zKqA5x1x)G%FcF9{kO){ANaLNAzy2(HHglHn9iuz?TTBjkIse}G?#$+`iw^1@C`~wM z`d`UBoNdR`*_?baGEppdW}iLsgzs{pg2=fp?uO5OyEn|p+fSEn-`IF>feh*mq<{aRhbD&Y!qLCRWqF(TT z#qR+~gj2=>Cs$wk&Mai4}bsLIC)=HXur6ue2mb$%jeI`dvNB)=>xX@ zCRQ&W8%pk&*BZiVo+OyhUjD7wZQZKCf}1;I`O0Hr)88A;yvn(*qA75Pvc-<05AW?w zUtWF3XG_tJ6P>d+TJB5=|CuZ2ZO<2S_-me@QGuv>&F`lpPz?Ef<|RpM{Y zAME{8DtlArtjuqr9jor%=h<;F{K%UBJUl;7cRoXS5aeaNAp;64w2-+IU&{V0>xoOu T)YIy~*kJH<^>bP0l+XkKkSDtW literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_39.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_39.png new file mode 100644 index 0000000000000000000000000000000000000000..73fa2a09d1e7cf2f23e25db48c838ba96c39b4bf GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2|2~)y&1{XVj$pfaNqx> zUs(*f%eHvhe(>(NVCo$6DCp!Njsu)?4m1i|G%~9fFsTWFefV62a7^+E+lKYmSMp+7-1i)2 jJ;)|}*5h#Z@+Emob}ZHb1_gtstDnm{r-UW|7N~W4 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a43f1b1dda4628c152702827ba5cd31a0a97e531 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2KRjI=Ln>~)y=lnTpuppB@!tPS zRy!IDy2{2s9I%{jm+0}^RuRxe;;2a5PT zIKVmQ089j;3?u?k2GV$)`}pUnrgA&fHr#YQ|BvASuUKWt`P+u+^Vz32lUt literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_40.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_40.png new file mode 100644 index 0000000000000000000000000000000000000000..fcffa7f1c5161c5a04a6bc7af3b1db1e526b5225 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU=;9laSW-r_4c|U*I@%5hrs*) zFP)okwAqtq+hdNs{CB&ez65o7g`VgVZ4kC-WL7U=V)uK%;`iVH=bQtLKoMb!0w(nW zkO&LkoCBOPFcGjakO)K>NMm{Z!%OvR=kewl-&mFUzCz&A;a;7RvWE}&7HoY#_h*kN zKf{h+ca?7ce89A@k(=%MY<@kCJDu^CJ9sxA{44P;Q*Q@D!S4R5=MId|8U7#SoWztT zl7IEkLD?ViT}5A(H&rwD6j?88MYsoKHD32XoDFj!L?h>JhE~srH<<@y41htz;OXk; Jvd$@?2>{W=ek1?@ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_41.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_41.png new file mode 100644 index 0000000000000000000000000000000000000000..c84171d97768b086ff05e893f1462307e99329e2 GIT binary patch literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KkuaSW-r_4bBiUbBIKL*V`Y zmrj~>DO9|XY?=FgY2GcN1i7Vc-!4ruRc25xU}E=sz`{4@0Oy(Kf(I;q z4?rTEG8RBVm_ebYm`?_V=^%zT^vU)<$kmEMA$ zohfHEWc405>}!wY6yKSeelFE|$Kto)?bg=Ib^kvqYhFF$vQR;2_hh*pGp9aSfBv47 zUUkCe!@c_~er!#;TU8jecU8|lEq6Qf*RDqv%d_|SJ?lH(crpEq?n5`Z1MlNP!w!Ys zpSkCgR*Z@+`}OM8E2^$e`8#Rnr?1x^KUmi$QTgs<+v$Bz^EsFQf`WS>p0byOeCDD^EnuuLc)I$ztaD0e0ssyx#gG61 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_42.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_42.png new file mode 100644 index 0000000000000000000000000000000000000000..868399141ef03dfd0c688925d16f12e55ad8b5d9 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC405aSW-r_4c|WSE~V!!@+z1 zFYOY&xM&L}?_BnGYvhfh_P-4{IZLoX*rJhHy?}|`?*WV7g9Ds%4m1Kqge?k~)C)i& zEPQhgaLT|$z{)@(5M@A(w*=O0{U`W$_JgJeY5W$CkKN$Xd;OAOI?MO(d)8lPn9gHv z^yYO`foH+u!~52=hBLg&l-;3JAo$*=ps^r7`+zRbb!+(;#vNz)YYK$7dlnqEKae}M zvmnr)b%!VOnR}-WupVCfVL1o7qd@lKa}?C=FlSzlR$nHsE%k58G#_C2FnGH9xvX;kmZ+1>e20 z+V=nG*&CsKZQW5mD<4LgtFJAvwLWNFJ~{W{BK7rO#l%1EU4LuNnhmRScCHg-7xez$ zZ@qhi=z~T6Ion#JGs7*5mcKlaEfDi0CBOcJOp!FFMT%VIpQ&7V&*ndn+wp=kPR_5G t8Rk#0&%yo#iD2_5$meJQ^e(iP(eLjcoh?U#`hWq>;OXk;vd$@?2>>v@s0jc7 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_44.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_44.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7fe6d249cea43fd09e80e150d26c4c4eb7542d GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2-#lF$Ln>~)y?_io;X#NLA`*9-R}Vl-<$)Sa}G2LTQo8QMbrx(u=qUyiEzqT z00m(pU}azturi>=Eru~ycV|BKmgwHV`=ize< cOWtR`#67kg0uv`+1cm^Er>mdKI;Vst0FUr)QUCw| literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_45.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_45.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5d9ed2f3f464d15f25cd8fa123d70af2316cb2 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2-#lF$Ln>~)z2V8#U?AXnaNqx> zqA{HoIz7I2*O;eoo6zOB#&zOURR;9}CU(CEEPQhgaLzfc);TK03^aG zV*wO|iGY=XMZn5{8owm(SoJ*niSdEf1HJcH9`JGB-fDP&^}yToX71+KRhtjinuy0R z+_~vfa5jEwe!oY7VnO)##@Rns?3vA~$FS~kK95DggR}}hAb9{}B&M}+*U4CTGe8}R i;sU5cK~BGXjq7D{%7ZH(IlO@(z~JfX=d#Wzp$PyrZ*fon literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_46.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_46.png new file mode 100644 index 0000000000000000000000000000000000000000..a79a2b377744e8e40e0af8a0ac3fd35a223ccab6 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV9fAzaSW-r_4dZ?bxj5W4uSvv zFaLT~VB_|gUZ-z$`akbj%6<00$4irBw=v8)z$s(VC~Q%{q+Y`bo^$ zh3o$D=`pPPY9V<4MaGWvrn$W4MX7E%K5Q{he&unN@3Tr@?0R_a^)0e@wtrv4S6=FO z+HY#)Vb8Y?K~erHG1rckR_~ZLxu;EfCQH3+_3M?J(ho2CSN|n_cggCFUkfJHY6mn) z?>)PsHrII0oc*OU=ilWL|9K_NddEe@g|B$%>V=7mWP^33r!mYqz$s(VC~Q%{q+Y)qbK%?Csext^&? ze)s;ts*49qo1@P%PUjH+TDr4}?auLs^X4&z?+A6f$G?s-=IZ&q_ZbUnAC!sdKYnpK zY-Z2&(lkyzf%Qq=%;79IeqMRT0dWqHq)$ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_48.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_48.png new file mode 100644 index 0000000000000000000000000000000000000000..7394fb9c13c7eaf60e389f5199e9fc03b72e8993 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC?dAaSW-r_4dZaz9s_!hroaT zm*2h4`});|nT=xSd~1w0Ze^cRR-Jj$%$vdQ0Sn)p1DrAzjlvd<%<2V9>_8E}2M0Lk z8~}+3TNE&<7r;ay%0MDuWk8LYiaT%<%t-Sxlcg}#$%%vY(Y2Sfc{+)WBU z_u6O2--zw4zw;M{w@6D?TkTNxpB`Fp|5!&~{72!R5j!U8&u%@Pmzc+BUUf8GF2JZ@ z=I*+ZJJAPHzuQi9ZtyR6En97D^-bva4u9?~`(LLuSSP>nez@qk*G28>FaK3HUF_?- z{&UIBI}^jN2d92J_r9hj{@;Y1#qyz?*DL>+%HBC4wxIa1ZPl)el{aim=lo&@g$CK- d^Dgi&!*oUl^LZv_8ov(=v)xo_1x)$+1VsNw!Krfrk>HT_g%n_6YP&FcKk9qVNr=W3p z?z2g+B_EhIbXQ3nDAg%Wx#<7BF)4^3VPqKzV`LGPr-w4?XP1Wyves( ze~N!P2cOK2_2LpA{kdRHf!T`1aoGF-avaDH%O~o|CtLC?pFD9VFnAa|UHx3vIVCg! E0KvC@hX4Qo literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_5.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_5.png new file mode 100644 index 0000000000000000000000000000000000000000..932c4f1122648ec40e934684f1fb364ca7f9342e GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU@Y)-aSW-r_4dZaqGkmFhroaT zmrpKtcNZ)3Jy4wf>(VtZOSg&NE>1EHX7GE!!Z+str;J6Tutg)YdI1wVP{i-S0nRxG zKqA5x1x)G%FcF9{kO){AP-CXyj%(-kD;-atYh3j1+N);|)<1lww!Vm|`dsbza$~iM zZ;NVW)}>Dfx3{m$XUi+AiTr%Qdfog(uItvs?Ra4?ZTbJ|`>jpw$At=vkGtzPMDCc! zosqqxr%_gYvyfiVX*O{ixjRntEed8I2-WqgdSEpD)A~l~xf^tL^!WeR7FWNz`qYcH zn;uE-JNo*73*VdroH7=T!WNCp>IF>fKoP$O2RP>( z0Eq}&6fmh5z(gR*Kq6peK#iG(JEqjlzx7)AyUp({`|fvCGL#!nlPgf=elA$>pZTop zmyhL21*Y7bG0rg{@QfB`axv$t;-YYQej%t@~CW)Yv_TW&OIFZ0o)rx!Sk>$-jx|^SP#P zzEynRaj)Oh^4&^C4=+BC7kc+5-M>+KYr*mZQ~#`=R{bi9SI=tQ%7TmH75O`M$KKE0 zw7u!|&(gWY7E+}dv)Qh{`eM$s?&$TutIOsbV~2+XvKOHt0SX&LNT7xdI0)~A)iTBv WJ#+Hf&Qb=92?kGBKbLh*2~7aL+`aVx literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_51.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_51.png new file mode 100644 index 0000000000000000000000000000000000000000..233d862a1631d11a23c2759e0e331ff0ab697b49 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC3?2aSW-r_4ZmISA&9p!@<4( zm%g^w+E#FOY2}6R84pqK#IXXLzK3sRKDf)-}^q+s4wA-pT-^JkWsMN8`3=~LMS3>*eeS3j3^P6b08GmdOrk$PCDLD-^^S-pUX-R}X5--833a}G2DMT9L1nA8hE zA}oA!4sgoAM8L{GA`oRDjobHru&A3iOWj(2#}g-aap^n9Gs2S>75@tHbGhBm8qTxs z^qvQCad*~LOIx&0-d9lmEx6$5w}pBY4`#{59BBM~|G7}iLGB&4>p0?4Hl9Cb8S1yA xJhiTT=W$VnFV9`Dy9s1HUN=FUeqd#k_JNlHUxFiS9s&b~!PC{xWt~$(699|be5n8c literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_53.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_53.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2105f7e92ac52c634b07f8832b44b1336db91f GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV65&7-DqvDCc);TK-~i{G1DrAzjlvcn5hixO2P}L* zkvRu|B8|*Y5r{I72t*lBBlp3nMgN3v+GWq5SUdgF`#X!14Mg6(TTsoHaCYB&yYG_= zOxer7et-Nv>OoY$ezwfCiV(MTE24J1IO+ba{%igG*6f>hRg7B>U5#;wKAbA^qR^oF zkgMFye4jJZ8m({Fx$k(XrXE>-$FD%QxZ&x;Dqp{>2UT}eU(Pp|zH?dlOw;KdzukRe zmd&2?WnQS8{8Za_yL98&&uwtq!)H@_{EpDOliWXEL_Uo!xLkYOb^4UBs86S&WbT(u ztUU5NxMbqa>rUUN6!?epr&WGDEAb#T%Cm=Ttd7!MN#sM^@aj6mo?Q9NNX0Z}nd^tEybbsEF9ZrL+6ng! ps{gPB11Mm?!2k{zu*UBz?s;&1F|psdIRhBn44$rjF6*2UngDdwtw{g? literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_56.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_56.png new file mode 100644 index 0000000000000000000000000000000000000000..81a3c338e94c05d72b5e07431d14da94987cb2bb GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2Z#`WcLn>~)z3IqxK!Jzh;Gh4O zzq0CTB?-@MjZ?O0Z!?pdsuRO#(I{+Dz@%RAfW_|t3*VdroH8JhMrQQ_CU&5R--833 za}K~nAj&`@5M>2S%ex;c{hBw`_+TUR^jbBGf(Hj=xx(MxWjj|iDS7prnLkVUb}T8d zO>flR=Fz~+&L?B>e#feU{LML2?Q^CoPv2YY&AR>N`v!e=s0)ydhPnWso8V4goi#Vc VRG=}f#|P+f22WQ%mvv4FO#sV>XdD0l literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_57.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_57.png new file mode 100644 index 0000000000000000000000000000000000000000..cd853141c3a53f7653325c7a3017cd2e139f0a42 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2uRUEHLn>~)y%EUOpdjFS@#gJFbpv;`)1(jU zYC``d7BI5&$?RBmw&a*Bk9qX*5J`sT*5~F6Lu`SYN!T$6H-jB>S&r2x=7r^N8<4jd NJYD@<);T3K0RZ;?XIKCL literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_58.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_58.png new file mode 100644 index 0000000000000000000000000000000000000000..409a0abefee99008a3abfa58e4541c38481d4a12 GIT binary patch literal 404 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV2t*3aSW-r_4Y>eq-F&Hhrn<9 zU#2ieeR|>6SiJg~w(#OPlS*{#bt5;jJYeyAaDa2pfkt5qASz%|F93s5N^7*H0&$q?>pID&$yuc>r{BI?(4PwvVef8L( zy8RT#j%$xy?p%Ce_0VnGlnz#A^BqT1@8#z6s^2~syEol^$I|7e);wHNrch}$U+2%_ z2T^)PQhJZ|IPLFUUv_F9ch9f?9l6!l9(>yQQ04dX1Hv({lHRkFw@&?Ayg>Av>~xdR zZFw8>59I!rHQyAW+rKAkLe;hhk{R<`PtVE8o*(K~8!rEKf~BxQwRQBTlbz34;a&sz i0-x8gg~^@3zl=AuRfI2j?Ry3cZ3a(QKbLh*2~7a8rmQ&t literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_59.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_59.png new file mode 100644 index 0000000000000000000000000000000000000000..5098cb3be57760b8a6ff9a929a0337df02947ead GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC3<1aSW-r_4bA%U#kL-gX6pU zOq&KN&$S7M_Z*Q;y!bQl$J*5?XE_dV&NX#sVk^5@BNZ zd%(g669Fp&i9nQrG`?OtcmA8do4&D`8$5V1;h?Wmb(HYk+p9k*Z@IYj0oS3wh5vOQ zrtxfjw4Ha(;geE3dJ^N;vWGLgJL@SHb7{3v^@RrqcJei7vzZ$?+~3huG12k<+R{~X zD(-j1vEF$s#{BEKOKIH^HwFTZfVdUrEHu~WE$3^$t}V62M$--$JPe+$elF{r5}E*= C@qa!5 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_6.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_6.png new file mode 100644 index 0000000000000000000000000000000000000000..33fa840f7ad7d92c2796d64f520681a878dc36e5 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2A3R+gLn>~)z3Ir+V8G*g@Xr5B zU)h#kP|=#no+tWm$Hrrq^tpu_ge@AG)eD%|{T{IRJvhKQ=RhM+MA)K$Nxc9h!ooM_ z0H+L01gs1s0#OFkD8(hdasR4$%eme4uf)tkLfp!5E{M?~0$V^Upp0{~9CI5h$iZ9Racr;RsY` e!CW75m3f!3Bg+fZ1?E7%GkCiCxvX5Myf0wAchOG>c+m&)uq(RuCky*WfiQVr3i{FC-oO2E|0!4%^3YgRj zKq4%Ba}IFIz(l~xKq3%jK#jWuVl?O1uRVTJ=JcD-sb>!t?AYvholoWt%Z?Kdl>VQe zbK?4ES2aE1cS74w%{qAP&{rR(9iGj#^Pli+nU#ExORspreKqUi7~_X-wzsD>ThDqC z`(RqNW#_&LE_w>w@7~B<{G6_vn8$g&Xye`jNdE9kA^Xdb+KfAMUhIQ3#j^1`+5%=2{KeyE$+nQ6^TebSl z->2XA$+*ffdcU1><=!&4wTq1&y4_tiz2)^?+Y@mG*Xz`(SLeQ*EBqJYf0$RXg$O+0 gP(lP6aCujSC-D6+SROky3m7d7p00i_>zopr03cn*ga7~l literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_61.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_61.png new file mode 100644 index 0000000000000000000000000000000000000000..d10962f025a3a35243413ef87e2ffa1bf7d7d126 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W@kaSW-r_4bA#UxNaV!^M05 zFIl`guwbE>^nL#uR~nZuI2LgFkVu2DMI*C%0Ta950~Wsr2RP>(XatG~TNE&<7l1@q z_~snol!1wWm4QSc%0L>;mCj8poqLmko$pR*P`LUIVF8PR-_uWAP367Qwp=&)llA-D z2YcpRS-keq*>jB78Q#4;&s%V`U~XK@BIa9j8Tn*(bp2HmJ}(zu^W5HcoAs^yhc(A* v8FYou&lkq(3b)_{$XzhUEyV(a5Y`z{Cy|@q2K9bIt*f zh_FQglX?M61fmQi0#*jpxKbh}`~CG7&(qiad^@#v@0r)l(sOJIjz4!;+-$c$oh|Q4 z`xMUbvXy6=Ue9eg5zDH#!{ysMLt}659ZwFrKRov!^kLY$+~|XUfB9UsU3cf9icw*> zjNdz((6ssMybtxt`K3JwyQ8Z8VOxvz-$k3NV~)kvUp=@ql|Sc8`23CPUu2r9rdbx~ z?&E*M^!} zZ_WWu8JGxI8At@845-mcMDNkhTW|M0kYcy7N-6Lx$Ui*4GQR)R(Smq}1C7kz*<-fe zO*?Km=ZbCUxj#w`-c8v*Z3?8{?RdpL{ZoN98!w;Cjx~h}^Zy@&a-`F>=%3F>s9E7MAu3x5lm6x4oD1_lg+r>mdKI;Vst0K;Q;$N&HU literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_64.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_64.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4fd7337bc0790f4a118a95e8a611884fc4337f GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W@kaSW-r_4cMCSBrsw>%o2h zmzF*Z<2}OicbVK7ugo?PE6KIK6Q`;&s24D?`#oUcn{$A3&Vfc@i$-RkhT7QY7| z5l$Hkpdd^HtPCsyRtD1e?#H3hf0DMscTzT}ciUFU?U>D)H}|sf_g4}-PG;D4&n@!q zY4@JV%_p_v+MO-3Pd^ouO?_C7ua%~DKOUrh6#hGtDnm{r-UW|AEtPm literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_65.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_65.png new file mode 100644 index 0000000000000000000000000000000000000000..e65e97e10fd072988433ff16d75fd12af61baf9a GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC?X8aSW-r_4ek)zC#KE4uSvv zFaLTs)*@fQcO{0#ODMfhYrNG;7L!`%As3=9;DQ^Srfna?@IN&)##2^Nr>AyRXxHbB@XQ zG{2U-v3-C2zdV+_lA4*tfmMBx8T;AlSjB6bCw>n1%lf8U$aUw$$BWzvBI}+rSxM<7 zFPJ|$l2d$V>iVv2EO)McTz(*Qt;Y0UN9M9@Ke}oY*Sf62OU&k<{#1UKt3))P%x-)Vg7_cqTatol c`P?ezmX1F<9p9Z2fKkKX>FVdQ&MBb@0O2OXH~;_u literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_66.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_66.png new file mode 100644 index 0000000000000000000000000000000000000000..eee187722ec6725008fcb8ed731cc400cd6dafd8 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W@kaSW-r_4Y;}SBn9U!@)cM zFI6!ez2(w7m;K*PF{@2WjxC$ks>`5Wz{KwNfQ4_)0nRxG8ig$ynSmne1rJ#K9)LtR zWh{V#FcGjaun1TgP~#Sbm?J+!_loUM+R?*X_vvW_-@8-G!q+ga1>y zhVMpqWLwT~pM_&EX2TJc}J~&``yfOL%10PU**)QWcB8PvT_+z}| wRH@7XR)_;YPC_^U)k#=f4)P0FW7=)T2W_8E}2M0Lk9Ds>Hlz~Jb$_kj4KPg!I_kZV~yEn6cZe3#Bz)^xkQ9X2U_b&CVvl_~7HvHIb% q*i%sxr3>Ejg8fOZ&v&?gW!qr=z+=Jma64eIGkCiCxvX~)y2P}RMSor1~;FJN0G%~9fFtGzg{2m z`i{`BU2zTGO|L7a^x0|MPYXNF%+4pXgXz0P!O@30>h}3l>x}rDqR*BwiW6@&)P*27 e!(DjmBCn3HqRPj@_6%SMFnGH9xvXLn>~)z3Ir;puppL@ZSGR z6^x6eUF_yg-;sK7#<(wf1Gi^x zm1n{%tDU#bVL7n0@6xu#pI+`^u_<_Ppz-%lYrZ?r3Z_jq*l}~V){di#wZBgHs$LgZx@u!z3+7TEC44$rjF6*2UngFl;cR2t6 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_7.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_7.png new file mode 100644 index 0000000000000000000000000000000000000000..e47c550d61b0f324ef784a034c132e6ece386149 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVD$EMaSW-r_4bA%-ysD7hroCB znXxl>WaKtB8hxsJU)HiI(}Tk1FcmPV7d&9`dvJhr&H+vti$-A!kO&jI-vbst zpvas9K#@jfs0c(ENCct`sFCx5*U!H%e%^Vpb&CohOlj`kSFrrxUCRYh zE97=ail4k%zPx=k<2%<1A-yc!(}(8n{r-$2b%_>{iK}{U{QUX*_YUPXq7VK&$~&~yBs7nIdg1Bp z)eo1HPp*98mVZ{Q__dW=?lyZi^UrEK*!8j`JeikQ!X1z59c;b^g#*~v;BWwI+#Z_$ YHbzLb^ZLsoVCXVKq-F&H2gi5y zFP|_iV@Yf4__F%e`nwX&>r=MWZb>~W)F5op$gEz##P0Wi#qYrZ&N&Affg-{d1x)G% zAQ2Y6IR`jpU?N~;AQ6Z%pvGGa>$d)$fA4X~oYP(3d*>bASTM2pMAVHQ(;wV-&b&4f z+aUh@`uoifz3x9=S+Mx{$sLP~x4+Qc|2XZT(rwRUO^w`ng;T?$RqtqRaX%2d_nB@% zsPNNID>r3Xyp;8LcTSx<@AgU~=Da7&X@}41m7M<=Zyo9;rt|Cj#a!zu>rGz^f@-x3 z*v0prwP1Vq>TuY7zMexnA9XD|by0U4SKgD~*Ob?v{QpC4$r{-w9S@gOZF*bV7x8m} z^qnJ*QggRoWxgI{v6dU|HB`@H2@_B#LBa&&eQ=oUSp190AzMJbSjli1FzgvTUHx3v IIVCg!0QtAJHUIzs literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_71.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_71.png new file mode 100644 index 0000000000000000000000000000000000000000..551b11283c2b547476b7865437a8290dca8c3e35 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU=;FnaSW-r_4bA%ACsbhtK+-+ z%x4Tz&dVfc@_!YYzUhV6hK;4J*LoP{9N?6(XcV?6U{Wt&V)uK%!Uq(Ya{wsP$P5%w zFL=P>_W&jWQ3etLD+6iVaqrf1^@negAMWEVy*6RK)%S`W6BWbS{=DA(;Mbpp=Ol^_ zP2FL8NBX?I5TDeJg`X#zoyyqpO3Y%@$|ygk2bb1e%3XJgE9TLA1&e~$_X{61{WD$3 zBY7uj&+h02PoMNxYz{9!-`LvVKj$^09yaHJ9E{g_aDRooWlFOX*Aww7+y)FJ22WQ% Jmvv4FO#r==gJb{z literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_72.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_72.png new file mode 100644 index 0000000000000000000000000000000000000000..a4cb1ff9e94f83a1eba2c71bdbbf100c1dfc6619 GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV4Udb;uunK>+Ow;ek}$94uSvv zFaLT~L%Qu8&+WqVzBNW(FB_LV{c-68UoeB;0~WqH2RLOc8ig$ynbixJ*nuK`4-Rn7 zIRFw7wkTjyFMx?alz~LR%77X(1@097`5XDyerj^%qbk|Y7x>D}E}S{A{7~pQN9&lB zgo*dV{hpkE?W(p`YTZ|<@2|#i%tD@cKr>R-kWnm^4jOyFvK4Wt=)R_pYrEdf(t$$m}_ZJe&%2p vd%<2r2%v@umY@R#CM4)UfeF!Qw<`aK{S%k;X$xlo@ z&-a_UqE(5_lfgsWAj=!M0#fRv|P2RP>(XcV?+WL7U=QZIPG;`aa~!YN|`6a;e&~Qm4QSc%0L>WLvN=aoq0FCIhvuIWm-#kX2$RLvd?Azvb|$}ILR%^ z_W&fqDPsW?go%KafknW|fEu?*-YK+++j~5H-{-5VfBlX+&a_VW-R1PKxi`){*(vj` za>7N%`S&L`zMkoEwP5l3S4$s8{l9o3)b!Jmz6hb^2j`}jy|z``yrw~0u14e?&pzQh zK3h^B+>_mW+4kL^o66-=o)%0LHcu`tI=as2)7{f~eybik4JKy_~f2ynB`Z94klK1h3 h5-8j-LTT+C*#L!8aosQF1A#Ha;OXk;vd$@?2>=G)%K-oY literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_75.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_75.png new file mode 100644 index 0000000000000000000000000000000000000000..8f20bcba65d679a719b823b9e93800b41abd627d GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC3_3aSW-r_4bA%*I@+#hrsvs zFH`2bK3b40@vQd6sv}M7uWWoAbh1sCLA`*9-R}Vl-<$)Sa}G2LTQo8QMbrx(u=qUy ziEzqT00m(pU}azturi>=Dp3MVPHo0KtcjtnGy!R^4 zN&4~mPF?*!bQj+rhUpvkaqmEK2HdqM&VafWi_@% literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_76.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_76.png new file mode 100644 index 0000000000000000000000000000000000000000..270c77d1d5f87cebc413fd8f48d621f5f44b8cde GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2|2~)z2V5!pdjKJ_kMvPoe}uHC}dy5HhJ!K5;0qSnbuu+ z=kLhOo;NS~k}aQ%MZtq*4#lzz)2kW%ckOmPcsKUW^6vQ^V$9`7q<;oW+&SJ*@6_Fb muoBe~c-;zeJw&5@4r?w))hYS?U#fsX!QkoY=d#Wzp$Py2sdMK5 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_77.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_77.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb8cc112d6941e86b8dd253dd6b59dfc12b5735 GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV660XaSW-r_4dZ?NzDoZ4vzo+ zFP~iQEv#oO;xT_!?aei-FL+(~ba9$!FoWL%7QQ(LIAtsvg)JJH)eD%|fg*kn4sgyn z01^?lC}2`AfQdkqfkeQ{fEqKEcLcqwkJ{FMEB*97?~{_{?`?dVyRBaE?3ndeo-@2S z!GC^yy*ZP4RZXUMbm!mysbaU*pWNA;Et_)s-~4~?B6duC8|~i^xMP-Z#zGfsWJhia-+OCX!|vO1cih77L_ajTFs<$MF3XjT-Fs^7+18aGTJ%6^-M_^T+|GYm zv$QCsCNjg@hVM?|*$SB#wa02yW6m@Gc(eOdWP#-QyoUw4>!*}eJ>B}sNRsROm)OwH zcSQ{kyqJDw^}Q)e4*Z>cLn>~)z2V5!V8G*g@Xr5B zRm_1N!F6-l^K?@-+_<*%#3_ygoO2E|3R^TXs~0e-7d&9`djJyQl(7H`f<&0u{T{IJ z!9>8yKq3%jKsA2_*1h@}`SV?$=>c5{y&a4@%n#3x5s$gdu$!GXPhws24bIz73=8JQ zdooE`6r>+mx}cGno$rp?4i%H<76ms8G}E^yKiH)|XY#MNs>VBd3ohF`K&->>Dv$$k dxoTetGh3R^kEyF}7Xt%at8na literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_79.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_79.png new file mode 100644 index 0000000000000000000000000000000000000000..0e398f834dfb399f9f5311dc48302ed76d20f864 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU<~tgaSW-r_4bA%Uz34=!^M05 zFYPKyc365jbNQ#bN5=%5f4A^#Y2UWyCQ|{Edcgx0zXu06=N#aav1k;w0EsZM`#oUc z1B%Q!02FCthKfLxfkYt6fEtfJjQahj^Uu2%#g^8~uN8e)*d^}$pvqtBj>?XBu~Jqo zCiBPslWP4=KU~M)F3zJT`0mY(>)$Wl&Q{%Var;Ttg8O~7@lWgzPMxQvd|a-UKX0*i z-mwr%ZawB)=^ghTE)mar@}tgs$Gx-CmRA~HOZaK|Or6+!-bwqrOnFNv~)y^+YpAi&db@$Uai zGL2h~e%kkG`X{d_o~=4Dj24Z;76nY|1rJ#K9sFJNK^iugS^z&Ymt zOa!6~Bmz-Zz_h&oq0+aoWA`4&wVyu1zJ14&Q?>_98+RA7Srj}t(8yf=X*CNw-<;(_ zG7$dvx9g3vPuxj;!2`DnWI5O>kO(%bK$c^=F*r~-a!b%Bi~)z3#|$K!Jzh;Gh4O z-->(bZ%Px}6Ln(2jmjxGJq&XWaLQOT3R@H~sTVM@`#oUc1B%Q!02FCt28yT`JYeyA z026^I1Brl@0X1Gu+A%Z#^_98@2kvr~-`;+p@iuSxPPK!s{?Zl&&*P`gzHp%Nb$sH3 zCg-&a8=0@SYX9Bc*gb#S>bR-(?fiNi;jX9gTMu#&KI?^dJl*SA9rx_Ot)o^z4>NeW L`njxgN@xNA9s+KH literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_81.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_81.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0b462e90d294c0d93b3ea40f7890634f4f8a68 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2_dQ)4Ln>~)y?&7MfC2-{!Pom= zE@`P@N_?#IBeWo(WcsADVhzF;jm+u=OzeISSo|Iw;GA=y5hx;TQNW~L01{#0n{$9u z1||Yl1`>fN18TIA$g7siKex4!nf;yp>jq}_btS${-Sf-}9_*_Po!7?37xP<+S^Ulo zB`J#n-yOH^^Tzzy(#U+hS$lCRlG#|C0CE(>2_W0BIN{F2yAdnf_OUFy_XFrv22WQ% Jmvv4FO#u87Wo!Td literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_82.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_82.png new file mode 100644 index 0000000000000000000000000000000000000000..1d405d43ba3708bf6469338cb910f2943e0c5444 GIT binary patch literal 409 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU`+6IaSW-r_4dX^z9s`6hl~II z`@ddoXqdC+DBn5Xnjn$#l(5H3b-BG6{2s9I%{jm+W6>yV(a5Y`z{Cy|@q2K9bIt*f zh_FQglX?M61fmQi0#*jpn901Ox)VF~3(9eU&IUyX@4ehbbir zmR9q*c5rRER$!cOCaqUobDt|OwcBcQLS+B>8{6dBw|~++-*P(Uht`&`!zaIohX1^^ zx!~@)ZMS`$(%O1RI1c8kyA#nArUuu=qVVz&YnYBTz)xqJT-g03^b~ zH|GGS3`_*93?u?k2GV#v+FIWD`mCLHJN}((I4HX4?p)*Fv*M<*GP8(th5u}6j{dOD z-+`HZU0p-|8>Zk32O59>o64FOyhCNn{o3P=(L8x63;fyUe|js%Y;JXBd9%NBcf;;m zj_3XbGpv&+m_9c}2VoV&MKH^;xe@Lagd1;fVeaV<`M@O-bQc&l44$rjF6*2UngE~k Bc(?!n literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_84.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_84.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b9fa013925fd80f82adc37febd6bd3960fd367 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KVpaSW-r_4dYTzas_$t_T18 z_di_6aba7&f6fZ!jfqQ+6h3_#BX70ov`B-nMI*C%0Ta950~Wsr2RP>(XatG~TNE&< z7l1@q_~snol!1wWm4QSc%77ZJINt5r_wQ_;y5+QYfA7kcXX!;fywuG0oo&ad16upb zeNs~IuM|%Gc0;~VTJnmf{LtBXAGL+IGhN@Q^7C@R>h$VT z!J6%F-~YQ_c-pQ=_WNa)y>X@12i}%#J^FCf{Hd$bznxLv^vY@XuKib6=VtG?=pPrG zKXr9@-KW#O>QN$jPt2}v?ejYH_E*p)CiBfK6`v}LzWdy*6L5(Mhk~)y;hS@SbIyTAVT(p)pon_G0~WsrAQ4U( z3!orO1gs1!0#*jnm=|((^JCd~c9|W!AKqhrE0xD3Wl@m6{zRX)?#o#{&9DDhO}cQP z(YkwE^^MGo2L~FNw{OsSA93O`6Z^XI^4B-^Un<+KvE$r&HBnxf9se(c&G&Tc{#mSq p#eTRmQSFB~6XbA&Gxgpx_RWfVwfJpAComuwJYD@<);T3K0RW}YcwGPh literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_86.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_86.png new file mode 100644 index 0000000000000000000000000000000000000000..c8582a346c6e4751a3929f07292d5b35e7430960 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU@Y@=aSW-r_4dZ?NlgX<4hR4I z_kX;2Y3r=pM>xN%{B+c{Fq54j;c?F@4caLQOT3R@H~sTVM@`#oUc1B%Q!02FCt z28yT`JYeyA026^I1Brl@0X1GuD_CkHzjwX-&F43hzx|8)W?Q6_$N&AU?Lpb~@|(Uf z@6R`8y8hW!t5Ll7X2#2hQU7nw+RPR6ROn_^uViGH(IHoz$qNhC-rr&TLHpp+`C8Qv z?Djt6y1qmAK^EVgu7^+LgP(eB`BJd=@JWt4XFmQdE7;4P_eIM5@tXU5>%OsVc_t-d z8d`Vz+2vwodxe&JNhuB1zoW%=^rYW5*)gqp>#dc=={r_bZ#UR6F*p3cU#r*Uk!rz* zUG=V;9uB;=Fh%OlnwR;kce^kCWkicw<=hrTQKGc#aB OFnGH9xvX~)y&lNbpdjFS@#g_ z3t%D;Wgro-GN8tn0XtUxe%@`GevR#W(uoIkJl|P1Jg$8p#wR4RV@9q}%!}*KdYGq| zuJ&y}W}#PRg3=-Cgc}Uq6JYeyAaDa2p0Zti-p4hW*hyPwbwpI px~)z2?ZppuoZ4`2YXQ zDkniHx6K!>HZv#k*hWS$S~Ln<6fmh5JYeyAz`{4@0H+K{q>)*@fQcO_;`iVH=bQsD z5r{I72t-){)AI8Vm9FV0>+N_}F!RR)GqG4x{yWMA+n+Zxv-8PV6f6%{wJ3N{GxfoN tMu>oCcviUw*fN;8c&!IH2#fVyvyQH>I@Qj$zzFC`22WQ%mvv4FO#sL+UT^>a literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/ic_sensor_sound_frequency_white_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/ic_sensor_sound_frequency_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1e41f3d6537eccc99880202b1300bebaed233b GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjj-D=#Ar-fh6C_x-F#KQG@J#H& znMwaG7|!Z0n5BAyXYo!}gO3Zd8GV&1U!-pd+RiWz9s_!hrn<9 zGyjGPbLOW1vQd9Hx&21=)Q&j)1+!0UG8}At0K*Oi4G$n#!NQ>cfdym~EFhSJPe2BN zS=c%FAh?N{g&lzpGBz=TF*c(?R$wz4WCb>(K~~^3dPRlPy7xyva-K`@zccRvi@L=@ zPQQXC;W;2C%XYtl<#UyhL=O5|TGW5P{n;?}U35Xy>{p9U-c9(w{qCi|ws-qJuxu|a zP-XsCd|U9~RgiSF(T+)sccq-p{#qn_$Lyf1d+_eOV})FP1;MP>jXJ8?%|9tkdLYKB zS9Ow4@6pG!^C8RKq1J2f{c-ViZhpy=CgD3m^B+Nkvz9s_!hroCB znX%bTmtOirzo_QaUK#pm`=W|H4T*g13@q$T%rJbAv56Us8y_$nL|})4h6fO=VBt`J zzydM~77)zACm@5sEbJV75RAoWkQLaB23dj4Xpj|HjedNb(aO$TV9o;|awuqW1|bf< zgPcILt|IOsw_ky@20 zlW>evfoL-8@wLsT_e_W^XsRwLko-RX=YNZXK;^BEjn_{Xnf)M7GUn-i)~G`(Wwb4p zv5NC9e`V!!kn`QggIn3Ad{q*k19bVi^3^j|Kl&NkD=c%GMSSM_bI&Ioel+jjIhW7(FhH2#Z-$Rc(TIb7Els{C9MR`{KLx03#!>f-U1UbgQu&X J%Q~loCIGvr4x<17 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_1.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e00bd9a4e7bb0c3c8e959f5a85198abde528d9ee GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4Cjf;uunK>+M~~yh9E=4i|U+ zUwW8TNkqhE+wu3FIk&o$p6Ji^-L01}`>8I&!NvzL>`>6~0D=`P910LvKt{m=f;spE zWDuBzor4d8o0wVH5%?fu6EhfNGa6(CHlsmSU^5zI1s0T);?_1K8UFui& zd)EUN_X`2seEGNA-hTV?dusCTYB`qhvfZiqogEKcfJ%X;oICkvb5KE(^!B?(?O_E? z!gGLn?pV&O4CC@EP~IMW?E#dY29!CLx4q|~C{P7Z>&JIqK#>O1ak?C>qn zwcnk}y9q4I*>~Unq}O?I!QLAzE>c%^aWkMEC1*wE$pBW$<+M Kb6Mw<&;$TSzV^5P literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_10.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_10.png new file mode 100644 index 0000000000000000000000000000000000000000..15bcd9b56e4d99ee01898012a32e7ed3f031004e GIT binary patch literal 883 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV7BsfaSW-r_4dxiqQwS04uSvv zFTecV@3Nu7=}k4~&g|Q&SW&9DP~|$iM{y*RfD8v8470Fv@Ii1BGYdNcA7pG|2IIyD z323L1s0=0R$wz4WCb>(1^;JWzhTc}p1Q$^E&nS+ z`nrR98{btd5RCb#*b~)kogG-3VLj(2Yq-S@^WR^-m6y+BKFF&3<<;{|RVOydrB8pL zb*}S4Uf$|M0_QBU$~p4dnKwUBW10RnX3_WR>krDRR8@AI?OU{YyRyZ>sr-7cdn>1M zGc*a`ne<@O`le7xnS-2qraMBX&t_HM@wn-?*sKR95aC!gC%pHT|x==u!YQA@_$CogX1xE2`Oz10Q!f$QB{fv~&JXC9pU z<(hK=<82Aac~j$+LJTeH+l6CJY|~;B|GPGJ;=#FQ>P_BUd0+SKug#lyaOYO_PN09)iEA|8|o23xu^c*V}8`0WGB$Ab%inTf&E)z4*}Q$iB}QRGrs literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_11.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_11.png new file mode 100644 index 0000000000000000000000000000000000000000..c35a6bd1a9ebcb41dfd007b0b5554deb8e2052f7 GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@G=>aSW-r_4aOH)?oty*TA>+ zm%nlGY`WN!_M~{heBQu{>z)TyA2VIz(P!k~V_}EkCT13P2tLTz#0DKY(|5uz+&{f`TCz`{B|s0aSt=K6K6g6 zS7}Qu^LIU+9gCB?|J*&p&C;YTef!+;$gdXz3!1FWwkXnQfI$=Kz&h)kP?#X-qM#aw+Geygp% zYocRukkb#Se9i-bnA?g#?HqguuSzTi@*W#Pd6LOT>Z`f^3RHN43YwG)r!)!6bjs@j zjTKr9)b>N*?(BuTwt5%n^sIaJox9|>9LqsLqepq-oGjP1_Pu+53KSEFSRgT|5Wxfr yGHkJcYCJp^K#`3tk`WP%BNo6B4T|KbU5qEwI;Yus6ubkbLIzJ)KbLh*2~7Zt+u->C literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_12.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_12.png new file mode 100644 index 0000000000000000000000000000000000000000..56d5d8418bea28b72232f4d7f37cf7bcd79126ac GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV6OIbaSW-r_4cm!q{RjT4vz2Y zU%uOWSe{WUbn1zo8CTETh`4mPscc8TeZtJc0u2uw3Sd~l!l3|y1!NQ~5SW8cKn8+Y z*g5zRxQUsC9fA)sHZj9-;{%3+5RA=ekQLaB23dj4Xpj|HjD9Bj!|)qBi@40qQ$Ms^ zWWPr3p0mMfZce{?ioh_t>l_^Z=4b4du#54F#k`x4R2ZQSYx`mw%{VOx%G}Uo?>$z zc;%@sz9(qh|Mhb5c^kEZwgx-8uJek%>#D8JJII;W{b1Fdx__lS#_!*8`4znE{%v}w zD_OLyK9#j^mNJPhj)Doc+Y*fy50L~^XH4} z&Nlrn`Cnl N;OXk;vd$@?2>`E8d|Chi literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_13.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_13.png new file mode 100644 index 0000000000000000000000000000000000000000..158b0dc3d7b8f91a675c29f693da9269cfa0aebe GIT binary patch literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~2SqaSW-r_4ZC6*C7J|*NboJ zFPAbpCe=;{%3+5bRLU@Bo1oEF20TSU^U> z0)aXB1Y{tXg`I;Bft#3F*dZ8;(I6|Z84a=mo6#UEuo`Xnkz4M5|B`H3HJ5^u8$+cY zZGJ60=K;%h3zLJKeg)ipeNDnKt8bL?e_DTDe9nVM&E8TeAc-bnnd|+N)6aAJ75GR+ z9OUd{z5VvpYoI7U|LO-U?GISgcf=h(IVE}N1D5M)yH$C%0!1u<%KrCvPVJuxGV^U% z?FLr$9bvcE{+b4~@mB8kQ-^hdN`PiR{&)8>XL$tB>?WX$fJ{@j%$ZaFE1SS(?ER|| z`SLH&wA;EV7g#}t`V}P2mcFwt5$L{K`P;7^zV}p}2PDd&r`aJpU(o^@8&nH2SVV(p mYD6|7qCpW3kL-ilwG6S+(>qMc>v(}_lEKr}&t;ucLK6Vd^yrxY literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_14.png new file mode 100644 index 0000000000000000000000000000000000000000..1c303e4712b3d9084cdd45cc38cdd639bb06aa33 GIT binary patch literal 927 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU{3RNaSW-r_4e-Fpk@PshQNFO zmwt^q?sX_{lk~ZnFJoC}KWm;Qzjt3ls-81L6Z1hvC~kbfa1eqW3K||Du!4m{0R#)k zC|Dpc2cLip1hcSn@F8#$GYdNeV=)?J1vaBWR$wz4WCd2ExBgzb{(k?}*Y`h4xywzB zkAC)pBk!S$$equIE3Gm&o0~KV$GljaU9kGwn>|&d`CDaeH=Dbz9e%W+~ z`so!?G0!YG^AZZm*{6S1OJ^xhw+!EW-lnPAv*2ca(UU;;gPeLf*>gW`{B*e}thQWa z&Vy5YZ@M0Y$*&LuGT+|a^v&x3TgTlpCP3~bHdEyt{_@GzJ}T_KEa7%LtgB6yv$B-u z6qIkj6gb`VZfy9|&XP-0)ta9!z8Z{&|7t^9O0ywRcQsGq>tg zQork2Z6UA8I{nwu|3@Ay;{VgLXWOapXWV(0@992%aPpk_&QqCB{{r}{F+jPwx#}2-ol`%hQ_S`8=!gC%l&C|D7&f3SJ_j=#9izmy1 z3N|NSNPMrhqpA7(lP5nr58kb;o4$AUgE*m>=^Ib%V7$6Cww-1AUvsteeWy$3dPvrD zYwLmQXljKKJ}J=H0&-9s)BSgQu&X%Q~loCIGHsZ^Qrq literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_15.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_15.png new file mode 100644 index 0000000000000000000000000000000000000000..b0304da6cbfa4709e66eaf1de48737b83bfcc14f GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@G-=aSW-r_4alkUz34=>&18V zmv^xEthsD{xmc*q^<<2L?rX+VI_(TB>`lxte2}q;8H^hrFdRf+hk}L&5UgO~P=LS! zG71(D%)uuhgTO589DERr#b}Tf*o+2Qfz4=;6N{39S=&AVioAGmsV%0UNqEi!mi7lg zEiCF52W$UJH3`eK9`xOrrMzRsL!a2IiWUdAa^@X!N;}AzS5hFHKUpy5kLWqwr4Kaz z@jZ7JKKSwZ!!O$#9%#t<9pvOY$mv&L-0Uq?0%8CSYI25{4>VcOc#h})qd?*7tmaQw z^*(sicG*k#V4%UAYe8In>Ha1!{keUr+x!cfy5-^ya=ttDVAp&NkcSar2x3zq91&rN pYCOVdkToQv07UG=qG-!k#xEaKe@%N{ZwE|=44$rjF6*2UngAAh=ga^A literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_16.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_16.png new file mode 100644 index 0000000000000000000000000000000000000000..c9029414c47ac6db4cd23b8f0df412ac50cc2bd9 GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@G@?aSW-r_4e**u0sX_4j2FY z_rF~$xa(w!oF)66OwW|OXu*=d4aw8CGqA8XF~jgd#wKPkZhXLS5P=;E8XiEff`vl? z0t?6}SU@lbpMVSkv#@jUK`<7hK~`Wh8e|1Fqd`_+F}nP{^xl2)q1W3U9CMjw_(b%& zibar9x7??$Y#|v%X4#LsVqf3>TEjA3>UQ5_mvtY%++%THdE=j~e$w2lek@JOwGxY) zRu=^c%Bbcu=HFcXpx~PLoCiD${&M*hG&vWrU8rMC|4|bsD$}$%{-C5oxcR}t;DRLK zIS+)AfdtF*S85gqJ9!Us`sFkU&$+>Jy!2wHZ$Xpr><2SMf!y?fw~hs8cAff}6kV{W zS~fVRN%_Y%9V>>7oPH(kd4WgOc3iwz`tNBf%XO<=od0zdLJszFuRna!p`a;SHh%l+ z^$*C14@6wx2rzJ*kPsh;xB$fq!gxenfZ_!;s+DbS#H=q!(|ghfOo+Ejg% zZ`QkmcfVHqUVX6X_=O)27L{L_Ie)WJb(n0z#mzNaA87gP=;zS;ykIV8-gU-1rZ;0O zokJw~L)G3F9=yBvRoS=i&3wNfyjn2(({s^-qVszH-OjuA`*vlU_?!n`Z)fb^Hh1r< zse*T2-Ha<}^5%ZG?&;Im+ro1moMQW~XL67;&!u2$@@cu2-Qs=cVjK)~%?^rk=6yZD zaqgyXLFaApIh$ucXxjF_`l3rgl5otW-vTlBAH?j@*&x1|rU$YL*wS3*Z*0UgVQS{C&+25;Ii^M#6 zJx^}-12O)4lh-e``Mm3txDLmXBjYU?tt$%`Lw@$B$#&Q2<@mftwR_Q7uZ%-g}c_1bQ#?zqb@D0I8w zfzsmJTaChPck~>8a(8FZ?XT7`iybuWcz=8T-(Z> literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_18.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_18.png new file mode 100644 index 0000000000000000000000000000000000000000..834fab3fbb25d4e1db08f40828bfbec8fae06e44 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~2YsaSW-r_4ckK*C7KD*NboJ zFPE~$(;PbNBkKuf6_Q@Xr1AvP)8v z%A&uKbDbT~pg!>?Z>!lsIZdm1^gb#?Y~;*~Dd2UV`+Gj)!CIvqFZ0DX^r|v$m!*S3 z5*~`6h$1DD5D|nU6u}V%Hy&X$u1G>e5Gb+`#v>vK6j`9SSN_XzWBmukd0V)JfT@zf M)78&qol`;+07pvfqW}N^ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_19.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_19.png new file mode 100644 index 0000000000000000000000000000000000000000..c435742caf78d985e84a018a9c75663418bbfaf3 GIT binary patch literal 884 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV7B&jaSW-r_4e-Vyk-Ld2giT^ zmtX$w<@n&nz1a6XSGGS(t8rM^7AK!D`?NsA1BU__R0@` zJ_K%JW?_fmgN#kgaNPKS;UENKGa6(CHlsmSU^5zI1s0Y2VE)I0U0r%gJB0gg?S9_$K+JF5 z%!{@+S99gPeZI~hZEf@Hoy)6*@2ujzZMow_uKtdO#`@oT9SfeHQ$3hlac=kVH@CXE z{0f#fOaElr_sV+F1D5h93THX=UTxX@faSX0j{Jq3eg#dlzufWf%V=6{*v~TEX2)`A zpMt);rf7kfCr|F|y|T8dAZ(Th@4Nq=!UsEj3%ch=7i>)yp7X$~u6=dE-I=G0XR(z3 z@|w(bea_PRk{s{8Kd{ny`|I1Rm3}*SKl=UVLD~Dai<_#8OT=eCSjH}18CrQIXp`jr z>$cmb9bCI>(w{4n)$+q1b@&!s?#nBe-u~HZ@`{sjy4%VQ_Wsj-b@DOG_WydBSCg{k z@0>Z#p=V}xP<3|9Vrh-fm)7wdd^_*M)Z}d8JMU(5l=ArHG~KS6z2}trB)8^n8|P@l zZOYBjrLW=&Hokw{a>I*Nyms~HHQv+9?!B`4^xrIG=hM9p)aE~YBNo%fslDS#^PW$C zOL*TcIj?Jx;e;ca5m5|^ZW2-uD3M}IpoqjtVhRE!QuGA+V5Pl>?-kaEMK_FrxrxEk L)z4*}Q$iB}C3|5E literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_2.png new file mode 100644 index 0000000000000000000000000000000000000000..62898e6633971189e01e64248b90f53f0231f76e GIT binary patch literal 959 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~cntaSW-r_4e+?yhjEC4j2FY z_s_o{uDkW|$BJXN?vHp?5B)eMz+v;h!K7c2;b7wf7UD=|XWwJ*|Gt*yWyn%PrW=R;IQi*8f@G1GjMYgPiMP3U<#wb7FH}Y;(5-V~F9d z<;gkrtm1|n=5L$)^

leYB_$%Co$R|w8|aB6Md?y$M{!!GEl`&zMYfBcbKui!&D z%lDV5IqjU+e=a$>lDY4}q-N>Ji#0k5JF=UlZN1!U*JhT)PgTFed*4Jbrn&Ka)#STx zSI2JtEjs7HrKaEimv}yZaPM7sLA}Y2o1P+;FY}@v?pY#o=bHInb2jnXN9oTt&i#?$ zQgAeUyR5pupIv9DotQ=G-kA@i_Aa?0c_;o?*7X;q=}p2h6$Llle_lR#cFm`zY`K^( zoXy)0&f~~E?owI(Nb^x0P{E0RyXP#emcDbwj8%Qd25#~Fw~xI&cs6hID~TOZ3qH8~ z7P)=fQ`6!gr{05qO|L)Ng%#+B%{cQm^j}u^H;FlMcf*b!%%3GAwPY&)`Fx(dC;vpl z%zhObxNH~fk{^+;bmTs`*rgR(yYZ(jZ{`f&O*Z`k&$$|+l!FLbVEUF8$^ zUsqv=*}>GceN&Gu+4TI`jeBn%w>?n$7F~7eS3Ni#BGMm;iKOuX4gTe~DWM4f!_#-5 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_20.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_20.png new file mode 100644 index 0000000000000000000000000000000000000000..67c45f27dea624840c0ff121d8a51e38ba7b00bf GIT binary patch literal 653 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU<&bcaSW-r_4ckKSBnFW>%lw! zFI6#%mnC1iuT@~)eQrWKA4jnGhnb&58y+|mz_5aaLjeQ}$S7DKFbAK23 z6Eh1t1RrEt~k_v{BO>ShNy^|USY^|{aG%aofRoVa~P5>U+% zHH%G6!Vvk1qH}Jrs9S90>{|m8KWKUkNO1b)G(Elp=6CuQq_6_bIm$Nu*L@}@(K$d< zfeQG5VMC2@frkkw=&=PkC{{^{QABKF4f2B(=D`~i_kG^Jni-hP7(8A5T-G@yGywq6 ChSF&O literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_21.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_21.png new file mode 100644 index 0000000000000000000000000000000000000000..e79b310a4148e99051262e7928662959fa08788f GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU<&kfaSW-r_4ckKSBrsw>%lw! zFI6!M3SGK8U#q~pd&}f@uBO+F>mvOaIrv!EVYrEzg&l$qGBz>8apMDqgAnXc(C`3( z6)YSIAXq>~!2*Ff_ylAi7@N@`E3g<1vI3jYAST@0Xpxogcn`zQ5RF#-hHX zsZ`P8VD7rtSKbT8bU#?O-n*np_|CCilhTA_);3#LT6aBQN!L5bc`kbP0l+XkK(;v)< literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_22.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_22.png new file mode 100644 index 0000000000000000000000000000000000000000..5796bf194b10aab3482e9c1a03fa809d9ebc94b5 GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU=H_maSW-r_4e+~NlgYK4vzo+ zFP~Yy+AVU@Zk4;CpPy-X^KmrEsS7;Yz~NA!U;)DdG71(D%)uuhgTO589DESm#LU8u zzy}$dn8CR50mDHAb|`3g0KwRd23dj4Xpj|Hj0RbO&FG$p%;Q`4%RY}SU}V-#QcYQZ z=0s{h=7Y3##RqdG?yN{HNRJGW+z@(g?*lW=cV}(({=I+db^VpctlyIv)BL@^C3IKK zTXoP?-})fyp0HL&i{t|(eCvK6iz?7>?w&R6;^(`DJG`WI53;h08|rS3UmjebEjx+h zom)X*^l7c=)PtOQsykk6jtgb$c)%hq6?5$+P$+NrgMZw<1x>Uh zogMAkZUx`+ZnK&{-n7noIxpwBd%gw7XS`-(-R@SfZmEvko#)x5e0f)jUP{gBo-UpH zmGygVTr^MG_UCIv@4WF|w~Foh!+D$a%olRKb1D$j-hAnEecX!L)P8ldgM0b(idM%N z?y#<|-N^Z_uplyjz80(br@|!RJBuIBKlk~!%8oOZF2;%ym=qrY~|aRS1opsb6seS^1S+`dv`xbFvbz5h~xrFkyJ>Hh?EFQkqF}v gMw5~n!~Zf`U+#^%us3}!FsCtiy85}Sb4q9e0KHaRx&QzG literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_23.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_23.png new file mode 100644 index 0000000000000000000000000000000000000000..2e25f0fa7ca2a70576d88df501311029bd662ba5 GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4Cjf;uunK>+Rj>yh8>84uS9M zFDG($Zg~FC(*2b@EBo1A$JP>ChZ#>b84fl+fMJJ%h6fO=VBt`JzydM~77)zACm@5s zEbJV75ZuJf!j8ZP8Jn2F7@N@`E3g?2vI3jYAS=;ht9)AK-KlJ0 z8O4RJyyZ`~a`x?S|MBGgyO`JOZY%HjaKq^R^Vg3Z{JpU};}i{HDpcq%XFh?c7FX3+Cs0S3h8ReuK4r;pW|( zeg#Rwa~^!F&)amn{Heg42XFG4gk$bMIHI=W_5H)4k_8*VD(-xFk;m-_EVQX~SZkG`(A{rv8T5ofj{Z*yDl9{$Dcs-L!!tFQi0NpRN1BDfjQG z9m@8%RLu^?%EvCv{!#u@o})=QXMy!x34xg1Kdjy#K@Ad6@L&mXP^6L)p@_&tH6Cs> nC{js@P();cA{J!)tzV46!U_!1$81f2DV4#~)z4*}Q$iB}-G%-C literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_24.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_24.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d943c96931e71b13208dac7683bf83c70e1703 GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU|!_u;uunK>+N07qSXc>4uRkH zzf76eB^~ftYHsk?bbB+mm>iKcG4=<{rpGcgF&|`v;>HII2O-#@py2@mD_A%bK(K&} zf&~I|@CnF3Fbg{e9|AWqv#>)j7NbE{U^5zI1vaBWR$wuD_V$O@%l~IoJrI-qzB)O@ znqBemgLPGFXY$?gNxo;dOQrvYZuT$xYp3=JB9^};f^WdL!;;~v4i-TJ`b$=}oiFs(rc(9i@K9c<0-pKH8Lccz+m z+WYgb4(`0XB%+{R-Iqn(?BLxQPbxnBnAx=Zx0D+!a9TglyK}qu+~8u} zUiHDPx%-!eX?16(y1e`1V{3wQUN%Q>{CA=!d%@jiY1x=3o|}Smnxri*+&}xIluPed zu;=m{UM$-m-M;5v-~Ki0(t=Z*FHUl*XBUKCSFn90eP8?CC4rc}8!XcecI`e`TWpZ} z=kDz_$4^)M4XbT^n;iajRl#!4X_Nh?m2c-eeN%p;-qTYL{3@oO|M2eG(|q?Wag~+N z&X>=$*|odr0{5co%H4`ueQ%LNP~@*GJ9KsQSaYz3{kw?YZFQ)4MVzJ($FI zXwCDNLbvBWKT#9B37lRLi3yZuNlB}SbP7tZR7k6cbP7td2;<>KgK}EqgNDpH#;a@> VI7L{>rU5f8gQu&X%Q~loCIG@#mZbmy literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_25.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_25.png new file mode 100644 index 0000000000000000000000000000000000000000..6b40d33b37885a7336945046c617281200552899 GIT binary patch literal 709 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dVCwO7aSW-r_4aOH*I@%5*TDDn zm(TKjnz&=rydu6Y>v<9{$leTC_L_Z4WF4!5g@6nUbMOhsKrjnC2Ok1AF|)8k@Il5V zW;kwqz;FjdAkaOL`i6RH5 z%B!pAa318;%QIkAx8T}#yJh!;2Q1>2Q<{WjnyR<%6pXpO&_^b2Bd1=K#$>h|Wx{hF z98t5_Xv@FuvBK{Un;y8`Efi{YF4)+7vvR>vwH<-C*M6QRJo^EQy4k^v&+m(sNEU45 z^eadbmf73{6h3zU?yfsefd(90TMQC6bU(SoSJ~`fZQ1V7d`pms>%mUng8BA-VY1ps z)huqmeQ^GpEprplR+i&8tEWA{7Gm(w0!0e8$UsB{C_<#m1bU!_w8aNS{JQ+M){an^LB{Ts5@#6FA literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_26.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_26.png new file mode 100644 index 0000000000000000000000000000000000000000..b1855165b1b322fa83cfb5d6447ecc20fd46d286 GIT binary patch literal 964 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dVD9#GaSW-r_4dx~yh8>84vzo+ zFTY(L5~Ncf(2w0ED)H3Pe2BOu^A1r0*lcgE3g?2vI3jY^Zc(}|2qGH7~h{)-_OsB z37owC(vjG|H(AR+dkft8o*a~VD6OXKAZK1>#ntB7U#kvszWY?{=68+nVCm2D)_YBhgHvS>h#p*P7pM$mM&Df&Hurzn1wD0N7WEw)4t8_Adu6cg zaLdb@OD+ZNEasaQ?bNyOyThYEm@WTWuJ7Xap_V&j-T#D;JX>?wc|~qhv}NSoTcx&qQ`NSs?=$Dk`x<9wy~BF-o*T2+ z&40HXyqsX{)E(hEZ(hZ$k5(Hw^G^K^k9(NTQl36LN%+nc_b>OiZ>%mT->$js*uhla zEvs+L^Yc2`>02Nir@upLBj>ssa&Jz~)l#0k^7H2csEu8mA-zv0C`edpU%+jUZH zbSM0LeJ%2OBCGn2FWvu^zbWYBSa)l0r!|ZD<68fihy7NWOuL1FDGFO^f~O=FVdQ&MBb@0Q!rEj{pDw literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_27.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_27.png new file mode 100644 index 0000000000000000000000000000000000000000..379e99e6da5550beb53259830273f8cec7aedaaf GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4Cdd;uunK>+RiWzC#8)t_R=L zU*5pHq|54KX_`vi?S>kuj{%YL3A3N7G8}At0K*Oi4G$n#!NQ>cfdym~EFhSJPe2BN zS=c%FAh?N{g&lzpGBz=TF*c(?R$wz4WCb>(K~`Wf`eLcTwfF2z-BLI5nCEWtI~XW* z=Uk&-}{97V7YF$;}nD6+R&0FX~8?Qk5?4UJC`jYbGv!9)QkGQ?CHXH zW;_Tg6FA7}SI{Ip=K)Lm0~U3QgPeNLnK=(~=A{&Ho)0c)>gLwV>^Q2nV_W#Y%>BVz zc5~*16l9*~KiGTY;V$0I^7`C)f2w!*G3%Ng?EPb~@Nq)7Z$WZ%^=FGDpovXQ!m}T& z<5=fh0^%J}vq)oAHv<~o>08jlbx!>>;u0Y9wl%&A&oQPCZa6NaTni=Ia>#};M?(ctaD{1wPbA6>{Z+#0~j(&Sx75rVp;#Awl zPqQw6*R)7#3n*xM{K$SYi@F7K#{MSZIe(RajP*^%4fjG>+aDZJvp6`n`_%s+F291_ zgNhahD-Ut{6@0$`utnYCplM6{1D5pjO~y6zia7jAzUf#T2J#Mn0IIl`2{h2(^0#Y2 zy!0XcIhjfp2YV%sTrmzhqPC;(;#<2ZE3#sngkw@lJk|Bp=X2;+(LB=L#IBtBva1esA84a=mo6#UEuo(@q0*lc}X1{*?IsCx0`paDA<69ih z$^8)Ze=_;o*4s0B_}`s#Nav~f`atP>xmUr`Z;P{YB=?)^?%4f1)^^8<+xB)lPIz9n z-LWEIH~aQ%zFvO4ss-!roL_!Bl<%ESO>FaOqv>*jF;8mU*rtDdlDhXs&E_OOg&n@l z!lE(XCQtvE{=xja=8lI4LnHqEuf7v{d-~2p+@M9cVBWzleXNQSK(i?4#q})U0dYav|8xy%;4RdwyzB;n7I9OlirTY|8wlW z#+=gLEbz0J{<2I=9O*Bwl)vvDu*ZN6=3aM}OusXq)^?cMLW z@-DahHrc7hHoda5wQu$82b0)ebcVm}k~n>WS-bpu;-ObzW;;&2*wl9>lt1ri>Zh>% zzL#oCwPo+rPgeVU>h#>^=u*WSck?H|+4Je!iwEa?7QHY&rp*@qH0b%&K85l>b&U7t z8QbjWc{}6JAMSUj58nUy|In6`p=FoM{?$3e$8unec|@WDrCTbbSwwmTrCWsY2%||$ cv#fua4E2q-Fvlu!0<$E8r>mdKI;Vst01YIE%lkm zmv=DQJNOutUy40ieqffelHD;@9b+371q%Tg80O#;kbz(pb`CxSZenI(hv0*ZP0VoI z_<-Rc1UnQoJV0Ot3x@&-#%46g3T#G$tiWP4$O>#mui`)QW1r%VPtH~4-d1cZ;_`RS zCHmD(5}5N~(V^YD_q|{Vx7sl!d)e}AF29102j5CPi@z>B_dyh!dG!od^&N|wqb<+m zUl*MFfJNQnAg5me$GaB~(%xt{eO~4{dGp2x5khl-N_?a4E+}|9jJCk z@BH~9a~|~B9j^4$v=ECwTzT20z(>w*J1dL(VMVbyVBZw zGzkM`+aDyY>(;u*AU^xSEw=E&`9P8bg=d#Wz Gp$PzH5A1pX literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_30.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_30.png new file mode 100644 index 0000000000000000000000000000000000000000..371b7230b5171b8313eaa24ca5945c94708d7558 GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dVCwdCaSW-r_4aNcUz34|OW?Qt znRl5~mev~2nfxPH_5HGyLVM~Cm`(R)XktFd2*r&L7!E?PLqWp>1Xi$cD1cxA83hXj z=HL^MfnXMP4n72KVrF57U@S(1tiWb8$O>#mgRH<}bn+{OnD22Md4DGO$=><$mD{f% z@bK(ic?UW5jP@;muWxm*mn$!Hh4uCSWlK2TRTPvz^1gjjFvg`|rL&I3!K3`KK_yMX zF-I?O`W49VNj;(w>YS1v5|9K`G;kETj#T|r~^5E1v3xsoE}urBrPV>Bs@pf zub}C*{b5f3f~L<;J0GxI7mhjfi$#6Ms|PMX-8Y{Cne!aQ<~#uEJ;=H4bB>C|!KSXYA^>bP0l+XkKZm{U! literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_31.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_31.png new file mode 100644 index 0000000000000000000000000000000000000000..5c57d56222ab0465ab6d8e73bc80e706c97622a5 GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV7BpeaSW-r_4e+?pu-9R4j2FY z_kX?HxHKc-W~@c}vF%yfPralvKmTF4ZPUiU!rsIT!v`6gn8CR50mDHAb|`3g0Kp0t z4h0A-AfsRb!5n-7G6>AV&cO%4Sd0c)fz4=;71)dhS%J;yV&QL+zlCBBEC`c)A^Y9h zSS|n9s!L1Wn#r%@(o5dJ8veUnJZ9rb)g5&Q*Y4T-AdW9AtVHtQ+znaocGFf}loh?> zQDbcHUGUd`1BYHk(OQWw`AywbL9Ex4@2um`b1hLm=xV>RNjPS;V;5K6^~CN6EZ41e zn5!o*ic{wDD{$w#)b(J~zw62t2V=$WEWf~_Zgx=j*G*;ZSr1;FS3GFSk@v+@c+L$L zaewMou&UKjuyZ_%xXZ?QmRo+zLJD(mH-4C6&b!yJhw`+>T z*~Gv4eG2xURkK^zy`U+2+pfRjH_ux8vZ(J!J^pF&>X{FKtcI((WkvI3Vp5xK+c@OM z7l+=v6{@(SZ}sd4P3qU*@eA%U+`*-t+kW-!iw9+OKKDA?T|@uLZm8np$b0yt%c@j= z$DQMbzvbMjHPsK_{2TaOwD~rWoOwO>MakUG*UhKx*1VL7S-M(yXVp1Z=9=n)yU*NG x^-gd=QxdhJ8m&$E3g?2vI3jYAS_va6+?rwe&=XH>C-Hn?-Ein&)X8yeYumz~<=kv}7Ea`4QJ+V(&)Gdm+ z__{SL4o12ZbNLlCITwgsoYSA(< XsNyvp6F$EKCO8I9S3j3^P6U8zD?tdUK z=LL)Uj@tC-pEWGyHaoU#e%mK{zT+%Gh zf+lIh{s%1T78^PJ3hwVnzqofwlW@$9O2Ih~Vji*_|Fi#Li@L?ZpC4Qbnm!*jZ`wR# zT~U+poSQ7|OGV~9&{+y(0Bv1rGW!9Gc@oeDzXJZ}pSppHv+bs@1`3M*n0CSUOq1}P zM-TqgGalsBGqD1?@a#v$Arr=k=mVvYAFa~cz5Xh3R7C6rCNu_5S3j3^P6AP94r#861X}D=! z^h83%_twqdu?6j{;ihc<$C9Q$5Lzr8Q&5nG|KRMsdMAa~eyY6G zG~2YSNqWPY7S9{Wht^2NT$13*3o2NAZE4kRe=fbZJe~!-2YVx?-#aZh=fR_9>C&o6 zMN%pj2Yos7zASwG?RZ_CcyR9x z%O>I5g$KXxSo`|jW7h4@_H;y-AN;#7Lutp?=I+?zb9U?#W5dg5HMJ8zUXJus79v)g^M zX34KfS}aGVNbSKvIFW++7yⅈ|SJ6^@VUB$ER zyTzN565*H+F9Se2}q; z8IBttFdT$nhk}L&2&`b?PyoT$j0RbO&1jGnSd0c)fyL+@b^afIygzQq)pwS;rf9?F z`STy#kc)bfaQ}n5V}TFvhjYi*+1#JHzyHA{p8U3j^DMW$U=PcY@#*+SGO>{xqxzg1S1m@geQQvW3Ma{IJf+lMT znWo)FJ9>6^%K8;FNn2jmu{p?ju3NoHIA(9Q%Rx@Rf-=j4rJd^@^C?*zoGNK?kdqH2 zXu3WbXaiF_P>*uKhdo}JK(_wxy+KFRb_88?-FrU0TsUUsi+wyPPuzEh-6@UCY4Vnh zT~__${)fBlP0A$;jOQyi?Y7(Z=6MG+5D;Mt3S(^HiwIj#I1hBxEm*_8*Ua#pW%)^V QVDe<}boFyt=akR{083Nz-2eap literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_36.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_36.png new file mode 100644 index 0000000000000000000000000000000000000000..c4b38779015ce7f57ac6ce7a36d834a013ed1f4d GIT binary patch literal 984 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4m;k;uunK>+N07qDKxQ4vu&K zU#jqzm=JPUev0J9-DbM0US&G<_KR;go5>PX$+{Dbn zj=%>Qo0!44@d3j@1a>HBcmToJj0RbO&1jGnSd0c)fz9Y*vtJh9+uOLe{kS84m#ykK zOUjHJq3=yEFFI@Xer>ZfZ|+kT7ylQhzTZ^ck#kWtG`Tybr|ER9$a$H&ftuTVmd7;R z{%vP`wtDx2Fx>^K*MEKe-reuftKgM<=5vkQ!j*R1T)$gs$KA<4?@Msz-H*x=zVnK4 zmTb(G6fVDlw|@If+{!FDERR@>edFOZV?7i2iTzTJ__w*Gs3Ew&UcD`uL%>Tt@J2Ees?T{6= z+V!_w{?0z5ZF%!{w9PJS>6mxsqVm;@g86mZl1iGi#bS=c*%|H7cCU2b>2z@Iyge5m zEb?2PR)6%!+{+hNSiY{9QhjD|?B;ciW&Uv`1rx13587(%Fy`J?U2rj7wMn~XpY1Qn zYs+V|g^Hb;E8F*A7W?+1f-sw}SdDY5;12@IPZb=7_oe<-b&H;R7}|94hf zR`L9*xBCbsIZ&!5B}E^UWWt^@5vdZCLP<#U*j=#XGyA7|55FH$U8V=ju?(KBelF{r G5}E+=Z;0Oj literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_37.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_37.png new file mode 100644 index 0000000000000000000000000000000000000000..e399a7eebbf181f0206e560f8a13f4896067efef GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4CUa;uunK>+M~~zC#8Au8#Nr zUrIbI#>sl;<^6S&(u}!T7RrB%kld)Z;7k#xLxF+?3=7C8SU@lbpMVSkv#@jUL2wf@ z3p)ZIWNcyv23L1vaBWR$wt2WCb>(ODZ2H<=~KUyx$?`A!|cJ1u_uB^wGG5-Cs`^)u~2Q2Cq2j}jaJ7UpIklX0gJfhl+I>tvxA)LPOj>G5XGN%iJ{xKKzUp2N^=usi-V#p z?GF}hk6ZcQvEjj^u+M~~Nw*9H90KqE zzjV?rl+iQK^X}Q|(3^&3$6hEaOF#R`Ec4ldMZrQq28KEK1Y{tXg`I;Bft#3F*dh2J zV-qtRH$GrE2*C~o4G$1l!NQ>cg0UG5vI3jYASq4~*Q^cN{x-R&Ms2gQ<3(1!ERJQ0faj`e4=GyBVT) zR$lJNzkN#X&g@(p-f0&$xrdwWSkd@XZAYyCv%Uvz+di8_ZWfE#{GiN!=ET)~O~NrZ zR)6ig-0pwdvUHb{#lfYv4eCwSdjph#%vxa?*+bhUx13tk`G95n+Xrts-d)bjX=VJp zx?4?;TZAhw#jQAU!MmFi9yIYKT*>ua{QHzl%yesCt7Bn$JLYaa^x}N@?ycEn`>!r4 z(ocQ(;9soCN|`&a>Q=K)uTy(h)Foi~!s=|nTtCgT1t;$vFX7dzdYJyKe6`Vn(|_!( z_cHdy*xZ!-dQ!a4d^)SvIiSYh|w{;X7Zu|6T2KO!I$!BkbEn#T^}gmq{)0{bv@l%2oIWD=>** zOLd482TFNVNOg!52TIro;}J%KtRXhPEdIyTKf5lv$ceENm`fQvUHx3vIVCg!0GHK` AS^xk5 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_39.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_39.png new file mode 100644 index 0000000000000000000000000000000000000000..e9eb1928c9c2daa74b897584a73e2249a8cb10cc GIT binary patch literal 711 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dVCwU9aSW-r_4ZC6Uz34=>&18V zmv^yx+)9jlKIce0i}7_fk!$=Kn`>AUECgg=n1fG127+1GIrtE`iJ65Rf)6q_F~f1= z1BQbT>`>6~0D%=O910*9o6#UEuo(@q0*lcgE3g^8i}yg)H>ZL^=i8|>CVvYp$l+gC zHRJL=1(xFzAFN{g^|rdpuV8KSZNb+s|JurGHf2lRIhR`!Eh!k|Q=oZKamNiskvR_p z<~(3gw>Ze@SJ32KAn81#;G#=T({8gJ?~ZF&9CT%yzGG9TZ^2tOqqp^4|GYJK1RhkC zVQ$);*ZMna!`gx->1w{~xhq=LcVssee{?CR5x8^it%}TQpsAsL1(TaLpW@^L8!ZgB z1!@uhw#VBo4hBlxSy{Vv7iV5gL8$ie7WHnR6V|u=c%tyW;?<@bEZ5)dS@!xa)64H~ zIs0}*7q_VGxOlMiemT*RpkN`-h&_b0VUhmNV R8<;>DJYD@<);T3K0RRNR{Vf0h literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f9531d33d8f532def2ebd0c48acf67acd887b5d6 GIT binary patch literal 678 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV9ND$aSW-r_4aPys%8fshl@A= zFDqqkQkv}Jbgr>3EKa3-o_+3h)+Ld7j2wI{>@eKK%)$=A2N|1~;kfYu!$AmkC}?r23dj4Xpj|HjLv)48~0wH#l0Zq>Z4)_j=YeJ zo857L83bhZi(5RZjcjLX$`-uc_j*o6iO8G>Zb!bA>^-snd&-xl?YQ2dBpS z9pvmg;C_;`z2m`#8BM}-j+#t=ARyDUc}kk_oCjyx9_TE6z>=3z|01cqSy%(^=Jb2wn{R)%8(tf4zdmA@N<84>mlAI(Gf5y&*7A5aCQ>V1UCL rTUa05$%-}fkm4K^_Y}o@##^@8vn53%%s;sU(;tJUtDnm{r-UW|OV{Mo literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_40.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_40.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1fc36851068614e843ec7b8178c71a397a6c28 GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV5;+UaSW-r_4bA%Uz3A?OW?cu z%)Je5yqCkKzgN{!HC|%xyeIC!jMK^t2OA&2utPz^0|-{Ia40}v0T~4g2vR!YR`n$;$UdlVVZrI&@f4$nXl9Quv@$yLzSdM>CfAFQC{&x2R zmhhjNGk-l2nDgM3zxhGVzDp0@eN(hJ$eCBb-y}Te28+7I!P0k*1x><6tQ_kRv?j0n7EBX&{N_*P?SCxPTPposXKo4`?P()w2ha*!>Hdicj5K z{NRMdi6sxk<~&$suY0*Ix}a%wuU_E}R`ngF^*(cc%zeP}yix4mXQ2Mj_UZe?S+?8l s^L_0O4XD8w{)ngrr5@Cj6Y!MRaC7Ud%_$#LfeDhq)78&qol`;+0Ks_i>i_@% literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_41.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_41.png new file mode 100644 index 0000000000000000000000000000000000000000..eac83de91349a16342363faf0348ed72fc1f679e GIT binary patch literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~ceqaSW-r_4aOb(P{$$2gh&w zUp}!9);|o162L52ofH z>AC#Cdi_n+9h*~yV?M4-`7&|CtG}so56ijV?SCqC=g8vQlOL?oKcw9xZF`H`uORi{ z*;#K-{rX?V{qFWBj&*?r=?gj6osSTVxqM?4d*Zhv7pF>du&D1?DQwpC+Bl5my2g%~ z%>f04@8b)&*}s=xaw%vMj=A_-;7--SyEDHC&Up~Ue*LAtYSV3%9ew4qTv*IM=hYnC zYp~z9@)?qJi-cyeu>sQ>&;P2GPi4|3*J z1U*>$Jt%H2@0^XcVU;f?Jzz3_chlw2yMwW{u?J20))lq(g_x<4m TrH4ttEXm;M>gTe~DWM4fx_W&r literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_42.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_42.png new file mode 100644 index 0000000000000000000000000000000000000000..f99527dcd2fea0c78d91bbd29ca83375b7048d5c GIT binary patch literal 717 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4C9T;uunK>+RiWzC#8)t_R=M zU*5ntFZA^fD`TPkOG4~g6$1O%1D+LdITR>Zz_5Uff&~O~@CnEuFbg{e9|Sisv#=xZ zLB=L#Fm8Ona1enV3K||jFgBw>R$wz4WCa$ZK~`Wl+Hc;T$A6MfWxEy#9#rLhyM(*_ z0n7Ee23GYQ)0!(nS9pqxvRt>@F=g+?)yYD09xQ79Ei&%`%W>a>rQPrD7IOF%BsaY_ zx-h@bv7kv>_D{=XcCTjxT{I{&W;CRyxShIsP9;G@L#FzK~BGd z)@&frBs}K<%XGmz`(Fc%Y0{2yhKQ)|xOXu2>t!XNdg=KfLx8H(cg*RZY<)+~3CxX< zbvw$y4b;PZQ@PW-Ah}Kd;a#ANv|-K4?<-si0uN8$#t(Gsqc;7Y-s}fC*PZ?F_J=() zhn~?6+3#zc7VGSo3#7=60#Gbti(y3Uk{AV`SjHB^h}Z?iG|c#@N+zxU$GijUPF)8k OQwC30KbLh*2~7ZcIrJ(3 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_43.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_43.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0b0763556f47c87dda63cc82d079d648ee5380 GIT binary patch literal 880 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU^e%3aSW-r_4dw1zrzMR4j2FZ z_dl%dB()@0=JrWTq5ObtXUb!5=Ux}za3+=0p+La`h6Q94EFhSJPe2BNS=c%FAh?N{ zg&lzpGBz=TapMDqg9z+U(C`3)u^A1r0-MnwE3g<1vI48oJBrL-RsEY>TCKhQ zTHtxuRC$;6L08)yO~Ns=(?4&&*vlgR_W{?td%HOFDt9buiZ0!wu%kL#X-CpQTT4md z(jEn@*O75P8^*n7@* z2Occ4^W68^bMo$V=Ed)em#@DoaA!&Ld;j@+ZyD~GS?zRCR_xB@>_FvuppBe*3Gcs^ zS(Nj=Tk@HqiTlRxzcN+_*WTaFx$b4s+J8a|g`2Hk+B7_fldCVSycwdq<5aczLEWe| zE1H2pDxY%Dw@z|KrQ52cg4O$9?eWfN@|IgSbNllx547r2cRc9g34ij|(sV~3dO{%~ tk$}=6DQOUHG_FJfN{7UzL7v}i3zS#s*G|3u0GN{)JYD@<);T3K0RT_1P0RoQ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_44.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_44.png new file mode 100644 index 0000000000000000000000000000000000000000..85feed24e449556e108c2c91c6f98566928675f4 GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV2by2aSW-r_4dw1&cg;g4vz2l zml!#E`>6~0D%=O910*9o6#UEuo(@q0*lcgE3g|atylD>KGjyZNjT;~rNEpAEb2QZ zH^2V#tnmTM_s5nj>J|q%{R)~^@15eG4w4nO*bh_!7BrpyDYpzH+gQvER3Z$N4bRrx ze@@5Z;L`YeZ|q;ss+vGcp7)=sw69r!FmpAi*U@`2fO}0 zoCwkdwd9^GQ%3uHh literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_45.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_45.png new file mode 100644 index 0000000000000000000000000000000000000000..4c81435014188afc3fe211f0bd940752942711ba GIT binary patch literal 654 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU<&ngaSW-r_4bw{SBnFW>%o2h zmzF*ZyEskliFxRQDxs6jk~0b!Qrp5AnwSqVLUH2*hJz67P|)xIffXzq3LscOM!^Ds zIrs!*Aee=ngAak5m|55%7>m&$E3g?2vI3jYASc#ZXarDq z-<$_w_8cICfuijXw(*~{12St_+L=Y?JdjxdWIPa_sz!&d+R literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_46.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_46.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9bec8c04765ea74e9924e9b67593128338577b GIT binary patch literal 898 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 E0Cfmye*gdg literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_50.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_50.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9c88a4585c68a2bba3b1dbd0c477967f760940 GIT binary patch literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@r4?aSW-r_4bZ;(IEo?2gi5y znVbAMURci(yc>Em&|=!x2^;6y%yXF0uE=n(@c|4w6f``5UIPRqx-u=a%2q2Wj^f2NkUU z=3l_dzC(RSEPJVYf$n>t;-x%!-yLHsuYNrC;NNZigSj?yW&VoH=hS;u-SpttH&3AQ zovG5h`Byw(nVwgAd+V#3D96wg@21&`M9y?e66=3_+owFgSi8y++@|E|5b zq^Mx=ZP7c^*{)l6hWYK99k%1t@+r#VwJhR4Y@c0w5ElRA<<0G0+uc~ix9obmqoU~3 zg0!8w1)nl&4ywlA4U4zAS$Rv!v@os7y0W+PLrz9t6&SI2Mr zGh-P86^!rJuJrm-df>~%_O{2&ImJIX910XHU|2v#!2*Ig_ylASn1!8#4}zPRS=bTy zAY&6V7&ks(IEcUw1q}}%7@N@`E3g?2vI2|IASg*aR9gBmxmHktHD_b0NWe>N!(j**HQxMzsD@U3|9Vm5&{~%Ct zlkl7eX>8xKa}RQ!^PSv#TOXwOdhTyl^&K4#R@L+UC7Ip|e$k@aT$Bhpd4nnX)LBj(C zR#mgRH<}^tyNacjwu2^gTG?cI5izcrlKH zxuQ|W0=WGORFk@Y%zMD1zU|z?Gkkmpr}nk1!f!4YtHGUHHq##WiVJ=i-1Vk-^i| K&t;ucLK6V^C+pJy literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_53.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_53.png new file mode 100644 index 0000000000000000000000000000000000000000..5b1987777d5ef032b915d666aa37e0900766df7e GIT binary patch literal 941 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@q}=aSW-r_4dxiz9s_^*T8@O zm(P9f>B3ljdS~j|lzTl%Z`&3s-R7Q=X3U~sAs_?89DD*Y5X{2P!H2+2%q;8>e2}q; z8IBttFdT$nhk}L&2&`b?PyoT$j0RbO&1jGnSd0c)fyL+@hSGa$|1%#HbvIMqCuwN^ za_>2b$xCEEZY#%dxfX=V*IYgK?37?|K{tE(_f@wiK3HY{qpQAoz0L9m zV*Gj!RlZ+-eeTx2Q_6cDu!x(kcpq2&t?PQvgFd;pXL%3$a=%-*^y#YWK*N%nZ*%(= zG({`zcyc4n|In+}#m3?SD)aA`@0k`>pnkrP<+}2YD?eDuKYeAruD@f&cf}q5CwmwC zJ^yghV&OaI$~g4&cdWY1a*$KcY)4tQNaAg+9oz>?_gqSGDaZ|HW4&&?}_5>ui(Dg z^{#`V_mU1?%su$v&eqrSHp=YW@aTn@%$*aBtD*s-oyy=m48H7rhH{QrL&!Zg}sRxh7U3}F@tgA1BQbL>`>6~0D=`P910Lv zKt{m=f;spEWDuBzor4d8u^0`q0-MnwE3g?2vI48oj~||mJ|F+`_4{q&2RYaMJ;3Ex zpxkV2x~EAvrlepu+uq;51Y<%9_8(EVIQa3=fq5N%1x?b@cRF9NsPDLVFw|Ya0;uc5 z6yZ4!jAo&7_W{fHhf>ylu0Z{V zYP*4^ao^khKwwTVkX3w&6G%E2crs5nI?)6)5@gujpNTCGSjuAyG^@quJb2VpyoyPKGD5>C+R0JRWf+G`njxgN@xNAnK|=s literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_55.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_55.png new file mode 100644 index 0000000000000000000000000000000000000000..914a948662967fac6c50cf34ef63a6c210e8873a GIT binary patch literal 863 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU{>>VaSW-r_4aOJQIml{L*Tpm zOxs4j7T-;~EAyBAkLos**A)5ki{W%k8v_e_6Eh4SWNcyvdTmo<0rtuDLvTyMvLy^m%e7n<{c#a!UtnFndU z90xhqonhGD`_8XmvwF(|mhh~Gbk^;!A_5DVv}Ny{I5{Koct?|P%xT6xj=bxd=?6LA z?RZevs%CMJQ}4yb_iHkmqJQ7f{?i;?z}#Q^{isOHx(7zb)psyx|ZnN(J(_B~(` z-?r;-_nRl$zAWlHHZ(uqy?W*YAd7SL?b|1BTJF%=$eDNWiInV@GtD00m^pLsBK#-6!J*^+n8ytOplk@Z>0SpEbDG|^BiWY z$C5sgRo&vCac9^_4e&X59XO<+_H&N6vS~|C-tNps(uW)wklz{~pB@G+Ap{0L9NfcZG&E zBAiJK3`9VH!W&ySgQ5~)JR+PyVU8^t;ZcYyoIz1pu$S}s{m@h2#KWHhlNW=htDnm{ Hr-UW|bQ;i5 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_57.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_57.png new file mode 100644 index 0000000000000000000000000000000000000000..ba14229f265dc2e7d8183298b95c8edc2f578a3f GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dVDj*EaSW-r_4c+S-(dp|2FHK@ zGoQ0s-Z<3KA-S?#c%$!XvyBZ#4}}^YI26FJf`vl?1PjP0SRgP5pMVSmv#@jUA#f8j z3p)fKWNc!FtaVa~=rDG;O{DV$AU^IKy?0|4x%|%;E<})OXxxy`H)A?^5rArr!oT zCR+kcF*`TSkiY4(?7APmEC)Hy#Q=5fmH`qsS<*Gns#)kPeE?ywv_H^E{RfhMa7NYQ z;LhEOI|>iZo#&bZH2UC9n`O!t2UY8JzSscWb=|~*MSaKVkBU$~BZ87d|AK-PTW}(R o5)`Zm;}Jm#3RbdXO5!2oW%v6IcB=wafk}(O)78&qol`;+0NhZ@Gynhq literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_58.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_58.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba0ba733d2319f3c652776beb8c71cf6b0f823a GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV0QF$aSW-r_4bZqQL_P$!^J!Q zFTI^Na|>Ha~SrIgN+Yh*rA}|0R$^pI20hTfQ*6#1at5S z$RIEaI|m;GH!-uYBk)1SCT1|kW;DnOY(|5uz-Bba3M@toeq2_2tWMz0l!K=v_FQG2 zvy)HjXjCQ}OSwZq;OhtHb_vXR(8u%ctkK@T(Z&ipo~}>*x**lo@96`X!?~L_{jcsj zV_tnsEUKU>TRP@ic4u7PLC$rd1(NGizkTNLD|p&`+KOX+(FT2sgSwo0zk9-`J`|es zAgDRIG%K>8$y#qm{z6W_f~MIr(a!|t{h9grGH>GX*Y5rNd0%{mWBMPgI==ny(%8Ue zy&dy_b~hc2^`FJD?s>hX>>_Ks9j}W^`Sh~(hH&RyOKf@|miLwQ`}a*{)}Dc1w{pF6 zE7+{RbCp!gb>rryY^j)I6GE&0yl%avTy0Zrd2lbEUh(QU!yVSuwZ-)-} zf{FXpEe_gR{d>7*kAGA2&PIVd$F#FmHeGIt-s>)QXPI_(N&Ysa9g_FIiOqT7#rnOB zW3}GrGY@v1>3`70Vs2!kov##PXi;r`u+=8~=z~S?Z;49I**p8eGM4ML2};eUYy8W) zd<%|lzah9?r+-hy&R@q>-tE!ZvGU^Cf2S_JN?tfOuTXCXZ=YvceQ4&_5AVcgKagVm zo+6+u_kT*Nm`sibFsiYo9z@E)5xt-kL`v#Gq#RHxLKu%oIiOU8C1HZnK6<)OxT2qM Xp)u{txiTAIo?`HH^>bP0l+XkK*{D=d literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_59.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_59.png new file mode 100644 index 0000000000000000000000000000000000000000..08750172908240fb9d895157986b49ef017bb8b3 GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~2GmaSW-r_4e*f-ev;<2gmRC zO+p%2BJLfYH}R9C(*-*PaY=E3v>Pl676LLb%)uuh1Hmlp9DE4e#LU7D!3P`T0hHJAoT*b%P6LU&TMc!KgO;Z_-%WYJk}k(`z2X5-4u}rE{duhM0gL;C3zgG@ z3RsRkEVei(xMTZwU*Us-7A>Lrekx`Mr}n)&9pF~Cb@kz?3t5j}NeKIOcc%9oZoi7& ze-6aJGoUp+La`h6Q94EFhSJPe2BNS=c%FAh?N{g&lzp zGBz=TapMDqg9z+U(C`3)u^A1r0-MnwE3g<1vI4u&|126_|4V+A?OdST>@8h*TDtWC zi@0q3ZS~C$;zaHQEBpU?rD1WfmtXH?%**SaIsFPk57u(8e{0Isx57}(P2J+)RkrCC z1qV6bg&v$MxAOr@xNOX=6RbdSpwgz-GP@qIK-ta(O~P})JVl74uuKzNjAgowoBdlM z8IY1+$6ma*Yt=Kufz literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_60.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_60.png new file mode 100644 index 0000000000000000000000000000000000000000..ce98b957c636f4a3e1170f3f4ea578b50bf4122d GIT binary patch literal 957 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~chraSW-r_4clJ(QN|(2giH= zFMYa~8o9)vS(4#y=uK54)(3%qB6r3eFqy8%aIo~uiM{7)m&<Exj*&h91&y(5L ze|`C`t!`i4ueYPQxx4Oe&x17mmi@;(3YxObcU(Les>^babKTR0Dc97Ko^IRs`{u;k zDm$2)UvIK4KR0(*&*TRz+g%G{^-Sw;wVhbK`&#RRQ{vy>b6EFH1WNekTvt91nLklie@AW%qTg$(= zdtG$F&Bv-12YLJbOA1!UE_tzIZId)l-m#Rvy#L$z^Xw&Whb|Jnv!t<;FYnnR>Ay>) zc;DUKAFH^lte>0fU1Wi1_0Lle=GC0~JtbOW$D5PVyz5>SX#LVw+h-}Wc9!u$T^obI z=MJ0I*IVs4HFwDaKCXA?n(o@}c(qvQpl(gm?846_-yS}BBir}Dj9;&~z-ZnjfjQNM zr`e~A-o50fi3PyhMP|l!P38%RQ7+oTOzcm?p$8@)p>QkhciFxS=?yBkz5c-1(a+^NQt1tjxC`h5;=(} h5tP``6Z(Nz`>v@+ME|?2dkf5#44$rjF6*2UngBo5fwlku literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_61.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_61.png new file mode 100644 index 0000000000000000000000000000000000000000..e745dc57f9fd7471a64f7146714ec94b396a730d GIT binary patch literal 705 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dVCwL6aSW-r_4al&*C7KDhl6kG zFPAblUAgdVU)llrR;{OU!dusITclaCDp&}}z%U1&fD8n)uygPsa1%2NI|LtOY+{Dv z#s>@sA=sgy;Q<0GSU40wFgBw>R$wz4WCa$ZK~`WlT7T}HueGPYRh8v&taHh^$gFK~ zkkhZADcP-nV_j{|#KU?P2YWg6PH*4_3JTA8P*G<6^L5=p&c5kwQ3V!n*~7N)?gvWQ z*j#85mT_+W%)I@7u^l z((33oeSaXsaCP)mMX@;#PVp}a^(){wr=`Bb>iw^|`>Vv~JYZ1=yM{yW?T1jw6p+Ij zS6en|Th@rSMdmbRo7T)^zx7JZ;$W^!d`^?}{<$`$H~!1rzF)#}{om#@CzF5M1C5w& zVZm};YukzE0yA+00W9J`G!-Hb5pkdhq(bB+Y~k;iqWG^dyDb)&G#NZy{an^LB{Ts5 D(5LF8 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_62.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_62.png new file mode 100644 index 0000000000000000000000000000000000000000..82255ad35ce81a32ebb8bde169b3f50654e26bf2 GIT binary patch literal 934 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV9xb)aSW-r_4bZ;&|w1s2gker zFKuW)wDIXg6XTNbjofB}RsYoF;t!Y|7HD|jPyoXU77hgvEFhy`fxsMm0x}TH!p^~m zz)j37>=1mAv56Uu8y_$ngkWq&gRH=2G{_2UMuV)tYV^{74?g}*|NhH=&vAA8nfGt6 zGqf-?zr{K|F+rQf+*++kc+LYeKdXbBeg(>DJ*(KC%ji86(=W0OZLZ$TbCC1hC;0-a z9ihUBt_9`Olr0V}<;nZ%(y`~2hQ-0w+_m8{VR5?Y*LN;{z%sq;LpjU#-%hX3^8A|pwe05M zP`f2}3Kx15===Y&W)rV{`21wGcKL~EfAVGLvgv+$bn?`S@;r-scf>TR=c(){j{b4t z!N1GyyZ`-~EA-s6)10qqx8R+3YyZ4_Fz?ONw@vc?%>_Zy?bXr2x1LS)d{O%EPb9kv2Wv2&b+V2YU$^mu43E% z$Z^BX{O*cRMT?T(@g1D|Yuka7%cFnW&3WL(wmtj(jF*4Y&8&`_ZSLbc=(@)Iv#Y>) z6GoJn1|=wL2?>-|NlB-OG>T$8!e~%hB_*9A(kLjsHZeQZG9Q?eP`P-^fqTIG$KdJe K=d#Wzp$Py%vv6|& literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_63.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_63.png new file mode 100644 index 0000000000000000000000000000000000000000..5f737ab80a36c61cbfda7e27156c6520ca429545 GIT binary patch literal 693 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV5;$SaSW-r_4ckKU$X&^>%lw! zFBPz{So}NJbEUTHkBHa8Sn+@~OBMwS0T~$P;1iI6U>0@`J_K%JW?_fmgN#kgaNPKS z;UEM%6f`_QUDK>_+SJKdSof75#o)DRWHoiB)Ok1T2G z=GV)e!K%K)&^cqeuuRkD)0}zl7_8Qc$Ux0M$mv(W;a5<=F&SIeI7xk+RjZzC#8)4hQf2 zzf{n|CbD~*vGT{8r=p)u?a)taje(p2Z0$t_RTNdm- zqiNCC`t4fNyOLx9nP_hFM>|$jmiIdrEKRa5oOfnsy{*{6t$n(mV~>0bC`fLyuJqf; z*|+4Vw#7lg9aG=bH9HiDt$)CxZeh&b_p$qXX59WKVsmZ?rF|>ue84i@Wb^S|Eb2R! z%q({nn)`sI+`>YB2Zvw5(Pm*F@4I`!<@&sXoOwP4i-hMqXi65G12X7fr(Xe3O%qV) z*BKp)gInv43(R@2BPF`>u&-OeqT6=qTPu&M?I?^s{eo2&s9LYmvAQC%KzZ@%U(=`8 z+PW7!UcCC7>iN9?1ug|W5oer)@05Nly(gp$3=2f?g4k3DVu3l{3|Qj?5g(vvCndT; g?m|gT&DZu-+F3sH|Nq$rm`WKuUHx3vIVCg!0Qt21?f?J) literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_65.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_65.png new file mode 100644 index 0000000000000000000000000000000000000000..568b6f1bf50b748eb44bd7ea0c6be4c3b5d4c396 GIT binary patch literal 976 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4m*j;uunK>+PMJlbRI-90LFS zUvB(-{SWK*&-QT^6T8oJZu3qt zW~(~J{(af^T}f+L#7%xGu~}6YDBsWj_P{7-$~LZd?-qp4Z&5Zk^1oMp?ZLcroCiz! zUUeK_DRF1jeS^@Z)!*jbTDS4;&0TZ<#y@*7?;Wca%l5;MBB~EBaAOhw+UTB}^X`q| z(QTCltHbYBHFf{HpuCUmex=XBT)CJw(WQ%@&;9yK>HCM!=G!kVvW-_9KX^7SZk}Mw z`+N892;AB7AWZgnXO-PSPQBcM{Z7I$`ziz9itJb0_Rluz>4SB4W#1lX&5c#sF?)X@ z%k<>D5Zkrh1>*DL3wG{%79Sg0w#;+UgMH$@EYt0GbaCr7{eE7`k$3+=*na(koa=t? zUH4;_*{eMP2Ss_;J({Ve+!Vc4K~V6{B}=s(`yOb`zxCB*$Gzl)%}v_2$63m4Hm2oY z-OO5^x?X>W(!o^83HOq1^MCSAf0&hZaIeCSsqFs7b8nSC{m-JlBXQ&3D32SqJ68A4 zuJmDv9C8ASj1UwwzG^!?~@pJXx(kA z54MHbUykiA>y+PLrzC#8)t_R=L zU*5nZm!*CD`pk(xT19>aIA&hs*4Vscg0UG5vI3jYASqtm>r&Bwc>K0dqGpS z^%`M&2Nv}mWzE&8woSr!t||Kdiz`XzZ4!?8t+=;1?PY}whhA1dxvRR_L0QQ=>s|oW zCO5C@D79gWIf#wRw+*T9= z3WwVq0c!hraOvH7$`%KExz>ID6)PqXQ&Nx_t<&LKu<@X3o|1~i!K19xclpk{!6Ggk zv;Ft!JM)xxoOqy?SNe`EJ$(6y=)z4*}Q$iB}RaW(A literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_67.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_67.png new file mode 100644 index 0000000000000000000000000000000000000000..8838f57944d620c1315844b8f7083012eb399408 GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV2<*1aSW-r_4e-Vpk@ORhroaT zmw&x08O?EWr%LwOA8DbN-fVL?@S2^YSdvLVhJz1=S=c%FAh?N{g&lzpGBz=TapMDq zg9z+U(C`3)6)YSI5LiG)!2*J@84a=mi_st}uo(@q0-MomW}dkIT>s!+i9K1&(jTku z_nbTt5gY#hgjU=3*aFFB?HzW-E(NS=(;xg|G2f-zRBf>0s{QeFmhFdkmwmC|$b0x? zmgL>-$GO&>-y?A6QR7^}yOSS;`Lb}!gEg}3>4^#zxL(x%rH2V4vI z<&<~)JD8e3{lP4@=^Oc{m#Q9HGu5f-w#JUT;j>cWIt{INoO!|W-DrpKw6eRl>|&xZ z?H`5jJbADv{_WQC?VEDrke>wRAJY0c6U<9+@G>}=a#d3}oIpJfxF8}@I z$oxH*mYkj{)Wj_}=VEbSxtzMiLC(B`yKmnh`;tjSo(KO`CdXu4idhLF~80 zxj*=17QC3vF;^nytEJ+Omh*44^Cw^b>2N8dAhLYNwu+q>oJB?@S<(nVeVwt`#vY<&g=7&DVLBmfB-M$4)n?nnp$R=&%^eZUi;yb8l!T$4+ zTYeF@UjeK1-B=}ygQB@5(bFF&HNCEgzW(mK=-dY^oNX4K``{1ncEOli zpGD?8NCI(L$}PnX0?ld?p7VgE{Q--*#X-)zbAB+PPi0ln4h2oxceKnPLNWK^KvuVZ z`&H5Rz>VGf=jwB{450;0*_&j6PJdvD83VY22_8hCm>?wvKvrOjU_|7S7z3b4?)b{I YckLV1|9`is0uvvDr>mdKI;Vst02Q9$s{jB1 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_69.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_69.png new file mode 100644 index 0000000000000000000000000000000000000000..159e0b76f0a01314c34c25e51f0ad1fc50c47660 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV9M}xaSW-r_4ZC6SF?eD>%}+q zmv=F9PU@Nb-10&C%PnVgw`3h>og#UUNkE2!4~ALTIrt#BiJ65Rfe$h^F@tgA1BQbL z>`>6~0D=`P910LvKt{m=g0UG5vI2|IAS`hn;%56O}AM7fJJ@B0e;qlg@25?eG8h5=RY_Row1SAuOLlWrpdXW>9)o6 z$#Q zO%~rS20E;NQ8DwX2Q1fBY=E4m510`^VkjX(2oze_A^>Cs3Gs`FTU-$UvgXKc#-GPa VS22t4dI3y&44$rjF6*2UngDvc-f#c_ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_7.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_7.png new file mode 100644 index 0000000000000000000000000000000000000000..c48c6a9b10194c0b7c14accc5f0e49db740f9915 GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV3zZAaSW-r_4ck~-XQ}4hl_Xq zU)tb0RiM-QTaWE~&%2^tz4cB(>U-l37)@7XIN10Ah8+qT9zd{yg+l=X3&? z@4v$(b=?=eb&G?nHs9~|_caO6d7#EJ-O@5#zZA#} zYWiJ$$)%u4_|B8(Vsjp_T({ZLlf2`U_Gi}XIy)|h&kETu<5u9?^m@aV*SF8FF*(Uv zUQw`m`?tu0wl{Zk`xQJqm>L&4Z|fADN55IpGp~Pmylc(Unq5Nf1x?(ycmLhB=l_uh zO5aXT+oy)9rGlarTkmr{s&@j?%Ju(eUSD3E=zdEhp_uDE0PP;<-c>k zlV5mtm+!q!;jHQQ>>PT9AJXRT5|8=Ysk`Grf8)&UR_i71yo#P1{&Tse_22WI(+;}s zo0oSmG f$i&#N``*d*wyPFze{%$wVHiAJ{an^LB{Ts58VN*f literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_70.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_70.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e8793080fca84950e58d328a4e1d58148516de GIT binary patch literal 939 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@r1>aSW-r_4dx`qGkgDSI2+< zm(Sg+t;emL`Ocv{w9GT7#joJV;|j*xGHnbj>`lxte2}q;8H^hrFdRf+hk}L&5UgO~ zP=LS!G71(D%)uuhgTO589DERr#b}Tf*o+2Qfz4=;6$B|_=L_CB$+)gg|LWxI z>+fF*#a!<{*;HLy-#gbj=V;)r>Vonp0iio5AC&E#e)INS(;d6l?&Hcc*dhBq_3LX6 zzk-hk-$s4(ij3_3RsX#0xfttr#T|D~pVpl0UC?w}D&}gX%t6j~g$HZ7db-FwI_kU4yn`fKqmGkPQ?Vh(ULutqR+fg44bFb~KZOWFq^U8Z&Q1j}j2@!%Z zP9;s%SL1I@{qp;Nbkq79=Bx7pg<>)atpBf4XDffULf_)xUzwPzKj$oYAoOmT*d6Ak z)i#y8K7Fm@T=$8;7JIkY2E61@ev*7COy03fB@~lf@ z+FcP@pn5TOZ^d`7f~mqc-dZ+k_vd}p_0DwfdUgCR_dCXeXL<6EUR0^oQTo30L6xm& z*4LEm&jxb*f=r;42v3EiCKW_70VNr1sSw3@L@ER&c5I0pk-%}JLU2NFVov+X9JpNk VLb}kCDZos~;OXk;vd$@?2>{ydaEkx{ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_71.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_71.png new file mode 100644 index 0000000000000000000000000000000000000000..ff220014cd24786c6d06f91e8ab0b175a3ad98e9 GIT binary patch literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV4Cmg;uunK>+RjZzGedf7svbm zFP#)rICy5qTP@A`ErCze6BytAU`TD7&%nao#0T{5J1uh0@&%0w=EBG2!wv z(K#2E)doFtFYwmAX1=|)_}lK=3Ol~tu-gCpWnKMUv4cmCUMu}lP^Gcs#e=l^^*31D zFE)wJd62R1p3v+EEaqqWALv9JMd<=%?*9Rf~h7XY0*X zE&`<|H-BaqKbR{S^E~tRn+GoH76<=sd_TGGQrFm^Y>|?gi>`r@8zJnuKM- zyM2LF%!fcAFM08Uw71R$P1)S=kd)~_b6)pun-1%R33dWSwSkIMHMhO~FFwrCA kk+M~~qQwRR4uS9L zGt=L1Vvfiv-CnUit8DTSwpvLR#pB!&&o*#66ew80uz-w$1q5^O3CJKY3p)oN1UE6W zup{t6#wKPkZhXLS5P=;E8XiC}HlsmSU^5zI1s0=0R$w!_IPOc~TX}w|6TZg|ZH!LQ zHm_)vmHZlK?Gq7t>|ofz-ZrtF2RD}|Jo&vwE@o+G`RoU7W_P-J^>$dj|M}`Vhu)6> z&w^_9>+eJop5Jgw-?{n!{GH5;`R8k~Z9lvyqWeKw{r!#yVf+pLw=NjGeo(V>t9`3--H56iUApxpTAnWm)!p#ckCaQ~A9P&TS8~v^mJD(~&ZNx2xWZ z5WaPPS3=HHIacs}>d-)26L zsy}tsial!Y<4w({=curLU+`cZ&yBmyr|q;lV*-TlX#e}EtbBdLK3%DjnGJO_3s|;S z7EF{@d!)yE@adf6VY5!$W)~N|d-uV*br(v1Zu$SzZz|XPJmX_6-1j++gSK1yuJW+uae` zbo$4=Kz{X8GW@E?KCkZVv48UM%LA|fH`V(iR&3vx{&!An((cd3yKGcXJGX$+B_ch7 o(j~SuiAay2v^ns}y&FVdQ&MBb@0DsAwS^xk5 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_73.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_73.png new file mode 100644 index 0000000000000000000000000000000000000000..3477af530cf040e5048954823c71b1ce5339cca4 GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU|Qwr;uunK>+S8pyh9E=t{30b zU*6Cxa6t06@41OTGF>|_#N2eSj5}b|zMO%Dy@?ry4>C3}gK^^nhJy&~P|)xIf)y+r z3J_R8M!^DtIrs!*5SWFXgAanS7!9%lo6#UEuo(@q0*ledzc3fhxi1iN<)LqnPeoJr zJdu|hIsFQnw0G@W{oS#k>G$Jb`}XQLbw^zeN_H-I+&sJF#8EYigFq!$)=o~h7oYuL z$IAe2KL6iMFU!7uZxWU{%D(IMh5D)(`66z=0`7HZ>!)+%oi5!}y>`zpx4sW7+s~G~ zo>R2HO~vXU=Q<0E{2gG~;p6gq6pnG%0TOqzx36>70m|xWSjcm8L&I5!$u3?gjm`@`RVo(O+Rj>qSXch4vuf@ zFQ2SmmGni*M7cct?tW>H4SY&W)^FJ>e2Y083KT40SU^U>0)jdC1Y{7Hg`I;Bf}5CG z*b(?3V-qtNH$GrEh`)$)oX7lQG`xZ<-=*r(TcXeNr z@SSa&OOK>JUH*2@*WHUByz5z;Q!r8A=e*q__QnS+)AP!@XO+%NyP(yr)+8Krqp_dk z-R0Dr)`MY{7oWWRz3!XE^apIo)ztxYzjGV^@B6;WfBF>8b>AJ{RjpZB9zU~r_e0Og z_gFV|J)Fv=R}}W*@2{->vfg**uRF`W9eM3J`N+Y)u_h~J?!2kn%pP8QaA{~~uE~z8 z_iOWJKFr&(B!*Y->Z{kho1>2;IWK!qrvInsPma3Y<+4~gZoMDk|L1nAtH+x z>*2yOJ?-1R)Uw-qD~dk3o+)^|`@3AkGU2?|NWTKvgL`YI*~{KJp`*X!(ZRQI1~YiS zxnu}3t3Hao1oZy52Y&Z_Y=P2dtm-?KrhZ(Wdq?ih3o~PR=7XxT8OqwpO~P{?Ff~QX zPPs1-^DOznwgacxGoE=)y(hX$>)=_r=F6LJ_dR}a?0X~gmZHypjy!?Be>R6- z!STFb>2VRC1-UzuX5T!{d+_az{4_fk4p7oUq*fA>6e!hVOR+PLbz9s_!x4>`v zGw(90-QfG|d)~8Vs#De4PmjMco{HgP7Ip|e$k@aT$Bhpd4nnX)LBj(C zR#mgRH<}bl;TD!n^wgVs4+DX;eA+xSqv9 zSKoVI__+^q>Lm%;OEy1XxvsV2uJFFgHw0rs3bgMlC(dqKoLaD(Szz{qKE8EUOb0pr z3S0#{d<&X{=R6RQX_A(Vx#~GN{&vB{=mK}PaNDr*=^XDm9$3Zj6+};eu&DWUP4xB4 zh8=zdi<@2>gsI1{l;7bB|2y^5{Rb}UJAT|Rn5ym@)+2fFC`qBk6VB~9Jj>$09k zh;~0^vEu zTaU4Se|DK!?!4fgjt6RguI^+HU@dnk;QZYHbdvW?ag6vv#1)AF3XU^u@db}7P?A6x okBBQ!k{~H56mvKf7+ex>dhB-k^hAFtV4`L4boFyt=akR{0EP1U!vFvP literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_76.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_76.png new file mode 100644 index 0000000000000000000000000000000000000000..efc2908651605c6ead58fab36197fc8a73c237ce GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV9N1yaSW-r_4bZq*I@$zm%zLK zFMVU>iR0M1WZn0KX`F>C>f3F zk)~|%Tdxec{R#{>uC18!fJJ@VNyB+I85=p*h33ScSGPDAXmI4Ro37cxt@4W=upB=W z?Rj0(qUKe%Z$aCO65%-yVw9VVU4TN)CDxi2EYE>LhE{i3)OW0TATY-f#Im^F_Mqp| zR?c%8cm25fUc5M>X7RXW7iZtUgNhdFO+X8G{dU(fJLuZKwdzNcaLk*vsb4?TMk?*N z@uG|;KBp;L_^#*vJ#R{cV?s*Q|Ml#+!6Ghy@7(py2TG52|NQR<3Nd(Sfg*$&k%5Q^ p6yp&_lNuR_hyXDsV3+?PEn%Mmc2;rA%w6o_riQ!OzF(`56OQ>J zm-(#rU0k^3j)^~5)OV;dPZ5l{Hhucm&6S&yx^h21xM%m;Oep4?_>4k{KTm8~w^tU3 z{@d~QeQ|hh{4=ilpaRkV_R&^5%(pB4dcQF1VDGwbVde*Qx!iIU;usofn^T)wjTL{{PBLE(IVH zZt)#_D;Tr$t#Lrp?4PmP_dncz=$3NOmSf%HscM1;L-(KFcR2Qc(`=4)pO?noXZwEr zwRdc%{tnxw=)K|V#qOM0^}b+}XF=#9>784&t8Z(uivQeoIo$jp?>kNZebb7bl}_Df ze9)95PsQkZ&^7*bM&A$LJ@TzYC~UUF%^`|Q zxnO30#D-nD5_6W9?KPe@Q9aDhJ~GH^$BBbytc=5LcZl|%+`KDS~gXpKp8pZ|roL zms4c1v#{X8RA5@fmIe{&kHka*N{86eAR_&N(jvlmMEV1zMIw{;ffeydQ>O-PnmOef QFb6Vty85}Sb4q9e0JeW@`2YX_ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_78.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_78.png new file mode 100644 index 0000000000000000000000000000000000000000..033a5356f1703f71e658b0b48616da65a1d56114 GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@G=>aSW-r_4dw1-ev;<7sv1S zO};cR++UZzDKY(|5uz-n|~yLrBCz3Tq&E3d0q9PE`1Imr3$ z#)C4RwGUXtH_3m<+=AI@mp%=gH_G5 z%`O1N?|$%=&ARPd(6sq3i~5dp55?v@V0m5`RM7OApYI^&xiaB74}LW{L#6jU5CBR8 zjd{wy>$oROy6#r$Zce{~ZL=S+T>tr92I!a*500o=*h%>S&HZCCV={k-Yk}!OUu!l0 zoTk;>d9NHd0M#yP^0wED$!W4y+p+EZ5{|r(0?zAAL^WaSW-r_4dxipk@OBhroaT zm%m>9IAm$!nYO3Kjw~FwDUxAOpcH>>PXu+{Dbn4#5W* zo0#Fa@d3j@2zDrFc!0nP77hgvjLm3}71)dhS%Jl9kQG>sj@dbP*RlFd-?o1;l(Y=H zezjgFL`wNK+w{T&R&|Smx;7`8jK#Kb>AiaLM&u6P=CY?7Rdy^WKc;?LXwCx`bAfwj z9;D3;Irz2zZN~$pMZ1OXyb;#6IJng+U~^OS*T}$v*Xwgwrk60?+iUmuSkHs1^Lg&9 z-&1zqkDp(y;V8s6X z)l=WyEa7?oS-$^YAPiE;yJU-(HhX_3tT}d6z|8 z;0~wv?z-Qzm(DX5zH{&3+PdxMx!z5_dH3m(2Zx$Z*Q~P1){H#z`b-`>oB3CCFsk4y&!!v}-u`%Z<=1-llAhe%57O@L5|3Hic(1f9TR7(1_2_V(yszPN zqmQZXNc}&-&UA;KKO2W$VZqru^MjjL+nGUPkqU_el>V@#J%rIDCJs>g!l literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_8.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_8.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf9f648ae8b4872b5e59ca184e6930bada46a1a GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV6yUbaSW-r_4f8bPG>_N7ss#n zx7=;$cguJydBRru3sd8tD2Lgf1REYW6u_{8g+l=Z3&@sAsCy{ASVEK#C-0Xqv%bw$1)x!UVABxp1_ckDf&~_tAey`g?K2bm Xa5`kgiLw-6Vq)-g^>bP0l+XkK_r}2i literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_80.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_80.png new file mode 100644 index 0000000000000000000000000000000000000000..a15a8eeb67788185ed7a7f25db4c25bd001d15c4 GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~=|!aSW-r_4c+S*I@$zmV5^wPEDp}(KN#upne&{}v$JXz2RYB>0M*>)1u|lqHqUq_B;&8Y?7HVcSKahq z{>zR4RqVXW;$C0Cajx8A`|JlS*TrR;HZMsNob%w*^eeBIJYY%ZJ9u&Xiac|m0X#qp zInHhB@-1j8u4740tUsp*vfw7G`@c)O?y`gn#+eu8#ly zFMp}MNT_I1a`o+b6MtQs#2shB*|P860R#Qr3@q$T%rJbAv56Us8y_$nL|})4h6fO= zVBt`JzydM~77)zACm@5sEbJV75RAoWkQLaB23dj4Xpj|HjCMad`CHa+$AVb4YaNZ| z)eQZ2*flqX+5Y#`cWUC6Z!u<@^MIv1rNDpN%a`}L{0c5#PyLo4{ncXkod2rxE_1!h zj^u3Ka9n%y1D5SM1&gmOt=jF+rT4XK?E^g)^Q71+efNTk`GQ>M-l*;9+t@49qQ3vR#*XH) zxYvpu4`lr0#AEvVKW+K9@4=b8CT*^FzZZ3aSg-#iUX^WHeM{e(MSSjE6bvd?x_h7F?if8}-zm9LGN%|KwRmcj5cvp#sXrtwB$ned%f=i`@~X4@*ix7f}3?ylYJ zvmEP=-@Vr)91~LD&z|_o>^qNNPSfr!J<|>vfA($>YBt`@xh^HL^I&Lwc6e%m-ZYMN z-UX}qSDga6`L^DUc=3{VF;`Y_=so4`V^QCsdGYJMRLw%S$iMb1oO(7pPJNiC_j-$= z;*RF#-NNxlA1}|}4o*pk6of095m5|^Zfq$Clt@WPpoqkYBL#sIDb57iaQq)by)nbr UFZRAMz?{Y4>FVdQ&MBb@053IKqW}N^ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_83.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_83.png new file mode 100644 index 0000000000000000000000000000000000000000..428a304a469cfbab034c1e32f89ade17cec01c80 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dV5;zRaSW-r_4ZC8SF-_6!^M05 zFI6!)PE_;#B=_d|k-nPMeYvlh4(aGKa`3UR!*CNb3p)fKWNc!FR$wt2WCb>(K~`WfI`1C$o_n?eGP9LWcfEiAv+}S& zO!tLFZ4m`c*|N9KJ?HW(NQ&NhyfaR}Nn8B(WkXhV3#PXBR}#f$Ke)v={{f5p#^1Wx zVsq}EoyFSzaPw|Xzk+Mp78`fYaVcm!|8&U%mh`p%u>q)WwosE+M~~qQwRR4uS9L zU#84AGW58+B6?4_>F%ChR(Zx_-##+iJTqWXun>@eVGce483<-!=io!&CT13P2tLTz z#0;5tyRCWKBQX{(P zT-DmpvWU&E_ulIJal>}YnS*irJ_*Gye-I~e=gb0I!v{^mcgzmD@=keB#V&5^cJ85E zSIU!(`~LntB|2lTy7-;$=I**XJrCx^&76PCqhM>Ywq(pV1y}a%S*=`t1*-h2o70X= zJze$f&cxGKYKKGEX!9J`8BP!-p%>Wtsqp-us*u&#OmE?<_C4-3+t8F zShzKg!<~-OYy<~N}%IfoXjr3oX@UHvi`=)7j#56B)??uOpr$0EQ zJHOHD{tcG>}Q9T>B;-UoUd!?sbFRAKwbZoJEJJI`o` zdf10IpZf3Zs7=o~n|JQvp|p;x)mLuL%re`t`Ty;YPSYREV%?skzu#zw_2xZ?Pr4mU zUBBn%gD_dYwZD#hK5c?`z=6 zyv@-+9~jxawf!Y`?WSw9p7iAteC`Fa*{54JNS0@E_~pE9J}q@(_rchkGqm=77yDWv zd;UI4_=^jhZqHQJsnTmDh$(Wbhm4~**d6Tbb~a;WXz z&-UoJ@3)yI#!tRp_}*4(&g~s>LNO^7i_ibO_Fz|ykwby&qwcDCcg>dVj=#L&^Ul2w z5|V-G1Y6QWBs);@qe9X{Bs);*Mi`GU8e|QznI`-%)2ds}OQx4QxdU@5gQu&X%Q~lo FCIG%gk|zKF literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_85.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_85.png new file mode 100644 index 0000000000000000000000000000000000000000..6899c6b1ebd9b236700faccc43b37bc407d22516 GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~2GmaSW-r_4f8bu4V@w*NZ>@ z&(AZz>$xy!?vta%2WqFr7;(kwC(M2-*zmxi0EQJT910*CHmi9ftc4fwAe!n znuO;(U^#x~!Mc6&EaHOEuMTke6$BohX|o{-B%yAxPhLK_f2!Ry4!tsI9}d2QM{}CD zwE* zuSt6A-Cg|KZm^i=?JkweJILu*&^Ng$`QH8&N7XD2-pp%Ct}EckJF`3bc%nGSX0wBZ ze*-uC%FwhpXq&b>lz(r(YLoDtQ~ShOuGcAtor i{8*k3p1Ax`!5n0}ur9ag)+=C=WbkzLb6Mw<&;$U!LhLgD literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_86.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_86.png new file mode 100644 index 0000000000000000000000000000000000000000..a204304332e44670d882ed126760fe4c036ea3b9 GIT binary patch literal 939 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU@r1>aSW-r_4bZ;QL}-7gX6pU zmnri@8dbi`l-#v?Q?bIduM>I|uk&v>o66x(pkM*R0x}8~5X`|RAcMdx>>PX$+{Dbn zj=%>Qo0!44@d3j@1a>HBcmToJj0RbO&1jGnSd0c)fz{|8A@v`={!jn@&)??wy!j{2 z=N|uTZ|i=FMLf~Ln8n;mtx0&!12aFfgPeW^*XJ0X61j8oqj1de!2D-*o7ldmNjC}K zd8;swFYjviPNf~w-iC1K73DNZ^W=Tyw)(tg@dFm~w;6jM=NFdFPe#?aPrD)}(9h7mK;EKe(Va zU$$0PVaKL}TjiFf$6mX#YyFAI%MVRe3%&2Rj63hC;JUBhH^<((x;uXL><8Oezkgri z`Rsw)_w3T&83lWpEsHOOMm=1$f9V;K=v5EO=I3;X+<7BxZ+l+%)79@c!?tfYxOb+( zX1mjKZ5Fxxj8gcetA8`eTlmg7@qmzsP4m^ZVc+*aSW-r_4aNg-(dv-7sq$? zna>5v7A#*m=~MoiN+$QnYs@*D?=T6-aPYw}3p)oN1UE6Wup{t6#wKPkZhXLS5P=;E z8XiEff`vl?0t?6}SU@l~qd`_+F&bnAHlsmSU^TjLx_RN=YTsSgE??KTaN}L~fJJ>r zFSCxt!K&z@z)Gc<;e!ya0 zzv8Icj$aRC)LDSsdg%R~S@KV?BqnSaC?i5obOgWxKyVi zb}&}-&Ph`azk;g=Z{B4&-j?Y5cRwSGx!R7*`(gsKAFSie`(&)qBrOzoBI^Z*mLiQaa_1<`qj^Zcc$IYy5>1Ew4fg_Ebf=j0{NZq63=ci-sG>zdi~v{qNlOD=iFr}FD=<@zUB54&UK|F@AmXOFmrvr zpOwY^L7N}ghw;C9Fk=87`nZA!6bq!p03!53F#$Io5&ED=#um9CYp|sqmgfQu4;C!d Z->=Li=6CFyFff5Kc)I$ztaD0e0suGQ_$L4W literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_9.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_9.png new file mode 100644 index 0000000000000000000000000000000000000000..453fa7811031587de15e26c0c05f4548575b617d GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU^4V{aSW-r_4c+S*I@@97RSH; zFMs2&iE61{*>s0}F`vYw$_CTNf(;KG3Sd~l!l3|y1!NQ~5SW8cKn8+Y*g5zRxQUsC z9fA)sHZj9-;{%3+5RA=ekQLaB23dj4Xpj|Hjh3ldQ2gxk^t&8>1>M$ya~_C&SKJX& zFjc?hRNcXeJnMGF7sQlqXcC^&yfwangYTea#6eEKf^W(e?AjIwInUJ{RJ33Tx43bL ze>$r=P{0qQrjmVAd_j}2Oj9vP06GPz8xdS2`w12kAesuXfrtrEjNp%r4=-8OYC~>{z1R*+LJSO^u6{1- HoD!M<88f>1 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_sensor_sound_frequency_white_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_sensor_sound_frequency_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8da74e71846decfbca4d527763111e87edb9f7b6 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtMo$;VkcwMxZ#wcdDDb!hzN>$^ z%T#T~E2ihC=L>&PRbfu$Nw!!S%u>Vapp+$K!_d64{UGxrf$IkgCfszWa1d|SGO|(F z^y41SXK99SM(u1zrrw;!AaBCN!XcpG(7?b5VqB1Ylcy-USL= literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_high.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_high.png new file mode 100644 index 0000000000000000000000000000000000000000..01d2a25cb56944e26fdf659e1273f61fb52e8466 GIT binary patch literal 1339 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|P6Qr;B4q#jUq@9gCU`cpL)X z)xRve?K+EPLW=hu^U1n5{Qj^n3%00ZsCd1Bg~5qaVG26Iq1q6@ghpVha^l2P1=d8Y zQgmyfPQhj>R;6ezgmQ^iip`loF>Iz{Q;N-*Krtee`u|UqU2p%aJD@3mYiWQ{Gw3VXF& zO50w>v6MG`bF_8KrMAsC!Rm9qZGZf3L)q%%y#ZWL4;81Me;h2c-?sdUh4MMgSx%h+ zZD${QW&D$NPStqd7i|F4;=})Bbzw-WQSuw01zf37D*yYIDov4m>;`g@eyfquCQ-%n zGqjyFr||QphM1IbrXDdA^jau#>VwBT-l(Ud>m#^Soo0$H5Z(SU)bajP^TvQ}Tu)D( zUv+kFrK#!^pqYJqsYk8emvq1R7Of$8Dm6SP*6HOcps!9{TzEzfY%X7_t3->?LK(4B zdC%VooI3Fts7q-I&_Jc zu^>*4;3;iGpnQ$n^T!9k86T3N<0R7p+m-@xo z$N?DR6J3BrBarY0vJ{o)U?wYK)2YIgX$%e;j4eWF1j9lW0WWj{LlsaHrYf*bVwIv< r3*%xl6()ylG`b6+uEwWy#b@s4JSxCa@8)A*p~&Fr>gTe~DWM4fgb|O| literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_low.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_low.png new file mode 100644 index 0000000000000000000000000000000000000000..f4244b2fbcb7788a43046a803a0652bed3ac3ec2 GIT binary patch literal 1300 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|U!#PZ!6Kid%2*-p)JZz~gZ6 z&wu~R-@6tq-MF``%^R6|53sV9#l$B=+E_w&lR9T^6tn~B#Z;dG&O9Qr57v1fREz#NBd|UGg zhbr^D7}3VxWnovV7Nsjqk&!qx_w%w=p@mNtE?iUB>3<}Cs#9kG*VE){Tdb$d-*#WN zpkPWIa8P4o*@KuKFFOSUgx+|uPQ!S7qBiz*fd*i-lQ#hWU2)MU*-Qhf-d!ySw z-IkmRWC(%`1Jd)wPU$^27W8V_Ey$OZ$2H|3-Z{~^-Uao z`B%Tc2AZHWC3j!U8mly*>o`&)uawDM3J3bfMI)F$9vC1hZ!YM4656`$%-hA^laJrz zP(AECbML-ae<5M|26wNa*F3cFHze)4aLKc`Y$gaTcBc?wL ZBHJHi{T2C90xazqJYD@<);T3K0RWa8lt=&o literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_1.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f96d02c2279b09167d1a7146a4f43f50aa0733f GIT binary patch literal 1249 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|UznPZ!6Kid%2*I`$nh5O6(s z=l`V*Y0M`!&i(gRt5a9PW`5Ij{DC{bIV1XOi|&GfNt=h6VBDei5b zUOsoy$dovFMB_}I{5CJ32K%;s#Tu(^)tx*uTrM?l`1A*;<%U{xOd6M})5&R${=A1? zo!|y(&UK#oO^QR6@pjm&r`v)29NB_}B0v*V*qtLSxtux!Hr4K!ylBJcHBOpSIF<(7 z(rOi&xJUX_SD=7b%cSFNQ5vm58XJAhZUV)D)&hwopB#V&bE$4S$rcT=z{c(jP%F?N zE)Y*?r`nWICdDZns;X>}5WQ^qQ-QKUX&pe5S|?qTetN1s;MYxIFPBXfI^}au{{JE7 z)p98;bGC`Q9TV7T8m^bXPQ4Yj*Rc>3qA%9zaVy!FEC{>`Iv!P}Z{)Bz#hN z+o_AiKPT-BNSeJR^p={S*Fup~8#jmkZ?bjrys&I?+46JiKdatpZ3z(Cc2f1;wHY<5 z)to$Eh)w@-{k*FX$d)-W-Yr7Y@8;_7f6peokY#@kix9E7phbx4X$F`au_Z4=Dn(%t ys}!p<7qXz31x>zKm0~1quuh_tqB+y!JDYIE?wyYrGn0Wu7lWs(pUXO@geCyO>22Ns literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_10.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_10.png new file mode 100644 index 0000000000000000000000000000000000000000..8548e485ea2d4c7840c8c21a741613e2356057d3 GIT binary patch literal 1487 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Vt*T){L8$ridm?$0W8xY9yei^gXc2PIU_>JXycia;pb?m=T7)oF zfi)4W6wO*F7ptk*l%ly1#wAuMHfI9GV8$Sa05+vqow<+&L+Qf{+@F8F;chX?_-y;v z>gSv@Y4*ZGaEqmT+ovxw^Uk?wv<7Lk z8olKyI~xjO=I^nvvRSSt{rSjaj;GI$djjR2S}kui`n+d%d(o@eJPSom8BOe|$XWR1 z_KW~N{?u*HCqI23?W8#ch&1Q>Z~G67(uE>k3w4A~X&ny(nb_TK^xNIcs&)z3s_xcJ zr_yg*8()0*vnf+z$4zb0&s#Bh6O;L9G z`D-swJqZ2V=m)Y9gic+se8-h~y@LZRVP|zr_?@=$6sMU*bIZ*O+fL8$<$5|rx)A7$ zZ5*k~UfcR{Jl$d~1~H}X&$_?+(|t;(+j+L#D!|iZ%S#g@a;XHs5Y<4dWw5T2t;e zDS;xYH(65fRG*_DFq&jfy*gg^okwYX!Mj6yfmS%}G?}tGU9eEQKK0CZ^!A~;8@(^IsNR<<=qoXI2u7AeQS;P`!36ub{0UT zPL?T`-^I*M)|(PgB-|Xp#G%>%Cm5VK6{esQ$O>ReF;#(e5~~zu44Qgureafy?n0=m tiB^hcEtHGZRBTGIITI*`P3ebc(rfrwWS8qO=K~9B22WQ%mvv4FO#m;y>j3}& literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_11.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_11.png new file mode 100644 index 0000000000000000000000000000000000000000..de9420ee68de84cd0285066b6a044ad507d83326 GIT binary patch literal 1167 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QH#r;B4q#jUq@cM3H*2sj-4 z`+xqmI}EPhW-Q))>Wo%OiJXf?97Bwh8-v0W1}9E5q9K5ZLlup{R0Y(8p$e>tXr*Y@ z!noK>g~=hi70rb(F0o3nI@5_0W(=|`uqs7XfY5}Y)N{7{u^r!;7P?5xZoBNtv@oSg zVYAy2SH^`Y)e6Q(j@&hN@|@w}*4q`JG{vUx@TvzKs!pD-9Nt;@Et~o0Q(em>wS{*o z&vY2CEU@EH?N+LMbmQu?jsT@e?(gok2rXO^s$y^757Zj*Mt}ZE8$qu-zPmmsOo_-c zHVs~QBq(_q$I{kgF@j#)xeL#VE*YY9?hZytDU)Q)fWZMxY5tVwdjVP~DfdQA8YQ zq@|=ckkk}BJ@vHS6b{u?C(G)WwrRWzmz3!I=XALCJn&q_wzRL$3zVibSyml)0@~qp z^pebg~=fsjqXCItBF>MY!*TjR#UMl#pX<)7`oD;3yqbrznM9f8puhV z^HYqkJ+pkDhE<@zsSghC%olU5cPJq+P z2(G08%lvxQoK&0Qq&daOvT7mc(_cs5L_9kizEDQ))T#NBAO8cDxXIt1S{$We9-pCI zw=LjVycE~dNd13KmKKxz<92R#s=T$N&b$s}z)h7&7rEcQWcQsbwk!as(M%>}VNdPC z)is79UJFaiDsSxbz470Fd%Q+#kOuFIr2%ETp8IO7)m~__VBx|yWyv3=)~>h}zfi=h zxiUe+`v0>dSN{rlWqWJzK3lu_c;5Vy`?aSXHP-4blrfo6e(1)>X$wLh>rHXWG>~T5 zbo!APSY=9uhPCcH_30OGPQMRy5!XVJ9Y~Gd26=VaI1aLi__IR7p z6ybg0ZW^scE*j-?uPkpbIwf8Rl-tJl^xR~t#}=vo=KDWy`l<>F&f7haWg6@Mq=kIH zFC^^6yz}n2lB$CDtJd@N@jZR19|lyh7#MU*au@z|FOpz1! z?}ZDWnsFmEep__3)6F^u!R5@@9Rh>J+vu7E>a-cVGU&0rJh!9VMKp z-yXd)F`L+5APkJ3uu2aNZL#w0g^{9O`wwYMIj1Ea^9kf}p#Qp-9$)j;SkAw`?8w!I z)g}u?ycgc7TNv6_bgBF__tS=mcmFb9PY$R$*mb*Yx4*^r2XPB?gioz%H{?kDA5g~E z8PJt_()XcL<-5IW%lC0Ddb}&*r%u?y92-NUd7EG4Y^sa?_se`ayCX1MS4X(z?cRLy z*V~_O6P0D16s9=sJgRc?M%uy{@l%@jo0Wk+wTs-e{c39YUo+p|4Zx@{s`11u201v2Ez+Pjh0^B1~kyzFWW_;r>;Rq3YWsSZX#pk?m_I8=eg za&-We^{l-Rc@3njwMc^rD3~c$GcRIOHyI{)KXt3Z3prGa?^|nvTE`V5I*DVcrx9@>^ z+cEjKf?j>Qwy3kY0F|!eoD4LNV=~CHq__J%TXU*9aVkt{nLsgOm16ag6DKxPu`1momvTA8wj^~~39!gv@O1Ta JS?83{1OT_KJ~{vZ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_14.png new file mode 100644 index 0000000000000000000000000000000000000000..b86c8002c559c00aa3b30a69836b710d9acfe6e6 GIT binary patch literal 1578 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V7*Am9-A z_rJfoZk(#8TS8*U}bRPRG5NJaHuu}Frg8cs+>46 zRe?1Ts}$W@s8g_+id89^3!z-1m11)yPz;-?*py;(CQuBE(#+PHy8kOb+*-Z%@^X9O z>#1$Is#7>p7Y3}mqjz`lgs=Ql0?ckzwiv~0EWTfTTq9)0N$#ZqT&W8qxPa8sfNgxK zN2~P<4&D=c}5FR*QTF|-(N=FzI%OAVLMo#qxGSa0bzEMaUc`f zvI)3T09dKR4zG&9lq;LDpA%|WIJp94xqw|_dj=HgVa4KtGx-tO9aeRArKYqxz3 zfkt0`!=TPq_w?Y~caA_8G^b6rPMa#Ye)T1*a(kfrycX8jI<#I|tN>JbI`7Zi`*qw) z+q*fJ227jf`))=kSL)jIXC=KIz`%N;sp2$Kdy2K);yE8;B!R9FT==FgxM%9YKhJ8e zzT_=&r=9f&*6z9X``pyP*h5NF4m<7q zz32D~eNm$`Iod$CPcIGMzx$EAHqg*5?RBf2Umn~0dRpn%f}O97tAS$2jeEJ4ue7Pu z4`#n}>hgY|OI?jVW@?q+KmLVLeB+)I|Fx$8t(jjuzwzIfKZOf>c%PoTxdIftdR$Mg zKF@NJ6h5`$DKNmhQWA9T?${o$vAb7(p^VTeulc<@3)h3=VWw|d+%oC!pyZJHyLXS$ z6l=Ef>A8Y`1y5Y@018gyc>4c8C|bN0<`mx8n|0HvGVShryYIk=E4srbcB*pW8wrtx zIWnhs!q>R)M=-zp`KxbN^@S}Uy4=SpeW1LS-8g9Vtt<3B}EocvazfwD6_Q^1lqng***4> z#+2v!&2tR=T8d8e2svmlwjdD<3t0rb&(pNYtOFQ4UHx3vIVCg!0CV6f1poj5 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_15.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_15.png new file mode 100644 index 0000000000000000000000000000000000000000..b6900ea0fd35dfff5b5e034fedb20a00dd8f5759 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QHxr;B4q#jUq@qxlXQ@VFj) zQ-65_vs}tg)G|gn)QJDX%2=KAqNdcG(y0OVId0|fvKuR2vZeU6VXc1 ztc7y1nu<*+nhRlEVwGZZCQuA!3~~ryQ;OA@3t6xzope(E+p0>{^V|zvG?W*;^k!O^ zlC6=?*|9mZWzyq?Z{!4l;+cY{&M69dwM^RoC_r{jv~#4bb<3m)0so}to!e{yVb^sp zy{R}Q;@iWGB3?iptw9=sUS)c_1C*vjlr01cxw-;{fXw49K*2uFg-c#;`h8V;;gL=4 zY_1xuLJLdGG^cQ=UOjF1m(SV>$V~NA0E(uZ*;H);(jmjKbaP>g(84b+Za_m?f=qyt zB3?k-S|-Jwo+sb~65RBs=js~)FP+~XR&Xo@>WRMh{MiOD>yQ%AY^RqM0$x&jznAO) zi#>vfMF;>*13C>tTmtH!G_CfQ>vNDBmIiRCI-NY1`d!?uMd-BN6p+}{&y6MD6&{csoVWY$i54LT4MsEqQ`JHiOjTe_#41I% z7U~pireal!=0Yf!Xrn9=Ofl(va_0H+vo)uBI8?ip zc0P*LEDpb=>g0Jb`s(HH@8Iv+Sbq1- z8;ONSa@{oqy<`%q-82dt-byY!@^EYRZZR*JxHnN6g%y%p(}A28p=yxG9W_C(g+Qly zvEO(o>e(W+Py|G*5%shNDcSA`lJjf{()g%u?$jC3rGi03AjEFXysJ3HsnbJgO2<+l z!2u%9^fD-Q1_)KG_USsm-GfWjNps3+=LsV66J0bqyHkT2T!a>?=uPt!6!L7DwBLE- zqgbHoAgd|LO%o-Qfof(7owjC_{JZC_asMx1z;LHME#Lr#L}x?E?;ru7!wtNTIsqO3 zsOiyt9-z@2%QY0HFmR|g1TbL`3{IRtIWz)86;LOpDzGMEm146ShpE_R#UMl#qRkq288&8*Ss^s+qfH4R<8vXI}Dz#elF{r5}E+=txZG# literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_17.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_17.png new file mode 100644 index 0000000000000000000000000000000000000000..214580bcdb92cacbb2b79e64d2c753c5ac55bf8b GIT binary patch literal 1596 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Ohgr;B4q#jUq@Z~I9bia1>S z`G0=fa<3IkR$sryT$@y}BIMA6jpcJD_{`&HsQW6x#ITS>zzdyd5pvLAL?bX&Eo8w| z1=d8YQgmyfPQhj>R;6ezgmQ^iip`loF>Iz{Q;N-*KrwWsr_`E1?fKvI?zMx4Z->dn z9;?jo-nE9?*jhH7P}*mixU1#Uvxx9+$E82@r+A95cde;gQ~v+oRHcB-cigFst<_nF zIG+A96hF0ZV~tDE9~Spn22MNc?^w4L9evA@y0LTP=Wne=XDjaXq)rb=oAckPQejfy z;Scurud7bkUFPOAGkY#)>WAuc7w2nFsXqSCMQ3%}rbAW2r;ez3hy{XUW_ow;N~I*VRp_+kL8R;hB>6x>Giatq%BhH`H#fU(hyT)8C(Z z-f^d0k1rGSQrGm<*u1CCSEDsZWA2j23(tJ(>(I!5E8>+MpwT^Vf&KBhKXsD>oh^%a zoHVES1uVMns_|Z?Ie=@a@D!5?7sWRQbS(+sdOFo1E$RqRL0rK*7FpiZW3Do94;?c; zt~kZEe6myIiyuJ4f#`Od(QhR&uZblyO}mRuf2{wz9cYdR*V2H0kG~6gEj%ORxlqJw zp~$Il`}2808oD5+oAv6xi6W;CEi4J_*}O34=gAhkbzvHt+b&&gKG(MCwfl~;+qT?G zfi5_*?(bXcWnO!iZFn5a<22KH$~t#Rg2Tg91x)KJn#9Fybu+j z^VOMue*bPE|NeNsto&lo@~OHO^ht zfYtMapz3;wiu|ocQ@r7Fow!fLzQ$C0F z=jGh+sw1d73oK@I_IO0ha~Aq$35#T>_L_nHHQHoRy`aN}4SAZGVW zd4^M`08ejorNWdL&eY`&GgzHYUJWSgII`caIf6^o*}2kakF0Z~p>)fn2?1fTsq4=y ztCHhTZCv=~&#%a@+c}p8C{0P$TP0oWpdskBe*QYIg)SPche9={M1*Y=@oEXuXbl2N z%!>+JDB`v7$fjLdK>o%xO%ID7-%pEVJ*?Urz_m1BmztoLluk~NMa*QUPLKeXs*~mv zB`~u~1t_#n#1p6=Xj&{pfd^PY+)hC+pzuT&pbaR*N#3O%N>eye9W-1)wl5U%1Zw>& z(gGAT;f6?k&JI$6>E0=OYUMl*5WvKtibkMmgm5ubfi)4W6r0^ZF>Iz{Q;Oz77?)V3Se;3s=T&|)-TrZV=Itvo RF~9-Z@MR3t0rb(1{iy2MtCv0#nsO7ED!O zO~fiiw-)LYY^GvWisnKnmuRKfoCy@eW-2zN*qjLz!%&*wBNI3Oui&Xf=6khCDYpNv zKHi)yW8I$k>z2SN?dOYxy%xTyxz~EBMZ?;&B}gOIh9mW7tHu#Xnp-QF6c5kBYh-PaBp?d_kQ z+!k0Ua%%Z=o6l2M1(?NkOx#!_bSg)llOy#__Ds8ZPBRl8EJ~_WpAu$P8| zo3?EF)*|S&aLconO@9`=?R$DT+CoQbp@`Q)8QD`=+jTjYnyOD}X4kcv5}My4?v?GQ z(OPtSZ}$Bo7vDNMW%{%ly7KoPL*%6r`#0Z6>u&h-$`>y;_(kpRt0Lb zUaH_q{nZ#A!%mKdh=C^QZS# zm$!X-clO`Z#YU!+oNhjlcvqK}R&!0}`IG>^z9j)>Tuc9IJnlEv+N7j8#c5}ykbUKD zjVbl==})e%@Zfsd(Yhmf(cPU@BBxA`Oa9#!tI}FjqOq7sbIMPU^D`Cm_RQK+xIUn3 zNdVW=W7n0yo|>7b=vHecx$#14(cStdA-zDk)S36sOg4Kb>NQd1)G=f{{R60lgOsfY=!p=dow! z7Aws8take}XX;x|#VOC7BMrHLK0U7P`X$@g?&HEWa?HRaqCEN06Ciiv!Z{l_*8^R! z`k>gU;)NyWT7|IYBJ4RHt5R&as0F*J*py=ABCsXP8L(wKqV30SDAhAO&^<&rv*A=7 Z!;$h8e$3)u)&UD|22WQ%mvv4FO#rk@_k#cc literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f437ec2a86af1ac8c54acd31a9c21a358585f096 GIT binary patch literal 1617 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T3cr;B4q#jUq@&5Is8h&VXj z`+q5Dl|$R18Si(k7RlMb#QNEQAu&##;m@m7F$NCRh5#lsLSYJn6DJyhsft4tQx#Yf z(Mr**g>tc)icKk+3t?Phm11)yPz+`aatL5kiq)A;oR~^;lRy0W?XID@cT&pVp7%L5 z{&i~SPWznp&}a?P;BNW!q-ds4^BZfOg*tmKais1Gc=zwNy32x7FXBM*laFnxW>__s zOVDef$f*|T+~>XjU;ddb=e_XHi;dsch@I-_t*z21KeKt|Mv+rT7XCTEMXmMI7dLC& zDL1FB4luKdSDs>Nrm?VRrvGKPsZKwSGp(08rKA0(_h-2lliOsF(6dA9#7^aCuL(G3 z^H*`oVLo>ye!~`{G%F{~DNa8V6w~=qzZJVW&8#<2nBsKPY)YtJve2oW%k5f)MSD?>+tQ>$d-!;?KA97k()+1PTW&J}JG}YvG!&=VZix zb1%J^@}Wy{iskvhU9}-VrJfqQ?L{7^7=*`fnyM-UH27irsqOnhB7WKkyP0lxiu_m> z1T^EyVyT6D_A}1ibG`a$={lgQWcSJ2-KNUjk>0FR$DO)#?$iLT)L+i~FE9M^;9l|N zU+t1p%4d{AuETXC)e}91A zjQ>tI4W>*z*IQYzK7ea!KwFQRvHxYDj!n0=87NMA>@>4>*JQanvn{!H?>jMb15Znk z#$l(QU+)9m1Vp-gyZwEmHIkqGeVeVnTCZJmqKxRNuFK-5q!zBJdHDa_=>;v9GK_MX zw?3}2+h1;LyP`_P|Lu|GEa09UNs0u~{6Lmx)!1&2FF= o)k^~sd_;m$Y|cdUyo2lf?_rYXZ33tI0;>uJPgg&ebxsLQ0BA%*DgXcg literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_20.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_20.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf200d3970609ebb20696543ffe7b38b95e7094 GIT binary patch literal 1112 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Se^r;B4q#jUq@9kY%&@VH#u z_kZbIX$fhasMsq0H0grIe-^V-Vi|0r)EET37#6ai5e^!REkbAnrYfK&3{_xFL@PzJ z7RJS9DohU9t!OTUafwxm)tL)fV8$T30;^JF1qe+TN?RTzN4&S=P)!Q>$PZDgXb-v`o4X;Pv-1{Md zUM)qhi*Ji8JQ8Sr`^q|?cvASnBaX@8EtedvGj=OYu|OkU-0*#?HHAafOw>!p^q!ia zSNq!)twIZ*+)n(RyiKVyKxqn?kTrAB5cFCo;t6z6Ymf?%S@NXrsT)viB1i%!@%skn zLJ=lL0nZj8pk@>zM+$6MQHg+y5YSXt4C2X+1eJf@9i8WUfUW@g1dU+gP-Sr9RG5NE zGz0+U&z?z6wip_2ureafy=0X^kSfyB<>BI>$2H9^|l_D!ZXhKpNdso5# W+?KN~PY(b~31-{a z$g+8tc?7+5DmO~bS`5@VV{t&zK|}WzA@00B4pp%`GC;WxAq_vL9Z5U#HS4bzqol?gcgc;VGs@)j4eVy zLcoh*AqyG-lLIS&5}2yMnuu14Y!*TjR#UMlMROsHORQ3ajVLUbF~}i+qJVtQ|G3VZ Y8vb*7#?K}bU}3@F>FVdQ&MBb@0PHRo5C8xG literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_22.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_22.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ea0c7cf9c5b473a57804504f5c4f9a28d7cae4 GIT binary patch literal 1516 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V=3PZ!6Kid%2*o-Dd;AmHHm z@4x@;@ad;!dn6cmmrv!lQ(4AvZu1n6Ctn#4tk?5qP?*Bt#EC{U1Tb-^q7j&?fSNE= zfi)4W6wO)~7n`XtIb^q@xe&%BRw-6zI&s2`L3RaJrN{~pnlP0*sz3XBPyA!H{*<=- zli^R2H<|ywwy#)1Ywl|&%_+(4I}XW}bUS`6j?-u@IwKH%tJ_cTMbSO(r4MuLk6iry zp~Sx>NT)SOuN<$J{%*=c6w{@v}H z9^K|Yk(+Y<(-?(L{e9jZz?J$dAg#vc=Dbvnr)&NK zb?eBU$~wQI<4{d=u#cMEte6gic&aLuQGTm6`orvRPm>J<4_SP;l?$`p2X ziu|gae7DV21L(B%R>wht$6AX1sNLgS3^c#>bGSyUkZOVa0ZQz|sHc{g(R zcPs(Q?s_Z)G~8>U%_kxAUshAJ*B#XWnm@_OQfW&3esQ3bC(vs9zF>{kO}}h7mj-Y> zJs9Bj{^HzvW4S`^@b6~?K~DR>?&FEwLc6#h?+Hk=Ik($+&O@WL$xfCZ&$Z-*Yfnja zp82w>U)ag=tJpeWWuWUcr?oDiORd$n*MEE$5cW$|4QR94l$-I7 zO8KAO zPmyoJ{?tqadWMJV$?N$W&;54Z`RaK$$d>^M#_dLzqtdyTdH^Ft&cYHHQm#Q7?(Ie2 z1?EdxL42utT-5N0@U`D58oOPBfI$|jvA^!V<&=rXwWla)PVsg6dAG2PBegAJ9v9dY zuGE-HcjSOERpg`L&;NSWZO(A(`7IzdI@|eQmy0XDtlG#8iVqp99oGF9tAOc+EA=Mh zy~>bLlsjMSQF7o z(X54Xv6_laDVhsmTw;}Cb0$y>W(;x&U{i|KnNFM-N{ycN7S5^miM4m?G>EJ7iLrL- zblBE){D`UYlonPaOS#L}x&wj~CS@|t{PD0MV3VfM?nA+;Y})_$oIDRZ*nPA)x%tM% zw3bO~3u``E3a1Aa?&DBBsJ>$R;w_(M?K&g5aLK`EzT8hQe|FOlJQ;jF`5A}m$JyIn zXP&zw=rt#&MQGuXG}G!9q1jj82zup&oQc=i7-(3(@Q7RL@i%AVH3YrR!~sPLXNhwd7p4?w{GHcxc}alM6erC|97_YZmae}8raY9Ua4ZE9EbW^< zeeFI~>oaq`@1QOeQn@hDZyYoUl|OOQrukcyyJ3y65dwkj#ZMQEW2SY}eabex8( z&_WfBpwLCeFZ*O|JjrKoI+kK#SR8QPpFuQUAET{@M76~)qXm+s?*7D6&AkS zO9PbVDB*})V1!eaWTY4|A|05cu%-`UEuz>>R8Pjl_{d?Keu}DQlx^?AUBI%4!PC{x JWt~$(698S+Q_BDV literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_24.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_24.png new file mode 100644 index 0000000000000000000000000000000000000000..52791037fa161074bcd2c2c74fa6b917ce7c8424 GIT binary patch literal 1619 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T3sr;B4q#jUq@9rGR=@Hkw& z^Z(M@ZQa{Cb0@cX~|BJTQ9T}{k_;<`!i>LTF=A)v&fvO|I?4`*Ph}ex!2!6 zCfRA{$KB8Qgo{o+y7%%{#Pxu($ZV&Z2@lFRpJobwyZeJP^`FeGr#@a9v)zrV7TW%G z4Q@A#*{D&=o&7HG>4|`O|NQJ!r_9&camrP5N^!qd{AIRPr`=Q4_WbkT9pQQmU?hKZ3y`HXLA6Exiny3W$$FCou_34PQ9Ke za_Zp1n7=v``xf@x37`4<@2jm3ITOF0ky$8m%K3P%tA@JW=Uc%Nt(#Ic%I6+f-d^-% zGNYHWf1jCHq2%IMm)yUwKXe5ev`Jyg z^8ZYUp(=~*=0}P~P89K4=)-enZm`S3KRMOf{ca#NMw%1$$A$}^nsFm^{|YUfG6yZ10grFE09#_GId3RC_%Yff^qRGKzZo=f~xvHk6; z=YayT*AAVUJ(1(-22Y{N`L6Dhzux|I{l29k7toQn{idAAEjNkWZ@d3)&XU(>^?=r& zR`)q(#{G0xfZq0Sxr#VoMrZ8v59p=%Z2)*PGqGnO_z~%nN Yg)`z#+z>nltSlHjUHx3vIVCg!0NM&O7ytkO literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_25.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_25.png new file mode 100644 index 0000000000000000000000000000000000000000..7633ff5c315fcfca13ab7bc47239b9551ffdcb45 GIT binary patch literal 1208 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QIFr;B4q#jUq@yt@t?2sk+2 z|9|PE6-!f2lvn*Kh1&8ra3mSo`sznG>6<8C| zO3|!^a$+i=8zjMZ6q0gepzZ;oGfnL#tJ&d7r_HCWR?ZosQyOK%*+l z-j@9p^ICXh!hMONzydX=PR4qPQzsJ(iR9I8$)d3>h^BnfYFwPas-L@i~q z5YQzm-&>2kR9u2I44*hXyesInut(xk=f)4VK$CMXr9GW1=(VW5CddS+04P`T)J@~2 z;S1qMij#hra;M&!uRV!F_38GL@1mD_C{1yaw0d(lNof+t(g3;N9V$+p9%kKOam^`8 zodHT9B1mVFsFN~Sh3vnqje?#)2V8D3N-l8`TKFWNafQIVb^mX*K-6A(%r(c-0jOzG z+UnC1iW6NlJhxs zH4&{8%~}{2o2f84WVfQZ5XL1|DOP7LWPurj>&iy6mmu6erCotWGKKq?RxSzgzt2*WV^{ahAZBCUn=|55;Cp+z|zEH-WdhM&; z6yE!X1yB75csIkalrQz!%vAwm_NFVPPU%>`>HNC=^_NYj|HW3`=1QF?>Ay7~?RH{o z(K{7q4ffm@C+0e8Bu`VGk~Y<;GFdsDFZJ8vT>($l4!(k462OnczQ^XF9a?Yqq_K!fw{2!D61 z`Ls)GZSnWTBA&pIIL;iRVaw&D(z@wQ=7W>|`&%y^KDsK$dtr$RkL4<^)PL#Eda6!L zOMf=QH*HQRSL(U%8t!&{2ZJSAHzjNAzAuuTZm>RPz17RaXu0s$TdcndUi+(&y#4Lv znHxR0p1!#GjZK^5&McS_hv|c=UVE)m3o42Lgmc7JK9r}G^gaUKVS9KZ&zXdGv+6&_=~jm>$V0g z<9~X-o_lFP*OGv37H{uu%~{wJ`F;8Ny}+Q8F`j*AW6i=ff~QW2|LcBoARz4qXBdA3 z`?_?-ici+ALcp-SwD3;l#s8C^@9AC=VD;ASkCj#XrbFh7wb+fS{&Fw9`DEjDr74EY zU)SFcG~@!teUqS{lHWI;-)fCIeXNO=x_k$f+Oe9i#p`aW(`n zaj2pZ3{IR1Q_u+vRbWl%s=zw2DaAC9B&BFBgmR-;DY75Cp-kAEicKk2yD>u4!Tf&z Xhx3w=-zHcBYXJsNS3j3^P6y8^3HWCaLK7)o0jx|9BvDNJEue{lcsoF93d zs!o92C9R!a9v1Uj z=%OJAA&Pqfl%_nBSeWv|bw${(k`@+B7Vv5b(zv4{;I+`^!@*AZDO%<4nO(~{zopr0IQQkHUIzs literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_28.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_28.png new file mode 100644 index 0000000000000000000000000000000000000000..80cac406437cd7116d315aae8637fb1adf897cb1 GIT binary patch literal 1192 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QIGr;B4q#jUq@y^ES1cpMzx z)o0c)H*ajaxP14i+Xq%GO4s5pn!`|2D#6$gz{H`7Mld*WDojBqFjN6GVX6Y_BvvV! zwJT05uBAbQKgw<4RO0hW;D2Ac*ah+q|Z~5mg8iL2v3_GnBXK<-9 z-PBVPKGzWtq$77T$>?DZhia?xOhuL8eF6erW-iIc&)+V5cA{8m3QxzAcM5w8-}R-t zXn1}K`TBlq*}T7JE0w00bf-*J-|1ECsv&st_;vH>7NPE%Lix#QJpoCb@^`x>m8Vq9 zGD$ZU^U^VRrZXiX;f&Yt6&N;`SDt4ns&`YP_yyWc70ZLPzy*lgY z)EO{q`t)x~Q=B|2Gz7g`f;7$s1L@D7LOKJYYEJL5nUbb6g+q0D1edClXNCz-#U$y2 zKyP^+2?7#lWEO7OF~i&`vru>4OywyNQO52X8@HtO1tb-om0oz{(JXT(&z(oN?g82| zsibnZyR$~CkpEQ0?~0Q+RFf(TYZn4dI^F$xmadcM&DOrSSDN+GqMi#=A~cl6Y#vuj zg~#0Iu4xt8_$Tw`=Krf(R{Z{`uh=4VFy`OPqOcaBjXL7|6M zXTT;?o#1^k0$vO)LJk^?XarDrAqysfrV7l(RJD)=(?F7xVznE)saTa_b7qSW(MqxT nNWe>(0h>5BpQ2c#@sPQ4-Q>S%Q@1GrOCSbMS3j3^P6^2VkXyyWqhu3^NvRykiFv=JhMMHviHezafbU zw6TBYWNALF-(#JB-m;@gQ=T8MjnXJTw?4qE>&aVJbImCeABvtje{9pIU*e}!-p?^V z^kK5Sx#|@2^BGocMn&s6Q!jd?)o&L&WiwyGs%_J+Iozp}%eT*7cxIEq;^X#@K5>0M zrzJmGv{)u^;hAk3#&gcT-)DDf&*oFdU5?6h2i*I4TzBD?|1Fz-uKcfleD>e1X*<7c zd_8Mp0M}AaEs;}N`**8NanhWkrfD!y4L+lMh4>*fC6|F1vADbjGt+hfie z#rx$Jik$LVm}4ymbdS@{`X2RveEH8axRwTRJzZw_PJ}OBPi=~_)60bt8yCt{FME3W zXv?M~4O?3cvnlHyf3;aG<^|O6yYSCR+2G)$pZgQImiktzPMPOEQ+bN${Ub+$G;X(F zYOa3YR`j)vVWWuG^vbz~0abFT=K|bZuhofo32&~L`}}pb z@TnUCZu5F?^*d!I#j$;QJ>O7%e*e=~=WmtDfPzh3V}g_9_wVm{o{BhS79Db~%n~l2 z+wBt{t_}2MCN$#8J_a|pz%>2`n1K$;>RlfH1)|h?d)7!}AfPMVY*VZdW{M71r zC*Ql=W<$lD>pR15t#O+9x;pCL*Ui>{&*d%sDR9cITjh1Biu9*gjn(dsDy>FGlWvyQ z9J4s@_C|!cQRGy1_p>8~lDBPUuYWpok^@)jkw=X$)%lc<9ofVn;Ki_z1&wgfU~CaW zBQR9~HDRa%Ya&`Hnzb-4HdA48$Zkb*A&g6`QmoEg$O1D4*%eroA}c^>LQ%Tnh55;# W-09~ppL7RS4-B5JelF{r5}E)lEjWe% literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_3.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2f220e831f76971bd82d416ea1d3f718e88692d6 GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|U!+PZ!6Kid%2*M&}(?5OHvP zUw`=|-y;cwJI8yb+!tH?W5yz`czK4pT|SHr0ZbgKXas{3r@|C;0z(y06Q(M#PGXg! zSqtN0GZiL>Y&5zHp{^!cDY97zO;}CErWBhqfnpd+O?Dct`_1pFvTZB0T(DEt8TLo)PG|m@VMFa7mspl61jhGa$@XfZb3R8e$(=0B=0L?k{_oeO>C!n6Cwq8I>cC{3_H?#(6 zv`)IV@Q?Zopaf810!uG<)3Q>IrXN}l*P$k{GS00 z_dCAmSLbsjpo^Y{C~R*1bh5&Dzca_e6s3&0aaLwl@80M~Icso=o$CAC1a#EXB*jS_ zs?p9jE9-!c*yO6fBDAoj^`MIeqktE~LKaM-MaV&e5sko9wU7l<6<8CoO0n9#(1ewu y6p2XKC@gG=7exUy8Dq8EiIZrh$hpBGBfk0asy%77Z$p746@#a%pUXO@geCy4@msI} literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_30.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_30.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f19767e000d85b45bd691d30f887028254643e GIT binary patch literal 1203 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QHyr;B4q#jUq@qw|;y1za89 z*I(YiY!dO<{rlQUKaS7+a!`Y-ho8ZoSD8V;i(w%P8sVV9*dl~RV5$OY!cYa)M6^;g zYhhe$ro!Zq-HPTy7?)V3Se?0$1!fGgE3hg>R)Elip|oYfQHk^N9IA?^=gF`bJ885Q zy*ymQ609NEbga-oxMkAYg=@svKRakxik;GGta$vhduhNWlPT7RqciQ6FYXSwq%h@f zUaZGRr^OTwkfBVPQ#h6e>1{_>4Z%}40{#j6 zwg@fk;eR?gK?$U=YiR&b<;y!xovxzX>Fye>K{|8f7rJQt1kwKO0pP@P$G6434=ZJR!& z8_wGmsXWDmKXtkPce}5L8Uun}yuIJ&ekeLQo>LL%{M+w4424^S40mLhai~5tG>~o- z@oL%h^AWd-6Q}f}&HyHkrGg9`strH}Dxoli!HE-%z*NPdim3{$iD;#0)FVdQ&MBb@0D2ow A#sB~S literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_31.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_31.png new file mode 100644 index 0000000000000000000000000000000000000000..98481b537a7f0244f45110ee5ac049f97a4af666 GIT binary patch literal 1522 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V<$PZ!6Kid%2*p3YnBAm9-A z|G&TWYL7s%&c=7Is^%!4O%j`&Fl!fc-Gl4W4fcEAFflA-5%5AMT7(=l7|{q!RSQ`# zRe?1Ts}$W@s8g_+id89^3!z-1m11)yPz;-?*py;(CQuAR>4I93xcUDDPc?Sm`+4BR zuD`3Vr(d@!<88hvaB732h}S|B@x9HOQ=IvP7K(VO3phpA3A6@jSidV@SmH3nDxf7u zWBr@&Q?u2lwDNbHI4E{%$Jd$L{)fH&e)*#4sb|dD^M%?2}z4qL%_0k#6rw3exy?|CO+>*hW z^z-ETm7lWq1kAErD01pUKv?zdNg%e&o{WnN*Zgv;SZGr0q&X#e+r!`KB|kEjg5~yQ zSUcZ*YW%_}^B&NV{k1(tzZYjil(EjZ2@n0);yb%LB`;_j&HzIuTdTLXgDj(nXib5E28Ff7GeKb=~>&~5LFhpQD@HYI7??Jug=(Ei7+It^%MzWKYmlBag(e-rm! zxFvyo+rxLoY1h)vmVsQq!D(TM{iz>sd%D)#1cud}A2Ao+-&daUdYkd5oGWiQpLQI* zRajR3{7s<7^_=uCsk?6qpSrlPhigf|Gw!D%PMI6~=J@U^TpuvY7Uv3zgnqAuUPAA6eXh@EO`6gg$HaE(M;-)4m=d|V5C#7?~m6!2VVQxq_# zCg+;E*%a9%g$YhO|1LQ3?Z%q(GXrMzCdSYE#HkTOb*$tXfA|tiB*c#nG0E9#vr=_t5ReI2u&DDTNbq&T#M&WZQAfOw3N9;XrYei z6uo>F4ppbhubY*pa4ZezS{k4T|ou$EJ2KvM9+ zBY}^DRh?e0klhk1=p}=j@XghlVv&^tBHnZcJlgPi+m_`(!@qq#>*&Q2+d@yoo@gP91%Ij$=sxm#XW3*EN48 z3k23rpWh3RB3;&=rT+<%{nuyA`|123UqL Nc)I$ztaD0e0syMXERg^J literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_33.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_33.png new file mode 100644 index 0000000000000000000000000000000000000000..847dbded1f173f77939d7c152fb94a1d50fb9544 GIT binary patch literal 1127 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Semr;B4q#jUq@FZLcb;Bj&M zdVkB^M#TeSx`pWtA`f_f=zX8u!`5QAsUbkk=JoxHt{Q@;bmwpV6s!f*kmS7Z$i&CN zszBx~!G%W}Z{s8`v^jMuA8+GWs$Bl$o3lpYi_+US{WS!=s((IHSa{^2dfm*m`fovI zAGKBh+03Qlq&dauCD`a`ZyN%HguL#tiY|1~*m)!fsLhU34QQv*G>{v-TP{hz-;vuH z@My)+SKVPs4Eo^D3P@;aE0MiJz=);2RoG uH5HpujHCn6Nvu+AKEjqD(LFEol&w literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_34.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_34.png new file mode 100644 index 0000000000000000000000000000000000000000..e778506dcebd2b5f6c975b8d1cb22da7a007bcbd GIT binary patch literal 1520 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V=JPZ!6Kid%2*p7nceAkc7e z&wuafxuF6icKjtX9C4Alrs69dc9l!(e+r3xh&rM zl;kJhd=ve9UE+$eb=*q>`tBYPO}n7WcJ+MaLXlI3vv*w5X$dlD4br%M{^3iXmLMG< z^YXcb>oKjLe*W_5dHN%utimUjN%CWHOVQu;sx3hp{W8zD1f*+M@Wt!6N8gC7OHW@8kvuT@?<`kz$n<+QvKP#z{ zQkw$g9(9U*x;1;QSx*4h(f~2e)UDz_fDEpsift{MUfn*rD_3lxh}XhBuVj`31^=o} zdCXp^-UHP4OmB)Z+s`Mf0ySDModLRGebnq5z3whS8m&fm3ptktq}7UDd1om7?&j}+ zbvwit2XLh>v%OT5+hXLdaeu$K*TOYB+@sd_20Yufc_&bAtF2K|F3EuDTonHvoB5!(*UDev588czwFxb=F=r4M=k<~{$sqt(c4igw+;y=qh1#6?b= zuTP%)y}jt_`RyPTO-wT_r_8)&6|M2sbfL)}--UO!b^=`iM5o(}zN^`Z)-T)wQa4Q| z{D|7T4foWYElnpmWmZJ@zyACC+`=B4xP@EJw`_XJu)D>`S;xQi($ysaQVRm6bw2G3 z@T>I%QNKk+?}jDM^(2`J#|yt7J7-HvO~t=;>S(zQXc*qyxdmF-n^ zd#**lgCBRA>xg+R^pQQ2Bd;Fww#I7bx3%Y@fhmA?e!Q8<4%2Ae^!eD? zPbF8YfQgbTbrtWP&o|b5zaTBNf58v8W3#wb8v>X(;Do{y1}9E50!0B-DW)p0CZd%h zY(!>ZH5FL_%zQK#!nnjLg&BjU9%c-32w+o+)tOG5Se4fQVBFB4_vD=Wnz_J|oWax8 K&t;ucLK6TsLJM&K literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_35.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_35.png new file mode 100644 index 0000000000000000000000000000000000000000..67c009a1437d60844cf1aff39c7b0eb87d2c53cb GIT binary patch literal 1204 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QI7r;B4q#jUq@9E+G7IUFwT z`@i(K^a|snCMJ8rpGF=0kStah%TTj*4TFOQV~Y?P!LX1;zzdzgPzBV4sS2!g~=fsjqXCItBF>MY!*TjR#UMl#pX<)7`oC)hV~M#?2M&8g=L&xlurzn_-0bkKVqVwp6McG4 zo|F9p0?$XL%3GKB1QZph7|*MIv`)~=<T}oHsk8a-Z_}GV+JACc z{(Gm+K38nS>HKS`>x&-^peT`zxVdu0HrBqZ)Z2R z2rb;=9Dl1jfJ^n^LKh7|uZ3HZfpqzw%v*o`ftD;3@j58t)pALF-40uYDI81vqozl2 zsXA#+QQYmQAt`cda(sV;5>Wg*Sb0Y%!t(}T#%GlwkMY_MCVLjKv(Ls ziCjy8cJu+cdQ(cQFWqg|ngTS%B4ne%?tn+ZOCx4T=g*DcYTGI3Wt9A~es61#MrPrj ze7S<72`Oi^CpmdG2e`=>KV2VrdPcZL>!h@eHAOenYvogqo#9YD+bsEahMB!nXM~(M z&qNmuO>tgeKyy4>xKO~OWzt$fLvtrig((aisto~5XarCgEQd^Bssd{wRw<@|V4c`Z z#i|s|g-|ZhO0hW;D2B~cY)Y{?6DWpXse_^X?nmZ6Atm06fTamdKI;Vst09lh- Axc~qF literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_36.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_36.png new file mode 100644 index 0000000000000000000000000000000000000000..e5966a2521dc051079d27fbd5c4e3974ff125e48 GIT binary patch literal 1630 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T3?r;B4q#jUq@9m{ST@HjZ$ z|9|PNS@)JsjR^`3Gr#Y8p|;WGQ}iU!pP$(q{{Onc%HYJQFa@39P;CfcLL)F$IdNjD z0&5~xDY~^#r(iP`t5P%m^R14DKkFpOzlDwPcPp&dcxn^{_0HG+-#{gWx4W9%fgmR`_9C% zJKd})dNZrQNpni9UaC*m(~f|7QUMFk*nirnfBjo_SxM`rle^Qeyzlw36R1S}dEk)< z&eVsk(?0HQEs9t1-}7-|af8AXU*(_cuTPXbl_mUb`A1=|Y(I_Jyb);{tNpIcKjyC? z8_Jb>_@L0K8|J$v=eGfk=~L^@z1{Nm|J&E%UJFIMn7?XFnfoqN*z2{w25(4)#_qd6 zey2$L<*pClTI#4Jaq3*X+qV+ymP=A1Ud>xdzT9{_`Q24-KBvsToKKfDMsXw`k8av@ zELNlSl7lHn%JieUQ?AVmkXrE}pe*W6zTd*~`E}f>@BRU8y0gtUHlOp9ME$}T>)V-| z*E&V!&$iNgclSJ-=&2v4ZRZu}O}UntZp;oX;)zrD67 zV4M7cj_Vgc9^89#VvRAM;BD*H0I3DpPCK&;%cbN&eyWj}uD9^c-W}GxzE70zv;=AJ z22Bi@7jftAF;(p;!OFl0)C%_h2^4n?(uh8KDf!wv$^Py8tsmtaxVR*sYiU5-{tCag zqF1_(+vl9+O#N`+?!U~}vjd`R3fCuo<$S(9?w^3?!Wx-V!TiYrr~WNm^DSfd7zx@eIGhSe!q8Z>iVV^|CX7)Y&`mS-=)2`=ASF&c&uEZ5)&s&QEbhKmQ zU)7oXeD<~G`-X|D0)Zy($vgC>;;hq5@l$+;0v-$ZBt3dlx7Kg>`TfhLEuYK;OuXs> zGk%}_-o26$BNqX4HMR^#bY|yJC0Z#qyMbcVE*D7g5p_Kua53IdYFWUU5|N3(dV|5! L)z4*}Q$iB}p#)GT literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_37.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_37.png new file mode 100644 index 0000000000000000000000000000000000000000..b0845d18b46dcf10838ad2595208dd091c24787b GIT binary patch literal 1206 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QH~r;B4q#jUq@0{adb@Hia2 z^Z!x-v&XF+rEerx-rq9uQ$bndN5%)s6FC`Lgd8*&(Fg%AhJ`F>1g5GMAxu?ZO++h2 zvlhz5YAQCRXfA|tiB*ctnLsg^F~}i+O(|AqE@Z(_y6^^@#Ak6Q&fteHgj_GWXk?0> zn%gMiv(QDw`s=hGPBTBdr9_|@HdC=F#Yl;eY)-6FtUkh$ fzR^8zaZ0@8bUn-49g8D@>*A%F>uz*ObLiKz;# ziCCrR)Q|(uGb{E$pd#@1!}yNpniFv*g!*twB1iK^pGu zMoF?c+)vv+Do){Sj?}P^-@bhN^nic+_HA0MJ;h1#->#NV{}#-ZI5j)jO~dumt8)rd zESbxGS2l-kTN_};nfmSA2TzUFZ#I};i!ae>y|gAsBVOjjU8l(0bWyL(UJGMBbk6v> zQge#sX+f`rBB#vFik=39+5ZvrO7_rbHPW3D>z6D9Vzft#Bbr`OFD_fnt3y)>YY@2UD`xA12i zOFg(!I~z-1e~Wvsb9n2$ysnFhJe*G_`5)?OykA+cyZXW(i(T?d{SU34zf5rb>caB+lA8jcr)mVOCF@KRule&&e{HvU{-)kmqnE#@yjs3;&*!*pe2XS8ujgDE(3SG= za!6dQ{B8EYBcGK1zx^hB9T=(W=brz5rl{qUk4FAEHz2?DQ-DJKuQ*?gWGBh3HNfzl z$kPKf{2cdFF{jMKOKZ)a9oy@axra0LRL-VPMt66FYXCJJ&)*`vaF5}Rt;ZuU`cb8Aoonra=-?yF9fl2DM*{pzf+)tlbH|)N4+fCarp|)V} z{(Xzz$z8FWbhZ8fFiJ&Et(OYdoy(QF-Pn``l8xJFal>>vPtDnm{r-UW| DjD|h{ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_39.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_39.png new file mode 100644 index 0000000000000000000000000000000000000000..dfbf10b8ef4a0e857db27fbc6e16f4b9bc4096b5 GIT binary patch literal 1207 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QH)r;B4q#jUq@9gCU`1Y8~8 z)o0c)pJDPe{=9qjroN>qa$b)Plrn#Kv5A$ziBn+;I>DjZ5Ws{+V5)NB#8d^=M66PD zYoSiTW-3;tXfA|uiB^iunLsgYreafy&6z+k45bDY66?OpbErNP^x$Z-bj8!BZa>3V5^xY0T9!e%0R{H; zxqtGM1=`zRJJ0VR$ohjD%7EOtT5Ex}9Y{)i%c1(4JwoSbkcQzNAkV4up(uB@yGCn} z##)dzpr>3k-kLgjo`2|D|9EQv&^O^4u0X{HltBIq;95G_#OdU}fU+HTZ*tn{v0$whQF32fN;YdC0z@g%Fa-+u$ z?)&jhoO&vUG^iiLz!ZlqFcEkX_&jA(>_7sEmpGy+pqix8$NuqL9FqFD>& nVl@?;QZyIBxX4Nu%$MJLKaV|p=H`FE0*S%X)z4*}Q$iB}JUdiZ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_4.png new file mode 100644 index 0000000000000000000000000000000000000000..330af4f94e5aaaf523fa599e27b561b6015d00fa GIT binary patch literal 1157 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|SeXr;B4q#jUs3tS2!U3b;7l z{eS5}vVxjK@2aaa1z&&C+$P^6&JfQl%)p`A5Ws{+C`@5+;zT1bRdJ|dssd{wS}B^f zP%c(eu_;A!A&g6`Qf$ryiouLQ4gqXRu{zU<6GQ2xPxDj${9||OG%)L2rq9|kX=&pc zk*VwASvXW38-04Z3$ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_40.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_40.png new file mode 100644 index 0000000000000000000000000000000000000000..b36a6be1491561d1b0c90ece3b1b76ec8516785b GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QH$r;B4q#jUq@11H@!;Bj%h z_y5v2UL9{055^bkKD|FB*`B}jikhT6L!FcwgMb&qLKZZ_L4&bH2#vs01=NJ03ap7} zrD)c|xY$gE$sxNH&4n;7u}ZNzb0G`N7-UyqRf?k5n&~m`N7dBrP8ym;AC&jkJ>8wxGKp>Cox-(m zszZNnRh)9C=gGO(Y5hwAxKx!S>;9gp=3E+}G%5O?`?uYm3q`!7T0dQ>J}C!c-toQV zts&^ee!p?v?%7*b2PjS1Cgjy}>0o-D_H8azr_9xf(Jet5GjE;T=F}N*>%=yWr3@e5 zOuW4h#Pa}Z6ihg4_f6ER<$&_`T0yUcTY7;e*oClLmWco6Qf+zwRLQY4;Fb$erTnU9 znO*I*twM<(PUOY|4b4rAZ@JX|N}>H-Li|D(6`P{lVhcr1y_23(p*RJoi3{lDDNdSG zoH`>A%zz?oksoX=0iO;z$EvCUWp}LRsg(yhMroS(b#bp2p^bZXtOM#>();vPbDSke zg$ZBkll^Oyr*Nn~P1^bB|4uPr_=O$(;(Q$_*Rj+C=*g2a6UuIJFLW{ZyEhFOBr`bG zIaC`0m=vZkIB}v8Kw+>PGJ&ZItchr)$YvolVKo(-QZyIBxWp<&*oeY{8G{@GC<>tF iV|AtzCjq7UpII|G!>sR3bnXKdL=2v;elF{r5}E*7PF!68 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_41.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_41.png new file mode 100644 index 0000000000000000000000000000000000000000..a65e7c7fca3d52c0784ba86229af046de62580af GIT binary patch literal 1604 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Ohkr;B4q#jUq@&*t4W5NN%) z=fC&%+YGr(uiFn>&na%u*|kD9_)&V~wk7NB8UDOFEx^E`+7Q5mMkq{SaNw1d73oK@I_IO0hcAi4#L9pTvaq=l?S-6gj4L z(TDeYbaHl2^*PyvA}3bxrg&+T_iYV`i{I{~IYF)PM#TEMzfP64d%2c+xaI0N?W{Y~ z8l2gV@%76Ek1aPIsXzc!5r~CAZ-@+K{GAGSRx1DePWZ$=P;hxPrlbtF{&$I+- zJdOhz8rk-8;T)s)EuRiJEb~uVILELZB*SzwQ;7R%&rjtkN|M5-`X*bvJ#@@}T5^`g z@|sD)rx;J`PjQ;L;V%un`->!6hegF*H=$1=Yo3os6 zel@wgYW6;$6~|s^MS$h(yjLS;spVA z)pMrUS^`bk2n?8ooKL@Q-19raQ@#>t(ea~~TB|qD|9>`MS$;Cmp}EdGvxMgF(wmeQ zu06%+rk2HWwm6N}OXoTRw#60tuM>(j?DUV}*S@DyUK5?SkMn8A-c#z;txl2k9L^f8 zMIjo(Nk5Od+b%rQ@#L=IJONLjL$A*Z*SOwSdvrQ`?D=DYUJLK+o4&EA*)q{N+V9;Fe9#cD0M4AuSh5E@0Ys9u)x&P|!PSGPG zPL?(^tkqWsr2U=obNTUk0-OtF#7@0B`MbojxAfdix&OO4PJVIVTAGkIe}mJ^Qmr`_ zTuZ0QSR}R@{TAcmSUR=tMdx3Pd_r`_qd^`87Jyi@Gq$3H1f|%D5}+71Q?V(<3?i^j e;*|1y5XnJmECfx*+&&t;ucLK6U8eLGVC literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_42.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_42.png new file mode 100644 index 0000000000000000000000000000000000000000..6c82a618fba351d246f1efc02d4c042f03488f4d GIT binary patch literal 1231 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|U!6PZ!6Kid%2*M&~gZ3b-D; z`F~lv=z$09X78d^KhBj?w=)zIy3TvReYz@xfEU9;7Bs>^gRw;jjlfg|)P$i5tchr) zXx75G*i41VA-fgLg)lC$O0ha~Aq&hHWLIESimU*k37gVYf0EYk)W3CIVxfx86sHUO z_Hn2>NlLS3D^1~8n!u&%lxfWUY*wkOhGmKKdY=4W_VO*0HUw1t{`v1`OOS@(sfP(+ zeM>MV69oX&t_Et|^YKpKtIrtK}}0;v*Q zC^It{WRZ^isf&_e(ZJMx?WtstEK354A>z%1J?a| zWZDAMEP86yb#9<%e~NzwJ2qA6)9OgDpDryw36ZiaohPdgR4d{IGOI|%%jxC&V4y9( z*PQnUdRcSIzI9<5fpcoH!Mxpc5FXfSNE> zfprqA6wO)~7n`XtIb@^JT?lnG(MplcLTJKjDmJCqoCy@eqV(Lahj!Wjm%eX*`FZ86 z9zqNkoP$7+0jt^jhul$Y#Pr;MG{+dsXm6Y}a_kgDu?!91G?=1Y3tMy;_ zM)H*KA;l?eJ4_~ocBdUmnj>*)GB7UNerWXU*86;RdANpu_mTiU`A03kkE*qAx}Ec` zM&yVl(2>#i1GJ~SZ~rvK18DuReUBY9?sGofQa%UB>#MV#7VwULsRb~Q+3dbttGUOi z>col27YG*C972LpEI9;N24OW7n^NNQ9oF&*;SUrRHd9d)K%IisnNFGF*z!Fw_8(xe Z-}bMf?#F|z8-QgvgQu&X%Q~loCIEp*1H1qL literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_44.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_44.png new file mode 100644 index 0000000000000000000000000000000000000000..29133eb5e6f5fc441cc075314e38525e90d544c0 GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Selr;B4q#jUq@0`m?V@VGeM z`+w;hua4s)o#;7?zvA-`PG{ke5@+Z?#KPdjsW1hd;81M{U_v7>RXK5Dssd{wRw=r* zP^Vxs6{}J-7ecv2E5+tapcpn&u_?voOrRJRr6*6;zq#=_IMu#IXrYemDKC8vj->%y zPdD8a@M;OtXbsX3^jbLQHqXK*4+18AKGYPTH02wYHJ7TBr}3mR5wDg>eRJPvOyO8M zS4#S3AW*He>9>uGL5c){+Bsx?{MhXYQk^Ni&_(0ufyVRiliU}&2)q$0bJ1Wu*yx`N z;)=XUbZ-fgkoj@LJrAsy8>sl>evM)$^(juB0n>PvmOtZAb($$*xe#dMryBujfBT#? zr*NdM40y+*=XA2)>E+G09RWdq4s4zutvL9#sa8Eb_erzWv5P5;-om=o$nm2LO?fS5-b8< z3=2U-i;#l`BN_pd11o?Mn5w{F z_kZa_HV&1K!KrQ)`KKosu<-ik^;f?;X$YQr5ujEhs4#`& z>04{XDI7}!xR%Z~Yz*Lfdc%!F)p6mH_uVWDT{PYXmkE2d95`sMoN2z$g-7O3XY3ob zDI86)QnPRPY6yDGHu<(;c7W29ZvtK|LhSedXJ5*5>NGea_h+guP+do}tduoK9f$Rl zy8>P^e=e{AjdMBl`8MyuBL~0#J(+7>bH+)s^n>zwy(vze0eb)IHQetn58zUDl9cq? ze?-u$r6}o1OAyetsm_+K|8gz`S{1mk#&`#Zsy*M*^sUlPo;MDjuk%|d;?-jG$ntGl zz@rEGHEtm8rO%wIPM$>?U@?E2`_lR?LO^klRFFn1j0vKF;#;JhI-9p+A&vvR(|kOS zLzV9y4gwrsL`M~eD$z=bk5#OxACZnwSlCQOQ2bP0l+XkKmz+E) literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_46.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_46.png new file mode 100644 index 0000000000000000000000000000000000000000..6de70495352ed11518d23536e5ab4e62ef141539 GIT binary patch literal 1521 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V<0PZ!6Kid%2*T9-XG5O8&T zSAV%|Rm(Pwho7ZlOZ%EnDwq|zPf7jsi}8W~bY}*IDGW}WXhcH*6Nf4qfvF0p2}2cF z6VXc1tc7v0nF^Cbb}O0-VO(OBVs)kyC(IaRS723&tN@`2Q|V;?6R&Ubb39#k_WRrO zr>>`%eeT;UVLyL*z^xvq$PBf!PuB73O-b%s z2sG_vz_PvbrkpljIA?QuOOS?ltI@}=OKRIxr#!wtksD~;)5hb`8pr2FJ84e2INS2C zd7t`Uw=KyU_vg+9YEIEuU1R!q39rhO@9X0=T8*@(T-~={ZHn!;PN2qb0bzfe-e=BU z9;`9{oS(*AmcrLSm-_5{BIdPFNAScGU!5tn-`WGL1RpU)rV4YX&flvz#jkBfK-jG# zc{Z0GPm0!P-E?Ia&`rYU>=)(~IKA1&|Fomp5a@w-Go}O0{}izAA5e|aPms!@-*eBl z25GE5H2O z7Z&zf*u#_hOZDE%g)$#o-%Ng{G{s3$*vtIwS&pYG_QzO01Ubq`ZOS|MnUbek9D1$z ztm}YYnLh8z{1`5-r{x>HE7jGfINdaxGJj5n(@wo9p40aLZG7ugd8@a2a$jkb#^v*d zz?e0ECkl*RuZ1?cQ#PA_T-U2P<=d11saKcIZ(Mb^Vqvg`^$}+c-qN4D;{MkbX@su} z2YHrX_Lb&BpN^;N0=99s2S}|7xYqx)FJK!Nke$^U5N7{vbNYtQe9z~x>rH9Xn&Rwi zStVvI$9hqBl2hgir=5n=l;w-Iz77dpV1qI&^T(PO}yvuQuTpAqNdc1R>zXu#g3fKv4iyim3{$iD;z=8z0e literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_47.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_47.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a8772f5c6bee748708d59e93056e6297a52cdb GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QI5r;B4q#jUq@1M?0U2)G8m zufLqgKCwx?%;vpJXa1bP=R#Uh$5;=nO=Mwk;#8P|PH?C;1Tdiyn5vvOF;#&z5vvs4 zTBuX7nTk~@nhT*^qLpHECQuBUso0cab0$y>L#fN3fSz=I0k4)o3;FXr3tbczH@`gU zq#@{WP-lj$Q>VuE269Crr)@JTIwbmewOsP|M(_e{rE)?;)<2!3%fYOv{b9V0b z+$`qRa_LWt(84WG&YVBLr&Va7$^OK997_X?OszkI7x|TX{sXCp!m$2-dz(N;;zq*?PxKs~m z_F%*kFx3znp*WOcO?TK$#i|rry5mqKS}8Uk0mZPHicKk%J>UMDQFi^$>Zu>rFat{^ N22WQ%mvv4FO#lu!U1b0O literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_48.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_48.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1ad80ea2f84ea8d514d57a2b42e682f582aaa1 GIT binary patch literal 1624 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T49r;B4q#jUq@ql*?B2si}3 zufKef=}{5SmL+v_f=%~JPPo7-;}d7kQ1iuzg~5qaVG26Iq1q6@ghpVha^l2P1=d8Y zQgmyfPQhj>R;6ezgmQ^iip`loF>Iz{Q;N-*KrsxZ%xq6e-^wdYITT?sXRcFS)tR{> zpU-v%i1DUuV|LZ(eR^`M@)V{>r5Uk&H+UZFOxgL&S!1^ArzefdQ;r2`v=(Kmgtvxk zv|f@DI(3oTSL6JBMv2q^iWR4{t5rPzFZr>!HArLgnWLwYV>Kr0Yzbzc7O<}KNuTh1 zkAJe<3q?+TcxxefDvSMn{b%(l>CYWCT#ep3RsZT%;||eS{Jy7U)5pjUSIjt5?{wxp zKUt8av0pNJVTtL?qWfxZ{%^mnKc)DYg9dwy?>mmvTXD+YaR z+^(YLRsQo5p42B1Yh}J$&%bGD$+;Bh>Qj~0f~UIp|GMWc2l7@2ghg$b>J<4gI%wi; z^(js_m8Q((zbE>5%cpcZTd_GafF`vXot?9mFZJp6S8I0N67yQl{g8hi5GwVPO{q%_OqUw~@;^oVC zcGk2;KMnBvvBO(~+wb10fOiph?ml}OqOtq9vqo&_vOQ0Qy%vgiEzA-1ULSedSl<8t z`;Og>nXi2`js|IP>#dl(aE<`qLK%_MZ}#Wb3VEro*^yiEE1Xk(o&Lfcu~V`7$pWYT zEu16fxll&x^i=*K(eM9gc4)Q)8C{O{WZQ|`b z#kcq8mFr8-l=E09a%M~XRiRUx7mBzqG`YyS?|9T(hBFc~tZ%FIIc46GZxfcd!0OC^ zk%fR+8e487I;V4}60H=Q-9RyF7Yd~Kh`OE+xTvqPBBSrvArVj=!rT)dQ9tb&R*-JIfWzj zr{=3XD9hr`+F*@Vp^0y}Qlk{=BIgHisX9fP34CK*=%NreL#;JPL-6Fn05z9I>9Js~ zpO^XfwAeamRHn}InWt5KT?uGYfZy-kQ)~r*?$9{ha;ceV;ghe)<+naofB6N}Zs1FfO`R$)z@f^W|LL;x%zbGs zLJMPx<^rv>C_65@U)%p8hwAJ*57gU?D)(}zO8eDW`%g7q=M8lEM%A0Fmb4&5e!b83RBPt3{^l) zn5w`!iB*bbEsTrJRG1vH(daIOx|(RE$YvolVKo(-Qf$ryilHlgs@naj>c70gltVXE zW`!Q!o1MG1@U0}*Qip9fE^Kf4^d!o^-|4!1g44~4&$o{J%$BYFukMz3NV#^Q%!b0v zeo6~_;)@rGcukCvs97rPsqy%FtVU~)O8my{`ctZ}J$|CL&veSf&myPX)Sa&y{CV~| zkMn7kMeC>MUsoIWFVvAZdFH+Ll#SW*1-;kL74@2^^Wkz;y2k1`dv3m-|M5##0M}9v zHd*&Djn#Aah{~OPUso5R(R#_DxzAPO{GUQ^phX(p_Os4#k%_?0HGSYFreay4L`Of%4UN3&h}PLhg?^Szm(|3)etT>18k$a#H80%CEp2bf2lS|OPTe0T%_-kz z1jI?7dN(@)Lq^k1n*N_`6H@RoGg{5tdpA}ed@N|#sH96t)H&<-@0FW{K}GIAZJsoMr{8k zHx2850-KMw6xC?N?)aXg5q@95;A>ZyQ|5$Jr<)%wH*|_0t@w0K6X?2T9oAy{@_c!aa`y zpH6mfb(;BKq%DB!Y3RZ=0;gs7zv4{o^;oy=`EoVJo1;F6x>gTe~DWM4f9~L0B literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_50.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_50.png new file mode 100644 index 0000000000000000000000000000000000000000..76705883fa790f47c844bce4d02e49bb35fea3f8 GIT binary patch literal 1600 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Ohor;B4q#jUq@J&P7Qh&VXj z{eS7(HEwUFtY6M)F8Wo;IU4i0RywSgXRxcf$;#lwsW1hd;81M{U_v7>RXK5Dssd{w zRw=r*P^Vxs6{}J-7ecv2E5+tapcpn&u_?voOrRJRr8le7_t^bE{b6_d?dAUeOYclS z$Ggx(qQ%I^r1jH3LlLiL#iI=`WKP|z-yLwxQorR=gTN`*4>Jyz_#t3*dKaSAYtaDQUs@i?wosR`=>Ww`n1+AOTwK!_DetOMl zFL~+=cYW)nN`)!BX_M8{rv_dxcjI2_zxR545%sn107ebBdy#`u$vYjoO_NOFrsPNt>*gHq~k7 zYwO}owchE|Jeva4djgKt^c#H+Z#@&$qd&zdQfbOn`L2ydGyLC`zAM_lH(=Kr zzVe@ME2pIQzkPA$28*Lc^m(;%HwTULXJ_5}`^Jay=GL}Qjk9X~XSHm1d_S}ChsY@( z{V;3s-`q=YKG`_`{lUHI+rHkPemZsb&GfxpLZ=#xPw|`%nfFI`ZrqBnwxVmioT7R= zTZ2@b^@Df*E-#sVas7>ZZ&+{29K8iQAgH&}Q@d^7VUxT64-3S~taOShqR@ zJ?1=bgWsCxzpJlZZgv5tpCFCkc@f&vm-W<~ul||9v9wv@?e`Tjr+CWUIF|%W<4#?| zy588nR`k^0?m74W_N<$@fnTb{=<|E!DbM$}Zu}*y4s^5AO^qp`>;2}WJ4IF{oZq!H zP~-f4w$1=4Hi~j7@mUXR5rx%m?4=o2rPxXc4ppL+Vksd&WiU2Vu_-0a^8pw2x0%oP V)M(Lr3#=I!JYD@<);T3K0RW8>DvAIA literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_51.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_51.png new file mode 100644 index 0000000000000000000000000000000000000000..9b68d0b0c12b6892aba808d008aa19c38445c91e GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|U!MPZ!6Kid%2*1Wsx)5OE3o zwmuJbED-Tttw$d&D;9mAh3l8g-jOdP6c1cMW&!W47@LlsaHrYf*bVwIv< z3*%xl6()ylG`b6+t|nS3vRMdCSWU&I6q_@FVpx<;`r&@>UFFQBGdWb9G-oY;-VvZQ zW$VHZjfzt^mPT*^#ik@#rq^+(CQAQ(S7B0jLSYKW)0Y!e&b@m#Q)x;|Ymxr6&WR#k z3tcphemZcbB}hZiYvCPBzJ(%QEuXHw|6HQd3KTl^DnQPb4I~z%QGQK-ic@DmSlg#F zzrb?40_Mf;4glI@`NlSkFZEX{Tg#;BEk>nwK&v@Y&)$5p|Fsy%{Mx5tApN$sFK+Du zYSiRR{rp*D{kmw4R-uJG^$G8}gO0cL+&0)e3d4w`%W zR!aZBtqlwSUt5(4KpmU@EGv7z0I1eR#w-0L(B?=PZg4m$0DZM(oc?0#-H}$PGFc_Q>Vi= z-u3{cDNA_Vmo;#xI(gpmNbBqX3hWW;5niu8g+uja^2cYd)Ay7Kc=fsXXb5^mxfVSy zY!zDQq9T4=+^a=sV$2+n0aG}it}Hg>ZV~dIoF~PhdMH5-OejoQl%ST@6rjWfCN3I( ztiQvtR3qZsOJ)NBFPEZfjkBRZLl=s8w*+aNb=48{a@=s@^iCIdv4t)gr_ZMz57u<* z3@|zx1XLt<9B8YCpf`{(%x}5$DCr)@(xY2<+^bWb!m)Iw@|1{}&u$tUcRcG2NGd!l zz3>Q7fm7$xqib4)PIpHtPnmX|X|}PG=S20n>mCYtEA7$77w=x@uhBZ`*}|TPPd$vCHvIR2mUKLg_n!Y(JGMMd+3Dob zgKPfmy?%E+|H37nI=kc5ojMby@pX6rgOmG|t~pDK&@Fdo2|5O4_m z``>^2Y6jPfEPAed&kOl3xQcH~4caqNc6MDIZn2!$yOPMl~2rYa6q zOjTe_L@PzJ7RtqHDmJBPE`)K3Rf^4-Krxsx$RU7DDOP7XabhUtlbrJWbA3YqSMtP+ zG~Vy)HkuwYeYX7d(IYPc%B(DxwS0OO!M!wqYl&-2-5P)Ux`iTM6LsnqaXkHLDDJgT ziMROV2 z`&>2N|0(p=0P-fs`?|51{Z2mn>C*9a*L#2>zI6)&!YcpI3W(Bn%KUWLIr6RVzDT=U zK-)B@_^SVVy+ga6ODS6;yw6di_0kdXDjlcF=MpVIeKi*y(&CReMV9Zqu_H>un|;$I zC9zX==cClxKF>6G8S8hetJ~uCv19pt&Kl3zf;DE#><{2dT^6uST7BV}+CNvtHwK*J zOtfF8@m?h)RhlPY&QY}Y^~!$oxitpQjbeYe}5Le!u(%U z-e1nA9rrWx*KxHP{Zr*xC~_)r;TeI`vi@INjNDbik4LDqURoj>r{J_xe}Z-Sr@CUF zna^BRT8-XlJx-B`%2`-naYosG)xsVN tdn_swKDi#AQCOHYTHesIunqYlZP(;{u=#q74X{dJ@O1TaS?83{1OT9ZHJ1PY literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_54.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_54.png new file mode 100644 index 0000000000000000000000000000000000000000..fde4e758f75c98bb6bffc2fa65153c7145f212d5 GIT binary patch literal 1194 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QH;r;B4q#jUq@9s3R$@Hkw& z^Z(LQwzXYB*4yq+-X)jxWc`MQNO6Yk(*zkfR2u@A&a4Zx# zb>VnVOOS?OV_TvDKadeDZ!F}sa7hk}(qf}rHxAXq&Oh@lT7?#-)UaqB2deX0$kXd^ zG=fXjNps3W!4+cO3tco?jZ~SOIs=rZ^d@Oe;aD2LwG_ynBf|)k5#CgCMPRS zaq4sx@8$0w-tAi(AzoQxv!&GR|ezqWF9UyDCX0hJ`EwUg$)Nkb?#z8iA>5Aq%D| zuqI-aqFW1f3N}-*Dn)Z4luNWyY|aFVVKWt*Qf$ryieXXu<~v(__Wuz1_IIB*XUnZV z|9|C1aj))$SCRz07H%{YD#E+ z3q)e)Q;E9x#fQVSTQA+&A7B&G{t@&sct&yzjW~l(SAh zp9C)s;Ck9+JZa@akyB2`Kc+0?S{m?S88)W*u57{H}$8;CTmVP>Ks|SIK0wr zMZmefr2%3*Pw(&NUK+4Y=J(alYEzsl|5yM6Vez%|lYa^Wz2&v=&yRV_UdVwx8DmiQ z&Jrk;BjLq=G(z0#yVSS-r2%~0OP8~+%sbSk+ zRIj1^kNxSFXrQ~_9^7l~yz|jK=ih!Bz7ZD;@9a%WtGgz%9H@^|Tg2=9;vV~RD^A=h zcha09y`J^&_Zr8~pZ{1W+xG&6ERznE)$H2+`DLKSb(!=pnY(M%r!01s6!lnmM*I|K z%cU0C-zF~)?sdw%&k1xyjXuzfsru%esh4{tN^^~p7IQz{CI94y3D8-&2Q@!UJ*zdv zDf2vM>PgS;J^g_i#qB{Vz!=wOE4sd4bBd+&%%8Szt;EhR7CGhKcxR`y6Cp1 zX04~je*V;>4kfpkogzz=-S(S*7M4Hts!+glq0Cl|79+bUvWpZZIqj?sOsUR)_S{F~ zZExiFPQG8FZx5U*=#!E@&5SLr559bcwLHS=OzcG$R;AdAgBBs8m0~FlKm{(csS6g# ZCsy`kRYl$14lKqQJYD@<);T3K0RX}W{gMCx literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_56.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_56.png new file mode 100644 index 0000000000000000000000000000000000000000..51662958f72f4dc851b62f69086305742ef21e0a GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Se;r;B4q#jUq@4f7fdcpNU? z`F|-f$(7@c%f|bYcU@oiN44$H3kW&3X?;2E1C;oTw;}Cb*2+1%ot=>U{#8&0HFz+(vbhn{kHaVpSf!YdMy<3TIizD z8U$wog93WI-awgL$&W_ z-rF#Z!ZSD420WUvF}mfFp>^7BSD-*yH&CGe=IXmZJ3IGssq#rxyK2a8Y5sPjH$Z91 z_d80RKuZ5voTw+r$(xSciEI?{T(~4dV|Bfd(xdXvFS&tkiEh92y-@(@7!{B|-roVb zBvMU{sWZT-$U@MIp+(3+gAt7o@M2iVfApbwOuCEfxw z;8MQ5Q)dB(Dv;2bdHsK(@)VBL9}GM#LJNKPmnLwjI%!Tx>I}H_v{+*^$h1?F7RKz= z2Fm`a)i5q=16ma4>8t~C#;KQo6{m>UmmCoSy63In!Xu5hm7O}7zyIn5Dk|#?c(miK z(842yx0mkaQ0~dWB7cXL)Q|Z$xENr7_HAwJn~rd)U}0Q?m7T{qB#jj{LBLe zN=uLdE6`GTu0$7%goz``5gX&cs3le@mS_ZJ6zV4q?3oCgGpX+RE-QwX%DbCW{z*&# PmK+S8u6{1-oD!M<%^@n` literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_58.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_58.png new file mode 100644 index 0000000000000000000000000000000000000000..e14a778d9e2812aa230bf3119d4943f3942cb46a GIT binary patch literal 1513 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V;@PZ!6Kid%2*p3Zw^AmVWG z&wu~RnW0-lRP4T0u2C&5U>7~u_nr4j%WKvH(bE+f1iTm)vY-(T8jLMMXauGzpe77e zU`<3TMY9&h#bzo@4%w|}E`)K3Rf^S_3t3>sAiDyqQe*`PO&CgBc-5bNy~)q;Xz~J?)*m_;B&7O$OyQeF3*@6{hg|^;w4pUv-{Yxvy0SsA=&;n~yh~G^aRO+Dy4Q z&wtwY4GH>PAtomQ58JoAXb<*plm_A$Tfj;hIhLYcD&A0L48t zR_A^a^~!eCm@5R|RSK zJ~|kXwzueHna{p(-muFU+tfOWU# z${8c!^?mUf$y2ctx1MXc#B#4@{`2+K>{8Ed7sh=20oLH#_~)nfF-yBCtL5%n3400e z(3~*Sd1mIC&8?R}TnUj=D_nJ^fE*HOH|1jYkB~pDMfaqHy%zFVu9NMqI8-s8XX$Fs z`DY9}8IOPcdw;I;&d(LCm!yPGEt`Bpb&6zCrPdTBpk~b}sbUv81Jdp{sZDaS)SDu^ z&P-|k`;*pl((gUKm6!(%z2mJ#Ut{L{(CSz<|5w+X%VEzqfWkXs-7lZ7C)YQTF#&+}KN)r^8( zESq99T7(upsZv?Q?yMo`b;!ji%K{|u-r@~cUx3n-C45ghAG^%w*l-y!I=Fr|Wl%_;Nq?IXvXGp_+Pb1jYFQgzAJ{`)qd0w>KWNt#oD4ocg_#-Zx;Qc7XUmzztRG^c@0D&GX~ieSd}6xKxo3I^wPhB$?uZgZ*!r_O+)T$VC7RmCaV=B^r?+)r;8+}m`KbGFiymex;i!)N*m zdS&(RQk(`<&9O9s3#7}sFG@quOQy6?r!@%3SSaGv5~NWsw>3a%ip8r#>mdRWEkZzv zgJKSR0V>S<{~N5lc`=y#YZll^VAt_k zyt?86R(e_)=mpiU?sMflK~64;RG91pR_@2266FH)g5W95L?6D604`Nk_r0$-PF}&K z$|NAf^cxgz3}sFlKaCj5gn({m;Npt`Ivz8`5wU?_VX6YB6NCZ;3#(GBv3-e!!HH90 z3Od1|+7Q5mMqsLP;>1)1)P#n245fUQ8tc>R85W8hTlUb0 z>*velc|R8IsJf><-=&8y^_PmE*YO~Y)=#fEiw>uF&RkIYa$QtvH+`TPMTAe z3NOyu#JMzpYiU4VT!vF+ouT!#`SQ^%MYoTv=-CJo=6brVwd~P^%(<`j=70Y7 zc#YN|4c`X$g+9C1`)aHeUTDHNt`+H%KM*d9Z%g-;V9~3#&xX`B7bCSfVsmE7++F@UtUvWv-HeQDV`kK(X@UY{dT(T@#{3%N zQ;|ypq!utwZ_u1>zr4<>qEut|{)nA_#7+e+d{g#v`|IB~S3B=~G|xGGs#9izS=*-1 z)yY@y^Q`1}x@z`jP}p2(3n=@~@GwLr{OEAJo?X1VG7&JRRLkT@0NTN^jau# zs=d&YGxh5uKdISM`wN6m*}eAHn7wCFXlv2&M}E@NgMrcaa<*mMRlb-{kVN8k^iuM* zcar`7|KE#-Gf!65oWka(F?&wt8=j|U7p}M^c78EW-_y7Ax4oP7Wb%Ek%1;X>zMHtF zit%g9XU2thz8bJCJj0)Q-Tijxy0sl`HM|=ir#-nn&;91ZALTdu%Imn4esY~&Z@~5J z>i*I@g`e(jnGkk=&wWFI*k`)}_Mdi literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_61.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_61.png new file mode 100644 index 0000000000000000000000000000000000000000..d88b2a24aedd180fe1b8e4c6d0cb6884c30f44c9 GIT binary patch literal 1202 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QH?r;B4q#jUq@qWhW+1Y8~8 z*I!Oy_t^NxtTtBlqqU9EoXmcv$BYlI7H~4O2svmlq7edK3=3J%2uxKiLYS(+nuu14 zW-XM9)l_Us(Od}Q5~~!OGl60-V~|4tn^LUKT*!h&>7?8BipPFWtBTV$YY|!~;srz= zd`$sLQ#h8w2orA4Q$HJlJg3fpqM}HxDIBU!mPJa+Kss6(s8ChOQu37FLP4*VNpBf} zB*+*6uV>TlYM#zt=%S(7*$&j(@gzmVn#Em1(CgHpi4tDt3xV37K4z8RP-Q*+?%nD9 zd>$ta&6#S}{!`=Dw*>?l`IgPo+S@Gz)UV!GS(+l~rL#L)e}A~l>89n0Tk2(d6Y}l&TpcKH&Ci|(wkndI4DiopfHC+mBEQq zVG26Iq1q6@ghpVh0_#Lm1?FN?ifJH8O3_^iarH|f21@M5ZYU=O0S Y)iPA?@ptERU|GcA>FVdQ&MBb@0AJfpSpWb4 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_62.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_62.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a1b14f56b98ab8599fed3f0101fbc44b30d7fa GIT binary patch literal 1609 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T3Yr;B4q#jUq@9g7w_@HhnC z|9|PE*;KC>wk3Hhzs6nFNi$?-`?Y%`IGG(gU7_8F_K!l!PX76i&1I~Z&^7Tys%r8nIWY~sV^cXy}fhF@R$hym;bNA`2)0?PJD#DQGKenzeQoRoIlxl zXVQJUxstORIF`=+sXApUThOz;_rl-x7_AoZ+I;fpW-tDCcQ@9n54v$&BT&WKO{{7hv zG;pKZ6!*DYDS!5D30Qak+v@duO|G>R-Lak%aE?3mX+X&Qz1&YPl<#=K_`3J?zi)k2 zRRPyM()Ko19oiYdl{z^fE$++zC*}97bN-*nt$Px=>hil=uM3MbtnWx(wVW_U}9?S>Xov!yF7PLJk^?XoP?l!$KA`0#j9s5T+`yCZd(1 zSqtT2H5HpuG#A3S#45$+OrRLd7~~MZrWC6)7qVbcI%$>u7mLs7Vx`ZT0;(1sJ*Xq# z_3pT$x5^oYg-@z97PmWT2zoiS7!~QX2rYcF-eL})-}Fd@DI8CO3|fU2E~(Y1KN8wh$WEUCKiFraH`K#<9lbBjg1TPATYJY&&)x7bBP@YEN6@#^GxKoc~D zE`zKQIsNpe(iD*!XY87~RGm&f4B$FiZS1C@xvBGRDA&?}B;nngx0C@Lb2l>5+DUT? z5OJsqnr-O64`kgq(3E)BsgqYn;#zM2P;r#GQ)d8|Dv($vZ$wL;>q{my->Es&)R} zkvY%hq`@hAYMrqI(EV2y3V60m%AWYbj=M$ZkFcQIdqHIeieeR8io%ilu_?u7H&BdN xrC3rFD9>Uu6`NAx(<%1+jLn&7o>*A%F>uz*ObLiKz;#iCCrR z)&>6@>DUM-tKG|ozcG~M|! zPoYIMBatIV-bJ#0$*JiCO5P zv9S=SL8V?H#sp}cU`OZurLSC_Ra%A0r(WLI4s=Y%)9H`H=QP_Fa;PR*e%&z_=!77h zX|ew{KIDAPp<3Ts^mYBhi_S0ST5_mvPpV8moL)V3^>zcLDLR~KTffJaTl%+5a@qK% z=pTn_Q>2~@6EGO0y3fllbg_tLb5;=aVpzx`fJ!)MFt!L`5@@QxTufChLYM}UrWBjq yI84Q+6q_@FV#F%N<|CjOHdC=FMe}^a7rX6$5|zyAFFFGYCk9VfKbLh*2~7Z~QeF4} literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_65.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_65.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fca6760f2f09d14dbc306732465358175a1d4d GIT binary patch literal 1644 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T3}r;B4q#jUq@Pv^Zd5OE0n z_ka1z6+xj>xrBcIu(>wLYDcrQQ&PUdgeMnv{W^mA8Y!N~u7#6Y!c%c&*s(_j> zRe^O9s}#*z7#EwVFgawS(On32HPK3u%|d9xYAQCR*qjLzLswdKfUR=RfA(j`dMZC| z_GxK|Yof@hWy}w%_iE2qn`SyC z{F z>-M^shcO!cHu4KaPF-FYvo&X-i6+q2c)Pf#0qf%S17`A zMG_kquK9BG*vWut^ZK1`s!v%bCn9~S>pp|~{bUc2liAxpotvo(aiEKvhxaxw+*9S`(Dqk(%3E$SJPK>EDh*N4Nzz` zdiOEB&FFK4v3TpI5{+`-N9%qoU4EMdbdNXd^6Upd+W4LH!Y}JSEiT=;>zv@^9gpj7 zd`zl*bo{fOiltIzsdV_?xvN*R^Kv~s zDZA~}j2QvzIG=PKUsGe|H!WaV-pS27SEVcY>~821pOT87s<#rW_AA5Mv#xkzWH zjJ}JOpXrut6gkDp%yOnvQD3Hwu_1toLluo+aN<;$f=*zl0&2ok1=dNdQZ#E}Tx_Po zS*e3-{P85KJ;9TA>HupI22WQ%mvv4FO#n3+ BKP~_O literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_66.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_66.png new file mode 100644 index 0000000000000000000000000000000000000000..789220c9c1735738d7745286e8dd3078d6f727fc GIT binary patch literal 1227 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Uz>PZ!6Kid%2*I`$n_5O8(8 z|NqiCJMPncjVAk7FUb+i>s)?O=Ya*|juHvRh5#lGRWyRZiBn+;I)R}Is0mXQSSPVc z(X54Wv6%{!LpB=Sg-}-$trXcTgeI(}VpEFEnLsfNr6%?U$M?!RdEQu9_T%|^!G%ja zHFmQeSR>%IP^9VTW@in-Q!^B1a64&EY5G|dw|`x8z^01_<0bD+3FwOuUbw_jBmFPy zG^vyCzY2OuwSDq5uyz+(=%SI&etC|77fZt7h%ObN*80wd0HrA$sUAA6AlX)-g-fb9 zwAwvX1iif4H#tpc0Sfr=07(~(*)5lriaT`%Y~y-5*>CteEPs8K;uN4s z;=c>|Re`iqui~o3pAsL=jjWeYg&x7rg+}(0ZQC%3DN;t z*~6Los9bpp2S_c)(^Ua#_0~XpxKy1^*0q-`_cjD-6#;tM3rNcddxM;5q~``yAtZk4 z)MlW0K^nH<+EX}Gog%aCfYx$6-8M01qyI#phEIhxK-tzw-xl8a*p|PY9q7`XPZqrU z!_)LzL(psCoT`Xmxobs-ErGfY^JTw!-F)wiqekne{QX-Zm;U?B2(+_N$50>S^v=ee z3P3+GaX)VhxMVQpS-PJS=bkRL(PWE}Y=JofTM9>H6ciSIr4E|%^A~R0(7p8dE?^?H+U%~(Y literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_67.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_67.png new file mode 100644 index 0000000000000000000000000000000000000000..c16fbfc72ad979928d00183895e6eec6df8ed772 GIT binary patch literal 1552 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V=IPZ!6Kid%2*p7wifAmVWG z-+%wzzdyd5pvLAL?bX&Eo8w| z1=d8YQgmyfPQhj>R;6ezgmQ^iip`loF>Iz{Q;N-*KrsxZ2{}4(^}p4p^r~b8ECmPdrTxTEB40JkuJavA(v~=y#{yl%L0IUZw4IiZq$xf6o-?j(_EQ)bp=sPnoV(e7w*m zaskkodfEKjt2k3n2ZY&OY&E)Gal1W8Bf4$VugGP~-CB)z_1OqCjKoYW$`ium1iR#C!T7AngCC7w<}ePQR%%#q8(}@l#&) zH+D##I<-;cRN}%d)fe^!g#F#j63z3p}5z=oWk8v z(%&I2k*m=I`s?CjJz#7<4Xp-R9_tiYSj;m~r&2ROM0t;mb7mA*eOvvcUHhN z-qfqv5pU&GrW{v$bL{9nrg z%e6So)Sq&d>ES#}r=2p}w6?#RQxksR#m>l`qAtrVPkh@rIl#(o0-X zr^k`HQP}X;&YAOn1Z?{&9O{*fMe~Oih0V;x$o}dNWIIdFy*_`%RMs%PZ%y_ zIp@CluS5hJgA=F16m)_^wIP5Bjlfjp#EGd2tch5q=+;7=g3VN{O3_>hA< literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_68.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_68.png new file mode 100644 index 0000000000000000000000000000000000000000..48bb7e75135b38fbd58a9787bbb8a40ad83827b2 GIT binary patch literal 1160 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Se{r;B4q#jUq@1Njaq2)G7* z+y8PGQ|H>|2eXTX>R0zXy!FHJIO~Bc222bKSp>Y$i54LT4MsEqQ`JHiOjTe_#41I% z7U~pireal!=0Yf!Xrsfl%cM5x{lBi}x^bvFNlNye zv*!accBblqxWc^k<_c3do=)FfQ6<|lX+yv)*RwV)K^lTy6ZaI>wg@d0@dOek%mQ8u zb0jz?x@ZV;y>OoJy4i9;(R;4dM6^;g zYoT1Mreafy=0X^kSf$vU2^51FgB$|blwx(J6DNjJrvu9*vgKQZ6g7S?S;Ohn8L*AV zDtLKhABSoRj7g*n3gPxea+c(rUw`F8iU!W0w!)L+hv9?jxVb<&(9zpg((X^K)O zkVs=&sA3=mV#+*o)ez*{tTd&gJyOu?$l*C0s!U0KEkcZj>OkX@BdMiwCZn$SX(nqq5P4xkzJI#WP?omS_| zrRp?O%h;}WYBn=^r8 jFk_HI07dD)W8BjnuB_YF*tY;!x-fXU`njxgN@xNAaD6vj literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_7.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_7.png new file mode 100644 index 0000000000000000000000000000000000000000..692525990c43d280982df274663054fa2b9e0158 GIT binary patch literal 1477 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|RT1r;B4q#jUq@z4KlL2sk)? z+n;IFHN|mC!_K?!{HIPiI9uTHH{0_98|3{N{(afN&Cnv`puvbn2zW6pWI-b^Rka9V zssd{wS}B^fP%c(eu_;A!A&g6`Qf$ryiouLQ4gqXRu{v`h3l^nC&nDN*`TKI8{Ic`v zS$%h(%UjAX6gg$c-W9-=dPSxsNaMJSiIe7(z~6BivOLLratlSgfbvD$8*e$POaV$b z{rq-tLS+GG>b;t6Z}-0lD4R1iKrE)C{Me_t$3?vs{>i@YKMN=l*HL~XNTc=AnwCvZ z3yhP0dTOlRtEw>N+N1zI>AWzV^(~uTRWEnS)a877=ponAfGBUL%pI&rKTka_`I)^3 z#MPYga^ahA8&wx>nbuPDv0$_F&9BWLKpK_?wB;QBp6v4@3#@Ht&5nr+=X{ba0Vxd9 z$p0;s`n6RLWRcXni@86ZtO?X;1v+HYp924!Hzg6JHM=&@^RstAM#T`M%%^iFgKbK zZvW=KtsYQTcl*Ov)oIU))2zX64b+J3H>$VZtdt!FlyvO>efz!Osp8u+E6uXPoOUMd z5KJ!*KPT7v=}cML{v31dg)y?H);Msb?u7(nWBO#hJK9syRHrye{)hpF3DC^byyma> zp6qGO`#ATvbKh2#DQ(pcR6kjFhr*-C{lA4`MYvfBXo%E_ z70o9ft(No>e*2K}yiN<(h@U#CD0r%M;hLJ;j0@M8&(_}FwBdhyjk2dkwY-2+ zWxd93c1MlYqCbraQ@*zp1#tk~ahb2hdj9O6Puhx3*A@Wz$9bYO-g7VgsyKy#L$x7* z34>s8;#8P|PGG14>cmt9)=8{VY<4#U++szynhJ(ubt*RdvD)p#NwiWlzn6StJ^sDB V@|VS|U|{jg;OXk;vd$@?2>{+_=6V1C literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_70.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_70.png new file mode 100644 index 0000000000000000000000000000000000000000..cc010b227510729f054c6f95a3aaae17e512c17b GIT binary patch literal 1569 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V;|PZ!6Kid%2*dKO6=3b;Dn z`+w~& zr55Zoa}S6gt@}v$`TH+BO8B3y`>ZzQth!74ZIe{PcRS=3{`p_L?Xgj7kVe1k^DO~k za_`SA-1E_CMgZ5+0I`Uk{d@Bk*4XPgX-@HXj(qzqB(le8=5D!`OGj>qo$A`Y{FbfQ zLJ`k}BBy2qESnR(&_(00bL8KjOa0E*Z>|0srqa5pS|j-0gWH*gT&hlzLZ`O)J8~>F zRhXi7a%#Y`I-fPSlSI5)K20v312q4bo5pefN%@B~rZ`m=<>buLnUcy@^)zmA0N2yb z!i|CJ1CF&CWeVP|P^tcRJIq((vD3^Q9j!*?|8BPfo$k|eclYHrZ;k>r?=&(qdn*cb z(7!*i8m*g7{fXb}19V{W?DIe$?VI<1w_dac(6{m}pT0@dex6hK>vwT^{63I(`S??R z9ryCDNnRRY#*=#V@t-om@EgZ+f;1+_-KdZ}CFUQ?ky@vr{r0JGTI zWxJb3xSgfy6ri`;oigoD&04reG!kT3%!~`#{H(1-x@Feu_P@F#j z1K#bb11Z@fa^lp&H6`m-w{H3rBMel)_jIMJ4#+4cN%>QkyLTLJ5;-;NwSz|Mr&EP@ zBaR54`+hn=%}!izl2fGJ6#M%3GN)!A*9NKgW#8bfp?&02sK(^`P1hc3iUa+!B4A&f zjlR>&e{r$j)mk^jYFs}5_oZRQ&ci>qRR1os5cgVWBXjC*^2bN36)rJ7v@QmEu{n8X z^}>BWv^xBfi$1*v25oCm@Re1ya|>?OR9VWceYO@DG%XS9aE5o{d?uq4tEwPM-IVp4wd~QLN{~&ajY0zzdyd5pvLAL?bX&Eo8w|1=d8Y zQgmyfPQhj>R;6ezgmQ^iip`loF>Iz{Q;N-*Krv*c4KDSJGu(dv67+iK4J`T@JYD@< J);T3K0RZ-c9i9LH literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_71.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_71.png new file mode 100644 index 0000000000000000000000000000000000000000..7aedf0517de05cda9784584876f9dd7f474c1e19 GIT binary patch literal 1233 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|UzpPZ!6Kid%2*dQWO{5O8pO zSD$%jx5LqQi|l3!<~3@*ZP#07>Bpca>&Bokg~5pvjc5p9;!s5+FjWCHVW`fuoiqfGvFaBK z`Ym+fnB{&*M!;(u`=%m|I|c$?hm<2VCGtc#RHMbp+cVbeDqASx#l~Xv$mZ&^&5veq zsPZ~VR-WUWSYvPJjd&!pt zXvGPc_WN>p$OCG zoiqAtH3YpB4d!?Mys3aIgBZa?xxq;G@KeAgn&+nY~?Yq(x zmENaEW-3hKNZTF3q2lBjVX*uh^FkL3cQz*lK`(}dECLuri;#l`BN~CJY9R}zDzGME zm14CUyQx@}qPY;tC0Z#qX9C5rnTky*cF*@RpopKUVl?+-DYO;N+W{=97(8A5T-G@y GGywqJGFmYJ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_72.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_72.png new file mode 100644 index 0000000000000000000000000000000000000000..87d86520e60ac8602e1f064d99936f4762ade27e GIT binary patch literal 1671 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T3%r;B4q#jUq@Pfwd|CE|MV z*Z=u`yE0Wa3Rcb8Z2DYcd!h77CPiIm$;b2K8U9@FS7Z?IVpzz6MmT6Nwg{mSn5ux9 zFjRpx5v>%>S{N6bsW3TYx1zZa#wAuMR%b3`ffb28-AR|K1WqY6t}%0LxfEelDR632;~FE+B(==O!hM=kI@Nid zB5fwAt9J)Toz{Botl_MFa8;-36sMUs$DA^Se16(G?fk}bJmQ@Eb4mMP4Q8?1=k8lR ze$KTtAguq%i#ejFE_in~&%5zIe|x-!YmkO-llwxST_3|W z)(S2(;at{c^!Bo#|F^{J|L%R*S*gdB`b*`TjA~r!5dZ{(o9P72nc;V{d{VJ&OCA6R_~l9ygmU;TpH!U!MP8e~Q!2 zSN@jy|BgK7eC`yPC7;igI@PiuTcdpc4bD^#4gdHqmA0a15o=|>FRzzgXYpE^Gxw1sE*Q?Gj;?6Uv-Hs*!E zDZT7Kjn+@U0>W&)|6V`;UWj|4$f+Xs=OG%qV}8x~_3FXRg>SwjZT;M1t~t#~Qsh+L z_swsA)qHysaBj!`V2#!w9rLzLpO-6#)e5Ct&(#NoNTkh_yY^0HT9Y=vJAX$sav?Ct zVR@ZW{?PESw{M>hAQnKwTd<#{B(xa~=OXTiKK5#}kkJ z3zMq{syY#{F6xfwad)6a8vK4OlNZM9-7&fE>>2kRsx3v~M_MjLKD`+5F5*t+@uwjg z)^;+^Dy>DY4@MQ9RG$KJilnG_f8^?7n|uG>Nrp3TU&HUuFXX*2r)Jtl<0;$ic4~gi z`P3CqH%s8^{oGn%Fa3zm+Y-NUKEJB`5E$Y=OEt=EdmJ@BJKxk5*k|mn(Vn#P)3Snv zZ>sZOp9ptUS=&4Hf1Cz$Q{-FgK5M^SUfdbq&i>X+Tw(LP_0yt=b9c(pC;#65JfC0M z^DkfJM3GZ(55{af>r|;X#k?kej|11!X$kA@g-yTvd%LDB%jRn?Zz@ha`R&QHeSP~6 zLjzu{1<)YN|DeJZTTy|{nItGhlsG6XY^I_pfI0=En1a*+C`zq<@$NrfTzVsF+Xi3- O!{F)a=d#Wzp$Pza(`Rr1 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_73.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_73.png new file mode 100644 index 0000000000000000000000000000000000000000..6aec0b87d09dbf0fad6c1191cec9fe345d62124a GIT binary patch literal 1259 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Uz@PZ!6Kid%2*2Id_y5OBTt zrvCB<<|hLE#&ve?ugZm0^o+O6c+Gske|kHEg9c-Z5E{X-kVU`?oxo59)P$)Dtdm%! zXx75G*i41VAsdbELa3{WR*GyELK9X~u_?voOrRKsQohQhm}GknRi?ra3Ae`@bDTN@ zO8(2?r(wxGP8p5Haq&WpB>DH2Pt(I$PfYPLm8`td6Unt_$Vx%_Z z>UR~Oq(`2t_j_%nDN|TgY^NwpvElP@N^lWcxTHkZHzKkX$gokcZg*1=^lAyx5cIki zv%5TgzpK!~luVZvA)sylc~YN$;81ls`Ke(^`=y2A9IEcEpU!Qy(&Si}a*Jzku!-Bc z%Nw&eR8@l$y)@=JcLoHR3BD8RuD9E-Hw~!mr$Jeg=9Gxti?6*ul^LMXDs(x;MPpTX z+C~vCpUJoVr)u8|7x7x?qS1OOq%)u^#Z_asOVU;OIG|e$ee~n!@q)@NaQ1pp$`qpY(3xn|*cMAV;gO z4*-UXkg>1Y-*b9`!d?rHm}IUJ@dVij^6tbM%PA{2mQ+m$NSb95I!jH^>++J7mpGqu zEDhj#dZF~^IT@f!`uFzj-uOkghhu5xrynbeOv?6MmtJV%D`y)Tb`%&y8jGDQje&l> z_U^>jYBvKxuMbVi6F5{G0+=ue1}9F1Dd+@-DxgkGRbZXOD#d1ZLqHV=W=aDlVr+>L zk+u;mtf_n<3qk>cg;gm=DhI14S}B?{Z`>4@G4j!LSQeB8EW{W*UHx3vIVCg!0H(iT A!~g&Q literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_74.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_74.png new file mode 100644 index 0000000000000000000000000000000000000000..a252832b46e1470498f802fd60eb92f2901a50c3 GIT binary patch literal 1637 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|T3mr;B4q#jUq@cTT!(AmHHm z@4x@;mu%m}_!Ibi%BM23i>1o>FK}tPF3(U`8p+Dw#Hla^o#0Sy2w*}ZFjYBmVyXgb zB33E7wNR&EGZm{+G#5g-L@UMSOrRJxQ?V(<=1ia%hSCEa1~K3NaV(v?_^MyvSKE8G z59a-wxkJx7M|pO(#o~~F-r&a)=jrF;x$@>G`eM$1UudQ zm@T+a#A~5W(E_>uwYL|2)tI7mQ*YW`r=8W+oKJUu-TufFsMNWG`)VXB z{Vba=dW!M>WscN3jq?6J7omlFc7875O`ST|KI!jTz5`nVl%~utpO?3AO&J5nQV*`D z4Z#!7Tozq;CbADGqhB`f)WS9Y_D&AyS`xsO8l|y2=9tP9C(SAC^UKovZ_V2`y^FmO zB*%BF(a8Dc&!h^F`(zAeoskKhS1^BV{9d4g+TYsTT)fzN|2giZ+~>;YSo-#_2@vCY zIz4c)b#cq5)4R-rCj{tOZ&+k~|e^uEMc2pzF!A;NQ#t_h%~ql06+=tGF$IYiU5-&glpC*t&|Gs$MT> zDb;Jo2DB%-{nOdk+)sZ6tc%(QRO7*R*FO8vy?G1Q)W`shk^6XeMrSoJuv<6%J-4xH zrrJBvQ|oR!X!NQbo@Sl-=-w&$39IW)%rq(}Nbd_+)&dGLpxPjfev7yFw&nn1`}@V~ zab7Zv}<;)wM(ci*c*R;bsGOGxs!9#ZGb7jDbiw! zV84Zh=A_m3AvVUx9V4IB`qT*}v|2Cr<9u@Y?Z(gdxtCsi^69(M6wB{7|Gzi&<8)rG zp2YQZ;o_51-@9vko`0w!OT-1}3ZNbSw$?8<PB{mB8>cF2DH!NKulj-aZ5 z@Y#v4kFI0H$W6f9jV4HLn=Kt=73Z3qJGwqWaQ(~Vu!*V`l1_3XIg)C@PE}jGmm{ZnVQ(i9&4 zr&kmFx}H4$DhO1mW0g74MMLn^j~^W>PMrZ=Do!WY6#|VATFBEs!9!^Z&`=NoV}0p8 z@@{?=x2n_0Z3}(oHahDIcrBFqdUlR=c5#pZ(4wXHzxv(UpL`W0Tw8Tv`&Y|$p@k`b zDyO7pmt^QWc~)vzzukXY*wpEy+QK(m{x4tG3pD=Y@m024%QlJto%6POil}^^;*^&5 zO-c@zoi(R9o%|56%w>_*3!vc~sW}=zho$@u_-8FPHJ`r&=`pOHHIHgw%beD_9_R6B$g}F*V1A!q1GGngt&Z=HNej%@xAPrkzE>)+U zT6UT0^QvdLXtZwn^Wff*`E3H8K)K`pwH{xcx#mwb&=ox#N1yCfp7O_X%H{NCpc!wO z6en<~KH5>?$D#V;xzYqD&V~Rc4plUQ!HH903Oa$I3aklT6<8-WrI-eiq!i7CFfKMz xVRFc>!0Jq=Oct!-$QogW5o-}pJ&MxId&gH;>zMtQDgu^M44$rjF6*2UngAiWXm0=j literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_76.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_76.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a9c86519580651dcba150e34e92eba39424d3b GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Selr;B4q#jUqDB8!?GcpMJy z{J-=eTZgNG$K}|k@sC$561PldesIBniD4m&fEPN^BIKaKh(=(lTF8Q_3ap7(rRdf| zor29&tV+>b2;~y36q_@FV%SW@rWBhqfnpd+r~PJ?d>*ebg(LZ4M%v#P*|f%hPlqRP zs5*5zh;g(9C{3Bt*$yPP^gQYL{#wYZWzw;UHJ|^6&r)~tJnT{TQD>ox#>NW=i^FGX zJ9T>8tJ}9zX-dSi2gN(o1if^MKSZ7pTX@7Ya~p@Mp4^!*jg4nO;uDYL03|oy1gcDn z-!16Xaw!JH&lUoj)e0icUX5uL;_d|shmtxqlMJRvCjKxwwy#Wiicjy; zsU9i&=L3yil44*Sx6ZRgXrs(ObD)D}tYy-i!l8P(>E_dPwuLIDa}=g9IB_-vFmb4& z5kO(E914M<3ap7}r6^`0%*SRbHl=7TgmH;giq)C4_WYj{eBozjv$Sv6s0S=i7(8A5 KT-G@yGywo)vp$jl literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_77.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_77.png new file mode 100644 index 0000000000000000000000000000000000000000..c881da333dfc19df88355f7d381bb62c3da93c4a GIT binary patch literal 1570 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VPet5>xK`d5fqU+~bMOm+YGCc_I4`xu9!r;V-Ml=L4aj2pZn5ux9 zFjRpx5v>%>S{N6bsW3TYx1zZa#wAuMR%beK!i+(71y-fV3J{twl-_)@#O8fHqmyRO zbQk079pQ7MpIdz25fUF`!xZ`WgTrxa4mJ1bwpKd36K#G_lrgFl+^PWjn*I) zb~fY7lbtob&o5v2M)G9X!aKGdPCsu}cFuX=G&6l2=hLGT&q%fT?_2M!;eJ?iij(FP zPIh07WGBheqY6`g9*fcF-m_^gPwF)Fv@bvVE2>-LR-e4I@QhKy#f4|S9XYdMR{Y<8 z8hgVg>pEAyifH+CMt*xskVfmKAD{lueSG#`#O6I;H@>n>UihZ`=3Tuh=5~D-PkS#E z@%rqial7r)w*NO~KV3Z6DbrMQifjDUe{$c?&aXKkb!uX=z^QqwJs0lz5gMiOxZhEu z^-@Eu)QLBfBQ#>mxR(aVaX#?{ve&8s#ar7x9rK)%oBVj@V~8f5l0QH{08y@U}{^+of|#_r4K3)wFO+bwG}W_1(@5ud{%@3(`<``gu})nb%#hg^?<)n;bOW zy3bUeV!p3qX1Y_P-4wHTw$i6A^0S28yXd8H)W}sMzlML!qh%7t^XIIRI`yjMQ&YgL zexr1a#Y)*gpF3IpI8sxa<0L74>crI*8%4aDEhSG}e{U%FJIqo0-FBdRG9CC?f;1l2 z{XZ43>y4P#!aE|TVkhr-6_K(lcJ0+A0aahUKcoQNZ!*8-)2r|U6J^tL?##|Fn*Sqv zX8>1f_rbZ5qFkweq9vSOZrUBHVSJ?M=+b!s&pMvGu-rCF#EW@vWfRBKT@LGh%$2q8 zRi5PQw6l8Z#?PIhmEP-4IIR0syV!cp?-Ppxrg1zyb=qj*9qWsJ@BaUIcYZTtTfnsb zr*Bp{YCJ!@?Nj#gr;B4q#jUq@FA6p*2)G9R z%9pZExZ-%A_W7A542IR4>r^sj8x}s}U}zC?&|pL(1iTm)vY-)|s#=6FRe?1TtrX2# zC>N`#*p#BV5XL1|DK=*U#bCxDhX6LESe?0$1&h*2Ugq1+)>=wG*O0@pQxvJE%p0F{e)UGE4eddCpX*O?mx(hqb+kVfmJt%_5eG^cFy1UhGn zuM$vsuFygkjaCqm?9>^MG{g0%8OW4?TWSzfnt=|H+b!r-C#rE<#i?`QHear#Kq05h z*++84yrgG<*e}l?b&+5AHrPodV1=ioa@nKb0^O~4eG8y zCkQQ^Bjs`bh@(cQ>?iBSFS{pms0KRMnfKHkm07st$b$71KNmP^2%b9d|FxJG&{dC_ zGiL)G7$gJK_~dkemHB&3tf7xRm10XII1)5ArPvY)P>fimSP}^+8)7pRn^NMF9<@FH cY6rtYu@94Ozh9>aENd7%UHx3vIVCg!0J!NussI20 literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_79.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_79.png new file mode 100644 index 0000000000000000000000000000000000000000..46289c1522615f1587201ff8c1353714775a14dc GIT binary patch literal 1487 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V zRe^O9s}#*z7#EwVFgawS(On32HPK3u%|d9xYAQCR*qjLz!=m*3Z`Szg|E2f&m-qW$ zu_%-O&-HuH*FS=%B%Af8IB8CCihQ;}z-yt2ddnrpi(eXmOcAezI+Xz-Rt7CW8oF{V zpFTNGten7^dhdtN?fSV&I#ZgRc1oRFao<;?HAtg%(^;1qrD;HOjsfb z%bm$7(^PZHVYQ?%op7hfubYDxnp|%wdhmdAX#m&K0I5Ap8~;2h-Sx*bPGfEv_tJo6 z?VE0=dOKy#<9zyn@eE(;b?%3)m$HDS8>L9^i+|j*K8$OrrP`Fk?1n~Dme;VyYMeD( zD01rfKDWr)Mchj-=Pfi5+@5!MZs=m5=~tHoOp`w$d%N)YmM9IdDemo?KD&s6{3UE? zGv%&&)%4#=Tu<)+wdF{in*Sdtvt<_0&wrkq0zI@=4eYB}jsE!9y}$qf^2ER0KY6}e z&}*TLw3qqO8{(%l`ESgsx}`gX+4|mg|96QqLHf^bPyA|Z{CIP^b!*YNtxKIM9W?It z8`WEHR>}s3o|9z7hkySpop$D18;37G=BeS%Q*gxk=ta{6*p8-Z;rkbXF~uJhbkJu;KZpg1)ac91=fVF3ak^G zQcMF$Qi|q67#EwVFgavbV09*?o?jZvK!p7VBKI+f3GH=%6V7%7SWq)~y85}Sb4q9e E0PA||sQ>@~ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_8.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_8.png new file mode 100644 index 0000000000000000000000000000000000000000..330e7b3ab83305e6105b77e4302a8c54316ce58a GIT binary patch literal 1084 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|N`Qr;B4q#jUq@4{|yi^0+vD zy}#vdgW(UAHFFz9Cis5&_whQ@gH=8Z3R4)IIMIlP045GqGy+o$ zVlx#chwN4~7s9y2D#hwdCr+3#$gaSu6j=d66E>wj{|~NyZk(&!BDAoFBh~ANpjXSL zr@xh_a4ZerQgzat0z@3D{R=-Vu*g>g3A(jkisMk_yH9}l_Q~F$@o@Q%Z%!J8xQL&> zKkU_a*8tiWgh|Nk+biG&Bi^V^v8Z{|8emn^p0D2`M1bfA>TG}i;caWcBV2^hqYsng zI3I>eaDe=XL4bn{TWA5r5W$IHVO2_e9AHhW*piCE6g36`FNTFIXoQ0XV~Y?PfvF0p w2}2cF6VXc1tc7v0nF^Cbb}Pb#3$C-(uiJQEZ;f6SuvB31boFyt=akR{00kBzGynhq literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_80.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_80.png new file mode 100644 index 0000000000000000000000000000000000000000..03b332dc2e52c9e0c03041d6c514fed03b7f474b GIT binary patch literal 1086 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|N`Ir;B4q#jUq@59YEc@VFkl zUw`=mqxykKw#vDTA5ZB&o0P&>Afn75;Ki_z1&wgfU~CaWBQR9~HDRa%Ya&`Hnzb-4 zHdA48$Zkb*A&g6`QmoEg$O1D4*%eroA}c^>!lrar{lk?%eg5uDKHMU-P{a#}T7ooM zVN9WgF-n~QMT!!8It`pU1C*u!iKJy5OP6lDvd$Bz!Nk8ss5^HahpO1^&C&~9G|mbw zJW{k8T6amb4`}HONvF)0x_f6TPKl^Gp9iv5A876SSuQ}$o1HW^{z+>M zNcw5J8)WUAGoBiP3^9{ARGl=Z0EtXD4ppTGV5OgdmN9_|pdpiv8P52pujnEKbagC9 z^-HiCAWzT>WCtwNh>bCzdSaDgiw2+=%tnOWEkan8A}c^>B3danX9C5rnTky*!bTJp gu}Wdi{E^K3xB2nfiiE;KV7b8H>FVdQ&MBb@0JaAj?*IS* literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_81.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_81.png new file mode 100644 index 0000000000000000000000000000000000000000..e5680dda22362a175957705c914cd562a2203087 GIT binary patch literal 1081 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|N_#r;B4q#jUq@4)(Gr@UR>_ zX`gw5!Hy%cY-$PPn>8<5&!;jLhzK)qs5S&Jp%DsG7@RoK2uxKRs+g+4nuu14W-XM9 z)l_Us(Od}Q5~~!OGl60-V~|4tn^LUKbmGLOGh;}WYBn=^r8Fk_HI0Gm>*&UE6$Q0jERv-0nI_LffaCSGId&jtRM~Fu!SOC3q?+?O5Tti z(;B4GTJ%umUX+--gEHv2<)V=?W^R~Yy zH=PpjTI~rmVao5xxt}YbN!|#IlbHzt(`z9QXX;gJ`CU+%)#u89dS?YYS=I%FAJUit*6i-{zE=Ieqv;?gay>m{IPb$g36K|V@3iVPwmFs)q;Y(2LUx8q>!r^c ztwoAcl;f{gaRQYt4fvOQ_1|^tWmf-|UpwN#wUqt)HoIfHog-iN&j1=UBOq=6k=Jsk zu1YiQvY8yL(Q1^dVY|iLUE}>7%d4hSCUc}-3aFAxJs05SdMyhWm_;9t)ZEWo*u(o& zcz*spj-`zJTu*-QFP!te{nN_x=J_p`8rWHliZzU7U*{|=xv4wFX{Y9t-D(?w?zp-n zU>g6^cb+zhs!CJBCOh4T literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_83.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_83.png new file mode 100644 index 0000000000000000000000000000000000000000..3f6c28bd3b928712567d8a79935825c04a70b7c8 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QHxr;B4q#jUq@1O1K|@VH)l zQ-ArgtWU^Q-&xO#RraMD{CMQWag4uVf14l!hiXFr6B?l~g~5pvjlfjJp^B*rtchr) zXx2ixSWU&I6wQS&F0o3nITI)bGX^;XuqnmrOeanZrI(&bC*S$au+T-K`B3EFoxd8D zrf{UhNVEtod@^~XfY(A1FPBdX0ytEiJR?=^ars{lP@2-hQgrln$y{TnlMffh{G8>~ z8IV+|zW#3EH4as!%Gb3sOr1K9&fOz_T?I_5e|FO-^qsZ6l3R71^qFXljXQRz33^RD zvPaOXJG=0#^ui;Ls@}M12zqUH1In%Q1lla(1td(eH;Z}c=mQ0UGz`;QE-_8lFZf>H z{a_YQHb|otq-x=p8@&NsO9OTR4Q#n&+8H3U`2@%{6Qx^^CT|Z=n&$L!mWxJfP)y8Z zpa))lb^zL9?5fcj{ifwW#hYW(qcmDUy11U6W3{(60@`#bRC5Z@0IsL+RQ-8XojN19 zdb5ERoet%mFX7cPscmCT@lT-5Dr!@%3R?UHLkIxGZK_yb0$y>o2l58Vx%)j nCMH%XRv%$Wy{Mj-FJ^RIYZv@NDtj8Ruwn3Y^>bP0l+XkK_i;(+ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_84.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_84.png new file mode 100644 index 0000000000000000000000000000000000000000..ba1683d11ac0a8dc6f51d031b5d4a54cae255aec GIT binary patch literal 1585 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V<1PZ!6Kid%2*9xPgIz~d13 z@Bi}Kx#Dw|HRwcNvNX>BXqJ26M^cc}I(>$JB{x|aoH!Mxpc5Rb4FODO1g0t{PE1u` zO~fiiw-)LYY^GvWisnKnmuRKfoCy@eW-2zN*qjLz!%*s6cB=Hfyuy@25hioyI_;~T z?|*B$_J7W$%+Gc-J88W2UMO4XO%2~GDbdA+=8|EML*I298y6NEp&eS)ZdY@A?rZ{DqM&{gB%lTg) zzdvABvD3>lW!h8bzDpJMD)!Uhjmps2efL9ky7Z=P;Tq4^sYSPK`r8ou{ZT~W?e}@@ zAoZCSZ&R;hgH5x>I_YZl)G-gPg&pYcpl8 z+V|O4PrjPk8*nbxmn-#i?yD;A3wy(MZg}|g0IsD0)8x0yE`0N+)({vb zi=8T8HOAOZ3Er2G{VH{P03YYmlkA_n{%-k{zRy-{jaqAvM(d{;hS9R8tmpR>#jg*L zI>I}>A@(4hYF6`N{|1!{+uGAzA?fvFrAI;pZMay3_ zKQueqDbqmMDe^Br$8IIb()zTp6kr$!X^68uJE^)T;NSbNY3tn1Y6Jb}+W6;ft?9y^ z&e(6MyDL?vyk$3iR9aF~@cy00KFRiux23?)a+)b~Ds=Mh%Re}lUR@F(SHl(~dFm>V zf5XM@P;L}3_N3cCP1*clRY020yS&Gnw5RCpZoR~izvGFp*TNE@{tQe^SRw7jVZZKGrt8{bHr z@>>6VdwcH>KbeIhXAU!IPDyVma&l-1(g<$a`D^R0p40Wd$@`{V1qRwWE_HCGz?NZ% z&a51&L@UL}fe@Y4&euRwiT06GrZ`3A3Rb@(+kc>NALHTNwc+^@yeENG0fVQjpUXO@ GgeCyerZJNM literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_85.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_85.png new file mode 100644 index 0000000000000000000000000000000000000000..e95381f70db03f7d982d24037e5e499208ec4a85 GIT binary patch literal 1177 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QHfr;B4q#jUs38z;6Xh`2a@ z^1pS~A(o}p{%)xBfxu6B8SD(pXDKrXcrh$wK_eVA7+ZwU2uxK#O&F@cnuu14W-W}1 z%~Y5ivRlzy2;&l~6st2AvcQZ%b_G_Y$O;geuqnM{-%<8&^|$Y5{wPl2SQ@~!G(c&R zD3ihz4pk>j5V12|L(r>9S(D}aIi7_sK=#5Tt>UNu6+3Hi#<(>l_;RV*HFb0Ab6i^z z@aRx^n~^2YIcJT+hph)UO9Pd!^=z4R@brnUB0i_ifO|VWFg@gH5fa~LJjHXNfEQ4{ z^$=Xy$i(5JYz@+A6%vm#`BUtm0c3-Wd3oAHqt@H0Gc_eOax&1RcKbg7 z)hbPK(wxMx)Z-jy>eLAlAaTB(A3A|1Z&X{W2eP2(OY3?Gk@I;iK^pNte?D&lde1dE z(-)*~$~6_B30$g9C)Fn2F*KNW7pU8B?}w?*odH7I)Ycki3oU$dI8_A{3X&3DA0#Wv zqEmrdG^gap|L|JKvT%#qT4RtEK^nHZ1--;#-9()@oicr+GQo=Cb|1v??Z^VNc0T76vCyg(>I+hiXFr6B>c3%83(G z6<8CoO3|%_It81lSe2r=5XvQ5DK=*U#ju%*O(`~K0>!W>&1{ZY|39SS{nc$R@7fD* zf9iSLzFMAhX#iL1rv?$Pg(9cg>h?E45A|daI+{ z``Q^TpMGxZy%+B^(>kvuNMrjx{e^q>-v_caQ5ycg4{$BLx+H*ahNyA6-@-GMvI~K>@7cK7pYQ3*b_b`I z8=`@R=}rmtOBV84?YU6KNIUJ`oQHl2{=Y6jG|mz=c8>g+Qn7H$ERj==o0Ht;SjAX9 zi_QmnA<^2py7bGr?Vp`qwiLJDb-HOa#Xqcf-5EiUNj6CdZ+GpzKKFXT+U>KGB7hDu zWHwKJ5H5G;ot(-PC(DBL_dEC>P5vI5IeWMK(!+T`^NurzXxMTc$_mmreXh%T|6egL ze(}vfTPJOPw9Zj`%5!_;<$p`hO$UZn>AC;vQ%dXHEnig{0z+-C^Uc4@BqkoLd0ul> zlmEsnxs!nldt`hr#%tMB+6%MYS{L9~BeW103~lSOT8jR6seFoh@4v3+m59hh8Ie^=d}{9M zKwyZ7oLb=U?`yT`!WiLGq3iX5(LISf`Q@>_f5EYEw(H=2>Eg$6;BXGxob*KZ&LZ~h zz{CM`cHZrqf(!2$?%4gN`|5rspxHq8SxnjgUvCOnYxLPJ!SmC_PW`=I_kHK|u*puA zd0`@_Di@Y`O$eAJI+=Y<=j(sp;!3|ScsCK8^p-Ijd|L8f{d}c)UdyF5JAT%d?Em@t zWw=`@|B|au4g}0I(O&oGTd2nO`1Jqx{~Nx1w#Ug*XUf$3{Q=MHTQ3?H3V1Ed5%yZG z1N2an{F~6}CS0liQYYjxKiE)xuS>{5gRupPU|7f^;Dt^gD?q46R|VFIO(~{GM zh{D2VDvAQAQ?NR7Aq&w;vH7S)2&<{sl>Ye0d+g2=p-eu5o4^`?!PC{xWt~$(698H= BGYbF! literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_87.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_87.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd7d5a60298dd43b436b94a213260f62d800d76 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QHdr;B4q#jUq@8S|PA1Y8~O z|G)H%jYBa;|1_E5)ERKeZi`NjPCu0-fMyGs-mz=Hm~8HJQpDr7ij!w&z%NlY zptxE8vfLmIL9dM>UO;2Rc`BACbS(jytP517ImJ%oaH--H5x%GQ7b{HxD(~t#p4TF@ zu*8-_^=O-|svgh*aL24;Ug)A>Tc!+jWUdg9nLC+7^{&%Q0ZAacH3%#-N2&&BY-hkN zpvPK1{dV}3ZSLgx`l0{tEyewJfqwht#Q}2M)_`Sm1cAzaB^iR0I{tI?(_C literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_88.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_88.png new file mode 100644 index 0000000000000000000000000000000000000000..fe69a4e1cd75ca2f9fb4b29508634745d26042d9 GIT binary patch literal 1239 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|U!EPZ!6Kid%2*dgrwm2sk*t ztIvGKmNDVZm-Sw!j11l#;a}hOn(e{GR2Bv&PK7Dx1cz!v023O4smh5HQx#Yfu}aac zg*pYBsaTbwxe&@FS}8VX0>!YIicKjtX9C4Al&<;BzVqMzjd3kPi84|Xb6>k^c=Dwz z@5qVLcJjRF5Y~6%7(26*=SPpQt`pnZnVe3tZ#=Oh?%S@#>l*`%6edl)zJAv`&umwX zOrec_3)fV{woGzdSW$gH>-GE}0S+3O6|YYAxqtaJSF2TMqRlVMWpmYl%t;3qp82KY z)EV%|WapQ}#B)xa4l|k~xmB4G`Oy`qs4N@&HyEWX9>?ZmU>i#t_@I{a$^TjXHm-Iyjy#Kj7wRc)9!?82zuR` zqqTX_$E&~Q-fI=wXjAroi2`OTIlz z(5t1`SLcY}LKXop1~j5Y$U%bHkT zOb*#-bQeNhO|(*Evk;oFnu<*+HfI9Guqd5W^s)5&>rI?aodIqwo2owudbNCdSqUVA zG+Kogx`2o$1~Mn@+n&@4c(oM$?g1)PV)^E%A;|PwVG2hhNc4amhpJP8e2b9c27aeb zfg9`#T{zw(%eMq^V3%qR_~g$abpI647NLbAm;|aZK*MkugYFOp{7z~Hx?K0%8%ZAQ z);ee~wg>?U0WXGyENBEw4y*u5V5$OZB3dc3SqM#7O~s}Z&4n;7u}Tp(qOf4bAcp{o f0`fh-Bb({&|2v18UK)M}76c5Qu6{1-oD!M literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/ic_sensor_sound_frequency_white_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/ic_sensor_sound_frequency_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..56f5f54135f3fed26878894d2b47d71c092a548c GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!=RI8~)z2nGtSb>Md;otwv zs`Xd8*nS7Rf5WU)nd0i;b4^Hc{$DYr_yPvTUF=OI3@k4hI4&^;*j%X-aM*Y2DhnKVOooZrGl{-)>!om@7*I41qTFU1p`dPlkdXinNL4DY#07eC>|K&lzB|j w+Ke5fI_^Tlrip77{FPwvk(^T8V}FwSRq>vC9r~3MfL>$pboFyt=akR{0DIeB_y7O^ literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable/sound_frequency_drawable.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable/sound_frequency_drawable.xml new file mode 100644 index 00000000..d1a95e5e --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable/sound_frequency_drawable.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml index 41be3cb4..10abbddd 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml @@ -92,6 +92,9 @@ dB + + Hz + RPM @@ -126,6 +129,9 @@ Sound intensity + + Sound frequency + Birthday @@ -553,7 +559,10 @@ The intensity of the sound, measured in decibels (dB), reaching the sound sensor or microphone. - + + The frequency of the sound, measured in hertz (Hz), reaching the sound sensor or microphone. + + The amount of light, measured in lux, reaching the ambient light sensor. @@ -602,6 +611,7 @@ Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward—much like the expanding circular ripple made by a pebble thrown into a pond. + All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency—only loudness. @@ -622,6 +632,15 @@ \n140 dB airplane taking off + + Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward—much like the expanding circular ripple made by a pebble thrown into a pond. + + + All sounds can be described in terms of their frequency and intensity. + \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. + \n\nHumans can hear sounds in the range of 20 to 20,000 Hz. The lowest key on a piano produces a sound with a frequency of 27.5 Hz and the highest key produces a sound with a frequency of 4186.01 Hz. + + Rotations per minute (RPM) is a measure of the frequency of rotation around a fixed axis in one minute. \n\nAs your wind spinner turns, it rotates the encoder disc: @@ -891,6 +910,12 @@ Permissions notice: Enable experimental ambient temperature sensor + + Enable sound frequency + + + Enable experimental sound frequency sensor + Enable sine wave diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml index 23966376..791df9fc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml @@ -30,6 +30,13 @@ android:summary="@string/enable_sine_wave_sensor_summary" /> + + Date: Wed, 28 Mar 2018 13:34:56 -0700 Subject: [PATCH 015/587] Merge "Dismiss PopupMenu on multiwindow config change" PiperOrigin-RevId: 190824766 --- .../whistlepunk/review/PinnedNoteAdapter.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java index 8951a66f..ee3301ee 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java @@ -52,6 +52,7 @@ public class PinnedNoteAdapter extends RecyclerView.Adapter { + Context context = noteHolder.menuButton.getContext(); + mPopupMenu = new PopupMenu(context, noteHolder.menuButton); + mPopupMenu.getMenuInflater().inflate(R.menu.menu_note, mPopupMenu.getMenu()); + if (!label.canEditTimestamp()) { + mPopupMenu.getMenu().findItem(R.id.btn_edit_note_time).setVisible(false); } + mPopupMenu.setOnDismissListener(menu -> mPopupMenu = null); + mPopupMenu.setOnMenuItemClickListener(item -> { + int itemId = item.getItemId(); + if (itemId == R.id.btn_edit_note_time) { + mEditListener.onLabelEditTime(label); + return true; + } else if (itemId == R.id.btn_delete_note) { + mEditListener.onLabelDelete(label); + return true; + } + return false; + }); + mPopupMenu.show(); }); } // Notes out of range are not clickable. @@ -299,5 +296,8 @@ public static String getNoteTimeContentDescription(long currentTimestamp, public void onDestroy() { mClickListener = null; mEditListener = null; + if (mPopupMenu != null) { + mPopupMenu.dismiss(); + } } } From fd1caaf4652d066bff90c5d9ce62c831aac5b2c5 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:35:06 -0700 Subject: [PATCH 016/587] Merge "Move Fragments, Activities and Dialogs to Support Library" PiperOrigin-RevId: 190824798 --- .../whistlepunk/ActiveSettingsController.java | 2 +- .../forscience/whistlepunk/AddNoteDialog.java | 4 ++-- .../whistlepunk/AudioSettingsDialog.java | 2 +- .../whistlepunk/BluetoothDisabledDialog.java | 2 +- .../whistlepunk/CameraFragment.java | 2 +- .../whistlepunk/CardTriggerPresenter.java | 2 +- .../whistlepunk/ControlBarController.java | 2 +- .../whistlepunk/GalleryFragment.java | 6 ++--- .../whistlepunk/LicenseActivity.java | 14 ++++++------ .../forscience/whistlepunk/MainActivity.java | 12 +++++----- .../forscience/whistlepunk/PanesActivity.java | 22 +++++++++---------- .../whistlepunk/PanesToolFragment.java | 2 +- .../whistlepunk/PhotoAsyncLoader.java | 2 +- .../whistlepunk/RecordFragment.java | 2 +- .../StopRecordingNoDataDialog.java | 4 ++-- .../whistlepunk/TextToolFragment.java | 2 +- .../scalarinput/ScalarInputDiscoverer.java | 2 +- .../devicemanager/DeviceOptionsDialog.java | 2 +- .../ExpandableServiceAdapter.java | 2 +- .../devicemanager/ManageDevicesActivity.java | 8 +++---- .../ManageDevicesRecyclerFragment.java | 2 +- .../devicemanager/NativeBleDiscoverer.java | 2 +- .../ScanDisabledDialogFragment.java | 2 +- .../devicemanager/SensorDiscoverer.java | 2 +- .../ServiceParentViewHolder.java | 2 +- .../project/ExperimentListFragment.java | 2 +- .../experiment/ExperimentDetailsFragment.java | 2 +- .../experiment/NameExperimentDialog.java | 4 ++-- .../review/DeleteMetadataItemDialog.java | 4 ++-- .../review/EditLabelTimeDialog.java | 2 +- .../review/EditTimestampDialog.java | 4 ++-- .../review/ExportOptionsDialogFragment.java | 2 +- .../whistlepunk/review/RunReviewActivity.java | 12 +++++----- .../whistlepunk/review/RunReviewFragment.java | 4 ++-- .../review/labels/LabelDetailsActivity.java | 6 ++--- .../review/labels/LabelDetailsFragment.java | 2 +- 36 files changed, 75 insertions(+), 75 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java index 666443b4..98c1f3c0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk; -import android.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java index 622a2a41..569ee732 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java @@ -18,8 +18,8 @@ import android.app.Activity; import android.app.Dialog; -import android.app.DialogFragment; -import android.app.Fragment; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSettingsDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSettingsDialog.java index 2b93ff41..c2aae351 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSettingsDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSettingsDialog.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import androidx.appcompat.app.AlertDialog; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BluetoothDisabledDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BluetoothDisabledDialog.java index 8110c960..a25d7610 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BluetoothDisabledDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BluetoothDisabledDialog.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.bluetooth.BluetoothAdapter; import android.content.DialogInterface; import android.content.Intent; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java index 032631fc..a394484b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; import android.Manifest; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.hardware.Camera; import android.os.Bundle; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CardTriggerPresenter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CardTriggerPresenter.java index 312b6736..c1ad926d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CardTriggerPresenter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CardTriggerPresenter.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk; import android.app.Activity; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.os.Handler; import android.view.View; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java index 4b157c15..8e9964bf 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java @@ -15,7 +15,7 @@ */ package com.google.android.apps.forscience.whistlepunk; -import android.app.FragmentManager; +import androidx.fragment.app.FragmentManager; import android.content.Context; import android.content.Intent; import android.content.res.Resources; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java index 453d8c65..2dbed07b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java @@ -17,10 +17,10 @@ package com.google.android.apps.forscience.whistlepunk; import android.Manifest; -import android.app.Fragment; -import android.app.LoaderManager; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; import android.content.Context; -import android.content.Loader; +import androidx.loader.content.Loader; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/LicenseActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/LicenseActivity.java index bd5d59e8..d379177b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/LicenseActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/LicenseActivity.java @@ -16,13 +16,13 @@ package com.google.android.apps.forscience.whistlepunk; -import android.app.Fragment; -import android.app.FragmentTransaction; -import android.app.ListFragment; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import androidx.annotation.Nullable; +import androidx.fragment.app.ListFragment; import androidx.core.app.NavUtils; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; @@ -76,8 +76,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_licenses); - if (getFragmentManager().findFragmentByTag("list") == null) { - FragmentTransaction ft = getFragmentManager().beginTransaction(); + if (getSupportFragmentManager().findFragmentByTag("list") == null) { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(R.id.container, new LicenseListFragment(), "list"); ft.commit(); } @@ -91,7 +91,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { - if (getFragmentManager().popBackStackImmediate()) { + if (getSupportFragmentManager().popBackStackImmediate()) { return true; } else { Intent intent = SettingsActivity.getLaunchIntent(this, @@ -182,7 +182,7 @@ public void onListItemClick(ListView l, View v, int position, long id) { } private void showLicense(License license) { - FragmentTransaction ft = getFragmentManager().beginTransaction(); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(R.id.container, LicenseFragment.newInstance(license), "license"); ft.addToBackStack(license.key); ft.commit(); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java index bb54e858..9976fd6f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/MainActivity.java @@ -16,9 +16,9 @@ package com.google.android.apps.forscience.whistlepunk; -import android.app.Fragment; -import android.app.FragmentManager; -import android.app.FragmentTransaction; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import android.content.Context; import android.content.Intent; import android.media.AudioManager; @@ -253,13 +253,13 @@ public boolean onNavigationItemSelected(MenuItem menuItem) { return false; } if (menuItem.getItemId() == R.id.navigation_item_experiments) { - FragmentManager fragmentManager = getFragmentManager(); + FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); Fragment fragment; int itemId = menuItem.getItemId(); final String tag = String.valueOf(itemId); - fragment = getFragmentManager().findFragmentByTag(tag); + fragment = getSupportFragmentManager().findFragmentByTag(tag); if (fragment == null) { fragment = ExperimentListFragment.newInstance(shouldUsePanes()); } @@ -394,7 +394,7 @@ public static Intent launchIntent(Context context, int id, boolean usePanes) { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO: Do this for all possible IDs in case others have activity results. - Fragment fragment = getFragmentManager().findFragmentByTag( + Fragment fragment = getSupportFragmentManager().findFragmentByTag( String.valueOf(R.id.navigation_item_experiments)); if (fragment != null) { fragment.onActivityResult(requestCode, resultCode, data); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesActivity.java index 8a5e61d2..cf855e55 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesActivity.java @@ -15,9 +15,8 @@ */ package com.google.android.apps.forscience.whistlepunk; -import android.app.Activity; -import android.app.Fragment; -import android.app.FragmentManager; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -26,7 +25,7 @@ import androidx.annotation.VisibleForTesting; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.TabLayout; -import android.support.v13.app.FragmentPagerAdapter; +import androidx.fragment.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import androidx.appcompat.app.AppCompatActivity; import android.text.TextUtils; @@ -114,7 +113,7 @@ public int getDrawerState() { private static enum ToolTab { NOTES(R.string.tab_description_add_note, R.drawable.ic_comment_white_24dp, "NOTES") { @Override - public Fragment createFragment(String experimentId, Activity activity) { + public Fragment createFragment(String experimentId, AppCompatActivity activity) { return TextToolFragment.newInstance(); } @@ -131,7 +130,7 @@ public View connectControls(Fragment fragment, FrameLayout controlBar, } }, OBSERVE(R.string.tab_description_observe, R.drawable.sensortab_white_24dp, "OBSERVE") { @Override - public Fragment createFragment(String experimentId, Activity activity) { + public Fragment createFragment(String experimentId, AppCompatActivity activity) { return RecordFragment.newInstance(experimentId, false); } @@ -148,7 +147,7 @@ public View connectControls(Fragment fragment, FrameLayout controlBar, } }, CAMERA(R.string.tab_description_camera, R.drawable.ic_camera_white_24dp, "CAMERA") { @Override - public Fragment createFragment(String experimentId, Activity activity) { + public Fragment createFragment(String experimentId, AppCompatActivity activity) { return CameraFragment.newInstance(); } @@ -164,7 +163,7 @@ public View connectControls(Fragment fragment, FrameLayout controlBar, } }, GALLERY(R.string.tab_description_gallery, R.drawable.ic_photo_white_24dp, "GALLERY") { @Override - public Fragment createFragment(String experimentId, Activity activity) { + public Fragment createFragment(String experimentId, AppCompatActivity activity) { return GalleryFragment.newInstance(); } @@ -190,7 +189,7 @@ public View connectControls(Fragment fragment, FrameLayout controlBar, mLoggingName = loggingName; } - public abstract Fragment createFragment(String experimentId, Activity activity); + public abstract Fragment createFragment(String experimentId, AppCompatActivity activity); public int getContentDescriptionId() { return mContentDescriptionId; @@ -410,7 +409,8 @@ public void onSlide(@NonNull View bottomSheet, float slideOffset) { // TODO: could this be FragmentStatePagerAdapter? Would the fragment lifecycle methods // get called in time to remove the camera preview views and avoid b/64442501? - final FragmentPagerAdapter adapter = new FragmentPagerAdapter(getFragmentManager()) { + final FragmentPagerAdapter adapter = + new FragmentPagerAdapter(getSupportFragmentManager()) { // TODO: extract and test this. private int mPreviousPrimary = -1; private Runnable mOnLosingFocus = null; @@ -579,7 +579,7 @@ private void setCoordinatorBehavior(View view, BottomDependentBehavior behavior) } private void setExperimentFragmentId(Experiment experiment) { - FragmentManager fragmentManager = getFragmentManager(); + FragmentManager fragmentManager = getSupportFragmentManager(); if (mExperimentFragment == null) { // If we haven't cached the fragment, go looking for it. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesToolFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesToolFragment.java index 993385c2..b020ea1f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesToolFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PanesToolFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; import android.app.Activity; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.os.Bundle; import androidx.annotation.Nullable; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PhotoAsyncLoader.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PhotoAsyncLoader.java index cb2bcca6..5856e94a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PhotoAsyncLoader.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PhotoAsyncLoader.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; -import android.content.AsyncTaskLoader; +import androidx.loader.content.AsyncTaskLoader; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java index 8260f52a..897ba4b0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk; import android.app.Activity; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.content.Intent; import android.graphics.Rect; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/StopRecordingNoDataDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/StopRecordingNoDataDialog.java index b61070fb..31657f40 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/StopRecordingNoDataDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/StopRecordingNoDataDialog.java @@ -16,10 +16,10 @@ package com.google.android.apps.forscience.whistlepunk; -import android.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; /** * DialogFragment for when recording fails to stop. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/TextToolFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/TextToolFragment.java index 3a83e681..4dd326ea 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/TextToolFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/TextToolFragment.java @@ -18,7 +18,7 @@ import android.annotation.SuppressLint; import android.app.Activity; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.os.Build; import android.os.Bundle; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscoverer.java index cd76a84a..eed50e8b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputDiscoverer.java @@ -15,7 +15,7 @@ */ package com.google.android.apps.forscience.whistlepunk.api.scalarinput; -import android.app.FragmentManager; +import androidx.fragment.app.FragmentManager; import android.app.PendingIntent; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java index e5c0b8ec..401cd53f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; import android.app.Dialog; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.app.PendingIntent; import android.content.DialogInterface; import android.os.Bundle; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java index 0b9ce61f..a6848ebf 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java @@ -15,7 +15,7 @@ */ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import android.app.FragmentManager; +import androidx.fragment.app.FragmentManager; import android.os.Bundle; import androidx.annotation.NonNull; import android.util.ArrayMap; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java index b40099fd..09819834 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java @@ -17,9 +17,9 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; import android.app.Activity; -import android.app.Fragment; -import android.app.FragmentManager; -import android.app.FragmentTransaction; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; @@ -118,7 +118,7 @@ public boolean onCreateOptionsMenu(Menu menu) { } private void setupFragment() { - FragmentManager fragmentManager = getFragmentManager(); + FragmentManager fragmentManager = getSupportFragmentManager(); Fragment fragmentById = fragmentManager.findFragmentById(R.id.fragment); if (fragmentById != null) { mManageFragment = (ManageDevicesRecyclerFragment) fragmentById; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java index 20a0070b..645c5dc4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.recyclerview.widget.DefaultItemAnimator; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java index 3c9184e3..7620a834 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import android.app.FragmentManager; +import androidx.fragment.app.FragmentManager; import android.content.Context; import android.graphics.drawable.Drawable; import androidx.annotation.VisibleForTesting; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java index 467561e8..62e45128 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; import android.Manifest; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.bluetooth.BluetoothAdapter; import android.content.Context; import android.content.Intent; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java index 50c8d821..071e6b86 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import android.app.FragmentManager; +import androidx.fragment.app.FragmentManager; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java index b78664e0..ac0b7f5b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; import android.annotation.TargetApi; -import android.app.FragmentManager; +import androidx.fragment.app.FragmentManager; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java index fd6b4d38..64ed7352 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.project; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java index 1f610d7f..81507f9a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.project.experiment; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.app.TaskStackBuilder; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java index e856c78c..8279dbab 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java @@ -16,9 +16,9 @@ package com.google.android.apps.forscience.whistlepunk.project.experiment; -import android.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java index 244aceba..df8e6cbd 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java @@ -16,8 +16,8 @@ package com.google.android.apps.forscience.whistlepunk.review; -import android.app.AlertDialog; -import android.app.DialogFragment; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java index 1598e792..6a7206e6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.review; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java index 8211ecbe..9a173c3d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java @@ -16,9 +16,9 @@ package com.google.android.apps.forscience.whistlepunk.review; -import android.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import android.view.KeyEvent; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java index a5cdd283..ff346933 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.review; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Intent; import android.os.Bundle; import androidx.annotation.Nullable; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java index f58d3180..59c124e1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.review; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -65,14 +65,14 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_run_review); mFromRecord = getIntent().getExtras().getBoolean(EXTRA_FROM_RECORD, false); boolean createTask = getIntent().getExtras().getBoolean(EXTRA_CREATE_TASK, true); - if (getFragmentManager().findFragmentByTag(FRAGMENT_TAG) == null) { + if (getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG) == null) { RunReviewFragment fragment = RunReviewFragment.newInstance( getIntent().getExtras().getString(RunReviewFragment.ARG_EXPERIMENT_ID), getIntent().getExtras().getString(RunReviewFragment.ARG_START_LABEL_ID), getIntent().getExtras().getInt(RunReviewFragment.ARG_SENSOR_INDEX), createTask /* create a task when going up */); - getFragmentManager().beginTransaction().add(R.id.container, fragment, FRAGMENT_TAG) - .commit(); + getSupportFragmentManager().beginTransaction() + .add(R.id.container, fragment, FRAGMENT_TAG).commit(); } } @@ -91,7 +91,7 @@ public void onRequestPermissionsResult(int requestCode, String permissions[], @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - Fragment fragment = getFragmentManager().findFragmentById(R.id.container); + Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container); if (fragment != null) { fragment.onActivityResult(requestCode, resultCode, data); } @@ -99,7 +99,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onBackPressed() { - Fragment fragment = getFragmentManager().findFragmentById(R.id.container); + Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container); if (fragment != null) { // If the edit time dialog is showing, make it hide on back pressed. EditLabelTimeDialog editLabelTimeDialog = diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java index 7f4e7845..2da4576a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java @@ -16,8 +16,8 @@ package com.google.android.apps.forscience.whistlepunk.review; -import android.app.Fragment; -import android.app.FragmentTransaction; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsActivity.java index be72951e..1af11d0b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsActivity.java @@ -88,7 +88,7 @@ protected void onCreate(Bundle savedInstanceState) { // and these activities, similar to RunReview transition. This may involve // supportPostponeEnterTransition();? - if (getFragmentManager().findFragmentByTag(FRAGMENT_TAG) == null) { + if (getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG) == null) { LabelDetailsFragment fragment; if (labelType == GoosciLabel.Label.TEXT) { fragment = TextLabelDetailsFragment.newInstance(getExperimentId(), getTrialId(), @@ -107,8 +107,8 @@ protected void onCreate(Bundle savedInstanceState) { finish(); return; } - getFragmentManager().beginTransaction().add(R.id.container, fragment, FRAGMENT_TAG) - .commit(); + getSupportFragmentManager().beginTransaction() + .add(R.id.container, fragment, FRAGMENT_TAG).commit(); } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java index f0ba5fc2..7934e3d7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java @@ -16,7 +16,7 @@ package com.google.android.apps.forscience.whistlepunk.review.labels; -import android.app.Fragment; +import androidx.fragment.app.Fragment; import android.content.Context; import android.os.Bundle; import androidx.appcompat.app.ActionBar; From 20fc3b10e98d920bb7ea77de385da07a2647f2ea Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:35:09 -0700 Subject: [PATCH 017/587] Enable delete of experiments and trials at all times. FIXES=68151468 Change-Id: I7a52f6c229642071ce82770b39138cd9fef0b25d PiperOrigin-RevId: 190824804 --- .../forscience/whistlepunk/project/ExperimentListFragment.java | 2 -- .../project/experiment/ExperimentDetailsFragment.java | 1 - .../src/main/res/menu/menu_experiment_trial.xml | 1 + 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java index 64ed7352..829dbe70 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java @@ -481,8 +481,6 @@ private void bindExperiment(final ViewHolder holder, final ExperimentListItem it !overview.isArchived); mPopupMenu.getMenu().findItem(R.id.menu_item_unarchive).setVisible( overview.isArchived); - mPopupMenu.getMenu().findItem(R.id.menu_item_delete).setEnabled( - overview.isArchived); mPopupMenu.setOnMenuItemClickListener(menuItem -> { if (menuItem.getItemId() == R.id.menu_item_archive) { setExperimentArchived(overview, position, true); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java index 81507f9a..cdf784e3 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java @@ -785,7 +785,6 @@ private void setupTrialMenu(ExperimentDetailItem item, PopupMenu popup) { boolean archived = item.getTrial().isArchived(); popup.getMenu().findItem(R.id.menu_item_archive).setVisible(!archived); popup.getMenu().findItem(R.id.menu_item_unarchive).setVisible(archived); - popup.getMenu().findItem(R.id.menu_item_delete).setEnabled(archived); popup.setOnMenuItemClickListener(menuItem -> { if (menuItem.getItemId() == R.id.menu_item_archive) { mParentReference.get().setTrialArchived(item.getTrial(), true); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/menu/menu_experiment_trial.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/menu/menu_experiment_trial.xml index 60b2d297..3468e2a9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/menu/menu_experiment_trial.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/menu/menu_experiment_trial.xml @@ -33,6 +33,7 @@ \ No newline at end of file From d43b2e0fc677f9ee58153588078dd3c1692f8ee9 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:35:14 -0700 Subject: [PATCH 018/587] Allow deletion in Experiment Details and Run Review, without archiving FIXES=68151468 Change-Id: I4a55d2e1da9b8880dd10720604c97497c790a480 PiperOrigin-RevId: 190824822 --- .../project/experiment/ExperimentDetailsFragment.java | 4 ++-- .../apps/forscience/whistlepunk/review/RunReviewFragment.java | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java index cdf784e3..94bc71c1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java @@ -396,8 +396,8 @@ public void onPrepareOptionsMenu(Menu menu) { mExperiment.isArchived()); // Disable archive option when recording. menu.findItem(R.id.action_archive_experiment).setEnabled(!isRecording()); - menu.findItem(R.id.action_delete_experiment).setEnabled(mExperiment != null - && mExperiment.isArchived()); + menu.findItem(R.id.action_delete_experiment).setEnabled(mExperiment != null && + !isRecording()); menu.findItem(R.id.action_include_archived).setVisible(!mIncludeArchived); menu.findItem(R.id.action_exclude_archived).setVisible(mIncludeArchived); menu.findItem(R.id.action_edit_experiment).setVisible(mExperiment != null && diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java index 2da4576a..e67b826a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java @@ -472,7 +472,6 @@ public void onPrepareOptionsMenu(Menu menu) { if (mExperiment != null) { menu.findItem(R.id.action_run_review_archive).setVisible(!getTrial().isArchived()); menu.findItem(R.id.action_run_review_unarchive).setVisible(getTrial().isArchived()); - menu.findItem(R.id.action_run_review_delete).setEnabled(getTrial().isArchived()); menu.findItem(R.id.action_disable_auto_zoom).setVisible( getTrial().getAutoZoomEnabled()); From ed7f868d38225a405a2423e062741c89c0da7de0 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:37:04 -0700 Subject: [PATCH 019/587] Initial granville merge 1/19/2018 * master: (30 commits) Change ToolTab into a static class Fix issue with recording not scrolling into view when active. Fixed issue 69924302. Extracted code that uses AudioRecord from DecibelSensor and ExperimentalPitchSentor into new class called AudioSource. This allows DecibelSensor and ExperimentalPitchSensor to work simultaneously. Changed AudioAnalyzer so that it takes the sample rate as a constructor parameter. Remove android imports from audio code so it can be transpiled with j2objc. Removed audio code's dependency on jsyn by implementing FFT. Improved pitch sensor for sounds where the fundamental frequency is missing or suppressed. Fix crash on adding photo note in Debug builds Fix double checkmark in edit time dialog. Fix non-Material error states for Note editors Update gradle plugin + gradlewrapper for ScalarApiSampleApp Avoid smooth scrolling on Experiment update, which (should?) reduce memory usage on photo taking. Use android.support.v7.widget.PopupMenu and fancy constructor with gravity to make the overflow menus over lap the "..." button that spawns them. Use visibility icons and wording in "show archived" menus Change EditText to use predictive text, swipe, and other good stuff. Use Lollipop for "setCardColor" minversion. Create AndroidVersionUtils to hold api level check functions. Bump Support Library 27.0.1 -> 27.0.2 Add a notification channel when using Oreo or higher. ... Change-Id: If9ca3ce0fbbb2cb0cbcb444553bdcba0d7120e28 PiperOrigin-RevId: 190825125 --- OpenScienceJournal/app/build.gradle | 35 +- OpenScienceJournal/build.gradle | 2 +- OpenScienceJournal/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../whistlepunk_library/build.gradle | 84 +- .../dependencyVersions.gradle | 14 + .../apps/forscience/ble/BleEvents.java | 3 - .../apps/forscience/ble/DeviceDiscoverer.java | 8 +- .../apps/forscience/ble/MyBleService.java | 2 - .../forscience/javalib/MaybeConsumers.java | 2 - .../whistlepunk/AccessibilityUtils.java | 3 +- .../whistlepunk/ActiveSettingsController.java | 2 +- .../forscience/whistlepunk/AddNoteDialog.java | 27 +- .../whistlepunk/AndroidVersionUtils.java | 51 + .../forscience/whistlepunk/AppSingleton.java | 44 +- .../forscience/whistlepunk/Appearances.java | 1 - .../whistlepunk/AudioSettingsDialog.java | 5 +- .../forscience/whistlepunk/AudioSource.java | 167 + .../whistlepunk/BluetoothDisabledDialog.java | 6 +- .../whistlepunk/CameraFragment.java | 6 +- .../whistlepunk/CardTriggerPresenter.java | 2 +- .../whistlepunk/ColorAllocator.java | 8 - .../whistlepunk/ControlBarController.java | 40 +- .../whistlepunk/DataController.java | 2 - .../forscience/whistlepunk/DataService.java | 4 - .../whistlepunk/DevOptionsFragment.java | 11 +- .../whistlepunk/ElapsedTimeAxisFormatter.java | 3 - .../whistlepunk/ExternalSensorAppearance.java | 1 - .../whistlepunk/GalleryFragment.java | 6 +- .../whistlepunk/LicenseActivity.java | 4 +- .../LocalSensorOptionsStorage.java | 1 - .../forscience/whistlepunk/MainActivity.java | 10 +- .../whistlepunk/MultiWindowUtils.java | 4 +- .../whistlepunk/NotificationChannels.java | 25 + .../forscience/whistlepunk/PanesActivity.java | 181 +- .../whistlepunk/PanesBottomSheetBehavior.java | 28 +- .../whistlepunk/PanesToolFragment.java | 2 +- .../whistlepunk/PermissionUtils.java | 12 + .../whistlepunk/PhotoAsyncLoader.java | 2 +- .../forscience/whistlepunk/PictureUtils.java | 6 +- .../PrefsSensorHistoryStorage.java | 1 - .../whistlepunk/ProxyRecorderController.java | 1 - .../whistlepunk/PublicRecorderService.java | 3 - .../whistlepunk/RecordFragment.java | 16 +- .../whistlepunk/RecorderController.java | 1 - .../whistlepunk/RecorderListenerRegistry.java | 2 - .../whistlepunk/RecorderService.java | 24 +- .../whistlepunk/RecordingDataController.java | 3 - .../whistlepunk/RunReviewOverlay.java | 2 - .../whistlepunk/SensorAnimationBehavior.java | 48 +- .../whistlepunk/SensorAppearance.java | 1 - .../SensorAppearanceProviderImpl.java | 20 +- .../whistlepunk/SensorCardPresenter.java | 12 +- .../whistlepunk/SensorInfoActivity.java | 3 - .../whistlepunk/SensorRegistry.java | 6 +- .../SensorSettingsControllerImpl.java | 2 +- .../whistlepunk/SettingsFragment.java | 1 - .../whistlepunk/SimpleBackupAgent.java | 6 +- .../whistlepunk/StatefulRecorder.java | 2 - .../whistlepunk/StatsAccumulator.java | 1 - .../StopRecordingNoDataDialog.java | 2 +- .../whistlepunk/TextToolFragment.java | 4 +- .../whistlepunk/TransitionUtils.java | 2 +- .../whistlepunk/WhistlePunkApplication.java | 25 +- .../analytics/TrackerConstants.java | 1 - .../scalarinput/EmptySensorAppearance.java | 1 - .../api/scalarinput/InputDeviceSpec.java | 2 +- .../scalarinput/ScalarInputDiscoverer.java | 4 +- .../whistlepunk/audio/AudioAnalyzer.java | 263 ++ .../whistlepunk/audio/FftAnalyzer.java | 261 ++ .../whistlepunk/audio/GoertzelAnalyzer.java | 146 + .../whistlepunk/audio/Harmonic.java | 155 + .../whistlepunk/audio/MovingAverage.java | 59 + .../forscience/whistlepunk/audio/Peak.java | 106 + .../whistlepunk/audio/SoundUtils.java | 81 + .../audiogen/AudioPlaybackController.java | 2 - .../SonificationTypeAdapterFactory.java | 9 +- .../audiogen/voices/AmplitudeVoice.java | 3 - ...oScalePitchSimpleJsynUnitVoiceAdapter.java | 7 - .../audiogen/voices/DefaultVoice.java | 3 - .../audiogen/voices/NotesVoice.java | 1 - .../audiogen/voices/PitchGenerator.java | 3 +- .../audiogen/voices/SimpleJsynUnitVoice.java | 8 +- .../audiogen/voices/SineEnvelope.java | 8 +- .../devicemanager/ConnectableSensor.java | 2 +- .../ConnectableSensorRegistry.java | 2 +- .../devicemanager/DeviceOptionsDialog.java | 2 +- .../devicemanager/DeviceParentListItem.java | 3 - .../devicemanager/DeviceParentViewHolder.java | 6 +- .../ExpandableServiceAdapter.java | 2 +- .../devicemanager/ManageDevicesActivity.java | 6 +- .../ManageDevicesRecyclerFragment.java | 2 +- .../devicemanager/NativeBleDiscoverer.java | 4 +- .../ScanDisabledDialogFragment.java | 7 +- .../devicemanager/SensorDiscoverer.java | 2 +- .../devicemanager/SensorTypeProvider.java | 1 - .../ServiceParentViewHolder.java | 2 +- .../whistlepunk/filemetadata/Label.java | 7 +- .../whistlepunk/filemetadata/LabelValue.java | 3 - .../ScienceJournalDocsProvider.java | 6 - .../filemetadata/SensorTrigger.java | 14 +- .../filemetadata/TextLabelValue.java | 4 +- .../whistlepunk/filemetadata/TrialStats.java | 2 - .../whistlepunk/intro/AgeVerifier.java | 1 - .../metadata/EditTriggerActivity.java | 1 - .../metadata/EditTriggerFragment.java | 6 +- .../whistlepunk/metadata/ExperimentRun.java | 3 - .../whistlepunk/metadata/Project.java | 2 - .../whistlepunk/metadata/RunStats.java | 2 - .../whistlepunk/metadata/TriggerHelper.java | 10 +- .../metadata/TriggerListActivity.java | 3 - .../metadata/TriggerListFragment.java | 6 +- .../whistlepunk/modules/ContextModule.java | 2 - .../modules/NativeBleDiscovererModule.java | 2 +- .../project/ExperimentListFragment.java | 6 +- .../experiment/ExperimentDetailsFragment.java | 21 +- .../experiment/NameExperimentDialog.java | 5 +- .../experiment/UpdateExperimentActivity.java | 1 - .../experiment/UpdateExperimentFragment.java | 2 - .../review/CoordinatedSeekbarViewGroup.java | 3 - .../review/DeleteMetadataItemDialog.java | 4 +- .../review/EditLabelTimeDialog.java | 6 +- .../review/EditTimestampDialog.java | 4 +- .../review/ExportOptionsDialogFragment.java | 2 - .../whistlepunk/review/PinnedNoteAdapter.java | 7 +- .../whistlepunk/review/RunReviewActivity.java | 6 +- .../whistlepunk/review/RunReviewFragment.java | 7 +- .../review/labels/LabelDetailsFragment.java | 2 +- .../labels/TextLabelDetailsFragment.java | 24 +- .../labels/TriggerLabelDetailsFragment.java | 1 - .../scalarchart/ChartController.java | 4 +- .../whistlepunk/scalarchart/ChartOptions.java | 1 - .../sensorapi/AbstractSensorRecorder.java | 2 - .../sensorapi/BlankReadableSensorOptions.java | 2 - .../sensorapi/DelegatingSensorRecorder.java | 2 - .../sensorapi/FrequencyOptionsPresenter.java | 1 - .../sensorapi/NewOptionsStorage.java | 2 - .../sensorapi/OptionsListener.java | 2 - .../whistlepunk/sensorapi/ScalarSensor.java | 3 +- .../sensorapi/SensorEnvironment.java | 6 + .../sensorapi/SensorPresenter.java | 3 - .../whistlepunk/sensorapi/SensorRecorder.java | 2 - .../sensorapi/WriteableSensorOptions.java | 2 - .../sensordb/SensorDatabaseImpl.java | 1 - .../whistlepunk/sensors/CameraPreview.java | 73 +- .../whistlepunk/sensors/DecibelSensor.java | 107 +- .../sensors/ExperimentalPitchSensor.java | 117 + .../sensors/SoundFrequencySensor.java | 209 - .../res/drawable-hdpi/frequency_piano_1.png | Bin 520 -> 743 bytes .../res/drawable-hdpi/frequency_piano_10.png | Bin 608 -> 979 bytes .../res/drawable-hdpi/frequency_piano_11.png | Bin 491 -> 809 bytes .../res/drawable-hdpi/frequency_piano_12.png | Bin 659 -> 890 bytes .../res/drawable-hdpi/frequency_piano_13.png | Bin 497 -> 660 bytes .../res/drawable-hdpi/frequency_piano_14.png | Bin 647 -> 927 bytes .../res/drawable-hdpi/frequency_piano_15.png | Bin 484 -> 777 bytes .../res/drawable-hdpi/frequency_piano_16.png | Bin 488 -> 816 bytes .../res/drawable-hdpi/frequency_piano_17.png | Bin 680 -> 1015 bytes .../res/drawable-hdpi/frequency_piano_18.png | Bin 494 -> 826 bytes .../res/drawable-hdpi/frequency_piano_19.png | Bin 623 -> 849 bytes .../res/drawable-hdpi/frequency_piano_2.png | Bin 672 -> 956 bytes .../res/drawable-hdpi/frequency_piano_20.png | Bin 471 -> 825 bytes .../res/drawable-hdpi/frequency_piano_21.png | Bin 470 -> 760 bytes .../res/drawable-hdpi/frequency_piano_22.png | Bin 633 -> 999 bytes .../res/drawable-hdpi/frequency_piano_23.png | Bin 517 -> 841 bytes .../res/drawable-hdpi/frequency_piano_24.png | Bin 700 -> 1001 bytes .../res/drawable-hdpi/frequency_piano_25.png | Bin 506 -> 670 bytes .../res/drawable-hdpi/frequency_piano_26.png | Bin 681 -> 919 bytes .../res/drawable-hdpi/frequency_piano_27.png | Bin 505 -> 772 bytes .../res/drawable-hdpi/frequency_piano_28.png | Bin 502 -> 764 bytes .../res/drawable-hdpi/frequency_piano_29.png | Bin 676 -> 928 bytes .../res/drawable-hdpi/frequency_piano_3.png | Bin 509 -> 801 bytes .../res/drawable-hdpi/frequency_piano_30.png | Bin 510 -> 842 bytes .../res/drawable-hdpi/frequency_piano_31.png | Bin 608 -> 849 bytes .../res/drawable-hdpi/frequency_piano_32.png | Bin 473 -> 775 bytes .../res/drawable-hdpi/frequency_piano_33.png | Bin 467 -> 752 bytes .../res/drawable-hdpi/frequency_piano_34.png | Bin 633 -> 943 bytes .../res/drawable-hdpi/frequency_piano_35.png | Bin 505 -> 808 bytes .../res/drawable-hdpi/frequency_piano_36.png | Bin 698 -> 1009 bytes .../res/drawable-hdpi/frequency_piano_37.png | Bin 506 -> 709 bytes .../res/drawable-hdpi/frequency_piano_38.png | Bin 666 -> 975 bytes .../res/drawable-hdpi/frequency_piano_39.png | Bin 499 -> 850 bytes .../res/drawable-hdpi/frequency_piano_4.png | Bin 480 -> 766 bytes .../res/drawable-hdpi/frequency_piano_40.png | Bin 498 -> 810 bytes .../res/drawable-hdpi/frequency_piano_41.png | Bin 674 -> 925 bytes .../res/drawable-hdpi/frequency_piano_42.png | Bin 517 -> 817 bytes .../res/drawable-hdpi/frequency_piano_43.png | Bin 627 -> 853 bytes .../res/drawable-hdpi/frequency_piano_44.png | Bin 487 -> 826 bytes .../res/drawable-hdpi/frequency_piano_45.png | Bin 492 -> 819 bytes .../res/drawable-hdpi/frequency_piano_46.png | Bin 634 -> 975 bytes .../res/drawable-hdpi/frequency_piano_47.png | Bin 526 -> 822 bytes .../res/drawable-hdpi/frequency_piano_48.png | Bin 691 -> 981 bytes .../res/drawable-hdpi/frequency_piano_49.png | Bin 504 -> 746 bytes .../res/drawable-hdpi/frequency_piano_5.png | Bin 643 -> 990 bytes .../res/drawable-hdpi/frequency_piano_50.png | Bin 696 -> 1047 bytes .../res/drawable-hdpi/frequency_piano_51.png | Bin 513 -> 822 bytes .../res/drawable-hdpi/frequency_piano_52.png | Bin 493 -> 744 bytes .../res/drawable-hdpi/frequency_piano_53.png | Bin 655 -> 940 bytes .../res/drawable-hdpi/frequency_piano_54.png | Bin 507 -> 783 bytes .../res/drawable-hdpi/frequency_piano_55.png | Bin 598 -> 879 bytes .../res/drawable-hdpi/frequency_piano_56.png | Bin 469 -> 766 bytes .../res/drawable-hdpi/frequency_piano_57.png | Bin 461 -> 817 bytes .../res/drawable-hdpi/frequency_piano_58.png | Bin 612 -> 931 bytes .../res/drawable-hdpi/frequency_piano_59.png | Bin 510 -> 794 bytes .../res/drawable-hdpi/frequency_piano_6.png | Bin 483 -> 775 bytes .../res/drawable-hdpi/frequency_piano_60.png | Bin 685 -> 1019 bytes .../res/drawable-hdpi/frequency_piano_61.png | Bin 500 -> 695 bytes .../res/drawable-hdpi/frequency_piano_62.png | Bin 650 -> 952 bytes .../res/drawable-hdpi/frequency_piano_63.png | Bin 497 -> 814 bytes .../res/drawable-hdpi/frequency_piano_64.png | Bin 506 -> 817 bytes .../res/drawable-hdpi/frequency_piano_65.png | Bin 697 -> 942 bytes .../res/drawable-hdpi/frequency_piano_66.png | Bin 515 -> 797 bytes .../res/drawable-hdpi/frequency_piano_67.png | Bin 637 -> 890 bytes .../res/drawable-hdpi/frequency_piano_68.png | Bin 494 -> 712 bytes .../res/drawable-hdpi/frequency_piano_69.png | Bin 487 -> 779 bytes .../res/drawable-hdpi/frequency_piano_7.png | Bin 591 -> 882 bytes .../res/drawable-hdpi/frequency_piano_70.png | Bin 645 -> 960 bytes .../res/drawable-hdpi/frequency_piano_71.png | Bin 517 -> 829 bytes .../res/drawable-hdpi/frequency_piano_72.png | Bin 716 -> 981 bytes .../res/drawable-hdpi/frequency_piano_73.png | Bin 516 -> 750 bytes .../res/drawable-hdpi/frequency_piano_74.png | Bin 701 -> 1026 bytes .../res/drawable-hdpi/frequency_piano_75.png | Bin 521 -> 776 bytes .../res/drawable-hdpi/frequency_piano_76.png | Bin 483 -> 769 bytes .../res/drawable-hdpi/frequency_piano_77.png | Bin 674 -> 948 bytes .../res/drawable-hdpi/frequency_piano_78.png | Bin 497 -> 837 bytes .../res/drawable-hdpi/frequency_piano_79.png | Bin 627 -> 955 bytes .../res/drawable-hdpi/frequency_piano_8.png | Bin 447 -> 766 bytes .../res/drawable-hdpi/frequency_piano_80.png | Bin 459 -> 788 bytes .../res/drawable-hdpi/frequency_piano_81.png | Bin 454 -> 753 bytes .../res/drawable-hdpi/frequency_piano_82.png | Bin 628 -> 949 bytes .../res/drawable-hdpi/frequency_piano_83.png | Bin 502 -> 818 bytes .../res/drawable-hdpi/frequency_piano_84.png | Bin 688 -> 952 bytes .../res/drawable-hdpi/frequency_piano_85.png | Bin 501 -> 753 bytes .../res/drawable-hdpi/frequency_piano_86.png | Bin 674 -> 945 bytes .../res/drawable-hdpi/frequency_piano_87.png | Bin 494 -> 792 bytes .../res/drawable-hdpi/frequency_piano_88.png | Bin 510 -> 821 bytes .../res/drawable-hdpi/frequency_piano_9.png | Bin 445 -> 744 bytes .../ic_visibility_black_24dp.png | Bin 0 -> 470 bytes .../ic_visibility_off_black_24dp.png | Bin 0 -> 507 bytes .../res/drawable-mdpi/frequency_piano_1.png | Bin 328 -> 467 bytes .../res/drawable-mdpi/frequency_piano_10.png | Bin 393 -> 635 bytes .../res/drawable-mdpi/frequency_piano_11.png | Bin 307 -> 508 bytes .../res/drawable-mdpi/frequency_piano_12.png | Bin 443 -> 619 bytes .../res/drawable-mdpi/frequency_piano_13.png | Bin 315 -> 428 bytes .../res/drawable-mdpi/frequency_piano_14.png | Bin 412 -> 607 bytes .../res/drawable-mdpi/frequency_piano_15.png | Bin 295 -> 494 bytes .../res/drawable-mdpi/frequency_piano_16.png | Bin 308 -> 524 bytes .../res/drawable-mdpi/frequency_piano_17.png | Bin 445 -> 663 bytes .../res/drawable-mdpi/frequency_piano_18.png | Bin 306 -> 501 bytes .../res/drawable-mdpi/frequency_piano_19.png | Bin 411 -> 554 bytes .../res/drawable-mdpi/frequency_piano_2.png | Bin 434 -> 638 bytes .../res/drawable-mdpi/frequency_piano_20.png | Bin 297 -> 520 bytes .../res/drawable-mdpi/frequency_piano_21.png | Bin 295 -> 477 bytes .../res/drawable-mdpi/frequency_piano_22.png | Bin 411 -> 655 bytes .../res/drawable-mdpi/frequency_piano_23.png | Bin 336 -> 534 bytes .../res/drawable-mdpi/frequency_piano_24.png | Bin 453 -> 650 bytes .../res/drawable-mdpi/frequency_piano_25.png | Bin 329 -> 439 bytes .../res/drawable-mdpi/frequency_piano_26.png | Bin 432 -> 606 bytes .../res/drawable-mdpi/frequency_piano_27.png | Bin 316 -> 500 bytes .../res/drawable-mdpi/frequency_piano_28.png | Bin 319 -> 489 bytes .../res/drawable-mdpi/frequency_piano_29.png | Bin 436 -> 625 bytes .../res/drawable-mdpi/frequency_piano_3.png | Bin 316 -> 498 bytes .../res/drawable-mdpi/frequency_piano_30.png | Bin 314 -> 536 bytes .../res/drawable-mdpi/frequency_piano_31.png | Bin 406 -> 594 bytes .../res/drawable-mdpi/frequency_piano_32.png | Bin 298 -> 487 bytes .../res/drawable-mdpi/frequency_piano_33.png | Bin 304 -> 498 bytes .../res/drawable-mdpi/frequency_piano_34.png | Bin 412 -> 611 bytes .../res/drawable-mdpi/frequency_piano_35.png | Bin 330 -> 535 bytes .../res/drawable-mdpi/frequency_piano_36.png | Bin 453 -> 664 bytes .../res/drawable-mdpi/frequency_piano_37.png | Bin 327 -> 467 bytes .../res/drawable-mdpi/frequency_piano_38.png | Bin 436 -> 614 bytes .../res/drawable-mdpi/frequency_piano_39.png | Bin 312 -> 543 bytes .../res/drawable-mdpi/frequency_piano_4.png | Bin 305 -> 492 bytes .../res/drawable-mdpi/frequency_piano_40.png | Bin 329 -> 531 bytes .../res/drawable-mdpi/frequency_piano_41.png | Bin 444 -> 612 bytes .../res/drawable-mdpi/frequency_piano_42.png | Bin 326 -> 529 bytes .../res/drawable-mdpi/frequency_piano_43.png | Bin 407 -> 554 bytes .../res/drawable-mdpi/frequency_piano_44.png | Bin 303 -> 524 bytes .../res/drawable-mdpi/frequency_piano_45.png | Bin 303 -> 512 bytes .../res/drawable-mdpi/frequency_piano_46.png | Bin 417 -> 646 bytes .../res/drawable-mdpi/frequency_piano_47.png | Bin 329 -> 527 bytes .../res/drawable-mdpi/frequency_piano_48.png | Bin 451 -> 652 bytes .../res/drawable-mdpi/frequency_piano_49.png | Bin 325 -> 475 bytes .../res/drawable-mdpi/frequency_piano_5.png | Bin 425 -> 632 bytes .../res/drawable-mdpi/frequency_piano_50.png | Bin 432 -> 640 bytes .../res/drawable-mdpi/frequency_piano_51.png | Bin 323 -> 524 bytes .../res/drawable-mdpi/frequency_piano_52.png | Bin 319 -> 502 bytes .../res/drawable-mdpi/frequency_piano_53.png | Bin 433 -> 631 bytes .../res/drawable-mdpi/frequency_piano_54.png | Bin 317 -> 503 bytes .../res/drawable-mdpi/frequency_piano_55.png | Bin 405 -> 586 bytes .../res/drawable-mdpi/frequency_piano_56.png | Bin 294 -> 494 bytes .../res/drawable-mdpi/frequency_piano_57.png | Bin 292 -> 514 bytes .../res/drawable-mdpi/frequency_piano_58.png | Bin 404 -> 613 bytes .../res/drawable-mdpi/frequency_piano_59.png | Bin 325 -> 503 bytes .../res/drawable-mdpi/frequency_piano_6.png | Bin 297 -> 477 bytes .../res/drawable-mdpi/frequency_piano_60.png | Bin 445 -> 654 bytes .../res/drawable-mdpi/frequency_piano_61.png | Bin 314 -> 431 bytes .../res/drawable-mdpi/frequency_piano_62.png | Bin 419 -> 610 bytes .../res/drawable-mdpi/frequency_piano_63.png | Bin 319 -> 523 bytes .../res/drawable-mdpi/frequency_piano_64.png | Bin 314 -> 505 bytes .../res/drawable-mdpi/frequency_piano_65.png | Bin 449 -> 612 bytes .../res/drawable-mdpi/frequency_piano_66.png | Bin 314 -> 499 bytes .../res/drawable-mdpi/frequency_piano_67.png | Bin 413 -> 589 bytes .../res/drawable-mdpi/frequency_piano_68.png | Bin 303 -> 473 bytes .../res/drawable-mdpi/frequency_piano_69.png | Bin 306 -> 500 bytes .../res/drawable-mdpi/frequency_piano_7.png | Bin 388 -> 585 bytes .../res/drawable-mdpi/frequency_piano_70.png | Bin 418 -> 611 bytes .../res/drawable-mdpi/frequency_piano_71.png | Bin 331 -> 527 bytes .../res/drawable-mdpi/frequency_piano_72.png | Bin 458 -> 634 bytes .../res/drawable-mdpi/frequency_piano_73.png | Bin 336 -> 497 bytes .../res/drawable-mdpi/frequency_piano_74.png | Bin 448 -> 646 bytes .../res/drawable-mdpi/frequency_piano_75.png | Bin 327 -> 522 bytes .../res/drawable-mdpi/frequency_piano_76.png | Bin 312 -> 500 bytes .../res/drawable-mdpi/frequency_piano_77.png | Bin 434 -> 630 bytes .../res/drawable-mdpi/frequency_piano_78.png | Bin 306 -> 529 bytes .../res/drawable-mdpi/frequency_piano_79.png | Bin 399 -> 625 bytes .../res/drawable-mdpi/frequency_piano_8.png | Bin 278 -> 487 bytes .../res/drawable-mdpi/frequency_piano_80.png | Bin 286 -> 502 bytes .../res/drawable-mdpi/frequency_piano_81.png | Bin 280 -> 486 bytes .../res/drawable-mdpi/frequency_piano_82.png | Bin 409 -> 631 bytes .../res/drawable-mdpi/frequency_piano_83.png | Bin 322 -> 538 bytes .../res/drawable-mdpi/frequency_piano_84.png | Bin 445 -> 609 bytes .../res/drawable-mdpi/frequency_piano_85.png | Bin 310 -> 501 bytes .../res/drawable-mdpi/frequency_piano_86.png | Bin 431 -> 612 bytes .../res/drawable-mdpi/frequency_piano_87.png | Bin 303 -> 504 bytes .../res/drawable-mdpi/frequency_piano_88.png | Bin 313 -> 504 bytes .../res/drawable-mdpi/frequency_piano_9.png | Bin 274 -> 486 bytes .../ic_visibility_black_24dp.png | Bin 0 -> 309 bytes .../ic_visibility_off_black_24dp.png | Bin 0 -> 351 bytes .../res/drawable-xhdpi/frequency_piano_1.png | Bin 720 -> 1025 bytes .../res/drawable-xhdpi/frequency_piano_10.png | Bin 883 -> 1367 bytes .../res/drawable-xhdpi/frequency_piano_11.png | Bin 684 -> 1074 bytes .../res/drawable-xhdpi/frequency_piano_12.png | Bin 948 -> 1314 bytes .../res/drawable-xhdpi/frequency_piano_13.png | Bin 698 -> 961 bytes .../res/drawable-xhdpi/frequency_piano_14.png | Bin 927 -> 1358 bytes .../res/drawable-xhdpi/frequency_piano_15.png | Bin 686 -> 1116 bytes .../res/drawable-xhdpi/frequency_piano_16.png | Bin 688 -> 1118 bytes .../res/drawable-xhdpi/frequency_piano_17.png | Bin 951 -> 1448 bytes .../res/drawable-xhdpi/frequency_piano_18.png | Bin 700 -> 1131 bytes .../res/drawable-xhdpi/frequency_piano_19.png | Bin 884 -> 1229 bytes .../res/drawable-xhdpi/frequency_piano_2.png | Bin 959 -> 1390 bytes .../res/drawable-xhdpi/frequency_piano_20.png | Bin 653 -> 1138 bytes .../res/drawable-xhdpi/frequency_piano_21.png | Bin 650 -> 1084 bytes .../res/drawable-xhdpi/frequency_piano_22.png | Bin 912 -> 1426 bytes .../res/drawable-xhdpi/frequency_piano_23.png | Bin 720 -> 1189 bytes .../res/drawable-xhdpi/frequency_piano_24.png | Bin 987 -> 1454 bytes .../res/drawable-xhdpi/frequency_piano_25.png | Bin 709 -> 957 bytes .../res/drawable-xhdpi/frequency_piano_26.png | Bin 964 -> 1300 bytes .../res/drawable-xhdpi/frequency_piano_27.png | Bin 716 -> 1101 bytes .../res/drawable-xhdpi/frequency_piano_28.png | Bin 698 -> 1087 bytes .../res/drawable-xhdpi/frequency_piano_29.png | Bin 953 -> 1348 bytes .../res/drawable-xhdpi/frequency_piano_3.png | Bin 708 -> 1142 bytes .../res/drawable-xhdpi/frequency_piano_30.png | Bin 708 -> 1172 bytes .../res/drawable-xhdpi/frequency_piano_31.png | Bin 885 -> 1274 bytes .../res/drawable-xhdpi/frequency_piano_32.png | Bin 663 -> 1060 bytes .../res/drawable-xhdpi/frequency_piano_33.png | Bin 655 -> 1029 bytes .../res/drawable-xhdpi/frequency_piano_34.png | Bin 910 -> 1357 bytes .../res/drawable-xhdpi/frequency_piano_35.png | Bin 709 -> 1142 bytes .../res/drawable-xhdpi/frequency_piano_36.png | Bin 984 -> 1463 bytes .../res/drawable-xhdpi/frequency_piano_37.png | Bin 722 -> 1035 bytes .../res/drawable-xhdpi/frequency_piano_38.png | Bin 972 -> 1421 bytes .../res/drawable-xhdpi/frequency_piano_39.png | Bin 711 -> 1207 bytes .../res/drawable-xhdpi/frequency_piano_4.png | Bin 678 -> 1085 bytes .../res/drawable-xhdpi/frequency_piano_40.png | Bin 695 -> 1126 bytes .../res/drawable-xhdpi/frequency_piano_41.png | Bin 953 -> 1336 bytes .../res/drawable-xhdpi/frequency_piano_42.png | Bin 717 -> 1197 bytes .../res/drawable-xhdpi/frequency_piano_43.png | Bin 880 -> 1221 bytes .../res/drawable-xhdpi/frequency_piano_44.png | Bin 664 -> 1199 bytes .../res/drawable-xhdpi/frequency_piano_45.png | Bin 654 -> 1124 bytes .../res/drawable-xhdpi/frequency_piano_46.png | Bin 898 -> 1361 bytes .../res/drawable-xhdpi/frequency_piano_47.png | Bin 705 -> 1125 bytes .../res/drawable-xhdpi/frequency_piano_48.png | Bin 970 -> 1355 bytes .../res/drawable-xhdpi/frequency_piano_49.png | Bin 716 -> 1022 bytes .../res/drawable-xhdpi/frequency_piano_5.png | Bin 922 -> 1407 bytes .../res/drawable-xhdpi/frequency_piano_50.png | Bin 943 -> 1367 bytes .../res/drawable-xhdpi/frequency_piano_51.png | Bin 726 -> 1175 bytes .../res/drawable-xhdpi/frequency_piano_52.png | Bin 688 -> 1079 bytes .../res/drawable-xhdpi/frequency_piano_53.png | Bin 941 -> 1358 bytes .../res/drawable-xhdpi/frequency_piano_54.png | Bin 700 -> 1131 bytes .../res/drawable-xhdpi/frequency_piano_55.png | Bin 863 -> 1274 bytes .../res/drawable-xhdpi/frequency_piano_56.png | Bin 645 -> 1087 bytes .../res/drawable-xhdpi/frequency_piano_57.png | Bin 641 -> 1150 bytes .../res/drawable-xhdpi/frequency_piano_58.png | Bin 890 -> 1372 bytes .../res/drawable-xhdpi/frequency_piano_59.png | Bin 697 -> 1135 bytes .../res/drawable-xhdpi/frequency_piano_6.png | Bin 683 -> 1123 bytes .../res/drawable-xhdpi/frequency_piano_60.png | Bin 957 -> 1442 bytes .../res/drawable-xhdpi/frequency_piano_61.png | Bin 705 -> 1030 bytes .../res/drawable-xhdpi/frequency_piano_62.png | Bin 934 -> 1372 bytes .../res/drawable-xhdpi/frequency_piano_63.png | Bin 693 -> 1156 bytes .../res/drawable-xhdpi/frequency_piano_64.png | Bin 716 -> 1146 bytes .../res/drawable-xhdpi/frequency_piano_65.png | Bin 976 -> 1367 bytes .../res/drawable-xhdpi/frequency_piano_66.png | Bin 725 -> 1099 bytes .../res/drawable-xhdpi/frequency_piano_67.png | Bin 915 -> 1285 bytes .../res/drawable-xhdpi/frequency_piano_68.png | Bin 675 -> 1025 bytes .../res/drawable-xhdpi/frequency_piano_69.png | Bin 673 -> 1108 bytes .../res/drawable-xhdpi/frequency_piano_7.png | Bin 855 -> 1308 bytes .../res/drawable-xhdpi/frequency_piano_70.png | Bin 939 -> 1377 bytes .../res/drawable-xhdpi/frequency_piano_71.png | Bin 728 -> 1183 bytes .../res/drawable-xhdpi/frequency_piano_72.png | Bin 1020 -> 1383 bytes .../res/drawable-xhdpi/frequency_piano_73.png | Bin 739 -> 1104 bytes .../res/drawable-xhdpi/frequency_piano_74.png | Bin 1003 -> 1445 bytes .../res/drawable-xhdpi/frequency_piano_75.png | Bin 731 -> 1130 bytes .../res/drawable-xhdpi/frequency_piano_76.png | Bin 677 -> 1127 bytes .../res/drawable-xhdpi/frequency_piano_77.png | Bin 936 -> 1343 bytes .../res/drawable-xhdpi/frequency_piano_78.png | Bin 684 -> 1175 bytes .../res/drawable-xhdpi/frequency_piano_79.png | Bin 858 -> 1342 bytes .../res/drawable-xhdpi/frequency_piano_8.png | Bin 627 -> 1067 bytes .../res/drawable-xhdpi/frequency_piano_80.png | Bin 636 -> 1131 bytes .../res/drawable-xhdpi/frequency_piano_81.png | Bin 629 -> 1097 bytes .../res/drawable-xhdpi/frequency_piano_82.png | Bin 896 -> 1371 bytes .../res/drawable-xhdpi/frequency_piano_83.png | Bin 689 -> 1140 bytes .../res/drawable-xhdpi/frequency_piano_84.png | Bin 976 -> 1330 bytes .../res/drawable-xhdpi/frequency_piano_85.png | Bin 697 -> 1096 bytes .../res/drawable-xhdpi/frequency_piano_86.png | Bin 939 -> 1359 bytes .../res/drawable-xhdpi/frequency_piano_87.png | Bin 684 -> 1116 bytes .../res/drawable-xhdpi/frequency_piano_88.png | Bin 711 -> 1119 bytes .../res/drawable-xhdpi/frequency_piano_9.png | Bin 618 -> 1061 bytes .../ic_visibility_black_24dp.png | Bin 0 -> 593 bytes .../ic_visibility_off_black_24dp.png | Bin 0 -> 629 bytes .../res/drawable-xxhdpi/frequency_piano_1.png | Bin 1249 -> 1825 bytes .../drawable-xxhdpi/frequency_piano_10.png | Bin 1487 -> 2289 bytes .../drawable-xxhdpi/frequency_piano_11.png | Bin 1167 -> 1868 bytes .../drawable-xxhdpi/frequency_piano_12.png | Bin 1589 -> 2155 bytes .../drawable-xxhdpi/frequency_piano_13.png | Bin 1177 -> 1675 bytes .../drawable-xxhdpi/frequency_piano_14.png | Bin 1578 -> 2243 bytes .../drawable-xxhdpi/frequency_piano_15.png | Bin 1171 -> 1813 bytes .../drawable-xxhdpi/frequency_piano_16.png | Bin 1181 -> 1888 bytes .../drawable-xxhdpi/frequency_piano_17.png | Bin 1596 -> 2333 bytes .../drawable-xxhdpi/frequency_piano_18.png | Bin 1175 -> 1849 bytes .../drawable-xxhdpi/frequency_piano_19.png | Bin 1507 -> 2043 bytes .../res/drawable-xxhdpi/frequency_piano_2.png | Bin 1617 -> 2308 bytes .../drawable-xxhdpi/frequency_piano_20.png | Bin 1112 -> 1918 bytes .../drawable-xxhdpi/frequency_piano_21.png | Bin 1107 -> 1758 bytes .../drawable-xxhdpi/frequency_piano_22.png | Bin 1516 -> 2319 bytes .../drawable-xxhdpi/frequency_piano_23.png | Bin 1202 -> 1901 bytes .../drawable-xxhdpi/frequency_piano_24.png | Bin 1619 -> 2351 bytes .../drawable-xxhdpi/frequency_piano_25.png | Bin 1208 -> 1687 bytes .../drawable-xxhdpi/frequency_piano_26.png | Bin 1580 -> 2151 bytes .../drawable-xxhdpi/frequency_piano_27.png | Bin 1182 -> 1774 bytes .../drawable-xxhdpi/frequency_piano_28.png | Bin 1192 -> 1837 bytes .../drawable-xxhdpi/frequency_piano_29.png | Bin 1605 -> 2241 bytes .../res/drawable-xxhdpi/frequency_piano_3.png | Bin 1232 -> 1902 bytes .../drawable-xxhdpi/frequency_piano_30.png | Bin 1203 -> 1938 bytes .../drawable-xxhdpi/frequency_piano_31.png | Bin 1522 -> 2138 bytes .../drawable-xxhdpi/frequency_piano_32.png | Bin 1130 -> 1794 bytes .../drawable-xxhdpi/frequency_piano_33.png | Bin 1127 -> 1721 bytes .../drawable-xxhdpi/frequency_piano_34.png | Bin 1520 -> 2243 bytes .../drawable-xxhdpi/frequency_piano_35.png | Bin 1204 -> 1896 bytes .../drawable-xxhdpi/frequency_piano_36.png | Bin 1630 -> 2317 bytes .../drawable-xxhdpi/frequency_piano_37.png | Bin 1206 -> 1744 bytes .../drawable-xxhdpi/frequency_piano_38.png | Bin 1603 -> 2309 bytes .../drawable-xxhdpi/frequency_piano_39.png | Bin 1207 -> 1981 bytes .../res/drawable-xxhdpi/frequency_piano_4.png | Bin 1157 -> 1765 bytes .../drawable-xxhdpi/frequency_piano_40.png | Bin 1199 -> 1836 bytes .../drawable-xxhdpi/frequency_piano_41.png | Bin 1604 -> 2178 bytes .../drawable-xxhdpi/frequency_piano_42.png | Bin 1231 -> 1960 bytes .../drawable-xxhdpi/frequency_piano_43.png | Bin 1514 -> 2033 bytes .../drawable-xxhdpi/frequency_piano_44.png | Bin 1143 -> 1930 bytes .../drawable-xxhdpi/frequency_piano_45.png | Bin 1146 -> 1877 bytes .../drawable-xxhdpi/frequency_piano_46.png | Bin 1521 -> 2295 bytes .../drawable-xxhdpi/frequency_piano_47.png | Bin 1212 -> 1903 bytes .../drawable-xxhdpi/frequency_piano_48.png | Bin 1624 -> 2275 bytes .../drawable-xxhdpi/frequency_piano_49.png | Bin 1230 -> 1834 bytes .../res/drawable-xxhdpi/frequency_piano_5.png | Bin 1575 -> 2335 bytes .../drawable-xxhdpi/frequency_piano_50.png | Bin 1600 -> 2294 bytes .../drawable-xxhdpi/frequency_piano_51.png | Bin 1226 -> 1965 bytes .../drawable-xxhdpi/frequency_piano_52.png | Bin 1181 -> 1775 bytes .../drawable-xxhdpi/frequency_piano_53.png | Bin 1593 -> 2256 bytes .../drawable-xxhdpi/frequency_piano_54.png | Bin 1194 -> 1861 bytes .../drawable-xxhdpi/frequency_piano_55.png | Bin 1517 -> 2169 bytes .../drawable-xxhdpi/frequency_piano_56.png | Bin 1124 -> 1817 bytes .../drawable-xxhdpi/frequency_piano_57.png | Bin 1120 -> 1930 bytes .../drawable-xxhdpi/frequency_piano_58.png | Bin 1513 -> 2232 bytes .../drawable-xxhdpi/frequency_piano_59.png | Bin 1199 -> 1865 bytes .../res/drawable-xxhdpi/frequency_piano_6.png | Bin 1159 -> 1867 bytes .../drawable-xxhdpi/frequency_piano_60.png | Bin 1610 -> 2386 bytes .../drawable-xxhdpi/frequency_piano_61.png | Bin 1202 -> 1774 bytes .../drawable-xxhdpi/frequency_piano_62.png | Bin 1609 -> 2278 bytes .../drawable-xxhdpi/frequency_piano_63.png | Bin 1193 -> 1884 bytes .../drawable-xxhdpi/frequency_piano_64.png | Bin 1219 -> 1951 bytes .../drawable-xxhdpi/frequency_piano_65.png | Bin 1644 -> 2245 bytes .../drawable-xxhdpi/frequency_piano_66.png | Bin 1227 -> 1842 bytes .../drawable-xxhdpi/frequency_piano_67.png | Bin 1552 -> 2145 bytes .../drawable-xxhdpi/frequency_piano_68.png | Bin 1160 -> 1737 bytes .../drawable-xxhdpi/frequency_piano_69.png | Bin 1156 -> 1826 bytes .../res/drawable-xxhdpi/frequency_piano_7.png | Bin 1477 -> 2223 bytes .../drawable-xxhdpi/frequency_piano_70.png | Bin 1569 -> 2265 bytes .../drawable-xxhdpi/frequency_piano_71.png | Bin 1233 -> 1934 bytes .../drawable-xxhdpi/frequency_piano_72.png | Bin 1671 -> 2223 bytes .../drawable-xxhdpi/frequency_piano_73.png | Bin 1259 -> 1892 bytes .../drawable-xxhdpi/frequency_piano_74.png | Bin 1637 -> 2353 bytes .../drawable-xxhdpi/frequency_piano_75.png | Bin 1230 -> 1869 bytes .../drawable-xxhdpi/frequency_piano_76.png | Bin 1143 -> 1865 bytes .../drawable-xxhdpi/frequency_piano_77.png | Bin 1570 -> 2176 bytes .../drawable-xxhdpi/frequency_piano_78.png | Bin 1170 -> 1930 bytes .../drawable-xxhdpi/frequency_piano_79.png | Bin 1487 -> 2267 bytes .../res/drawable-xxhdpi/frequency_piano_8.png | Bin 1084 -> 1769 bytes .../drawable-xxhdpi/frequency_piano_80.png | Bin 1086 -> 1817 bytes .../drawable-xxhdpi/frequency_piano_81.png | Bin 1081 -> 1788 bytes .../drawable-xxhdpi/frequency_piano_82.png | Bin 1474 -> 2211 bytes .../drawable-xxhdpi/frequency_piano_83.png | Bin 1171 -> 1905 bytes .../drawable-xxhdpi/frequency_piano_84.png | Bin 1585 -> 2166 bytes .../drawable-xxhdpi/frequency_piano_85.png | Bin 1177 -> 1866 bytes .../drawable-xxhdpi/frequency_piano_86.png | Bin 1576 -> 2227 bytes .../drawable-xxhdpi/frequency_piano_87.png | Bin 1161 -> 1846 bytes .../drawable-xxhdpi/frequency_piano_88.png | Bin 1239 -> 1922 bytes .../res/drawable-xxhdpi/frequency_piano_9.png | Bin 1071 -> 1762 bytes .../ic_visibility_black_24dp.png | Bin 0 -> 868 bytes .../ic_visibility_off_black_24dp.png | Bin 0 -> 884 bytes .../src/main/res/layout-land/label_add.xml | 16 +- .../src/main/res/layout/caption_item.xml | 2 +- .../src/main/res/layout/edit_time_dialog.xml | 1 - .../main/res/layout/fragment_trigger_edit.xml | 1 + .../res/layout/fragment_update_experiment.xml | 2 +- .../main/res/layout/fragment_update_run.xml | 2 +- .../src/main/res/layout/label_add.xml | 17 +- .../layout/picture_label_details_fragment.xml | 1 + ...sensor_readings_label_details_fragment.xml | 4 +- .../layout/text_label_details_fragment.xml | 14 +- .../main/res/layout/text_label_fragment.xml | 1 + .../main/res/menu/menu_experiment_details.xml | 6 +- .../main/res/menu/menu_experiment_list.xml | 8 +- .../src/main/res/values-ar/strings.xml | 2 +- .../src/main/res/values-b+sr+Latn/strings.xml | 2 +- .../src/main/res/values-bg/strings.xml | 2 +- .../src/main/res/values-bs-rBA/strings.xml | 2 +- .../src/main/res/values-ca/strings.xml | 2 +- .../src/main/res/values-cs/strings.xml | 2 +- .../src/main/res/values-da/strings.xml | 2 +- .../src/main/res/values-de/strings.xml | 2 +- .../src/main/res/values-el/strings.xml | 2 +- .../src/main/res/values-en-rAU/strings.xml | 2 +- .../src/main/res/values-en-rGB/strings.xml | 2 +- .../src/main/res/values-en-rIN/strings.xml | 2 +- .../src/main/res/values-es-rUS/strings.xml | 2 +- .../src/main/res/values-es/strings.xml | 4 +- .../src/main/res/values-fi/strings.xml | 2 +- .../src/main/res/values-fr/strings.xml | 2 +- .../src/main/res/values-hi/strings.xml | 2 +- .../src/main/res/values-hr/strings.xml | 2 +- .../src/main/res/values-hu/strings.xml | 2 +- .../src/main/res/values-in/strings.xml | 2 +- .../src/main/res/values-it/strings.xml | 2 +- .../src/main/res/values-iw/strings.xml | 2 +- .../src/main/res/values-ja/strings.xml | 2 +- .../src/main/res/values-ko/strings.xml | 2 +- .../src/main/res/values-lt/strings.xml | 2 +- .../src/main/res/values-lv/strings.xml | 2 +- .../src/main/res/values-nb/strings.xml | 2 +- .../src/main/res/values-nl/strings.xml | 2 +- .../src/main/res/values-pl/strings.xml | 2 +- .../src/main/res/values-pt-rPT/strings.xml | 2 +- .../src/main/res/values-pt/strings.xml | 2 +- .../src/main/res/values-ro/strings.xml | 2 +- .../src/main/res/values-ru/strings.xml | 2 +- .../src/main/res/values-sk/strings.xml | 2 +- .../src/main/res/values-sl/strings.xml | 2 +- .../src/main/res/values-sr/strings.xml | 2 +- .../src/main/res/values-sv/strings.xml | 2 +- .../src/main/res/values-th/strings.xml | 2 +- .../src/main/res/values-tl/strings.xml | 2 +- .../src/main/res/values-tr/strings.xml | 2 +- .../src/main/res/values-uk/strings.xml | 2 +- .../src/main/res/values-vi/strings.xml | 2 +- .../src/main/res/values-zh-rCN/strings.xml | 2 +- .../src/main/res/values-zh-rHK/strings.xml | 2 +- .../src/main/res/values-zh-rTW/strings.xml | 2 +- .../src/main/res/values/strings.xml | 49 +- .../src/main/res/xml/dev_options.xml | 13 +- .../whistlepunk/AndroidVersionUtilsTest.java | 94 + .../ProxyRecorderControllerTest.java | 10 +- .../whistlepunk/RecordFragmentTest.java | 6 +- .../whistlepunk/RecorderControllerTest.java | 9 +- .../SensorCardPresenterUnitTest.java | 1 - .../forscience/whistlepunk/StubContext.java | 30 + .../whistlepunk/filemetadata/TrialTest.java | 4 +- .../metadata/SimpleMetaDataManagerTest.java | 16 +- .../sensors/CameraPreviewTest.java | 4 +- .../whistlepunk/MemoryAppearanceProvider.java | 2 - .../forscience/whistlepunk/MockScheduler.java | 2 - .../whistlepunk/StubDataController.java | 3 +- .../forscience/whistlepunk/TestConsumers.java | 1 - .../apps/forscience/whistlepunk/TestData.java | 1 - .../api/scalarinput/TestSensorDiscoverer.java | 2 +- .../whistlepunk/sensorapi/ManualSensor.java | 4 +- .../sensorapi/MemorySensorEnvironment.java | 7 + .../sensorapi/RecordingSensorObserver.java | 2 - .../sensordb/InMemorySensorDatabase.java | 2 +- .../whistlepunk/audio/AudioAnalyzerTest.java | 154 + .../test/resources/coke_bottle_325.samples | 4096 +++++++++++++++++ .../test/resources/guitar_A_110_000.samples | 4096 +++++++++++++++++ .../test/resources/guitar_B_246_942.samples | 4096 +++++++++++++++++ .../test/resources/guitar_D_146_832.samples | 4096 +++++++++++++++++ .../test/resources/guitar_E_329_628.samples | 4096 +++++++++++++++++ .../test/resources/guitar_E_82_4069.samples | 4096 +++++++++++++++++ .../test/resources/guitar_G_195_998.samples | 4096 +++++++++++++++++ .../resources/melodica_a3_220_000.samples | 4096 +++++++++++++++++ .../resources/melodica_a4_440_000.samples | 4096 +++++++++++++++++ .../resources/melodica_a5_880_000.samples | 4096 +++++++++++++++++ .../resources/melodica_b3_246_942.samples | 4096 +++++++++++++++++ .../resources/melodica_b4_493_883.samples | 4096 +++++++++++++++++ .../resources/melodica_b5_987_767.samples | 4096 +++++++++++++++++ .../resources/melodica_c4_261_626.samples | 4096 +++++++++++++++++ .../resources/melodica_c5_523_251.samples | 4096 +++++++++++++++++ .../resources/melodica_c6_1046_50.samples | 4096 +++++++++++++++++ .../resources/melodica_d4_293_665.samples | 4096 +++++++++++++++++ .../resources/melodica_d5_587_330.samples | 4096 +++++++++++++++++ .../resources/melodica_e4_329_628.samples | 4096 +++++++++++++++++ .../resources/melodica_e5_659_255.samples | 4096 +++++++++++++++++ .../resources/melodica_f3_174_614.samples | 4096 +++++++++++++++++ .../resources/melodica_f4_349_228.samples | 4096 +++++++++++++++++ .../resources/melodica_f5_698_456.samples | 4096 +++++++++++++++++ .../resources/melodica_g3_195_998.samples | 4096 +++++++++++++++++ .../resources/melodica_g4_391_995.samples | 4096 +++++++++++++++++ .../resources/melodica_g5_783_991.samples | 4096 +++++++++++++++++ .../test/resources/pint_glass_1797.samples | 4096 +++++++++++++++++ .../synth_clarinet_b2_123_471.samples | 4096 +++++++++++++++++ .../synth_clarinet_b3_246_942.samples | 4096 +++++++++++++++++ .../synth_clarinet_b4_493_883.samples | 4096 +++++++++++++++++ .../synth_clarinet_b5_987_767.samples | 4096 +++++++++++++++++ .../resources/synth_guitar_b2_123_471.samples | 4096 +++++++++++++++++ .../resources/synth_guitar_b3_246_942.samples | 4096 +++++++++++++++++ .../resources/synth_guitar_b4_493_883.samples | 4096 +++++++++++++++++ .../resources/synth_piano_b2_123_471.samples | 4096 +++++++++++++++++ .../resources/synth_piano_b3_246_942.samples | 4096 +++++++++++++++++ .../resources/synth_piano_b4_493_883.samples | 4096 +++++++++++++++++ .../resources/synth_piano_b5_987_767.samples | 4096 +++++++++++++++++ .../test/resources/tone_b3_246_942.samples | 4096 +++++++++++++++++ .../test/resources/tone_b4_493_883.samples | 4096 +++++++++++++++++ .../test/resources/tone_b5_987_767.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_1081.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_1250.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_1295.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_1466.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_1594.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_1802.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_1950.samples | 4096 +++++++++++++++++ .../src/test/resources/xylophone_979.samples | 4096 +++++++++++++++++ ScalarApiSampleApp/app/build.gradle | 7 +- ScalarApiSampleApp/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- api/ScienceJournalApi/build.gradle | 12 +- 641 files changed, 203175 insertions(+), 1025 deletions(-) create mode 100644 OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AndroidVersionUtils.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSource.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/NotificationChannels.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/AudioAnalyzer.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/FftAnalyzer.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/GoertzelAnalyzer.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/Harmonic.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/MovingAverage.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/Peak.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/SoundUtils.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/ExperimentalPitchSensor.java delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_visibility_black_24dp.png create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_visibility_off_black_24dp.png create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/ic_visibility_black_24dp.png create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/ic_visibility_off_black_24dp.png create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_visibility_black_24dp.png create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_visibility_off_black_24dp.png create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/ic_visibility_black_24dp.png create mode 100755 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/ic_visibility_off_black_24dp.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/AndroidVersionUtilsTest.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/java/com/google/android/apps/forscience/whistlepunk/audio/AudioAnalyzerTest.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/coke_bottle_325.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_A_110_000.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_B_246_942.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_D_146_832.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_329_628.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_82_4069.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_G_195_998.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a3_220_000.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a4_440_000.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a5_880_000.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b3_246_942.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b4_493_883.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b5_987_767.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c4_261_626.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c5_523_251.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c6_1046_50.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d4_293_665.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d5_587_330.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e4_329_628.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e5_659_255.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f3_174_614.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f4_349_228.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f5_698_456.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g3_195_998.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g4_391_995.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g5_783_991.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/pint_glass_1797.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b2_123_471.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b3_246_942.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b4_493_883.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b5_987_767.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b2_123_471.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b3_246_942.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b4_493_883.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b2_123_471.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b3_246_942.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b4_493_883.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b5_987_767.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b3_246_942.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b4_493_883.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b5_987_767.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1081.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1250.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1295.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1466.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1594.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1802.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1950.samples create mode 100644 OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_979.samples diff --git a/OpenScienceJournal/app/build.gradle b/OpenScienceJournal/app/build.gradle index 62ef59d1..7d09f3da 100644 --- a/OpenScienceJournal/app/build.gradle +++ b/OpenScienceJournal/app/build.gradle @@ -1,15 +1,15 @@ apply plugin: 'com.android.application' apply from: project(':whistlepunk_library').projectDir.absolutePath + '/version.gradle' +apply from: project(':whistlepunk_library').projectDir.absolutePath + '/dependencyVersions.gradle' android { - compileSdkVersion 25 - buildToolsVersion '26.0.1' + compileSdkVersion 27 defaultConfig { applicationId "com.google.android.apps.forscience.whistlepunk.opensource" minSdkVersion 19 - targetSdkVersion 25 + targetSdkVersion 27 versionCode buildVersionCode() versionName buildVersionName() multiDexEnabled true @@ -31,25 +31,30 @@ android { // Due to b/36261865, don't try to check icon shape when linting. disable 'IconLauncherShape' - + // b/64679950 warning "InvalidPackage" } compileOptions { - targetCompatibility 1.8 - sourceCompatibility 1.8 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { + annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" + + compileOnly "javax.annotation:jsr250-api:$jsr250Version" + + implementation "com.android.support:appcompat-v7:$supportLibraryVersion" + implementation "com.android.support:support-annotations:$supportLibraryVersion" + implementation "com.android.support:support-v13:$supportLibraryVersion" + implementation "com.android.support:support-v4:$supportLibraryVersion" + implementation "com.google.dagger:dagger:$daggerVersion" + + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(':whistlepunk_library') - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' - compile 'com.android.support:support-annotations:25.3.1' - compile 'com.android.support:support-v4:25.3.1' - compile 'com.android.support:support-v13:25.3.1' - compile 'com.android.support:appcompat-v7:25.3.1' - annotationProcessor 'com.google.dagger:dagger-compiler:2.11' - compile 'com.google.dagger:dagger:2.11' - provided 'javax.annotation:jsr250-api:1.0' + + testImplementation "junit:junit:$junitVersion" } diff --git a/OpenScienceJournal/build.gradle b/OpenScienceJournal/build.gradle index fdafa4dd..ac03ada4 100644 --- a/OpenScienceJournal/build.gradle +++ b/OpenScienceJournal/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-beta2' + classpath 'com.android.tools.build:gradle:3.0.0' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/OpenScienceJournal/gradle.properties b/OpenScienceJournal/gradle.properties index 1d3591c8..7470fb8f 100644 --- a/OpenScienceJournal/gradle.properties +++ b/OpenScienceJournal/gradle.properties @@ -15,4 +15,6 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true + +android.enableAapt2=false \ No newline at end of file diff --git a/OpenScienceJournal/gradle/wrapper/gradle-wrapper.properties b/OpenScienceJournal/gradle/wrapper/gradle-wrapper.properties index 3963261f..1ebd7c43 100644 --- a/OpenScienceJournal/gradle/wrapper/gradle-wrapper.properties +++ b/OpenScienceJournal/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.3-all.zip diff --git a/OpenScienceJournal/whistlepunk_library/build.gradle b/OpenScienceJournal/whistlepunk_library/build.gradle index 9a54d6ee..1357b12c 100644 --- a/OpenScienceJournal/whistlepunk_library/build.gradle +++ b/OpenScienceJournal/whistlepunk_library/build.gradle @@ -2,12 +2,13 @@ apply plugin: 'com.android.library' apply plugin: 'com.google.protobuf' apply from: 'version.gradle' +apply from: 'dependencyVersions.gradle' buildscript { repositories { jcenter() + google() mavenCentral() - maven { url 'https://maven.google.com' } } dependencies { @@ -16,14 +17,13 @@ buildscript { } android { - compileSdkVersion 25 - buildToolsVersion "25.0.3" + compileSdkVersion 27 publishNonDefault true defaultConfig { minSdkVersion 19 - targetSdkVersion 25 + targetSdkVersion 27 versionCode buildVersionCode() versionName buildVersionName() multiDexEnabled true @@ -67,6 +67,7 @@ android { test { java.srcDir sharedTestDir java.srcDir 'src/robolectricTest/java' + java.srcDir 'src/test/java' } androidTest { java.srcDir sharedTestDir @@ -74,8 +75,8 @@ android { } compileOptions { - targetCompatibility 1.8 - sourceCompatibility 1.8 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } testOptions { @@ -101,41 +102,48 @@ protobuf { } dependencies { - compile project(':scalarinputapi') - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-3.1' - compile 'com.android.support:support-annotations:26.0.2' - compile 'com.android.support:support-v4:25.3.1' - compile 'com.android.support:support-v13:25.3.1' - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support:design:25.3.1' - compile 'com.android.support:cardview-v7:25.3.1' - compile 'com.android.support:recyclerview-v7:25.3.1' - compile 'com.android.support:percent:25.3.1' - compile 'com.android.support:exifinterface:25.3.1' - compile 'com.github.bumptech.glide:glide:4.1.1' - annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1' - compile 'com.google.guava:guava:20.0' - compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-3.1' - compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' - compile 'io.reactivex.rxjava2:rxjava:2.1.3' - compile 'io.reactivex.rxjava2:rxandroid:2.0.1' - compile 'joda-time:joda-time:2.9.4' - compile 'org.joda:joda-convert:1.8' - compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' - debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4' - releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' - testCompile 'junit:junit:4.12' - androidTestCompile('junit:junit:4.12') { + androidTestImplementation("junit:junit:$junitVersion") { exclude module: 'hamcrest-core' } - annotationProcessor 'com.google.dagger:dagger-compiler:2.11' - compile 'com.google.dagger:dagger:2.11' - provided 'javax.annotation:jsr250-api:1.0' - compile 'com.bignerdranch.android:expandablerecyclerview:2.1.1' - testCompile('org.robolectric:robolectric:3.3.2') { + + annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion" + annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" + + compileOnly "javax.annotation:jsr250-api:$jsr250Version" + + debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion" + + implementation "com.android.support:appcompat-v7:$supportLibraryVersion" + implementation "com.android.support:cardview-v7:$supportLibraryVersion" + implementation "com.android.support:design:$supportLibraryVersion" + implementation "com.android.support:exifinterface:$supportLibraryVersion" + implementation "com.android.support:percent:$supportLibraryVersion" + implementation "com.android.support:recyclerview-v7:$supportLibraryVersion" + implementation "com.android.support:support-annotations:$supportLibraryVersion" + implementation "com.android.support:support-v13:$supportLibraryVersion" + implementation "com.android.support:support-v4:$supportLibraryVersion" + implementation 'com.bignerdranch.android:expandablerecyclerview:2.1.1' + implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0' + implementation "com.github.bumptech.glide:glide:$glideVersion" + implementation "com.google.dagger:dagger:$daggerVersion" + implementation 'com.google.guava:guava:20.0' + implementation 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-3.1' + implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' + implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' + implementation 'io.reactivex.rxjava2:rxjava:2.1.3' + implementation 'joda-time:joda-time:2.9.4' + implementation 'org.joda:joda-convert:1.8' + + implementation fileTree(dir: 'libs', include: ['*.jar']) + + implementation project(':scalarinputapi') + + releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion" + + testImplementation "junit:junit:$junitVersion" + + testImplementation("org.robolectric:robolectric:$robolectricVersion") { exclude group: 'commons-logging', module: 'commons-logging' exclude group: 'org.apache.httpcomponents', module: 'httpclient' } - testCompile 'org.robolectric:shadows-core:3.3.2' } diff --git a/OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle b/OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle new file mode 100644 index 00000000..29a7f8a8 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle @@ -0,0 +1,14 @@ +ext { + daggerVersion = "2.11" + glideVersion = "4.1.1" + // Updating requires giving the path to the local Maven repo in repositories.properties + // We are always using the snapshot version, ignore the lint warning for newer revisions + gmsVersion = "11.6-SNAPSHOT" + jsr250Version = "1.0" + junitVersion = "4.12" + leakCanaryVersion = "1.5.4" + multidexVersion = "1.0.2" + robolectricVersion = "3.5.1" + // Major version should always match compileSdkVersion in android.properties + supportLibraryVersion = "27.0.2" +} \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java index 42a4f1eb..ac0d2d9c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java @@ -19,9 +19,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; -import android.os.Parcel; - -import java.util.List; /** * BLE related events. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java index 4fbc8910..2a493fa5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java @@ -23,13 +23,9 @@ import android.os.SystemClock; import androidx.collection.ArrayMap; +import com.google.android.apps.forscience.whistlepunk.AndroidVersionUtils; import com.google.android.apps.forscience.whistlepunk.devicemanager.WhistlepunkBleDevice; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - /** * Discovers BLE devices and tracks when they come and go. */ @@ -78,7 +74,7 @@ public static class DeviceRecord { public static DeviceDiscoverer getNewInstance(Context context) { DeviceDiscoverer discoverer; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (AndroidVersionUtils.isApiLevelAtLeastLollipop()) { discoverer = new DeviceDiscovererV21(context); } else { discoverer = new DeviceDiscovererLegacy(context); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java index a68261d3..70e619c4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java @@ -40,10 +40,8 @@ import android.util.ArrayMap; import android.util.Log; -import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java index cd8c48b9..beb2c211 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java @@ -21,8 +21,6 @@ import io.reactivex.CompletableObserver; import io.reactivex.CompletableOnSubscribe; import io.reactivex.Maybe; -import io.reactivex.MaybeEmitter; -import io.reactivex.MaybeOnSubscribe; import io.reactivex.Observer; import io.reactivex.Single; import io.reactivex.SingleEmitter; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java index a551871c..e76a2867 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java @@ -26,7 +26,6 @@ import android.view.View; import android.view.accessibility.AccessibilityManager; -import java.util.ArrayList; import java.util.List; /** @@ -144,7 +143,7 @@ public static Snackbar makeSnackbar(View view, String message, int length) { public static boolean canSetAccessibilityDelegateAction() { // AccessibilityNodeInfo.addAction(AccessibilityNodeInfo.AccessibilityAction) was added // in Lollipop. - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; + return AndroidVersionUtils.isApiLevelAtLeastLollipop(); } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java index 98c1f3c0..72ef977f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java @@ -17,11 +17,11 @@ package com.google.android.apps.forscience.whistlepunk; -import androidx.appcompat.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; import android.support.design.widget.Snackbar; +import androidx.appcompat.app.AlertDialog; import android.view.View; import com.google.android.apps.forscience.javalib.Consumer; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java index 569ee732..a68d00af 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java @@ -18,8 +18,6 @@ import android.app.Activity; import android.app.Dialog; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -28,6 +26,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import androidx.appcompat.app.AlertDialog; import android.text.TextUtils; import android.view.LayoutInflater; @@ -51,11 +53,11 @@ import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabel; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciPictureLabelValue; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTextLabelValue; +import com.jakewharton.rxbinding2.widget.RxTextView; import java.io.File; import java.util.UUID; -import io.reactivex.Completable; import io.reactivex.Single; import io.reactivex.disposables.CompositeDisposable; @@ -123,7 +125,8 @@ public interface ListenerProvider { private String mTrialId; private int mHintTextId = R.string.add_run_note_placeholder_text; private String mPictureLabelPath; - private EditText mInput; + private TextInputEditText mInput; + private TextInputLayout mInputLayout; private String mExperimentId; CompositeDisposable mUntilDestroyed = new CompositeDisposable(); @@ -311,10 +314,21 @@ private LinearLayout createAddNoteView(String text, LayoutInflater inflater) { ImageView imageView = (ImageView) rootView.findViewById(R.id.picture_note_preview_image); // Note: Any layout used for this must have the text field edit_note_text. - mInput = (EditText) rootView.findViewById(R.id.edit_note_text); + mInput = rootView.findViewById(R.id.edit_note_text); mInput.setHint(mInput.getResources().getText(mHintTextId)); mInput.setText(text); + mInputLayout = rootView.findViewById(R.id.edit_note_text_input_layout); + + RxTextView.afterTextChangeEvents(mInput).subscribe(events -> { + if(TextUtils.isEmpty(mInput.getText().toString())) { + mInputLayout.setError(getResources().getString(R.string.empty_text_note_error)); + mInputLayout.setErrorEnabled(true); + } else { + mInputLayout.setErrorEnabled(false); + } + }); + rootView.findViewById(R.id.label_dialog_timestamp_section).setVisibility(View.VISIBLE); TextView timestampSection = (TextView) rootView.findViewById(R.id.edit_note_time); timestampSection.setText(mLabelTimeText); @@ -410,8 +424,7 @@ private void addLabel(Experiment experiment) { private boolean addTextLabel(Experiment experiment) { String text = mInput.getText().toString(); - if (TextUtils.isEmpty(text)) { - mInput.setError(getResources().getString(R.string.empty_text_note_error)); + if (mInputLayout.isErrorEnabled()) { return false; } GoosciTextLabelValue.TextLabelValue labelValue = new GoosciTextLabelValue.TextLabelValue(); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AndroidVersionUtils.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AndroidVersionUtils.java new file mode 100644 index 00000000..a66ddd3b --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AndroidVersionUtils.java @@ -0,0 +1,51 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.forscience.whistlepunk; + +import android.os.Build; + +/** + * Utility classes to determine current Android API level. + */ +public class AndroidVersionUtils { + public static boolean isApiLevelAtLeast(int apiLevel) { + return Build.VERSION.SDK_INT >= apiLevel; + } + + public static boolean isApiLevelAtLeastOreo() { + return isApiLevelAtLeast(Build.VERSION_CODES.O); + } + + public static boolean isApiLevelAtLeastNougat() { + return isApiLevelAtLeast(Build.VERSION_CODES.N); + } + + public static boolean isApiLevelAtLeastMarshmallow() { + return isApiLevelAtLeast(Build.VERSION_CODES.M); + } + + public static boolean isApiLevelAtLeastLollipop() { + return isApiLevelAtLeast(Build.VERSION_CODES.LOLLIPOP); + } + + public static boolean isApiLevelAtLeastKitKatWatch() { + return isApiLevelAtLeast(Build.VERSION_CODES.KITKAT_WATCH); + } + + public static boolean isApiLevelAtLeastKitKat() { + return isApiLevelAtLeast(Build.VERSION_CODES.KITKAT); + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java index 21d5ddd6..af5aabb4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java @@ -52,6 +52,7 @@ public class AppSingleton { private static Executor sUiThreadExecutor = null; private SensorAppearanceProviderImpl mSensorAppearanceProvider; private final Clock mCurrentTimeClock = new CurrentTimeClock(); + private final AudioSource mAudioSource = new AudioSource(); private BleClientImpl mBleClient; private RecorderController mRecorderController; private SensorRegistry mSensorRegistry; @@ -61,26 +62,31 @@ public class AppSingleton { private PublishSubject

2@1c1#C0+c*y%w7gc2v`8603 z$s9i_*`Oy>J1y*;QrbPaC+RXerjXqG+#yiLi0!g%|lO1&zBxQNYoVe&)Rp1t^Q;}tSdS|V%Tf#*@60>CjXPphQ9|;qBllkg2 zGkR)zdP>^`E_%EC?cwgmW~{$EJfOlCsYL^k?-v(;`UQWuOV8y5LAd|`002ovPDHLk FV1hsM!qxx) delta 251 zcmeyuyoYImiY2qBi(^Q|t+zJ=xf&EiTn}#l?|Yp~OSpI4xyF4=%&7>YkFk^+p7dwPKc3^r zYREE9GCT4cNJ8ao8uaB|bIbSyQWWDr`0F&$(jaxD<7JbP)9T}LmlDw;D8C|oC832L7n!11tzmvv4FO#nU!VwV5_ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_28.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_28.png index c2e00ecf4bb97ca2c84a0dfe7ad79fa756752068..8e487627162cf5f01015d56c91013a27f3de15a7 100644 GIT binary patch delta 426 zcmdnb^pbgkO8o{;7srr_TW{~)&O2lv;NbZGzyIOv){c(ruTL*4USb!b%2@4H5Tu!_ zKXuJarUEAQf(I;q4-Rn7Ilw7n(I{*I5@BNZd+?=X$F+U+Z*TGMc;Mo$W?LNpAkXj1 z`r}{T=>Lj&FzLcSJG0N02SsPQ6u7Dj%qf@NF?Dt5a%R_ud)yw^9BXWTUczuE*#E#m z-6OB}KAHOUG?U(rU$aXm-hA}r!qe)f`+26cKy1QpHw)jKiFso6joo>7e&yesQky*U zAt%SX;;%P?A1LW3eetuqX+EWM-#po5|MuO#{+%-mXMX*&vgET zUN65l_0Nl=FHcDLN&XJo(et!CW%mjFBb~|fi&k9ubzowGnD}M){DUk~jE~Ig{xbl9 Mr>mdKI;Vst03LqV761SM literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W=jaSW-r_4cMCpNoTl!^K_y zmqy-*@Oa^s+4X($P0!g^lrQ_}WJO9aS~Ln<6fmh5JYeyAz`{4@0H+K{q>)*@fQcO_ z;`iVH=bQsD5r{I72t*l3<8AT2$LE7zH+b_|8Gkvo^+2r5mz##luT#&nuH(q9&v|Nj z&{SG!$1-M?=XuQL#oJ#MF3_A~eJ)?dqC$@SK1WK; v_3!R0|Chc%6=5-|Q}DVNtR8AqN61`LCztDnm{r-UW|skV3& diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_29.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_29.png index 390ceabba5a4f7993ba17fd368b517851514763b..cf63e1793557273c951fe1ebf7e4d6f00459ebcc 100644 GIT binary patch delta 601 zcmdnO{E=mXay^rUr;B4q#jUq@y^CHeh_E`mt-oAZ9R7vrJ9EUV;Hi#pCb4YMjg@%t z+I^qVbVUaB2P`rcjOq^#aKcD-KM)&8p5!dJ{`L3$Gao~*&)NB{^zHlKVmtP;tuJP9 zU-$QV1eB55}-Ht~~UP*s9+3`;E;KqX3qbE6HjyA~K z%dTkaF5ASl?$Pc4ryecYy=ugGjmsey6E~Wmiun>gGEa}aP4>%UAIKm{p{lu{{xM}1x$Q%8iWfT zu)s)WU*19)x2}}f4%bYJEd9A_D=k+{I*lZ{MNZQU%lrSPOT1eJGYlhZ`a9~<1-qw z8&2o#=UDgBl6Tz$u`Qb{Ds5vzf6l!dWMT9{`RK{j4~#B%Ug~`7A{uSTU-QOz-RrQK zZ_mqKdHvwsxyzw*O6Kz45kIuINUogg&O7l$6X~D!( zTEV@cIsxJH*C#Km;i?mjarKOkEPJ1IJj~*zJlOMCJghGNlilgpNz;7{#vBYl;OXk; Jvd$@?2>`97B47Xj literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV666ZaSW-r_4dZ?NzDoZ4vzo+ zFP~g~+J&vH`_}TT__EV0N=h0(UDVZXW0-S*Q^ulE*rI?*y?}|`?*R)RP-M;lphzP# zP(;1p0gK-QmsF%k7^nX|mA|uZ?X|)vgcm`c#v3-E&_WNJ^{==$TZt)V TzxK-j#s-6@tDnm{r-UW|<(2&H+vti$-CK0w(nWCU(CEEPOzbIR}6uw!C>g@9ib){ud^^F;bSJUE`1hPXcD|VT)iOJl`A>atps~1L{kP$csjh55(XUFsnd(m1 z=82xuUN1dgD_s1h_cQ5-M*r&C|0r+GoXo)}GqIMp9^!yTW{?B&^4cHlnRq#E>X~=D ztu)lL51hNvXjaWIb#mjno=K-zEV$n7Z{4w}_Pfry)wk_)Z*SF;{GGf1xU1NzqKFso zF8cSkTIW7{;{47`b)yv~=osO?;{H?enFaE%4_4UgS$5x8({5_3m_sB14Qay2JKk&&G7NR2Vw_$ zd8(c@F>$b-o9?+kO|W1eC& zGkf0G340slHy!_a=;xEIA6ITFKVfH--!i-Kf6E^aUS6;xVD@2k*2L4&5<6B`G2T*R Ux6{q{xyS$np00i_>zopr0BSX9X#fBK diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_30.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_30.png index 215a3a203fe21b94fcf9e436f03104add447d6b1..b27ff97c92b2f5f74198164312de983d94417f7d 100644 GIT binary patch literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV7%|?;uunK>+N0dyvGIt4vu&K zUpi&Rp)fP2?DOL*%xQ)mI=zw8T(b`D%#*#D%5i{m&Vfc@i$-Sk0w(o>2P}RMKq8zn z7LAw955`{qJ%82XX6-g<$rr00H|@6Pe{e!!|K4{jdlo;es$c);&I6$bM(k2|mKS>K_~t%lcD|U$2YT&3&Dy)-e|f=bIiuNgL=J|^-M8|4 zz`_Ty2WmMxR0NlEge?k~mfJqqWZu;|r?|v_(!Iy7-(64M^M87(YO}KS#D1QLYdfR+ zB=2^vNMc{CxMTVL@I$tLbv|p=|EerG{k!Y$iJ*6d3x)qz`Myre&ivkfkl*Xu{?8UW zu3c}w&9d(K>awfn)<2M{+s>|+8#e7v;>jK7^ZCUkkKC*dI~O(0XKtvQ|G&&xvNJ2+ zv6#Qsn#(2rH!DkW${WYoh3lg>F~~Q*{(Eb6!|GXcLgc0IIPKVy+Zn$0vC;iEnguKW z7hd)(n0V6jiB{e2UyFl(e`)8qxq0IWp4Fcei=Qz+e(`%<#3dPK@mTAxF=rRcFNl0R m^;_u5pWyhw43g#ce;L+D-!Lilu8;-BID@CFpUXO@geCybU-)nU literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W@kaSW-r_4dX=-WCHM2FLIB zOI|26$f!r0@%sL_=}Bcn=fY{Nf(^nJjm+u=OzeISSo|Iw;GA=y5hx;TQNW~L01{#0 zn{$9u1||Yl1`>fN18V%G7<1%Lc&Xivq#b7#tUkwT{*HZyeL1M3P;4W?nN!{}^=;Rb(K0<23=9(nPgg&ebxsLQ0AICt?f?J) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_31.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_31.png index eaf7a73df04e6033bb7b58293f378f4f853c1607..7512235e4454a92cc58d513dc9c2aa5ab6bf8986 100644 GIT binary patch literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV3PE7aSW-r_4e+?qGkmF)_{Ni zmtX$wSCVqmRpI%$FAFo1k1XEwfG1P_rqNkN2K5IlG8T;L4-Rm`NOnIE8%UmvE?9f_ ze@~8ib^N+-E4S`?yg@f+3#0YH&@J^+cP6`ib?7~C*1~gMU7p!JlO1vo0$a8}SoJMi zbH{Gu;x9a`;ah@jw~G`=AE>SVE3zZEd-6Q(Jh#wD-f&x$8%%mpb6g%8@%=D7+{h8L z<={+L-=m=wHHDj;LTA=3Rmsg?S$M~Mjp&0gouFwg(JNQ|soWvEd{5Q(&r5PoAL{kn z6n5^ycORqkbMC}RQXXd6#R9DP_u%7gX6pU zmrt0EO*%h8@=f?uUoo~EU&U?xUf1R@6)>q6JYeyAaDa2p0Ztis`5Z$L9dCyb`9V50swm=Y4l_N!5b1 z2W2rT{`KXi_sn+4J&0_nKj_-4EqdqfRLkntCT^*a^YL6emX(pyPs7|ur{yyW z{;o)!uE{X*o>cvPj`G;=`-G0OlpDnS>Swsq-WgZ8N3Y_)(7P@7+4*EF3eKusdX(~U zl~HAmJo~IemXG%wZ;ZB`xcqS=Gdtg%C!T*w*6?+Un9rPjFXLOj?EJ?peh&_C&NfFdk>a}IFIfJ7RZ)eD%|p&~$K^$;N|DZRgQCNBT2e!Sp&MQ8frkZ=2g znrp2d2&?5j*}6n7EBM}iqZj4(```TjwOO@!-#q(6`;5N5El`&5-?qED=hc$8Qo$)a zvJZpm-&#LBl^nr3-R}0TLr0Ho;LiIZ_5XTV=TT45#k+E)cPw9h%9^|N$tk11W)tNO zo9#GKCwYNW&$dmsV5PU`bnmAjj92KkOp09eA zWyPIOS-jzvZ_{l~?%6cUd;h=G@ZPHh@4wwIJ)ZVu>z205|G++nc@hy8m%aC|)cPUP SB*V(f00f?{elF{r5}E)U{nMBL delta 181 zcmV;m080Po1F8a$BQXH+Nkl1af)Pmz@o zfD<@@11E3-2TtITyB`8@0+CS^ReBh%YVSC)Cb+?Hr!N9_FKn$oWKbjIDr#5 jZ~~E08j-yl7t^JFLR>ovBKG*B00000NkvXXu0mjfccn}& diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_33.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_33.png index 57544039cfbb52786f4a9f86b3e414532ceda564..640d500c9c21897de64c47b149f245412ef5cad1 100644 GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVBG2H;uunK>+M~~yk-Ldhrs*) zFTLHis;l7RnH$3QrtezewcwfR5rNJg{jE7SSRb(XJvhKQ=Rl*d1rQZ5sTY7mSor1~ zcq#nw*pC055%N2lA1<2D@<6Su?AtD@hkN#;c`u+@G#e)Nl%+q%$zrS`lb<(F>*;DW8o9zD-aP#lvMzaDYc8K9n8=2K%Hez=J zrwqtdtOx!+ms7lG-qyLt{N&{S%8&kOX!pwpGOukpy)XXho4J>!m;JfHQU3M!t6!@g zuKPF5@|$kKYU{eEAML02TKK$`s6HaG?Xaz-k6T{3_?=JM-$ZttaxS@Q-oB)7A@`m5 z)2;_yYYtwzoEm+|*4D+%pGPTe$J68&4CPy6uJ!0K>(%fqKYVshaH>y7nB%468@S)S z6zy8IT2HcIVKM{zx+hYxS98pS^q%HEYbl<2=IuRSu2pL4?g!THd*k0QThjg8N*C=N vuU3m~_Fr^Y-apqeWR)E_gfad5Wp)0oDe0RJNKRb^j7tVjS3j3^P6~)y?Kzg#em1v@%w#~ zDHCMoXvEJ`FXWxn9?NuP`H52;2RP>(XcV?+WL7U=QZIPG;`aa~!YN|`6a z;e&~Qm4QSc%7AKk+g3-(%f4=`mRR>&iDA3po6Fg%4||)dU&cH*(8w%q;WK;k>D{N! zmD=*P9Qt{5=kdnfwr5yu3V@Q<7ALM+Y0jRq@x9jNc$5A=t9||(2>_h|Gn{xgK%ENG c*!G?I5O>m}8Q-f6fI-0E>FVdQ&MBb@092H7MgRZ+ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_34.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_34.png index 109523d84b11d78f2fc0b8f9662764b285ee0115..e465731357e37146e06c408c359889c2e6516509 100644 GIT binary patch literal 611 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVAAq*aSW-r_4e+?yu%6tEDrzv zFTeeLMJCVobm{c4SI$>0%z6&GD_#7k9G&)psesAvK%;O06W^Q$82Nw�HWvoaV=# z&tLrha-nYc+;X0RwbujQJ_z}(-yChJcd^mE@ZMir*6mff{SC8g=O5{iJL~`F_@U5u zr(BjdX!{k;UCbNv;?O^t-?j0ZJ%LSc$|93q-;H4bA z-rwhTeDs_WeO9}JTkU5DoqxPrM1B3@b)WBSE-2Rtk_!wy=eO~Jl)dFjF&6Fho+6$r zXJ>owICtvXi}a~0(@Vose_HJDvYhwgj`2Rpj>9J_8QJ{~a9Y4ThTD4$%<2zVWGonA zCvp8I~edqwY@64}dqC-rpWE4KNo zFAMCL{J<_W!hQJ(kHh>TlE%+t)^5;`Z74syR*d`V(vyMzRcjL1w|^zzYr4a>nE!FUpHM>*D!3E3rsu=p00i_ I>zopr0HZ7zJpcdz literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU`+OOaSW-r_4cOcq(cS*u8w#A zU)rFqaN)!0<~jO{!p|mXZ;WmGc1bsT8pE6eoH7=T!WIQg>IF>feh*mqfFg4a07V*^ zfgY z?7b}U?e)}No*vBJ} qa)@S diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_35.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_35.png index f0214b0a0eb8ca2a4faf461184751e0516dc769c..61b53e66dc2422761d395ab9b40facc23c59dbe3 100644 GIT binary patch delta 482 zcmX@bG@WIFO8q@g7srr_TW{~)&O2lv;NbZGzyIa(D33k&dN;q6S;-$-$T80;FGxav zYt9U&0w(o>2P}RM4sgynz$s(VC~N@|VPf}t@Fiu3Vcq`}{d}H+r3tGi$8Pi~kXQTh z!f@hKxB0?%wAodvCml4MYg6E>&NruAddI5RpMC8t590XPy|&fGr222mjS1ed`?2jS z3%;1eo7EmjJ$5bA=##7dK6lFTIVpYfR==rQwDWK3+^HwuR;4bGopS(abt5y-YJ__l zg(v#R*Yn*u^+0g{>houAoSJ>YWqSG79U?nku(&a5Jy;hv{fo8o+C4A)_s^I8e!Y8^ z{Lkx-gkv1&|7?5bm~agX0VSfsy)>D^z$(8qH8(`!GQ7R-JS zwmh{#kF{ zKXp}6Y})ay|5mJt@VhD-YrK8_+H${jb5>X{Z1lc&ta0`o%g#Bbk&d%(2HWn=?Vk7Z zX5FdPS^YY{VkCF}{r^g(Sj^?i&oF!5vY1&nt0LWhGXn#fg%1|=VE=Z9cvRdAHKIyZAUxf_jQtyrN*38x?dfluUHkNEXlU5_KUsxast(Dt&fe);dUo-o zg1OsYX2(@7^?LZFrMhhPm(|-=KQAm&dvJi$f|1=1NER@`$VOoh8$|Mff(Amuf(8;y zGCMx@cD=4RqZf5~?+fouwz0`!ZL9eny(ybpp#A&JjkHYB#Z%Aq@faKXjr=axm+vgldfc=`On z+JcF8Z&tM(NL?;`o^MOZ$4g%YmwEl)<=3VWv+K)T-J_E~pPKn-$tTlekMCde)Cr7_ zRNebnYyM9mkL%vgzE#F765M?uEwA$`XT|p!TlasOWQzzDwD9;eX}^WZMcuY(k~m+^1QsmV8M_q_R;-~8L;#ZBQI(lK9u<~Mfp z=zaPwDlBPP_VuHY_yw~a6B&CCrTUea$2_&!+T86EbM$KEzn&Mu5Az>*v42k6q?Ivel=)E)nVIT_E*>6ihBRJ#1|eE jpuoWw6j;OXZ>YaI!#}NFEkze#^e}k3`njxgN@xNA^p(Y? diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_37.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_37.png index 2a81f4c660e5ea05f9d375f20c902853b5d82a63..039dd18bcc7e66ac0626d1c70fc7e90054e4b891 100644 GIT binary patch delta 400 zcmV;B0dM}t0@DMKBrKXqL_t(|+U?xiio!4yK+*jFPwS&lsF$3JJ-Rjw3}~b6np)F= zteZx*90HMV8h`Z5aBDq&vc}086I?Oe8QL_!H4W|fdt{udGa6h0Tm%+e@FTMF%m7z> zFu{Qvhc*K4oi7ua-!M%FhQc}H2Ee(-HGG@woHS3s0|%~l?iPI>xC>m{qR;LALjaff z-03%(*L1XOJo7k#6F6`JCve~dPT&L%oWKbjIDr#5fqw%hZ~_NT-~_C9LZ?&95<+kpeOcio6=2d)vW>v{w3 zqG;fX;XkU-z!kz(qJb-dt40G?0M~(L0-g-li59(G^lF;%H@CcYmwt~f86Ul|TQTOi uo6O&UI~yZwy7BY>*3oqW2a!$|7KiQ>0oFE`8GD-m0000p+fSEn-`3S)rSS_<~(!M*4mm4=iG}@?6hfnW7iV;CF!2qJYWoK%+2>yu78oS^!@Ra2TIH@BNeUx&1)u-)MGJ9oL zv~}zG85M}i{@d}^K{RH|#+#Pw9<8dsBV%rK%l-L+b)ippC&&GL8?s0FLEW!+B0GY` zHN#D#p6n1^?NxA+tG6uXxn16uKgOjUe7Ee`uUGDti+hH13-%${Zx2{NJ_M1>>M&Bqf)U6DlfVFBWCsNcge-X6+VuWYM6BMeX?;akb9bz| zpp<|7wa)Zh@6_Mcw*;D`Gq0?EA2xNi-^Wh>OGZxYE=AglHKjXt!ty2$`81PFMisbe_XfddmYeYS03E9TyLA(w|Y;g z-u;I11#6Gp-fN*L`C|Ekzv4Sq+3ogow0>E3b1UQhe_~%U++F1zQ>R_t+`ryRu5#<0 zxklAnU$L*9`gB)VyY;ONqI#Qq&Y74o1@2vL!{m3410KWhxP|zCa8TSm!$`; Q1Je(Kr>mdKI;Vst0PJ-b;s5{u literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV666ZaSW-r_4el7qC*M-4T1Om zFZ~*%{`h=bEXRwVX?rr056WDcuIF>feh*mq<{aRhbD&Y!qLCRWqF(TT z#qR+~gj2=>Cs$wk&Mai4}bsLIC)=HXur6ue2mb$%jeI`dvNB)=>xX@ zCRQ&W8%pk&*BZiVo+OyhUjD7wZQZKCf}1;I`O0Hr)88A;yvn(*qA75Pvc-<05AW?w zUtWF3XG_tJ6P>d+TJB5=|CuZ2ZO<2S_-me@QGuv>&F`lpPz?Ef<|RpM{Y zAME{8DtlArtjuqr9jor%=h<;F{K%UBJUl;7cRoXS5aeaNAp;64w2-+IU&{V0>xoOu T)YIy~*kJH<^>bP0l+XkKkSDtW diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_39.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_39.png index 73fa2a09d1e7cf2f23e25db48c838ba96c39b4bf..dd8325cc610fb211c8498dd4c2a6692d2b9cd262 100644 GIT binary patch delta 442 zcmV;r0Y(0}0-pqsBQF8wNkl|EJs6DiV#yo*C@qT&Yh@2>4Ji zS;>3-=*TWZ0FiAPSUwHzy8i#k-Y&Q%xS7GO*e1A}L4F7D^fti-26^Q76`u(X95`@a zaF073?Q3V1@3!x8;7~Y!aqe;8x(9l9JaFK^ft$F;MFx5FL;zPjtDOC=^5id?{gK}} zf3}3nTpuL*{vFq=9C>g0IxSgfvr99LzOQ=;`^;k~S%QD&fUEv`MqV4;r|9-7jv;$3 zvXXn;=uZ57UH4+5S)Ugw4BYE$M(z)t`xu#Qd<5Lg0Y~97 zXR@=$5j}>?S#>E~baJygBdeO6L?#>AfBVq}w=y$~z-13u^n}RVkEN@|(`XU6k^#7Z zTD_!KqNTt^r_Rx{yc%xiUc7qgPWi^C1MM`p(fi*FT-Lr`9ca}L#5?@QNZrfqUr(d0 zPS0miv!5H=Pp+=nSk~E^b!qB)yeJ#9Q{e7CJ9|JYt{PjwX^+5x6F7kbCvXA>Bu?N2 kPT;@^oWOw-IDykkzoxRrMo!FGWB>pF07*qoM6N<$f}|+j&j0`b delta 205 zcmbQwvV&=YvKPaDPZ!6Kid%1QMsl?n2sj+v_kZbE7DMi`EuOX?ygM$KI>$T;I(dlW z0OyIDy2{2qWrIAtt=f*=tl_K6qeLS(tbKi2HotGC0qK>P5y2;rFI z6SfWOud|pNKAHGg@;VDUpUe*CZ#!OP9KRR(?b>&X0FiU{=j7P)zAyOS2b8lY;I6)N xW`cV?$Ad}lwZiX*hSgnsGx3O}0^FkIOY+2ii|cLeSggYU1fH&bF6*2UngApaR+Rt% diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_4.png index a43f1b1dda4628c152702827ba5cd31a0a97e531..36d5b9479130920839636cf8061f33ee66e8c804 100644 GIT binary patch delta 415 zcmV;Q0bu^I0_+2jBP;>4Nkloy^mq*e(UE z3FD<(HcXLA8)f=+xG_HerJfI56WHver{4hJ4kr0%o3qb3`*?5xw7=V~?gv~L?pOBn z2)NG41P2ZrIB?*=fdl93061U3!S&*$7MsBp;#Dp(-(}JHu|Mm86F7kbCvXBMaNq<^ z;J^u-z=0EyOdo#^oWSYYaI^OWslN66%=0I<-!k@!$x1%160U0uC1anRtfLqB>3`o$ zVC+yb=Jt6shO3M{evVuH^mM~rVGQ8Dd>5ZNmx0>=x3aHC!6hy-?h4mE_K`XytxS9; zT56l!V~@ji9bT>o*E#mB=eUZSd3M3=9(&1>SJlL%CZm7y^>vMX3tZK0bMF9`8hblj zHCp0ORduluy$G9mVY3rhdG$4W`F?iEYsc7Qa5IahsRiMRi;3i7amCnUhsyLy{3=}H zlf3$~PUYC!&T*;_95{g!IB)_daNq<^-~kX6>VY%3NmNx(Z002ov JPDHLkV1lPM&~N|% delta 239 zcmaFEypd^wvIfHsPZ!6Kid%1Q8uB$L@Hkw&_y3aB4vQHA8*`iX%-^9YF^^lKeVUHW zM1SdeCU(CEEPf9TaLzfcf7>v9KKt~Bvi;v*+dP=`@So9nv4XkXoP07C1rH81GP9p6W0=Ehu_JEJn!{-Y ztrb(-&#acQ%KshBKIZ_$FVdQ I&MBb@01qQzWB>pF diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_40.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_40.png index fcffa7f1c5161c5a04a6bc7af3b1db1e526b5225..b690437dded65d227a651497ae11a4b9b4a4ccb2 100644 GIT binary patch delta 462 zcmX@fG?`_Biq0)h7srr_TW{}r1|2pKa0tBn|5D=YMNAhj+}-r%`|2AH9qSrBA~oJF zRnC@UoR}z9-^i?9u**6odw%_*^SpYJIO-9^0};tV^& z?>5)i+wW+;a6p#r`^!HM_!@724Cm8(c;|s0&-eS42W1(i?_IH7CgXw50sRdul`Jv( zaaWkxw?C|XImPw=;s^T}=WQyh(V26gQP=`xClkBh0~Wsr6QgCoP5^WH?wnv`{M~a# zX8zvwCr`X{y_y`~7Jc__`m-Brcr)GJryjrI{IDwT&F%L+bF8z^KeoA9 zZIt)RJle9cnfZEobNH>h>#BA?*z!8{%(<%j%fr%A1Nkjd+QLn~h3vR_GvmF&qW#Y5 zMP2cwdkuD6{Cb|tt^V6|`QCZ^i{30OSe!j0bb`l@uIiJwrtL^wd{;CNXyt>ne|zt; z=3T!r{h?7>b7;Zp@0*I>co$sGUnZ@lZad#POlQeX>RTVHliacY y+{DteGutbdZk%5GWa%z6Zy(@<1jOa_bqpdV+nFS#E?b8&0D-5gpUXO@geCy=f#SRX delta 264 zcmbQta*}C+ik5(IF>feh*mq<{aRhbD&Y!qLCRWQeOY?QvKR_ym`hqR;9kL5V&->SEr=x z;RC(}Ti?(9*(1u&u;bTVrQ1IrFfDB4X1hL{UytKXXT0SO-pvR9O1#U|+rdzlJq`yU gl!2TGQO3EOq17|uP38d^0|p@QboFyt=akR{01KvXfB*mh diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_41.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_41.png index c84171d97768b086ff05e893f1462307e99329e2..bdd43cd8d9a1dfcb5392654ff1fe26498c35bec0 100644 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVAA$qF`8HQuey=pTbw_3(Ecs= zudmv6-YV_<#`TL%S1e%*ez;F`{iX)px8?Z7U(UVDxbADM>08^sUv{r8pFigTe~DWM4f?%X8O literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KkuaSW-r_4bBiUbBIKL*V`Y zmrj~>DO9|XY?=FgY2GcN1i7Vc-!4ruRc25xU}E=sz`{4@0Oy(Kf(I;q z4?rTEG8RBVm_ebYm`?_V=^%zT^vU)<$kmEMA$ zohfHEWc405>}!wY6yKSeelFE|$Kto)?bg=Ib^kvqYhFF$vQR;2_hh*pGp9aSfBv47 zUUkCe!@c_~er!#;TU8jecU8|lEq6Qf*RDqv%d_|SJ?lH(crpEq?n5`Z1MlNP!w!Ys zpSkCgR*Z@+`}OM8E2^$e`8#Rnr?1x^KUmi$QTgs<+v$Bz^EsFQf`WS>p0byOeCDD^EnuuLc)I$ztaD0e0ssyx#gG61 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_42.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_42.png index 868399141ef03dfd0c688925d16f12e55ad8b5d9..921c17ebfd6a461af9bc1f4860666e36a1c96bcd 100644 GIT binary patch delta 453 zcmV;$0XqK10+9reBre!VL_t(|+U?!jP69C$K+*aCpVlW6LtxVOTxenK#22N?%z~kX zq+UNdvdbv|lMDeFfA0C6yY9cL|0cL1xavPSMiz&t`P3k7;qcI-Q6DC0dSoQd~k`ENpOcRz+EaE;i{e$ z;F3;Y_oWP6G29N5B5(o+PT&Mi;J^u-z=0DufdeOS0w-|bk^Lcm_ctK8SVx5~}j2>X-9 z9RruOr!u$?gnP%yub5z6*=SvGSpc(>lG$-vOim&va%6HcJDaPRO^)8r*;!@!PT&Mi5B&lRe5zs|^XIz&00008NkvXXu0mjfQ{&)f delta 255 zcmbQpa*Sz$iYKq9i(^Q|t+&@5xmpc)91h<5e`%NK#YI~IF>feh*mu9vtADbD$9@B5YB>q+S3LVd0zjUZ!5X;FiF;t^Wl7&VJDJAdTPR z@v$3RdaqwHOlSH2eb4&q4AXhcjo!SDD)1~=e0bk_)^LV*nX)^S3IyN#6f_p(XCKhz zxo#~V!?@!Ne@%h#cF%&N_6KsOb`}Ksv+nR@K6CHX0oKE7KP=}!w;bdgP8o~FiC@Ju hfNq4i216Aoz&6s%=;MA>*(5O*G{!;; zjz2Bg;Shk6O#vByr%`an@&2c0yU}C08`F_=8b=(5VQ{SjUmY&$1Wt$RJ?qYY?}4j0 zNw$Z30^Ex*3*75Cwt>6*-}8>H{E2(r-tust{`U;FD%^PtTf<%benq&u{n-8!S23&1 zhKo9xmWFGcoV3FA%mklYO}2%LK6tH{xQO@tsmaL+K1P+|Q2^_fZUJ&pclgigcZnI_I)1D3=f%eS+dY&{C{SdP(fa&2r4e*=S zwm!5i67I=1Bc46Epv*dEP-kH&k zaHXH{$|?1ZaMhC%-*E%SGHD%L&;8kIaHGc$uJ}6&++vsbh;kmZ+1>e20 z+V=nG*&CsKZQW5mD<4LgtFJAvwLWNFJ~{W{BK7rO#l%1EU4LuNnhmRScCHg-7xez$ zZ@qhi=z~T6Ion#JGs7*5mcKlaEfDi0CBOcJOp!FFMT%VIpQ&7V&*ndn+wp=kPR_5G t8Rk#0&%yo#iD2_5$meJQ^e(iP(eLjcoh?U#`hWq>;OXk;vd$@?2>>v@s0jc7 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_44.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_44.png index fb7fe6d249cea43fd09e80e150d26c4c4eb7542d..7ec802bd73d333faeae87b54773597f2109bfaad 100644 GIT binary patch delta 430 zcmV;f0a5<10*nNZBP{{bNklv6h%S)|EJS!Riy;m_dT#ON9w97U?zac z!aZKvvcoBnN*ZbI{2-5OKgs=o+XOECAprO4Iho)#g!{dHaGSw(Uftjdwhe9rxOdwH z*F39Sy+wlC1n$4T1NY!t<=OVYZ2;HtZ45YY;GVKCaNzcxRi;ihIB?(u4xGRV95{g! zIDrEvZ~_NT-~>+Kk>M7RY6^b>_g!$ai^HrgDpS26&6VvwX$(gK?bCs*tO``Mn$YNW zE5|UkQ0mNJKONk=-(4Bh$UYOx`kw7GHHMK7^=;3%?qzn<`>PoHm3@6J-0+~m?FZMn z6#f=)t7vz@rIx{;U7)*Va#At1oqdiar{t?+8M&%r=Pf;*?i_FeZuM&lSbdLehg-eu zQzv|7J1LCBYt-#uc~w1(D?R`nW7uL=S^4f28*l(FeP?+*T<5=9srqnLJOj(&MkW%; zlbk*wv&UI+g|~d=H9NywnHjFkCX?H(97D_Gr0U!8(Z5gL5NI&>d&;S4c07*qoM6N<$g4bu(761SM delta 235 zcmeBSSag2 zkgE54aDa2p0ZtiKn74lj`)R@-!w_@)zC^); z18YC&6g(*MpSoF0S_Wtl&`hu`TyqWpEe2aN`7Wb`7N*rKd7t?b_tOq_g?0SG)@ L{an^LB{Ts5!+~5C diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_45.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_45.png index 8a5d9ed2f3f464d15f25cd8fa123d70af2316cb2..2f45e4cc51647554c90f8069899b101f48ad6c8b 100644 GIT binary patch delta 461 zcmZ3_)W9-9xt{U3r;B4q#jUq@@Aj=S5NQa!_kZc!=wzAJzwXl4r_b>|uqlgC{hoW3)C#UnX1H^@bM7pO z2WAb`_sn;keXwlb%?Go-apy7bDF4l3UK2huR_S0a)A##j55&adwCvw<-(f2d-hZrt znLV%dF_7ewv6$#9SKnC71+xQWt9k*YEp5TQA+=H!?xAJYktkx zelYf@Sa^)`K~?($Q_KH0OE+}a9hmyS==#|g7WHm`AJyZ?;t_N@og7rc9&dwj{> nx96>*Kz`Lm4PuD*zg&_}zQZAW?Ns|U1|aZs^>bP0l+XkK#be$_ delta 233 zcmZo*SVS1Y8g9`@d8)rqe>F$Jg!}^Ym>Kx*XTIPMoUB zpgwV@Ts^0ZMWe7q0h4;c0~WsrEPQhgKtvju)eD%|{T_Tt-m&U=_7md+tp|GVu{_}8 zzP;7(0PBIb>CN2Dud6m6tThpjVYqYCr{HY-)ck&r0>y&x?~Sv6tk^S~RgYoa<9r^A zf(L08d_eL5$ViYS2RLDt6fj9bY=PSA&46&i!~jw8%h$MGCZ{~O@{z-v0SG)@{an^L HB{Ts5=7C-G diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_46.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_46.png index a79a2b377744e8e40e0af8a0ac3fd35a223ccab6..ff40d4c0c4ce800425619291a4b2e9d1a640caa2 100644 GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVDj~JaSW-r_4e-Vyk-LdR)>H8 zm*2jwmDQx5&TCP;#AfRbGv&e82)DnbkpTAo;{=$775C zTl#_xr;FBq&(V9p^(=tVeABtmX6@=z6NRV!`g?Qz+s*F1Yr7}Ea&I)=ar1c3wex02Pri-~|GB;T;iTPWw-25b z;C%tpRydi=Dk_puzF2S^mi@o?fVb#GA!Gdx4mg{DI>ez0ZxkoCcguX zKtDoAuurl1SH^-7=xZ=}V5@AwlUd7pw-k1LJ3Q;fB|GcsH%nzWw@hR+u)SM%>Fk-b zUs-C;gdz{0XmVe_VB)op>3dZt&;1sqzv$*pop$d7%Z^3cre*1^oc1mHKjR-@_gA0JE_qzC%tA7@xA>!#N3Yk^Ot#$XIs3*HzuuYmKEy@MQHhJ$ w{VLvSuei(AKlzO6-#Or+gcd%Nr~hFJPw6e(ebSc`n7$Z1UHx3vIVCg!0Msx#0{{R3 literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV9fAzaSW-r_4dZ?bxj5W4uSvv zFaLT~VB_|gUZ-z$`akbj%6<00$4irBw=v8)z$s(VC~Q%{q+Y`bo^$ zh3o$D=`pPPY9V<4MaGWvrn$W4MX7E%K5Q{he&unN@3Tr@?0R_a^)0e@wtrv4S6=FO z+HY#)Vb8Y?K~erHG1rckR_~ZLxu;EfCQH3+_3M?J(ho2CSN|n_cggCFUkfJHY6mn) z?>)PsHrII0oc*OU=ilWL|9K_NddEe@g72tg^&bd-&MgE-BAygvQ zkB;ne3z7dCf76rUuIukloizbL*6ZsbO0-Dq&hXrsTIbu4g=a2dziaooqj zb)$hh4DQ`=z!kz}%`V@K0e5q_|Hgo8d{k!sKDYzmx<1_dH~{V(xRIMzvGnCpS&Ub; zW(h74uj7#ht_kquRhzGX6F6`JCve~dPT&L%oWKbjkxwRnn;j6`Yh-n7$FAqA=kjS> z#l|{U2HNblO&Q~|!FF6jJKU#}n;APhE)#CoHQeq!Zgt1i%Iyua&LwgUkB95n-f;C? zBG&-!aJba>>1s4^H<+AcOo^k@{I1E#%#&keT;#=C4i}jc?|_>fE{a^6a^PM6V&^deWD?BHy^t4Y%tW9s}3;Iqptq;12(5D~FqT{~8@z`Hddg=dvU4sVA^L$(uQx<;Kq|&p0f&8=2J$nAm|<`#qTGFJ%C63s?Z= e77MVF@(gjEaATpPt%f@pfWXt$&t;ucLK6U2NMPas diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_48.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_48.png index 7394fb9c13c7eaf60e389f5199e9fc03b72e8993..222fea7b31d11a4b8d5e35fe89086ae2cba6acdf 100644 GIT binary patch delta 628 zcmX@i+`~FSxt=N5)5S5Q;?~={r-P0t2(VuG^WXpVHK|gSyVF@7?F`jhQ+VjH3QNR; zkBZUHF0ejenbW|m{(wcsf)Pd@-~_ROWF+G|i+%q?)=yq@TJ&k@>jLgO{t2=N)DNiU zJy=8EwlvmuInjX6Cq1Ext_gSYm_|}z4$80Uy zeQ>U%+w`{Aa_8^W9)HU*J?HSmtUFf=g5N!QR!}bX?$b%nB#Rd^trEMl`+q%or4zG@ z_xMz2&!Rj2|D~rNIkRE2+#Igyb1YTo&$xQO(D+t?%DW5a4po`%IG1ZJBeUbDwYv5G z$CD1HvcD}XxVm=b{&{n<(!;jx*_FFPcAe3YWo9kAze@bA+j_UZ`Sm-i5V0dKzuphB mRxhdtdm7!lz=Sbp&lBO@T1PGCgk^*>0D-5gpUXO@geCxSqB!ON literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC?dAaSW-r_4dZaz9s_!hroaT zm*2h4`});|nT=xSd~1w0Ze^cRR-Jj$%$vdQ0Sn)p1DrAzjlvd<%<2V9>_8E}2M0Lk z8~}+3TNE&<7r;ay%0MDuWk8LYiaT%<%t-Sxlcg}#$%%vY(Y2Sfc{+)WBU z_u6O2--zw4zw;M{w@6D?TkTNxpB`Fp|5!&~{72!R5j!U8&u%@Pmzc+BUUf8GF2JZ@ z=I*+ZJJAPHzuQi9ZtyR6En97D^-bva4u9?~`(LLuSSP>nez@qk*G28>FaK3HUF_?- z{&UIBI}^jN2d92J_r9hj{@;Y1#qyz?*DL>+%HBC4wxIa1ZPl)el{aim=lo&@g$CK- d^Dgi&!*oUl^LZv_8oWa0q-~fB9{C(@I&}G_|l&Jr=HBmo>q&Pq50{ zM{PPR)F5op$gEz##P0Wi#qYrZ&N&Affg-{d1x(k!CH7y>Ub^$3s_whrdmc=>aL&H@ zwus(m{-o+1pKl6OmhCyusP{3aJLbt}nFnGGr++0gT;DLmnA`U6b&CT2_T5tK?+zA3 zrW@>-{rBqK*RzY8n77--yk>HH|1w64TU=1aqTnj`j6!wRIR`jpAU3KOJYboaCtnY; z9mEE@=d54R8QYL$sWHc#FS$KmBR8E%{Hw_Bd(3@RTk_w}x%zlo>+Y)aXBzv@McV4| z=6#v@*Y>fN{M+AK?k_#mThnl@(02L)jxD>thxB_lOV_5=pSLJDSP;t2rpK69;<#x2 z{|9RPHDA2hb};QwuY1g7zB6<0?dfM@`v(=v)xo_1x)$+1VsNw!Krfrk>HT_g%n_6YP&FcKk9qVNr=W3p z?z2g+B_EhIbXQ3nDAg%Wx#<7BF)4^3VPqKzV`LGPr-w4?XP1Wyves( ze~N!P2cOK2_2LpA{kdRHf!T`1aoGF-avaDH%O~o|CtLC?pFD9VFnAa|UHx3vIVCg! E0KvC@hX4Qo diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_5.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_5.png index 932c4f1122648ec40e934684f1fb364ca7f9342e..13f8e7c2e1600cced367df4c3ee28a82329143f8 100644 GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV6yjgaSW-r_4clJ(P0GvR)@R) zFP*%XI=!*7+3sEVR9_j_j%gPTFv-^!otD|fFsDJd-~r2=24-~_DPzG1WP`}?M(e)s z_QuDTpR+7}_xQ!@X79tbulJneld=51{r~J24_^81md#r-alT#s-&odlxAukD_iTF| zvSX%own*N$r1W$DU%u~an|@sPf!6W!_ZUKVOq70cv7obUZ&{l9oih`7^FCD+m{&bI zV9T;@wS{D(_q0#;%-e4zYVJ64`Tyjjp5>vI)*)qk4$B+LRhrBKG| z``R0ljc0^JYZb`OzN&Ljb>2LaJIl|PZCQFr|Fp78$(`66d-V*jEW34wbNar%%MXO+ z-rs7RdwloDZv`v!55Bn3w;|d3;pxL`%?w!0f6w#Ux|D14Qj3+-ww?UjxB6-2BHgJ; zYiy=^O@Fvqd}fpPou~GU(_c+siOI5f)3p0az|KpNvBE!$Z%uO8?GwuRF0mjswRVxn z`h+`dd1->B?v{I_=Dexs(%bsv>c-vWS#n!e>rPewxyAL_v`uCPQ({)?zTEkKTlt(f i*gXtP29u}%VZQw5zWg=~Lp@-MV(@hJb6Mw<&;$U0;U&xf literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU@Y)-aSW-r_4dZaqGkmFhroaT zmrpKtcNZ)3Jy4wf>(VtZOSg&NE>1EHX7GE!!Z+str;J6Tutg)YdI1wVP{i-S0nRxG zKqA5x1x)G%FcF9{kO){AP-CXyj%(-kD;-atYh3j1+N);|)<1lww!Vm|`dsbza$~iM zZ;NVW)}>Dfx3{m$XUi+AiTr%Qdfog(uItvs?Ra4?ZTbJ|`>jpw$At=vkGtzPMDCc! zosqqxr%_gYvyfiVX*O{ixjRntEed8I2-WqgdSEpD)A~l~xf^tL^!WeR7FWNz`qYcH zn;uE-JNo*70#aSW-r_4ck~-eCm+)`0u} zFTLFqDx%F}%v|Gme7@%U%DQ`9bqwDZ>d6*NY%J#7@n2MS?U&c(Mg_*qoH2?qTQ(|h&Jw-jBcIb+ zEt`0;+$XIij#tl^WBWnZ^z+sqb|2bn_dNUIxl?yO%9>jjY(Lana;NL;$#bz!cmKBG z%PT9M)Oh+0%lT6_Z0mMCPJ1n0S-0$M^g}nd-!H6JWQYIE3`?=Hx&1Ht(B9o;qB}yF z%eiBoY`^tl-Rr!9n^n23r}rJ${m}00uXX3@L}H#7*>19o+M0QrEqv?mXvXl3cj~Y9 zO#aHq?stIG0_I!Xer{k^f50MR!3ZM{oW1|#gnY!c$h{2NZ2)P4IE`oQYd zrmy~S7u{0L%wlCF|HfT)dn{IcWiDuzb}5XeXJIHQ2P9>hfdx? mco!HtKu?26a7b02)c+7%-CUftund^87(8A5T-G@yGywoYZYwna literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU@Z4^aSW-r_4fMhzGejxhroaT zm)|~a=B8Y*qhrn7FPX;#BLilBxj0ERn8EJ>3*VdroH7=T!WNCp>IF>fKoP$O2RP>( z0Eq}&6fmh5z(gR*Kq6peK#iG(JEqjlzx7)AyUp({`|fvCGL#!nlPgf=elA$>pZTop zmyhL21*Y7bG0rg{@QfB`axv$t;-YYQej%t@~CW)Yv_TW&OIFZ0o)rx!Sk>$-jx|^SP#P zzEynRaj)Oh^4&^C4=+BC7kc+5-M>+KYr*mZQ~#`=R{bi9SI=tQ%7TmH75O`M$KKE0 zw7u!|&(gWY7E+}dv)Qh{`eM$s?&$TutIOsbV~2+XvKOHt0SX&LNT7xdI0)~A)iTBv WJ#+Hf&Qb=92?kGBKbLh*2~7aL+`aVx diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_51.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_51.png index 233d862a1631d11a23c2759e0e331ff0ab697b49..e92bb2a382a42439e950cffeac5f731b1fd803cb 100644 GIT binary patch delta 430 zcmV;f0a5w)kLjX?T1P+|Q2^=_q6F7kbCvXA>PT&Mi;J^vo{RUpYf3iLcTrynLLC*X_{54$m z83L{lZshl~p8@VLxXAT^D}ei49^3)fxNpmXJK(PJ+p^%A!!6w{3$F1sZe;icmkhUZ zut(0~?ttLHodZ|3E^yb_*#qvdyUNG|4Xz08iJ=*haTt+MAb*XnWMaaY*-2(9r>q}c zZ-;%jqIZ6F<433N&6s4gVtdl|p&D-HY|WUDc?KtPxyXIkh8vx)KWirQ=-FX^{Y}>N zi;uz0e6u31k>EDrX6EY$*92~LERTfCm;pWOcPaa@J4EhY$9C>YqaOu!ZtXK3g+k$0 z=j-2{={4h@MObuzD>>sLhKjq5F1VzkAcxfNKUf@_FDUz#Yef zYw(Xd8w;+%sq$+L7oTQu0tZf$-vJf^zzLD!Bo>)=Hd`4i+>Ru=00000NkvXXu0mjfoHbdu diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_52.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_52.png index e393434670994da53689287374966d3f3c5b76d9..9b648f1a40e4c572239c4eb47b1a03104b2eac17 100644 GIT binary patch delta 416 zcmV;R0bl;V0`>!tBrUy3L_t(|+U?yzZo?oDKvCcS((N{?QY8!n%%JzB?h+UC5@WlP z`~0Y7k0}6?3;`N$x5GWp`=6}sM7IYnIMJh%4Q?~qr`L>b)1mSp+Usk<6@%-tU2uyh zx9i#l&dEt%xS917T(Nbi3m&+pCobT?-FLVISMUPd8dn5wWU~KzowLdV*Ikj@U9RH_ z0J?J`Z~`ZA-~>+KzzLkd2^^7N7Jq>QCvXA>PT&Mi;J^u-z=6|UaM6dmM4v6P;+Z7b zV~M`MJY4i?J}aIAG_%d!AKE2wqwo1NvSj3v77@7~u2Zq+t-k0tB(fdjXG zVZRA3Yn^RzRvBGaPM}3kmde9rP5#JE?08J!H)n?#`+fv2^P4mJWY?8=Gg{jl9ZxB^ zD8$J{{?u67!exG2rYGS5eoMHDhq!J>o9%1dt=E9%*SMM6PuaJpW^Pesj-|y}<;t7I zpH8)BZtm_H%gnqD!SA|rGBfauKclQ3OU4I&Ih@W1k!=?j{`3oqRXg9*$DKR?0000< KMNUMnLSTY%ywIQk delta 251 zcmeyyyq{@;N(h^$i(^Q|t+zLbs5j-#AU+nQ>&}iqykG z4Z;?U%<2V9?0yee{2mhw0`^E4;FRvW~p1t z?|9b*zXcZ@{kBlA;=wGr zm;;T!?>`rcImo@kb{$7t%Et4@EJOWvl&98}?>sKb@a4G+b|-)wg>ZtD-56!>osDwY5T2Oed?ln>e1NmT`v!)uMxf6 z_(JCM)PjkeKVGf+q`Bkmy~4%bUh2A)sk(jp%O+MH{gYWTac9=TYVRE{ULDjEzTd-W zm-f_U9>j|v&+*M^fRPVaKx`1ntPUe(EEv@vfWiervaic;POzVN=9up0zs{Tb6QAys z=bnBwHGkRffF;G3%nDX-Tiw)s@8ra5VWM|i`tCuY(~S9cXVvy8aje&) zFQv#F@Z!N95%o~rx6xnTorp<^@y^gQu&X%Q~loCII^0FC_o~ literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV65&7-DqvDCc);TK-~i{G1DrAzjlvcn5hixO2P}L* zkvRu|B8|*Y5r{I72t*lBBlp3nMgN3v+GWq5SUdgF`#X!14Mg6(TTsoHaCYB&yYG_= zOxer7et-Nv>OoY$ezwfCiV(MTE24J1IO+ba{%igG*6f>hRg7B>U5#;wKAbA^qR^oF zkgMFye4jJZ8m({Fx$k(XrXE>-$FD%QxZ&x;Dqp{>2UT}eU(Pp|zH?dlOw;KdzukRe zmd&2?WnQS8{8Za_yL98&&uwtq!)H@_{EpDOliWXEL_Uo!xLkYOb^4UBs86S&WbT(u ztUU5NxMbqa>rUUN6!?epr&WGDEAb#T%&L!@`(&=GX4W1 z7hrU|C8oSaCR(#5X|rx!-4ou+Ofq+VwNZ8J>Ym}B`n8VM2pl+p6F6`JCve~dPT&L% ioWKbjIDr#5z4ZcFFVr|mmlWCn0000}4Y&`2E-ko`% zy^cTc3g0(9h8?aC)+sg2<|!9n_;@q#oTp37W4;|?e#g3FRj%kAl^uND+!h6Y?>#zmvv4FO#oahVnP4_ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_55.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_55.png index 98ea8dc41d3f8a299e2a2e00f4c8a197a0c2983c..eee8260f5ebb1cd341ce4fecb8011d15c419eb39 100644 GIT binary patch delta 512 zcmV+b0{{J$1Ih%DBYy%BNklQQn#T*gg%)-`U# zQFq;a+$*dd;2d$4a68Q^|NS-Y#7ADO8((WM!u!9^B+X zdo{1seDX5Z2Fn~XYn7lSa3hvDn!PS%VnvC%B9! zCtJX2ZQ#HOoWOw-IDrEvZ~`ZA-~>+KzzLkd=}+I|e!)HT0KXmp0000nsBfIT~J2TC$&Zu-cc*@&5 zOonN)BBM#YutlS=MFEp~!2=e*lMlUq{(W&X@5{b9Z-X@}`w!oL5LGU7M`ed~{0g>J z?0LufRbFkreCR5}cR7v%=7;C*{jS{i{R>y#0lxTywfpyJ-C2rY+z)N_JF~4hd+wYqhk7McAKpIAbNyGUvbyQQ#VO@GI$T4lubAc?S#dj0w!CF3 z(0QvCGDc z`m%qk~+BT?Lic>r#p)@s_728Smo1seV@^=9z_gTl1Z`PELkB+A1@PEJJSpQr4_vC`u3%3s276#Ax_+u4!)NR9ew@MI=d#Wzp$PywBhrfi delta 217 zcmaFIyo_mrvLVA;PZ!6Kid%1QI&vLQ;9)rU=l|ueth!oB!gE{Wlr7rZ%;cu(#4uVk z3R@H~sTVw8nHV5de*nm9WLAd=_&qqlIp+YU3`EKD?uSah=1ny|*vLG+R?VW|!2wyW z@V9r_&J|5cUOi{#&r-e}OA2h$8@0E2G%&OC$ymJKv8o_{bIw%zoTa4jjrUH#=Jw6OT;OXk;vd$@?2>=3bRB`|S diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_57.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_57.png index cd853141c3a53f7653325c7a3017cd2e139f0a42..345c7298d1240a1c150dfcc93fec3fdc62c87bfa 100644 GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU_9yR;uunK>+M~~NzDoZ4uS9L zU#8?w4V;xH@VV~lnlz!Q=}fx{Zn;Na<6*RD6t*Z}QZIPG;`e}sZ_WWu8IVXLvwA_5 za!mGh`e+LDeQv|;H^Q5Q@5R@J?n`{g z#0ON;&30Mld%}**-#4zh!*H&2jO?=^azCtMA+P;+jNXa`l-&e(b&VF9)*EX|Y^D!OKyeIM| zU;gcT?jz?aee-;m;cc#WKg>5jaP!}A{BY>oA6h#eXD=?kld~mp$C{lF&)JwKpIaF* z$L07M7QM#|ReVd5TqS1)yNd^$4x1V-z1pfFXUD{&0bit*YiEawuiX1%^FFQgy02-y zHAJWNy90TFam(Q8 L>gTe~DWM4f+D_^o literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2uRUEHLn>~)y%EUOpdjFS@#gJFbpv;`)1(jU zYC``d7BI5&$?RBmw&a*Bk9qX*5J`sT*5~F6Lu`SYN!T$6H-jB>S&r2x=7r^N8<4jd NJYD@<);T3K0RZ;?XIKCL diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_58.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_58.png index 409a0abefee99008a3abfa58e4541c38481d4a12..c310e17bc924a8e211b1d8690e261d03ca5cb124 100644 GIT binary patch literal 613 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVAAn)aSW-r_4e+~yjBGf)`0*2 zm*4(=%#hSTaR)%Zq98@-6c)Z`ns9ldi{Q--N1*7_d1Dr6D-4DbDk|+IkJl^q7 z($@dz);GU)Z+`n>x^>IB{s$Kr_nv86Eus4I`R?e@otF-*IiK!x zJGS-o+pfv4!W*@BTsl`Ld`B|u>+1tLa|FXfLeKeaw0;oxzo)z8+L=k$IWC_o zdPAC+dT4HiNsM@uYRvEIn5+8@7_YOK|GIf~w!-6?lM2thm=yjiJ4F0WAM35FuJ1jp zH{G7VH9fW|egE&XeGB^5&)Bqo+9%gn&dhvs8ie72gA_zh{OcHPW9KGn@~!*_Og;>r Lu6{1-oD!Meq-F&Hhrn<9 zU#2ieeR|>6SiJg~w(#OPlS*{#bt5;jJYeyAaDa2pfkt5qASz%|F93s5N^7*H0&$q?>pID&$yuc>r{BI?(4PwvVef8L( zy8RT#j%$xy?p%Ce_0VnGlnz#A^BqT1@8#z6s^2~syEol^$I|7e);wHNrch}$U+2%_ z2T^)PQhJZ|IPLFUUv_F9ch9f?9l6!l9(>yQQ04dX1Hv({lHRkFw@&?Ayg>Av>~xdR zZFw8>59I!rHQyAW+rKAkLe;hhk{R<`PtVE8o*(K~8!rEKf~BxQwRQBTlbz34;a&sz i0-x8gg~^@3zl=AuRfI2j?Ry3cZ3a(QKbLh*2~7a8rmQ&t diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_59.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_59.png index 5098cb3be57760b8a6ff9a929a0337df02947ead..c8b2271dbec0b51bc9dcd30a91b3c62b8d87de0d 100644 GIT binary patch delta 409 zcmV;K0cQTi0`~)uBrLv3L_t(|+U?!JQo|q=hS9wLOV_=&Q*!yC+!FrirT~#&6>prtffG1=Gu(Ck{YsxNb#8D26I`8SaGTKH9aBBGTje6O(PP0iggf#4 z{}OJ;q;`C^fwMUI3|wNepB)db0o=?=7F_67nVx8H;A{uLHG>(k?oxK)m# z-TD5^IV;yXdY!Z5+QC)F?;P_ECvh#uz*T=zPlmhm+kf{Ca2(vsg@QW}E^#YOeRyya z_x8#PYsD)M?=IJ?8x((duiY&c~tDd*|8PcoRI9z%uzIqFh+!rRd zGTY(w*}#DlIDrEvZ~_NT-~>+KzzLkdffG1^)31I2pOn@%4z2`T00000NkvXXu0mjf Dp@Gcu delta 235 zcmey)e3WT|iZzd?i(^Q|t+zKE`C1it930=(XWBGKd9F=3yyu8);>DkVKh~~JIm>Z? zbIyTAVT(p)^#UgKf(I;q4-Rln3=o}oN231q+PU-J{N418&D`L@iwOsPovNdR@7`Yh zNqNh~tq-^k{Vn{j`!J1X>!a93zm`3m;oVtJv6xG%jjAs^IIxqiL7UCo z$l?BurizJ<_t%!Lnp1JVD~|QfV=?Am&s|FEj<_-SJz(LRbAVIE0_F;Kpa|F%@1*5{ ePGSP_^Op0qU)Pq}Vxwut00f?{elF{r5}E+;!Dx5@ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_6.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_6.png index 33fa840f7ad7d92c2796d64f520681a878dc36e5..7f2655e1849c571fa6ee7863f50a848b47c4fd24 100644 GIT binary patch delta 429 zcmZ3O|8w}&|BT^0+pR8KRX_5rAe_zaE*fJJ0@=4QxthnYsVAOr(rw3+>N+?Y0v8V$v6HVKNxF!W0kk&jz#ZxT=l+j zx2(XvaOIqzN$Xp@?@8p8hjYF={vfEldh_|b+x89pXI$6$aE2}}_ph{NT9=iyT{!RC zI|JL3HnriiYIs)s@m!Lnwf41y9OLre%peb9@pArO##7tAiOo9kIe`HPJYD@<);T3K F0RV;{$z=cl delta 233 zcmcc1ypm~xay`QbPZ!6Kid%1QI&w7_@VFkl^Z(LUwxt(Tv}UsBiT>NM@z^DOZs7)D zi$-Sk0w#992P}RM4sgyn&FJ6f!+1xq#LGnBMbr!4XwiY|4Kge@uzs@t=)XJjZ!GT6*c0L)4`ONzsA81@H zYxKKDFvck6yW;2T{Bw{0zs3l41>c;B{!$z;7fjy3C?Xzmm3f!3Bg+fZ1?CJu;OXk; Jvd$@?2>{eCT8IDu diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_60.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_60.png index 9bd51bf859ba5e77c6689f40af954f399f174e85..5990048b114138e843654facf1dc6ca02cc5f6da 100644 GIT binary patch delta 630 zcmdnX+{ZdWxt=N1)5S5Q;?~={cl}xn1RN6Y{a^a^+KShH&)K=^)IV}*UY66id~=D6 z{0`N2MFqYijTVm_WIB{V3;}nU4(37-gZ&YZal`RW;h#UJw_TPzee?QjsrJIc_f2uU zb9M+Hac%0Bc`tKf{q=61nB_a7eWq$3T-UXlhpAAVwf=YQ1nVVhxBOgxq?GN~?S%4U zrOS4#EWcg$D313_@R8iWWy@T|Vl&*= zf4@;4v+RlK)X=c`f3oU}L@HTxLMr&-CDqwL7w=O+R@|?MSNe<8w0? ze>u29_DJlr8ou{&*!(Yj5pkWna*K>CBdj~KeP49!&JVk@_IlyX zmqoAm?rTmv?HzZsOj~um&&te2f3E57o-(IIeCBTM-P%HO@hRul9be_$aptR05Myf0wAchOG>c+m&)uq(RuCky*WfiQVr3i{FC-oO2E|0!4%^3YgRj zKq4%Ba}IFIz(l~xKq3%jK#jWuVl?O1uRVTJ=JcD-sb>!t?AYvholoWt%Z?Kdl>VQe zbK?4ES2aE1cS74w%{qAP&{rR(9iGj#^Pli+nU#ExORspreKqUi7~_X-wzsD>ThDqC z`(RqNW#_&LE_w>w@7~B<{G6_vn8$g&Xye`jNdE9kA^Xdb+KfAMUhIQ3#j^1`+5%=2{KeyE$+nQ6^TebSl z->2XA$+*ffdcU1><=!&4wTq1&y4_tiz2)^?+Y@mG*Xz`(SLeQ*EBqJYf0$RXg$O+0 gP(lP6aCujSC-D6+SROky3m7d7p00i_>zopr03cn*ga7~l diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_61.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_61.png index d10962f025a3a35243413ef87e2ffa1bf7d7d126..b18dcd60e469f72de0e757449ab39c8508e975e4 100644 GIT binary patch delta 355 zcmdnRw4Ql_N`0B9i(^Q|t+#g$u4^(7aJcyIzyIr?WCI6lp1DPNhh9Y{S=wpnWav*_ zW6AP>#qYrZ&N&Afg)M-nfJwaoB*MZs=Rjuaj%#+&SL(Kz6+AdlD}Uu8a||bk%#Ppw z6BjQxEinJH-Bsq#sq1D1V(LFL7FR?k9}sQW{i}>Q#wbQ*X{-0@hO!i9cD|TnU)6-p zo9g|XUjJ?L)r)f6&+YPtEDPt9`O{yV0DtipB50&rEc!J^A*)eto0c zJLbtBG3hDhZ@s*?ky*Wfi5=o;Xh?uWme0Rus#q|m&g7jZ0}yz+`njxgN@xNApF5<1 delta 202 zcmV;*05$)w1G)l`BrpL+D-fQKmR_+%O|(vc=5uEi{k&MvE@B+I@PlKTi{IA>((3-cXP#j5WH!9 z{ESW10abDN)@s)MqU(zCthwIZHQau#@Vcq`#K!20bKbns+PwR<_CvSXlO=a_?Oww4 z-ebo_;kk1k8@>A#+UtEydHg_2{`$mc8Bc>!xMRY;Z?9&YV|XBZzvV`OG?^u3$4EealNdSEoGC-{Qf zx5aj=EMLCe5XSduUDT%U8-3#WdbS<2mYb-ZeUtC|b=ff9z`wsuMYqa)Tyf`S#+qLj z7oLgg%ka~B-?qy1(YvUBrgyxyyou^-l+LYmzy0z}cVelo`<_o-B~xe4%?M-Py?dH+ zoKgR}`c?N<^`CLI&N>-mKCNWxrVKeV7HmG`1p4;;Po^ys>g!F9Pg?*?I}Dz#elF{r G5}E*5wj2Hc literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV9fG#aSW-r_4bA%-ysD7hroCB zFL#-k&EhfG;!|s1xLos-PQdMjlT3pd{2s9I%{jm+W6>yV(a5Y`z{Cy|@q2K9bIt*f zh_FQglX?M61fmQi0#*jpxKbh}`~CG7&(qiad^@#v@0r)l(sOJIjz4!;+-$c$oh|Q4 z`xMUbvXy6=Ue9eg5zDH#!{ysMLt}659ZwFrKRov!^kLY$+~|XUfB9UsU3cf9icw*> zjNdz((6ssMybtxt`K3JwyQ8Z8VOxvz-$k3NV~)kvUp=@ql|Sc8`23CPUu2r9rdbx~ z?&E*M^!s$D9L=!WNCp>IF>d1rJ#K9vtADbAVIE0w`F(G%-b>9xTP~_n?F?=8L4F zvi>-~4T?{Y{ZY{BFaEWAi!6583$~ti63;;`*;OwJFxi`0OY1*L3geoF=ce znE!9gN0vRZ1?skOg`9Vue@{8Qw&L5h6N#H%egCU_C;0#NsRzH#k8|P{w;b?uUW90|7)iB1LMh0Uq0Xd=3%P#ofB@Uyz18fk2#3NT(jHK z<;w6qVMpxsyqVK^X8snC@>AO0l$Kw4_RjP(`=WzO%U6`FnlsaFb9vR%*$cDegZQUP zKCXG9Jmt*i@Ne?R*3N6Iolunt_BCcWyj*N9!r=2pL1ywpE(Rd*boFyt=akR{0DoWI AlmGw# literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU}W=jaSW-r_4Z~UUyA~d!@+z1 zFI6$Kws;-hb0psUWsc74V@oHs3N{E^G%~9fFtPhRVDWo!fOF1)MxcnWMFEp~0Z4>} zZ_WWu8JGxI8At@845-mcMDNkhTW|M0kYcy7N-6Lx$Ui*4GQR)R(Smq}1C7kz*<-fe zO*?Km=ZbCUxj#w`-c8v*Z3?8{?RdpL{ZoN98!w;Cjx~h}^Zy@&a-`F>=%3F>s9E7MAu3x5lm6x4oD1_lg+r>mdKI;Vst0K;Q;$N&HU diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_64.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_64.png index 8f4fd7337bc0790f4a118a95e8a611884fc4337f..38156747b40f7556f7b0e1ecc99dfe8feb3d24d2 100644 GIT binary patch delta 412 zcmV;N0b~BU0{H`wBrL#5L_t(|+U?vyZi6roKvC|0>2@EL63>in2Huyts6rgzB?O4% z<3}w!>;jQs7GMGgPT=%(xa0WyuX;>ylfg1OyLvou|LowaWg_FAJqB(vT4ZN;IV84+ z>oP7lXyC5K?RG}_dN^m5&EYy8N?#Ax^?MK;xITE`9((}~?xvp*Cnp>5++_B%PRpNk zTEdZRA%9NbzzLkdffG1^6F6`JCve~dPT;^rpB$VYq-qpCThl@bZIA*IHy)=0(Tx2HK)l<}GU+Zyj(RcEW z3A4ck4tbI5BXHoJ3peE=Gzn7)mpMUcbLXV&w$GO^kx#+ddS<^*x8Cx~oNCXw;ah#( zl{suj*JXIySHqn>f7K^FdswgjWn<~jI@%vNkzf`V`sf$WiQX<(M6f>q0000q1Y$o&1W{euT~ zRjoJX>}hzexcR!(#Puag55acHSOD!RV8UWMNbmuR--C$}dN9A^s5 QH5q`w)78&qol`;+0Qs(FcK`qY diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_65.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_65.png index e65e97e10fd072988433ff16d75fd12af61baf9a..3134fb0ddf22ab3eafe70ae6c31bf18f6f3a4381 100644 GIT binary patch delta 588 zcmX@e{DftKay^r_r;B4q#jUq@Z|5CW5MXuq|KET6`-#EKySp3DP5gCX$&qh;`VJ~p ze@{%?IfY?PgK)tEmN^Z~>M&Bqf)U6Dk=h4humAP;|Gg&nTh8xYuU>CZxfA?Ri~Gi= zx699;)yi?>U3PHmn;YA|+sAhwaQ&{oS#0U;8Ljo-uJ_$P_*E|9{5S3HS+(ACn8Y*h zS2MXhjPhHs_@PnRm(4S#7T9io6MAu4!|v>Qu9(pNqLte3RCefAO${vwojX}<$B7@G zUrJW#+<7r`Cad_)U&_vl-dd|)-Fxa@^wSg1^BBeN&fMKR*HA`6Hd&6-+=yZR-PLPa zUe7#e_%zhwsc3!WHNE?mFW>To`|ug;;#JHMTrTFDUl zc3zj5<`Qt*vviGv&Teq%DyUMQf?C9Ed z`f%^Rvpzf4q^s|k{vd6ey_nvoJCT3QDsAp$)*@fQcO{0#ODMfhYrNG;7L!`%As3=9;DQ^Srfna?@IN&)##2^Nr>AyRXxHbB@XQ zG{2U-v3-C2zdV+_lA4*tfmMBx8T;AlSjB6bCw>n1%lf8U$aUw$$BWzvBI}+rSxM<7 zFPJ|$l2d$V>iVv2EO)McTz(*Qt;Y0UN9M9@Ke}oY*Sf62OU&k<{#1UKt3))P%x-)Vg7_cqTatol c`P?ezmX1F<9p9Z2fKkKX>FVdQ&MBb@0O2OXH~;_u diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_66.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_66.png index eee187722ec6725008fcb8ed731cc400cd6dafd8..6840588bd3e0da1b720f636a76b8c2a64a101572 100644 GIT binary patch delta 446 zcmdnR^qF~rO8qWR7srr_TW{}P3~DwIaJcyAzyI~}+uOIK)bJKbVyeM@;-ESN~G7;NndM+uN!9D^Jcz z6|(K?*{P-bx}iER;d6w`aY?)Owve74_cl19zN=E`Ijs`P&C>`QKLCmol=yliBfx@s{XqxAn>E z8)g^oDHoHP`1;kQqbFCTeiVN2ZcpEfN^2p#&zIW+cdWiHWLthZ?|`X2JUl_36Sjbb b@R!x{`K~`i?wiEFVgLe9S3j3^P6pne=;Cpv! zS@;^pbsTwL_N}?!=-npm%JALjj%>@hj0cY@JQ%+hS_G#S@5rlP`atRZ%m)W7k2gkt zVBiC)FZ*RYN96F&6Mu|%oGO($!0Pwl0Oy> diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_67.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_67.png index b2b938b1782cec4fc00e4b05d89e77d19dcefca1..e1047ce4b4880e4c7f97dba35c730eb495aeb484 100644 GIT binary patch delta 541 zcmbQse3oT`vM!T|r;B4q#jUq@@A@@62s8xV`@i(-HHqw-GjGmc_}qI>fHSuY7q{B$ zuS=)JmQD1NuD``v9{ayOHEw%VY~0$*p*0fW@7i+PQfi~Zy zi{JCv&6(!7-rx+c^|Il6cUN$x?cS!@8xFmHQ1@@2@Exr!k01Q|RhhmcQu$P}eWAA7 zRO5$ormM~zaAj8y-0`AsU-9mbf&~{BZz&28Zk=5#Yg1KFbZAAr(Wcn`7HP@Ac?K3A zJEa?}GeaV4XXUY9|2Q$cEa6I4!6aF(aJ#)HY*Nnsb6tG*twULA`QfQ^Ppwlke-I^Y zQNW~L@PNhd!2!-W2RLOc8im0kOzeISSonYpQwM z`;|7ocYS{14rBOVE8T}m@1sk%G;{B9`%)5IIcwFQ>&9;%E;3&2wjuqX>-z2e4brlA z&cx__s*-0F|9j<5WZ6-lwKpdgdhg)5wdVfXTl~2XH~B}W-iwW2bh=UdohtU(1~5 W|4^25f9f*^An=`_&qqlIp;v5utg)YdI6Jq0ZfEb#sVlw7JOA9hnf-I? zGP6qQ^EUj`5BBQqQM$9rcaO-sGY7voxIQS$nRM@eJl{HYi>?CIJ8!&`tadDxmE60h zDSE>L_Uow+!+fV?-Y>LXb}Dgd!S-2N$_0xLpVYYXqSLN;_eYK$ z7h|o8S4g%-|FxV^WpUCVv`^-`?!zjzQ#^+|%VXGMmaQ!MmbyzO=BRtz#e*xZ6bQ+- zrrYi9uu18wTO9bVOkvlJ)eo1&o{E|%UGSDyW@4a}6=6^AaR17-!TN#6g6ZLQ3_#%N L>gTe~DWM4f02rVp diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_68.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_68.png index a9306a557771337678c911e2b12a0095a19467b7..2e83bd5ce741054a8ab122fbf949e2ee1d777112 100644 GIT binary patch delta 401 zcmV;C0dD@U0@(wQBYy#)NklfCxn=v_8>PMx+KzzLkdffG1^6F6`JCve~dPT&L%oWSXcaL4i6S8{xCjp1f}5WsyL z;FaToYYMl^DG?mF{o!^;19!4W0k?2f+3EHI+#M)iYIdEcpRqria!H|zTTSh&$u zV&&)V-YRiRxYRD@)dM{`*Th2SF>tdcy=o)TtK+)HEk0GQohN;5xuP z_8M1xL^X<%dd&814%@6MM|LHz>|{Rr+QftH^mwuRz*TUSrFnJImA@>cZe?1)>Hffh v6F7kbCvXA>PT&Mi;J^u-z=0DufzwBC=p_af8p_g600000NkvXXu0mjfF0IEJ delta 222 zcmcb~yq;--vO2>zPZ!6Kid%1Q7;-fj@Hkw&^Z(K=Zqar#wI{U&XCF+SBsD!sERJ#F zS&jNeX7vIl^@0a1eh&_C&N;v-W6>yVQNXnPV1eNMd2>G>6m7Hqs@PDy=fRns54sMO zS_&O(e9eDdmiJDQC*$-Tp<%n?8oZlcS4`=%)4HD)cAS}=Pi6If^Ud@O9wU;qM7S3j3^ HP6yh`?=D3 zEA<_|54CKC4mPglEoYM25q?(kso~~RZzNZp^km$zs{hh)J1w*QbJsJ;Srj}taCc81 z^LEQQCp`^!yqT%B<7of7RsSz(0?h{+{s3ehr;G*AMv!$(>=XaU*9SA*c_F8G@od67 zE3?lvnYZ7i^X@Y3IPq-W#Mp+io8RpIeil+Hn7{A6<+ID(QkG`BgyUHBeo5suO7FCY z6jv#7Ub1(+%DY|cc@O<6CT?tay(eO|z3h{T1rv|Q>c<>g^5A2^{&PI;%dTzSw(@_f zj{9NPY0S0-k>Yx<+bsUsu47+Z$7-H@M>*M2O7HRZ1l5=?bNbt7Z?%|jTUWqo98}Od z|7Gp@7q(^39@$juL?1{!^T{nOx%|(>o#nUei_`Y7#=PF~W^4SH8yBTBuNoq&7-V_`?7Mp00i_>zopr0C`5y82|tP delta 225 zcmeyuyoqUovLVAyPZ!6Kid%1QI`TCr@VFkl_y1A_<6>zSySdYMq#m5H?3h&7nixil zMq!HrCiQ{`EE8|Y*E6d_*nSTVaLzfvDFcyReykw${rNMS59acGzuL|4?%Aa9xtw{y zJC;o3;EOT4!8tQY?L z_rDyvbQM$5`NN$LV^&H#3EgHtbc6eQ#ffQ_Jd75M>JJWZS}?Nv!N~$95F1FYYq9S8 zUO)47*!HKPv-=k3+iYv?E=w@q@rwVQ(T<6HXB|=>gw=SQd$-s24o`vDL$4jHw%rkX zceT1c{=8k>K~s|tJn!BY7Dykkt(Lvxc7KOxsOk>Zf{Tw-xWXe()vLyoe9-EaDrkK4 zgfBGp=&AF^&p)1*c$e{E0Y*MxnbW|m4kKlDY!v4DX0Y;}tWDL~*mK^8 zQ_W&u-nwSDOFeaqtZZ#OTluveGn18%D?jhqvi#Mo#m_^(?0#yVSGFMSesJO0i}~(X zH=g->fR)W?Q+M3czXuvm^QL?eobvZ<@3zm$4;TFoDEqT~b;i{4vbC$0yFID%erVWaKtB8hxsJU)HiI(}Tk1FcmPV7d&9`dvJhr&H+vti$-A!kO&jI-vbst zpvas9K#@jfs0c(ENCct`sFCx5*U!H%e%^Vpb&CohOlj`kSFrrxUCRYh zE97=ail4k%zPx=k<2%<1A-yc!(}(8n{r-$2b%_>{iK}{U{QUX*_YUPXq7VK&$~&~yBs7nIdg1Bp z)eo1HPp*98mVZ{Q__dW=?lyZi^UrEK*!8j`JeikQ!X1z59c;b^g#*~v;BWwI+#Z_$ YHbzLb^ZLsoVCXV^}K%QuH$emIo|z8kp4|u*g_2!pH-hAU2TPDfG@_ z-~XO>%OA&t$!xFUv*!-CY`=0q?brjM9W&nwF&P@Ip zZL?)xO#ExVZPgl{h_C-wUoI=PEPDNDNwww&-gUdq{E*yHF2AkXvOw&d?Dde)d2^F? zKR9QTzxUIuJ&)Wc1R0<37g4`E_3ex5Bj?2LK2T%RH@#aX9^?HmCH6q0Z~+tFoCe_n zkS8G|$g5aA%Kq-F&H2gi5y zFP|_iV@Yf4__F%e`nwX&>r=MWZb>~W)F5op$gEz##P0Wi#qYrZ&N&Affg-{d1x)G% zAQ2Y6IR`jpU?N~;AQ6Z%pvGGa>$d)$fA4X~oYP(3d*>bASTM2pMAVHQ(;wV-&b&4f z+aUh@`uoifz3x9=S+Mx{$sLP~x4+Qc|2XZT(rwRUO^w`ng;T?$RqtqRaX%2d_nB@% zsPNNID>r3Xyp;8LcTSx<@AgU~=Da7&X@}41m7M<=Zyo9;rt|Cj#a!zu>rGz^f@-x3 z*v0prwP1Vq>TuY7zMexnA9XD|by0U4SKgD~*Ob?v{QpC4$r{-w9S@gOZF*bV7x8m} z^qnJ*QggRoWxgI{v6dU|HB`@H2@_B#LBa&&eQ=oUSp190AzMJbSjli1FzgvTUHx3v IIVCg!0QtAJHUIzs diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_71.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_71.png index 551b11283c2b547476b7865437a8290dca8c3e35..a32106ecb0202353b4f4e8c0aa6eaa2bd7f2fa22 100644 GIT binary patch delta 448 zcmV;x0YCoB0*?fcBrDcQL_t(|+U?!Vc7q@gfKlK7rPICr17-#U?{`iYJ*g()rV1|1 z_0g7HhLKAff1M0>UEhCp*!OGUej3!QL9W{G>)~1kF*3-1Z42&`Kd2dlyu%^!c(^C- z|CMmiz%}iEry1qeaM4*{%S_eeWCOU}4yDH&DkE?^o(I8!TfdG2x6xIT$RLATj5j(9 zG&z}wmpyg299Rfgv0n>tffG1z0w-|b1Ww=t4xGRVlP3WUkz5#mo&nc;Z;*_e!L)8y zeLu?T*IxoRItYj&z{L*+`iS$BRta&mGy+_CGp(X~|+Zq~h)kA#a{ z?ukxLGQX2xp|CSe-v#!`jo_ED%w%PBY>`QQK?) delta 228 zcmV$~9k{GrYma>A9kJ=`15KN1caxS{itHp*zY>J~V%saj3~;L@(rZLZ1+T;lH_ zIB@IVao~dfHK`04++w`DTcG9Sk9f0Jch7-^fKQwQ>j5s2@e~aQPT&Mi;J^u-z=0Du ek=Y#=RP6$0J{K+&N^!OT0000jlv){kle(4r}Xc? zZn@=~^vmb0PnNm$a9*j&<&VJ+wT>^4&0CVJJU^W8$@$N{JW-}GuPt|3TV4K`UNDn8 zmNDE`HILccs6h1csmF$H=`Hol;a2(fl5bAcl^(v^x=r-X>P9=sb=j_!+;`5LTE+G5 zuH`Ndl|7EI(md&rgjSM2V^4;GczJmWiiAa&laF5Qb83vOnnmh7tf>XNeE z>i7Xy{k$iO${T;5P}lnumHFjd-yS9DyBYoS^l!B*KS+DOZCz;Ux0CB5WMns6tc>Bi zzmu_!J^bsnwBOUuT-0@V-e$cy@ts8TTC)e6)E?jq117#X4Z!dKlMh(tG%%~fNSPf! zkDcUtKJnYdUz(v`-Hc3Qw6f>Nl$ZTmzwP3#>6@?qu+nBb`%O7i)u5Ph{lEE{zkfug z?)I@?{CBqQ6R~+4y`J4pdAes^S?uwf4}TqKye-WeBY5Y{q9sMDw>z(e%9L8hEV+|+ zb=4cb9k*|-ZIZTiOZEJrw?j0Z+516SUvT7tT}vN4U-Uk&fPGP;wMg#n+L$lZZ}N8N zZZp$ literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV4Udb;uunK>+Ow;ek}$94uSvv zFaLT~L%Qu8&+WqVzBNW(FB_LV{c-68UoeB;0~WqH2RLOc8ig$ynbixJ*nuK`4-Rn7 zIRFw7wkTjyFMx?alz~LR%77X(1@097`5XDyerj^%qbk|Y7x>D}E}S{A{7~pQN9&lB zgo*dV{hpkE?W(p`YTZ|<@2|#i%tD@cKr>R-kWnm^4jOyFvK4Wt=)R_pYrEdf(t$$m}_ZJe&%2p vd%<2r2%v@umY@R#CM4)UfeF!Qw<`aK{S%k;X$xlo-1`Zs! z(Fq>?Ob2e!xovi$U7Qq!yK@)@my8yT=L5LF2^=_q6F7fx0w-_+2TtGw4xGRVoWOw- zIDrEvZ~_NT-~>+KzzLkdffG1^6F6`JCve~dPJ6-itPv8mCf8HX$r>|iTUyjcXTxPY zFA{Bb4jzU3_IP%@-ru=e&+^-{z%xq&_l_C8Eg|Q)Y`Bbtv!5O_e8JS!a9Qg|&hEvL zW2S7&E^uH^?rq=}!1Z2~fIHUi6}?xL;5LK1I|jIo;FeDoxUst);J|^KnSiLpvPaHy zK7c2^bMHcD-DbLay^^=QqHY*RzUIjDX7{YJH@ z&-a_UqE(5_lfgsWAj=!M0#fRv|P2RP>(XcV?+WL7U=QZIPG;`aa~!YN|`6a;e&~Qm4QSc%0L>WLvN=aoq0FCIhvuIWm-#kX2$RLvd?Azvb|$}ILR%^sQM^?3ZmqVI%L z48Nt(^k4?R1DqBGOnwI%g<&M$oCY8pNKTG@uUq8|KearBZr{noG>m$Odx)w}Zx+z^Ip7ZfHxwzldJ{9J_Yw zD;r+D-68s|r)%oV*zW9Jy>F9+)glW?M)Tb&=k+eHO}@dlZq={ZjNu#axF6s6ce1eM zmxAcnN=^f`ICg#gL!{tXTDtf-o84YHRgSURy4Q&>!(xS=7irgw*2iZ zw%F=-W3}<(gT4)`_uUGc^C!1Hdii#XlQFp$n=)7&@&kh^*T-I4Z*+OJn@?K%H;Vf#%2>E%i-lyQnEQ9j;#P})ip5VEUB2(m%8ak$0VV~k eo&}|eyq}DAzb%g*(D$)m00K`}KbLh*2~7Z};3_o$ literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KnvaSW-r_4dZ?Nrw~!91i~Z z@Beyn*s0S8cv!ahPxa59;w#)_nRjc`VNC}00w#992P}MZ4sgyn&?s!t$P5%wFL=P> z_W&fqDPsW?go%KafknW|fEu?*-YK+++j~5H-{-5VfBlX+&a_VW-R1PKxi`){*(vj` za>7N%`S&L`zMkoEwP5l3S4$s8{l9o3)b!Jmz6hb^2j`}jy|z``yrw~0u14e?&pzQh zK3h^B+>_mW+4kL^o66-=o)%0LHcu`tI=as2)7{f~eybik4JKy_~f2ynB`Z94klK1h3 h5-8j-LTT+C*#L!8aosQF1A#Ha;OXk;vd$@?2>=G)%K-oY diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_75.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_75.png index 8f20bcba65d679a719b823b9e93800b41abd627d..fa538497757418621568a8ff543174fead9a3a3e 100644 GIT binary patch delta 478 zcmX@k)WtGErT(I)i(^Q|t+#h$^P3DL8Up|QpI`Rf&Hdru4DIKhWg9g#WMa6zKU8F% z=G)CM=K!aSMWe7q0h4+G6T9C77CxZJoC83SzfyM!|NIaBD)pf2p_28^#|tWK?%eEK zA7Q>jX~)Flo2N6g^W6z;xO-8~`q*Cm&9{3#ZQOinV(F|oId%-&AJ4z!-d`v>S*}35 z?7`K!JbW@c{C1rB>|7vTUhvE!z37t3>YljOB~}KE>yrNZ9bol)0JRio@5BVLdQ_J* zGOHIvvA=uw*KysQXqBSoSyS_}CfBilKVu%h@#21l@S^i)Pt5-R?e~kK`DQww?AF=M z+xYfkYF>Wz^G2)wHWs<>h-Uw< zRWNtHS;5%?(coY24D-BqY(8x_Q(AoQkuNVT%dbZkIxLGzk^8%8Vc*S^l5f9w*Zp?- zDO51=^NbhMol^G39j$j;Huv~S`+^57$Q}np0Z8P_HBtHUL${0qR;Ic$0D-5gpUXO@ GgeCybQ|adb delta 267 zcmeBTInFde#fHz*#WAGf*4rD7T!$3|90K3hzf76$`e;G2#IxELtBy3Szq0Xh(8)Gk z2K53acE1NKd~*(P&N_3y>Xnxi61l(_hQ>t1^cefWXt$&t;ucLK6V1GH^Kn diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_76.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_76.png index 270c77d1d5f87cebc413fd8f48d621f5f44b8cde..673fa7c045e84c39ff1cc9873159ec266916632d 100644 GIT binary patch delta 419 zcmV;U0bKsL0`vorBQ62ENklJ0tZgubUWPh{QZ;h93#&OZs1^pI~eW1$7JoxTjc_@&&Ps04DPfS z3Alq^{Z-JwfxG8z(mD!< z%fNbm-@0AT{vzY(MO!iVWuI{ofEJv{{-WbtIlrN?tbprzD~Z5G|3ypoHjz1m#{=%= zaM914)o?T4UQ5GePP+Bvr1z{edwyl%GEO2|fwGnpf3Jtj8dxvD?9Z#K;d*XzJ!9}I zx4Q-|a;ay>Ujev@2YJUG%va9ghz0nL%SDlc5nZ}OF0&nf$!pdb-j0jR(X-&P7nx^# zLlD{T$XK(MH)X!o(K&$wCvXA>PT&L%oWKd3z=0DufdeOS0;jKj0a2s`7ugg`RR910 N07*qo1w^hwV1ksZ$tM5+ delta 203 zcmV;+05t#f1GoZ^BPjs?NklM&SY`zBvsr@&OBo4J1n%tovTC zpZR$4Im_aAk5BA;cePTZxm&7)?aqmx`-SpS63XrE>+{+3%4;&CZwvnZ-mkS~zuI%I zyl+bB=jy*#$8&El{_}?EMyqtB!_?h@mN7>f&WTUsG~b+BzV~+2fmm7ocdq4kmLE!8 zu(j>9mY>@LrPJTnH%8Chps}N4_y5%o%EBwJh3zb^jm*%EV_&yHD~>(vzM;KP-c!~+ zyH>4fI$crD-9G!L$4g)N%F?@P&JW+s3spY9u7kVh--Mmnfs>fN-&g5d_l0N2skge) zy1ag$n8AJo`Hoo~M#@+)0@+~l04InIBH8_bBq(4YWTUio!p43N7w_LQ-HcQ3o-nUk znNzCQWy(#_38S{cf%^@&1A~m zzNl`E#mYHn)E}npTHb#zvHxJG|C8W?)#o?PopwC4z~3k7Y3!~|Pw(3PzjdHA=I4XB zA9Ge#lt;@3bMN2_jV%+Es_i@8J^AXTvgIoGbeCHn=#63DaqRuHiT@XV=)W?Z4en#G fUlBe&skvXT*yh6HiQ4yp>50M9)z4*}Q$iB}+WH{V literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV660XaSW-r_4dZ?NzDoZ4vzo+ zFP~iQEv#oO;xT_!?aei-FL+(~ba9$!FoWL%7QQ(LIAtsvg)JJH)eD%|fg*kn4sgyn z01^?lC}2`AfQdkqfkeQ{fEqKEcLcqwkJ{FMEB*97?~{_{?`?dVyRBaE?3ndeo-@2S z!GC^yy*ZP4RZXUMbm!mysbaU*pWNA;Et_)s-~4~?B6duC8|~i^xMP-Z#zGfsWJhia-+OCX!|vO1cih77L_ajTFs<$MF3XjT-Fs^7+18aGTJ%6^-M_^T+|GYm zv$QCsCNjg@hVM?|*$SB#wa02yW6m@Gc(eOdWP#-QyoUw4>!*}eJ>B}sNRsROm)OwH zcSQ{kyqJDw^}Q)e4*Z>c+K1P+|Q{r%>y_kT10cVZvlCQL540=SmR zuiP)V&;+I@8eB14VzN&-O@0hq@+dh04IH@7fI9^Z95`^`797EygyuR9+}UuaT)TY? zT>6IdNqy~2W^fDPsuz*kIe+eMqs|A$%zFHM&wjfnY=g0P!Sz0(Dfwup*6q?yCfZ@_ zLvTGuLF>R~z>V&2bPO{dBp3gV8~rptd0opyrr+nvu^$ij}Kc9lUSF0gY)(i!-Bc-o=j2}1?dNtE@)(C=ewh}L&fB| zMZwJi&GhZb4|eI#nf&Xms_~BAg3I<3_gTurY}i-A%$DZ!W9q8g#SB2;>FVdQ&MBb@ E04MHUuK)l5 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_79.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_79.png index 0e398f834dfb399f9f5311dc48302ed76d20f864..d0710adcb98e00ce597d6100c13834fc75a9db01 100644 GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV6yOZaSW-r_4ck~&|w1})(dz3 zU)qp#cuPX`B;CWmjdQ#%snzvrr!TaTFG`hjX7D?}X;HxBcc4)iM)J*R0J4GP#4LpFZWt7I!ab7mRa#Ddm>_uKwf z*;?%_YdSqot^dH^ZEwF%{^MP+cJ-+f+t$aimtPd!zIfFg*6_wM-aA=^o4BS&?)&e( z)+XOt*51WIPRRfGOw?I`_AgLMGyE6ofVOa zynO4;`)KnWV*3lVdtK7mQ7$M^W0X?(sEz7VRFH3 z@dp=~=k8@%#nm*qKr=R@d_if;>RZdR{?1^V{_D%Zrl$^(fdM8@^BcYE#iAbSu3zPp z^=w-B$r-NKvLelWt?#A8)!xrdE@QsqKR?XBu~Jqo zCiBPslWP4=KU~M)F3zJT`0mY(>)$Wl&Q{%Var;Ttg8O~7@lWgzPMxQvd|a-UKX0*i z-mwr%ZawB)=^ghTE)mar@}tgs$Gx-CmRA~HOZaK|Or6+!-bwqrOnFNv}dveJ{gOG2U_7%9~@{bUcmz49;kgAn)*udGoK#++=EafnArU$K9rkyOrZYS z!QMR=RDUwfxHY5x7pKGBSlT~DGrls?=om|wSEXZtSm`d`0q zmQ4L=EB5Yr)9UKGn~D##Hu|l*{$gcP8PBqZtE6kh@0>_15sgXW>AP~EL3)0^^_`nP zA95C4Exvjx*Rv;*WnFUe?(_NK_Q5+B`Sjcrxl?~;-W^8ss?ym_t93T>>Q$Ov`*<}; z+kWza%y#cPJh^Q3`|Xu;wPu>^KB?mg+&jLU-23aq>MHI{ zrgzRfOnN2|5;_0NuV!xkC$Ii%cAdFfH$YsPrxD*u4jG?Wd2hZ{P9claUHx3vIVCg!00{L{YXATM diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_80.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_80.png index eb631ccfc515f72ab801bc3316d14f7cbd4ff811..1dcaa34961079c275083e554a6bf4c1cce3b827d 100644 GIT binary patch delta 436 zcmbQo^o@CfvJT^3PZ!6Kid%2*I2JV<@HhnC|9|P_K4afr-IE;m=D%FW`9SOuR2y|GifI_?`PJ-!rqnn_1w0Tg;;1ecS7znJm}8w-qYkB7!XcV?+WL7U=QZIPG;`iVH=bQta zG8RBVm~)z3#|$K!Jzh;Gh4O z-->(bZ%Px}6Ln(2jmjxGJq&XWaLQOT3R@H~sTVM@`#oUc1B%Q!02FCt28yT`JYeyA z026^I1Brl@0X1Gu+A%Z#^_98@2kvr~-`;+p@iuSxPPK!s{?Zl&&*P`gzHp%Nb$sH3 zCg-&a8=0@SYX9Bc*gb#S>bR-(?fiNi;jX9gTMu#&KI?^dJl*SA9rx_Ot)o^z4>NeW L`njxgN@xNA9s+KH diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_81.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_81.png index 5a0b462e90d294c0d93b3ea40f7890634f4f8a68..08d864465428c4b234690e180e0b140ea6a4a23f 100644 GIT binary patch delta 433 zcmbQi^o)6eay{c(PZ!6Kid%2*-p*?_5O59r|KET6`-xEscE$!LZw1Yd5`a(7a;7#1+G`#oUc z1Db|x#l%2``o`aSJId{hjXqBNxbk|B&n@O-n}jmln{PI*uG%Yd<6_zAV@0J8((hfd zo?Q6#d%D`{q&eZ+qYbD1FxBJzu9x-QV)gdl7CSaq7k&@qTld0*Q;%c&XI9s_1)WDv z-px=gc)8zxca*p8-SV($FK>4g?KrhJ_q&`yE&tTE-ETWyN8S8e|1~Xoz4pW4r@7a6 zygO)@c)apd&6;hC>ZdT6QMyWRaa`_`Gil>R^0JxdgltqE>j$8M6WBzPuWWL_4y*L$Ol8gn^B%n19So|JL43JV2 fwm`A$&cnMAE8F(5EWG!F0SG)@{an^LB{Ts5Nxn~o diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_82.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_82.png index 1d405d43ba3708bf6469338cb910f2943e0c5444..db90e3ca1e12eacc702e31a178b15aa516cb409b 100644 GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV6yXcaSW-r_4e*wb~&5{ObGYht0~JWu|vtlnIra?C{(%^`Xi|!_b14 ziJ!D~%+J++zio2C_3){ya}UIZg@%c$?`1u?`|-+#)egI*@}8tzE;#w=Z(xD8^A(@= zrT^>EfC|7ELWWRuDdgr2!8_wm`1Rh!*b zor-Qhnf*{p`}V!^soTX=|BL07a0M9d30-{jVM_dgMm&CEk+EO|`VUMV;Iv?5_k)uK zwY*~C-{K;xQ_4JlebIViecqmF`!16|!nZSxZgQ#Kot zerF^^=D2lKIL+Ial!gq=ie27s|Y@P?_~YUBk`3d_kp4p5eVuJ;DPXS aYJTdZ&E9d#lw*Mjiow&>&t;ucLK6VljxPHE literal 409 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU`+6IaSW-r_4dX^z9s`6hl~II z`@ddoXqdC+DBn5Xnjn$#l(5H3b-BG6{2s9I%{jm+W6>yV(a5Y`z{Cy|@q2K9bIt*f zh_FQglX?M61fmQi0#*jpn901Ox)VF~3(9eU&IUyX@4ehbbir zmR9q*c5rRER$!cOCaqUobDt|OwcBcQLS+B>8{6dBw|~++-*P(Uht`&`!zaIohX1^^ zx!~@)ZMS`c_|iuOZK7srr_TW{~)&O2lv;BfHIfB(zns|4c9%p+$ge_g9`g!$mIN!5F< zY&tA3(Mzg+d48L9-+%jw$GdFoc7&f}Xx4Vw{cG-v;$5L)JPJFO6-<3!P{3bvwcLT3 zeO(=caav>Sg#(Sd|4(Cm=l;-YVeMTjzB`8>xUrR_KiIwI?yUp8e6QXeD0j|g{GQ1s z`FA=~!O@2OMw4^6)e9c5_&qqlIp+YUj76icMFA5;WMURqeIv7a0Ta6)OaV}~k=gur z!`Z!VY4Y2v_MN$VR(XAWrTG$$EjM##yUi~-_H)s z^_N&LJ7RsI-gxtlsh&sPJ$b_O?pkE(v8r{iY6L5^Il|9xmwEScexd00mlIX}uGK&0 z`hR21jXzbt7j0JKdGPCCs_waitiAz8*QUHIFus4>mFLH+pJDseq$|JMq!!BkQ~ms= z$s$>6ul3(J+jr+~EIqHadESpx38}jBY4HuA+4rxUx46o}2MiA_cz}Qd0VFi%-Y;e~ WyI(@#t#+pwfWXt$&t;ucLK6TWYVHpJ delta 245 zcmbQma)@byiW;Yulc&)R9X z&Nco$D{d+)GmAJ^_|KN+=nw1s9hlkI)ivb5VG6!*pz-&=sjPXyJ5;vZuRY!v&6Ah1 zz@KgYr?+Cv=2lmhH~TwxH|)OUc6tZq|825ySw+v?9N)?a=w=Pj?dz>heqn$d4Y@XS?^@Z zU3N}y$E({ZoG~wJe>D3zt~Z(lcxS|_7t6}jtI&tUEuoVD+`|<#&|aU-wR{ zzGD2&WXrny)AoOQ_2!1~vj3aAf1g?RroZ8KC)>J*VOyBq9=ZMfi}v~xA=XiO(aS~Z z_CAr=@j~3>UBJ7I1^2C%?vmNjdfp-u60>j*BY8XjCu4yuD+kY=w_d=c!{F)a=d#Wz Gp$P!=-55^* literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KVpaSW-r_4dYTzas_$t_T18 z_di_6aba7&f6fZ!jfqQ+6h3_#BX70ov`B-nMI*C%0Ta950~Wsr2RP>(XatG~TNE&< z7l1@q_~snol!1wWm4QSc%77ZJINt5r_wQ_;y5+QYfA7kcXX!;fywuG0oo&ad16upb zeNs~IuM|%Gc0;~VTJnmf{LtBXAGL+IGhN@Q^7C@R>h$VT z!J6%F-~YQ_c-pQ=_WNa)y>X@12i}%#J^FCf{Hd$bznxLv^vY@XuKib6=VtG?=pPrG zKXr9@-KW#O>QN$jPt2}v?ejYH_E*p)CiBfK6`v}LzWdy*6L5(Mhk z9FbBPf82M$MK?iZ3p1Vew5K&^D1}SJAEu6xK9VR`q;bI zdomC!f3MhW@5r&FUUwUIbIo|YicQ-AaK&gl-zp=Y zao`fa+TIOt=jRQ$hBIgP>;{+k=5`;KH4xyEeCBH_t1n%+;F<>-Tm#(7a@pxQ<=6>$ z^v4^b%VZgY99d@iG|d>d+K1P+|Q2^=_q6FB|p2T`&36!ekEm;e9(07*qoM6N<$f*V%K Ag8%>k literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2e?46sLn>~)y;hS@SbIyTAVT(p)pon_G0~WsrAQ4U( z3!orO1gs1!0#*jnm=|((^JCd~c9|W!AKqhrE0xD3Wl@m6{zRX)?#o#{&9DDhO}cQP z(YkwE^^MGo2L~FNw{OsSA93O`6Z^XI^4B-^Un<+KvE$r&HBnxf9se(c&G&Tc{#mSq p#eTRmQSFB~6XbA&Gxgpx_RWfVwfJpAComuwJYD@<);T3K0RW}YcwGPh diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_86.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_86.png index c8582a346c6e4751a3929f07292d5b35e7430960..f562ec5d86aff748f2094912a0f1c8cc25a8ce37 100644 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVAA$dhN_W$LUO2O~-w=op~tGAY8!2HwQ>QV1bd$>L50dOcCAjc*p;9 z>*O^*-_+l|XXYm5h-CMJlLbtE2O5Ea0wMYC{O~$h>0+doF?*)BO0n6eH@mhROqKsL zlk?WOGmbMYr`EW}-g;;ks#iQ)nLRmecj(tSE4{5_Ql1-Kmpr;s!#H{N?Zc@xf+|eY ze|_!MK9oA0J+C>fh;_#|VY9`XLMO+&Uze9%nYZ)(&4SqU*spsZpZfjptKGVyZJ#G< z`^by$kh1!9Q8b@Zk9E7%t@DR#7yIw9i8;39N^C~Dz4+&>nP)h6POmvJ=cZ5Cp3sg1 zrS>WQxmwDs>3b%1+D$!Qp>+9Y)ateUlYfEY65?+(A6K4`-!Af((dFdt!@$(T;OXk; Jvd$@?2>`yy7PxN%{B+c{Fq54j;c?F@4caLQOT3R@H~sTVM@`#oUc1B%Q!02FCt z28yT`JYeyA026^I1Brl@0X1GuD_CkHzjwX-&F43hzx|8)W?Q6_$N&AU?Lpb~@|(Uf z@6R`8y8hW!t5Ll7X2#2hQU7nw+RPR6ROn_^uViGH(IHoz$qNhC-rr&TLHpp+`C8Qv z?Djt6y1qmAK^EVgu7^+LgP(eB`BJd=@JWt4XFmQdE7;4P_eIM5@tXU5>%OsVc_t-d z8d`Vz+2vwodxe&JNhuB1zoW%=^rYW5*)gqp>#dc=={r_bZ#UR6F*p3cU#r*Uk!rz* zUG=V;9uB;=Fh%OlnwR;kce^kCWkicw<=hrTQKGc#aB OFnGH9xvXIF>feh*mu9vtADbD$9@B5YB>^u3n7|9-vkwwX80b~HBg#kr^Jw^?VW zE?La9_7U$IDRbtx_n)@ww_D#nIC0~}!o|O%cD7u3Ubcu~<X>!R{or$d4OLe^nWOFD==vz3=P8;MAx4BNinaJ>FDs^Lt>KXVuD7 ic({W7s{r@#%f;sHnS8wKex`n500K`}KbLh*2~7Zl?BB}( delta 223 zcmeytyq;--vH`<4PZ!6Kid%252XZwi2)JIn`F~k1yKBZJ>GQ31yw4^?@w$e&G59@T z;hS@SQ^ulkqQ7Lldcgx0zXu06AtJ&S1x)G%OzaRfF9UY0`u)7yH2oUe_oNdK>Uh4h zYJl*R3t312%*x5r% zuRaQ^yk&Ni>D`jqDI#+YGzwcZG6QXZS<41>$zIusQC#AecQD9FS#!O+%iYfa1fH&b JF6*2UngD7|U)lfw diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_88.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_88.png index fa8b5396684c80bdfbb5cd1bfbe9f55d4f1b595b..cda0845be580bfdb58783dabbee6befd1a8e1c2a 100644 GIT binary patch delta 439 zcmdnV^n-bVO8tIM7srr_TW{|K<~17#xCVaP|MHvps#y)k`K_DJP5l(us`O}agW{xq z`K@mZSRSzWJvhKQ=Rl*d1rQZ5sTY7mSor1~c=@v6_{aa+JM9a&53FLIcTaxDWJkN( zY8&_SRU8+-5Vu|S=JPjZ55)KtcC=+YkUBi~?d>N|x*wiPlb@EyexR{J-r&aS>XaD_mpY!`$?kRcA-aKKCoa6p(Q&m@e`!J0^EltYSD6`&kec??p zy;9#u&gl|6t`(e2y&pbDEBG{{J)2&kRFt75Bl|nc?acR$1g^f0_+@qd6gD-+QtvMR4_|+}yk^>wI|)UQe++qh8Gyjk)z4*}Q$iB}clFo3 delta 217 zcmeytypw5yiWh^Yi(^Q|t+zKFxmpc)91h<3e`#02V<(TR5k527>%$K%XTFq`lNEV` zsennn-~o%@g9Ds%4sgm?GzwdQM3~t99et1>+ zV3O~-YawS|H;8L5n0x)+%%5evJ5EY-tW%WQajf8GPWxo}!>Q`t*BJ{Q*l5Z6$@s;v zAK2Njp2fWD`P6V`8~vHJ*FH`>q^)-otL4kj-(uw4Xe?A8Cvu1Z2s~Z=T-G@yGywoB CGhI>u diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_9.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_9.png index 82bdc487429ad047cd279c9436c346018926b16e..ac2d9ba9ba47a3c3035a52fc51a2e450d9d8267a 100644 GIT binary patch delta 387 zcmV-}0et?F0_FpdBP#)|Nkl({vmt z+rUMCt!I}1?SHG&M3)oY{!31kuPfBG^LLsq3%eCu#ma#jgsc3-N%g5KdR^>>D_vgI zN?!e|S=lMogN54+PChLxGc@iPO|A}Fvcvo6{u+b(wy^9yP4#FtfBR{&>1}9*>$(7U z?c~X8=lFCTr>BVx*bQ#{Kmqp$aGm!?9UI+oFianOm%^=F>>~rBmBC5ou~lRn+8*^y zJ~_xfq^-C|%G^RkrfvJ0^3+KzzLkd2^=_q h6F6`JCvbY}32+%55&g=3?BD^Y~i#6rHqg=54c{4LRpNvJp@^Dp)f(JEI9~@|e v2zZ8Pm3tIS^pl#nfuD(Q&cuVFVqLS2uCF@P&bGja0SG)@{an^LB{Ts54oRAdjLA!j=$GOA!1wD58Z(%>yB7{_)W_5fllEprBcZw1WnQAhZ=d4l}Sb zdUys07vOb`?)!e;*Hu#Jd+mMYD}4nzW%|BR1L9+G{ZQp&j7wfwL;U}!QM=PpRs)rbnK#@%Djz!t1Z#BiD_-5T{%v_ z|MEZvgh$wK1Ej+00000NkvXX Hu0mjfuP=*W literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/ic_visibility_off_black_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/ic_visibility_off_black_24dp.png new file mode 100755 index 0000000000000000000000000000000000000000..3efdf49225d2972404b12050e99673e85e1edf91 GIT binary patch literal 351 zcmV-l0igbgP)hSqc>diP4$sW^U%BO-%KmsS`H+(X*WB~K#9deQbW&MH@=6l3F>|bg zT9cE)snpumquooFttH7vm7Wu&Lw)mzRxS!S@2ez5A{d8X3(uR-KXX!eZmPstJbNK? zTZ#=ek-YT;11WX`_#%{2Wh-g^Bs0`fYz3@^a)=*NPR`+IHy8?~kEc>3?N_=k^E%WV zrKycyIqAjEeJMB+-(d`>G_B;b3c)3xA~`cqtKAV-JamCJ2Oir>9b2mC=GZeENz8ZO x{+>`cF>>F;$Q6a!GLrqs$pZFI7H;}S{050TyiMlgk#hh5002ovPDHLkV1g{Sls*6e literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_1.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_1.png index e00bd9a4e7bb0c3c8e959f5a85198abde528d9ee..00c09dda08f25984b1ec5581f58b40a563378b54 100644 GIT binary patch delta 740 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 eAUF^lFzN>iA@=YD@xh<~0000>NklaC;T z1h;K$pPn=0wg0+p2(DdlSusrBHo?(yAO$Bliau`%PH=+Td>92MIKyZg1t&P$h~NyO z?G&6rw4H*(APP=!2GMp3j-~=Z)!3j=qV1h$%V+T=if94(__X|4ewD))QRH!H5j4%R$e6jk~XxJ!j*BTYUiThE^3`_G{dIz0OzIZG*e} zJQL2e+52VUdV(wZeD&lxIs_N>m{Zp4{yF~Y7~ATDeCP3*2jS^j9@k^e1h?o6Srwcs zRqQbk+?NgBJ-D}L@w<=TeZ7h~8yDQSjXi%YxajBDeZ7h~6P(}#C%9)jQ*eUIc#b22 zd-6M(tb;Y-hRKu9IlHe{HD`i*aj+_XB_KG#l@40vezo zqV&e;ED!+%9oc{yzO0m1(~|um=o-j&nOwUl2<-Qba;`UlcufL z?XMD!4zA+0M}`;iI;XEExR-Aw-rPytA-E}TeY>nzF=v7koZti}IKc@n^)BV4yPK1O z6Wh@3+C8{QcPRxRxRC=j?e}nozivo9!36}DafN)dUiQgk=k)|vv?H>=OS$54E4Sy= z^#oVABQoz!t-PW}-Z|TSJ;4?4h^zyi8QjYKy4!k!YqTRW2dmR-J8?acZ5fjg0t%7u j7n6(v36Zb}7vlT_{t$}L#C{NS00000NkvXXu0mjfYlVsI delta 318 zcmV-E0m1&V2&@H=BP;@QNklTo1wb3 zOK>cVuIl#-bo(9z!4WdzZWjpz*DAj5@5+&2Ig{G~CX=E8FO%s5Di>P10m){GmOV&t Q?f?J)07*qoM6N<$f=|zi)c^nh diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_12.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_12.png index 56d5d8418bea28b72232f4d7f37cf7bcd79126ac..fa49e71f0577cd0a2f02de31413ff2eba257cef2 100644 GIT binary patch delta 1041 zcmV+s1n&E^2cim)BQ6B#NkllNbXxe*nRO;6QMI;6QMI;6QL7I6!b9xWo;AUHb!q3yy4Od=;XO+Se`z ztWF2p*9oCTPDJ*^M($_XMcer7=G8g2%*80U`UhUYC7mh>Zgy~={$6m&k$m&D{`&Ws z6B~V$uNvId@etgD#k6bEo&>jhlK(eGlY`4zGvkAc9=O%Pe`QUw-~?ClR5I#2V&=Af zdhM0lB)9{EtN6a5!d0=~UR!X28xdTU%g=vp!^*3>f)iZ&;{F+7#W50`;Ksz3y(k4I zxN!q^^|UPey<6l39l;5%+_qG@Sh9LN1t++z+w$|GiQoh$xEmKazWMr{MDQ?^}Wvm&@p|F`3XF2OYm zF5@Vl8Qh)k@`7s=T=e8U4KC|+YV{)~zBwJunlr&Q9<){Ofp$-9c5s;oNx>Zy+?548 zJ-F<%62T=bu8aw}x=?qYPVPS72yS?AkpmZTmxkbce=N{GxTwLq8{Cz}RPnR7RbQ{u z`!~TAJhkk0r%9EAPKWPqf@^SuuYS5zJvg^^4GZqKix(>{>sJmg^7jQieScbYVGC|U zbkV1P8;5H5Rx376>a8(~$D7c~nzv^|Sof_SJOvALZ9l^l?1P6ix z!2yB;lRyJqk^Bvl@B$`(zfH{R^Ph?PG-3Zr1$T9@cT7g*iQYXH(c_Xm*VX3zh~PRL zSu+;qj&aF6z*e01(ZOXOQ6rALE4Dj((XagX-R3sD#OtbVey18qWZ zcXn{s&8(GzoA^@{E1tUSUdlxSU+ww%D_(y^aMhl>|7066I{ZF~?Y~f@LvYm>Rz`3Y z4uVh5R;J8*>5C@2ceF!rSGTp=Sx3Y#SLwWeBd$`yB$1&>7sC7luo_wO6)Yv600000 LNkvXXu0mjf%c2Om delta 602 zcmV-g0;T<;3bY51BQFDcNklDfvwd*U12;RktVtG};7V>KquvoSkM+}Y z&palXJ5nJZKdD@ zC%B8pKP$M(pUfBBLxNi|$#;+c>Ib*ajIH2Yf5T0Chltp+ts0vd!F~F_9dC3Au32yy zXZg(F&b-SDu2FE&lXo|`tnJk7ub8;99nG3E!8IPVS=T_TCpJ5{%#)|KfA5*Am+gp4lK)!WI{Cmg|T9$e(WMSMy_aDFV%KDemCI~&}{VygJFw^@(Z>H1A@ zV+FUC-9Bkj<)qW$-A!-}&hXW@OVxw((XP#c`*!nU#%=w|!A1VQfVHs}0akZ8u36ZZNB{r;07*qoM6N<$g1_i700000 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_13.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_13.png index 158b0dc3d7b8f91a675c29f693da9269cfa0aebe..2861a258fba8b3f3bdee857ac34e98014d9f2131 100644 GIT binary patch delta 676 zcmdnRdXRmBvL17Xr;B4q#jUq@Ba3bu2sk+2`+w;hqfYP=mNUoRY5i4E?HAj_kg980 z*I>}z&MZcuBg?A3BXDD? z{*&_0K-RZ|rBNrEgy#TNSgey*KmRYLpegxsljxiW95?Q+`?vQ2%kf7?wJZ)QS{&re zyH>dA^v0lqCh5()OCzp8b=ldgh1rF1`4ucK+y08XJ{l;!b$96fr$8$UcSk=xsteTV zSJ3qM-}2?wHHV@Kz}ng$2*jLjjr?itF95Q7$8vd9?Y}k$InTYjma>o=s2u2`Biqb( ztU0P@aj^IP-9_TRr%X2hc|dW8pJU1ype~1k1}Ijra43La0hx()P4(Ybs6VTyHC%su z&y@%Nc5g1%4}G3$6ZY)t9Q7S)2VL*GeJ+|;d@%G!`1?nHLbqSuvnM&ttKjl8*ZcRb za$mAJXsfm(boY+ePhy z6Yl$WLEN>?zrXR7*VLDHGO&az?UN#f4j}&nRn1`l1`Sj3o@)DYpzic}53cEX ztv?EsF5CX0a$Wf2s>MyS_w0^5(R6#;0wwYKFMCA&XDp6#e_#2u>G!j9^+GXE_Q)Rm zsg`no&z>(cwtfDb85v(V@2lj#7tfFGd3Z2%{`OB1LVFF)NdMaZ{7x-{)w%9panoKr vKemVc?=+!hf)hVTOkB$`F-${z!&&{4Czl_b;I?Q90}yz+`njxgN@xNAf+tK% delta 370 zcmX@ezKeB&vJO+Dr;B4q#jUq@0=W(u2)JH+Q-8UX(J6PS=QH2)jP)X0PQ<7wl*$}1 zIvmb0xtdvjVjsuk#f(+;>`lxpKzz{fBe&fB{w3M6YAyvQH-<_*+WcC0&I6Y17A6Nd z{R+7I`kI7eR^KS&|Fr(R_?!oin!Tk`KoU*DGS~Yjr=REcEAWwuILO(@di(9G*FaHz z{?!jy+8?l}?}$5oa!T^j2Q1gqcB}Gi1&UYzmHqGUoZ3INNw_{{_1m!84Xo-r!fvnq zH4SLxt=#RW4(kHd01bcq@9t&J@(7^eO+Xm|nWk=;GpGJnHh~S<`&T3K-F(1Ew|w_iPc@2NTuNR&fQvqN^iqQ$|+2Mkc`P|)xIgeTT0PUd71 tnHVN8xrtc=5-1W(P0SMmMI{bq*D}OPPwy}(uj6F^0#8>zmvv4FO#ly&pr!x- diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_14.png index 1c303e4712b3d9084cdd45cc38cdd639bb06aa33..47cd723412abc5627dca068d6ced2788edc85d76 100644 GIT binary patch delta 1070 zcmV+}1kwAS2hIwRBP|6LNklD#u4~8z-XRz8{m+Nn5?55uD(b-lhh( zYs)S;!QEcAZ^maza4W`1a0}LUE1zd-aNj&eYH*d~B)AKM+Z|lhn_LmxCy(F# zT-l&j1ov(?cEUt*&_rLgk@=}y|h*`*X*>4*LkgIj&z=gP7rpP4VXrmb7W z!IRE6Ipu4Af%Kol2rh69zcRQdo!a%U`y@?r!5tdh?zMb(a96hSf*T&(>H`LMgY5{d zVj|r=@U-IZ1Shy9&p&A*-3ji>V+u}iUmX_zuLX_>uIhJfS0~#^!QCB$30pV81rFXfU!I>%7~Cg+KV|DCxQ7HcWh^Rwfa=t) zLxQWm#^jyPa#JT##f4x~C$``M2kwO6x_&K?FrmBt&w}6t*Y>6V31cC+jcd`0vn`S* z*^1{){5tUNT1$zJ%9SRbiN0>UdP0F_W0mZ2Y%Il;|tJjuD*TVuMSFO>lyHL~s)?p>WD)X~8`#xTH(=3GSi6 zU7dtegKIs)AZ&nkInYKyV;9KyV;9KyV;9 o5FC+z2$MepB9W;N7=S{*0O_TXpO|jrNdN!<07*qoM6N<$g6DD}_5c6? delta 576 zcmV-G0>Ayv3ZDm%BR2zPNkl0Jez=7W|W zy}p2DE<*r<1Hl1;1Hl1;1Cdb`0)XI?zycPNcLIWcwfm*7-;dSn-|-qp9+h8P=J*J1 z;Y1YN^D(J9X|p#pf)iZmqib-h_UwWa-1KXEGCo~`ix?-t1#Imi*V8q)C(EcBT;@0l zZeVbC2bc9GX9Ra=IajmKJc4^kaM^Eid?Bxa5Jh-q^fjc3%U3Uvqn9#fa&w}6t zx9z0=31cC+gf&-CJ6&--!KyV;9Aj~(N&(;IG`T*eo O00006XbBP|3YNkl)5rPH=(~9D+k|f)kwJ1o!@92u^Tp z3~tI+8^J|Q&eW?q1ShyQ!A-c3S#W|I9o)o^$p|if3+E%H;Mlwm=b(vS;COg)IxQeL zHcw8$2@b&tPH;1WOPc6{6P(}#CpZL$-~=Z)!3j=qf+J>fCY_5DoZyZNZpv00!NpBZ zSDFZp4U^Ngl!D`DO*HA>7MS)OKEVktdh!ZRa7PB${fz>X4+15Vj{*ph^bnKn0T+{F z0wR+p0wRB82X|fn|FCzwjr+jh-d*V{CqT-?y7St<9h)Z~`^ne1bNt5!w`=fI-^sfL z_vF~`UN@EV;7XZj@BYnGEBn;oR{p-=8U*+0->wR~`@YJZJY$3FF!*9yzeN?C-~@MIa4CPg7T2khyK8V&2YfmQ_up~|PH>US zEjYm)7hL7(jIP1GT844Kefol{j=b5rt$*IMbDasxSQcE`r9FaMzg0~;!F_CS30E9+ z3$ElOZQ+$ByVmdc;NBhFr=#m0+|Kn=buHzNu{tWaq=|Ow)-847ul$yR;JyfM)u40^ zZufsDkZ-nd)gNQi=0RC-)f28ua7m{E()S%ZoVsWk+|Hfq$y>Kh2W$kld1VPM_iBxV zdDG=wq2PjpOS;EM@>VWwcSUeRf;(+_1Shy7w{G2n+kNYbsNhzusMCWxahU`sIKc^S zesHIq7D!#T4);-se-r7jvQ9hk-Q{jq6UKi)aEAx?vW;gW!Rr%q9ihoU&7+m#7sp>Derryfz5Eqa61y*{vzP3z+#{d8T07*qoM6N<$f=~{s4FCWD delta 349 zcmcb^v5s|uvIbMBr;B4q#jUru1NoW^1Y9q^tG~R1#b?cB^UK9Tb*?949CTkZp3-Tb z=kq}=>J|rU z|4TIq%d{T!-I=AlW5q+C*sF>b2e)$O9db%L$eCACAe=v0Fy@cwIo+iXH2(2DcNabw z^YQt^FWVa)Xvp~;@8ISVgOBQa)wv{G+NMjj_3cQK;i4G=1*7kK6uo2 z*-Q9fpuwDLL0o<5{w6Q|xqYhJ{0o}8<>C%zmvv4FO#rRxnIr%J diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_16.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_16.png index c9029414c47ac6db4cd23b8f0df412ac50cc2bd9..b21dfc3bbd0ecca671423a88a18c1d31967469e6 100644 GIT binary patch delta 851 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 FV1kg`zMlX9 delta 379 zcmaFOv4?envNlt*r;B4q#jUq@9k~t}h`3&SQ-8UXeXfbw`~CBn=XSFEyuRSd4!sAa zr@a{_Hb_sFV=#7oZ5q(z6DLfvmdZr7oBqhreb>;T=eT_nT?$9J|CRh15~$~Pwy#< z{zlGqc0iN*#GAaWW(Vaot>)4Ds1UJ{GcTrq*M08q`HTl^m3F+$7vs>Y%D7#Y&cfcr ze2@_dH$GrE*f?s^T#q-G^>>RsQ0DLC3N& zkn0BsbJ+xwsRB!XkTh_w&p(1&yg{pN?1<&Q*(Oi6Ri%O3X)KHjE@OiWuJ-d5T(Q9= zxPHN{`hCIuJl|MZ(Pad8!mJ%V76i9(aIK8)n^#rA?S0-Iw%O?5R=(2R32xVpog7@| zz874=hQIr{L2&1eCBX&!%}~Zhn)o{xN*V# z6`J4#C%8p_`+GhoK zXLc8x;Fbq}mw8or)~RGGes6kgBZJ#@CHbibP41qFBR0V;o83O`+{tH}WDWLiv5gDv z>331zJWg=&cS-9O+xXyCK1Oi4u?eo&;Ci})Dxca_A-L!P-#NB1!A0LhXku_;6I|$R z@;V<#dKz5j5!#Ni9U0uNL-&HqU5^uDYZYAftoYaDlb*NWUu?`W> zzw`DKoZz-Bd*|~NoZyZM?(Sow;}%@8&ljgHFM2(n46Gf&RomVnFS3H072N7@?mVvg z_7gF6P(}#_x|lqhvj9gr{Hq;d#m8gZtvGqaJkFBx(q6_+nV)% z6kPH+GrP^1-LgObbqH?z@&qTi-QU9ru6S_XPVQgNw`ZE1@M4#--&+J{cH6U_Wlnc0 z5?shK&2IB%x2NG9HSjONncafdbMg$AHmjQ5=FM)=R|`~skrkZTE%dWn_V${z-vu`; zIA44V&fCeL_1tw!hE4%w@AtC7nceDt&2H7+;&$BcSH(ePc8fV!GA+0Y`@LjvX1Ce{ z`;_2P_Nm|mC%8eui7jqDCkI#NzA1v68{DL$l!9}xBxOA(eh*h^zn2QG`|_&3Wm`4) zb`9K9uSO^p+=;VW*2SSKmT~I2l-1tVlnL&HoLM@E4Ow0}vNrn}4@+wU<3$dUpT- N002ovPDHLkV1g6L>aPF* delta 537 zcmV+!0_OeA3G@b#BP|0vNkliwaI~rGp#!0>0`yqTmF7cjO?=2rlZh zv)}~RF1T-@2~Kc=oAlgIj%b3bF^>e7Jh-PDOmL2Ff?E(= z!HG?9i=SI?wPO>U;7Wdnt8m?!%X69pclt_`3fG*a-x&z*_ux7#?fUkbsZP1O;`{92 zcJJ+@f_rmx7n|Uw2N!vNRe97>vKhbEJ+_v?t-6x@)RQJ}SK^3GaMO-%cN@3!N|UI` zUM;qE!Hxbc>dE5-xBo6_)naQO+|0)aE;cs7C7WEM8z}SAt_;ELp751pYZKh=n+SCb zPHckPdYin;Cz3{ki#$VHF}5RvTXpJQaIx>>gxE?27k#VqtV@?9cHZhd^8Yqex#hj! zCZFN#7F>o2E4bu?yz>2Y4eq4REjVaGld%F9lWhVylScv=lfD8MlX?ORlaB-^8$fU% bIN+&2NKMoQ;d0nB00000NkvXXu0mjfzkLw2 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_2.png index 62898e6633971189e01e64248b90f53f0231f76e..881954835141be35faea551f5b24cec939f50d65 100644 GIT binary patch delta 1127 zcmV-t1ep832kr`xBP|6rNkl-c?EPoOv?eY7M;DQD_diz-u>g-SD=N2(8f(saM!95?7s*^SPg-39L z3kk2{Bt83_xVMc#aDpp4_z}THpQsU> z;L5FTyH=fVD`=OKCY^)Z@%#n1aPW5o_vvkHhY8pDq)FBbj^KiWJF}wsSU_-NgFE{w zz3Q^2v)igX;U-*ZBDe+vA9ax3?b5ER+ZCMP!h-w%q)F%C?rv9bFAeVMBw9J?CarMZ zQVMSCLI1?yR)3%Px$@jHJ{l2R@zrg|$&<{TSmk4ZtozLb*XS+9&fwm3Y1i5N&IBj8 z<-tY2%4Y|6WtA6P^WavWFt{6RMrb=G%H0!BEB>9}1h-`SUCz?o4erWg3Qlm#Ze0BB zF{TH1^)aiCfx86?Pqa_5-JO(z6P(}{{CmOmIF1$Ejeiv;^6@HP+7&$p*{j>raqyic zNrUv{!}E#3o%#0_RyV;3uH9JdxB)fmdq90JW%0L@PbXdH;C6fwZ1&%B@XgB&R=20G zkkwv*GVT_rGI{-N0l~EiE^2kGG$xfDlViKHjS0c6*ly`b>+iz>f&;;U-~hpa-~hpa z-~hpa;E`M`0|aLXk!VkU0KtLaKyZNIKycqTe0=`N*zW6g{&DVS@^c&;+}WMGYd|u# zx$Ae%*bjHN`(%4}ww*oCN(2`<;Mo(b`ic|1A0mUxoM$b9+x^OZ<#AG9^#Uiw)yI3f z{R+WFzJn+k+^)&7V!Ij9ecSP?gWDZx)_7*kv$DZ;7{rvf85duFiK`q>Rt+w4o|O%* z(~hoo5~a%T(;>L%c~n>paN?Cpf_gPH=(~oZtjECb(`B zy~^((xMsoKnfQXs-v^)mZ^g^%oTW^D8zZ29QMepp$OTs2hhRWAcPFmec z2bXbKm*DnaJYH>o+(%wZnX$qMuFeWq_IT`ix>60(~cLX#`g4}y~;#?^Y5`Mit%@RR~Upl$0>rFx5}k|{P2d@?jEBFuHGuw zIkpnPRs9kl*HX?3uF5<+#AcFD53bY+FtM5BlY=XFGjWxF*sN}XTOCWqd3K0Ra8*}} zX|aU|C${_(2X9#2D$lcHa%|Dx))nC6BC002ovPDHLkV1nu$P$2*S delta 677 zcmaFIwV!>0vL17rr;B4q#jUq@FXlZm5OBEo=f8jc{czo_k3Uu%vvq&Ot9t0iF#!&n z{|zSniVTwlSluUoW0IdN&C12p@L*!S*knsqzRBJ|9tYpV0MYt`zn0YQ+s~<&xncA7 z`Yfm3ds_C}dI|+&4mEJ+)%vXRyY_~;{{hQ%p}3=-R=;NKa#7#Gb})7C{+9xG&TSOF z^CZx|$Ue3?`lj1f&Rv^=!h6@{7VKs#Q`-^i|E%wUTR8hc&UG;byXT)dvAHj{x!Zy< z#BkU0fuKy>B8I)7*Hz zYVzH;t7A9+7M=6pQq%AMOFW-Hxc4r+px$K1O-~Wamw8bS_bd^)bIts(Ih%NG{iF0} z8|VJWa49$%zFk(`-_Ncy)K1KzbnnauQhS%&kh~NBE9?4;()1?bn2Lg%?msUdJiF#o zQ?^{p7tZGG2j_9*9(Sp%ex&)R4yfS7zuj||R!iSGW5%k!V*|JN{@cgi9z2`3`IW?u zs0ANfev90`?Wt*TkW=r$zoyq8?ZOK5!)DZe{}k$Chk*{_MuRH;>yMD1D2ry7a5w!l6LHLO=!?bMQ^JXXSvW z25}x9Mh-p}b_fQhj>+uId>AQ*2biAt#3$}!kg!+U?&v4d#{dMLu6{1-oD!M>vjL@l zOPu)i{ioY>S`UPzbrZ2|DsB6#VrXwy%H8+x5ZX-2FlaFiqV52V!f@H$5q>*;(A?wc^EP(xSg+GeOx2ByilV*MFrPvqeaX|=Af#) zySC#*i{K6k?%OvGVY9o&;^N14IhxxV?IW2Wp_ zB97z6U5Cp&@D|+tlRmrdE;&B9y9-p|M%rqzbq_A`mOjCK_OJA=pKecYcj^>>+?(62 zB90fM#$DQ#rb;&wci5Gj6x^=)-EqUSPq?7@sd_T$)Zli1%8d)I>RtSuVw(_L#q|^U zhyLix0-bgx1-Jg|Ss8m)$6omE7+d$?vi>ODIc#Yk+^$C^oEV$n_MIYv=pUE~DT!ulNirp1bmY_WIUI!Bv{pF~L>(a%o0z8OPFsJ2bfJ-{cmY;Kl?u z?cuK{eIG9K28eCbnS7RV;**w7dZx+5??H~e4mb6&=7Q@RTUv0tpBI@CTc^R1y=%BT z@T#$e1@|O^s3$KAZvT^)Bfg&V+v`h?lTK&nGR^=_-TjIF)<)Fx{;U5bKZ$W)&k@|7 zb(OLGqsCY0_^)&VAZvx68eHZsR_6bNOTFpg1C#IpNf+qv2N&J2s#UY`jQ{`u07*qo IM6N<$f*ldE)Bpeg delta 291 zcmeyw(aSnPS&J#e)5S5Q;?~={j$ADcJgx`t{J&JiEMAs;>AqHhdH1;q?R*@;;vZ&y z5}oYGA~iAHaI!9o%;Z!?D<&59$qN}p>u2m>`C6m6Ls|U$S<{zuIQ$BD(_IRhqHP|p zJFmQB+k;8xG^`GC<~{6L`I*zN;PJT~p9@6}a-QpH5}qR|I49L)@dKU3lC15iB6A+- zB;T(A3O_ibzGFYz^e^WY?VkOBMcwQmr=GTjzCQQ4e3^3dgA=#UNCK)kqGqwFNf;=v z4^%Kwbj}SHb&HLheQQ7x2ThLw2~NM9rpI@{{7&D36jq?RqioZEP4;12%FWEe-UP)! eKM0E-tS}GWn7Hrr_SMV`K;Y@>=d#Wzp$P!-#(94L diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_21.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_21.png index e79b310a4148e99051262e7928662959fa08788f..03ca01576021cbd1f154bf3865ec2b53e2a1e8ef 100644 GIT binary patch delta 800 zcmV+*1K<3L1-uB5BP|32NklzN&M+g(zYQu!4+&5f)m`2+qLTV5nM!Y-M340 zf)m^i+cjyQ1V?mmD^EueoZ#%2-~?yC5S)o=zXWGu+AqOjVhT=hCT86}2~Kc=vrmE( zT>sB3THOREII#(iS;6`6vf#YlvAPM4dBKTIaDo$?;FuMh*aSQ$II#(iS;2`-aDo$? z;FuMh*aRoI!q@~SIKhccaP$pMY=RS<*aXL{;KU|4!36~8?+ge|aDo#Yf)kvPfisgo z0x^;0ACaXMfBFUYJb(XOH5kulKc^p`0l|Gbx!w%=xBqwIBtN-LyB;rX91@;Tp7hY( z9GqK%+cg1KJ!bVdRF7?WaNq9m+XK`+xRt;E>#^ z#Ux$5vR3ZP@!(dUnoJ2U;drJVmtVItaeT{yOO2q@e>-%OgWLI7f)m`aZ8Z*pi#bT$ zu0c%=Zud9{E_9&N-4fiSaTZ+D)$PqOS+#%N$Kl$`0#>(PtJ{>-gK zzrrP+e@foC!rk)Gy^(hdOnmLO;+UicchhHOuf8nM`OfAQ@A#$$mpTty1($f?yZcuO z2u^U@P8m+z?c6=MZ*N{rn6T6DcZ>)waiF`J7F?(KD7cGOw+X>jjf3DCuavjFj+=0n zAvnPaPH;1WoAxEAU4tu~^xmaBcfLP)b=!Rbe|*ZDR<6Spt!~x9RZZHoyA1>vw#s!` z-QJ$wRZQB-@1?AM((_r$MZaJDth)Q=+7sXVzjF*y&NBRMfdh98B;I*Y{Wa_ff6pLw zo^5+lPI<9EVW3Zc|NiN*=(M^B?&X20e*IYa#!$k|xLt3D5*#2n5F7{&5F7{&5F7{& ek*YfvV4wdKS*_O!Q`1ub0000vD zW1QT`Xg)E*U~(@b*W`c9>J#HQCLdxHukZ7#|M$yI;LZ=nraCW4a$KTkl=cBz))Cu1RS^GHaWyE3La8u%zo9hcP9pudWXWhLnuSs~$4HoyXg19)bInQOo%@0l#2MVZLY~<`)^Wcb@#lcQr zi-HtZb+dzsdGBs}}U3~5xwrX1(W*?_taa`FMyPu|a{KlvB4_QW{b j$#WRxq?R+VuuqH=OMGo|#$Tt80SG)@{an^LB{Ts59;JGl diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_22.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_22.png index 5796bf194b10aab3482e9c1a03fa809d9ebc94b5..b97b0cda0b3902f62829d6595bc6a8a2d44a313e 100644 GIT binary patch delta 1127 zcmV-t1ep7f2a*erBP|74Nklot^*mjJ%U*YaOITKiNfftV=cIs!DYRc z)$e;^aGf?&|6Eg0puM+_mPqLBZ`2 zoNFnY2lwx?CI`1_y-W?x#mj@X`hxrUy^fg7ZqL~(xado+x&}Alp0g=8p$hJc;4%iY z)ARp(q4s|_dpxlT?sagPTlJ2?-P!AlO>mEctNQrVDY%vYPi%sFbo?{<{XPkxKTWnLCpA_C zSN%1~4u7OXaE*ieEt=?Cma0OFdhdc0T{pao~?uH^q5tXYr-){<~n`4UaQ{c z-;W&~+|w2KX0Wn03fUW}?8#s8xYdt6?kwfXNq-W#b?Ua4iw>^yp0R3~2JENTQ28;ddvFuJ<`JCW1Shz2gZpjyf)iZ&K!={TEgZBb z-;H%2hpg9ocSBV+#)7LmL33hoS&#W9w2HA7+@QVN#Nh5eZq+jG#+G)-(mlAWl~TEP zdw+WQQD$&e*SM~H{>u547TnvxuDX4v%_`BvotBTh>wQR0aYb#PBUS7+Q1+4ZAj#j)6maj5!QpzCFXBW^&A z*!oP2E%Iz*#5iQ`jiYXs9Ua`00gqS_Q-5R2SP!elA?iek;DQD`YDILo1*h9_M#MNo zjhEn>Ptb0$z4=I2{(BsWA14JjJh)CbmkO@$G6na^Jr)q0;EoP%%B5k`K3+#JcVckc zeJxOZf?E7TfsXx?C`wJ!eJ-H}OK-jv=g=#FgVv@z_@5SFvS|j76pF zk2DMlE@K>?K2OvoT1VZU^XAN4^%=mOgX{kL{*(TG!WO|*46fjM{N tplV=G2`+0Kx-I*d9}xnPhDjGB_yZ)Hv~Fqo{#XD2002ovPDHLkV1k7yO>6)F delta 576 zcmV-G0>Ax|3y=qpBP#<}Nkl`Shy2G`-9vo1HG3hqLGa1krB((`{_sC{LRCpN*o4lZ)5UNN{kdwsD9?s0Hg zZ=Wg!H}Y{}6WpWYpU(69B)H5C#EP*A?#5fk-Ga;BBd-{n;LhuNvy9+o-0j^xxbEM- zDYzn+cFmsWnZaeoCb)*dT^T%?1FK?i(F1;!ZO O00001*Hj)BP|4MNkljp&%T*4$*aRmyu?bFa>p$&Xec3z&cf_+? zdhq>WTX085mmGYt3GVopmem)8MQ}$&*YRSo2(Eo}cZN85YM0mqw|#V-uHirBe;^2s z*g#KuU_fx=;+y;eOpKE;0ws}!bAS2;cU}MgI{Ki5*QL|;R&2A=oL$`p>g|Hu`Pr-X zq2szt+uj%3Y}~+?_jkQgEqtnXtVl-(P+I#ss(OHWm9h zXFq0yLo&E2a~2P-YY5eEmaP6670016xVCd9xOp!p1t+-C3o-T08NmrIvJhV{ z#?(JQy!rc9>Nup{-k&gMf)iXkxYTU~*K{GO&Z|2mxVQV6{NuIY{??yv)#XIx)$3Ay z9Mb2|cAK+UaBmkQefD}%dVgIy9Eapd(t>LqT-r&&B~Ba{+{?vCe^#nOdR?lwm;SUs z^_;Z{?(WAXRtHxly)M<;TYY@G%~@G+Z(mmI8eGM?q_&qndAZ}9l?L}@K~@CP^%^Sa zby>N+Rd29NnzJ^+J$dcCGPrKi>#|~dU#)T1`!_PUia>U{LRjbXKYu#~*J)eF2RE7E z1SdGb32t(5Vw)G+#Nf8NritJLSMe^T;JjIKL~LK}=a$#9Ne)TnBBVbx-gRB7&re)^ z+s;>oiwF1g>Pr)z-M$#C#JW^&FMTd$dd}JgSN%^UI=}2%y)G5UA$h6!_W!V@b8wSh zqbGx#cpN(aBai6s-xk%s@b7X(uGNDw{Wzqz-6^s$?^42UlMezHlPUrVlaB%zlSl#( b7cBD+O80i;tmUGj00000NkvXXu0mjf?8nN# delta 376 zcmV-;0f+vj3D5qKzvBg-7_%4-uGA)!SLcjdJSj=zWa z#o})xbWCA@8|2|R9m0m2pz(x;38v1aH+e+$td33ccl}I;3#pnuR6?v6WkRq zC7oylhoN)qf-`iEU2ulZu_HJG=e?`o1n1ZVhoQ5(2~Kcg6P)1oe{Qnde|O~&oZ#$k zf)iZd;KU}l>)*pw8E~-)PH=;$H`Uu=RK|I#x1g0Ki~RCE@5BfWlgt4llUM`}kz5Lsr~w$09|9DU*Z~cb;Q=s{wgD0s+WG-g W6CeN^#yvCu0000|EH7JRLZgqOkbvFt*Y~MB7qn- zAO!gO1Ejeu0+Wyf7Loo5k*F(wxWXB~e)k_kSKLj<{hAnA<{)$!+^EmmX~pd{=Hr8V z8(QQbR1a$8=j^h=b{q52!M$0C83Q1=y3e@k-wST>p_1Tc1=nHR#|0O)0zDnHjw@yK zp;WivGGjeHxT?Xs6I}LyezlCI2G{L`(x~8~7tre9ss{6v;JU9*TL;&FZj1EIJXFr> zr)jU8C&3*UT*vPZ9nOM%H*LWQZbWchPB;HF4=c~^3Qln4EBF5qc3eh+6Wo~Cs#i+E zZG28ZaPJ1H`ny}?37v_-mCuib^KM=`oh(_sJa-Syl_r}7_y0)~!HG?9H%@XqdH+tq z-Te%2SGrw;bMdm^%9hW6>fm;`@67Ev!-LBh*thfl^up~s%T{c@!!6rGR1fakJ=NRb zKD~CwGs}Y8EVzoTd}VNV_VQxeD7fgsdmCKU;neC!OguRpts1jQv9%8_;`t*hz5`_s zZgp^#8_7wr3GT&;{@t0pNx@Ygl}w6li{K*e_I~;s)~AyOyKI1eo@{Ws2Dj@oNRPVX zJK`!0!S#qua1Eoo8{BVJrjEb8t$M$X-`{qB!uGLG?b_i=lP(*bE_=5LkF!7Gxs;K? zov@ehuy>pCwx`vl|6@7U90+akE1qKSUie3#%V-aG2yMAhRjxWonj zbeg9I*Y%-Ef@?Yq2&<+uCAK@$=zLMKkzhZO{t1z&NRylc34ho4LtkJ27ybTG)61CW z-KNuZ98yOeBZB+%|0AZk`rrTix)sZ#Y8*0Nlf7Kt9Z2t*XKK2^$nQS^BQ%FRI3wZf-646xc0erv-?S;sQVfPHz>Hw=|mhRciQN5 zxUENU8wS^TZ@PM3qi;ABoZ#9VzIJ<`F7XOZaO0M5#9m!+g&%acJBCjRF7ts=f)m`) z!G)g%6n~uH1ot_%Zo&Ck;7|REk^Q+Ro~2B^UeOQVvxBSN8+YIHS6?C~xWo^e@hruv zvvt|m3uZhFwsKu^@p8~%)aoZMuXyTm=GM6Dlb53ppO3sfXT|g8v!46k`7=eFE$sNW z1uFiK$fz4ocUbt@pR3auxsDs6sJ}6A#3L4}7Z-lUAw<<5Dv6xu%CU~T66NTJ2*GrM f1ChB$7sC7nincZT@@ob*00000NkvXXu0mjfH7{=M delta 661 zcmV;G0&4xP3)=^fBP|1>NklHN^+%~}!R?Io_~4=j?@n;L2lT&v)HS$l6H2XuTfKv32NyM% zr+);O{dg)JT)H#Tn{9~P)>qFxbDIQrU~n0)A2Q5>y?buK39dzOS*DvmZNtpjUBL-1 z{NVl@Va9zVIKj1vE&8AoT;VwZ!Ho@6^tIc{37w9?g>R3YGqx?6CQD}T&+5Us)1+8% ze4RIb{>Y4LpxuKT9bDu|vQun=8#vJ4&E$0oF8WhRr`Spax8mF0Pk)E?YJbw8 z$_ePn2`6iCRo5Ur>KorH?$Qukj@Sg3FuJ?JeRD8n{N3BE$IE#AR(*x-V^{5}aHmO@ zlTMa*w+_qMAF(dw%HU3Tm(TF-*5z+Uv|f36=FfMTJi5Dr@y=`P?y;2!?o%|Y*P71~ zT*PCqTAV0)`~|mh$3K0}Q-jO8Xb+O$k`BVG=jjsLo#)7WQsQb*$?_-&!@%rs$vS98JP82X!@@y7Sf5*9ZYQyE`>44hlxx zRlCE@=~tkuzVrc0`-6X5ibj)pi7~j(!^Im(wIX=LXC1S;xgfWlZ z<*SSIfeg-fR^qcCuv|~mzL~jHaP|Ya-Mf~CTW$o}z7VK*$MJmi;M-msInTW+`*6oD z-Jt+z-~)^5`KlHN8Jn2Fcw$%W#5G)#=P_~C_wna{`ugkj%j=f4do~^Pt$lpIH&}Pi zmr_6Z^)Ute4w@eFj(`5;<0;nZbr03=z1TnRcS*_1*K_RRRzJA+w`%*xcXKv-73^ML z{HtPVv-jQ?!H;XJ_kmT^#oXS%^o`L+mgg1+W##nuvc4*sd-*ufB`oR|2Z2s)y8Y$7 zt@gS4%TK@BRoWcn<cyNy3c-) z^IT!mYsr`@?kP6c!a@pkn{NL+a)0Xas!yLTJTQA__rCV3nc~MiKd%_SE%)`BudA>l z>|m|+yOW~3PNnPnNctDFH+knoUz&e(!YuCKW7_rn?3Xzw7Klyk;+ptgV&Vz`@f**? YXYSYZGn%^eF#`~Iy85}Sb4q9e0AQa={{R30 delta 391 zcmdnXew1~BvKdp4r;B4q#jUq@1G^3z@VExPufKej@6*H`o8}eqeOb?wctQ4Nz_Qou zQzGkF6)Xf~Ab4V<7!wEIZ3ClE9Z`~;vb9h@WVMf~S=@g6;QTjR z<|d%EEXQwFPkX?^&cO%4P0TFpO_QH9@&Us^Vlpoi*W?|H?vs}=Dyf44ih~b^S=j$v ZWc{3``|0u2z=;e%;OXk;vd$@?2>|n{qpJV_ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_26.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_26.png index b1855165b1b322fa83cfb5d6447ecc20fd46d286..12e64487e55e732c21f1c9296a83299f3c54a8e0 100644 GIT binary patch delta 1004 zcmVhXdT+~xC(oU9XqoAP#JtKhOuBR<)ib`I{FWpoR!YU~8}$3RvG7xjWh1oz2u zIt90K$1J$v!9~BAE3Z0E46e)g9UI(Vd##AQ+0}Bg_MU=&6I|N?%m^;~LXF@A*Y4;R zb<}xx1f6oxL~w!&8@!0%u1;eoOqj_RO$2vHaGxB}d@L~gj7V?`25;4EO`oo-b8tJ{ zX|m(dZDeqf1AXTv8Bbxqah% z)8MlA^3}oJIm(M|cyOyP7(5NOBD9F3$kPi?D;_5{!7W*T=Og@z;O;C_Y=T?*75$&f z*gd$r%M{z-;HoCtRcucurQpOSxCM_FT#wiU*K7}e_T)~LPbSmk@58MKE_=f75?lM= zs+PHPaGyNB)6s3G*aX+)bSY{qBEEoHd8KxGY^{Qe{*B2e@8zZj7x6=|)gO!O5L@fu zDwo~$mZges3snBPb=Bvvf)iZ%hyJJRaE=JB+r5c91h-jqh z8-v&BlOg(u+VV=-0l{@01HlQd<+cb;a9hOIX*++fwnK1&6P(}#C%Bp0`EDBoC%B~( zsB*$jSij%|x8%)#iw|F$eZVa^!7W)%$J@HT*{;m1xPlYh*OU0p|LYoD6 zb(N~(s#w)}GR9)cj<@4ax(hCN;Io$>Jr)&{&U6HKU~ti=W*JA}sc$U=2Zs|Jkx)k$ a5avID=uGnZMfjrt0000Ms&ybJ-8jslhfAUKh67Lkhzf1Xd)*Y%&^77qOC_s^bOQIoII#9jT_1$XmH5Zw1; zQf0zse0ISJZh3gsgPZkw!3pm2b4E_q4#9Q#cVnyIRvku+>`f~N_suq{1(!8;g8ML# z*}+A9p%KB2Y^PFiGk45_YaU$mmpSvSW5?jCjNh@recEe9?9HyWvuf`te>lOF9l#aA ztv*pBIKh=$-J({V|5ng0Crtz=xUj*C2=3}Iw!?(!e9}a4hXgmWqPZ;4`-n(z69#YA zZB3)^RXMmF?ljqPb!!=1I5=0D|CE(>&c=B(30sBMB zbv+K1CbuWPHw|v}UOqdxJFC3dng=)ggu&BbGeV14MV_8`n(;cZ32w^!S6<;~1b1hf zViVldNA%yfv3qcLw<)&9!DUUftJt1SO2LUua1&lHxEiquuGk*zf61LHBa^A~^KdhQ zTRq`-iLHEaS=-z>xRKXaTHSVvO>jjHm!ifZ;sMmmGqv4gD-~SyZ%jV)PI>E&U zw=;lK>nb|IjR)Zb39ic#L~w!=oZti}IKd$}!3j=q zg6nfZLU4i`8C-|gDLBEk3$D{77MtK=_x#iDQ*?9_+^FEXf4x2gH{uAFHksYLEV%LS z;gTk_*aSE7VnX7?7MtM42DkF>h)r;UYZRQ=1b0Pn3DJp7aDo$?;FuMh*aRoIM{I&) zRB%4n7TmSLr9Uzc!Ho`1Y=UD`C?}syDK^1f6Wr+s!HP|A?St$1sB{0%fZ(nS&dxz_ zY@Wo9#)1O`2?v4$1P6ix!2ywI zlYZ4Qf4jWo@ZPTPn=z@J6XSzRp8UUE_Q{Dl|F_ z&MqdnfBpNa)=kKlP%ivPBaqLyf zf0e;?3P5nRV%%x;rcaDqD? z+_%f`bZWHoR9|qw9T!cLp8^(TWmGNPP^5luwxb zRCO{plfq;s7KzDXEPRtcF)B{p!KgH`Q+TpGi&#DLLB=NLgBME$uDxe(>Xy2Z$2@nF z-@!nkJLekxB9}kV;LkhmU~jwp1X2(&r9oxeH zW$q8&vYRunKBOS?JpaMo8xME!ZkE^Q&ihln!;e|l>|pO7gN2V1x_t|ho2x%tBms?V zY7(CPU>(Og=MoU_h?+$jtGXG`>`vc;9^xWU`84t!v&gpJ`pdpvEd*g%28yK}9LBR?P8B1U&NisbL2biQo bLBR>}8|r&P@5grBV*mnAS3j3^P6a^z diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_28.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_28.png index a76756bb2e7ba7c2a60830fcfdd7c03364f4880a..71706ae9e80e7b3fcad15142b8cee6edbcc54c06 100644 GIT binary patch delta 831 zcmV-F1Hk;c1-}T8BQ696NklIe*XWj>$o1fL~y4>R>evKFtJuE#ey1Lz;0W7{k>B(5;}jfiHlg4I$Hfn`1SdEf(D4dR zaE=$j*?^8!a5kXls)9psViTO;_C@8rl!6mnVQ>geaL#aoe-qsK&*6k8IKdT!hu{R~ zm<4C^Im;n9(K%+p*?f*!aM*l;6P)KXf)kvxoa04s(>CFRYnlj7a7S#!uGdHro8XR% zF8iWHQR5Pv;95r4>B`HUuLvzT!lSFcj(_LBc_28-HusI=5*%AMxp4^&5F7{&5F7{& z1P2HX1P2HXk!>-N{Rxx)0Wp(`0vCTkaDd=Ia3c@$dG~Mk{ZE=B>wZvh858k#vNIQ; zQxYnfR*v?i^agSWjQ~cEMF|`pBpm*DpZ)P%Hecq(%D!Fo@x8t6>FYlBRmv_eCfpQUhc$nizV3o6 z7)QsAEI7dlPH=(~oZti}xH0318n@sCcU^E5XSXS5xn1wbIeG61?w9+&CAjS0!=1YB zf-9QzX~BJZyu061d1`Fe1()^qqKUzMIv+dNWy-n>E@0v-$6fW4zT3x_rmVZ*oZ+0| zoZ;p^mcQvmlgv*GoVxCUYw~{z-n8JV$LGz<7YFy3aZC!%FTRWCUvTR`?WP2m@p-?9 zaZX)#!4-{VYH(e~Id$CyCpf_g?v9C{@M!_T2~Kc=6P(}#Cpf{if3>RnHBG!qx&PR% z2rl~ChFx!0F~^;M4_CGBf(yQoYuAUO5oh5Ym&v3volbEjAL zvghZcQDp!C002ov JPDHLkV1ldHtS0~f delta 352 zcmV-m0iXWA2)YH3BP;@eNkloW`-NZ;W&67z7Z1KyV;9KyV&dQIEAvnQq zdBO=!aP!~cgeN$`HH3%Y1ZU5JGkl(M2u^hNEI7kw&w|772~Kd{X#^)YPdWQVa9z(;JzH?3>8F&Q7+lY!nb@YRD` zxxQ0^E43b7W83lXrUmzOy{iYe^6y_C+{#JQJ-Ah&b`LIV4vi0P^*~*DoNs?uIk+?N zbq%h{TzW-tD<5-ZaJx3%t{0m-d&~(0mozx5g4@0EcDxO~^O%2v8y;MR-TzVlb1ARGE)IJn4xIlDLO8r;sya|G8k zxXgi>erngw3s5`Ud{=Nu6YksOni$;9TP$?ky9sXd0KIGRu3am}a^-=Qr|U3b?^ZUr zmC@}wGFLsgh}+~ve@)VT?^Zgvzb4JjJ1=(*F6u_G*NCbG23O@) z=hcoNcl><;zn(KZxE;$edHW0Q=HO?1UYIty%1+wGzYplA3qg}@12vKE8IxQC7?T+T zF@KF+(c|2I8PEON$@juBIjRqSL}a@*c*b+?9+wr%n>i-wV?TM1(_unoZ2YX?DsPLi z!9`BKtB<#HQdN4z%?R$wV`Rkry5K(j|EJHjJJJ>ZK0COK?Y?_CBj;I*;3`dqRRKH+ zCo;MUZ(*axv)Vi>cRZ-d(W>ZIw{D7x}hMa6ZF@y_#3NS|H;y?y7Ss1ve}FSJURQyoElw0B_;EGK+M=9s--2}I3PZ7Nw)4zwCbUQ!6 zZF*}KIk7TslXvIZyNuYX+^tJ+K~JBB?w%E2{anhY7rWkFpC{w8a{L7M^K2uoI_*-RTETy38}d-F(ih_04)~lrrH8Ui>>gICv|;fss&0 b7u);;S+zv^nwg}b00000NkvXXu0mjf^(74B delta 650 zcmV;50(Jew3b_Z6BQ^toNkl-j_M>ZT8NW9zxV!sZJ-Eo*KR&p~ zNz*;Js8G8Hw`&fK4=#G3uH4V3+f@$kOnhB~t1_1!5nSYbMh2JloX2HGQ4#8RB1Sh!d!L?aQ4hK!f1lRFQlYfZdT7JUX$;*9%>wIe0-QeEc zzGHNPD<0hHSM_SaU0L<5a!rD(65W|oyRx^fQgD&C^MWq8)BkKg^<2s;w-cP;!eV=O zAYpoNSMOJFje}b`FlSe@uEAw~JV$U%gWEYU(@*Wn`~Yf)i|-0<(}eppxh4jed5MLN ztDE4G2Y={^SM7=z%g6&OclTk!>Q*+m$mp_;%vBF=#bxqVzfID8bt@g*f0HKj%FCUD zTXiAW-EWiZyz=(w;Lc2<=rhJE23O@$=hcoNcl>?<-<~r(xQy+X{QL{<%fa9A|H8D% zRd&)g{(eATT?m2$!2yB;!2yB;!GYia!GYia!484oKyZNIKyZNIKyZNIkx&+s1qCRP kjt!H|0vwT8E*Ay;0x>T$v;$ot2><{907*qoM6N<$g8e#8`Tzg` diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_3.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_3.png index 3355996cc497c7a0fee0f6b64e969e25d3691573..2fc61a3f5b95589981eaf5d88d44431aa39db46a 100644 GIT binary patch delta 883 zcmV-(1C0E{1@;J#BP;|xNkl+?eB{j&FdA zO>k?2>v*39C%6^CP59)1*aSB|xK3XL>zkJaH!`?M|6{=a77*Ok!F9j?2yT3E6CMkK z1Hl1;1Hpmd0FmY&lM4b0kyS^NTmlM{2Lcp-m=oOdeD;$)eybf*v~8-#7F=>d=tw`g zjnlth@nlrBZQkzB%=_1My!MB{Zzfju-&H@pu8&c0gMzCFr!u&VzZYBGcx!{Je7Plm zIKc@{aARZZ{IXtfg0s3c9&crEr#7JAtZvr@S9y%meU&>MTZfAPHm`2&gZp*IPY*8Y zeYpSqey6K%1UK-d#kAnQeY_{1h&o;Nw*BQ~d2mrXcw%rFlmFM-O1tc7`RXdd3uY!yGc+kdw)ot7{+)XDB;QI)vf(m%F}1#rUV!D zcM-vz*e)A(Mi;>E+~@;NCuyPYEvib|wV3 zd36(<;9A}9?W^0`;Ifa6rUZ9t%q?%bl+0tn2~Kc=6I|2ax}NEr5ZjpGvfluI@BAr& z6Sv_ip5?(+oyqbgLOp}K@nlJQa8)~}`?LR~ugSBz4GZqXH|U-iJL;R4PhV7g>i6H? zM&u_sZd%<+gUkHTW7c>P0Yq+_4*TM!)h+d;N%i-;Pnb+q+oy6Y!8M7mV*E}!x64-? z_!!QD;NVt*1Hpmd0KtLa0KtKiO#%y(TmlM{2Lc$8z7Q9}`~_kDRujN-mLC8B002ov JPDHLkV1nOH!eRgb delta 365 zcmeyyafEe(vKCXfr;B4q#jUq@qlKCb1Y8fkslU8~(cZzwsQgmw(eeYcl$Gp`vFaGx zuuR^`=+D&fV4}bG$eag#cJ+rVJvA-F z;ty9|b}8_Yv)j(f;(l0BY!2AGjp;wq_%}g}?wfb;Z!+&jpcPHRK-u;ON$a|`?lFkZ zesGH|yl_6yEn){%YluKsiSGMV2eS2LpY)d z!}RqJD04Xlk$g9kJ^~bfj2Q^mXI}^|evqaP-0u4?IKj0Vyj}NOaDrohSoi}JFi!H+~4lslk@ZBJgka49KV?#yi2C_#hJ8&Fu)TcW~+3du4FHZDZvOSt`K^PH=(~+{EDidVRqOPH=^)Qb~J+`v>gEs{CWLeRZ zL2~DcnzCqn_lH7<<$ZsGYZ_dK376`@-}Oo_xW%uR5?uOk3{1JgjbFT68Qkf`ugO1F zNM2QcdRtr1yWnzzJF&Da{X?PqVg6n@ZCXS46!3l19a7oYq zeDxz1QttmM2gciiOMBq1;5J8-cIGGtzziHh9B&B^boRj!%CGV!G61;xE zHkV5Pk%1eNLj)3&q5(OPj0%(G0Y!fYf@A6+T=!lGZv2o=9o+Qw3r=uR!<)Kp!3i!h zzNhamI>C(!ZdIr|*Z+2;2<~`rcj8Oi*%4esaH&HqIKjmaT~c&{6I{j62~Kbv3~uT$ z3r=t~Lnk=FAvm!Ku6OXJ4z-^I1SdGL2~KdC!MT@GaDp2a9D);^9Zqn9>py?P2~Ti> z^W}-)1lJQ>!ukX!xa#0UCpf{`s8t3!W4mw0k%ND$H*HW?-Kj$cSU~p0IB%gZGmuk*x}mSVxim3X!QNe~>;2uiyVg-R|4lZyQ|1 zK-?YdRS!n?_PUJA%KeDGe`ABo7y!Z5-OtEvmLLC$p$Tqga8GV)MQ|&BenfDe{(t4R zvhQ1$=Sy9-{Y`Ky=H;m1GA4uIYVBwB@yUwrnmQQ-S7$$sjo?fw!3j=q^Y*jLxCl;g zf)kwJ1SdGbf0>3ln1y8J~RTSkG&nE8Y zzka{k7>!kUWgnST-qF;99-t< zMfEj&JN7eT<-a4`uq%D(=k!;PE1XaEGyBY8WsHIwf4m=4Us8yA9@zO0pWqzj!uB)j zl(6&s6P%-5>P44M!G)Z{3Qll>OMK2KIKc@{aDp3p;Y4tP6P(}#=PG6W*fN6K{a6Uj z(XHLMRDR(*J8r=_x`pp&<{H)N^KWEuE7#mr+}@k#Q@j2sWGr4@z1~uANl)yvCdQ87 zcI@YGMz{6$XWvA#<^6XRPEA(7FDv__ysLb4c-8$}vHdD@OK<_($i7b%j^vpWvFc-y zGXEzA_hft7_iy(pc!|IE$>USv!-{^B5CcjV{rv&+u@@+)dEOQP0000uv5j0%%=0x*+C0vM5h9R`5lKyZNIld%LAky#jja})L%`x0EhpjH{^ z9rrskCU3^7(xmM+AFc{6W3UBR`*#;yvB@R4e!;E0z2IIBR#tQw!JV*bM?RLS(H#}s zNPIItOK|;9um~=Aa;+HjZ-R?@QU%vz+^!F9MRX&sBMMG%M-I||ir}*T*CRN=T^HP^&;%zo!7cjPBP*KV>dzs;H3)9>NfVsd1Q!ro z=H%SH)vbDP_EH`i+~1QXg6k7p$;U0Y@$V6w6;5!M2AA;~uFZSS9w$wX5AO7xCM^%& zY+gPuxEr>1eY($%(Fv|;aJ&E7X9f4o>TZ=2-16Wu-&LM}wUune?W}Sa1{d{C@>5Tm ze7h4zaDrR5y8Rc~%{xs5C%9$D@}sMn-~=bQfYohwa-JMqWrEv0KyP1jRo>cFA-ImK zo8W>c*X|Dyx-qy4D{Y6>?dafkeoWqphecKX9k6;12yWrziaK>KxZKAv`yNJnDJR3( z{ZZ!?gWLThQRkW0ZRm8JiR**QKCI~+T&1fMxq8k;1AKdM-R4GRF31Rxfg1*Z;6QMI u;FGZg7Li#mk&FtHbpkMxMgkTW1^ohc73K3E zC)XdK&1DLad^nTZ0TX{1z4+I6F9bJs=e_ev8z+JjT=O^)oZudg^UXhx;FbiJJkIJ! z5uD(fkBkUTaJEr!c1GJMIP8pq6P%sVHVO{GAvimu?Gv2fw%9ho2~Kcg6WqzcO?qb0 zvy_4pT-ewVoZuYc1Sh!tui=CzIKjDjA~?a>Mg(VPbd(dE;A~2#;IJbKPH=Wa+bKA~ z2@b*85pAd7?1)=zqu>N5xDR9WOGR*kYaXMco8SZ&cuMFYX2FfRzDfJWz{GDd2#&GA zJsl^46I}6_5tAAMW|5#2liC3nlTZQ(e}3Nh>;ErvapqiXA6(}mf7-D+#*wsBubhk3 z^RVLmujEBeh^=cU>kjVMxp*?xRqLL#4%Z34O@I0OcMk6E`#&A;>N5(#{bK{Wg1h^( zyIm*!^4=A}Rj+&EIxGpUB8<+z^R02D{AREI*%j-ax(-qIpWfc^q&sb?!6nS8f8Yey zvR#7fori>V*fzNI*aX)*4=L*)IKc@{aC-#zX$*qvnTMox*fO}g6TIr9h?I{7R)^8~ zpuzH+HYWww`QhuN;Hp1|6WoEpt$c(j@wE5plP0N`66x!3L~!5kFmFWn>*Hf9t}_#! zEls#C6kK6&)#I2H+}-dd+$2yRetiFdht@Ljv^iR&P^hvVryZLK(!Ts60E&%=~;5ZuARO})t>IKh>@1o!N^ zJ#8I4yev4u2~Kc=6Wme3O?{;4)ZnJPzkgz3;Uc(8DLBDx99+ebf9gC4OfG0Kr#!UV z`J8CwX|~`t4zBv^ITMaHJ3mV)xT3pBUGKT;>0S3-yTrS;f(!Z2Bu=@WN}YSbZ4%r! wW0-U*(={g*H?RZ;)c=w-1(OQ`M;AbqzZT&qP_Gi0761SM07*qoM6N<$f=6|JrT_o{ delta 326 zcmZ3&F`adSvKCXEr;B4q#jUru9rKzUcpL)n|G!kg;&52v_8#@r=|^{b)c0jAWXL?! z&oHq;dh#SjpNT!3lm9XcOrFEY!PM|zVu0A>9gKXF?=W-LyD#Opf45g4=JwOtPpiuO zSk!ksDOR#Ls5|fT+3(6b{F_$SoVz;_D4-fIDLCiB84Zim8Eyv?C0W(M3`Gl;bjh>o z76*H0_!cw?&$+?!{rLl{yPIFcc^%|jcjG2dOUy%{nLqD8YyqnJ`MmQ1OS&6SPwZ0` zb&FyyKG$vyi-VCa#aw;`P0j^k7w0r>?odt>ne%|9ywGib2*^3cyLNH<6|nwSDG}cM zAgXr%%5O&;j;l+uxZi#db{=Tn_Mc}apJCLTJdIIeVhk75V}?Ml>WLq-W(|1%(KZBQ68XNklSSif@=>h?c7#J zir@rSyfY#=!5Np}1ZP}=!@?At;4Dnz5*&go(N8G{^J|LS(tV?!3oaT1cyaGDLBDdl*T4F1c%@( zN@Ek8;Is^xY&=_5Zsyz5sASi>?VQ}oZti}xQRE)PB@npA9Xi)C!(s|fa2C^CfE;Kp>C%Db=Avh2m oAUF^l2o8}^OOsszV;A^^8@EdRA_#a`y#N3J07*qoM6N<$f||gB=>Px# diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_34.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_34.png index 7175b3ef29895f93333e8582b48ef4442bf21dd3..c8494444c6cb5a865cbab56215b1a829995e926b 100644 GIT binary patch delta 1088 zcmV-G1i$-^2h9qQBP<0JNkly4N$!yGsmFQq^;iWf;%j@Rby~x zEOrU5V|0RR9Ne3Adi&VUb71A)3+|V}t9~t=C)&#A=@wko*adK*5OH)!yv&4u74!B>{HEMCWzn!ml|Bv zH66hT?zrH73Qcfg6I^g?nUnD3YmU2q78cx#jUza*9T!~0ZC#)Kz2Iifi*~PFaQ~k) z5#0RX+P?PFgZsX$$-%7}7kfCtZGSIi_u$4%=*vlyZGwxw<*I9NBfseB=HWlo{++#?;2wScnY_MFf~$Ok z5ZuOt^+{x>1y{XC7Tl(T_37TMBDjcedkao*t%7?y3A?UyWN?m>1b1s0pG=<09}(&p z+{C?`;2NGZ=@{JVU+r2MT=Y2Xw09F+iUu`vMA)Zx;kWaE1VpXGVW+^A)~+|99*}NFI|@x53qUV`qkzxzRgKwCpj7 zT;APnTrm%>&KtQRwD19M^3I+;CK<~UT=8D!?(U0J@T@!E7s#sq4 zz1uOt-3>2m9j0ISj$X&?o7#T`H*630_Vc3P>Viv~pJdR2bXzxSb4p#;xK#l9xGybf=e8Ts4q=Me@5vr=AZ0Y zB0iU8eNVFdoAxIJ7x_HXgM0FsDf%ZDIv@E6u32#1zv4gbaBQc&o8W&0cXV(i<0m-5 z2~Kchf}1`8#3r~=XDJ0IxZ{Ic@m#xo(^zbRYdgqQzptP5`0UFU)t5_JU4Gg5U9{sb zFLw#<>920ReVrN0>$-O<2`>BWUFWle9fHdki^{R@cG$jsaMc@pm*BFu`L3Unj|lG0 z@+TcaNB{Ru+1oy2dB+6>2PYF8lkWl_k$4W1KLZ*U5au6!xEUrV^xd}r0000jMmP83K`i86kO%w9OVSp^!{h%?QIEe<_m=2HXf`yk)0OY>?5+^HXW?HN3$8h_4u~8-~<;H z+}lZ*y3IX`C_YTF&Z?>>_r1sIWW7LkhzllKG{1cBfT0h8|pN0D(B9|Q*o4g?1X b4&wX(K(L=kK)@x)00000NkvXXu0mjf6E-1? diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_35.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_35.png index fc930b2a41017ac9bd35955db30e4b2407e23530..f0a875ec84363fd71cdebe7c2bd3ccf2544191d5 100644 GIT binary patch delta 866 zcmV-o1D*WE1@;J#BQ69zNklIfKV?+gr!0Ttp9B1S_G23bNAU#ioY>R1PjHlnmYmo-{8A7cuO@KiV^?nP z%Kwkx#!TJ`llslFMJKppV*6{EH|($Acs&7EFZZT>796b;PjG_6Q!Bv<&ZM*Nf-~vt zJAyOm?6=@dI@hg&LvUgfoZx~{xtCIKf@=&8!EG7b#IuProZx>1_sra9;R#M~UOW+; z;Lf{76rA7$=PW0pFIBP;1ZMe?EtQN+)gi!cw8>JXYyp|TGma$IWuN|kK>WSRa}pq z5L|j(c03M(Yg*0?!BsC~$KxP4!3j=qf)kwJ1Xp;V6O(Jl;HqDBPF}|y_qM=I!A-k` z>*nCDeIHJ6vu@`)HMn25^O#$^b_woH7(3q5RXr{p$6>`WDLn=!2KVc-Rs>f$kxm_# zs&N|iOHXj?CRXa{lHi5`c6k#%7&&pAe;JqV^T&5_ z-=yPkba1~ut>_A_GrFpANv+Qt-$Qox&2#wZbNdZG`CWNkwqku%FR%!%Xo7V{F!{Sp zDz>#^eUskD72IamRZ~qK7r_ZmaDo$@-~=bQL6dI6D~4k0`-qf(;7lyRh3@$GDy6fV z*n)3fdmrw{<)sdCM{KF>T``GM>+>~v&A}z^-d}aAQ!=>Zry4rfcm2JT$*%-Y-7Vhr z73aI$Mc;APzP~N7NpL$I++=X+W8OK}O6UK{!F{^Uj{TeP6g)lgS|_@{4+r-V90(2s s2M7)X2M7)X2Z95U&ncU zl5qcnyJLY5?}u~8*V){ky1)OyC7%4Yh4U=8ymKtdSsa`yX>pK~40i^UYbC*{_nj(N7Qx%U3A@hKD}HxX61{0JSk7ycZc06jm&BCmW^Fj{p0?J zyX;NMB@2w_D>v=7+xO;q#{-9g1|U|j0O5(bG8loPAiiJ?`(87{cb4TR*%^Sq)78&q Iol`;+0L}WRHUIzs diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_36.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_36.png index c4b38779015ce7f57ac6ce7a36d834a013ed1f4d..2e8779240a0706f83864a1704be801bdba8dc1a5 100644 GIT binary patch delta 1183 zcmV;Q1YrBv2e%85BQ6DgNkl0lOY2*lY9dce~LExdhH(r7i{ynzorfJ$q7i9*j>*xY0;+5`{>~AhPHD8 zswZ^k^PCb~T69;}*eVyJ;IjAP$u1jpyi&AhsuLlTj z!DLmRyY0N7(>XYInlukCWl`R_y=hu-?xh?S-1mzng6kJt!*tbT^7nGFF1l59^B5s*>RVKf8ct2>8{`k2I$@3URg|u z@4c=1eN)fh1b1kVy4`7#@}g6{cRRgje`IhcUg6UZm(qhf{kF)2y<2o}zg@goaalh( zxSfA5;O_Zp!rLM{=ls#Z{WXBQziU1vxQgGs>&uC%=09dVe>G7t=uZzWW#RhkIZfiL zJby?&$$$522pYQ0ee~M>0+D|=ldA(31qcoVX9$xa12~g>0}p==J@EDWzlz7Eer~2e zmn-FopBRu`kNN3yi&_Yqw(<0Mq>uNN9NVe^NuA`B;C61~$?@ng?xn$I1mvy+Dx~+n%9QT7aQEf3p9dzKya%D zZs*{qycHlg!9@nQ`>vOSaoq8~px~MX_sQf7?!Cv{`G$P@Ep4ZdINAkwaxw3kfTY98 z@%G#%k=xb50LJm*Bb`IUGOVIs9SdBXck< zHo^57->N9af8zV}AS4Et`ZWsaFC60z>!-!mB{)YA4}H;_7F%L)DR)#nIk=cPm=@cr ziJG=|Te*KN-GYm{g=}JMf)iX~Y-Pb!dF~z) z>g|kq!J8UeLU5^H6F&V;ljN^xzoy3a=>qArcRL-1ONG1F|gDw|9I)B%Hhp(G|L~tbUZbL#0)#sWC0d!nvf-5-mNWTiZ x>yU268kn@s%CAzw(+Lide>an>0}vP3<{yta*;m5=79aos002ovPDHLkV1j+WXej^y delta 668 zcmV;N0%QHR3)lycBP#=+NklS;oa zj~B4bVUzI!NRw~{Ady`P8X!0j90(2&90(2&90(2s2M7)X2M7)X2M7+4ffWM*f&-Ir z1r>jDHu^aChlUHb_}m}e272cNWSH1h?={n+%{K3?gBuNPhL&oiavOBDmSFyCS&V zllk8m32xt7Y7^Y*0h%3L)MN@yaP3Y3zHNU)GN!r&PgJi7k3j3a;k;0KrX|tmtdEl{a)M2j@wX z;=yHElp~Kfbqmh3l+A*BziA@4dcmdK?oPqY-s@!wZubMcj&On#+|BKu6v)uV%%feiu7P$>UUYDgJ4wMkD7Z5VwtH~VXC;Cwe7-&U z8P=zp22~cyogI$gng_RXa8^8}A-I1UU%D%}fC0K1+?mCc@w2yCuh;eZO>mnAsoIk! zS#~@u@2`=KbSA98A)cmJe&#xjP2L0*5Wm&j>drpz~BCj7ZU*uo?nuZ2ybDw(c zzLRhTFp~-cAOpb}0+R{@FOzTuFdYya2o4Y&r1J;z-r@JcC8jO_0000GcJaxts!%5CR~Ph%0|$pZM#uF9a7osS_d-p5R7ZK@x)#o!|tw_=+n!!3pl+F{Lky z1;?$Wo4-W`$D#@P)A!PUCj=)r!3pm4<>Z8AncxH$H!%f=Q&+gTkbIRBoZuoSW#YsY zo8Sc35S-uyCpf_gPH+gW?c__{tweBw6P(~qSW0$! zyoBFbaBO|0Up<*mxe5zTaBYIS`?#)df*ZHAT0N=Xc!Rar1UG8qpgK68FCaL<6)Y=- zCb;8ctKOUtncxgSaDd=IaDd=Ia3DC5P#^;Y=Mp0$%vAYDf`Z%YL*D|=OSgXf-JM@$nKtIF%-=p9JcWiJI|9%sk;9T7VC%BV>ONmWzf{PC>?f;|%C%AFJbskS}f{P6< zEjGakE;hKt*aRoI$ly|A6P)1Uf=iA~aDs~pEU`yY6Xn=Fhba?zCHJ3r=v`f;;6t@|8=V%Ad6q4GQk04{fNt zw!LK@(?!4R}xK;OluO9EM@po^4_-ujUpDi#oxc?r*t{um!<2-3R!EOE|ot4X$ rl;iZL#-?3LK$DFE7m?2~7r;W_PsV5g`oEKq00000NkvXXu0mjf|LS%b delta 378 zcmV-=0fqjH2+{?RBR2w>NklEEuBW-|)}p&#~G z8L=*)%yJ1pa3DB9a3DB9aFgHx7Liy(liC4Qe{^}{*LOb%E_$dFA`_nAMy();!HG_A zg4?{}icWBX`|&xYZ;J)Tt*x8CMFq#E0sZv5^w)&o1SdGboxYu%uq_ju;Nk{TaJY1Z zhYQK8oZti(Ih2WmD>lIiuF0y6;93u6(g2H1a3i)|sW&tuIKdSJhv1^OUa9{!HqgN zs1DBe3kXhd1=~uY3GVpVst+ebCO8lrljH#skysc5!MOyJ-~msQ&;b~e>;VdqSQr-G YUTl{?;K^0$pa1{>07*qoM6N<$g8SvJ{{R30 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_38.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_38.png index bf4b5892090c8b3d61090ed6681905d46b72c66e..d7795543e1a00c8a6093ed27513d47c3b373b93c 100644 GIT binary patch delta 1137 zcmV-%1djX62aOAmBQ6D0NkllXPACC%B}ApFMt+2^Kx^DoxrGzrWyatOUV*zf7hCS2;St z4G!+^vZ)?ie00gE^1#ACT26|TO%+oN4~$L$uCXDJ&8_w%Aj=ir`>+da7Qd*UgF2$7R+(jIQoA*DTB zvGbUz!9`#Ax$}R!b(zp@e$GiJz>ybEc1E4K;rQmZK*zm^hnEj;;Uj~4)1zJgdrima z1lKIM?5+Ii;O^|@?d6&W7k$CtX|N|k+p&dydf_SJ|Jln4E@b>pljTWpcivNQg8S;S z_;2qqJ-EB?DY(YLotkK$VtYC%1t&Pc1^j=(HTnKW!R3EmS$guM%9Y8~`SWlQ!FAlb z2`*`i^v%uliNRg@{}uLb*+(~mD;!*xWwGM}sM)tgrtRIz1h@M;CZC+kbq#LE7r~ys zE%M~Sb?f$ttum5W6U{wh$dVxG0@9CJ? z<8|F2?Orz3*TJeB+ld9=WxQ@1!Hnf|VxF}MZs(!R-Pd;;FKeCbS{FOk|A~3lBDh_X z_~&aQCSld_ve!xG#whAF71u**aG9}2ZuuvT7dbIAHeyeX8Y<7TwBUc98)^1t+$C!QK6RC*KNMonrfTL1aHuSM6EKlfm6x9#bE7SZ|5#>I&ce zJ5+jp^3?lO-Uy9&mNI{8g>>8F*u&M{!;O7-x#RiG$dz5_qDh6P_{V-cr}{#8%f%D7 z1 z9hJxD*2LJNFCAAKuS;;*d(;ja^))TFf5*z&+nl<37I|)yd03aRF3Mhvn|K%*@h!+Z zzk4z2LEVgRL!SK2%dZP=*VE%!`DfEQQv6-!;x_plU)M}lL!MS7ue=6Vz2@)`Q;AT00000NkvXXu0mjf Dc5F~T delta 641 zcmV-{0)G9C3(N z8|L`~9P>B?k$@bN;sP6ySTK={3X|9Z4wLEv3X?YlFMpUHq|ewt!5upIr}v*_fJG0y zOoR5u?=QHCCqZ!Uk4cx{GDj!4#=*@Vo9w}5KJyV=qu?TrQN`e@z1?UP+^N%uZ`;Zq z+?#DY4VKWdM^`qusDb$=xLr@?j^IYN^E6qr7F@I7c0ZYstB!&bT-dAij?;%v+c|Z* zA~?aNJ%4~Ff;+uXBRIjOeG?oV!nYZ;%A$$j1h?(r?FjDEX>5f7^Q(&{E(;V2Ze&Jt zS)lIOkl=z2VAO3*qx;GnT$ejdI>uHmxSg}Y=+9TXwQF|2)uM7QW#QodT{Nj2-0FU- z2bX>(?sAF{Ip{jgaGg#m&2Y)y$8-%Ydf{j0cYmugpv(L}JG}vpTs+ws^~o2GHY3GUD<(wmFt9fKQre1_TW^x2Kz5(ii1SnT)!>gmfO-DbBm z!R`Kz$(8qVRfF5{MX%zZ?q14ErvM#-yY*>-o8NAI>my2n6WsNS{?(2_W>4qX zR`$^$xQP9x8l+ABHe9Mj6Zi#!1Hpmd0F$Kx5tCd68j+3&lh^_dlj;HrlQ#tyldJ+x b7o+|HkDGp5azX)#00000NkvXXu0mjf1Y<<+ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_39.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_39.png index e9eb1928c9c2daa74b897584a73e2249a8cb10cc..c9e42dc6e1b7b9de3eaf5ebc94bfd03aba9b74b4 100644 GIT binary patch delta 917 zcmV;G18V%o1-A*1BQ6AfNkl3T&PH-)Q>v&}oo8aOGWVd;W=28mos^B_o1A;s53RizMuwCH9DPWLvXHgg1ad=S2@8UIKc@{aDo$@-~@-@1SdGb3GRpG_*Oby;kJi~C%Y`fY*k-`f)$?Y^2LG{IdR zT>82rI1n5lI1rJtBLl(N1(8f`f9Mz7^ZftMkvlthn@>F!Y5V+1+3?C8vhuZ4w|Qj! zIvj`OakeeE(Vehkhpc?fjwhL_^_%f}$>S^{xQZ*zj^IX?mwF{RA-IHbRvO%w9oXUh z{nxidiN~YEaY!9!Wx?$pylK>U*#n0V}k4O-1_b_T;BX%^2wlTg7q=Mb@?X|yWh$r zJoq&6xK&QEJ36@ZEB`Z4vAvZ8Gv*&&6#j34Bfjx{TW}-Wojx!-ywece<-z^3{fRdh r%Ktblk)RX;&MuMUAd#gO7exC5#n<9^!t!Y~00000NkvXXu0mjfY7Eqm delta 375 zcmdnad7O2EvL;iXr;B4q#jUq@0{NN@1Y9q^tG~R9)#FxT-19j{;#rKZvx!{e*VtUc zGWh^w?&O7xGE6M&lRq$uPA+1RsNcnVpz51bL80^Q)ESe%g%;%SudAAId7lEy@re&s zvHf~m-Q`!Xw)wW;>z99RWi^|!CGVWeEs2&CjPWVZyr{V2hN8%v2Lf{*u&7%c6eoC8ue(*^YO|H7pLgvQ6KysnfUMEt}EX`mTT8nmYmys>(1o?apicowcEU zZ9$WCHQ)8z6|L$!vYU!Ox)jt1+&TAFMP@b7*igTM$xWM2aq@x976w}bwTXY*)U=jQFveRYSRst>+kj~dwrMb<@dLoeLJFyThw-3 zJXm_aoQ1uK8H5iqHciZuV^*+`pBUgX`3R%T#8@t9*hn)RY<%z_tNwTMIp_5b{l6K2 Nz|+;wWt~$(698yNro#XL diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_4.png index f9531d33d8f532def2ebd0c48acf67acd887b5d6..63a26aaf54a5d43622a7290d98574bae56c7d68c 100644 GIT binary patch delta 792 zcmV+z1Lypv1-%H6BP|33NklR*Hjt9Y&-<*OI91EXHPIwRz95$xl1ZQJ9F2Nx< z1ZPt^Ho*zbu^~8{QgDK^DIJ^O5S-uyXHz;h!3oZ>Avj>0(yi7aLv0D=!O9a3i9t zbcykl|NlU6EZ@*c4-5z{GQQL^F@giZf#3j)xN8 z_sROTG53wZ-CgXr7G>vsomi6-Yh~_3g8SbEIkj=qf=if1x49n;?#;jd#dz~IK*!*A-_G2Fg8TN-c;}$I zpWRM97D;fR*iQX2T5x+eX6LzIVw>@FG9|d~bHA!>plY9O?DX`yN^q0sUOu?) zXVjhlzNFx~&fOXAlkpw76<=MMeuiuP;pNJUG2!f%{2H#)+*^Ksc)3$-6+`I|!?D+k zp8z|*^56ORlY;9y_sHPhSfJF{CI{DH?lG6od2^AHzG%AgxT^=(aqi=SOO8!&`Ewr? z+@wn=tooUWA1JOg_c6gGUW-z2{pLO*xWtRU?s|u=b8r>s-u_+6)GICT{2f$EY#ru) z?bL#*}RHpw|XFB{yGtM4W(deS>;JFdJuW$qEd zow$tm?)$BJc6+)`<{t2-$<6~8+?usA_t1AKS08L@a8>{NEOQSJ4yFp+ delta 346 zcmdnXv5a+svKCXWr;B4q#jUq@16MUW@Hkw&`F~j{bCc3!AE$GTbzyNT<@4-wud^r$P3B1*&X+nK|p4|xW%K| z$abctY{A=oujf>hh|GE5cH~>h-V^)3r+jHjjxLZ4ESb%IaB95YLC(Gd?k73hJ05J9 z(IhQF14{o`I zf1Ev?Regux#n4|}ANBUvD_9&7-*x$5!-J?}*T32uHZdP;e84c7kwtX!1V(GAovaWa pgM2L@!@&o`EbJ2lJ;gKLvdx|?DH>t^$(;cRJYD@<);T3K0RT?lkpKVy diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_40.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_40.png index bd1fc36851068614e843ec7b8178c71a397a6c28..854dd0f719079fe18a116b5272a9557a9c7ac898 100644 GIT binary patch delta 845 zcmV-T1G4)0g>e&k)K%vR1h@XtO>lx^ zX>jk3LvVrIB`3{3C@NteC1DYf?FM4`mrFm@$pSsKY|0n0fGa; zf#3kaf#3kaf#5)qv^kNIA(M^*5|L&af5;B*_4@zUEo+E8Ar9_~xfccZ?jWlUzGDp& zf4UHO+1&$8*_Yeq9v@uQBf=-&?~|XKGSHNLxn=J0!Tn^zDu4c; z+dehm^x&S}ms{o@8(j6KRiEVFy$7Efo4F4N?#ZVGQ#UZ-=C>wdcV6At#=HFi%XYnO>hC63cq#Abx?y+s{q<_kN=}Zx#mgr> zU^)Il{lS-l`rF+PSi*m5&iwUAV9tYA{^kcc`z}3r_f65_AZK0yf0OW>8!YM;2TSYU zITkbt-+Azh70BcCD`ba(E zyzU3#%9G5S^%mSg!L2-Kx(Bx^)ak)>d0&4`jqRu3clY0R3~u%Nm`=g{w4Q=X8kO#Z z^dz`lJ8{>^=E;aDxZ%NN&$`_SZud^yaT)yNcXkQxw{;VLT=1pj>X9&N`F4)*(}Mfo zdI>IZbbAwA^qcUA;O>t0f)iX=a9OimyIyZvaDT0j;2H(@TWEsobF2uiX>8F4;qHl} zPi`O(oZwO?Yy{WmSP@*K;4%+F!L3_rn|H3=^ItX?g+Pe%Pp+d^;+Hqf10 zyDDBj?Fw$?zZ0C`ZchrFdN1Xtvw<1=qsl{<1h;VK{x*>?J-APQuizR77r8<1?vSp* z?fiO<;F<=PIm%7HwQJ`WP^&(C*L%1E2i%Goxo+!gzw;3bm7jJkxTH(V6QA0(Vq319 zSP@*|;8sSrYi6$cffDhUyy}0;L2wJ-Fz@((-GhsI5Nww}oFcg7S*k7*097A#-t8|G z2`=d%TsgTi@g%eJvQ%(QgZuP=eEYjkIJvBxY!cky;Gi>+plFe;3X@+0B!3PM?z;Z} z!|($yVE_O18X3phRb>OO+!#+^>*;btzh3k{$~+Dt_x+gQq7Oj9)f)k#wnz2tepNhk zW^eTA!9_1imS_C&*7?HZL|x{7!f32_gF6uk`JVt4nM~HzS-8&geF7bc>oa+4*geswel7!DYT-Hh;Rs1Xpo;jkpl@1ns?zr5@8+?G|#x$BV$o%hjoVr)jYoZvcayYazQh|TCGxFdq|2nE3j zZg^~h6WnpZReCg>*aSB^xb$0V1eX?yS<2wxs>NoqWdBJb@^iTCWi1t4iRZcx8{MMr zdCWTLJbkEZ<&)!eYC>!iMz;>ZJ=yxT%vR-Gck%^`nlv@Cm6ekx)q(L4W@M|0@JZFtnpP00000NkvXX Hu0mjf;{zi1 delta 603 zcmV-h0;K)83b_Z6BP|1fNklWp(=CBHr>;f#2i42nu1rZ5>-~hpa-~hpakx)vL&H@~N&)@Lz{T~P}IkJlQDq?=q zvR1A?!6gsAj1|6maFNT~F}MzAJ;!bC1ediDvvxLjj+lbmJh<7jZX>~EZ^Vq#;5)C` zCAhO?6I}6ssbut#uGn(fN^|8@)R z+wusmQE+FW39ipr5nR*Qss~~A#L<--2m~j%sS`GW>oZma*C@D|gHUjB?_Y2W2lsc< zL~w!=T+#aw+Q=AD5#( zt|Yi7!By|oR}1dSQGca%A-D!BXyn$e6;GeCf{Xk)!3l17QsAxkQeK@6oUuJtdFYbh z0ypm2M8fXDU431_H4d(Fg^X^HuEAw~JV$U%gPVDj+x^zA%nzWh`tV)Xa0?8$h#9$V z%b)pWh=rA(b}hI`r{Mwc}+xB5V-cud~v-{l~3NxNysAvnRcpTL3>T+4}gSE!SA zDhRH9a8u5WetJ!U6Wr+F-i0SP!4VW(x9I-&Is_-UHNkb6(C=P@-~_iixQamA%(KP^IVf(v|Z!3j=qf)kwJ=DeMJ!fhf1Cpf_gj_NQnCa~ZH zC%7T!Na7OQn#nieXdyVkt(bgM?@@{1MoqqH=RtxK+_=d%`9lZ639ilLd*a_2KyV|2 zd*XSk;7AMZ$>*(t1Cj!le_X=A$NPU3<7O>e^fFG{HdEJA>)<|}gw+vT9rNn)b(v7v zuRChIZ?;3q4!?73cdUS{F}rTyjyuE1@dWoezfgCrgfq_*5!{{szr%L<_c0yE6Wr_i z!rUD}^lQCi0#*ih_OTtu>wf;18r+0fvm>aAE_=+X55*oET=s;_e?Bsr{5{4KT)|4r zJ|7c+-~@Nnyp=W9v&Ivg-~=Z)!3j=qf@^Rd*D1E>t8b#m6I{R~*%Vxt4`;HjzKI_1 z>~oh~Y_RRW&qR**ZEz_& zy=}4G5nX0*)$25Je@B)*-r2`gY?EV3Y+Hlta)gW631*M?_c5K{-j4~c>ijSB9IoQJ z&Bz^D^^UV+bjQ}%&TjCkqfm!myGOm=?C~l-pc@@r#LE5Ve~IQ7(f2%u;F<*2{r-c3 z6Wp5My5I0~^F2l)zRd45UiX8*A+~-;x6XU<&G(mC_dVR!*zUdyapxV%*5KA%X;O75 zQ^v-v`Wevna5Ao=On=+D`N)=a&0qFKy%7OK{ahw*oj}fbuufqo*lmFmJ z=Ubc$Zs;EkAc;7?$)1o;{(~y3gZp&+iskM2sal6$N@QQOp8lcS3z5JUlU)J|lL!JS b7ck!+v@X7!d2s8N00000NkvXXu0mjfh)~p; delta 379 zcmZ3>d6sp8vKG@6PZ!6Kid%2*M)Msq;Bh_puKw}{#(ANye^?m{?OzgN*QyZM#~$#k zfNSzeMumy(qLZ^&bT||&910XH1Y{-_icRe1n*5njzh1$@Z{D8Af09pSyA}u@RONlU zguDF#%k{bjR`ngznkzzAc#4a%T({dXW$(q+$wG4;ENcEOGVcM)ao>Zb-S6%ea`+V_ zH@!BxFu%{Sph;TxPS--QIS;mR=6wyQkB%;A5{`Met4a9Ijt619+a9o}?^ty3U#aau zPQQZIY#`AjJg5Ev%XGmz`(FdiY0{2y1_^=G-8&fj^|BI>Aw3^t3RrAT|77bsYEEEo zgsj_925z7p?wiV;-UZ2R`Va2{Wuy&jR(@aMQV@7}`Zj)`V;{BY|MX@*$hq$9hqpiM znK|@~cF2BT+q76`$6O%A%);I@c`oCW$=4W#l?7xt_*mE>II5CK>;EzDz`9e{8Gyjk L)z4*}Q$iB}W;LSL diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_43.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_43.png index 8b0b0763556f47c87dda63cc82d079d648ee5380..5f1833aa5a44003269d398033707edbfd09d7ace 100644 GIT binary patch delta 930 zcmV;T16};^2E_@GBQ^w#Nklp(*hv14#uBVTEXOAX0!3l1`W8Z!0D7boaLvRCv%bc9iZ*{8} z+>Ui8xMIQmK4~I2!3l2jV+*d|oDiJg+8@Jpx+EgF;lWLRr%Cq5p9CkkmlJVXaG4jE zS6w?5T=U?fxAs}VJ=wcg`kw_iB)ET0FRNBP--_Q8+=0RE`Xu?(lO|8k2JZf!JKc6e zaElJUUw!s!VsI<>gn~OPxOcBb-T6Dg2~Kbu_HLg}&dI@@bRIx(8}@ELC!OHp_iln~ zI#|&+5jrurlgEP?dit2X|ffei%664qxY2wa6k?LiEb+ zGP!mvXXHBnWR8W+y$-=et@P9O;JcSIdcq6tpTSu9`zuyJ^hTw6XuE>jwTBhluffC+V$72K}ptG=8o!^s$zBhON<*y2SEaP;$4U(S`sV}eVJuG0Wl3@&OpSHB#cuxuP9NWn`5^qqp%y(Ve zZPypD%w-9ad;~I)j|P))0$mP*1Hl1;1Hl1;1Hl1;1CxLP7Js;MH|l!+lXZJ5ugR0O zx|%)}SDK3>g3DNB!PTD|!4(=V!3j=q4;Cvcx{Tm<*lVwRLK0l?aLru!|Nd5R_2xxz zNy9ZGx;w!|J-C7sT$^X}x6zFR7yaN0?%uixE_t}3f?IXGAh>&LBDi9~JvkW@b&M!D z!EG1Zo9+H}Y=5va0Ktu~hu}5{?o()jt2ZBlD>7Vnw>`2)6P(}#H(}eOFC7I}Z#D$C zL2#MFx%#bc6@!a->;zXVxZfvD1SdGb1#eq${boXNf@^;a*Xfdo;5H9#_jj6PfBZ>s zg8Mj#y9Jkdae3CYQ^7S4ZuPT$R&aOr?v?Jd;5G@a(|^mVS^saw?+Na};G#ZBzUxVo zyJrKV?{lZG-4NWQgYQqDz1lIjnR`OP9TwcvYf&SACpf_gE@1EWb~twq?xgbof(zKY z{Tw>Mt>3!|uIXZ}{t}@RgFERwfZ$#pe|34;R4us5dpE%?TCAvpWWm)RWWh~-8JKxS zs$y`fzaQ$nOK5^i91)<0JKs$H!01;mYyBzezk2CxfjJMjwzD7P^ebqxw%nmEZvzxC%WHqYqHX~a+^qgI z|F!~uX)GswUw(Ydn9xv*PwE_&C}8@3wXR)1YdF@AN#d zi=Fm><+;qd0$Z2~r{{T0xxa2P(2^a8z6#HQSeEBk;9vbv`zw}l>ED_d z|AVp;F~3%yYq6i{6=g`@*XCZ|>XfKV>(`lRxj2 z_N%_xYqh_ZpRqjG_E(@Z;5*m$=h9s2Ea6}09_{*BdPFK zxbv=DqVV%0QwAnR%ZHl3eD?Ip z_S`1!SsE|Tx7w)gIOYC`b6sZoGW(9wOWXHq&tImtV*=+)lM|PlqH8~RNwJ4(*5|k! zXAz8cE0|l(yR`RssO5pF?rYao8!h+gTQz&SdhO*0hW#g_KVEtIrgx2gdml{tG&#}#SM08i2MmdKI;Vst00VZw4*&oF delta 337 zcmZ3_IfHeAvL;i!r;B4q#jUq@E^;0=;Bjz#zrV!D(IZDj@nrdh_b1%eUkI|&Q#ez= zI{5*k!sHT0@yRDuKOH11Zm}Pz1T1Je{ZnokNVc(<8>mDWC>x%w zx&NGw#lfZV_ukmQo>e&yuC{4*?X(9h&y8aq%mJ$e8u8R4?$lLDRv?S@9Ml@&n7I#j z{e3tQqz!7zIW-HNr4LxrHRt*kaPS?B^hy`LBYCj&*E4^Jl|Y?}ldD-|xmehnm_hj9 x&WVA3lk-@lCik##fjlnH2o!95z;Mvf(!5N`{KaFx??wzj;OXk;vd$@?2>|suhll_G diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_45.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_45.png index 4c81435014188afc3fe211f0bd940752942711ba..21b3b0e1d86b133ecf17a4cc43b62664c44f6b37 100644 GIT binary patch delta 825 zcmV-91IGN01>^{jBP;|fNkldY!8Anle__f0<#N~ zKmr(l7#rMmefBkC2ZwK8^)Wbg%u~kNl@{5Fov~xNN!z#LICNRw)8z~9;F<3&Czf67 zSiQU!xNm+>hb#Hh{ZhTW)60zuZg-@o@9XdUd}VYi!%1A;lb;_KT-BBF z$>6I#$kkW6mAA@?%X_*%OD2sv&h&K%?)3J5t-8y2dex{t(VnZd#CGn+{Sbm%z_h~-~=bQNeB9`-y=A|y*{|A*wTVajIKj)r;lUn;C4QFAh_)H ztDfF}{pWDiu?cR*)$Pvy9QkP1ryIKanYzSVk@UAEI$hoFj<2$9OAoH{Oque*clzsp zJKdI-^w!4cE8Nrj__qg_^5#ax_EOE0 zNTysRUme`)uaw(nu?bFaO@o^do8Sb0*CMznu?eo>fJ_$mbaq%LpevbT+~(=%d85AmJ|u5x|f6x@juVC*avW$Kgi zRqtV)THm(?cjA~t1_y5?IFrl)Ad~0;4Uw}N7hs!zmU-caf6Wd100000NkvXXu0mjf DIAX2f delta 292 zcmaFD(Z@PLS&J#u)5S5Q;?~<+j$ADcJgx`#{a;%8Fzn(qwI}AG52}PtHcQSZWJqlb zXPDg0=s#J4g>SMJi}J*D(|YzM=7Sqwr1qKmU$+&Q^MI?|p`b~4&I6X|l?(3ff5p|8 z+q8RjEJVotTch1sU5kU9>k85ia{2)UWoEMfGF$(EMSaJiNLF>Aj9)>D?2GG`tm->f zJh1w=Hv8FU7N{_b`R_=e!S@SVH-oj#dGMlkLH%=UA)sC17L$Qy0JZncc@SpL0WujV z+Wuf0|2aD#vzDcuS#-_=nH50B1A#frTl*idq|38BpB%~9#PpeK@?A!WiS@FQK%eNT X3veEclgRp7#Q+4Ju6{1-oD!Ms1sUci}iFg4aGFFb;4ya;#A!6$PuF}O)b zdcieage%W!^=Abqxbm@7FQBZ)nHJo%b6LUt{Jo9L9T%}^P7UtWJPGcw;IhWD`*{ma zaHE3D7)$haP73bbTnTP?a9QUCUCuuy1ozuK32ta`*(c#$7JrK11eY3I)zvP+?U^UR z4GQjEXo8!wCIr`f0p2;HO}#QHIKj1Agm>RM3U1DN5M039yj{0-eXBn}5~Q1HlaoF7s8rV{o4w^*han;D!a);q6m(a6A8>-~{*R{Acp>eG*)! z7l?|#?IO5>*xp@8I6b&-M`Xbr65QP#QW0Flr@aLyxK_cfF2b(QIWo9!J{1w%gKgYd zJe7Y$sAF)g7qsB!Tr}wz-0r{HwKKSHUpIma3axWzd&$;+kW97^5>_1 zuv2h?3ym)NBTLgl6P(~$g}1t`DFi3DlK6H!{zQ?6f|0EXkys3W`1atg>)yZWaYS#U z)gnk9=ahLF8{FNn_N$&>_i=Wbm$L1453XWoKizhh7nW}0>^3i@p;ztTo&SIL zE7_CnezKj);IhZrabCV6xadglK2FrQpKPZhy6kawo0sypvaL@rul${zInL}Io;}WP z^YZF31-B`h%7xs2@kL?UkxFoaOF0T>p0{*958pj6?;cBV!_JMW&ojG@v(vo%_BetQ zoZti}IKj;f?ytuXTySjBztpWbzv?*74)gNlcYj|S+^$Q?cS5VankG2Gjg0Nx1V-Lg zB)FdQk~z*1!ByVR_{q;jFXXH{9wx^TM4G?ZA=w6(Pob`b9)nRAV2Qr<*1|N&h1uyJ}!HlncEXw!7Fm* z@7GqYhE{)SAaa};+naEc`^ez3KD?Us$?vKiUop<8?M?Z##)#lnuR3+RgQUwXMwR2- zy*SD}tDo1Dad!Kz1z+Y7GyxsIu%g4cZT2|3f3e9IaaSp;C%pPwdb%u>?0wMnYrFhf l01hUTKm!+%elZsy%s<}Y&{9R}9&`Wz002ovPDHLkV1g;}DU|>K delta 536 zcmV+z0_XkF3W5iaBP|0-NklfrmgJl>)3+9gqYES( z*w-6a=4AggDY#% zF}O~z^nxoogd^KD`nQ4;T>4|l9-vjX(=E7e$FhQZ|GtlvJ1$~qb`9>+ItgyG;8s1B z+1o8R!L41t$bFm7~GXt{YvX0xMsmsc>9zc+|1t-oZxO9|8(Bo zJHb_Yg2?!87r`aOc61_P_u#6%A`5Pl;Lh%ljNl?Z?JYRLl?rZj2&-;$WN=SD6cOBw z`#3W^nO`DQF}TtLEx0}>O)3UA`&+wa2KV&25nNDk+1oz)*k&#USN;Dl5S-wqpE!v8 z`>r4C6rA8fql^B?Qn%0qC%97Kjow!mf)iXyd^2vpBa^TK83KUdk$)SL_5?(eZ~{IT am;C`MFJpwJJMMM>0000@F7v{?C3QlmmVisW5qW*SVf)m`RkCN5jL8NnNA9v1I)7piT+v0c<9|9} zLU7UJk}(g0D-c|jII0D=dm9<^AUMGZPH=(~oZtjk=)!r&b=<_@c7H2-_qtJV0gGO6 zf~$J-!7(j1!3nO~-6ds$i@Kj~)xYcM!Cf7fjCrVfOIMrVG8Wg=;4;Rg^8PZS8+nEk z+_QtLaQQIe8ZP73plQKnj7zn7$bXD(?9IzpqmB4{Kjrb96}Q@D&O_$>jJW(v3^gLvq%ytqCZBn0`QaajzJbwvLBZpU zQzYk2^!J%;!6G*KC8PReF&4hb`xzDM?|h&4pztmK!H-2Lv5!70DegFNp)4k2`=$rC zj$W%=$*R6XY~xy+<*$yp733z*p1bpO%;w_)cRn4h`4n@Ivu|-4W4P|u9KC~_dau?# zd8e<`BpmbRt(wI_!F@I9#+-fyP1_94})~_9kkuMqiM5v zQ+CDax4Vu!5{h{u#N}5YvTv)%oCg{`K#h-&wF`>=*S9#>srM$>9_Tc)J$%KAJGOl+ sox?g=kwq8D`$|k4d=mo<#T{GZ_u71uPMv&fBLfh4y85}Sb4q9e0JRID82|tP diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_48.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_48.png index 1fde6e57e88ec2ca70976d0ff13b785c1e2a9153..7299f0e2b0facaf46705bb02b52b85d2a6398440 100644 GIT binary patch delta 1064 zcmV+@1lRk@2g?eOBQ6CJNklRdlSn#&M?lTiaoe-*vx>)sCtZgXUr@pXuL*S1c5!|ML#dz~KI&VjF<$er6cF}Mk5 zJJ+cLm@)W*6WlSuMGczZ-VxlC>-p>C*nWG=)!*s3Q|>-}o)p}_wp(xy2Qcz+cLbL` zsk?VF!M!B7-2)XJT-Brs?(;SauK0Q@`iNNhT7P@)$k#L>f4EQED!2wmw}{|6T$E?* zXo3@5X>eUuzy9|cB3E~(#wNJo!F@V~>o`WI2bVPlM+Y}0w(6ZyaDqE7xVxui)z@x2 z7j(J?cXzu4H#oR1JLSq4ofur^_6sigwfwzkA~?YbZefw*o5$}I-0C(wJ+15(+|!%a z1t+-e;}acRf7M4L+1oC-#=&Jw>eJW%?TylfSs z!BxD=R|dCols{p+UlUx%$-8rFSN7>t*4IpYvp6HT!NKkL{*j1lpy~yK?BF`RNp}8z z8^Jw%>^l>6dT`y&N(9$rH7+{1yA#xLbuRJ^M{tJ+f4B1}x8p7a!S(&pUDt5MgS8sm z-4(hiNBeK?RH;0=32ykQ<+M9Zy1eO3Jh}<4;X8cy)1~ggb^jXj#jYZ^}2M+65i zBsdTplXL?VkG{|H(_V$5M1QHe|lE&bX)`%xYI^Y^3LEoU$^a!G-7+XtN8paGq{R* zxH`u6rr@fh%et?zdvICvAh_gfxNgy9-MQawpDDYa_4HM)tl%! zt3SF`oq|sY?zlTmP7W^e%TY5 z>kHWCG6a!mGm{wu5&}SQkx(E42o96*0v3^s3X`=0E`PX~g}%mqKyZsA+ZkVms8_9P z)dN=cgYVTnw3P#YdPA;U&x*lSxZ1h84&aW#7o6bQ1Q#`Ef_q1BRqp4n&awUVnzO%? zai?5;`CKWu-_~1j4+k*vbyozpd!w%2$prV3;8qV*ba1COs^C7av)~TjZ$+OGPcG|U z?;W{J6@P;Jw620naCVCbF2havjvY;Kf;$>qmf5fWmLYO>w`y#HD<0gZOSp_<)IGRe zW6(OdDzTm3DFr9EcEOEamYu$LTREYVHMr6B5?tZnvh0*IW7ILYo$D{S&CBw0(nN5A z6Wqik$DP;D6x{4OJiV;U7TnW^*99lI<>M0_+<&P*jqF}`!6goE$3}g+{C6MRo*7%g zxrYneXe%z+c8yI$a3}w`{ABqB*C4nPNBNV%&79>stoLhz%ee7I9_`wFIkoF!Chknm z2(EB&D?WcD;vVSqgu(9MG94r{f4+_29=`U-hUy+%wyP4sC7F$j4sLV=az$nX1|M?zFSq4X)ZZ6A3Oscz56Pt-)3P z3NXPPh%f4Wy6q^lAJfob9}yh9kl;XYAd}w$9h3M14v~xsleGdbk_9u97XuU>KyZNI cKybjQZyfukGtXuYh5!Hn07*qoM6N<$g33=o+5i9m diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_49.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_49.png index 793a4d57c0e0b03721b38465644bb35088a35852..b9158cf50630620a01181220143c40b7ea97f77b 100644 GIT binary patch delta 739 zcmX@Z`j35rvOe=sPZ!6Kid%2*1{N(g5O59rw*Tcxrbht}9M{&JwG90?Q#1O|3n^8< zIgjN7o_!FRxWl*p^`|Ft`}0p0+piHjxK#H>i|cHg@`Idy1svxV?X}N8$f;L!u`G7S z{AU^#2amE&-&DY=ZgDVo&gKU!;ydTs{QiD!BT((c@a^xq!wZ_EOG|hE`hPb`c+P{Q z^?9=51-EKg+aCzT9Dkd#J@@HVOAfz+jp5t%x-Bx-H8~e>=p|a;tWS)tERO+N^Xt{N zV#VcWf(vZww%#h73N#|Fvh?=G8T)0u3z~%QTo7kHSXdqXW54-9&c4Khs%Ih#fTlHh z|GBlc>b9B%(10heRSG%RJq_D*`7zK*>+%+IM*}s^dBBoxZCMqVOwxLN_1|;-M zZ{HUGuTBLD77h~y!hP5dA}afQLeTHX5FzgXnw=jYFV{^es*)9fOpe^qz#9)_MT z{#6lpFw|aA``GTPrtSMLiGf6#ZX4XYdi>Tut!SI`FCV+Ih5tRZIcd-C{)?(Ru6~|l z7Z+17pReNSeR0UG+#NBH~fe~M0EgRWO` zhg8N#2Oe}~+5Snme*T{I{&8Y4DFx~3A7A=c#ckF2o6C66m9_kPO8Fk8^-&#{j|;~% ze_ZuXChU6UzS2EA9waCoY<%EQ&;Z52*eIBI!b1G?9|jlB8%=JmmhKEd;OXk;vd$@? F2>^{*Z$bb7 delta 392 zcmeyzeui~|vMJMKPZ!6Kid%2*c=s_G3b;7l|9`1~LEzQ1%ja~IRLm53#a5Z?nXQp7 znE6zh;b7wfFrGY*S$y($M(fGf8TBUbXV#c}j*-2-@xhOa?YrgV&!)#Ob1leazHPAO zY`XZI2Q2Lmc;5aj=JqR?>O9+O$N6&_76-4gUN_p&Bs}MV*}TYtrqwa(@wW42Wc>mx zf~Mq%0^W2n8IUui_V13}yA7zgN&DwK6}^M5>n3^D`xi77@1DxH?E#Cr#X-(#C&32yb?>Ye-f>vqY(t^Qn- z8eG@T^|8TqY^+a$tJaLKWCPr~Yjqjydq z5S-w)F4zc8aDr=me8CA$aEl)Q|3wqQ2~KcL&qHv66P)0-2bX+izTgfGZsM6HD}qb^ zIgH>A3vTkMU3Y_j`|0*clU#6z1lPS+PYdpyqrN#bB)F6Td*#%w>gSde+{)VtPH-T>8Z6xJ;f?yABHOw@FiZ z<>kr2bzKNHbz%#yIJ$~UUnd5aa;ftv-;*X^2HjuJIXt+E=W)W=2yXG9-@WfA>|9nZ zHVN+F;9x4jfss*^e;yp%b-nhF*T#!EV|b-Swqr07Cvw6#-F=)p+kDk)jGJo{f~y>e z#3M(-7_E4mox#PeOBDh0> z`|Z9aO{~u6k?=K*-~=bQ(8VLcg-pu7?&qn&C5_A7g$uzAi7jzY-mx^FHZCh3YuDS+ z@xiT}Xp@5LJR{->!TBC8Ft(K7I!{GP8<)y${_dG3Wv?+Us?~e)JExN+y#9Co-}G^* zK6)pdz#Jc3f9FO_3NC3iZ`V1k-8=S{Ie+pI?(X~eX~9*6x+A#m`Spk++$V!oxdA8s z4zDAg9lyKl9M>a%EzrF&o*G=m+r#eQcHN)gn%@FVI)$lowQ*8#zW8pQm^;r>NDeM_ zTy}jGuw(INOmH20alvH-mvCQ#`?~)Dc-KX2QiDqvf0ydT62S?sWaFL^T*}c>aDo$@ z;IdaLQy-&xRc*quefoVqKDb?%%$u+?Ipr*nlzDQ*DrL%tVZmj-_3Qq9-_G&8Iww@} z(QWs}NX1RdBTq$SD&I)`SYAzfh7J-gyYVoOkE*NdpnXkHi_Sr zRnNJyDd)9w;Un$OR;9fEPaB(w!QGj2rOzp4)p5ers}dF$CSQgbK8RZ_I-Dow0EBE*9R9lX{HAkH6gbKm$k1S6I}Gs z>dN!HdtB$>qW`Yx8eG-E^|8TK?5t0M%i5_~2b)jMn3D*u*`P%Qm%URnehvQQIR&>o zf4B~R`2Mxss@Io!h8LXRS`FC$wq3mnRuSCUv%TO1R~Fn|%gtHa6P)1M2KOp7!3l0f zaGhhTo`l&8M^`Q&5S-v{U9b_H-~?B=eZdJ%a6#MuchN*}f)iZP>kypa1Sh!LgX?@{ zzTlPyH}Oi7h~T<^9Y%1=f}4D4*SEpFe|mhUNiMi0!BrpCy9IaUtZxnt39ie4ow>9t z`?YlnF7k1L6Wr-Vfu~+edF63}6I@tquND%v2Y2;(1vfaj%0WAOHk%q;=GSusH#E3A z2W|VMU724%^|8R<;Ib#&yUDdNxXfED_#AFwaPHc5&sat-tO%}gaFNkvt;}_wVmKAI z$#ZGfqTv3TG?{l^o*Z1&jbOV@Y{4Z*mvQUsj=^=g)%ldqNju*L-T$7mJh+V4v0-ck z7d+_SKKBz2E|H5(f?FIMOeHuF90(2&90(2&90(2s2M7)X2M7)X2Z95UQA(4I0zQ*K d1r!%>)-OFXi(D-S^3wnS002ovPDHLkV1jqh7X<(S diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_50.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_50.png index ed9c88a4585c68a2bba3b1dbd0c477967f760940..db6a46777220d79738187d4af16ee7fc8cf911d4 100644 GIT binary patch delta 1070 zcmV+}1kwAi2iFRaBP|6UNkl!5S0Jj)kM5LfIZ z|LY4#bD08>em9X;6o268;I8Z6pX~7~w(-eN=WWZJFTn*aM8U1k$;99~tO>yh?$z7~ zPH=*|_RP_V!9|@~3+^lS+U2`(rUtk28k2(iZux2U7eZ%5E6H%(3q z?zim`T+-r;2=1rT*a^X%cGDz#9SAOAqVF8hJQfh#vBBMam)`ZUrn_Tx4(`NHn%vzU z!6h!d-N98Z%8HM5bqy|a4G1ndxW8|jOb+htxPtr8;GQm`or~_IBi!Uu$~QNC1ebUn zb82wAZ~Q#jwtq>FMg*61bc?uoQn^#RJQk?@G``@PAKiA}Jc&GQ&007s!Bsw7UO6Qe z+yTL5zspw#_v9#l(!T%5;CA0Ic)QaoLW@{9Z*M&9_;-R6+?Me>AK`Zd_vAGv?Eg*? z3hv>li6pq+wR|^a{iAG?#=71jGH}P^n$NE zq6lu_x%|rO>xqZ$EQ!`fD8WLez%Nk=hN1i;KbHuJ37sa z;J)HcZ3HK{jCFrDD!89EcJ-WJZ1vmHJvPA!PH=*&*|CBXT=#W0Cb&Br`F0|nPH^;{ z&}koA%6c4A@$9d~oAajx7xl0=d%WqvWzLJ>9&F&w;37Xxls(?$;4r8N)t_^kuH}Qr`MsU%;hv0uUEaa*k{d9*#kN2s;WxZh@ z5nSdwT=gl*gvS__!F79+7F@&No?LWCkN3&JMVuZU7hKfywCKgV5?tj%?;KpmyNyQ$ zS8OJ(@0s%=IKc@{a5H!OgmAh&u@~07*qoM6N<$g4=yBXaE2J delta 621 zcmV-z0+RjL3aU)CV#`Z~Y1qZoh8@msv-~^X$b=$S-d|E-PTr{~cxKH~dxS+|mBe-{`u@!>5?V?Ha zJP=&KK)0-DZVL$R+TdD0rB^-H)Vi(A!QJ?zN$dUyE^y+l4({ZnJn>jp*5D%NfZ&3I z`+d=*a&V*D72KBw*E@+;PJgb*?HO;HF0KwJ9%??=9E})7X%mmDStY+o>l&)WB--Gt-fF| zdeBaUwqxRqUU*vZI>8BU$@Vj^@GFArdCv;RKU0K)>pXS5J-FWY6n|Xd;7(1ncL#cO zQVLFRf?M!Mv*6C0PR>rc%E9gUN3azpvfz>o)D6L%`fGtIp$SfKX@ZMd9R*h;xNOfR-Vof1 z?N%f>KyV;95F8*l5R`X$JZoLTC00000NkvXX Hu0mjf;d&@? diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_51.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_51.png index b64ca0ed797fc46c67198a3489111a17806731a2..d649ba14c209c48d789fc25445b39cc6b6cd387b 100644 GIT binary patch delta 895 zcmV-_1AzS21(yksBP;}7NklGv&~>< z{QzN>O#qW20!)7{dLyo9KONT%!L<#p>Q3DCNkVXfYZ;#41lJHaN~okvQvLr2EhqVaDnR~IKc@{aDo$D&)~j|EjYnBX%e{nf)m{6 z;HoXZ-~=}!xa`XT{~cR!f-4(bm)p9oj4e39jS8;%E3<##1UK>(E^24KI;P+RH})9r z^bUPzEWrtGL~t1=PXs5p*9RB1Q{Np!aDo$D;#*$?*FLz@JGS5iC%DAmrhYYq-~=Z) z1SdGb2~Kb=zQGH@wci;#ePtek8yDQvS8>6SzB5)oCK8?I?TiB@=RMfgeT*qJj(_zZ`61l=3#7bSN_h4 z;CB9g<~xW}5u6yW!#u1GvF!-%)MNf0w_|;?w)4qljU2DTJgkbbJ=yu6PFU#1Z!}(q zP&>@SD}sx9?5=fxuR7M#;3jXIHo<*b(X402>{lJZ2`*(NcLg^+0>KGRaDo$Dwcx(3 zpx^{2xWJXG6x^u^sBl?e+T+SU=?N|;IM?B7Y@6}d;qKmXFe$j~+q<6L`B8nm%JZ-) z#+Dge#{Gj8-esI#)~x#*UwtoSL~y$wdos8RqIbrMc?}kCcNTYbb4I%d05jXc-PyQtTSa5=OW{)Czm;T8+Dq8F~PwBM3L?pk*o-lsR9;}YZ4cZ`2`9K VA3Q$H4Icmi002ovPDHLkV1h1Dv5Eiy delta 400 zcmbQvd5v{~vKG@^PZ!6Kid%2*MDsN{2)H_a+n*WB7^q-;w|1r1pV9+gCbqXdX3i=8 z!7(|2#ejo_y@?rwCog0apDfHIG5G?c<-{EZFMAgzY2@` zj)@OB{R)(uye(2^*GTDD9L%lkpZZ(b;-D*gxaE~5;h36&*tTCe(k$vgsXP1!fr^`i z=R8Pb`<|V9kn^1H`cjf?E>#rzRx97oA@oD+Y?+k<}n{|CWQ9N9#C-#jk|2*Di{TF0UmoZzmA zt>WJaPHCpdq>2~Kc=6P(}#Cpf_g z?)KnLpNrr^f=j)JZ{ltGjc2#2yM6>W6kN)^hGP3}E{XeHaKZN)c5U;f*t&wNnv2(P zZ|YEcUeEQs+{&-v!q&q+37x+jhnk+yR46yo@{fj3T&;gWK|&No;~! zKltQ#1-)@2xTAvG_7=R@1h@8u{Kn6`rskS_b`#u!#pnZO2O+^VEym7!^ENGj+Yds= z2RHF1$Hd*|)7zLhm&7yv6~TS7f!*J{+00$0X00000NkvXXu0mjflh~M8 delta 357 zcmV-r0h<1|2(Sf^BP#-TNkl$rvVO=`~wOCKyZ|{ z$(N!CPH>J{a9@VcSq{Mo&T$LQ@Hu9|VfX|mIK$_d1y?w@inj+4oB_1J2u^h0wrOz@ z9KkF9j6?10Cb%u5oAISYViVjl(arSc<+t1Rn2z9D@wb%qFzCpt* zGLxVIEs=~0lh*+blZpW$lcxa=ll%iDlidLy7Xg2s(ehpLj2=;7)$V5!{U6y2dBC zlgk&}yx>~B4#EAua|v$#XSmMM3GT~!2(DjnQ6CcoC%Cr3jhm!swyuJ^5ZuH&O;!Xq zc4km;Gk=4dd~4U;;J!V6LUf%D4uU%nT=r4DTX1L2`p$Agg6lFUM{ezkUbjxct$du| z1b28+;Hmdgo_U<$1h*`)1vfaj%z-(2Hk%q;~H4bj&Kt;{Wbq_A%XYw*Hlk5;% z>)`&{X(E4ld2(=BKLp$TGKpVa4vH?~J5e2j>+)0Q-DZ$|AFk=3ubf=j@gNiVwzR`| zwAzo~14Rz<^x&e_W7>hY?Y{d4lQ9EN0|aLXk)TI^c+AFs9s8?Z55Wa)+*O00y}T7; z(S18qugCQ5F1Uh$uRfA@7>~$h3r=wDgIoFd)n|6WEgJ0ImN(_I%9Z7;TGu!U)M!&f)iZgdORUGpWOu~IKc^S$ASN~ z4uTVZoZu3dKY5li;(!xztxs@C7aqG^;GP`Zs=Gd}Y@2D@eQa>6FS1s~KJ{pPC$?{| zuk#&7f=fKoRlKF?I`%uqZak{uH&qKW7>Bi-vdmzq_Asnch5EvXUWO?*~s9! zo#iInV_306cKBLPxBYC)FGh4d%T0K@)a5|bJ-Ccz2~Kcf>nu3Ig$K9#PjG@0oZwO~ zeF#o)f)m`n!A-dq*Zm+eF}TXh0)pG@t3A8VQcjy#avg5tvs=}Hq+)&DX_6e=%9~$f zJ1(y(xT|mPD#j+`%s64Yrve delta 604 zcmV-i0;B!T3atl_BP;`SNkly z1;+O7`HnueV{k{}6P)0t3~ohmRUdrS&gRMyQ*et1clWB>k>IL7_=TOzpR z*k(_{>V=~-7Z4<$-*>#0R&XcJaRk>RxYYOrck=ZG*DtuJ_aV6dlS^>@&*74z6Wq>r z2re(Us?!9)2`)Ccc8e5Y+bXyV!F9aSWJGXnR|W;wGk>_wmv;Rc+}`6mM3=O45Zr;_ zX7AP0f;)56ca&=qT*{yvxwNZ#+meDC`8dG|?(m|(Q?I2w^Ekl?Zdh!43kjfNA%<7kRRsI0gcX5q_tDbP*CfAC=Ro-I3(QU!t+_meT zu^hRu;#=qz9Nfr(s#=*#4{pY7@@9TbvO;Xp!F`%Em3Ln59NerM!KQyr;?B!O(N+8= zDlxc}Tb-w^Ap1RB=%9~WTv>4^Q~7Uc!gxf@<5xqKgWNs1s_p2u>4MJXk9<{{hSKW3t-g4LF&*UeD`?$32dJ&KV5%aAUqKU4 zX2tzP?W7N^+aIu)TUdMqs_;G736#0LgXbcU!#!Id!uI2RkrKN4WNT(JlLhj75B4B z@Xm_|YInYUdTVrdnevW_?O~eVXH*{933Q^~+pWqwR?Iakv=xxy-~(Y6b{KAAp2XBv ze{bEJ&;QOxypf*#>S^t+Kg!L&OE#3}_RKvUxixRD_1$&XO%i!_9sjfHf!4Hg?}Fgt z^HLvD!pe{MP|MF^v`-(Q+CH%?OiRx z=691no&Gj^o9sG{yjQP%t-NP#;$>C0I4G*CpSYX5eqHthc~B_k9`pqY9_6cf6smW5 z`@_C&6&CX!&f9P5R+nj4Z+?3tK{Wo4-#kObuDgxXUCvtXsqh{C>zCI?eB=~g?>Fb}s^d#uoojjB{Q8!q`q=_ue$}%D>}=)_ zXVhK4%cNdcU$$Cm^3>D9F`w5Myv=TWvir0!-(FU6n;)X>L791f9{oP`AZ$*_%Q|=a zhd(thr&}K6<;**DVE(5Ki%tTgo#&6?=GnlsA|12ovi)({;_VF&fYCDH!6bW|`QH{q z9*mWUIhwvKbGo$ZzK^B4=Z$@v*lM4@xh5O)b>_8o#=EbxU$5VI*ssDT?rZGh`Tu^e z%DwnAt@LZLX1LwSAJ==sN_A6@zS;IWp!&G-1MO|U&2N7?p{}p~x5NF?%#-WfH-+bY z@5|l4xBcb8Qr-GrH}|}fms@%7+tuH3H`8Cfo2)Ro&Q|SZPTW!b+adYC`)b$!d2*E- omI~l0Vd8(b$^RLR#3#Jx*G)J-Q)K#TE(Rd*boFyt=akR{0K)L7E&u=k delta 380 zcmaFOv4?envL;irr;B4q#jUq@9Qh6z@VFkl^Z!x->x!V`_VXr2n6LaJ!ZPJ6<0+l( z3=`{RCp)l+Og_yhH!)vgVmIexE+#P+hk}L&6aB^N6)Xf~IQU?gg`I;Bf}0*cJR5yJ z{^jfU+r$rYuKRm{%dbGW+1hkZlWa~>RH50`9uzyegq+4rk)ZO1|JJ3uoYKLF{Jt>^M9X%fEE zeO+Mg1D5R%rL6s2fd(9^?FJgheQ);zfjPlIR`DrLAn9D-$voZYL=(_VkZE^+Cbm3a zDUU7CtQMd1;89cYF3!G13%&b%3!1t)-(Bf%Dqkmla4X-s!^!&p<1Qy#HD&+2ru9_P zxV}&i=)$FIWe>XY<}y99o6OJR3Jjc3Xpo3YpVMVHcyQ`IGtnoyx9=qVWB>wBS3j3^ HP6126pF2Kot*BP|5MNkl(RH&5XLM_HSckp=S)i z&h-O?xl93(pi6&HKDg@||F>(rndf9=uCA-cdf2@-+6T8|f(2(i2rh841t+*x!Ohw+ zor3Fd)Xw_c1vl|k@y%liPH=)72ybO@s}_Xd1XpH)-$r*QxYY|naDpo}!K;FcI#(2& z;7SKKaxrGrIilbM*K&eq1h?ywv)}}GTyUR46P(}#H|c+|?;Ozt7yH~R{DNC>1CM=o zX9_M?aGB#1+=TyI@z$dJ1 ztKcRD*ZoeDs#gXD*DSabZteQC%?i_aKiQ{0yXx_0y?tH1z36$L`C{a} zH8{A)_vTUKi{4(9dC3^uU*l;TT+|breUhJTdw*5tMR11%S8be~=Oxo~`!tr8!BzVG zj^O$Q_iY@46P(}#Cpf{?4DP=%v<$5?Si{IxzW)%y3HTwu3NfBZyRhMT$ZDN*w&2m&BBkmGe&U1 zi+?l2ku+m)vu<9_9QjefWjWVzbjvr+$ah163*7l)%R5fNZQgmSuVRTU*ErvNW-{|9 z8jcK3Y&FIiacN(0izh~Gb;c>U;=zfn);QmO9Yn^jcqnu8@`^9C5nHXV@e^E;;KWvQ zoPygFT;#WEtysief3e-+#lTlAO#E4~)m|Ovu6-uBpSd3m5nH|31Q+<^#8z`&s$NNM z9o&kK=bUn6t2QsA;}hJX1-knWdF=dK1`)R;Rh*Yj=Zf2c8`&XIK?^R=ymY%bvpu*~ yZzTkmYn)HE-T7*0n&99hk-!&|5Cbw7miYx(t82yEyZ$Wz0000|5}SNA1M^{ z`T)yZh5(aq0w0s31VEE-0tl0P0tu0CER(DP6MqK?4g?1X4g?2+OSe(i_}8xO%{(R} zV|86U=ELr}(LT5x11vc6L2wHPTX2GF6R3^5f-4=|$jO*l$B2RxT+0ED2yWLYXTb^X zxPRb&g(f(`2`=cd@2qHoTl?HA{DWI?1CM?8#S~nw;4;T2xPb4icxl%u!DWk1a5pBM z;OfkW?9mDC!OsY8-+YJ|FTn|})G=JOlN1@ZRd7MUb-&W2>X|{oH4E;9OS^vk&I-|G z+c^ksFu2uw`(433S>3I2f(s9B=UwHyE`KG9_&&iM7~HHo$-AC3d3q&|-~<=8y8Vmn zhp^vsubWeCpdCb%hkIKf%n1Q&Gt zRprm7Y{6xJlU>(RE|^@iPTdP`?{-9-=n~wEa8}rYZWqsK z!DX1donmVl+|2DcHMnZ?A~PSz2$OjNMga$tVFDJDdjb=aqXa;cZvqAv34H+#%*YYK SN%l+t00008Rj1ZO`5$GyS%1GnG=7ZjZM1b5s-uAJPKbO}yyjlsP+CIlzA5B77# zu^~9`;fgOP2u^U0QE-BDmqT!ZbDV-R5gn)CFcAeOI1|xv3Qjn1f9G2kQ41t+*c!67)oZQfs#K>{t2rxcN3 zSATF$aL@Di*T?}5Kb{lETyS5U@VArT&Cgvq;VQOKHQrU@uwwh&=RG>OorBRe@QEjR z<(LR=U~q2^azb#Q{EVdFR-Pxp4G8Yj@7=wP%Hyis&y|z7;#^nHts~#Vm0d{!?jE}* z^V@ywj8$+4#y0IlR|eO8K@ptb+U{Hct!oSJo8?bcOS>wA zOJAwqxzwsMxRRH=-N7Zicj%68+T%OB#-;i^bd3AR;QsS{tFDeW2e&GK>hqBNa)17r zbmBVJVD64C`QgvbeJa266m4&8aES|_SG+$>2`=I{dI$bV;hA*uCf?;fd9$7pTuS^W z-sJ>W{F}$W#^T0Fe%oD6aGSUF$xFtxmvD*iBLye8k=vUPo8X!cL~wV-COE+z7u=~! z$^^IJmk_5+!lc+vSyGm|y)hrL;D7FRS8S)A2fhmz+(Wock%C-9OoNxdAio0;dq+fNMDHqr3r%JB>sPm-%SD^B^5+?MH{Z9F)`RksC zTQNYD17CR|Nx6e023L6@KkA9^&RcuOU{`G`J-E*EaP?=J0D=R-f#3kafe7FL!GYjF jaDb7VACX`h7dHC^QMsAVJa7@s00000NkvXXu0mjfJ{OJ8 delta 323 zcmdnb(aJhOS)Iwp)5S5Q;?~|G!kwrtnx|#>8L!%KMjvPM2_)S-?55 zUUu?q#(>Ea7+IJUEG7%Eh)rI>$Tu;Db8-r!M7@HAkY36Yd#m}v2RZ!;nuO;(5V-Tr zwakwteIl#6#X-yE4+LbIHlJt`mT7V>5Q_wMai^+?B zDKzIn9Zz1W8jJc4{^w_A@E)w>5C7BB^nfMZ?I7p5SUw;zr)hJ?GZ7iFzydI1&I1gTe~DWM4fb|ixV diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_57.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_57.png index ba14229f265dc2e7d8183298b95c8edc2f578a3f..75e5b72461863c5054fa30bc76a4f72e09ae4cba 100644 GIT binary patch delta 874 zcmV-w1C{)N1^x(-BP#?&NklO_k(N`!V!k?3Y~s zfHId&0Fmw&0f3WH0u_@B0v~^_bAw(nKVMrm!67)o2~Kc=6CA$|YRiV;1SdGb2~Kc= zLvRRAaDo#YfhRKbrT#0rQif-P+B*^AviMxXHdqkm*4~^ zIO`=i!8yAjxX%UmbXmkEIKdSxm#^svPH@4Og}x6bIKd4K4#5d7IX;nzDU(wl284znl3v(Ss}FcQ)PQ zbgo;~I2#>Y*=hTV2`>BhrbYMDa%>E4@;&l(;(tb{9wgD1qk=m#wj+bfxbOHvaK9~s z;1&kAQR7Tnz(S{+OGecbd%=UalS9%t)< ztD0TX72JmRaMi(8&M3(qXRCtCoN>?<+}+>X5LwgR`;-QP+2F@UPJEbXV2MJDa#|2lhqc;Q> z{Uf+R!DXGD1ShzS<4kaZ6P(~`A1ZY33kY^@@4j>eUUo;r`#J%_>VO@4=7Xbt-6BSGS1cnmvJfaWP^7e zR5m=!s66;>9%pNUgD(*rk$X3jSON|i5FC)^KSZJSWcedII{*Lx07*qoM6N<$g7hPw AyZ`_I delta 306 zcmeyz(a1VMS%b;L)5S5Q;?~>Sj(mp=I2auN{m*>PYI);OONZpja^a1>tIakx7(Eo4 z?9U=Gu~v4nDvQzNXcn%?_ZZnG)^ad$@J;S#G_Q9kP>H*6qSDuT_5*=A4_MSK4s!Ng zUs`4cX89E~3ClD&1IalL1Z0{vUjZ@Z_!gYuI>&#fNjPTlgCpuY?z3Lc-1&E@cR|x{ zgB_DCfu@+9n`X%0^jUV@4_}spoabVIx^~L|iJL6xnrGE4be2AVFj(3jSm~tx1Ia%) zqiS(*=WfLvg$L)(bIk#oeQ>AEGG&W{s`WZwY=92CZeqcrzT@;qMGFBL1t11H-+yAY iJj`Fx4h0Gp5)T)e|^#A9RYf(;N`o0l}@>2T%5e-~@MMa9_6R z>(814f-7H_>WP;1dpZZ_8g7%F{l8^o4tB&5T5y6J8(h}9tlno!LQH)Z|^u1RorCQs#u2z3n3*-daumen!1)t}n6GB{^9 z!G#1jeZs5^E^|zFicN6MkJu|dvV7&k%iaG>;*%_w1s57!^jnsyuZ4E{h;zYha7_~Z zR;B96yIX968x-7|iMZnTpR&z@gAECh@fMM+3X@L*6p?E*k^Tvhs3m{6yp6o>ePu6u z%08+XlU>K*>NMe>d_^uZdz&X5j4Jlaie+{i2f;1g`PHF!UC-?C=sFHZ1-J71pKNE; z@>Y*WhyC*A`zMXVh-@jnQ_3JG7j4YxAN%U@#jw1zRXb5ZWf8H z-x;9m{;W82d=0MKI0%0(V30Fja%G;~R-SPp$6~@bT$5s(5?t2TCxB=I0D|hy)Yn$)~Xp`5o`rQJZ#-Vj^)1v?SwvejeqSrI~nym9U2rlVm$(=#1 ze%C<6dRDzu?>Y`w*VsA*7yXXo$^%a1dPeQX$>Y#AxLwxg$xD^4AGz>$Jv-b1?lulr z$JllXZt4MN#d?2s3a-ntu4#iPIKc@{aDo%ujNrOXw4DaIYCWd~cf?05OgOsGoPi**uIg$MaSIv^X#i%=4E{5e&$$o{@)H;2KOg*fHRlb;kv5pf6mD~@TJZB z6Ym0sKM|g^tmuhZIVO|FVa!bvIE|6P7m0@?lC3i<|+BP;_!Nkl8?!z(T73^ zpC2I2$10Os0#K8u0u7N{Ka(N_6O*d~34amsrhUeK5Zsi(${4)W1Dv@ID#co91_XCN za8c{v&bkns;EoLL%`(0HTQeZI<*#M+pk+Ny<=`B{ZL+fedydREd&U-8aDrqn0dZuCtPT#w+Y$G82ZT~UKBxSlg0xPrl5Pnrm>=YKgJ zqB}mg>vMGuE^5703vSk7g5VZz^#%9$vUWR3QT4S7?nZF4FS)83T-P&$f@>OF#*kHd z{Og6eSb3~xW~b*`uC|)aFM?!IKe$S{^`8DPl8*yfe_rr zD{CaO(}G*QM;6?sD{FLbwj#J0-}V-q;7SGeb_lC3^UUD7%#YxT1UE7~D{mrHF*tiS z!G%0m#o(gv+7%g`y_?{s1lN6FB7@6(Pj-q;aK*RS5w|Rlym-0#$0Y8&EGxLF(arwK z(&}TOoo;b1xDAd;W`9*__3-W%o8TG+_hb+w9{-eO794CyaFKr-lOhEZldA$Qk$el0 oiwct+1t*bR2$N$16c=FBFJRDtX7tW>JOBUy07*qoM6N<$f}0%$`~Uy| diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_59.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_59.png index 08750172908240fb9d895157986b49ef017bb8b3..e380e5758ec6b1356c1604d5674bee8a62bbaef7 100644 GIT binary patch delta 856 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 Ab^rhX delta 643 zcmV-}0(||~3eX3TBPs)zNkl|EDwWsfnV}(2eI*&D&HK!qo(q z_5r48kxopL9Rn1TuL22?TnUpd1ri8AaDd=IaDd>Ee-@Mf1Q&nz`~|o3KVCSIi_D3( zOJp+!dd3I$ruVvHtOOS{`6327dvGJ)Z}#9aY?QVN?(U#fpM)bfGEd%j*5IDb3Bh#^ z>WIgw7~HDgFja!9_MY0VvEA9ao&8_t;GXUUDg?K~;#hmbphg52^?^riZ0_ta#kP5H zt5@B6f{XspBfftI-+4^IZ5~{P6{Vx+o%Q-6_wZGN+vzxKGpNVG&0b!f5nS)y-rNw} zwBS}9$BBAA!3i#HaKAzmT)ufx?G(Qzw*Ea@<>0P9cJ|;Zon0cho4;`cmt$^JJ*`V{ z7oT5nxxVIKT~&6bNuuDs7fl40Ke&nuE`s~#bqH?X;8uUXFTn|}`@OFCnl|dZP{9=q zuHu;{BZ6DCAQ2JV(m5u$zThgK+VwQJ-eX|1f-6181a~~KW^dKA1$SkyFSsJXWf_p( zV?A&A4VU3+YQeoAxRnP_Go9LX<^KdHxM8vVT1ePExT}wwc}xVCXeFt4Z&o$9$jfsC zS2VblgR+17sa=s5pjP-@>#)G033oQRb__1^77JB=+dA+)aclI(yLOEj%aIE!f=e9S z%9W`UA4rkgJ zJf1+AheH67eK(O+6Mx6{3*_39cxFPh2+mbbaDp2XT;hHT4#5ddaDo$@-~<=Dhy^D&!4)rJ!3pm8;JV$O zBRIir6tpi7Cb%}irQKiV_8h^r3~t9q zox1^5a9ak~aR*Ka&Q+mcZj&AYGm)HUe>7TzkN2$+lK!1~+?~f)m`aC#U-ACOE+ft}wR5<2(8zi|X+NC%6{D&H4gB^>~7765Qf`(E!oC_o^>~775ZtP(TUu~4&QJAtf@>ID<+i#9_vQE!AKj3>B*f5tmCxL@8BnmwN24jJ$2cDi2C?*x~&E(BNgEQ^4} zAUMGt8{CTR2u^TE1eg9ehsuW+2~Ke3!OeIhA~Cp8bFcoaQE-A2oZtkPIH$CIxjW|F z55HIb`7b!ZwfpX9_2-Q~_-;I2`qPdDC%CPH>wbK9567368;_TEbxR9wHTLZ?ZqFI~ zE?eq&saLnv!QDL<)oX3qIS`!Ss^?U_@Q;4P!U@48{yCWx+&AZ@dhL~+gC~(qNf)5M YKU&=TZMgBM%>V!Z07*qoM6N<$f;D!K5dZ)H delta 373 zcmV-*0gC?12-O9UBPs%%NklI;hi*M{t5`JFF8wKm;eac7uCmJ%SV5 z)*(&)UUX*-f)iZ(A-!{E>3AFnE^1JBMJG1F9U0uN=maOYV}q*>Kx~2&T;W+xaDqEN zxXKU&Cpf_sh4AY&T;vwqF~La}=maOY3&C|-qu>ynvz*`r_e^jd*C{vzCpf_gPH=(~T-zZQoZtjkJj8+%-0{Js z-JT;j!Ho*8^ZH#D5L|R{XnWnC2k@lIKjmQm%2@!*aR07T(|qn+@2%2$lxY! zb?ydK!HooU=l~u_2T214NT60uGUP5Rr=tlk@>ElQ0AXlgt4a7Z~LY|0jBv T&CYh<00000NkvXXu0mjfSn#8g diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_67.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_67.png index 8838f57944d620c1315844b8f7083012eb399408..9752738ab84d6d3de1a4ccf1bebd9d6a96abdb36 100644 GIT binary patch delta 1012 zcmVc{aJ!R@fujvfcWEu364qx*GR!S$IJf?GVW zGopJE+^UIidT=|$c0_P9qPr8^>d7ED!L=IPRl!A_E1n$OF0maQ+{nd$m{sS9f)m`9 z13V+Rtj~7@C%EH+`xKhs@}75x)5nTV^vY(gWng*9~4wv;!j9Dv% z1h-LeyRS6K{3gci;4-6s6Wq(-PFUJ?_cO4l;5v+-;3fwb{cfKX+>^b#-~=~4xXf>r zXDub0@ppndFt}CUB;WO-$xP)W&l|Pf$`9jiY za9O`_ZSiuU$+hazz2It0U|-J(9@wm(IAR2wZLW#M3oo#>9+0gc$I>y^d_4UT-2n0dVf0yaAI&3k7`N<_vydSdYm`g z*ZDlM;^Fg7^Q=v9t6!X%haoE`US!-=CjU6K4MnB%@*k--?39eCa5!*gJI)Eg1rNl^ZuZj2^PH;;HqWWQz;Ntggf?G5Y9nMj@1vj#Gvs!F|TQCqa zCtnb#7TlY^7u>>gs+m{Qx?H(CEx5?BulU*vPH?4zt3J;JC%96jwyP83L2O1TT?Z2$Q4&QIS|Mf2^6v*XJ+6y%@Y|0~_&s-;Bw~SY22D$SQ`nU2qwL zE4V&$L~sQrm*DyYH@Yo?doZZgKgVYTx5K-3^f(A^;pCbb-M7aIuFt#>+~R?q5#5vE zR!xM{gWDmtBZ8X|-JRf8PX@sWuGQeK3NC72@#NrkiS6j%Mh?cT+D8WC|{RyF0Be5!}EEg>MH=1Q)m6U6*wU?wa$x z9hY`>4erT{ptY0@gZq2XL~wP2>v+ILa1S0MxcfI zmABn#f#AvYW|hL7Np)&)UG`y}_zoPP=$i??1RLf82~(r9p5ceu8A zxzOZVb?9DjH72mjbAksp>sIF#gNwe^d6|O_mkUr!Pp+AN&uPJx{0MS(o{Qr;B4q#jUq@ql;D>2)G75vwxYwrq{Fd+RL=HtNz?&VZ3$h*~99; zjH!CF872oZSx?qw;;QH16OiHPn>hK=uRqNX9;v^aJpao_Ws8HNeX<8R^A65<|BtV! zn=|j%3|4iEgS_>P0y4Vl8*Z?uTO^Chd{)~CVm%g-X>u-5`*h53*9l#q&Yp{RRhxuk zE=t_Jrn*D$pz6JAUrTl_5}xxwtp6gX_(4uR8;gsa=hAnuAM}m(j|AG1Qvi}RJFaAL zkkhZA3CI?h^8je@!LO3b!8B0x^Rbtk8XmBOTZC&9DE2 zK9_S4o%6uySRYW`2ENJeOq!ELnXD$}iBINc;+kB*BvvmU{$e!-NV-`>xgQJ~(` zZF_6^-qIM^JMTRF*WJJTaUNgZEt_n?m`mp(Efuw|=O4Au-uCt6gGetRCVms0TnkZ0$|_p4xcit&YXPyK!~fA6Uh-d+*@T-O=#C?@n-} z?Yq3~Wt{6O3znCcT}?myWU=QV3085DJJN9hLEm4lTyDAG7UWZn0wj4SWZ zH!+B-Ze9e1JjhX;>&gqx1?^L@NY_k1&wem>#)Qk|U%tF9cxRF+cIQ<7>$d_iN3TDz zt^B5!E6<_#KsWp<@4mb5m;U*hczyY6S(_=#)5S5Q;?~~T_YURFS;MZe zc@N9v4UFcKI~WZn?_uPcyqej5Vm(K_noQT%TE!jT+Do3l+9!XIb6tUTlklC!v-R@L z4{otc-xpcXBpmZYpW~q6Cx&j{f~L)(1y5v?HgftElyUJLRJ36K`N%E5h}*A#Rr+qM zlEp#M+>+?&50si-S43ZbcV2Yv1D5iN#q~Ql{0h!C3(tMptxGc%# zmSP8ihBXP#dBD>CfJNQnAZOk=KbX*`vZ`o@f+p=dT4oTTn0s*`yW7A0s_1**#%}&| z^|@Mx(1NDyO|n3@Kd@A=5Rd_34n72)e1cIP=xvY5JDCk9*7JyWd}Z3Z_KoWQzuQz9 OfWXt$&t;ucLK6VrM~*H4 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_69.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_69.png index 159e0b76f0a01314c34c25e51f0ad1fc50c47660..521fd8cf1aa4a29ad4c24b9b8963a26b09eabfd0 100644 GIT binary patch delta 841 zcmV-P1GfC31=I+TBP;|PNkl|XDSihLXCOE+vpWrxeL5odrf-^S3AvgplxWsY!CAZ)NS1>Mjmk3U9 zMdNZ?m*9>IZpwoGbi1MxoZy1T<${ag1UEc5(Fx9bxDSFmVc%i|C%9JxCpy6iE;$y# z2~Kc=6P(}#hu{P!IKc^S&)5VfIKc@{aDqE8IKLJUoZt$_CpN(ePH=(~+<9MTP%L_taw|xTeXkh%D=XS8wmheos94WsIwP|F4N>w+X>L*>-2>ohO)y z^D^y(b4?8`E4avi|MU!6v9RtwX3{H|%;O-qA3Gc!Ty~^?JwEF(k^e_Wa25Mhwa!)q zm$~>dP6`trH)+nM&CAqvc1?djIGe`N5zU6HdlOG4f?FP3^s`ju%h8F?ZW-@$1$S_8 zTei93cnVH%f)kwJ1SdGbEevkTrTr&Y*{0rA((yh}aD#*Eym%22-1NIk1ShzV13MwO ziMMqL?&ZN{EyT)O!tU-z#CE!mXVpEYf@=(}W9*T^OSo$IQ35!|w?l+hPYK6yXY6G?=0$Kf7I)O${1w}X+-~QbcD&cz@V6yWUdo;tT;(Es zy3MY+?Yy`%{Uju~EB}V#%6;sdlqq`;RIO`P2 zdrXt-8O4~Im?uwX^q<_#s5p5ABj4m*j9e4*B67m? z3CA3aS*IsB=Rw!AqR8nF9yPt*bRmC!cnQ#~M?3#KP_j5^%I{aw^jY?uYXRqapgF%? z3l<5_dEjSu94H4gtqI5xm;1|eAf#GAn|EH7JDAH)a)YjGKNO=q3rLVU! z=Jf|C^Rft$XiI;96~Vn;&;NBz@8o6jWLdoq*&I(A2UiByvCsuKZ)^x|@Zb{M{NPSF z(peK+)JoYD+=jh&^8bich;aCP%PW%&s1gYYtg%UapD2RCi`2rew^0!G{Ff@a6#|=&K^y0 zf)iZ8d%t_=C^*3hE+M$i!C8H)o8Sc365Rh6O#~-6!6m=9-~=bQ%Y*AUhnsw7zThqk zZu^}k)4vWQxJ!b&;nuF7K6BC_7u@pTs<-xC!F{rK7o6b2gX{cOdDpFE5&utcZtZ&f zx?Aq0{PcfL9Ki`LZ148l*ZVgH7r7@CoUi9Rj_v8-6rA9$4KDIEg4=!GFSvre+rNWO zaI^Prf*Z8(svjbBV{n_#`vvz!XjzZR+c=<3`E!8a8W&#HrF+56AJ~EmJ`C)9)cM5V zsvmVeuxH!1i z>%D&+pFL*96i;WzGMTd8R|fZPWLXQO<1d=b-fENU}1E9?)2$AX!4%)Mh2H1X~gTN1eZCTPhJ@2mGbGpirxcE zo4@K%s{@Y;r(*tA1$W98xpLlrPTF&H2RCh<3+|%eCLE$~n?Jz`E_I$x3a(>)2u^T< z6P(~~7?2r%zZ2ZR*t$;gtLL$LZ}aJSPSzjHr_A5F;QSqK)&&f~Ee3xD98#SWT;}`%D6J#s_!8Gv+7UiC;0D z6Ms0Q<98EETIjs+v3*5v8jv01pmKeebui_sWA|^8Wqj{$>U35Men#gZ-NY{%`vp{y gfH#p?5*M(+U!bif{Hb0`B>(^b07*qoM6N<$f|wozn*aa+ delta 504 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 DzM!(J diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_72.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_72.png index 49620c3d3063d40506bf464edd10c13dea383049..f66928275dd94698261c9f6294849ce939f08ca9 100644 GIT binary patch delta 1089 zcmV-H1it(H2j>cqBQ6ClNklDw!Ch`_NT)Rla6|Y}v

J1pV zp524%bl@Em+{(mdOuFFutn<^~5nS*~CBe-O?zmHc$+4{-<^KBrl^ZbnOQ(w^yXUiOa4QELcbYT~?)ya(!Sy_k zKJHXyQgFL}UtV+yZsmsEQ|~*B2(J8KF1Ry;i=NYWt_W6NygKUDli=2Z%h-?=NB5_1 z_*bm^YH+1Do!@c}w>!AXoi5{df4T%;alncCn3muU39iFYJ~Oy?p5+C1P;k*3Z#B58 z_jh)G#l$BsN2|7(;0}J4+jS0T+j~cWiLK{d?57@BVJr@v7!C zdLBNFAbY%Hf{WNuGas|dcop-xbNP19WA=E*U!{z`crYop6MvRx_xW$P@dPKh*2{DI z_8T4C?Xd|?aDo$@-~=Z)!3l2b3GkB>gMW!>QrJ>Ct$RUe!LxA-`b zxB6s{cVlo9#=9oCr#tqi5oC`yJ-CU_Zr27Eu^idsO%85qY=Yak5wgdd8eIC##4o{x z1{bv~+2h?5+<&O?1h;2nWREv7xaqN77hL4>WREv3xEo>mil`EBk6Pw@!C$_?Q5ZuNMl|9~x!A*Z-`|99UA20hBt?6%k-yWOb1SdAZ z_1Ni73bp$IOl+427yWUW$sfc@fVS;3XxbS7sC7l$03oQU6m@U00000NkvXX Hu0mjfQba+8 delta 682 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 Um7SPTfB*mh07*qoM6N<$f(STJIRF3v delta 652 zcmV;70(1SP3+o4vBP;{5Nkl>b?Op{6l9FbfKlfnW=f3R=xw$J|r7j%%{-v8-=6gALVs~=hR@LKiQ-ae=m zf}1@i*@Jug1SB}Yg$}s1mthk>m*509{c}bS&T7F`p0(QzvF(iRXmRJMGu0VtB!&b+_tlI#AW5D?Y#B7f1}{;jIC^N zkuOZoKB5PK-~^X$c8i*Io@UT0izb2-T-bq+2=3EmY=yyAdC}zQ`>yslm*56tdwWoR z`)z^$zW1t6my`*v_dxD?tf_ZjnS;CGNt50MvWnrA3NCV1=>7U?k9LjjH|vRZ_QdN+ zlf=ROT{Nj2-0Xg{2UmT;f2CE4Z8W&m-+gYG;cmF3Tn#SO>gx@&Tf|~Rrr>rj{EYl; zCoa==T^v$Sk)7PAy181ea#^zGZgXy?Ao+Ma*#HyZ0VgrW0<3Sx#^r z!M%N!KONl2EHAj?!R=l!m<{$sXb}S?;$6~$6WsRTPTovC9o)z^e+4JFrDgG_ZQLH* z=r%JS1HmO7Xd^3Qf)kwJ0)kr|l;03s=40Ttz{>|{=1G;_6}l?H%^ri(v)hj2;KuiX z1GIAU{KnvV{(pwqO>lxMcPt{_fO_h4Ks~&i{Bm-2&{YmD;)7sM|1Ae^&nYmwtuCHq zI{}?|w?LMGd*Tn98VF8s$8P#(URd)H3yETz*~bmR?bvT-K12wU%mO`=SOpG|TtAaa m1ssuF3LPLg5F7{&*yvij#s`*M{WSI*L z2J-v^$~>k31P6ixlM4bye~z&$#`F6Rf{R@_yR5vO$1XU*wOV<*Z!82SxE3q%H)9Z- z;G%-ty}~Dr9l^BZtE)={cSUdsUkA9XOK`1&OTMh@+cAhvaHE1te;BJ1E`qym4_AFi z`8GJw39kL`aFr)bR*V_JwF$0z&#@yo(Fv|ya8-MbRj~+8aDo$@-~^YoA`4D%f)kwJ zm>JxvWe84if)kwJ1UD}@UkeCsL~tj+0JnD&-1Whwj#+SmYad*~odaSM-1y*5-aX*< z9KnqUZo;F^-GC~%3oC-_@E#Cc>)^V)lL`Wwf4D#2@bmKz_k7l;KKCbiVopr{H_QFx zwO5UyYB`njzG9rob8#%V$_YsSkOi0ZS&Ry<`ptjxx`LY<+{(W{BDkOaeD(5n{hM3H zS@quDE^ozpIV!k{59ixSOxOzuF5}mn@nUwzmsIKhnyZugZhQ&(i;6x_(*lCBr*HqNo%!wGKP zYo}i`*kzofuQcfr-0l@%*9IXmx`c6Fdo5+!00000NkvXX Hu0mjf>zJPG delta 387 zcmaFGahr95vI)~7PZ!6Kid%2*#PT&62)G4)+n;%tQSAobXW#RlHB+6c)_!{YmGM*z zA0r1J3p)f)3>2L#$fV0^At0k*FTAk!o*8FSTha{TRriO~h_Y~i+H<ze56mkm4o z3KloLHVCU%k6|gl!xjE_>Zkh;T-0~`xL+_;-8Za9^59XH@V!NEIQ&YQy1Cb7J&h3U ze!!w`0kUnc+9n9IZ|1?Zx7uLBpPPy!9SW42sy{RBxawPQoc(&~nI_?wngZE*GC;>3 zWB>l_GPB%y!8;uf)c#!E$sWL3?ozrQ>_@oV-v7?scK2OkT937q51ZQ&E zy9ti>2Z!M75d}Wk*o=kRw93(PjJ`u z`%lHP)9aZU%fy&=-wqYaD-G_`NwISpZ@OCWv%@EsyVP~+ozY;I=EevYQ?fwMzDKqR!qXG;C60@ zisiKoE*a~}(05Me4j&jzdBK0}`gbjZtC%2_!KGeQ(l26y8}cb-dV?hoNz(7fCIvU` z&@l2J(__x1<`Cpf_gPH}Jx&Wj zaD#)}d8Kc~<9zdes`B0*f;%X<-M3Vze4IOnjBh)=OK=T?+wp2UW#FrpCAdR_OWvtT z05jjmxmsYz`v}1aPH=yJystSmxXE8i3$A%^mESqpyJe0ps<(rCniRw~CAe?D>pS7_ zRd9o1t2iV{-^MS!cT1jb=f0E!W4p8L)puUrIUXzSx|}{o)t#3c1edz^yXEvaN7erp zI3&2c∓<6=PcY-Y-4zJN|={BZ5mFMx-}v)#RQ2A=<0|KOB>80w9ww0tS(+BNt$^ Y|8>?iLL6>EPyhe`07*qoM6N<$f<+skmjD0& delta 354 zcmaFPv6OX!vJO*@r;B4q#jUq@9J>x12)G2^{eS5jD^DE9)+Ot{CrslkTp?e%=|n|? z(cx%@i4D?||1$EiITR>Z2*^wfFrVDVXjLyD!@x_0sL|ME@Ag(+7* zp53D+FVd7Pe(RMXw_kzb#$LcIxS}s_b421|4K$ z;Q9khbJ+xuXG?#JR{Hw>4+K{n*^KyR#C+0wt==AK2jpw#&?+`^dT=A(uiy>~?(GKa zJ_u6=nBWcyZsefp9^9yb*)_OT+w+*oEHJP+D+z zXM3}o;HCw)>XdTT@=gja_39(R-Plq8MkqM5Tl?UWW1Bq)t4|y~xqv`$f?N6#L~uS% z3U1=^1!r~>+@R(Ed(uR3W;el2S`WeP5nSB**-(Oe@?Mi~`0a2bvfy3>*YQe|5y7S3 zW#8ehf5Cq}2(I&`UB3qRzrT;V5?^q81ULJro)+AbS>MOWCc&jdcjwZs>UB#BZsgyc zKD!C-=8^K`Ybl@nUD7@iT!Y~5MCMw`{NR$gAMQ(RZwF!80IIw_M{rGpTesaK+J8Jl;AnxRghoyNv6A;6@C>ktbJnJjhgjEEQbS;GPc1 zUtjx#gUiU1O+HR;92|5dk#HB23j;Zkz!;HzEq}qm!Clwqf8Ccy@PJ=D7OsRhIr`1d zUf!E^nf>0<4>*`PBn3^UtPdZuhX+1`MkB%JAf;%&~)O{*A!L=XoU1m4I z32w{alK17PpLOmWbe8OkPO(*QoL$dSo*Z1-1puvr>%6>GgFfZsMlyC$V0xy4JHu}2%0l_6lwj#b2F`x9i zW{*d;9rCqvXc>cCJ-EoQ zS8ZSB3V(l6a25YQTRONmw;}rPp=!a6uJ%?p!7U5!ty9WbpLbGlRj)o0+`t$08KK~; zZta7s9NX$in0?}C<^lr23GUTH5WzW|6x_nk7o62ia6zB{dD291RyV;d+77|(5nQ?L zGf;w?`CTjD@Y~@=WWhZMuH%&^5y4fz%f7>1|AK#;2(I&`UEc=x*Xv7Ni7&W4f?K^; zuNK_Qs_$^JNpMx78@aSAd)q1n7x}u=S2w{8?kP{cmU8BGmA*5xZw}t>mv&{|fGW1e!DUalyUDd_PtNoxkR39ayYqhaL|?DlMn?MkzNRsdICq2 h90dxISVI@Us9$20l~S^ql-2+M002ovPDHLkV1oR|A>RN1 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_78.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_78.png index 033a5356f1703f71e658b0b48616da65a1d56114..a4c03ac6feb2eaa56086ce3b2e8182f7ae324515 100644 GIT binary patch delta 876 zcmV-y1C#u$1(yksBQ6A9Nkl^@xeVc**CAd z;Aow6Q==1{;6_inNzsW-a4RO>l;{K}xHS_meKNaPBDmGTrA=tD32xowOP$pAZh{k> zy_?_!w{vm}PH=*AI4L;6?GFyY3C`Y4aDv+x9D);^y_?_!w=Xzh1SdGb2~KeHC%VH) z!3oaZO>lzScWaluo8Saz?SE|U!cDUpJ2e_(EK*Y)$i%4MBc zX5w~Des5i4zc#r4-PliUkZ+e)F$gD?o3wtNg9Fqfs#L1s>h*Y zo{b9b-)iVu~}_3Ipmj(IjBxKo4m=W9<-j_&h`Z(iSV_*^v(9rG+YxXM_o zK9TRNN97*8drwy}e-0DoSy^yt0aS1N)4?Twh*gclgn2gNV)*pn{`U8}4uPibU_#e$UqhcVZ({e++O%a8JKBF}SUJ)N4v? zRl!wW`4e1kcx!K7o_f-J`YRYEe-fQ%oG#mG9Q%HSKv~f_3IdiCka=GR|a=?nNu!aRIgk5I0!Ce zL!{m*U-e&eP5OYCJkR2;Qo`E_lW_thk%lA}IOaEFpF2DPp&u{+0000GPuiZS~wqAAr_m$UGEDrX{h8*O4cjG}B&)Nqp;_`Q*58tbK z+m!tJ!csSNi-WHGu|XwC!ZAl5EOh~LukzgclK3sP^TDd-*=84j;&(sz%4Xg6Eoj<& zmqmTYxrbtN9&4_WS*z{Xc76#*UPuAw^`^=3EQ*uQF>B zD!5e}XQ$wHn6*2PCBZG)Grn1t-~=bQ2jN8q7qw9ZH$S!`f?E;YH^D`3SiuQy)QXA< zF6+Ib;PQ`b1Xr{He)|226ElLFJ-Zzh+?(b8`TJF;ngut1b`yWxiw*d9gn~1>32wo% zznRelCpf_^SoXJvCW3P~DY$^(DhFrwhf>JK@rNpX%duD&P1A~jYlYG~cCU>vIF}n$F+3fad!=8MlNw?s-b9>H%*q#nf!3oX{ zs0;o^aAFhOg5&(omv(gs&g>?*kT=zW>p!~*u6S@|eofwvd-Lue2TY7@yWpZu-3zYQ zK%Y9hjR~&$>#aKmm;F`eF5?nh+6U671~=u-0KpXwuE+=Hb82wi$A*#b8Ih?+k(DBm zSQmfy!vkNRf3{h{$**(LI?Z^V-NxC~W#Cn=kch|5ex2Rc>5AvN+c--L?&(U%SRq|D z_|wPixK68L=seC^1Xp>e5fNPW>%8;#)xmxHT;Hsd&f}~!xHlWA^YQ(YWvmP?a$97N zfy~#IdPJ4EvNL0SvfMY1wR)zCdc2ausHA@#O2=_l7Tn5NXhLuuXMn0%E;G1pI1v z!Bx-i)Zn(e(xm&LWYmVuyeeLB{bOqzT-3FVRRbgj zF2Pj}tUHH{rv-P^mk4F8gcaXwarb|H&a_LIvL37Zj;Lh3?-ZNh`aM>My9GLZbJ?|1 zY=RS9=h(`EoAP~$)6d535cY%*_*)0p`CEY}pQY>?T-A=O?M_{6F&o(IRu^3Box0fK z_NdW+J87qobzN)wox0d!-=Jq*OPR6$GY;`Gzj^t%;JW{xfr{6f@mSqKvJih@w{|qH* Scn4en0000|EKG#<5Z<#lif|unenY61Gx>w z(CY;(b2$W);RHpKfC3_u?F0&wQ35ZMAp#hG5L~&Py2gL9_P6pe897$h)qgBh8Y9~V zmvLYPCpf_^JjjAG7Pbm5>g4Pc+zzvL<*_8Vpm)Y6+Y+4M1UC@g%;097RKfL+?TFwa zqPr8^>=P?E!L>S2vw~aoSy6E7uWSUDbOPSJKI6uW;Cjz)M+Ns}yWd}*b*ou${bx6S z!96&EKO+>J*-dZ(+rBfS2~Kc=3)uGEOB2DloD|%I;4%m2>g7$l1XphV1o!`-6P(#i za0|CBIJ2AJ4i7HlGhD^h_nl@p!374l`%06_kGyo5-2@j9+zCs&e*2rHo--5N-odSY zx6cahliA(nq~OAX%Y3RlYbja8>&$L{2L?CmN%CE9ntZwv$LuD!u-Wae6MOPXlWM_L z=kc6@*hUAZ-~{IZ)PUa+oY({xaGhUyX;+2d%x;34@}XLA^=CK1B@eEZUz4}vyLt70 z2Xu^WyWnQsx))rnf!=j?YZF}d*IQQ%ZuM84TgD~0W&e;qHMlNM1_&;3aLwEXpHqXY xJ~os81SgY#0y&dj0wR+k0x*-X0tOd6@&zstN1#@@Mn3=m002ovPDHLkV1h;x^xgmf diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_8.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_8.png index cdf9f648ae8b4872b5e59ca184e6930bada46a1a..f6d59aadfc5b2b205c204df461df653e5ba710bf 100644 GIT binary patch delta 788 zcmV+v1MB?r1gi*;BP|2+Nkl5l{? zyz2`nb9oAr$^lJ(bv>Ea`k$0FAUMGlK4t_bxWdPZ;NpXuxO14e7QqQ_OmHWxMR0-} zKcs>aoFTOq!67&VXGpC@aDuZI!C^=RCpbfDErLUE2rhLNUcS12oAv+ zQfm?1JA+IA#=r^RY7m^@1c%@RCpf`@-~f@FACX{of9~Zk#`XJ8$F{51Rifty{dDx5$6x(XH0kw8IkdP^hemLM+jT~^^_^RAf)m^eg8TH8 zwBVjS{vChUoDf|1oJ9oppG68TKe(#DlTDs8!5t9XowJlvg4=nO(JO8%7ZRWP4wp7( zEx~nu1Ufmmj`en2SUh>o1UE3aj&BHbK5v!BsmBGEda>-3;JQ9)bw6*FUm-dsxP*^D zlY{FzbC($0u2cJh6WsFHCIc}j4T=0I=(!ByTtYU({r1Shz0u~h~)jMYERad z{O%^W7X{aO2k44BFR!@k^2ED?y*jwcvs9~st2&dmdpn6|2n8p&*1=5r{awe@f)iZJ zfF}I^a3>zRj0p}-BsdTp2o4Y&2o4Y&k<~3H0KtLaKyZNIKyZNIKyV;9V4H8fg7|*_ So*SY70000={v_Bi zIe@Wyat$N*#5(!<#s>}sF~1C6|I0qb#-hIC*!P|XEZ2X;3EuhfKxn^=&~^^L0>guQ zH@Frwb=wCW)Tva0Gh=IHjeoqO);Vc@-niSdnZ0*Bh5na0pItf)kwJ1Sh!B6H#n}GZ~FhaDp>F1ZP4T zpWsZ$eq$4y-~?xEf)kvh8-f#@aS6`EG%msM>WS%eQgE#%XZKsC#3newIl2js`N1JL zzr#7Y2~KeHfo8SZ|IKeS5IH!}7=K(E~xd9@R*8vWbL;@j` z3IZB`m>b+$-+y&phM#_JD@e~jR@|Oja2#m|6jZF z`%a9na(z_2=Z@eKw?k=gHzr5=g^GluO_v>iZt^^f3+~2*>~dAG^pvL25%o!M={vp_ z7pDdHzN6dJbu%`&PJi<%JDpjA6P)0#1=nG0f)iZN4c++SjNrm2r zzD}mab}G1zSI4IO$)oDCktOS7T5KnOPPfxO!3F+aJ1w>e!F8Wh$-!Me&7Kxp$KWdV z;tAU|?dObsh)~D9d)MGno)DH4T+BLunHJm0jnp-`q;34>*scaweMww!?+h;Od7vvL zwzS~7-hP$#v80>9B|d<6O^oft#_DpkPy8IaOBaWI0g)%_j4V;z QF8}}l07*qoM6N<$f+xzYx&QzG delta 277 zcmaFO@rPxCvIdj0r;B4q#jUru9k~u02(TRd`+vFa-UI52GXh1QtTVlRqA|tp!K{xQ z69arF$1~>E^VyuR{9pO8r^&gXNqEi!7Ilk*q56w%u%t_#)v!1?lmB3($7jxSPS4J& zSsdg%mjhIDn-|E4Y1%yFnUIXX{<7oYGPt&iwUh;q?o$uhq?JM%kfd=pZE#x@2Nvq4ZpsBcyB|WkJoF2%Ao2>5t zF73L@5-u2X%AO5mCZ}J)7uM&cK@$T-CpR-nOsta!I$UaEgv4Yk7O9DS?2|V!N{AoW Z#;`f-s#j=3)PDvb@O1TaS?83{1OU1adF%iH diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_81.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_81.png index 53cb5cbe77b0e84cc3aaa2795962b4e5cc54b44c..971e23f9d8e40731cadf0d31c70fa42ec27c6674 100644 GIT binary patch delta 796 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 M07*qoM6N<$f_km4%m4rY delta 388 zcmeyuv5|FxvKCW?r;B4q#jUq@61kcUcp5I=`+up5$#J5Z?bSCACF^LS^Rev`KN?aPL&>K06G@2@0^&3`Gv&H7z zJv)oF{o&@_oPGt@v@JI7oa0i^cK+#-2Q2A(InFWMy31m&xkD?S2dIlByQKyaHQi;S;A)Vp45l^xdXdat%4{+u4#&dE++c^hA+ z;4TbqX3`=iTyTOrCb(4-CAi+ft)3&-a6yrb{I1`=KXV1{-jfUN;^0>Q-W|b3ugst3 zNN}}dD;eDGNm?CT)(RDz;7XoK?m8l7F6+0kS1wcc;HthaTYoyZD$Dca+NsJs39jzZ zO>i%Qt8$C^w`Ev)ch}KPaOo@V-v}$tk>Kh+;`cF0?_$f|C%y>hdI%iKwxc61Zm z;D-L~#=>dAWuKLtc62Kr+>TFskG_ZX?WRGOjcH_uBY(KVgWEZQJD$=IoY>k2w`(Hb z2KQuRs`%d9s^8b~`b}_!PA$7VX;NjU)8*(UxZ->G8&8*32IuH@SaAQld9mWQe&yhH z{=b0P>(dGwdgp)Ka^3$HSovr2I_|wkgYy{ICBdx>Z*5aJwVT8gFGd z701gy`#J4;xAd8P^n{FzxANNW&Cf)Q7dhX%moa+0cEP1g$Utz>fp^(~2~KdvD}NH) zx8;a>dnj%G1!ufU>vYHRMUN*q;|Wf1Hpm-;`)&Ny%NIRf>)>wK7;g&h$=EBGFM7Pz z!F6~`z-tuT5y9QEAv(J4TgK?|$_E$y>|eEK4R1QS%{*q;VZ394>pY&=1m_4>;0Sli z$52K$=+&PTDR)}mwZ zibn_6{U~=^Y=RS9+ITm{_P?7@tG=?w6I{XZZjDWFf(sw-=GX)$xYTQq)8E*3Hsda3 z+IV6UTzYU3AF;?BPi%rK7hL3xhm0E?H^i3p+61?GBc8o@tuWq^e-mGDeI|q3d8erB zc%x6ZXT46r6~1Y5@_)|}oZw2|r9AC}r-Bn)>EPgIlU@TCk^Tvhs3{k=`3qE1V%$K; RGJgO7002ovPDHLkV1h&=C}98q delta 667 zcmV;M0%ZNN3eX3TBSiz3Nkl;glPi4l_q1r?D{Hh;L7g+8wR z1HmOn_GEk&qRx7)Rd!gj>%H2J_}D$P%)ws1@)BRC;9eNq%%D9n;DQs}Ho-*=l;C;? z7d=MK;U0=)GF!UYVc9NN}}dD;Zq&AVmkaYK00;a3v2V zvu4DV%X;?Qk;~LQxT^2VmVXYe%JN(}cd9Z@f~z~b3GPO4RW31qTZYK1yJk1REnjhe zBdj<^f~$Lr-(isM#kP8*6rA9;8>Fj;B&*NeGB4=+~7ryk;ktT+}+nOyYcN1T*+k=T+iUL$Mn$PPzvn|}wFIe-~=X$Vei?Sso2$h*N^*_bN6_ZIbd9naqcSLo2P+npv= zb~;^VH^CL(!@u!xDKa>-+h)Q2ckv?PvVP^@GJh{%_WZQMhTi#yTVD6u0+C;n*KzMX z8l2m>UJ_hnc%#qx*5JB)GC*)e;){Bo-8QDXU(>MjxxL_EV*-K$k!UiL1_c$7P#=>S z0~V2q3=kkV5F7{&5F7{&5F7{&1P7Ds0vs1t{Q|1mL!_5?LPr1q002ovPDHLkV1lJ& BM4|uy diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_85.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_85.png index 6899c6b1ebd9b236700faccc43b37bc407d22516..1afa71ac0ffb8ef57ca36372d197a30d683c4347 100644 GIT binary patch delta 809 zcmV+^1J?Yx1;_}HBQ69FNkl>1qC`-9*{#5Q%p z3QlmNCglIiPH=+b@59Hbhm}s22yX0ZutRVNZp>;hZMCqv32yvqFgZ8`Cpf_g zPHg9cOP$CLCk407YA`W41SdGFo8ZLud2neHT5N*b?&L!1q_(o<- zZpo8daDo$@!%4xh-(A#V6P)0zZh~X~;1Jw4@7)q7yWj*TII#(i=MM$D4=n{JxYw+1 z-ILzQ62S@Xn7uCuE`CMmSZSlw}oZzUNpj8n#oD`98EChkz3;~gS zH<48^e}V({4DLA2eT^Q}#(kSIp4Ho#GA>6_WKRvqo!@umcUSJ)^cS+~?Mxe&_~5P# zMrCl7VW-BPxSgrv(iYs4|2{FeibI>TKdb#!y?8s5$E7T|)sg=9y_J)xV*jrG?v&tG zZ)ftjM4z5`YSpRO#>!Zq3_UHjY2UY1a90PSe>%A87Zkw>?zO>9+`q0<@w*+03Qll> z6P(}#Cpf_k-Mzjy3-e=0b^ ze~k*Da=<(85D=W;q6VNU@>Tc12~KcUxrO^6IKged$|b#E2u^T(=$z)UxX?K{0*yH_oKT7C%7Lw zQWZeQNsg3D(JEK(oemARdM@P?PhDPlQ2R>tlb2VI?W!jXR~%}4^76t-k@mqF-H%nT zzW1;D1c=WT2#u~f@U9n>s!t2*d@o%+@e}X#kNkYN>d+Hb@RiqXCSBo@a*}E5&xZp9 n2a{m}6_KVGlP>}q7cBM--kTX-KhM{G00000NkvXXu0mjf!Agh* literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^cR-kf4M<8yoo{4dU~2GmaSW-r_4f8bu4V@w*NZ>@ z&(AZz>$xy!?vta%2WqFr7;(kwC(M2-*zmxi0EQJT910*CHmi9ftc4fwAe!n znuO;(U^#x~!Mc6&EaHOEuMTke6$BohX|o{-B%yAxPhLK_f2!Ry4!tsI9}d2QM{}CD zwE* zuSt6A-Cg|KZm^i=?JkweJILu*&^Ng$`QH8&N7XD2-pp%Ct}EckJF`3bc%nGSX0wBZ ze*-uC%FwhpXq&b>lz(r(YLoDtQ~ShOuGcAtor i{8*k3p1Ax`!5n0}ur9ag)+=C=WbkzLb6Mw<&;$U!LhLgD diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_86.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_86.png index a204304332e44670d882ed126760fe4c036ea3b9..7bb6f2961e714ae924f5b130aa12435399e07464 100644 GIT binary patch delta 1094 zcmV-M1iAaG2hR$SBQ6CNNklWg&3y>c5tUQ=852*+|PvID#s?cm%*Lh zpgYex3Qlm__SPp3D}TG6sP~S7i(AzNw>WVkf{Q*;Be4LKCNzzgUgy|zs2@;QVLFRg4=L=!HI1|aHqc4wmMqbCI$C)46JS!2A6f8lY@J5 z`%bHy;4TQR%UGQF0;<(*NN}frWAe>=xvs&T_#xN|6Me$!RyMfI`>q&V*0%**#w9qx zC4A^VeU4leT(xTxCj__SaZ63okCT4`6_Kt8kyjXz&N-2&7?bb<6Mwh#pr2=dtp_&g zwN)O^8@79y;GPcljt%h5W4(P2QLk;s<5!F<;(3-Bj}8OBIw;Y>MFibpLT7LH4l8PE za64~bF}Txv+LimM6x^xp{&xG14es>DIyFgl-+tHYd-HFj$1`KQ{}t91!A0#MGlPqG ztZ&Dq%SnnIM>th>I)AN#iyol2lQ?=}MX!vLw!7e(2bX;ayW@~caDodTpy}@!yRCA9 zyDYe>uTOA-Yad+ZVV2+oXLb9zE4XUWoqTSBD=;altZsrk|J(#uEVjyrlhcFCxTf-& z;Hq4H(`j|v@qDu{amwEAf=j&4t;;orJ10$t;3n>1t#CiJu798xoE5HIj8?b3@Bccy zhjY?o$eZZSv8_(dZr`+?w%ywVcXEIxykGq0`+e0v{1)7xy_3|#k1rO3KAF5ZKbb`A)xZ7eAoZ!X8oG`1+!L(miSnGq-z%IhT6UB>P1RE@!7z{Xg;;8{Fz(bU53U9o*B$uW~3> z^}p{L9~|6Da3DAk93VIl93VIl90(2&90(2&90(2s2a(V(7{D?A0ij2}fHnj{UH||9 M07*qoM6N<$f>$Uw^Z)<= delta 604 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 AasU7T diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_9.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_9.png index 453fa7811031587de15e26c0c05f4548575b617d..0f597ba70cc9a3adb44cdde3094f3a127e8a406d 100644 GIT binary patch delta 805 zcmaFGvXo@i3CA3g5VpUnV8PN3Hm&gi!^An} zlUFlxO%`AhpEy%u@&iVR$$uER>IGyt))lbNzyEhh-~B>?n3IhwEp|lnS6tn(f97=m zXDfbNl)R6xDOj$S__-y#_wTj`c9wii(IR(F*6)9MYMw;Q(?Wqe7pkWQryoE0cm0j~ z@BY5FbkiSj+o}De{wzqsZMC(IVoew>(Ie+YiR+D!`%>0<2*79#(-Fm+=U6b{?%$+aZ%U?;e z+_$^F!<9)#>=jT*YEiH{_ggBrL*ezr*AmBGTmVHHq)}J znRk{wSf*C@Alc*Yaf82VVJQWf`-44qXWc2AI@{`BZurNwleekvI5*utGh8m*^59dS zJrCk`?p^*{r}UFMC|VyxZC3{R%CBIXxnRtt6m>T9zu7&ruN@FA*A#B{-u3sbS?vSQ zZ`&UD+1FQX`FUj1&sWn*WY$$*T4KFpa{Sc2rgPRY?5n+2T>W7Ezh_S;AFTa-rQ-S3 zWse_Q-v9UeRr~7Q_O=gKp92Q!kGS8$>9=z0!xv=NFYBv5y=&jcWhaj;3IA(JBPeu!LLO zIK)4lRUIhc2U1hXzA3(-Nm!<-7^LyR8*v~@7RdR=%?DHt)A%p}q{HNJXmBc^1WL2vTxheKyI|B%Ky85}S Ib4q9e0C}BjSpWb4 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_visibility_black_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_visibility_black_24dp.png new file mode 100755 index 0000000000000000000000000000000000000000..1f7b4cc8f24b2f7632cd7568f236c7d765d8e352 GIT binary patch literal 593 zcmV-X0<#`8vnng>!UtbleXE=B(Ruq2mABs<^Oc z-JECL(G$w{-ALkc<6H0O)0U@vs3K{iu6&?hOLE@!r=*3tv>>NR1z$9G5~oCe+qhc*Fur@<-d25g7f*QIUVExQNQ<_{5HDuo+q`X*Me^{J{{}6Ht%tF^o&_+cAdNO-)&tv_k}ex fp4QRPaUVPY1vc-$n*zk(00000NkvXXu0mjfH$oNV literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_visibility_off_black_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/ic_visibility_off_black_24dp.png new file mode 100755 index 0000000000000000000000000000000000000000..46bf0c931a0ae05a32733eb4b9fe1e9895d42c83 GIT binary patch literal 629 zcmV-*0*d{KP)^q&wHDGIu(&_c13b1fcJ zMe!n%3}Q(Umo!;|N$`?O^zQ3+gU^@ep20^P^8T#Hz2L{g^LzZO9d*=m`g(Q#{R3gW zKB6x~okY*0oX~N_hraTwKTP~-$C@wQaM?4ehxwHF*hJ(r@vV2vsZQ7^5Xb!}O1JGj zZ52C{63b%7wp`VyN<1ndCMC!{9Tj@XrYI0?A6U@U&~(azn??z->6{t8ZeNH3QLO7u zLJVD0(rXTcs7P?lxbXXt3*?Ao}Vdy%dQ7|EX~pefS*VA>m{N5rzoi0Vhwup*Kz z0IrJ?;<8A#>M_%JMI^fkXjv^GJ`%~!`$wON!bZA)u9ciXJGn1DRcOw`g!mjl%aVaT zdv<3MYo3(!qMd}emVX}P7i-ze4lX3u$T%V9ONf2vm2@$EW#4hKKy0SO(5q&2&PGBU zxMk64EltmR%NPC<1>$LERjA{hsIr8pSi@CY^%Atb>-TyIp76GBOhi6o_bpkkPUM~N zruW_Tz_vqUyB@mhhD%P6TuHTmnb*?%e@XPIi`Wo;@vPc9qp#zr|5<+n{d4iW28vN3 P00000NkvXXu0mjf>5ejo literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_1.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_1.png index 7f96d02c2279b09167d1a7146a4f43f50aa0733f..03fd00794c481e468869191530c60e8516f8d7b9 100644 GIT binary patch literal 1825 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VO&PZ!6Kid%2*p3b}NAmHlw z@4vtLYlQ~+D+Lw#{-P7s-mN+lczNT}*Zd6eyY8?uIB_aWK_@s=8v>Zn2uxK@oS3S> znut}3ZY|U)$K~5z|E}jym67b4&k|(ND%8jGbgl!}vH+z?$B!hssvHf{5InUpF+$RF zqli~aQH;pDdv-vUMN)HA;p`(INoD7s->y4pNJ^YMrm<$9>^853E*k$Wzf5+X`OQ?& z%S-u^T#Nd1aqopk%q$-n1#1X;ZIk(OO~FRCav{jT9F5!i*quBNZo69bQ+Eo7YBc|j z0IsD#+s&P4%CG{Bx>>hl_M#2NVIb8(8o5)QIz8&7P94$UP<1+)-5#aU8lxSLKXop1~j5Y$U%b&sgT4GhFy5Q>5HpWA!ty9l9sKJ3h+I*t!0!rOgyxc7KiC`Pru* zC-^N~V^`yJvpPCjj=Pxa>1#%zQ^wAfNoUSh7HHi6m-y-B#2lWdci*Rx(Pm^UUk!B>OG= z^WM+;X99QC@j3g_{#}=mJ#|^Rop18$E_zzu zcqZc2Uj4!>(>ngU?U|W>=Lnrz628_Os;d8%8Yr~|X`EG^!lW`Kz0K(Br)^*N{@ORo z@~doaS*?EYKI7#9x71e0RRrB81hH z?-VJq_!)nkSDn5Wqmb7^8M%|s0@n4d378eE5r3~DXY%~>`;)ary^6V(=3aU}(f-3C zH3wiyW_D7Ua{it=SbyC~+lQO1ZKr`amL`*&cD`G{F(H5}wNNE@vQwttLJ`k}JvVl+ zdT6v3C8)F(y-gHUSSWJpk_XTqKyPbK+II4>)6bX5S?B&37x~(F*!6g8l;6AmY)-w~ zy3F1Q~WGRzFtV0R1Bkj())1E>#12ftrGtvt{?{hLvtuZ4wE=Iol+AAm|-FQsk= zxnJ7J(h}&L_y4kfuHcL}{^FbC@@Y+O(bMy*X2pe+?XBKrnXV@s9vu^9ua}slQT{hS z{n2uxT|V#r-sm%2XrnkO*y-n!)Q{_$_dYuROt7Jf>0zuKl(6I627 zK6^7SSfkll^5^ltvz>1Kc$9kXW-(W4q=x#RJzGpC`Jc%@cN17fEbQS;J^lI2oLZpV zh2|;0Qf_?x-RaAIbWZxYNO`X+Q~3$gD$i;nR}*NJ1I}U}SQQYfl(fp^&#`!ykhsOkut>0{f@r2$G)+}l3AeD0)?DRJ_M#+f?# zZC*eP_HFx$HCEfIJ9%cfTx#C%=?_rL4YlZ)G%i)AlhYjic@Moh!41-!Tkkycn-qsC z9a0y9pEr+6yF>d~yJq%%!^RBwIAd1{=FGK&?Q7xIjFmooZ7;nG~mR zsH(C>g7nsJ^kvJR3X~2?>i}|FCtZ_%da6C(*G*wBmrWHq<#SK|{~_kpaw#lxwu!qP z6WDDUu9v`Wy&{nS;x9RCcJrm_e7ngWKwCY*mO^aoN|_i?*0U5Od{TMasf)!wC+!SK zn!P3TmYSf~LXlG&H;4YWY_fIoys&I?+46JiKdatpZ3z(Cc2f1;wHY<5)to$Eh)w@- z{k*FX$eKAa-Yr7Y@8;_7f6peokY)eoc}(hz&}dW^_xR2xoUwc7W5=|aZs^>bP0 Hl+XkKB_!<3 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_10.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_10.png index 8548e485ea2d4c7840c8c21a741613e2356057d3..d297029399811b3752a13260642d5eee45c5d903 100644 GIT binary patch delta 1730 zcmXX`2~?9;7KRy?5L!hxYpGb4#vcJGv1L&q?H>>Wm}EeQLXc1~P6I*;$R;s=tqI5| zYkm=ogvn@NR9sk2LjbWBgc39yfg%tBEhNw=0Z9N&STcXK@7(jwedpZwy?ej=-8W#p zw5`l-AF7oQ^7YZ&akcz$#*Cj$=sz|Mq}{Sx!$(hfZTs_ueD3Ho*Gr@Jrt#b+^I(I? z>qpM@Cgsm7AeZD5!MHU`Ft+7w=SGh9%N@MTIabQ$jUQ~o1@TynbZN}jCfp7Lil2;< zv#-s7^z?flDAnn2vm@D204EAa>ivDV6)hyAm6qJ3UsA3$ea>L+60Ga;ko%VpN>c@q z&WkF+#MyEe7#zb?I80Fhd9jsJL#}(shu?^x_b6^u(zuW5dtb(G>K8kN3+yGcf=C0m zm;gn&!k`EI3>;H3WEgKRfql5(w5=o!GVy{(O2{A2dkW_DRz>tn;l_k&gL^$-kRHj& z*hqwI4*X`%rn9Uwc?1gq-C8LGu4w4GWge-sgVdM52=AXem z$AB2N=7qr#$-YdS40erM__#*1vk(E{Ae=z0{z`<$)aL2o?WL2qXWu;}h zm5^M5q7AZ2oj|d=h=XL07_KwfAR|Q{SvylfM$_()>k`B_p`Al2a<<+D1A}4=tP0;%+C<(4_W1&8np-thebjk@uFx%SQ zON;oa0Q<*E+X>l$)f@QOARETHMGwKe#*rY2*RSTw1E3NAPFB11g}dbqD5Vp%xl4R6 zj%hbLNST^ZEb-Ulz}PRujD#9_tCE0w5$$;7Nqn2GYj>)1&!d>2pb8P9i$$~DwY|5+ zXJ%gd=(l6Q*!&+o@qx#l)OJVmBSdN30|nUWt7nJqV;EisYXhpA6K~H()l>AvF;@n< zL$lT(g|+gsd34}ags^^6vgpl~Uv*|ri)S<=W#me#DZ+f+z-Nz6+e;w z^JRWIifbM=`8Ox^4&+&WwVm&ITQE=^#48bTZe^+zRXKTl z;`%2w&V6h$hWf2o=_qNTFa#Y;9&95SmidY%9;TJsK~+#KvvklW6OB={kcmaKdddO? z*O3;qufBg@5nD5TvH?w-7Tff7h?i$OUgoZhOzRf73^6Ao$G!cjkSn@>Z0k5L+j8Yh zY=|7JW)Xin)YQM$Q@?2;(rTwUn%AGAg@?1{zAx3(e~%`oeh0K4k44dX*2vsRbe{HH zSm_1mBW7sq5(!v4)Fg{PyOwpNDvaK{2e$M(Y$F*zOx&WZ%yWM?)K^Tmz57NkZ>41& zG^#raXwHeVLKTvw*YV)k@=a@6g1dPb(i;Nc&%*wzi*=1VX_5XEQNF9k{(Be>R@Kdz z3i@tHI{#l}9>&~Z0yR@M19{eUI1H-S(aN$uIjvADbLzSlfivh;xDNk<XV%(LalQdX`QM{y%`)K@(zhKuBt;Ons_psfyV{t>zvqYG*&3FYr<)5Lgs%>U zdZ60`Aio={jz`gI$=PC?*WWkN1k6lO$hQ{EZ<7#nBAsI}?VrO_#D?We7kDft^_I5n zm5v+pks9cT2;rqfC%R2qlKx I0~3GzKQ=d5zW@LL delta 823 zcmew;c%FNLvOeoHPZ!6Kid%2*p7wifAmVWG&wu~JTUH5NIP$G>t*T){L8$ridm?$0 zW8xY9yei_DEYD&)`2n-�z3TN^|lC7Pg6bRg>db0_z`M;QsvU4R?!C#%J5VRzK&Q zNxQ#szEraPf|ekS_A^He?^!c1{L&=gwK+rjl-K&ggCZ1+!HAG)M|OF(dRw8+lyY!=2<9m%4lLwMb5%6w`TT-OQ?X3D~ag)=j6< zZ(HT+fE5Xy%93Xg^Qv~&;Qj5Pv3j23#oS=dr2$+|L(}I14NTLT^0>WLy$8ZnZu|Qr zc5wjL(wSUK1LC%tZRGC1VeOQ8zpJ%X}^1!{blVAvBkWqQ=Vx}QFi+I zYcEg(2>sjW2eJ}`PF=8k$CY}$g99vKXLU^Yowo86rYRkfsi}z#}))YOP0(3@VKG)LMfzNoJt~@boWq{PT-qL?t@)p`i zpAzlQf6uWrQJ(9`@BM{yzPA@$eS90_xpt(+j+LQ;7=-0B#9-*3n1-JponTDZk?`q`h$yC;-zG=c*A)*A2kU6wEH zEP!gAEK@GOi~bCEdOP}tws(7Q4@kqU` zIF9`J0l;5&~SQ^Kqy%r$kd2|24 zxOzq?DHF-6Q4vanlK+mwuHXnILP>NWPkf)GJ$dr~5lV)H^5pldxF;PR4?@YNNZ$C~ z-S!coL?o|Vy$K~k$*4&Fz8;}OC^6XoSd;xkC~-CEi3g#?P}@^`DwG&%f9xqjX`r#M z2&I8G(DoIf#6a6ugc1X7UlB?Sv%N(qG0gTBp~NuTTl*rE7-sA(LTQ+>w+N+SUOvoI zKR!Vyg%Y6@N})t3g;FSm5}`yWg%Y7eD1{QCq}?zJB|?c|7D|K?11&B>iNh?E;v$p? zrBDi`$AVBIlpYI0N$yY!eE7AB9yd<<<4OjN`#U&pT=^9FyO|C{*ut+VGkh0=g7jbq0XKIJi6r`V4U<*k!wMIe)dnev#ebKYzU<;#;R zA(APvOnJ=KIde9JvdF>M8Oih?qpCb+>l8|%d~uRhI{2w4(22)wo%Pn4GMhrV;F-AU zi_%?QZ>sc|tuyPFQ9^n6VEpYMRSLzauUmgHl4*N6eVr+@DU@Fvh+Cno{$J3&ms*7K=_U(h-kNs)=GQv+pGUW6Qz*ZD#uCb2q5S6iSm(W~%G-al zDU>fZSSW?kI`97}uTT~rRG}0~>#TXc3T1&GxlbI7iSMHnAfZf{&C#J;`S-6vDU{aP zcQ(g{^6jQpJV8<;Sz)lBelP1>yUxVf6v{#;V&}in6(H+Op3QNgOg|BmZ;vHF)|ot; zV?vqm8qm|&b-8J8<$E$(=eZ~0l-YkA8_LSB_f5X5xc~`e<=Jc-%9KA5TOG{QtNfjJ zyIC0^>)iKRx=@B*wfImdp|sALH}Me40zYzljWR2iyY|C6&xEq_Y_<($wI307zYa7# zmb;%gtaJa@7RumAo;VoO-bZ=*31WAEth4WIjtga_@ZNrHDKVCBhxgWxqSk+zKbx&X zne^v?lRq&%-?p%luvP)>N<6V@q|LMfC&X`MnTltL+#)+v-i zDU>2iYOmsFoZL80)dt5pg;FRNort^dOkHI!Qf>fZomnv#%4P@SX^Q|}?Ga)o;OJ#*G6ltLL2$_j6^t$yFcn;+F-okBJ#ls;T6CX^@7 z0qYb>p}cS~QmaK4jPkF4?iIWZiC6V1| b7fkUJFchC6#wrb=00000NkvXXu0mjf%(8qg delta 474 zcmX@Z*UvdYS&Jpi)5S5Q;?~={JB6AY1RM_j{XhTO9R}BLGZybYbw(?tM9#$`jv+?M zjbY*hk%{L;Cf74*O|E0onm8eJV!tRvKy>0+F{rpuz2|KCV>`YxEp(BX-FDfPX<90r@EF&Y76gF zp6M`NSzyPZ+O1Ui=*HD&9RW&{+~3`65n8w;RK?!DAE-6rjsE1@6^t2-cR zreSo;C8OkR97|K@?K>0ufARuGnfg0M+^SBUsbXF&LfpD~PMzx`HIBM!2zo6P@p|3_ zwDuh9LY4PHAT>*YY9?hZytDU)Q)fWZ##W()M`D-m;85L{woycUp^Jv4q&JY%6g)lk zwB8gB)l?_T>X)`@ybG6<==|q&xb{5oT*bDuug?pVrZibr9d`oS;dJzpxXhn-EkXx< zB-lYFi1CPX0WEF`W|%CFVdQ&MBb@0F+|IrT_o{ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_12.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_12.png index 413a643943064b0075a4ea23744f5e8235d6ad43..607cf476c649d5eeb57fc0e10fb98cc8cc4b3b91 100644 GIT binary patch delta 1590 zcmX9-e>9VO9PY<0WZiXaU2cA)9C=fyHD->I*N>}dysOZVDAU<(5+bVgc4L(kt-Y<7 z=&ifDr$U5LX7@Vo-eaXQ`XObV+9qj=X%e>k*8TqTJ>T>FJm>Q~&*%9x5{4I@bE8;O zHiZUn%X?{f-M6nlV$nvH#S*z%IY{Y(M9!8lmB*bffTBA>6h${ z2Z}Qq92E(`JD-Ju`sX4Ai9jNS;yrC9xxrPBYxI2;Ku zwWCnf%U2oR=rtb&u8OIBvb+47_==;^2QOSMaqj8pa^`11XoI3KD;R(+8914#?>HLP zyb_6db_{P{6nH={8f{Y+p@H;R;XAW-zRYy-yC89e%n^O{Sxy00BC9}l4$L}8)QNrG z+A&ZkXO*frU{}R*Sl{264BJSd1)MT^@y|Mssx#&0m1|L|Q0MaaPsfRYZy(mG+2yil_0%0{yx#}^GG-T(L?7dHcoeqV&G9aYL@Zj)&) zQBJjdcVq>Xj<6($)zj8EL*2>DGCS4#uJzn~Q3LIG4Ag9n2ukCPaE)23kPYns^2pOC zaqPPoDO7S=+JF0LS*c7h)$#P$EhKIY6#?11grR|HXsf--OH<&6fWNkFzq*us>%qu0)?gq~ z@qu9W#5K)UCuWIQvr~m<9fVJ=!-a#zhGC5*FX)6aI}-?EJ4IV!0>ssh_f-zt@{c$_ zpXl}VL4rw7b69bbyEjYgh7W1{D?v7IHZ#vu>mN5K>ELGB?R?zXm^~oK?Xs1I^_X&i z>~SNOH|AeGIS>8lQtX93ED4>U2Ta~Sa|03|tq_&0T6LZkRNL>wfi0Qc<@OBh>A3&R z#Ovw)!?a3psJZ+ya{))uV#f&1OtdfkM_G9=5ajO1vsz6@$z<$;~Rw;o^??-nn33g8$_L@>kSAgya*} zYL2nk>|+2ldE#9^M3iL2`?vCkybv%yCp&|{>Bx(HIlgu0wec(w)Knyuw6_uepx@+& zdm{zAx!oPSho{!LXKQsUVBERPx+6-7TlRko3W9mLX0^iCI{_%(hgopK%IlH#fQ2t1`L8f?0R z(2{5rzf0*jyFdyT0>}{i$3e_AL(|)u3L z(Wd6#>E2oGIMX4VG46YHMKz!q0T;+G#DeEdIu^AGv} delta 929 zcmV;S177^=5VZ`DBQXX1Nkl;xE-T?7=9?F18la?pW! zUHbzFr7#{E&Q2j;eaxr6C^}IP%J4w$Hi3lFv8-4NLTOSQ9n3Bhd57cNF$&$TpoH?^ zNUoevLg`ovrBJ3$jI7BfltL+#LOFV&3FZ35>{#Z_SD_pp%F3S^@&5{?P(~lym2+As zH(zKgezs8NUm6PKSug%VIXIGkPhPpRLV4Pxem8zXDU?FlB$Ck!?db@?4&~`DRzfM1qe6MwrC-(WXGe!J;{HzSODGLyVJJ_2 zZ!F?%jHoVfLMfDqfw^;ki71qxZExk-sI?`O zLYWlE-`-af%9z+yU$$FYLfL*mBetXCgL_v;^2syuD=!HV04yH7ax;9j9@6UwTGF$iV< zP<9T9P>N;AP2oa$?!B#dz6zq_x>)%vR-tS>F*2UB=xnlnTmJetrw2hOg>tJ{MsB;a z$@=a2?O`JwLLihvxy2;O*k++z7s@H$gCmqenLb&vx7B44cl|a^`+!C$g))5d0F8U# z5RrW;k9X%&&r7LjQwk!OIByeW}s6_L*m7o6xDwIO?npErvn00000NkvXXu0mjf DX;8iT diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_13.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_13.png index 95163ae519b10531ec9990ebe147b7e7d5df72e6..0121bab0a7ab78ae5bfc2451856cc2a6ae93f255 100644 GIT binary patch literal 1675 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Q%-r;B4q#jUq@PY2y`5O4|n z```a?pQ=Gn`RY}l=5Unt6`pgxF0}3FSJngT_4FAV0+={d(Fg`7PK7Dx1coZ0CQMae zoy00dvlhxdbiV!3ufN(qcgFWgENqz)@K3$NsWae{hC*hch}S}vg(6-pLLg$2xRcSx zpMRfUSDwO=>Y_1!j~s`p(o3Td4M8tE-qb7;psFW}H8_?AaH%R)8c&&gSaAx6syw@+ zMr#mI3D|_{>33I7zYjFMNSn>+rLppqjwfdW{CGM7l&0L_YXp)UOB*;;olb7{elg{A z{z4ax)=z;fKy#1WT(a2<#0}DD6Wil`4PDksK;sNlLz7uHv*No7Wr$av$%q6 zj46A-t?Jad`Q!zN=AxI5`amZwKCe+;#|f11;OhhH*PH@$5zw5@fJ+LK<~|0xBDF%} zD9DI?_bd<3E(y~Fx@)s%qaetVFE#>RU2#nQJO7AzwOqQn-6^`Ue@08 zeZwkjtTzMAn43I*_wg??fDx$l^3&yWZpSBqV)Pa;fn+{^`8?)r!$#v`kgaEm<33j3 zn7I>ZTadTw&q{)cZleXdXbiTeKjxihU>H@)apy~FVM z&)iIqBh6Veu6NHZJFdXKZLX7~z$x=QQ`1*{=YdXYHBz3U9sgxZb)eOTw<4z=u|IiL zq52l+%+{g|4gWcBm%ahB6Eytejsa~d<4Ud3_}?{Qt`jIYmPP>m0Cc_W{gys!*&Agb z$G<$V4d}j0Pq%~p@p28&!9ZsM(U!|#2iN>r%MJ-Fx4*4@(vNPvtee85G6m!mU~aqA zm2<`lx|yFl>^qW`D90}w*2jLXFyg0?Vs!Pa+CGXyytS4lc)VM3w}DI zw8MY;Tx$uC4*%!{;T;9k3^yU017M1DCjTxuUFPpYIuypz9$FUD1|K1QS-zR!X z^uO)9BgNZ`znxnVu&$1I7t5n7{nu(=+phj*eB11u201v2Ez+Pjh0^B1~kyzFWW_;r>;Rq3YWsSZX#pk?m_I8=eg za&-We^{l-Rc@3njwMc^rD3~c$GcRIOHyI{)KXt3Z3prGa?^|nvTE`V5I*DVcrx9@>^ z+cEjKf?j>Qwy3kY0F|!eoD4LNV=~CHq__J%TXU*9aVkt{nLsgOm16ag6DKxPu`1momvTA8wj^~~39!gv@O1Ta JS?83{1OT_KJ~{vZ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_14.png index b86c8002c559c00aa3b30a69836b710d9acfe6e6..4c142137263bb6ac841c2bafc9580c46942f844c 100644 GIT binary patch delta 1680 zcmW-gdt4J&7RL>=<V#cp{)1a;Vul0>yXM$C%Ch=RiR;K+%MP`pq^~XQyDf{hSK|+F4=T zl+0)#Rh0wk^O98)IiUY5BoxRb`=R~gIiM0iB-~pt3uG`wLCtUD`=W_5ljDv1cr^qJc|xYQYRy#=;nm@~uboYXU8OPh?&FQ!zbFfPz}#2eQTlJZiaHfn z=O(Dk-Y`~Qhg|qR(+@j|$2_JFLw`^uJxLHBW4-(s4fK+>XI*{baPeqiEe<3U zfVU)&DKV|9ipAu{{Rnqtb2ifx#`F8KPoWhQ?1w`Z*hBR0f3MznVmNYPJ&)hmc7Cws z$h$W}l4RwlEmqaaV*gPfd%Wk-V}Hb?``X-&KYFP>#>^h&%Q>b67LflMhWF5naYbsM zo6xkGJj0hdYi>X|)jr6ty{Zx?-#XEJaM~ba@uGs z{UdcRKN+C1uF(VJvTeuA>Nb;saCzcq{H5l9@VMPG^5PEt;Uee*fw$Xq+}ml{8-UE1TxSH$ubYF{fB9x`wq?P+(2?-nqg$4kV6`@DUHHj4{QS!9F!*UsQcZ@B za-C(0Tj2QBuu&3_?ZfzrhpQ+UYNbT1<8B91q5McWbv}K`a zV1xKY_;@a}N4uPn4(Ex;LD5;OB2TdRz@|79I*^GLG91| zxMAm__jhW&0&%u8_4(?7&wU-fc=G(yzYiUqicJvQ<9LK$V)x0XKEoKr)|kdn2&Fu= zjd3_ILMw4KYQW7kuh7Z{`e%31(XZENK}bEvR>CN!(9sItdg8yzPA^$Tpn+{(n(-B< zvMxUVr6XbM$Ma)K_zGmI9)xbEP~KS|kG>xjMWAIT05#fl{+Tjj+VY(O_Hk#{CHCk_ zX;QdS^Zi~#8y*d4vopkW)WZgg5k=A|Uy5M;@N*rW-&oK$6S296m#cIQeymXC2PK>~ zp*k%|CS0`@!_RXEUMFZ)&kLOxL5M3Hb(*UYv};)mN8`#xlyOEMl~uEtb~YBUN)Jpn z@F>xR=;hv(frFf2D$jXQTF*hKMHlWgb+{F|>+H)0MnWF+-jA_`<(EX*kCBNfD0waG z?z6SXpxvg-r7}7=T;Qz@YrSFCQt43Z>w_rLNnjZji<=*Pnq`Y6Q<*#GsxQb_jvLWk7PZ!6Kid%2*?k>7*Am9-A_rJfoZk(#8TS8*V4av@JGp^Fd*TI=i5a33&xuXU(43goJaM03eP(M--T##zZmnK>dAYst z_0+ap)hQgQ3j@~O(Yw2N!dLz&0cN)Qvt`RchB=^z)uGEDQTtI4Rz&5_r zBUS=l3q?*f%=OT?zy9{s+uj=Y*BS!_j27noT-Zg=G{xYSKnfE+HY_2U)SS78m&PZ`R@d-I?c>oE(S94+2)g>?PX3gt1X>0 zr#SsgNIxNS>dpOgAO|cBkmF9BdU-|*P}ioPiQivF-oAT%Qeit-pQH7mlL29Nl5rpt z+0Ur?pVP9ANqQEY4>U8;`ryl(7tKMY2%iH=*GIR1I=klLRIn8@lM>$U+IxL+>W*u- zeGP$TUw*@&&Q|yI;M;eOKqoY(O}0*(D!6|2C986KpaZ=Y*4R3cKzt z&uXr|<9{S{s&QeA<&3cUl^>pc^^qvp?PU43vlVFP>2y=4o%ILS?z#5++|LrPN) zJMH|v=lBbKQKK_C+CaxoFAd+n`;ojh(9|vMb*r6U9^3nRTIttc%PoTxdIfz zdR$MgKF@NJ6h5`$DKN~tQWA9T?${o$vAb7(p^VTeulc<@3)h3AVy16e+%oC!pd^v{ zyLXS$6l=Ef>A8Y`1y5Y@018gyc>4c8C}zAC<`mx8n|0HvGVShryYIlbE2_W4CU&ZF z;Ts8&g*h^(c*57X@JBGe`}wPHSM`N0AkAEQ&#qszoFcle z=atxrF7r0QQ*E11zPPS5C7tc1|Ng~Q0-#vS)mga4+G2g4*(F65P|~riDJZkG5(HYm zH`zV*lE#$h`pt6;{91}m^i00MVmbL9i~eK*mY?E3p6ds#+vMWcslS8)2s~Z=T-G@y GGywoB->#zo diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_15.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_15.png index b6900ea0fd35dfff5b5e034fedb20a00dd8f5759..30f64f2597efd81c9e5c141479f4afe91a07ee13 100644 GIT binary patch delta 1257 zcmXX^4OEg>7}m@}*Gl{Wt6}+vpJ!xd>>S;+j-Q}`rC-c`%+yL*t#c}q)R8G!9~zpL z@;UP;>bK?0<3h2TGO!=xJ^vaQn1m~lJX}=-KFiGd+vFEp7(j~eeWxFs$6~5 zH)zEWixHXd)ssnmZ1!NV3o~*`(5DH%$RJIdruJo(HT^(Xwy%M<`?ocAOK&`vl|PLT z*V(&?gY9YMPdx;<-_!K%x%m~U4{!$L`;CdU3^yEu6w7-~uEPyyp_Uj1L}atk_RJlq zD{k0#T1Tms;zJSH1b=V*9X-5KH9D*F#!%EOkkLVqWPP>Yxe@Wf;6RMvA3#Wz zU=dPW{9nAx2}n`gVAkW_DZ#yAP?UQNK{-H2!2+3qE?v{e;TTBhiVwN&0D-l)ba|hk zp!Oi4Q6CD3EYZ=pI~(QD0mPjx17^kNB@y1&Y?{VdN{cKClIelJE77d8}|Tx)k6o|aKQ8OdpGReF2h4Y z`7@||_?|soY`;8G;3qWmw^<8DG;3c+LupjYua3bdyrrIVea~CE({2PyDdSfVk_7Sa zszRpLHpM+=5xA;5uPzy^Zd*;&DUfyBR3!XD1qR=pbsg>aQctB4ot`RcKz=LTJ27;NHJRFe+4=G1vzSQV7k}ro7&R0BI{VXw$w#Ta# z@v7~lY<`WlYeEy0mnRoP3IqtLrn4`5i_bs+re8887#HebIe#?nT=GsRx3Jy(_A_}Q zwbc<z9jSkxfYUxe9sZQCJX z=4`T3(RFxnobSfQ-PHwE`kUn32l2lX8o?L+Bx@=RIX;1M1kfaPtHxADF_vz?!<7xT z_Hk^})!QR;0?5XnPlCY$TftHVU@)II>eQ%DSBGVFEVUt)^fJWRSZhlJf{sQ+;}h#+ zbJn!i+^zvNwEWBpAIZ8$r>5RW<{ADNGyaT)qUnSAW4hs?%IAN89ycHYi>CI8K=DMZ zZ4TpGXStG-!8B}p7Ij=C>N9qwd%y!T+WEh7!fxibrWM`UggHhfEKFyuGWNXek)KYX zDif2Sl|9-E;p^3`__n5DQTe>_D4du+Iw&V_wH~aF8SpXW^Rdd@4Ig&N?SAYD@V^Qt zo*~{Jg!q>q@OoYB?Zi?Cj(FR05Ah2J5Ai04HDvniN{0j8%-u&vD0X16m~jj#eCWcz D&2Le; delta 531 zcmbQrH<@#SvNlVUr;B4q#jUq@qxlXQ@VFj)Q-65_vs}tg)G|gn)QJD zX%2>o6N4r{U=p3Iz$`ksk4a>*9J4r(UI7#nsh@OG{@bcb)$`m7T{M&zz4T^Un3AoL z&)Km#vt`obg>U2pf#R8hr_Lz~dbLd2|0qCqPPB8Rt#!+!2?774=AGMY0b$p5FTJTa zCF0w|jUrw^9j!qcf?j2My91P_M3gNA3%R-ig@DZCEkMCO&V@@}Zu)&yx_;r2P3>&1 z8m&SLOUyK;Q{B z0*Yk;1tSE2#sM7%Aua(8m^7{Smg{qnBbEkmsXCoJm-=1Ytwrdx-V~77)6b11-xXRW zy-4-naeF6F!NY|p>fkp{E{-Pn<0{c>|ls^uN2p`joC zG&Jv5+061ImLM3VLI>^l$vud3h}V4JC9`!C0l@2P{oiZ zfMbg3|AC$VeRh zkd>Rch~;mao@Q>LOBC*i9DGd2!xq~iYJ#7gr><5)NzYw*_`}%*Y{MM>dUnS9?gciI+e$*%7!K3Xa8bDZzH^VO}|Y~SoT zJGjr~2FO1tu=Tz41{vq@{;%kqOzYSL&1lVK?NL4?w7oaxB z&3Wl7UZV6APfE}CvomM9`a4>i_#|d;_gE+nag0bUuCMUY=Lm}#r=?p)P3ft+_M9pa~bRb~h?v2(a1Is=X`As;b{ed;U^OS;5LWE)YCWzkB zBmtS&7Q&YcOGdh{^%h)rDaa-wW4!#H$`nIRyU}BkV&NzWkt|cbJ*RFG$ObBE=f@T& zV;gLsEMB#`(m-*W5fth6OPA_FL@Jn7uB5g+VG*S%uSJV0BL>{Kf4Z%@Y`rl8t+>l> z3<%cgRc7Z#lh?w87x>k=ETv>#bkh6$8qT9cXES`>3O#L$boWg`2L);`-wg;`gB0*24(Z{=e=@wM_cytZwaamp&>zTXX=#vJv*)6# zEOY(#=FH(>=XrS!YZj}x_r5^;#RlD}{l80$F}b%UTn88-2Qn*^i=A;VKg+F7&R6kb z0jEN~u1BB?UNCT+Jv!w+EkD9o>fv;5+X9`1HOk0V^Pm%9a(&LDQYm*XbRB{=(A4=3 z=yN7t3^Dvj$Q71ci>VVWsD1dy%4$@F0WoF;)k>kgLwb3|)nHHrp MhQ}`Y128nY$i54LT4MsEqQ`JHiOjTe_#41I% z7U~pireal!=0Yf!Xrn9=Ofl(va_0H+vo)uBI8?ip zc0P*LEDpb=>g0Jb`s(HH@8Iv+Sbq1- z8;ONSa@{oqy<`%q-82dt-byY!@^EYRZZR*JxHnN6g%y%p(}A28p=yxG9W_C(g+Qly zvEO(o>e(W+Py|G*5%shNDcSA`lJjf{()g%u?$jC3rGi03AjEFXysJ3HsnbJgO2<+l z!2u%9^fD-Q1_)KG_USsm-GfWjNps3+=LsV66J0bqyHkT2T!a>?=uPt!6!L7DwBLE- zqgbHoAgd|LO%o-Qfof(7owjC_{JZC_asMx1z;LHME#Lr#L}x?E?;ru7!wtNTIsqO3 zsOiyt9-z@2%QY0HFmR|g1TbL`3{IRtIWz)86;LOpDzGMEm146ShpE_R#UMl#qRkq288&8*Ss^s+qfH4R<8vXI}Dz#elF{r5}E+=txZG# diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_17.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_17.png index 214580bcdb92cacbb2b79e64d2c753c5ac55bf8b..a097a7f0855518207915a148197b3605c456f568 100644 GIT binary patch delta 1776 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 UK+-?DPiH|Kc5oQ07K%Up4{!EgzW@LL delta 514 zcmdnVH=T2WvK~vEr;B4q#jUq@9s8IJd0Y?P`G2W^c?zpv(toX$-<#d*iu46uGav9j z&B4$j3rOj->%& zcF&Y&ICTo}^fp&2Oo`!4UG6Z0)#>EbfU=Gw`|X+|xKy2;D~-u}IS$pvg>U}+iu}5rb7_Fmlw`eC(!~xMf?n(Auk%{yqS1ONRC7v1*hUermLQGR zAfUv&sIY}1UiAx)Y}%y-6xg_?>0$BX`)QG^hgEw6xRwU&QWNx&(#Z+3h?(rv2@>E^ zb<&)o1ZH-r0EPC6cmfRo8W#&u-~m<;w^PsyC_K>xXax#!l6R?x(iDzV2Mt${^$SHj zfm;98i?jemO}HU)pRK98VwQ-{Sze_M@PHSIeYiLj!4$ON(Ai;#PIyRG7km zAXq_6w~77}C-X3CPoBUeGFgFH97tz~tNdoV{p0q`+gD^_7=Xaj)z4*}Q$iB}T~)!| diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_19.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_19.png index 3ddbd875148ab552f5b832e717539b70151c183f..8c745458183bb2b6fb6025ca89749bc233a37935 100644 GIT binary patch literal 2043 zcmb_deKb^Q7@t12#wgz(r+n=u)2P;NtjsVeSCVn!`l!j4Bn=@nSX&vCW<`%2Ii(Y^bpGU3d}SG9w0rtmj<7BCv?y0YTnCOQhNg$+4&fM) z4+*_B>U2vYWE0_tq{_=36O*q4gwv+Esj^J)K&;CyT(hyOf`*}-PqEW&bO(Iocf4Ru zP4CZh{3LMv$d7vcz((Y2!h{`S zw>0O07%qsBu|#h|5D4;E{w3bLEdy9*Oj3V%P+$Bg0{i)wI{<+I;&K>j^QKyJZzzyaQFe$rNW9K+IbaBSc*~~fvARJwj zR~r}@|1#Ce40@cdBX)p46UAfwL|vbB9TMDKot)QgfsqMCXGTN3H!>`bnT{Mhk#~3p zM#iS*)`sc3z^Q7oqFoqD4S4Aq*p+NhirsOSjB`R1NA@ds6j{9@NiIB+O)P6+L`n?^ zzNUzb&Vfx)trudIHAjBjL#*th^JC^g{JKPKaTWZ2+CKpiBU9}ghK~5-6GpuTF z8>d7Br;#{~QkZ7B3h@qM>+yreQ%oDb8<_-=mOhD`$-}zWx_%E?y{rbS*wNOVwAzA; z{0AM#PXJ*qIRi&ajO?9(;0O%2*d=Ns6yWF+NaJCdQHnBEZjCv_!#1UZX=^A&+b~=z z)=<#w(UlDhl}ij&D2>+710$+Dw>^adJ}4AH$8e3z=a(;03k+i`dMC1s#crWTa7?SW z9qz=yru|u9757$$#ANDr5Y|nV^0-V1d=X$W26iTe7E0KxHC(Fg`2Ks*YE})?B*{4* z)@X_+iD=0Z3@}>p{b|xrNLj(~c4u|d$}wR@61&#BkMt1ll_njWFT*-G&En)Uj6ni` zYb+&aKf@QA2tGV1L(pLrgv~bzjL2~|ONC3V8rCBr!hH9!^RHG+EPs*ECqwe>xgZD^06TYWQW6t*0Z8oGh@S7m55i+?BZT! zfr^y2K#t0Xl?htq``z(=RGOWT_j=$-Z@MY_i9dF!>%#8j$M1=UeU?>*i|QgP`R;26 zjrR6WPi_k=6gjp0xy|RPtLg*H;yNa7tPwhuBhSf^`X+m(-8`q62@e(}RjN;kw6_*L zb?^1sFVjt1HhpUm^jf&(S<9wB3*PoUy&P?!qqR`PYoUznsjTg~oJ&pBr!=$cT1^Sf zZxQ#(_S0xBy1h61{*jAs9i1|LT8-W=c*~PI{rv)NkV2=*H`!Beith?I7g3+@q&X$= z_=hK}0ySDMRdA*LYK$(F@xK?wy)PQBvZdrEGhlcn(_ zr$~z_`~T}ranhUwG$6ljSpZk+vyZ^g0y?SY_pBISuB8D$#J6kHED6trGICzClh$xQ zJ)tgK6|**=jBn}P=4-7*uaslzm&e)yt&*D09{yy0o%E`!wynbUNdl+-E!-mi^j|>O zA68Y61=D-0%iBJ^JNs|yVk6T@PB$M&ysJw~tGOogd`f^{-;w|`uBCr99`_q-ZBo*l z;9OldU~kRLQ*^5}liYZrwdijBlaOAZTtqK0db#&P{4KGgzTsrx`mw?%c# zl($xx^7GiUbBh(`SbbKzeVQ}%t*7FY=gyIaTtL4bS9krAZEW{(;Tkz+U^-Er{OAdg zyK&*14V>$NPFQ_V>{Ri>l5?#SCx%1QGmC)Na)!wV*p(-qkpd=cr1T9;`}`6Or|KAv Xl&|n(7XPx20SG)@{an^LB{Ts5(;|!` diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_2.png index f437ec2a86af1ac8c54acd31a9c21a358585f096..03efa6e64be93b29a2bad8668070a0f4841c8974 100644 GIT binary patch delta 1745 zcmV;?1}^#041^MpBQXfeNklTg&=89Zo&vR)`xuls}uq#WG~rBDiG(O7m5K-#4cp%hA?EI4U9PyVOd zZ+a|+@=uR<&$Lk9nC#O-xni45jipc)4&`rNYf>n8PugjrthQf;veES#p{y}~p@j0z zcA9onDU^TN;i;jlGGI?^zg-bD1}le zh4S?T6-qw^A(TQHJ8({Z`Yn`xTudm1GU{mZ#8IVCX8mT4oBf5-(d6ZSfgzMNuTlE? zs89-JlTdblD8|lUzWtG{Dv=OMp}c;oeCk7mH_J2OsOD5C6TeO>ltNkhs75HyPoSOO z^?vhnu0ko4V~-|J9aVa8@11?|Qz(<(tb|f1%b)t~4y6b8?t88O`f<6$BYU9~$|Xk{ z3Ad>{S(iy~R69et>I(^fw!Kh_%2BBl;b$xAOm;5XuR^@hy}A_w#-8IzqW8 zlqZiyQ@6hd_X_2eP(JzlLb*Pat6pCyg;FFJ#?pg(`-O7C_7}>Ap-j3q=E1!}DU?Ea z>A}5~qp<3OoC*6tD24J`DF6L`-$E&rLMfCjPP=!# zwou;L_NVW?Ox+JtA~`CQiLWn|8KF$R@qguQP(tZw^4f&;#`S!AuX=h=dL(zfiBE~7 zPzq&iD0klU|K@kzQ|HHieo{2u^?KGA)!<=jNzTRv+A_PjAw7TCeG$OnBpIAIgNmed9Wi zQ1(3yO$p_+u`%+y1}g{mtq+KVvhVs#{#H=cF+cW8Swbn4LTP*m<$;}X^WIDoK`6~l zp%lu-N0rt`D1}lee}z≫FT(451WCp%h9xLnwvv;<^Z>P?p{iLMfEhL)raVrfv^v zIJhf3kw{$nt;e*-^d*dqaiL7P*<2{+9{EgsRA2S8C!rKdp z<5DQkhN;@}ba_-?iRBZ?x|3cgGeUV{c~-BBNDAfA)7R=xe~}i-eWBdBJX79eJ>h)F zJC;y7qD=mo4o8zhd2C0Vel)&N)(fTUe|;m_K9p5{fpO=g70P-+70W)S-0eeI@ki^E zu9FF6uZdo1yGL$2k*s+N_w85Lgwl~((sqx%)+>^=V>u}<9mkyI%#UQdP*&Ozt3MbJ zO6!!oobg|;e-z1jvHbRLiHdbfSk4aD*;|CN!;Q5+EvLtK+P<)laorS&>Bcg)R3 zq3r&{N`hj&QkSp&kDiI7iD$i>cAJ|GLMf7Ncd|}3e^0xo%*{{g0Gt@f-KR;Sa(92- zxS!G7Y!J$%9dY7XPnS?7{y2vv@S(i=1)5S5Q;?~={=0%SkL>wIN{l65n%AxJhjQ6`%i{xxzV*PBukQgV= z@aI*k*yM>Uq7!R1CSDMqEWj!<@q*~&y(}V=16ag?boInOafpOaeQxrHU%%ZoH1|$Q z`P=h8r^dfd?c8af(;gbFK^ojGpPm%W6l#8Bt+P;P&n1r3eF5+O-Bx#5aOy=INPhCM zP1Ovm=5h&oEfhJ`BAxrZ_y5a3v*o-O{&}(S`x>!R9lfd3-B=eMY} ze){5OtvluBwABG-R`JSHEbGlQ7WT~azw9>E>F05#^-`yFwBPjpEZ1Ukn+y_qc4(d0 zsT}P!0q1P~Do#1f=dQ$W*kY7s<)k^q>1TpsI$!FyVppe`^#%%4oNk&;3Drv$I<<4T zT}#o8d1jv;^7u2&%v2Qxxz15LAVotvo=1NQP;2wK+b%~|9=6@S?`yr7*Fu?XpIrL; z?)@yg*Y>LEb4LT`(tx<=k6~`T@6HIG%2}9G+Bwx@UAxiYy{F%O{T9FjG|hzDY6oc^iO;c5cfF?g|Kec^dNW@PY zVK>w5PLUtWf`EoxSuC}1&wj?ad#+bMEnNpxmFzxwyW3Q`JJOqV>bO&v&Yc>-mHNwh z|K){W9^5Ow{OjG*B2o8mKy}e>Qlfgnm7liz+zOn_^K_lG(3$Fm^&%$^w}1Qp*Lqp+ z3xA*d=l|yloZ@`{L+ljO_0M~aWf$5ApPIe+;;PU0o2y%mRHpdX?GJdz|8(6;?xg`; zPmV=Y73A*^@SE}9>88Pyspont3)Tm4Ee&YvQ8V_x4Aimd);0shNspao*6x}tcW1UG z*Y15MW^UkV3DP+1^z-X|prh)6SeI|Nzi+fg^0U8hv-MZ&wQEk45k1v)S^SjL!ZkGy z|DQX(pyg7AQBL#L$5nRw%WZ8}RH^vCJ+j;-2pDEL8vb!#_J5l9ebw#br}`WmdKI;Vst0FPMJ00000 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_20.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_20.png index ecf200d3970609ebb20696543ffe7b38b95e7094..183f94e98d5631a90b87047eb666eb9a17b03f71 100644 GIT binary patch delta 1339 zcmZvbc~DbV6voB0CI%6Z06|>Xc~B#Y+n_+?1qz8FVJX(7s7OHr1PX;B6!OGjX{;OM z4MGCah#^&$K$S#9h}H;0#JYeI2@q17SYUt>K#d8ZkIrygAO4F2Yq&GaB?^~qjop0DDnyPeAwo8)*j2kw}B@bZy2+-gw=e^R?nhOFV44^ zmyQN-u9#VKHkDTPr$NEBdA;p4~%hGz(e{@(uU%>M~vQ9;KDtT3m;T#%>yTM|yX6?v@T8G{zIeZc`I@`q%vb=UX~uW7 zFr(vhW;-P7Yx~n%8NE;)y^e#{ULP2-d&INR3Z>h!4nx~IQ;+OqI6|{EFMHrWxMRv) z>Q&B6svu?BMpW6%B*b_6!d{|pUuPyB2k4Etw5A4H+O*?nHAg!3cK9G8d>=ydd zR)0y;LU=WAW;&-YNhf2FUZX>P{q2seTo&JtC-c{dxhX53-HOpjM?xPs$Q(t(yEh9j z=J2VeeacG_EKLA}^a558(PW|dTt%9g@2n$QRbB?Y;D_}+j(n;=4RkOrJTIHY{?bdy2$JC)Ekk*70-Rlg=WaRTsI8agmJoYc4-gMD9e7Bu zooL;ZV%(^Ch;k|e_1Y4>vi_dU2{!2P6(QJ7Mby~IN77za-CgGan{91h|0BB;C!Y!( zt&{1xS{&`=VwH0l=obLfS8R)8VH5TOp8hx6$BNBC{ZwF%?oMqx+QMPT(G|gdwz)x) zMidiZdTe$UuT{XWg4XniBX(9-Q_VHEm^is0o3u0v6#lvQv3)LHFj5InKVCGs9|0wj zUpB>@ITv3l9!BzH@Ks*DoKBMHuzTO{2e<#?AXUA^G-M|V+K ziN8P{Q*&XTmgwr8bH`WkJtaP4GqyaEo`>mJ;8(CtEDEKN5A0LuJL%93R(8Y^o*bdD z_V>@dIS^CiyYK@hVcNZ*oL#;4DxshOn=oErEuTsj5;%Ld2J>7FB0YMaumK+C8y}~q ztTiZ!C-)cYglOy)JY78hZnh;OrD6j|jk4v?Q2^&L3dcEyvPYtu{X^4oyX{6<*2=zf P%aBD5p#?XA$Iko-QSN|p delta 404 zcmeyzcY|YsvNnsnr;B4q#jUq@9kY%&@VH#u_kZbIX$fhasMsq0H0grIe-^V-Vi|0r z)EFkF+fF<$Jh4XtM5c*OJR>$SO><&O-NYV|`j!XD5%29dRFeWedERAQ=%TT>$>?P_ z1CSAIXYSM)z_m1jOVvqp%KtwyEt4(;`2A~I!J!Wnce5$~8m$Fn$o;-E_kM_=S4+|B z;@ct%j|7_EzOoJ|o)o_Dh+}ei%OywajNM98EYOG-H+R0dcyc2_<)3#)=lRWSOm>WuC7C5Ae_#`tEXB+# a7JFC0|J;_dEl&?H0D-5gpUXO@geCwxq@0ET diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_21.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_21.png index 3011516b30c389d05cd5d48586ea2f63a74c0a7a..a80e84b8e68e10d124bf1a5dae3068592719d274 100644 GIT binary patch delta 1198 zcmcc2agTR`vM$?FPZ!6Kid%2*Mi$+65O8t4_y5u-UXhTBhL@|(^?X?GbLJCA0i(S= z!=G2l9FrF^+fL?T4z6EVE?l$kcYA;mU;n>s>%11Bg=@H;wy84!88WqVI8>c9rzB}@#ePN2HhPkbxjbI!|p~bo7=Ys^jT8zF~sLx-iG=<~o)yF1n9I9qNHyE1q zIdujk$+QYd%RKG~NNSdLZxNEdW1%$V#)D&m3y-jw_W{*aysejza$o48Vc6!>>D#y2 z6KJZ4SIeaTw_oICXioy!4k9X(&j@(61ZlViX$X2P6!C1Cq;F=Yw-ab{kP1QKQbdOe z&=ZRk;Ko7BRGtKM;3gBRDN3CIN?3`+gMk>s7VJeQ9tKKea%aXy`oX7ooGV`}L8>b1FKk zAAjApWvj{**V!L>_g6mtvE1%h=I2`FH<{Hh*Ve1cEac&C4VYKk<9Yn=vB~d_1#IgL zchy+_|82`-|JswOK{}JpX{p=zE#$G8?Nv89rC4MBj*vUQTC}GeU3kZ+aG&U;;+b=P zwaqrwodOIi5V~noxG%k?tS)bF&*M$e8m*U_y7-rFO^M}BeR0Hcw#cb#K&Lom8gecL z(zW%>uY)q(Ra%39>XuFl;G6ZlMT0XnQDeSTO#0+=YPX-Cms}SRR`>SI%_qA*-<4_F zVyZVq-{;TD+iSM6E>i6i-oH&_ij(BtnNs-;x8)8*f3LVB;gwzEs4<@-?e){N(=khP z&z&@%CvYltq0L6l;J(zus->5Ym)%+Du92<3f3EMj`g!^b-$Z&lNlJOXFZ;gVM`?=F zPPHj#-&g(ixG-0~{gVSgwPl~)UlciY2k7d=$?vcIxOq_I)EOYB@%#kg zB+V)3&rb~CdU`5gSBQ}J!ZR`6z>qkn)>;&!VgBxA=)#=%JLlBy&tAO!*w1ToekHXA ztm9VQnLhQLT0PL`x)Q*o3(O_o)y}7G56Fv!>b*3zGk|O9=9BvZ)c*eqdK4uDQuFY& zqeg3yug3jdF}FTE4xX*FQ*(;+vmlM``0ygL%KE;jx{Jo8x}2#Gl5W(P&HTssRI|Kq z);Gn^zW!BCKaVQae0t~T^mF_E$=_UNR;~A5C{lkayxB~167NErTAA&2Q$HTLt`u9w z{q#n}yj_QXE<5jM_m}PD%JL=od)|Dy{onAR-%ri#m2cCdvz#nTnP%13DOFBZ$$PW} z7!0k#o8A^F8&0`={mM1(@P#o#-rdz@8p7AEJiGp*Ws}W}?egiDyI=82C;dwH`Li>1 zAy2Pbv3bBHw#R7?tISv?-nX5&KxDE3qxQu60^$e%F|M4vEA!K|>E;YT;OXk;vd$@? F2>{|FEQA06 delta 406 zcmcb|dzoW`vL=g^r;B4q#jUq@9l2TzcpNU?`+up5Su?|D)*kjecBvEFH_wa|XXu|M zIN6`gc5*(G=p<$_Aa!Q405cneD_rk%ST&-W->K80#qRF8-TjRS7oH|vH z=L!K$Y86`eh226Qa}J7p4ws&se%`a2w|PMSbA0U}dO zsWX6UsYZti&~aUGBF!ZTXu4Z_kcyyJ%j89jB2u3=1pMOWX%Si|;)O;`jBcISB{A`= p@Wd3+iKoOSrf5z~iWC2Foi{c7=k$!9O(qOL;OXk;vd$@?2>>jTmeK$K diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_22.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_22.png index d8ea0c7cf9c5b473a57804504f5c4f9a28d7cae4..181cabc76d39b68a741c8fff7a218e047c2fe9c1 100644 GIT binary patch delta 1770 zcmXw33pktS9%s(BN;-21X+5Pz$!9J@XQK(76eVt7X&Opvq-mEaj%02XKHHM+pp|N( z-746(p|!X?s5v3xXqENTiqbOo;}Yi5WLTRM*Yic6z0d!7pXY!3{onWh{{HU@mT!E+ z=IFkmKwqEJ8KW;JdXvT|hJL4ZcEgB2>-gXB`1Lve7&Srn;CN@VeVY0cX3*0Gz1)wy zLUjdvT|0s7ZG4fO3X!YxG+Qf&7v$~WSx(SSDJP`+;*>;n=xT+;SxELwGa_8`X*p0K z&xCP^Yk>#T@tEI_y;3}-plRFM+si;zm+kM$WX+D}9kU>qb46NZkNvCr ztukZ8Vj&vfv6fRpu?)qk(h})vFr~nk@kmKQ0I-`4dAD9`05J+aKBaj$f}yLg*wK6- zBu9A*O=H8F#rt8A`y|<3_zVti`^lI>D<&T_N0yGa6VIL7r>zzY;N^HktL_XyKM}?3=+TE@ z(Z;^vJZ)7Rg0CO#*vzXggr46q3xw~dByX~%L}B3ZF5hsVhugT}bY2b0Hond^AWFlo zSAbW!16A$rWKAF8Zump%n`Gwfd6=`9Aj+=^z*K@VSDz_~DGpJ`x6Eu7RG@8uKikpl zddN3VNS6LKoPi7&mF#m)dpF9AW1)HZ6=0!(Lg~jzc&1;e1#gy+c{@uFQHU8tG|JVo&ba8?Z-7ns7I}v(o-=Z zo}q5tf3&SvkBTUY+G z)$?+?^{H9lE6IIUC`2W-sA}|J4qfNNtDbYdyo2x&QIpY=m^Rtsw=j`R9t(jEY7C)iT-k z)7e_B`E>_2C#xTk6R?alplyY2C5$6RrC+-+44%nTT&FMp8gUD}>gD~@806FfDlIk# zja03*Kcd5$*IJT7ND%oiaFCFFUUe5%U`R{~Ih- zm?7*=X{zI6ymJv;(`chv93J2Pa?KwYoDb)T8%w8X0B-=rza`oBP9;qYqvT8Q~vS$p?$UxN@lT%mjZKffSUb?-!dTz zA}n+j%4e|*x~bizyWjCDziXT+K0DCxX6(=%qnLZ|8(`PTv_svbr60L>BP&i>SDa?SeMxCmAnkGI}e`!7@lJugS zLR*y(1mvg`=i03t0)HgpK*6r_y$2=5Jh$V*yb^Zsv3WPAJ7!2%pp$TWA^ZyG*hy9l zAh2r!hYTvQyzHLnMq9tbkEq_O93Fp#{y}(LH*RU_P`o7o ibs294_IF{p${y`%cGulK}1X6sLB z%Rd?ZBzcqh?`!*tCA8+gcG8@Z+`i+GTuHa%*Wx&h)}k{4;kUZ|1YZ>0<6inO$NtF0 z-ycf+TY_|2gETI`JGib^^wjfg6WwV}m0v4-g4w3 zzUk3DuB8FnxSyU>6goBk`r^~|a@PQBT`*V=ZsfY(BiQ%MWgeEPT5k6C#N(5^6-BAso1(TdCm8Qh+7Y9mt0`0c%3)X1e^vi~G zX#m&Lg8^>uFV3wumMi2A|9(ag}2`zTuWZK z_LNlTnJ=sQg`F(xzlyCBRtCCHbBg)=t^dCZ2h08s&W=)Pz0_KLd;Q0E0b##X)qqy3 zO}QEWsFeTdU4E959fy8j@!(3G7_ciNzc0Y<=aZ1D8-NbqRj@wb-Y@G#O4^fvrt$k- zP}gT|{S^5o>`%=^pl^7%p1hvF@!W6cov)sEgS;7_VBBt0e>p0hd#ML7QsgWwfq~^3 zq~YFP^j%=SloiCEs>ekQj|gA;ouaYZB?uU5p&I+^?pscocwBpmlI9d&r=NEV%Q#Zo zBIa>{P2ozN88MF|b^7;LN>g&3B5U84zdv|Vdk)CLr2%^K=ce}mKC)H;WKxjE;iR3f z+>EcP=d)f+<==Ei4j5ZSJ{tb~uUFmX47Z-&0#c;2o&R;YxZ=yIjohFpk+Irg-G8wP zm}amdKI;Vst03M)-{{R30 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_23.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_23.png index 128b9e1b5cf6e7ff3becd253797152670fd08062..29593b7759fcd3533420ee131c75b40bd51b7d8c 100644 GIT binary patch literal 1901 zcmb_deKeG56rW1ln3@yP5Z02xJDq6BkfQQ7j2T}q+RmC|eX~0;gpTjh=?qbZ%Dc*p zkDc{ZTd{_e8aYv{sbND6GmJEgm?kl?lZt((-TeoDwCC&}&+mDj`~2>`=eg&1&&`Fr z$ykg528BXlDefdc6lx7sz0hAEmUIGcJqoqKjzV%doFY~X-}f8ZtLyq?ajD$9qxhf; z{(VWh=$9~64vm*|Ej1)_5%s33fPm7XqPQB%;2^Musk01LvJj^gtWQp#OT~>}d1x zAfVnio~=t|>TpRwmd*tdpiNbSpw^w8%#DZ#oP9dzeu$B)OJVu}S-s>~_2!4yrZUxV z`p}@0@xNa5bA8NTbMQq0e-pU6pF*i&5_>rO2a*nAQOCJBZO@0!;z0^jN&C5BGM|h# z53Lbozs$jdgrd6G#kX&eQe+*j0^>)Q7b z@EP(+R3@Hg>f8_1+Jt-|m-TSo0fStP<{piKxln?$v3DOxfYCK*6BvayKLxE_0Vq%t zd0Pf6ScvCJmfEQrwM=0DhjdmIE^%tx1Z(<4 zG+#15{(Tx=($;4uEh38db{C0u!Fsslc7o!WeB_QBr!!TS9yi3fz>P`oOky8j@Hp^| z^Neo*u%Wb?Z5F}GQ!0p(I}TZDi2@2?6Vw#=_5P%3X@AWUE4w~c$^ios%+^Hr->kQE zJE4^73MwC}&{Yto3ZmsL^i`@4VkRP&y6-$DTge32epG&L^wOw09xuv9N;|Ka8C2Zl z#uD`wwmxRWVIrS~dA{3soXgj%V798XsT>H%vK^;UTe6BFYjKWO4}Gvyczy~d8QLc|;o@Lm6xU8NQi*Pp=AS4VBO_RUvAI47|`l1t&}3p$3FH94+9L2j041>--3T(zl+yX}=a7Bb zl)Y=hqd?8E4>sy5nsFOngT)Q{lKn{=)pfJ^HLm~NwysRBup_`oaY6bzOqF}} z{xEK6Y(;0(mW2TZ%l1(7nC2PeWv|!Sh{tjqg`1cEW9N(Rv_q*2i-mm?O`*fGxCZ-B zQ;RdaNR~Lx`oesRg9d*GJUQLZ&}$PGLbFCU%NJsYX|YPF(KbQ3XIMKn?bcF^)!1mD zm5d+nKcq-c%mDn2hX+;p&69)H9fLFa!`Vyso2_A?uULmF@;jN+q>&H_NGcjl;o7Qv zea6{{48X_AU3}Xzi$`Z!1bHZG-r~ZikL45DDOSXjrwwLM&Ju&wI&ei>sRz?)GiJ3u g{SVY-xqli6-dBNb)QXPrLdGbH;_6MR1w&5%1?IT#y#N3J delta 573 zcmaFMw~2FtvNlVlr;B4q#jUq@1N#mc@VH)lSATf}bHME-wcE~5{2?pltmh~-^)d4S z|8~L23z#$~S1@TZIdK9h+sR!_jvyiCh5)9?3z;-PQuR)pKpuxGGGX+rw{T9iPprLD zr$JnuPmHxwr^B|c<3~)Dr?jvdS;}3$)*TR}Fe#I9=8uOB0h=_1b{`5(Wz+u0=j3_V z!S18Y$;~%5rnO8`TUhhSQaC-Za36>2LG=~e7jOAAYu6dcg-Z@T^W}be`Lmmb;K|_n z>&eeJR6ow%_B!+29YL=-IW0m9kEEGaw+PL?`bN+zC*(}L#>POy`h`c_Qjfnm8?Pbg zbtVodQaDS*3#imZqg8043s4Y5oQj%gQob;yK;!Scp36%Dl%_aoPU2V^z_oP!9Wdpg zG=*a+kYH)w^yzDdic@DmmrA{p=T?hSj&6@fsbXFWMLb)AG+KjH1ie~7#4EN{Nf|Ce z3q`;(lj^18G+c!is%Qj-E;4@E=gy&;xcn5?MM0n@o%p+dUOoh}CS6aSDI*VbjiqR7 zCdj-=-iZ;C?N2y5Rh&+~jfm@XUHUt4-H!Rsp4{gY@?t4gbua*WL&Z$&vb~0Y7t7|W z_S3mlolbtMu<+$x8lW^s2^cX7QzrK?*+OGYm`REe7;(Yq5ebQ7Q*noF`YEcKQMSDc QcQF8gr>mdKI;Vst04xII1poj5 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_24.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_24.png index 52791037fa161074bcd2c2c74fa6b917ce7c8424..8e5ca8c772db4930468928cf58d6c0bb6a36f94e 100644 GIT binary patch literal 2351 zcma)8dsGu=77xWDM6oI$@`zCZ8Ngr-pn$=^h#*nI2m;OWE@IV+K#V|);45iW5LCwc zHqIjG5;SXkq(A^yEin&ijRh((poM6GL@F2{Bq2Mx+x-LCb3Espd*-|IyN|i^-8;V{ z5H->k>x{)Up!Tu|LD)_OsnU1 z(PvX$Uxs|K>WVL^MheuP=O|_6FhDOj zbve;YPZ)*GSQGTNw<%=hHR$LS$k$puXeOZQljsxjj-F~L!O0TTGu=7#Jm41BgSZ^_ z9Bq4Sn&@kMX`7*wyCU||YB9kLcHuI$UZr3V5ssgpI||*{OGLzNSoLivVZptXBTpZ9 z81t7Nz5-#ZpdW&^2-oN(%PNf+5a{3t?nmD98Z8qn!0io&Ro%7Wu|Oh6pp0z3*8L54 zmiowG0h-p)taM;ix67(L7q|X)ao@80C8(>cP@utVvB>A-)h4c!1MP%81rg0Zz2Kfq=GP%hsL#*iBspadj%YuCUO-*Jb)Gmp zVjqPV|4fguQEMw$ikm?}9Az(bv{wKn)YXU_q=ze5op}V`h%xVt*C*RP25hj zLN4GbC+wvTH%0oYTts6~wR@HyJVW>0OpRC!%d8|4=Dd{X7QW1EBI7C-!XPdG@`dDr z#EQ2A!$L_!H8p<`3_7h&-&uPLdc~nXa2KIpY?0;bk^1r9aLv^7msoBv$jn-3afp@f zh_UwA4}CUCEQB$j%_Q+L%G%>&)CZ$ahE59m-|duMr-Dw(@UQKsLZ?a-)&1q>e-+r< z@F0zB=81Mb8`z3}w>l!F!{iaFqux8LD-x`ZtE4gU8v-NjT7LWX>E#vcTCD`EFL`ec zd5O0w#`a`8|8ga?I==zq}1LS%{%(jxzUmozT4e z<*O0y9&KsQE|!Wj^k*2~c*3nepsPr$$-eGi<}KQy)0HHTlGEaVF9vImBJ$$v-D!Tr z&=ioS-pwmM`e=bANFyc0^Q|<)e;X)tgHyWXEB1CL042)`?u$EZ2MYRieoYm1FQa3D z64xJRCHkD_d;1MOi7xh24#^1UltCDVFn~iG{bmb#VB*T3R5LMbMHB#+op|4!*s4s% z9$d#`Zx5IXB8*b>h;!&ncenODWzlA|pAuwqDTpy2=LSA2UhII}t|cVK3ESJ+dJF6t z&%8_q#M8GaG+`A&^7wXo=cXcX8!a-X-fMUxRXOnpqFzvL0tf?Rm_bs+lAZg0jeqyp zy@^>=%g9R0pn+bg*=uM_oG16!Cqgp%!i4oeQZ}n4NZUIWO`Y zd#Tfj=Y59aqwu<#Q;A>+Ks3#W#tB_p_F8V~NI~$J-^57XM2V2A(a- z4at8oVR^G=qMc`b+Uc39;$z-DBzpUBYtC%&EGeaUba(&A z>7V-GLBczcGKFfT;P=4Q*Q^_#-D|Cf-_I-68dc&NyDrNT+pFAMAd4Z0qpbvrS*DIL4ZSG&EqQVgpnD;wLeS k|H~Or9`Q-g{k9X9;}5a%s|kh-ln7y>)>6Z7fawSS4brUXYybcN delta 955 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 delta 928 zcmV;R17G~-5UdQ4BQFK>Nkl06oApb|4ZxCfm#Yl&fnf^Ik705?u zDZIV__}9xS0Fk{Yk!dNBXMmBsDUoRvkt6p%lv2pi)sA&9ltOuYXZU1UlR~+B&~^`H*7Yuw4d25N%J@+3 zm@#z@Wq;vpBLnsGr=*XQx zC}Wl*lxCGed1E7I4rTVEx=vg~Q#$xpw9(!<57Y)heZBn&yK3T6Ih=8SsCmS^UeO=g@`3T4js zD1S#j4#86xg|cHPyWbRJXE3i^uR7^rTOL>Iv^(_?*8M1Bx9!uJu}BK#=-K4S2ngl* z<-EIjbL8JCl0sSTy_FLmDpY^(D8u*TSBA3U!Ac~BGVQ6~?ohgM@4jXI_HeoCGkcK~ z%10YL`(-M3{+3Axs-2-+^@RkH6iSiYe1B^H>EAJJM!#cuEB|k$xQL`smcE|v%5sEq zPbg2$MnzI6g>q9Me|uj|DA$B?)$&DBC`EGNPUgnF{X!{{LRoSLsPx{L8}|yOND5`h z4v=}7Zrm%BA}N$@2j{BgPP%b#<^$xa4{|EMErn2~59QB)3#Cwsq)@gv?cTL)p?{27 z_ouJD6iJ~RGn?G8e4(rn%E}l1i{!viX4nZ<4_F7TX90NfJ4F(q6w1<}+AZ6)fxomPDznx21jY-A*1CnNvlvC6{vzpLmDCvkpNM^o-qCE`PgUno^|$G`|MRl zo^btv9*8Vt-}OES4-N|7q*!dODf)UfBaZ#2vF~8$ilv*I z2wI%T)*f=9YJFU`qkr6HJ-+2D)!Ze_&vfbf4#09Ga!u!qgN}Kx71=ZL_xWKMS@bA_ zk0O2;b&aSa<7q^81C>`Slbp;?f^Q3#NP+MMn$kz;u@mP&>e9z~h8VN<1DN{|VY&z{ zpGuP;H(pS1E{!McHJYBf@n{DinLB_k2ed8>Fs2Hnn$f6NGi?hLJ@SI-NqL{_1l)^V ziBnC)Nqe4-18wl(`9?7@*!W{f|LQ&k12*pTi*v^-I8a?BLJ5Rfx?Nh(N}-Prz+lI` z!2kG#b61{%$`+BF0kg1ZYAnNzrzj5J%nV>*Bz>|INJ5>FsuY|~=HeQ^$>mH>12 zGHSndYV4nCbtBl}@1w3mnx+H#^5UC!VQjeWL(#Cz+nlzxZIy6*0He$8t# zU3ks&{I2rB0@7sePL zVjiOWSyGR*rOb$3fjH zwnInKBPy~!tjwp`26k=b^h~rDJlQ#cu`kb_pu^ToW&g`$UXbX51Aw}{Iui<-P`9IqR|%pbnXU0B&yS{$?AqEu)+3E%vo#@l z`1g)HH2oX`tQlEoYz@9%Iwu<Ni9h0%nWjAU_f`{uk;hE`;t-8m}@3n`9& zaN&p@NsYocp<&D&Nl+AwHV*zr zy(3bY*lF|@3q0>_U#2D7yYfv)u-#H_sOqJ2(e(WY#xYxffU#Zjup72t5=c5&+A HjI;j&4F@X{ delta 524 zcmaFIJCAdMvNlVqr;B4q#jUq@5Arn`2)JJS_uv0<)830Mmu6NzS9y~;)w_4$8t#Vm z(=-_-=dsx`wFpgaV$+-)#iqe5;Kcx>Z6;^4IZh5^6P-MbO%x)nTHn&po%FX%VG0ZT zgZqc){K(@}b+Xivc=^~}!&2tdtAhob9W*qBPpvxWu|H5@iU@b=(FB{)dr6v8T3UHXqh( zzpCQoS)!3^t~SNV^UTp4=IDto8ar8nR0O@eS}xUaEd?5}DAQDP3dhojE)^%uDeL!h zB}Uo&c_Ids*761_TewBD%|mI52yg21868W2%EP8Abpok+AQ@y3clWWHulb1(8Zqn4L5yaj3dG-Bh&!@;_B+SiddP1B&#s@;OXk;vd$@?2>|u#&R+lk diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_28.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_28.png index 80cac406437cd7116d315aae8637fb1adf897cb1..fe871a52d340a16227e474ca295dbaaae4893d28 100644 GIT binary patch delta 1293 zcmV+o1@ii+39Sy0BQFN@Nklh;P~vLRI)7VZ zp~MEpItwK>FxDBNw0W`C2qiYJbw(($fvqz_i4AOx5lU>}o@;EKg%Y8(uI?NplnABu za?@UfQYcv-N`w-j6iVwUlnABua#e{?+W0o}_E1`5p+qS85lf*&C|Md!gc70TjbI{_ z2qj`Eln5o(9HF#vvEB%!jcemtbAN;qo7S2ml-RV^9HGRzXD2dy+Hm^`3 zloZ{(-J>CtLW!%&CC4F>2qj|q;`<9FLWx+u_`cQ_p(J)guin&CUKrkpE6iCD(PLnIMON{3|14-W){62WW{ z4S_@`xf+%!KeI0bCINrmTIA>bKS{^zv0}b%myikrD znp1Bx6v`fN-!$_=Ic8{f-fl`L*R6BK+k%;Sp^P7z3ilQi$~})s_0P|lJo7?1Y-rNf zBR=4Q3YmRC_N1k%9N+yX1;&U%nRkv*K7P|j@Ky7yiksQ z>i5ZT3FZEE-uds%{F#{-%BDl}$p8uE`gN`F^~}6?<`|lb8&N2;K3vSqyD5gDxiC1> zL+LYf#8N1m56y~m5=ysOvyX++&BCEY=1_m#Bwde4}7p)4>oyT5kz zE5L-O^EW=Yt#c?7XI>}^49)8AaqCkVSG+B<>g#`=CvS+{{WfcfGe07fJ8#{;>wl70 zex1`#7k~R6CkOh}M`EnL!}-pa9n8E?wi}x2pUIMXeAVa3%=h}-9H9&wn(Awt@{}^+ zF*5T$T+GlE8#i(WG?lmJ2r zAe5660XCB!0YE9GB>)gg0HFjBN&uk*5J~`{1nBA?M@<|0<0Wzb00000NkvXXu0mjf DrnP$a delta 550 zcmZ3>w}NwmvNlV;r;B4q#jUq@y^ES1cpMzx)o0c)H*ajaxP14i+Xq%GO4s5pn!`|2 zD#1AUBb)H#b!=jj-?ND@DNLEXo=p_QWK@{k!KTjA5Woat)L^O*tbbhR*!Nrhxr>J2 zF*UQ1Be`(Po*AZ2oli~ETZFiC&T*)U-RKeY(kVDE zIeT+}(v)Yf&N@1E2F#j1{hQJhC(jBEL9dn|jkCc(`tzrd&VZi+#`Ty#c6~8~~E4Bz7jQKaSD6B{MZ>#}> zAXMLzA@Z9i3!FA0f%*a4!5YSkH$R}0|iV~DhARz?i(a&9H-F45scb(5ZXPC^w=eX=gN1_!?L!VPEk_U|tZY};e-X_IKT`XNaceM*(a<6%#kp5P ztBh63t?-jIFqBOt^}d1r<804@uXl=><#%O;waG`53&fFIs)&yfaD=8A<~~VXTE~0Z z{tdp8u4$R)klt9&;D7oY4k69EWuRp)U7_2xc6{|$c$GzYHjczDtOLmxU+b9^4}{p} zg;ctBsb)ANMj}-p{)Gq$SR_Hk)04KkpBi@}P{=mv($_u+^~0vUxeW^?>v%9*UW$fE zOKub`=XH5K4wPltYNYxAN7Y@XG@abKut1vW@pM~#>R7yZx`)oUsWuRi?g$HgU}W~} zUlp_U@2=H@xa$3$1eIrHf&&XBu+E>PA$>tFOQ-w7(Yw|;4dbgU^5LtkyNaDv6lib@ z0;K)}r_TpR2CUJt%}n&Tedlb5Hv)Jd*5j-#UOrruz|#C-66hpBqc{_Nw_A zHpxdN(L1rwu(M7-bLlyLXUwwQTy(-ESQy}>k_|4uht^etF}A#x(XGgUc^d-6dLU^< z7qH;KTl5YGdfOoN8UT49fa2{YA@0J3d>fqvyywv|02c0hHl6N^-rU3z+U<2=^-pD1 z9L8+nbl1V9*Dg^}T$4NrR~;hSflP)<@v4ivxm*uK&lvA`AY_>4)>&bibxH=wD{=Mv zZ=(tX52-t_9Mj1;Y71!(L*&_@sREr#{@E|e)>0sp=AwdAs(!uNz1n2f`hH&N)+MKZ z(|3ApHRxQ%I7d)rv_d@64SUx43>wn1@kD?9q0FPTAddIL%ai5N7*3c}fBLrDHD#!o z@}YgYqqR8x0ziFrbGq~nfYKlv1}Wt4(If}1;#F-0cDM)Fe(;;UC{Qf@J8OpOBR0j6_fo=SgH zF^@Q}eL+xdG~YHKw07)`M#RS$2hyIxt?lUJx`_9C9%Z}P%oGcK<3r7ohncgs`6EnUK=l<5Y1U#1DtWX@p^wH#T zDYbDV`-4QM|H2&sHn&Fb@5Bg4YL`AGuXrb@if8z`Q=vk;4XUPmL#bu2DD1xFp|F5% zdceQ4bEVDuLXayMT3DF0_-p>DGBL?9vyqNY## z9aNKJ{#FXaZbzB zk8N3v;x2(e*_nk>;ycM{R9`2Z3GpQ{sb12Z3KIN<&Z&n zKK~Ew0im=giY%C{i+0!88si#sB$NV~dcjNy<;}6~7K2XfUnq-iUYj_6tWUpwp`07c zM zoHxSolRq~llsC_4I)*ZGuL)&;(MV>0w-(AgpBOrZvih70Ws`Teo1x6IFr&vm;_?df z&MF_16>}U>q0F`@Gn~!uzCOylv&zRr#T<)J-ucHZp|t;mviYh1C&!!pwPv~WvFn<# zPzt3?|3Ho!~m2Vfz8p@S_V-QNAG(m-4 zi%{M<2BDl8Nug{I$n2X~D1}leP12P>R@%fuDU$B>Hc6qOthkA@J=ploaR}x5`V~r> zGR5%=rBG)56x8B%3T5u&ufBuVE#%Ggjwo{id%LTO@N z2J-8lF(03gDVB#fh*0i-3*?T!)7?1rKG6wflCzAHVQBFjzr$l5dB@V~6V9{VS}Kx48NQiL z{A{6IpUaa`?rrG22o5b?%S%Xl%4_nr+Az1k;i0&Var#!HD+}F8R+N?sE>w8-M z^|L$u&Tggo5Xwf2B!xzIL}5Q>=Xlm6v}Ih=EQLs+dP}E z<(ZN|3T4FNf$1j>BgVwC0Fzz_Op$mnk<%8DzA2Gw6q7IrdXab(7pUkr$x>~X&(q0A P00000NkvXXu0mjf{20Wp diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_3.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_3.png index 2f220e831f76971bd82d416ea1d3f718e88692d6..34bf51cb10d80fa589b0d676ddfc7e111ff21db2 100644 GIT binary patch delta 1342 zcmX|A2~bm46qRN4lc<3ZAa0>VLJ|t1L2cRP8(WfL`4T}bIJDX{f|i=3BnV2Jnn-Eb z(*LCv1ezf!9oCj2WfL5x2#L5fjzyNxLWmS;5Wy-L2=t-TzIk)scF(=_;=R=XkRfBO`K-O7rIK!FSpkR5CE4w!QMB-ji%)fVBmd_Sp{g z`Rhi5uHwO|XwnVTCa@_3NOJ){&* zgE?(UpQ%Y)0KND=6N7aaQUU#l;Is%U7;ALoF%)aAm!cq=7tFCDW1AHq2&8ybgiuLi z5iq9;Ig;P|qLJdvl{cYx?6=CKea+d`QaMo_O3~ExMXu2V(MjMq+gnP(tH4aeW<>0$ ziePzgE4va!en+>PzFK&ppUHsu zgTlg1X3JlRP<9{T=QQz+38~Lr87kZl@eSNb2NQH;oqhHc9K8QGz$Cl*buo z zF8xY`5!k{OkN9I$CT30-C=8$ef~=1{Ic4c+AH63T3hPgcXPlz%Nj>=3HDn?B+Rj?t zmRg-b9le}Gm+>3#@RF`sN~=z6vwmM!3clcKc5$3zlfJjSh4#4MuB6tnHQsxT@=F^O zXWSK@U4SEu4qNS-Pv$Q0#7C^m{6rMC3jeGLQwC*Rcr@i}UTy-BG&pWAUUjj+ bBVxtA@w-!5_QLkab)az$#j+dV55M>qpL}dn delta 584 zcmaFIcY$+)vNp?fPZ!6Kid%2*M&}(?5OHvPUw`=|-y;cwJI8yb+!tH?W5yz`czK4p zT|SJH?U`*S>#>VWp1`az*`8f|61(=~e@vp29oWSu|7X&iT+3`dnU`6--ejlYy5Iax zo`V3tcppC(q0@jr@B{(2H+<)h3qY=VmNUodL_ZpLXhU z0FCw$=E0@vbaLZt^UE(Cfktjp$(nk8G0==j0Sn)3`>HSnC^pUFVhqrnLw{fDPH_V2 zS!(MAv}IRIk$XdHkVfmIYYYFV&j3mQm8x~L1Sm~u;je%CG5}~vXTXj+pq&MOIaFJn z1P#URZkH4AYB4%9!v*9ppdmn41C4+&1y3zcuKK;C9H`}v+>#Za!M1ZP4FI|@(sok* zxmJ){Zz@e$oczWA8PIUQ1l|<=GIRqD~$I$b1Y0z$}pH4XJuyf?u~ww zvj(TwslLxmKxaKoQk=x08tr_uvJU8qO|A+oLJM1354vbD3V2PNAUg4a$ixhdiK&iE lCaja|n5{6QS3%q%Bfk0asy%77Z$lY?z|+;wWt~$(697Br>C6BC diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_30.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_30.png index c8f19767e000d85b45bd691d30f887028254643e..c3954cb979f0b33f1c3dddaa9b185c6e3f665c4e 100644 GIT binary patch delta 1379 zcmX9-3p|ur6i=%fqr4&%*_FwsCPwVmc;@pMk9PW!En{MZNjApL5LRoZ%}gbl+2PYm zoBhHj8ww?9=vP*m-=Mtq=P{-*W^Ifpk7264)860xoqO*&|8vg&-g8f_UcTY4TZn6D zL4H1A83R+Y5OxX4bkF|z=7|p15`lNu^7R9S3AS;m7jk}4+N}6AcX_1<^DOvY$F#s& z2j+5i;z3FnoP*#Q zV==PLA(&PH1lAH`ra#CPAQ86(+xR9}X={wkVyy^R!(ZNMhjUhK-+12~;AU_#Dp+{z z6Huhm5ydG6kcSCQfG7MD8O0I6W~DY0;#T1Y@k62Nv!Nsq&B|KR?c)y_OYUJm+g}B+ z1~0T)cRi-X5P{t^cyI?AULM0eGH4u(nd%P;5nD9s3tqlsZjZNXVlxsWI?p2;1rtLl z1%P`*DaZqo93_SVhFFX32U5OZtA8j&Yesm0^pn zfD`bdSDppeb&Lxfb(}=GCEU14!R({?+5~#-{raWFt*Tv}_x~Eo+En5AT=n|)!%F*B zv$=>=OXXFB8u{S6RxX=Gz5Fh3O6**u8wAjJtb#das<8 zRFpiqt1z~ICo12Yc@_x}c#jmDM8dR*g|v)HmyVNo#tZ7puk!bg7Jtlo{?CUSZ@kiN z(e8y1jOf-RMVN#3woP3wECVL<5`tHR*wC3mF5OP7mRiIP^dcMl#ew)TglWjQ$HFsS zvXZ15v-~uUxRp7Nc12;= z+}ifZ5o#l?8kujdI|Qv!85J@~tP!gT-m#;dm4V-A{2=t67dzf*d|mq2!bexKx71n2 znn`ZNKF5{07Zr=!BNmcCy@{U|xFx;~6Mu;7hby#o+oSCK6U{uBq z_JeZI&bG*_j3l>|kD0pVPj|a_iV*{SMH@YwafUr$>@)Uk+8{Q~)d5w&G=}Di;Wf5^ zJ$>u6Uh*B7_CA@a&!~@ACaSB`dzWo+3eaPo4;)+!4hXho32WxfxW@_daDGi6g^5k7 zos*x4>H_f$$!Js~zh?QCa5C_mLJAbGo425z3wrgWBJ&`OxG17SeD)6zo!fZ;nr>PY zdBfy|Fli4tA!Y6&qS9lGsU0v=iG%h_gSofga3FGc8>;OsOZDX9#q?J5&xSlrMHu&4 zysMt#$&7v(GHj&;$;*(chMg2Bwv{|}B=xh4rc+;(IJ6!cB7eN_x5x4mwU|W}fSzEy zIo{J~6|}Fp?_{POpRHbO9AXk}(LzVV_6OF#Ya^}Rp)%No%i-v@*82!EE0Z71cx3-O zyZ4;Dg;IHNY4fr9n6`-B#c45(wL+;&vB)(k60aD2L+n+OwxhJcVTL#0dDu)sPoZZy zR;b(~=UL!dCom6k^KaufMmXIJ`33;6lq4$~-W^WO%r4&~-w%-WOBGKoxF-~^-s>RTopl{hcYp{jU#o(zkzlSXUN z%fmG+!5V^1#|jOETPD3-xJHcqvxA1E*eR{XipM{@mj+xinPPo7I@50X;_iS;3RCXp z1#8cn9l@pQWGU-Y{QbAal!%CY`@34LLJLK_w|gx-vT0W!r>c|Y6zl1xw$p%gMA$+R zkZ@P)X65=R)2^-!(h&4|7jf-KLdTMTq(s-lGh2nYwWZE=2XHN|$gy1>05n=s*6aUs zy(t{2IU2PY`anaRc3Mo~0GZ09IfY|sz^+iGDL~F?XU!Q-odMhUp5AtJ)et;&BjBH~ zZ;Q~v9{#736O=#-yOst3RldCA)afe9o$g+*(Hf*PM}DD;#$O%*uT?rL?K3R)2PApA z9^z>c@_uCoGF(;E3n<_E>Byw6B|x`KD>0gsH(5z@$`Sol9$ZTUk^%ljAuRf$qQkzQa(sMaXbRh8c(ILqiDz z=|&N+mQ6n&ajQ6SN diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_31.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_31.png index 98481b537a7f0244f45110ee5ac049f97a4af666..056a9fd4da62763d91580a01b5f9aea70a716620 100644 GIT binary patch delta 1587 zcmV-32F&^L3)&EnBQyvhNkliAc$&#ras8U|-WD32XP zp%hBzqIWQba>ynTN}==sLMY20M4=SQj@Ml%ZHQ7EMJR>xo$J1G?S!)MhB$e!h4S3` zOuK%ouKVri3T5+ycr%vod|jaw%BOp0#aR%_;h}sdm_jL(&YMtLxWi9FJ_&zi+DigL z+55azzji`dIF?UBnfltPP&#u$IdIX0QYeK|C@oq*EPwKKs{A%yD4jW>6w2eFtoCP1 zLg~y2<={m-9m=YI2rrb*oKOnomNESK8XewRDU{BfP!3hbWj zTPTH6D7S>NQ#gFMm{1Dkga3EJ`g{_~vA^K(;bKDBHI(iiv@VpMlJ#ZbB*<^E7s`~fAFLMfDAZrr;wlu!TIUo3^vf?XKH)7Q+b&zf-x zrBGV1LZNg&%Jbtq6BhZ6>Ff!mP;Q)yPzt5B70S59I`!J*iG%Jit@}mJ zBtmJiwmn6D=dcQ;P&#))S#rTn{vD%GW{1+FNuji0Zw7ML_Y}&^P)_}mp#Pl(p&S~@ zo9~Eear>%QIQnNtp_pb9)v=f7s~GMGD>`< zj;H@7jdSuEotjJ9H5JN$&EXIVWrw+^jCa!hd3BGYPzq(IxhIWx(moPOp%ls@b59%Z ziEEj%mxNL%g))5ZtG@5)P*(gURQpiw+z_9Rv&!|HpyJ$jKN?&$uAOIGC^sysPzq(2 zxu1A;aew3gy*1y~p{#Nkgwo!a5RHjzB$PralrLlT141Z;(gCza)=4OZ(jl}))=4OZ z(jgo)_vw)oN};p~&E5J4rBDi`yK--V{b-bk4HJKv-0T6wRxP=A)Y8%@VxR=lgz>hV`x8=(}+m`5%X zVwpVm|9#z-_jzPB<38hd9r43tYKK_of=iG%-D239d_J3&d@(-M9x5X1m2UaNUIiV~tPNDR)+tcpA zxlg%!kWdb~z&Gv^-Fcil*0S2%tKW~Z+Yer$T=@M?ZIn-+(xs1cS17y8J>e<+tq&%< z))b-K^Zj-mzSUnlahy9t*-OEPlg4=}l<9L{5oC|_ z&)=!?kq|<8c(HGOc1V?R-Uwy#=es11H~BmY<={|OxrV7Pqf|f4Y2%#~Nuewf$|~0| z`Ss=whuIHZp=|L`zsg4G@JMRH+*i+G!Xw@Bp{%IN2I;Vor_Mcb%pLcWPy&+?1w50^ l1r3w11qhRn1UeT~_6uL47-P|bW;6f*002ovPDHLkV1jK6DbD}^ delta 866 zcmV-o1D*WZ5b_I=*99|S0qodgt`%G#9;tDU?GF5}_1IClEqeeh`IHC_C#l$I#7gCD6j1Im1`%Ig%60x!4}H6^_jN+R_*uG(G|+(gLpEQSAMQg3gz8nXT>ZC zsq$*PP?|ZR6w2^WR(so$P?|ZR9K2}Jp{)8wc%d|NLMfD6w&D9{bogkc zP?|ZR9KL8fL)qms=t61UgiiFFi8p-dCX%7ZSHJ>%$pltP&*l+_2l$~{6Sh0;xXg|bB`fBs!4g)-ZkwA?2` zS$8{xQYbU6N$Y(gltL+#YxiIEc)08qN}&|WEurib4qq-NltOvq-%ePcC!rks0*5ab z6UwfkboZcjp>#>w^Nd=5D1}le7lrc5r=do@=;5m%gtB5N-H&pAC@cO4C6+=dly5ig z-5JWeZ}t~Up|oHJw&Ct`X4YrTb_%6XTChT)bU(`Y?Tm`7*%L~k-1uD3@82Vo>$WrU zY}D)t<%q@Fadvm->`^G!Y-jXkyV(=U(V>hAq)_GyR+6ra5#fo}vGGfpT)4CUOCJ{=Dwe1r5%CHKhP?|fTEV*Ej?_(6o+@W+fDU=rM zVjy?@PNB>h%BgP&`fnD5a%d<|ej=vD?W-DwvcktkMN%lY4q~Qz5DI0!P6QKl;@ zp$xtx&i1tfLYZ$(ZSH&(ME6VMNjEGO%7TFu$~>X07>16sAe0UYp-dLa>QN9$p*(U> zoP2E7CpMHFVjz%0x&5HX_Sme?nNXUIVPBs12Dll|G5f`#0h7!JJ(0f@k$o$Z%m);a syepI72NaRe7n9%zW0UO%6ct<8 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_32.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_32.png index deb45f272a68e8e47e1ddc949eb8927d5b32b56f..800a6b69b196ba164b76bea6ebf8ba218828d448 100644 GIT binary patch delta 1240 zcmZ{jYfw{16vuh^h$5C;6F@)&BogGI0%Zh5h8sW<9=Wxkf&8&P-5b(;vnId>F#n=pP%ht7@X~f!cQk0`q<}a zcJh_>v9dmj{A>Flu%w_aEcXVo)(Yl%yPDa<9zGa}n}J-u=Q6h#%G*pQvv5iZoB^wYVk-mN*yZkXc203iqaop=ytRne8ZB1bN!-+^ScC1GD3{ErnP`;}SRBfj@FZ z5Z-++lthCAF^52mRD(nV0W#5KoR9lQU^krC0Kx*zS<8Y_L2^Q{7{c|PepqCkp{N)r z<-a+Be7R}|2Pkw*0aK5SZn!?_b|WwqX52=vmDM)F8IqF~w}8PaO$aP8?A({5(I9@9 zM!Lfv+{nDSJx5kEY7WrZ%^J64^M(G1IH}bpxGsxv7&x3H$!U2gq z$8n8(r{e?pO2=rFcc}lSRe05^IG8I6<3ISVSg&r9xt`XxFyW^$v9pB)QrcTVmC}Y% z3nxl+Z%i@wudX($w$d;lyBR+=*+v>YRd2sGu@iY^e^oSmKZN&JOjD)<>1b zt)=EtV#;;RuTI$#OivQow(cHIlMEt8!`oL!7z&v5a_13s9?NWqzRPeMLv_BXff7;w@Lqz23(zLu@h~fUoo6Pet50P13yO*fdUl! zMarOyd9A^VY7pUg?cupeF~^oi9D+x|q1kXbaplYwS`|i3K-Dde*)=>qVR| zn4U`%yuUma8`9D+m~l4^WER`2$CqpLL3;v37I{>s!1Jr{wHTZ=I+h;ow1G-2Zjm92 z&EMlp>F#!f|E=#b7VZ@uAvuyt;+DIG0sb3?obnh$w2F|W0Q551wW0C(rlRc*vJ0{D jTziV#%Rbuu@b5x9V^!JVEBCxrc3?0Q(-XAt7f1gA&)r9V delta 456 zcmZqTd&Mz9S(C-k)5S5Q;?~={j(yCEJg$!K>N9__>53g|h*eFs|Esz`#q8t^hCfnj z69Xns>=m7OR%G%VHowVvY;2Qfv58H-&BhO8OHIDXCRop~uw_xZ!L@h})us(kLra-k zgcj9QR}H~a+VgEc2WvTX z1|$V9JQDagSk>v}3fV2Of?hJX3Ey0;DHd5dAmUADz@rWIpSNvU4mADS=d+GZozCxn zxNh6GMSP))hWYy@ps>fSv>gBd diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_33.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_33.png index 847dbded1f173f77939d7c152fb94a1d50fb9544..6f8b712c663ba98d45f608dfc2430473a6b627ea 100644 GIT binary patch literal 1721 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Q%wr;B4q#jUq@1B(`0iMR$n zvw!)8=TaY|=l3~VSAF`)r5yj(VV-onJ;R?@n^+i}I2ER#6CA1y0ZeEFrYa{+OjTe_ z#41I%7V4C#(hq+9VPEK?5ck*9I=w|`VGmd8FMS3eL#A*YhpLn2lqAh59I3?`^JDZ| zCN%|^&3XOqh0+v`rxTy=`lKbg&_!con^UK6-)b+QmMwi8s%AS%fno>ODm!)Z=E(|r zB5BKnE8JdrWi8stv25KvG`Hc_9KPgrBqmIF1_9#)fS*r>ij+Mid|w)r9C-SkED5kHwR5^@=q`Yp=bPeB&hW`jnHk6C9aldt>h=7p ziMP|sZNFE4_5S&0-b{0ECrPnW!Rr`WF74b3)VFKapRBh+c29CZhP1VQ+VYrd>F4ZO zstdpT`d>0zWy-nrh0|It<$e!8?!)(VM}3_6gUY4AytO#~wq_@53Gk~AI)8GZ&rH>YI($#(K3>{l^z*glvOR1IMNTEhf4}=!wZ-VKw$(D3 zc#YPgD_2t3+EJ>7o4iT z2=t2Pl#8$Td_H|Z%6X=hw^QVos_+<3&ZlQ?#{&aedH=+BUrIf>o_^Um`-gcR&_=`X z$-J+1rT|^nT6DWG$Z4iQb@2ZhCG3K+`S1ZH&-f z&s6q@BlVeR>R}zu)F0V7{HcfLTLN=*D-34X5F4Zswz!sZCM2*_?K3i+6DVOaRPZc|Pa^atndH4Rjmrje*Xx;QL ztEfuj{ya@_c3^m{Q&V>Oc`asUCCGT7izaVQeFk*u-Lm6tpWgKVgcp?R?k{CQ){an^LB{Ts5nKFn^ delta 447 zcmdnV`X{o!8dqA+dWE?Z-#&VX%Pso(7xI8>b~ zk8D<&!m%`hp6zR82Y6wuXd42z)tA^ky-T7NT1#1B{BsniUGVyV+Dv)_g zaN&{0+c=2}ZBCua$J;oTDwjX`=B!cpqV#tCO@9qRuj-%A6c!$Ns9ra7t^Qk(;YY0% zKvr|9IB8CCdI>gr+S`TzAtA4OtfC8DGRTl-Q_#&#V3I2C&N9PB)Pyhe` diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_34.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_34.png index e778506dcebd2b5f6c975b8d1cb22da7a007bcbd..5a9a532a8fd32bb556b152fda85ba855d66019cd 100644 GIT binary patch delta 1690 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 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_35.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_35.png index 67c009a1437d60844cf1aff39c7b0eb87d2c53cb..54ac8bb18a8bbbb255ef3e75161141f23e2eed70 100644 GIT binary patch delta 1344 zcmV-G1;6^V3Fr=xBP|CnNklSu zdOiUB=&=Nn1U-{$16F_k9gOF@e^cj=ZsJi z9LdCZO#K0YP_j4>yP{KJ9ahd8p`=+LPkf)m^|&2fgpww&pjLg)l=V2d#t0>aBYER{ zPh4w+5|R9B9M&75#HIaZJX6;lp~Qv#^O&qVLWx(C*50}cB`$v})?O%aS+VvArHhL7 zM<`uX7uDJ$l(?+c9-+i#weAQdE^GgFxAsDbP+DtG4iZX)(i(bbFG4AlEDt3@iBJlq zH5N*Q^2D#E-GB8)C=p7b6ilH+D81rZw+;v;Lg|&(M=XUBp%ls`YlBcSD3q1QBbEpy zLTMimN~&E_p%i~gp~NK>409JsTu`wvcWj#rDi-FBP>SWvODdE?DU`URVqxw=Nw-US z`l1S@Pzoh3s#uu2P~ugkSeQ4qPAmn(yb(%n#?t@mEtEn@i_5$70w)IJ#(YImC}|MN z)t5Q>F>5#GE0jV>vsk{l*p;3~d1KB9CC!7m`rowqBa|A5Ww~I8Btl7CG|U;HL@C`QZ~-fm9|07R-DQ7%Sn%iPf7qi=hkEz8g))DSDvq=BIeHxCc?U))>&$ub zIHTS|5XyN6W_l>A%-c9~&XZ6Ey-#{-4wFOKX^$$MrQKgcC|_)PVklS6ch@*4sJ=%@ zai*S8p$vSbB9wFY zX!=Ga_?D6`0Yt3g)%Obsj(EweP?OK+clm?IUtm` z-m6Is<-}O7T$5^NY03{@p%ls`7digJp@j0tzIFY9E0miL;E6-`=Id6tbQAZe+F9BW z%*cPH2<5y`roZPUlr_(iPhk|w;|ILd2QLkMRk>@ADxM|pQ3~bp177kV4U6UOJ*sq; z{8w+Gj5{zDf4!{|%A`H&FwRataE0>1MSOdJg>u#&rH|8xiwR}aMXVB{4u39`wnwSs z^qDzA8Fd-E{Aye6tfcKx+BiLCO(-KS;$MHimbIU=M@i!pN};@ZA-lf+SN-gy?a|F~ zc6*kBP&Rrntx(#dlyM5B18Yv!-X001P@0o*+9RP9%7&NKdVBs=&V1Fo8rPo> z5r?MI4g)(5!ua?xac+bXfov6zi8CXV6boeacubrbp`>smE5>8$F9?K^;6S_; zofGyDIX6N{vq0{6o{Ia(jxIt;lTT1l&sk+3J9mswa&ROwo_pf15lTez*6Xlugc3*l za#WlV6WmB9sWF_W_~gv?CQtp%h9Sf2m-Y zT_|y&Vqtc?Z4Oi{%#KisW#*9zrBDhbj#MnnE|hdT(%pwDltL+#I8?DPyHMg&rC697 zZ=F~QhPe?+GGpm~y@gUJX>q)79&p8AWXvm)LP>*AMjvzKuUX5OS15&&X0d#7*e87- zWyZ`1CC!5w{g^gCLWx)&7Yva^6DTPc4KpK@286!AG_i=OjLABq5uE@07*qoM6N<$f~d{swEzGB diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_36.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_36.png index e5966a2521dc051079d27fbd5c4e3974ff125e48..6e3f4b8f8004e1ca49a05099340a31fa0323b507 100644 GIT binary patch literal 2317 zcmb`JdpOkj9>>Q~xyv;wY7ZK}p%OMNBbOg5riLFjD!2BaNiKyDYNVZ6o7GzUh~xU( zOge}|N-h(Lktv*9o5qY|GGoak<76;1IltZWpLL$6=Q-z(-}iYwpYQwk`CgvS>-~Ih zLY~Lely@m(Fc>utcUK<_Mvm~?r??Hxq~dmL#b6XiJY1c>x$;KH>3>x0ra|?luOBxZ z#$V#8%#~OBrq<^>V{LwEb9CzZu&Qu<{bPd)hN9&J$ZZ%j2pD9`hT)GYiq;=hzyI{v z(hbZ0C(PZ8=P%7W7TT>-hq|xGLLLqt{x)m=g(N-%*xJbN)+9(oj0rtLUgc=FN6};5 ze2K$k~)Czp^Asqs8*@iX$fVd*<;E)kC{1VCri!OT=Lub;! zh>C*mtM{%t@gRGdBi5a54j;viD?_~HpD~9JE?}YnO-iSofzy&dYsgO`#}`iCwrXi}jT1|?m?@F*fk2Y#`DljG4`L!(GvAnoCj8D)NCiyrd{8*d4ZjthQ(5>J_!W;X_P8PBaEB~~^x7gmH( z;;MBiahX#!b{BFZ_gV?(L6aHbFiwHnu#PznPJSl@zah;ZeZgRFe{+dNCzVt?Bv*GmB9;b#r=?Mi zJa3!BxhMBXr=Ir3e3fnY7ouu7j}A9S?bSqOcgT3Yd4Aax}i&p-+ zb-TGH^R2w)0l07buh&G$G4}dNA7^wukgN8|6sx5u5fL!o|G}3;>qF12V%UJC#&zLi zjVyN7IBJaJ<3(QYs8*(MAL&i_0`Xrv7(0*oBJ++4W)2)O2)EZIx|^6%tz@MfUv(41 z7)x_WO}o2t_#CSe8e=ma)gRg6fs`09JtVV<6=x<@Epox46xIRwsKEQj`b#J>zJsVo zF>J8*O~yuW^R{2QhQmsT%HjOz6UmL<5{SF!hv}__qIMUgHbHkpw0O}7H3uAQv~w5J zOg^U-a|hc36%^K&mUnXF9+<0jH$iv%^$`2`i?QPIZ?5KIukpT%Dka)gB$U@^E{Hrb z!+7{G%8=asC3{^$j)5L?OgjjucgUf)d5JxOWi2TK*rib0)mdk4BbE`Y p{|j>H%VJYHH*<#nA|m^R14DKkFpOzlDwPcPp&dcxn^{_0HG+-#{gWx4W9%fgmR`_9C% zJKd})dNZrQNpni9UaC*m(~f|7QUMFk*nirnfBjo_SxM`rle^Qeyzlw36R1S}dEk)< z&eVsk(?0HQEs9t1-}7-|af8AXU*(_cuTPXbl_mUb`A1=|Y(I_Jyb);{tNpIcKjyC? z8_Jb>_@L0K8|J$v=eGfk=~L^@z1{Nm|J&E%UJFIMn7?XFnfoqN*z2{w25(4)#_qd6 zey2$L<*pClTI#4Jaq3*X+qV+ymP=A1Ud>xdzT9{_`Q24-KBvsToKKfDMsXw`k8av@ zELNlSl7lHn%JieUQ?AVmkXrE}pe*W6zTd*~`E}f>@BRU8y0gtUHlOp9ME$}T>)V-| z*E&V!&$iNgclSJ-=&2v4ZRZu}O}UntZp;oX;)zrD67 zV4M7cj_Vgc9^89#VvRAM;BD*H0I3DpPCK&;%cbN&eyWj}uD9^c-W}GxzE70zv;=AJ z22Bi@7jftAF;(p;!OFl0)C%_h2^4n?(uh8KDf!wv$^Py8tsmtaxVR*sYiU5-{tCag zqF1_(+vl9+O#N`+?!U~}vjd`R3fCuo<$S(9?w^3?!Wx-V!TiYrr~WNm^DSfd7zx@eIGhSe!q8Z>iVV^|CX7)Y&`mS-=)2`=ASF&c&uEZ5)&s&QEbhKmQ zU)7oXeD<~G`-X|D0)Zy($vgC>;;hq5@l$+;0v-$ZBt3dlx7Kg>`TfhLEuYK;OuXs> zGk%}_-o26$BNqX4HMR^#bY|yJC0Z#qyMbcVE*D7g5p_Kua53IdYFWUU5|N3(dV|5! L)z4*}Q$iB}p#)GT diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_37.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_37.png index b0845d18b46dcf10838ad2595208dd091c24787b..345797588970010b9923f5631f017cb9e3860936 100644 GIT binary patch literal 1744 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VQ1PZ!6Kid%2*Mi<>N;Bj?) zTYvc*pU_Dq*O&#nPwh_*=ugf{@?R&<@b6_22SbaHg9alSA>hTZkOhsvRMjGcsS2!# zXr*Y@Lb-1D7_R@-ZxPCCP4*IT6<(MUq7lv(WY8)!F-Nj}?m`itg)SPcK{|q7Ek)lp zI%?e9@!Biy_RAMaQ#evjZmq4{BjDu{B=E2Jj(}HNYmmSjEkUommH?hNTCGCnzvP`Y zIr_Q-9=VCL08J6}0uq&fZ@m2&4P=}DY@Qt>A|t%;2=Bk+0e-yA$%<2UoIHAPqXW=7 z4OgLsDTkG}9M3=Qps`VU)9fl4_lY82Z`z{Xuc*n;cj^qt<5P9&JpS%m|9z&;fK9pT zH@;pz4|KiAsio$-0=Sk1C{1ye+aJy*y6{MH`RU{DuU>S~*f?8e_v$arP8x;I-K}4h zr#S6=?eZ@jmUW_;FmjMQCA-!D;c= z!d@VE%(k3&?vePLR-xS|w{8BRtf+MP;uhye$*Mjq%eiS zi4%=z2w>t+MI$g(fic9Wm$$+rv-IlGNK012eTp2d+ z^AWy^Pr+T5zhk{qoo8-Z?J>jnt*Na4dd(?k%fwzQZ=IUm;6@?(`dak$0^gi@@aj^)Bvuf0bMCi<~V6O0Bw`o z8GDB*#c!dAC(xK;uB9G%bAvTlJwRrlNo?Es0A{w$-r~6er?zLCgB&&K@AEGQ_u2`R z-vSyr325pw5ielAUTCsBpzDdM7$^!wP6ieG{q=u6`C8t&NA?A~U5p+cv$1@BB|vR0 zFdj4~_11^Ffdb;_^0RYZ&M&u2d>gm<#b4b?&tmp&Uh(5&fo8Tj(6E%vb3<<_&p7^M zX7M)Or5^KU|6F~2g~+KXTW1Gr$g^i055I019y=%gU&4$%WyNAOLc*si7v3?gzPg>` z642fzU!hYo7slAuKm8tb8SJQ26Xr%=jXl)@(%-u2;^WJm*$IbkozyNz>#vKC9Nr;B4q#jUq@0{adb@Hia2^Z!x-v&XF+rEerx-rq9uQ$bndN5%)s z6FDaaOrF>)I`OQ?#8i=qr^F|wYD`QDu3vbAP2#h-6KC+l7ecNVT{JR9Pt9!<@mc7i z;(bifXiAgj6pp0CzRi~MsZqAF*ZxNa((qjL*E#Q*Q zl%|ALE*djA7D~*}Y88_Ho20>d5U9{>mjY0AX8@O~)5*8V+aGTaP?}=)^N^Z2Yqrvq z`Wp|#oo|}*TyxUcc=G7MD1|9bnp2cI1B41%%KmI)bLz}IVX{@meWHk$kMmM>E&E&D zK-~uyx@Z)>(X0O>=Fu`~gXe}<>*sf?0rf?j?+V~r22|kNci+0XE8x+M*iS$9TF>H8 zU3PL?@KSTGg-6=NxXx`!>~Wp@>(#m%r`A=|C+VOCq|K0%@QzKo4_)m`XDr z3VF2%%?{UT3DQ_;<{MV!3$)lW?=eu8OVw;$LPgrbBO7mjjMfnJy1b;IBH2O1)hJuz zen)$KoZ=LYr-%01e5?VQXHhnNXaCjekBrp|kC;S$i>u-0T&VI?WctfG7a=jAiNY;H zKy!Bgna{)`w6MkZql*UP#0j<&%e5z-6~lEng9LWF#p00i_>zopr E0NJ|a*8l(j diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_38.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_38.png index 59e349797eb4364e06e392e01abc488d7b2bfae8..eaa46e6773087b41d07989f5c5b92af1d7d4b956 100644 GIT binary patch delta 1759 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 Uo~gZ(ri30(H(%EW6#B(~0O$Uqe*gdg delta 570 zcmdnXznyb}vNlVdr;B4q#jUq@9gCU`1Y8~8)o0c)pJDPe{=9qjroN>qa$b)Plrn#K zv59r^0w&SP512$Io)wwg1Efxg1F6i(^O?jTqGFTpGl{|_Md}SIB-VYG=TLnp=)uuu z>!5K{>{Q-Ck9d2hlMe&RING?`oIE=N!undfS)Dv*288t<6<;5z(>iHGz`DNtueBDk zu`QDxE_@@=Bf8#Qr&Va7NH^2(?f|2d36qmwhG9_x1{qBY@6!B{Ll&_+8 z{E+UomPyv-J1*zPyvR9)DGRi?zjmJAL6H3iHEyqF zvK@DCblS&tE&+OMZC+CKBPPWuPA4bGa|g?De!QCf#e)NA&T%{IW5&$_UM`C+$SF+W z5KcYqz@g%Fa-+u$?)&jhoO&vUG$!9;5`)JODEhRRGPx(mGiy%HW7nLV!)`S>pP6-X h1G^fK)(~GXUw-fXJofOJoBuHYfv2mV%Q~loCID-!=$HTi diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_4.png index 330af4f94e5aaaf523fa599e27b561b6015d00fa..c42aab165904106653b15d93f305e4051f9ee769 100644 GIT binary patch delta 1207 zcmZWmYgCeF9FLr(G7Sv%q$bDP!n7=qMN{MWsx#@d-sKF<@{*U5@lCFaucZj!GC(8cTmKa}u#uqYmd6S<;7 z*gXln@q9Dh%Dac+bu}J`p|!3f`fQC#u)@%6EG5T|9NFm!LHv}OE-P=K|4O2|Js1un z_~0vkZL5E;=Gv>aRmWL?!O*P%6g+;=>%eFhj~q(C_8aI-pbR8#t)}96pa(>mlm

_hUS{vga_FAs$^R%&6Rob5;#^B7s|2cshyGkFO^uh7u8m2hGYQB+&qq$}`c>?<4!2eG@fijEC%?MGp0U;`mi!cx%%6LpDXUP5R<7RiDEHv{! znd@;>j{SPgM|UX2H6xdIlz^p`yM1`@*vh+A6|Jl3bBCi&)sn&5k83Z09<@2} z>eC*ZFJ0i0jD<2O3{B zOLqDQ?vFfD$Ja9oQzp2Q-jKRw3YR%>ddEWN@uFM;J%ctjECQ9C4AR14T0Ft&6zyG{ zLJ!wrvPk|=mjC$l{@A=v!mLQ=h`T6=qoXpZia(ZK9De)D9m?4mN zfUTQnZ_#VgLw-3Iy*qt^JCu#S89Ptm4m~@kV$GbzE2=@8n|*qQq+fLyaa5YNJlp_Y z&4&X5K7;|0Chr8s+LiT^YBq0Tr5H!-Wih}8Hf>FdHCIXYEX z@;*ozXxhVqVzmg(6W)o#UWmOdPdmUz(`GXFPe&S3$&FB-YVt7;h>f_du;cGlwqFg( z(H`BSlp{d~;Yjn_JDG4to5T&I%u4Ggjp@5Q7esX5 z<`xZJAU!ny+IWBkNjKa#WoBeeRfwg5q@EA~21+rg8RWCW)w zCC@Q2mk!V!Y(VtErJBkiU(w!0;lSoO{Yea(<6;2mTsDE@%qmO?Z9J>ZN Nk>Njt-31aa{tGLyOL_nR delta 492 zcmaFL+sZjXS&PNT)5S5Q;?~=1){~eF1za5O{=f7fSwT&rch%LIg0DYmZjBtV zI8--I^x^CYP@1B{d93fauvg2Z9}#P6{&>BQ)%aN0{p1qElJ-rnsvR_LikwuR|Gnj` zfR{_rZ+**!E*hDlC(mD3oWh~nSNka{r#;}&^(Fd}Ekf;i_CTWVuYi|(eIKu&m&{I7 zVuvhH44HVVF~y?bO-F!L0ehZ%ix57-noG4$Mp|h~-<^rK1r{Db5DRbfFFXPwmKgZfqb~};)`FbjR8tCo;rcJf`T8lqcmED z9*VF`u4N0HT)`$Yc|RNf#+FMg3{IR1Qy|37dpVMs UX0MknJj4J5p00i_>zopr0H*xKo&W#< diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_40.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_40.png index b36a6be1491561d1b0c90ece3b1b76ec8516785b..11a90c41a986cc9afcd2e7f0ac405eef77fea165 100644 GIT binary patch delta 1271 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 delta 929 zcmV;S177@s5yT9TBQXXGNklIZbAT+ms4Y|C zXIZwSuRj3%>dO$3eJPRA6p?8akk3|Ic&lu+*c2q=_4kF8K1 z9LdV(70R_^UlD)H>7o2>OodV;UwQuOP^N68)#G1rcts?IQY05GM^z}(HqwN>`L~ac z3gy4!Ae4u`16D7KQ11D1ODNYzQYh_BZhsx!Uu(*tkGGB)PYdOz<0q8%CL=@H<);}! zdH&v{Pzq&SD7*cBE#=fsp77C;l&wPPq8PQI?0ELniu2%wQYc%5($#}%L)rB-)2f@k z38hd99*(a?Jp%lxQ zP2tz1^a#Sc2V)@2L zJ)wWhh~(Wdo)Af)6wBA1S18wxeZ`jtUC+i5N}=4om$7n#IblOvJ?53)us*#j;lw#6 zlm~@!<<(P!vgW#n6>o%}KHjuQ3gy69zHu*Op?ns$)ZgmexfR3|LODE`J1479X8oA? zr^lWU385So%IeAcbUBT6&eg);jV3J9f@ ze&~t)k$@(V(H4=sDUoRvk7Yy?FT5-$`4t6ZYMhA4;*GC{z)1Wf=#OcVi)X$z>O)`KVlDThd$aukU! z6l#FRfKkpGP(UDbS{O79p|!QhC5ME_l^9Zt5dz%}?H}X^Go8-tzVq$-Jn#9v`+X@? z%7InbjaU>4wTet4(om=+zQ~JS4r|yrvky@yqjO~9zQfU-<2}Dc3fzr-4$aI8JyrK4 zO}oL7-x~s-)el9X#(^gDa&y$|CBiZkh_Qj@3$$G#b?H3uJ`2RW&oUS-mO4M|Tq@*B z6Ly)tMbWZ>9~J~~`ZO=osJ2k3pf3k)2jX(T6l#bxsa8>A3ne?f%InXY`Pm2|>fh<6 zvZ5p@LAIQfq_guySk73dDdrtIwNT zy^P8#kZni6jIJZ`?v+%m9Y}D5dZpV8I*hzpV{jb$nQoj1;vlsAYwC+!I>1@SKVvPa z+hqW^cy~;`Sql5G$_+3enyDk2$R6u?xm$ZId0Nf9-cQ3mtT^0A&h zAo=+~UQOCMUw+d7<4s9f=r`1zv1*Fg0clk;8=q;Cv>91VU9u52fp98mTEPy=N)B9a zt64=G1}^(aKh^zDq{Je?kjDUk#7MmjhnT;E^JeCs&-pCFJ}*RFXmDWNVyXYjI1U^C zr}%TVU-gb*sPulhZv8UTbeT^F86jQB%^ny?N5Og z0ldUi7NzF<5{p|H7B*Z%@`_pK*hU!sNf{|~Y{Nm`AmPiF>}Y>_MJ0j@HVtRlUW}Ek zXEyq6D-etAr8ubBd63S1?xK=e{y6+9>XA4;z7@lwyc>-@4B*G^QV!^q+5%%<6UplW zuLSnk>@-xE*OXy-%s1M8f8&Q2{xi1d|><| z)(s8~XvINb%vf_*Bd<=o?L%w~r@M{cp2EmHdHi8Mf{io);RUf;EQp0-K z7s-5o4^@_xh__S0WF|~%@es$%kCs@%*{Sc|JDDjjXU$AMqMwzguLG0gXf znV}E)cT3UX+!bNkFYv{Ud>0o;c&@Qfnkx?EOuP=bXR;@)IAM|!{8iRjSW9rt{+6UX zmf53RyTALGzJE+qq0q>6brET( zF_P~aP0!Z^#mRb9u38Vter~rqpNG}h8J(U`s#4km$BvJJ9bpc^F%I`5#65~vP59l8 z`4tf?Wv3_mlzL7jx}3sN&PY40)(R8eO0~CYW9&NW;e;FA+#llDv4vkcd2_eAMw$QM z=>>AIIi{T!KHfW;XFOG9?JK)Q5Hb!dbYU%g6)pPQLE9~wI`4?e9J3ZTZ+y`Ic%uxy Ofl*{13b7pgB=Lp7 literal 1231 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|U!6PZ!6Kid%2*M&~gZ3b-D; z`F~lv=z$09X78d^KhBj?w=)zIy3TvReYz@xfEU9;7Bs>^gRw;jjlfg|)P$i5tchr) zXx75G*i41VA-fgLg)lC$O0ha~Aq&hHWLIESimU*k37gVYf0EYk)W3CIVxfx86sHUO z_Hn2>NlLS3D^1~8n!u&%lxfWUY*wkOhGmKKdY=4W_VO*0HUw1t{`v1`OOS@(sfP(+ zeM>MV69oX&t_Et|^YKpKtIrtK}}0;v*Q zC^It{WRZ^isf&_e(ZJMx?WtstEK354A>z%1J?a| zWZDAMEP86yb#9<%e~NzwJ2qA6)9OgDpDryw36ZiaohPdgR4d{IGOI|%%jxC&V4y9( z*PQnUdRcSIzI9<5f@h<_AvMQjYM~YYNxxe~;o1C$9`%~u zAWC1ZHWd?VwOL_h@AET|VTlP??BXq$p#d*RI>I)A7qDY_05qW`pGtWPt;KoL%4xVj zz+m}7hsg!+dFEJKeIbC@EYCK|#zGg*{RzDB!0Y`oU}-8b#%q<9P;3v_*_>H_Jzbdw z$u`xpf!FwvMYueD)h0lUoBgU#-~m$5qD@fvz?kEM(`C9;EM)P?HgHZI;hP_9(fRSs zz~zdL8n_IRU{a>EZ`=&!+&BU)FEGK*;2bdsq}c-Y7cAvpM%1_n0UtrNNn&m!Lm(kr zS}uD#Cyys`MIUG%ra^g3(KR_Nt|nDOI3?kbLK88-NL$$WBDXaC?$c~1U}X`wQzc?! z;mr-VX^9XZqfZSJ3+zy9*USB*LF>3kzHujGFfcYFuaQtehAhf4grE+#I5V&5tgadh zDovw!Lu~r^08?56p-i`@Rt!4e8SC&mJAD3#9-H2turK9}4i$?r7W$vn7N%fjN#%fU z@M2w1nAlogUbuET1l(t7C5GsRH2Y6|Q}oAM2T>jK39p6KWonyDNsqh-juAx0vO=2k zrrK2^CJ~?WH<6%b?pg5+LoK2m@lnbA&$QoZ#Ni!=EZqH|ZLjx-JJ0+Wf95!w9%RPm z&zmOA)d!9s`+^I7({-A)m4rP!)!VN-6eGN2+&r> zu_&1>`W5*=Y%-|A-3|f5!6$KdHG-D$HF`NYd!W>Phb>xNBA`23XY!j8e4J;W$qMEU zS)j(D_fdA>snS%shPClXb7JH4YFiW!pHA6+%jnU4WS`qCjkzZi33ao@%4YPP&XGuH z-g6$kvn8Dq20D1Gj}XvN`c6Gug$uq#S&18fQmDKWl2(%xR#&GAS3kj3#1P2a)e@C# z1$2IEs$I+B_f!$Ric5fyPKE%-q3ugzVq-}Fgl|NC(iypOU!4M!$)Bwi6lx1Abq9xk zmPZGoQaLzkw;HIza8t?cN@n3kD%lk6?{G<2V)H$rSQxu@LK3IVqKitZcWVkSU?*c> zed1mq-8&{)!hsvTELikPOni}YvA&{mw-r7Y#Pn3-?jZuoxf8Oa$I-X@$mS^QwCxHU zwMB(HuhDudr(e!pKTSeQk7P94)N=$?$(+6zprhXPaFhdu-)^W1xJ7ip zA(9#YO7a-5gD52XS= G`29atLmaID literal 1514 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VpcoH!Mxpc5FXfSNE> zfprqA6wO)~7n`XtIb@^JT?lnG(MplcLTJKjDmJCqoCy@eqV(Lahj!Wjm%eX*`FZ86 z9zqNkoP$7+0jt^jhul$Y#Pr;MG{+dsXm6Y}a_kgDu?!91G?=1Y3tMy;_ zM)H*KA;l?eJ4_~ocBdUmnj>*)GB7UNerWXU*86;RdANpu_mTiU`A03kkE*qAx}Ec` zM&yVl(2>#i1GJ~SZ~rvK18DuReUBY9?sGofQa%UB>#MV#7VwULsRb~Q+3dbttGUOi z>col27YG*C972LpEI9;N24OW7n^NNQ9oF&*;SUrRHd9d)K%IisnNFGF*z!Fw_8(xe Z-}bMf?#F|z8-QgvgQu&X%Q~loCIEp*1H1qL diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_44.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_44.png index 29133eb5e6f5fc441cc075314e38525e90d544c0..d11d19513325694356ca7ab6fa5f0950eb4f4a27 100644 GIT binary patch delta 1376 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 delta 543 zcmaFQw}*3rvNlVzr;B4q#jUq@1M?0U2)G8mufLqgKCwx?%;vpJXa1bP=R#Uh$5;=n zO=OvPQDkDj=*06P6VpW|o)Mpzt~oKa0ZBxp-sMj~PddMVS4*IU{CS>*E((jAUmkVR z5cD{xGeg#?)8iOhutuxU#F{-XJU4#HW(O*mZsUJyu7#85X4UwgbLOVq_-G~QH8Ez- znOLTxa#<(MDIF<4Eq9#>0PA{dGxwcZYmi2!)Tz7auS7f-ig?}eowYDPY09)YJ9m3- z7OVGax%8(+XyKM8XU?DB(<-#kWPjp4j->%crq-XufO2=vNH5&-=Fj(Ox6gni%@?|8 z=-QYX8y5o^d!L#Ww*+aN_0|yd>bAdTb3F6^-`%frfKK2@4bixJRCx-Jsei^3=#qsw z;-_92b1ns1EV%H`uQP&PeB4Vv1MR6-n&NwY^RL}Nkt3UqMq2H&Pz37!8Chln43Z!X zpwk7tfR0}1qJv;+w0;uyo+ZF#DB`8Fp<{6~iodFVEOC7jWolf3MSawcep^L#^-OT}9 ps)satCI)L@i!fjms))D$W|Uq3vwG@>HOve^;OXk;vd$@?2>|MM>r4Ou diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_48.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_48.png index 1e1ad80ea2f84ea8d514d57a2b42e682f582aaa1..ae044acdea54db9986e46ae59bb4377d314e8611 100644 GIT binary patch literal 2275 zcmb7GX;f3!77jv762$VDp&%~C8=2Hv85F2j6cQ-8jmRJ%2rti4hDg8w5(OoZqVIvi z1++4FOCeGMDqtvxQhX1P&>{r|A%Q3mmQ0DJGBuL)iv3gIhi|QO_d0u@Zx45`v%ht+ zAwMroyfGew!Dte_Jt-KB3hCX4{TQ{R5%fR8V6ZEqs72loq=eIwVW zj}#G2=--;Xh_9?s`=|9*6}(zmI%es&C@hAh{RN=1Mre^Rh}s&l9>vmLk6Ly5VCb5( z@6|jHRawiTDz;+Bg$wnEAJKA~4BAg8n#0IBE)Qb$1&!`wuqfLs&JR)B0t`Ea91BFZ~`E`e}-7qio?GYafY#wUT~H&ZhU6V8t2rT{_5YQuhVuU&UYIE1(Wm zo#0HIboRehD<%5;CcGUdzInr4!fy8Isus!M1-*b3+n zYu6kRw(xe3kI5Kqy+?9JY39C3;+~ zn+-e3xi_IbDIPC5();@Sy9k$Vjg~@y!_{OoX*Ev#-LoUj6X=h|{-e93to+NfCuw7C z&AZ_K&M<&2O97Hig(Z_-0Gk4cLbbxcCi!#8ZYNu_7lkH#94#3~eLgXV7iVYQ6SN5N z)WsBRMLj>Sh>6BWS54&9&X`k^L^X5Z_ zUx?4#fz(J!pnW7FY!umq!?wTXLwK>z6|Qp?I3&kcQZkZ13IjfM2to&|pEhs#zrmy0 z{J#9{aL;z~V=~ywmPJ~kInd>mC41V1jw9E-vQd#AZ?CCIefR@PDx+7g!}Z}v%kHW7 zrHzBj5=&eKgdX9=`JY#Tggo>>tj~cIie$IVyv3mjj*Za(B?9m;O+uJwRFYG@Z`F70 zO^`Mhjvcs`a;oY-NOBbc2ZahJ9jtz$Mz=E&GzQl`lb1 zA9aP?{HD~9A00z*fKBx~S=|FfqR5`xj`+C3R4%lK@Dq2{->EmANz-QEp%sa7!d(y*Y*jHb(12!h;UQ}tu- z8po!0M=ws9eRYS-Sx`QC*3QHqS~bfCmfD%MM_2c&9e&?uHpTxPgY}u~7qA^qg27Rn z`z_G9pUQU`c(#y`vQIW3wYL`WZgaK@ajmp5jaq06 zPF$tD5uhQ?PN-pi{L{=8HZg{X!p2)0W4;PZBgb_vjs6kPp=WkUxKsIbFb~ql9~R5^ zkxf!Kkx4V$TYRU_6bnwSp2Ef*cxo3E&_eVO%Q^i6{(M)*K`r#YT-4aR6XuB2Yu=bn zl)S6a$l%*-bw)*8u^|yL(dLH}MR|xmUNFRiex9{p#Q8q~!l1E^ delta 957 zcmV;u148`c5!einBP|9WNklLy0|w-E?H?eN!dNt%okD(k%$*eT&52MJ z4P>?hMJSEs$+aVt0$C!MT@Kg`<1Cc9=0hl(Me^i`#mZw{D3dI-QwNq%u8HK16Q4-_9Sflp$?)xe zI2p=n2k(FLCzNOBK`2Es?LvF{izW+HD5LL;gtGBj@YFU5W!#Bw=gDwtD8Ct7p>#Ew za^EKG|F_#Olyl}lCd4A#?_=y3T2s4c6+Yv%0BGc-)W(|GNwW)l4(QP z`N7|-`yrJ5$6qLgGVE%r!@l3yj~)AeK0TC^*PKu`4P@oTeRuwZ^4$0frBId$WS7M) zl*V2tMKU~;ofh|#Tj&E9A`o)l;zIy)fV^acY_LL z%@dSR3gxW@DwIN*>0~UFLYa0SCxtT0G0=ALzl2gK7e07=>Tlvg58f5ywDM;@JrT=4rS%H>a4oj7D}N^bqjdnimJ-h9D1|b8D67AZ@>C?Fo)ydxsA^+g zJ)%O{;PaqQfA?A_V?&wcN=_(+QYaq;^4;fZLKzdgOt-v3DU>Z@x$=9om0#Rjaj`~* za{9OnrBH4U<*LQqX?}!KD24Lk0nsIts~2~txruy*Tjfwr__#|b3r^mDs!;A&+}-Bo zR4BX0LnvKUro817N}&`=p==dPuUX48A5Z`9h`WJl>r5!cQYZ^9sGXsl5DuXn6wB3uWDBTkrfSh$)0pFw;F~ zTk!zQ^x$#y!~0VrA(X>7LU}5dk=t$|?cbhvFB_R2NTC$Wv|rT{%Cn&qN1-&)1-{2x z?EuUem^<4fjzVeLABGbc&;>&PlWzn)lQ0AnlfVQklWznRlm7%Oldc35lb{GJlkNl* fldJ?z7f{hJB&cYP#=;Z|00000NkvXXu0mjfZ#2R( diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_49.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_49.png index 3e02a52ca131a6535b3c122d86718cf8aa91ffb7..eca45b1bf58d23b130c6706db7cf9bfc90f4d38c 100644 GIT binary patch delta 1295 zcmYk4Yfuwc6vv?fOd>@?Bh;!uLBmoZ3Uq=|Q_YI4#0V>hf}&Iz3e*|}6d40VnMA|~ zuU$Z1!Brv^5fn<0qQnZ01|)Py1p}nm+K@&CB?^-8>RtHK{cv~Yo^$@^fA0CIC{=bj zZeBK{0sh=w$$i7xodtcHZMSmA6$Ygp|FnE;WoVgix#fu{CaX24*V&@*fZQS%=b(|6 zbaaI!SM=A|uQPYnjBkbF*ODJT7P?|^rb~5JI)@9TMs}aT4zT zdCT+co2f8FQ-;Rh-Fp*6;HDYRSK7UjV2IW}7N6W0h|_ug#%oC6!nWD!AV^}5M=T>x zo<>|3FHkXvEM+as{?fj@dOHyl-Am~Xx+vyshS&)#wyD~vZXnALSFCZm*+b|8%pf%s znIl!4_p(r{W-1hAk)SFDU43Y@V+!`b)|I5ZVcpy2f{}H%w+ryLR!=OtQGH~1F0@>@ zyUAqz310Co;7<;w?!5?fS0z$q$lrCs0o});`dD$ED91hdF%o!S4IJ>IDAE|NTaics z2|p$9H_D}4H*DZo&q;k(#k_Xj%R}M!1+*nRaWF(o!ULmfNE|_f!yl@qq>HZ5c*R)^P2pp&wkJ|bc^K$v0>cm&bUc|7#Em_tf;ND>Z zwbm^f&R2y0e%cb;AN1K(O~L6(#^4J#44omZMQ@QD(YGWz%CyQv7h6$L0m%WaB`pDW zG|@G?bG?(!hyC>OC_{rO;Haw0?$wRo-qa<5vG-`NvK8!~E3N7~`Z_%@*`nv;?4ae( z_eW`>hll7q+_UukKWDTf)7Ke?{VI`fH&Wy(({O55a_tQzk?$QtU8dg{A9-Xj=0~7s zGxPAoDX7-z;-y6Cy=)Jhzpt4s5gA7(Dmdi)L}{8%Fy<73Hk9~&Pq)$#KAjXv#`uXn{}o8j|$a&olB=E`G#D+X6hAN5`0>m5C_ek47us2IHjr@Ok+5^ z#Sw-Iq%zrAqmtb`&AQ(o;Xcw@s(BpTk4Ptuy)Kw9I|zw3X`fVG3MvYLthYfD<1m9E zsXGLKbipGW+K;ll4gI^M(t2|T?fQ4dw!Tiyi?CuR<#~kBS@h1!XWtgn>%k2rzW;_5 zrzp$l?N#%tJE0Zlz&eKL?aTabnT1ZP^>m)4efuMvKk%V#K7|XVet;oKcc}mQ`X*D9Pu zB`Kbu2O&nB2sMW|*Wa~%QYwTs(>tdBU^mWGj+ONYRPP)k@Bwdq50bPOEDrG8-2$vh zd_<}d=h(s9NsUX*4p|6QXYjocC`u}p69gePPn%5kPos@0q9VH`Vb&aftp=aR3z>PIr#N+LOyOz%>!2an*7!H$t*}$4$Fwfz?6ppsQ#ew8YQD;Y zvMlbb4c2HCn)rq*HA0g^_O2j{f55NI*v|$ zE$+4Oh{@0G-#<(My6MygRBD653 zXfDuBi?ZXg`?dWqa;VO}^FY16&8TuOhpMz+owff|<8|IZw_i^2v03GJfkRbz*}j?U zmq1KDxg%m--1ZKjZ#1WX9KICfG0jO27YcZ_Omg4o@zVzA*qLHoOV0b$|4^91a_<7r z8;{z=ycUXh$?TTh-zv1w#J8(+tKt-;o!J_~O<-?wEe%jtn$mZ-DJhm?sYjmNsmqH& z;+gItK-Y?R1#VPp2~y$z$#3V>Ir#yT^yC_5k;(kb+LI?Ri%#|j(*Kx5CigLG0L8>7 iUtrQklIIqGUCXE>;^>qsdRdJD2s~Z=T-G@yGywod5b)Fh diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_5.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_5.png index 868d40b24539bf16956b1f5ecf1a8539f80270a2..db32cea786463e2692b9947b8706407822eb7592 100644 GIT binary patch delta 1790 zcmVeV^GEM^gl zVzI9&nWC;Q0RGoy7n4r`6_bwv6p{RDf4}XN>+}Brp%lg@(X1NoxAv`lTziH>DUdA| z^psGZ+}G(*==uvxC>t+ci+KOOUj6(NqmXc>FO&fbch^BAl~d|JP+D6;X_(tX+3f=0Dj)3> zN^46fLkIcac6a`SMAcB<*#@B$e@cUF^jw7U%r*$6P#R>@KvrMGLTP;or9mDEWT!kdlgmP~vcb<)! zr%)Q?!$AJ|Z_MNKeR=n1f4#LG)|XHk=B7Xj<-W&%GnCerP#WfiESEm6P_EtgJ1)kb`e_`Y91zOYXBjIGBn#`Ee?Y$Vcz5q`?#8`B z84=1iUzQ2w+J$xU{*RyjyyTDwrC8p+BxluPO%CO*|5iMgv_N*AiBJYD+$Y;=f7e-z z|N7a9-zP7W!$Z0Iz<9cy_H~^___v#oB!oaHh4R<|^49j*$8{FowC}+YN}*hGpsd&~ z`?k&^oAw79p%lv32M!!yKojf&lkWu~ljsB-lP?9~e?TY!gtE?tU!VU+&)G3!&K+ib zrS0&p14)lY!t7RW-tUQe5v#XT3?bx=?p^RUnQ$yM1ETwZOQ|8q< zHaoU`!U@gzP@Wz}YABOtC6u#IX4;3cdx#SMAobSssj?rszkIC_$%GSyR-vr?M*QkU zkr2u^e}1MJ)tJkQeNp1?vRLyk6v-`*lX$jL^{z3=GwS;C*iA78{FZ(4axO8H)o-ztI-_0tv)d ze-z5<_asc7QHA~Z=55wW?9=1`c3Xfcq3rs-E-5pr@?i>hI1dPAwU=`#q3m#WkvyY{ z@A)Qt!PvM^R{u?&8ptDKn~Y+d$u$Gc1-T4@{waZ=Xz=(eALg z&6-d?3T5H}k`~IyMO^f2O@vY`mtGRl;S!3@XOu}ZN<5pa7)znF2+J>0Gn#cae<_qg zDU@a;ltL+#LMfCfe|;88p|l8vGB%VI*NadN4ds;Wsj$6fRO4(?D237@EV^KQ3Pvb} zQY3}aj9P6&*YD#IN{cWymSsQpdw82p?-v)Gi{yw!xa)2@v0q(UG?eMDB82iEJ8N1b zJO8#Gb;~WGJn||+D8JcZy9O+je>D#9@;7lU__DX!_u?c)vP~#gExM_TaQ9tx;_h}G z{{G#HFUQHD?DV`-9>a|C zLOJ4><5zK00+|-dr}LXWqv|iaSFYERGyiHRY0*t$R_5Jx?hZ`=p#%_0lk^1~ljsB- glP?8M7=X@x0lBq2KT%o0nE(I)07*qoM6N<$f@MXIsQ>@~ delta 916 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 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_51.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_51.png index 9b68d0b0c12b6892aba808d008aa19c38445c91e..6417d8dc4692e4407db49e77943d14e1a41f8dc1 100644 GIT binary patch delta 1401 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 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_53.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_53.png index baee14750ff3ffd07d6f0409e50090c5963963fd..36b6b79e263bad4990a07babcef6bcbf3692a1d3 100644 GIT binary patch literal 2256 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 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_54.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_54.png index fde4e758f75c98bb6bffc2fa65153c7145f212d5..84da0573ee9d4fee0cdb47134cd2b93166b80220 100644 GIT binary patch literal 1861 zcmb7_3rtg27{{x?sGT)ZiiPrM0~RhB$VBC_A(cB2Dbil+3&nxs;R9Bn)gc9;xb&iB zQbY<9taVrE>O@c(OBc6wk(eq)1d1%sA}U%LVnvI>q)>KYnk|WT0PV^5U1o>D*e{NWjM$Q^Gu}(ck$ysq>U=6t zobk9J!fX2nZ-*Asvl=j08Fy{MlQ5IrH&Egm8vVx_JWt6C9kKKQP-ML`|JwtQ^A8esTzLspOck zNGcx?keNs%u!C~sNj#1Q`bwg`I-FzC9@vy?t4sEkVC7Jvs0i|uU=82>L!c0r*5a^~ zAtWGfS1uA6LN;(YdL7`v5c0BtDX}X;WFV6~o5e!yb$n=b#rXko1ge5F$e|KBDg^pg zfg&h#iJ_}J3UJU&K(hEsR6dOZuoBf?=sXipAt@FWCo-w8UX?lRjU zwSE$XrDnYCmD3uq#Q^DoJ<%i>ihv#pmX@5&zfYC;l^!Wrega&C^#T`BB^axKr4>O7 zt-@Stc90b{+nf)bEBL=qYlm+Q&!;*sI-gA}?R`4t@|klTl=EfA z@Jg5Is!~YiKB%8wzY|D!()mM5Sele|c=zTtf}NlB5=SM1QT3QYywaGfEFDelfq4;t z!v2D<1h2mrcqjM{3)w|x=;=vqM;+_}9=8Pi47#Xl(k&-a4*bd zInJE-rW!O585Q1x!@#rSX~S`Q&~>9};Pw4_=ux8MdZ5i`G!cM#%`tzXIYUzfYiAB7 z8(>{J^?mWoch;Sc_9Sku=H? zr)qLjll{3kKHYfto9Bj^OiE~PBx$&;)=$@Pg(l0( z{VGpB&($;kl~V&hl>U(4=?M0YEev`Xn8ToEfN%6R9U+;w6>+1gWLe18d27PEoBiLF o#;U&jcjZ8A-y5~6M2 z9nqRV8>aE5J~>_i6p@iXwLC%zWLFo+E~l4goH|oQdDGoAT7xud|F{9&`Pp4#<+c@* zlNF~pb-Idjr;B^(tg4T&uy)D}ocwPeP*X(6!h*VmM;7h!1-dsWu=UbUpyxz5w|lls zT9W!TI2q`kh_Hzzi^aTJis}{od5(my_f!FfM2+l;VCIiUvx`A8o37R?_RQmU^4u8U zW;-?g@?W>!fJri5n*}|Ao|bkwXd~ctM4{4*L)AGs!HtPkb4r7O(&YC{OR-0gnt1IW Yh6{@Ow`Tvaf64#^p00i_>zopr01^w%R{#J2 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_55.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_55.png index 4576d94d6dc5cf7237cb870bedd2fc8cdf4bc6ee..aee3e231ad592611bf5b1b5a09a42b8fb8d7e936 100644 GIT binary patch literal 2169 zcmb_eYfuwc6pmGtgwmjBz$X@HSRR6JB)mpuVxuB zyO*594c$1t^V#0-^gcadB>=Lg6&YJRIk<%32m+3~$_rSsAQ;hb$g&0Dbrg5i>!|sn zH-;`~`&W7fK@vn2$;viw?NrCM3qvoGhr10V4Mr8FToy25h}iwGk~hD&VG5dj2@xa^ zA@mkM=s2Q}tt3!wwJF`+9&vZ}e9+pXqkwYU9x6}_3SzaxU~i%pySZ> z#A8$-|1`1z>z3v?nKA|rVIrY$*VNv!U;0Wf&ZX#B!}lM+2WnI7|E#JgWA5*L3I@OE zX1v@~32iq(tpfR&BwJOMpJ5@id}EW9!9IW&83VYj2msb|9pkPUgw{dP=Os{Tnq%U% zLU)V3z>y{vu+)1>os4ypx@$|-{s2$&G6Flh=p#?@eewK#pp}O&Up;MyT@x?zr>PgY z-pFc2Dl!3`KZQ&L%V%V(6^D?Ci7Qwp%l*xD4GsI;f+V0_kkp2!ELcO7sF}}+p-*P7 zRKFt85S`{%RX)NV&-I?B1ODyE;aIIGcPcn457SPz17Hy)ZpMY-`>58KhIGd|Jms{R zIC+ZA)Xk+#tbpRzE-0;vk#6EewnT`My25+$=u=2UD1aUrpv%CccclmX<4=@9oiP~Q z`X+N2%uT4G0^fw!2WZKRVFTVE8-)DW@;u0qXk^e zSl8JSPq)qR%Oi%yZ}4FO zlr03r-AwTg(};?6*8(N{7F{=9QuF?B)YX)vs~dyXwldX?8r*{U`9CIO(Ro{Jh!*RO z?Y${r>R7Gqrux~NQK*=x`+;^0(=c&G_Z$ZHfp;p_pc?RPQ`yUN}T5JWv`58TL^ zjQcPoq;0@UDip$cJ&FCN)=qOFvb30D*((;pz8jUJ-3`A&~{-G)`NJe$AMT|2lGwQ)oD=N%cP5%clU&4)<)DE^U1d z_vg7&4tP)1jq9Ul{9Pt#JH}lC8h5@6r}wX+^*b|ojjC56kSvUC$yKuP=yxy7;q7AR zvIU}RGvz89jcHL%8g{MYa^%K1SGj@j_I25&I;b-iJSyO7j+QsN&2ozSTTYk}pLzT~ zdeC9=tO*!AF|#}E^V^s6Tq(uGJ4It(twRzXIgkT$q-0xx$7K4h(V2YkmNoo9j68MW zIihM?u7(9zxu19x(aIlq4vBO_8PS!(Y*Js9!4)~tK7HW4Z1l_4A+gkD?MF!W)}dz4 zo3Nv2fJNMNN0GDr+tJUd2-{Ra5A>Fj5BQULi4VgF=peLT_-WSa=3?=c_QXDOnCBgL z_*^ym`z5z6m-cZ!1Ts~emDDUhv!;kcW4PfpR=qG`)I(JXnt(myly>k=(hk*xh2uV>E&n$`c!({a&%MSu6p9F7H%_SDr@Dka#Nf&Kl zu)`x840aJ(S1#p74z?FA!z_GOw&FJ1Xfuoh@&AM~&|CWNEeQVt{0Hc3g!BB1vg$@m Z#&+p_Zh_xwhW%3DsJ?U`DfscZKL9wlb}Rq@ delta 813 zcmV+|1JeBY5bX<)BQOQDNkl7FQK(s7 zM4F;sZvZ}e83L0n1f-My11ypRlz;5^248FcR3C@#^RsIntIz+bu@_2|urrihzJo55#$G6e^4QlXvu|{v%sKXxzQ-+;%|iL)Q=?D{ z<%%=x=pIX<6iT67Fn;bi6iT6N z7)lStSQkq78upK+P!0>Frw6SIrQ2p|!frBH4T<&|$k`BW*CCVwq?C_RsIe<&;d z2j%ozD24Lv!M!^}x#FHf`%WlLSkN)ty=G>9)*Po$3Z)4v6iUydj6cq($l7;8DU=(p z1^xGYLG$zcI3que+IK=ZV#0QOy1Vn~Q7G3OXY^^ieJ7NoLm3rFq0AS`353#w9s4xt z!M#Fh-wCBqZhS97DSwoeFE=I2Z(?TuOYi4OV|?ZC=# rjv5=w1C#Cpcdj3PMhFfAR( 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 delta 415 zcmeC;f50(8S&K#8)5S5Q;?~={j(M#HJPrr%{J)fTRIG85#D?@GatD^xiFW_9XKL_1 z%r!A^>ck1cllhtLCI>Lp)lbsnuY2;ZWQO=c7md~+jaH$BB3?kIAe^`<$M?A@Kxv9o zXMmE-Ggl2kzRyZiINB=(y;=_M;ZQx47}p~7&_Ew3Jxja=Xuzd>d#BC<4pktbGxPfY zLggtOsXrKaT7(w*@Gni^QgzatlGGV+>1naXW}s>Hf~O`ejM=LVl>SqzVO-V*v?hTy4UzllI!p0buM zPICo&TgUMEI)|<$K%!S;v_appq_lb9d$Cr#AWgku5@DJ)n6Q?x>Mljt8t~DQ^ zAg2#etDb)px@Ozori2o1IDXlfu=sj>StEb4$7AoLhS|A2tt6WZmwb#q{hjMpG8azf zrZ}^L0Co_-v(HJ)zeF{wq?*x(qLZfX8%7G__GeK65rI86_=5m5^K-!FqfT@vP06ic zJYZWuM7#pVd?Vz|PEH4^Yk88GBLoZxeNIxE>Oz)*A1*1T-kCYZ^#$4wglSLhC~w=l z3pAl00cdTaL8UL8%)&W>v5{&7dGb8fIuFbB*J5)M&|K;+5F6tOQQJCjk$5DBbr{;@ zy=(HV6I|zvA4UI;gSa2Oz*f{qXKNT__T~^XIe?M6D`(2r&R74apxG)pgs&F+TWu1xK+GGlw#^v z!*|it*F7~+ z)&63`)D6Gp_5h1mpPn;73JtT%|bbK_Ls${Zrl`@i;?=hK3~i50fkv@3;uxZBfoPs zNC|nl^(astLr}u(%oKMEj~MQgjq?F{l%GTAtt1(f#n2%ORIR5iD9`0C2b6JrkrVE@ z#x2uwz3>c>m{3RE*U4&7?w_%cnAI~7#Hh96Js^?pMWU7g+jPs%C>KKYwa z|K;-uQ0uJ{&kV>4PgcEhHdS2Q6yhoq2$(@T6Zzh;clPyOr*8X;;_evf>QYlPucx0C zW+C~8I*Y6r$9^?`xA`IMBnkKoS!Sz$a;$wp)q5z9E|I16e0MFQbhn>F_B3-Jh|Z~# z$QE{6L4%!bgnoigck!+&OlBe?)uVPN9Tt@qDI&o7F z@Uuo>Qcpj>D&fJG+sL7X&xUU%ZA95E*tnb=(1<(2ELNM-Za+fFVv8sJUbP73RO=me zjQ8|9m9HCKSu*dV9T=K7il1`6W=fy2e`OAJt4eBXsiATWP3IYhX-Y3wz55py98I-J zFf69*37f71vT!db#$HLP&qO`(MJ${qPCXdOFrkM4*cEZUq4%k3R^GQ07ANxXbqP@@ z$Qy6|vU`~tlFxXz<50$CnpiMTYHUJ%fy03P(NQXov^`c({L&mR1<_%wMHewx@uv7P zzp?2KF?lNb3pVbI3c(>dKpjcrCb_(+;_W}b?Pw0oN|H8(SzAdu?xB6$(8|;5vLgHS5lt(eMGNpPD^j22*Rupm&+03kWrX~sm~e0z9368tkBEs4$Q?h* zlxlV%BO-4f=W8e0-24bbxa&%eHee_CP;eNieWJ4>H|}-<%jJgDL6@L(jKAkoP@}(s zY~1Yyj?|&H2&je_ByYyHbzME^Tnvp#!%`ebt0=;Nd{o4S+!H0t*dkVPu%qYbtNL~l zb4phTRl+UGokINdPhG{h=lz2^wdU+dOl%5J?d>)5eQWCR=3x1prBwGb>X9XcHOEgy zr6D7I;+pyn)U?(yJA0u(!=`S$9zPRMgzOb)agEdo9{)T?b=}@x$G%yzj2i8h^q0X3x&ow-DRBj>q`Y3#?_!ni4IPNasRaS zzYWXcb6~?7^E<$A_zzJAC)LKae5>#^e5=#-NMG8k1FeZ|=>;Cpiv&g@2Kw>|U!DIC D_G6{4 literal 1513 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V;@PZ!6Kid%2*p3Zw^AmVWG z&wu~RnW0-lRP4T0u2C&5U>7~u_nr4j%WKvH(bE+f1iTm)vY-(T8jLMMXauGzpe77e zU`<3TMY9&h#bzo@4%w|}E`)K3Rf^S_3t3>sAiDyqQe*`PO&CgBc-5bNy~)q;Xz~J?)*m_;B&7O$OyQeF3*@6{hg|^;w4pUv-{Yxvy0SsA=&;n~yh~G^aRO+Dy4Q z&wtwY4GH>PAtomQ58JoAXb<*plm_A$Tfj;hIhLYcD&A0L48t zR_A^a^~!eCm@5R|RSK zJ~|kXwzueHna{p(-muFU+tfOWU# z${8c!^?mUf$y2ctx1MXc#B#4@{`2+K>{8Ed7sh=20oLH#_~)nfF-yBCtL5%n3400e z(3~*Sd1mIC&8?R}TnUj=D_nJ^fE*HOH|1jYkB~pDMfaqHy%zFVu9NMqI8-s8XX$Fs z`DY9}8IOPcdw;I;&d(LCm!yPGEt`Bpb&6zCrPdTBpk~b}sbUv81Jdp{sZDaS)SDu^ z&P-|k`;*pl((gUKm6!(%z2mJ#Ut{L{(CSz<|5w+X%VEzqfWkXs-7lZ7C)YQRjY5+mx2qJMvu0afF3-VM7f!U!Lh;$l3MFgq=BJwiIdjxu6{0sQQc4lwq+x>pK`}=lw=gz@2 z9|QbaJOBU&zWXQ)0MMaoKiqQ6lTKQr3jiyOd?}s>PQD!Mc%0b2&B)txW|qFG{~F^P z2bELGb?H}!EtWmB&k>iabsu=RUkCPpI$Yy<3P6_`QRk}#C@g3pYA*6iq4UaqHecW2 zX)?wPxyGTf=FP3L0Rsw1_>+wqQMrQtf*UsaC

$$SYoJ9k#Mi<_WGb>frj*Mh^caM%aPL$i_o#BS`9>TJqru(t-Pc8)7A&|Vi_K5}pz|1hHW$sh7<4h3nC}ar@{4lL%xtNq)t%l* zLd2m#)746+1EuZJ@nPhAca2qYpchozS08Xb<Ta_O(SbIKe)A*zzZ7+=uKt2Vt(8WKL92{>$>F;UB$d6M(38;{E%XU&yeTLsPP z>E6u(Bw=RoC^l#|vo}5s_6L;iSG$D^Gk+hWH`*bg=&cWF(YZ12%;}vreea_-AnZcs z(9-1Mr-;U{LxdM~M92%{nL#PBo9tVr4Vc;q)QVCThc;P-D<+G6&EqD%jl*1tt(GSg z&OD{|JSX%SWuk?`@d^?hUDY>Vt>K)Pz5MH&3k@1lOxh2pR~WmojD5B+oTmU*&+QIhU?e?9i0dp!ZM9orod*NKu0J?UU(8;*whK?vSK)i1_{>PeO61mv9_YDy0Z^ zpWi{GaniDkpDW0=%y>>F`_Xue9_EE6-;F+g+x6@zoKiXd^-*O z?W(CF8)b2t3b2mkK1|T-8G#Q@b@-b747++j(J0m?S27e$))IdeXo)>w%W`#(6BA0E z{5!(B6GvfymH8V`;rrFXEqe%74OPrAQODEiGMH>+gz(u47CJESisr^iNV9uqqw zg{4(zTdFNmUH3}T!1&Eby>9XL6{Hwaa)(~z?c*7(-h!ITCQy+iTS>-2ZSOfg4Z4Dw z9RCvY;8WAA2?rwL7k6Oz5QV*Il>N;Ac^=I8-ZQ{(s{Uh`@Q3Q}{DH-`>5G?sv7N&a e|L-On4VY>4z(2~xf%mXqB;e~!qf|jh&io6!kI^>( delta 513 zcmX@fx1Mu?vKC93r;B4q#jUq@Ba03h2sk+2|9|Nb+X|kjw3q8nZC_jX#b9N^JjMgz z{eqM8nKdSVVA7iWo@oV;7M-lXE;RWKlOB*STz~1A_~Xj&%ubyKVm!}ZnN~9jda-PZ z(P$A`_@qi@5xcX7pw}T6qbv)Mz3r-mpOa&0fLwPoP+&^Olip-* zRi{o5zjGiRE=5IlPMrZtER&0k{+iwZ|re#&xK10bjtIdtXOFC*G08u64Sz%y$hAwlb`7NkA)^6AX*EKM3Pa*!DpJ5`q@{oYMhOZ+Kzf({(Ve?9_dNFdoqO)t)7HAx zB`)4pjF|AS9mk%%d66vC`_Ll7jA&26u0h0gxu2;1wzi$Y($J&zPp7O-@`G0|!&#QW z_#lOeS5d-HM((NVqo`w4S0qH&4o`|5X$Zl5nBPSu!l8XNU&^Spys}SJH@Lf>`n(W< zA+A%Rw6u{YS@+1J>&o3t5sTDScE!I0fP7BslPUmUKGM2NH-HP=kuIp(^iDQAUC|5N2Gw@umnpXw+PX)5ma%2 zPeY_nfGQmUihxO?>_IY+THLU|K=2oW|0RJ{r(c`idak3F4L<25e+eaz4r;}xw z&iS}ofdWe1@VP&Whg=)r0t=~BGZ_ZzuyABcOSKjO98yAa%Gz6o6O|ABy@_)#Kl*Wrkk`+nCdBmY0y0XUHnRjQhVm-Pe-Z<7I{`&?uoF=Eb&|^|nHyWiP#( zPolb{hZWz&hDgaiMNvXlWI>}4(;UbDt>$& z);x~RQ`0}XZe55PQ9K57cT0J03+sBBuy=!uzgpTbI$3!}AoNN!>XNp0di`YFyC2iICQ?V`EF)E=F66~`9(o4C|k*!u5Pp@;?_oyGr0D6pqC8(&9H^dh0Od< zNvf3gFJfbUXCO+1IHYFTJt_vB`hR7sC+x{zhbXj8?=X{*bWQm4TNUa_Lt{Q1>w~Ma6ym?jMnpY(`+dA6UuWG!oPHSXeHfM8kc=uW+H)l*_R@cMuz~CVF z(iy$?4gVrSvE4!2Vds<1s#|fWBUoV^+CSBc^HzK&!_7Xkb#pE4ixVM5{?~Fblc~G> s=9_@f%(JNdX`H^y`Ii?5KR?Mrmw6;bw0N$KRat;1CV~@w4Ng1tFMHEv0RR91 delta 518 zcmX@j*UmXXS&PNb)5S5Q;?~ifK-nZ|Bq*P?XD3=BBDRMcdp}gOmH|?SgxoE^^LRn$ptx>23H- zUqP>|{#}aGfT}r`MsR_2S@%V02ztqs7V5MH0T~NLyy{zmG|J_+1}IIjcy(w!NTekw zqD2TuFZ^N$wCQE7fY&?gS8ey#y8ty50`<6P9Cd~0ecuGsc8?V(lG_DjnSq5}GzzZ( zo%U!2(1uo^IpRR+)}WX@+)gJw-QT(!3V6wE4d7Y|RDVcmic@EOK;Hk~VD-(5LHvMU zvp`M&Y6058XYuNa2UzWCWuPZizq-$r^8`7uC{kgv6Ii()e@c`KP`%(O%|su*jsPxI zRrkHGH%?x`rOG5A#Pk~!atvio8b6H~%7lQ9XW-(C0h$aC?#Zv&WRc^8x#bee#0kL@ idqpR|XQ~mu@QlAkW8V?m=ZD`i0D-5gpUXO@geCyw1iyCx diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_60.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_60.png index b290205a6eaf8e0ba3cca595ecaf473f682a53a2..7fa9148b01ad869b917fb0660c648e27b497017e 100644 GIT binary patch literal 2386 zcmcImdpMM78y{9-BtqmY$JeHu$!XLqT8GRyE}v7;M75cWbDGg+#wL>--p{s1?Av7N zBFAxvP$@B}3nAyikVqM)ahRF!we4TFKla+azUzA4=Y8(?`rXfcKhORCe$SJFbv+@D zR6rsS2yw^n?c5Ov0jKRpWHCI_>QKf`Xm?iu%Lz??QKk{nK2p z@d*6H6&5KlFcY7-mmd0QDMj^0;S6^w>3ScOi*h9QG|4zYdN#+ub;;Jvs(wn6b%JEt zp(ip<8s8H<&>TS8|WgQ3d8XTOM)7#;!344wW=+0A}$mCq~x}g8etJ3R}0* zR0@f`+*vK*?L_=dIQis=3Cy+1R-zv;TK*s4#BKs}LY6rcs^izPK4kDYOK0icbMBda zV}Xy+53O#aEjTtOxsKRYju>mf2Z?K0Gl_^8Z!#~!wk8usnxvR2pJq4tVg*?5b;+2? zKuB*>#hg;fRC%Hh5WIkfI~(>~;_56mkJAOwogkBAKSA?XF3zt8C69=(?yH8vNh*V14Tc8G5r@K+ku1(} z%L-*_{0L3CU1##r1UFm_+G@22lMMUiO^5mu?0(@Qt6Y5%-0Q9bWC96j7#muc9#ZH|FVj*dQT;!X zK;_lMUp{iC+$6JJm0MHX44iG}>L#a(8R@S4xaJVG`p#&`|3F99@IsgoDS;PNl~EcY z=?E#=o+cZagVJ}^GSR-l6C-2Zg`7(r*P5ld%_NZxp%NuJZ8#=@9c7Em+Y%VTQR`LI zsA9MkN&6pz`sm<7MG4BArXEN<(x~k+)tSoH39OwEoZr$yzvjJcx|e0)uy4*CND>4W zbNa?29o|^|%zkzu`~cmfY;<}+ji$YHbKoZGaMQ}rU|AnA@J_Bo-wS|^Z~(;e`dt$F ziaK!(y9Q5DEjzpRL!H*#5yIuTglqWC&mTDg7V9qfXy9;8PGP&>H;hHS^K$}JEV6*8 zyZ!gey7m|B$;dTzpbZpYkL+b-b7!xwbv9>kHDVw}IfW3RxvgnmTIJ-kMf)_^b-Vrk zXh0MyiAu^mAEF7S2G52W@v{AtS3{mBqfkktggs29@^qK@R>v7<@jGbWbEs$qI&-bgUzMr&WWKzSR+{KF#P3e^1t^vN zSL^jXp+~j+s!}Zs%pwghveCQch88n1Tqn<#y8$nx)Xl8kQw>}x6Npu$zdykc!99*n z)g8aQ8ILW)dT$7V`&* zbJHvXNKdlrWQ7cKqxr~tYlqqP#n245fUQ8tc>R85W8hTlUb0 z>*velc|R8IsJf><-=&8y^_PmE*YO~Y)=#fEiw>uF&RkIYa$QtvH+`TPMTAe z3NOyu#JMzpYiU4VT!vF+ouT!#`SQ^%MYoTv=-CJo=6brVwd~P^%(<`j=70Y7 zc#YN|4c`X$g+9C1`)aHeUTDHNt`+H%KM*d9Z%g-;V9~3#&xX`B7bCSfVsmE7++F@UtUvWv-HeQDV`kK(X@UY{dT(T@#{3%N zQ;|ypq!utwZ_u1>zr4<>qEut|{)nA_#7+e+d{g#v`|IB~S3B=~G|xGGs#9izS=*-1 z)yY@y^Q`1}x@z`jP}p2(3n=@~@GwLr{OEAJo?X1VG7&JRRLkT@0NTN^jau# zs=d&YGxh5uKdISM`wN6m*}eAHn7wCFXlv2&M}E@NgMrcaa<*mMRlb-{kVN8k^iuM* zcar`7|KE#-Gf!65oWka(F?&wt8=j|U7p}M^c78EW-_y7Ax4oP7Wb%Ek%1;X>zMHtF zit%g9XU2thz8bJCJj0)Q-Tijxy0sl`HM|=ir#-nn&;91ZALTdu%Imn4esY~&Z@~5J z>i*I@g`e(jnGkk=&wWFI*k`)}_Mdi diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_61.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_61.png index d88b2a24aedd180fe1b8e4c6d0cb6884c30f44c9..1c7e0371e4cd4955ba0721807c79b95d7ae13744 100644 GIT binary patch delta 1233 zcmYjPdsLEV7}ul*cq(&b?#wwhB|lPYX%ji+NeQ``h&XkMrb~@wVhIz|g|G#7v311n z+w6jR=!oqcoz7dDmvYWhIR?`8O$`q8n*#6l2$8+B2Ilt%f`#n!1W@>$j zm;bsJCN=D<D}WW1Qiwj{hRjO1-&xjS26>2dVFnnz2`|L5%bB98EBR={HIa2Etp zW=~#>r@N_pGxFx2Eu1yCUz()F=tg^%Qo+;pMr>E|HjAMd|K!>Q1AAl5! z(jY!uzGCj}`$+9=^`k@KTxbU6wgF(1Hnihf>d~5}foOh0$4VUoOV9~Nsp);DH->1S z9 zzO+k?!yjQneWzwecqrI(d*@XSRznuKwWX!|V>IDuIlF0Q9IN>D*tK5L4sUUrb3Mz{wdNqGdcwqHeAJhUs$ zc%ybsMInY#$arL$*87RhKie^2e1bED9zw_pu1qfc8j6>HJNh02A%%Ov;SU2+A*|_W zFp@%;azeafn_tB?=0lS6!_x6p1Tph|t1q&~8;RWaoFp0%q(EyK&?!aZsEKhQ#{LKQ zv)Zhalep`mD9)N}MkFMDccQCyrM@ov!HdasdshSu2dLU5*<}~Ot^>#nq!^azFJPeW zt(0R5;cYshx+vhV=?)RekRE7=TP}Y;ed9M!R|?$HT|*BLm;_A|ykMq!K6yHk^qR4R zan8GPi9CLfGqtDNcVEI`c3J9n*hg;&LOLir^Dq0hO6F+&@B-N2;?T*qN!{a)N?EMg zD$WtVi*A;KQM(qd^W=?_Q9W#nr1HbLNN`wgSwp^ovQM|v*xD*C33_f^j)A(`gOVQk zj9>bF+P<;si7QOZJCJ>qb6_{#oJ2YjPXwm~hdAPu#RB(7dkY;RZMwoDWp8DAcQjwdM^)-3KCf?lT%O_cCDUkKFxwEi)x1cxf? z>38o==jZb{X=u(=v-Y1Fx4tbP$jG;Bp4Q%OA)o>3eU+stf?hhiqxJWP%gm18QeAd3 z*<#T`G9WgQgu4H*L-V$Mg77fyt*Riw@jL}@_2~m z6erIwR~~1I0!^$v@c4}y(Bbt?Kv7MQSGiQ}{3eQc1LaybyIi zn&oflq&dl{Q#!(;B}ikV%odT-bsS4GKdsWtzFy}Vq+$5Ft^X0;;Gi^R zgTfpR)yWT;Y$wlU5}$mZNo2Adv)JT&Ork(qWO6r?D2vleA%@9{%)-cmlVyO4x|uA* bFP!67wG7pJ{M|X70SG)@{an^LB{Ts5JE`1J diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_62.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_62.png index c2a1b14f56b98ab8599fed3f0101fbc44b30d7fa..0817e8897349730de73293065cb284841459033f 100644 GIT binary patch literal 2278 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 TnTIp%7=Xaj)z4*}Q$iB}=p)H~ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_64.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_64.png index 48ac8484f42a103c432466aec0f2e39f54e3dfb5..4ac30fcdaea47a144bd0729886f81819f8f09db2 100644 GIT binary patch delta 1382 zcmV-s1)2K837-#;BQXbNNklCpaT_?-~&~E`0oUH{rqq8@gtN7s=)Z<1d zxfsYw;h6jaflv|>$>exUKa)l%SrCUC+e;dQr`tg&X&%X)+pjPVE4GPH(lnAM_SH3# z|85_lq*)|S?sw`qAe4w?nYW}OiBJ-I29*#bkwhqokAqMmlsKF8f`L#X4#on1p+p>v z0|=!!7z?39C=mx^flwk2yT`&!FAz#`Fb=Qhfi$K?gHT@jogjn~ zp==RKV~$XYgHQ@3LWxEDJe0_q8+~FLdBt7mY<62>yR~*;v<8C$QyPh?qJPF+va?0ba7L7@vZ25e2kK@h3 z@3xRDpQ#AtnPcwyoCu}GTq=}R--b>IW#{KbD1+XfCQqCyXDUy(Bb4U+h)||1h80hG z^-Bn+AH#}mR+;k^f7fTlIbS}M>62{bzLP_F^6~9nKtgHGw+LmG!Ct+fQ!gW&9OtQ@ zhwN~Ppwsg$l;QhLK0Ce{%I>O%vfHr>Wr2Mrh5zK^n*7b0%Acw2c>F?X(maZ!Pzt3` znq*PeRZ@;;@9+OZCrBF7TWQo@fPaQ`}C_CP)_uX-%-k7A?oEOSLp}ctpcl*P}oo>{- z>ewdyWAVz@c!kowR^P~A_c3<8tNG4QR{cbRPzq(lzINR4W#{ARejm!+p{#ZdSty0_ z`o2Eh-swT-5LQ zS-@^JxSuj^OwI=%fCe@dZjxvxs!&=AV}^&yld!kAE| z9=lKqrBDjxmA6d0zYe$ZvyVb4lq)Y22xZU$NMF>ILV0q52xay^blkXCD1}leg;FSm zQYeK|D1}leg;FSmQYeM;^Zj-IaCG%!_BqPjJ29m_H$o{IrH|rZ4Djp-kB3=`Tj4z38OQd7&Ko)~3ohS6PUw zZ;E?r4AZ{zAA6ZeDDx&|l^?>o9m=Ht)TZ5i{wHI1;(BtIIsd92ze+#n`Q5gw{aRqc zcYafTg>m=KEbRE)Y{Cm#l{qhzhZjz#-=9vnRryHDxSk4S@?7dX=Y{g(TawC=ym5&m zc_CH`WtDXrHP?mm-hXZ@NAlLS;M7G}C6raxYTR5G%AD(L)jrc#aWPgIiwu0$^G?K^X;8F4etFbna}9d=`gLw?fPdojhhlD zd>+22X>`!w6gqk0lGZ1LY^&?J`@UgwFs3@)|22+eUu=^p<4ea zflpxykm=MJpv0Hf2qadgKU^rzvD9M5;R-nqV^J@cO;2@f!gv>ourJ&*qxE@!(iA7n zDdL+yT!?E4(#U;~?EB_OkcQx?YYXRWH3OP5jpyl`uYz7Jn?f|sN`o}r`7%$TMQEXp zpqH_`#!*L&R-uJQmetC66}xM+2Gv8jqCi*84$}Z?D@xZnE3;6<3(U)jS?Hp%u@I<3 zrCuS%1ZbaNN9X;euUwr~T7}A|Uf$OZbWO+8>5s$bG}{+)s3uu{-7y#Fh9I43vHvzc zEANRW#gNoe;le! zk$N&rz<`kIJ}=&JQUSwjr2v|f}yy1)8_CJYA TX7v}H8Gyjk)z4*}Q$iB}w-)2X diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_65.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_65.png index e6fca6760f2f09d14dbc306732465358175a1d4d..3e8023381d7ee28fb41334b407def8f6d1da1f72 100644 GIT binary patch delta 1697 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 z zYWX0m7_OR9 zV_{{zwKcg2t@&8O?cbvM0C;e*cKvBjt#~hx_jy=HCc-Cb>afgnJ+nuhI&3bnqw2OV wBBAfDLvItG38RZoc8JgTaYCqrccJZ_bt6uXOFq9e48Da>T(nqFgKQ}L7XuKt$p8QV delta 547 zcmdnQcbap8vJT56PZ!6Kid%2*I`$n_5O8(8|NqiCJMPncjVAk7FUb+i>s)?O=Ya*| zjuHvRi90nXrfEz}Zk*UBGV!eF#59qKr^Ue{BK0Qr2FLfxJ9*w%SoY)jdBKHCJT-Q+ z9#|vbwNRw#=w@dP!BaC7W^g-cPHFmC6t{m}bHJvH2jeC0O$q3W5MH>%Q6v2?>olp8 z@4pIqNwt0QG_ZCTTIiyY&whE1fEP=`;fO93pw{}%h5)509H|~Ut{~Y~p@mDTIJDY5 zR0O^1z1lZ9O=tm%`0xNp7me91mzIh)K0}dm94viU7Us1*Bz!y+IB&(sKhkMM(VA zsm(wGgEVZzwWn~XIz?vN0qx~@x@}_2M*oRG4W9~YfU>QVzAe1-u`Pc)JJ6{+pDcLy zho|YchM?ENIaLwCa@UFuTLN_*=F5Kdy7}H2M~&7``TMu1M=t&Mn-OSfqmH3I$nl+x zI~9PwV&Z<@7I4X6%CmGoC(b=xY7-NiF(NNP+(A=*{=#h=x|bf`#Q+4Ju6{1-oD!M< DX5Z-6 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_67.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_67.png index c16fbfc72ad979928d00183895e6eec6df8ed772..3fc1f1e35ba86825c68923a908af7efc62eb6107 100644 GIT binary patch delta 1618 zcmYLJdpJ~S7}wTpZd-$?X~K3PPSU7ZxzuQK#4^d8Sd}fbY6_cVlz7My}$SOKELmxZa?{=$req> zZMWkOQJo{*Zl??#$A^|U|BnvzthdMHGH5J0(pr@J= zH>=7m;9F=*5~9sbCauR{X~4JQo-|~ouZFqpJ*2(&pvX!3%0|dL2u03sh>z)oH)6>d z{7MgDnbM_NZx2o(rd;pQ%yFjSV+=)Z)|jrv8vUW9%>u7dzCQ7y!$a8mkB*}5!CFu- zR8#VROn$`KS-cMW-D%?`fF&D_JLv|cRw2v$$oWn_)91$FpvOW_sKTheSN?Xqjg4Cm z!1nxo?{&FX#%}0Hwo=)6^@nZ5R4N@)9^E+|Py_o|W4X*=3LBq8hoU&OND1P1{qc&X ziRQ0XuyKB5weSAD(4oY#Nf#*Mhh1Y{=)Tc@F!q_WmEx1P&}UTnAwzqH2aT~$^XhxI=9 zbUZ*W75$-#!C1*hJK;NgdpjI7Wl3RoNe-v#Ao_@ z=y*|7m~IAzFfq9I&SaH{-u1aqs_m-Ptro!7s6=qWc$Ph^v^(h?e>;4#kh(n%Ci zEm%WHD}YA~(8=Z_vL4k^O+_17;#?YRU1$`kV6h9^k<9tEn4`|E;lDmC4eA@PTt%cU z*JcYD4t6=8K1N0VEW26Biq$6qQhxjexJJm^4Q*oi7L~n~pY#CQc9+<05b~Oo zH$yuu!V2yWjO@kvKQr{HFVj@)&Nu$us1Ui_jb@XaUJg~W6B%(CBbDhd(j!diA1#_* zZpI8+_CVAg|0dzIOyz+F?SgWyAj^D?*{<>4A6-+RcozW1Z)UQslBPT??f%@#h4Zy}D{CJ*!bEvhJ=N6wc&CLAMn_a%E&vI$;XZMC>E)%T_vyxZL54|_19{C2 z>i?5*ci9p#$assy^Hc?6jXK<#M}1n7=0IAr==EWRU7>(6;TZ)7F*+R-9-3U$6KVf) zr(tg~(CZ58lIv;oFqlYtJm$L+|aNtU}FP314!orUNe}ZV_G>+{3Y|Y@xf>9aTIGlSR=iwkEWCSzJn8AANa5HS>Iah5-%};cJrzxlnEVa1T*QUiG zJzU|OSmojgh4f{N{idxDBjW8gU_SRlYge7%;QW{!IqeeUYv!GrY5U58+-U>iJN)qU zj)8nD&2DbD4q(D9Ma+tgztD@ov&(G(HVBjU3u>0yicHn5^8EsRNV#j#rA4XKzVzOH WX+`}j$@J3n{Q4hSu>~Oj delta 892 zcmaDTFo9=+vH|OLPZ!6Kid%2*p7wifAmVWG-+%wb8ECmPdrTxTEB40JkuJavA(v~=y#{yl%L0IUZw4IiZq$xf6o-?kbm{%d(`u(+p9QJPX~nAU2HYFUU9oUNF%y!)346B)cy;c3%6vh57@@_^!$II zx7>QZUp_A4wQx_F3{d0puUU_9*zeg3$o##~C)8>ql+ds9T^ca164ea64)ua^NuE-vihS`zS#JN25O zxYxp*!rf8Q-yu$stI-4c?BZiRV2nQvtp?g2>l9g7%rjBs)C5lJQqE&bdaHr9v~K#? zDN#FjR=_jf)T`MMZ{<{`99MgD?C3qGndVcb>VMlVzce6k{+8MIJ7$*6f2p-_jR>dp z9PXzRg|iJW%e6So)Sq&d>ES#}r=2p}w6?#RQxksR#m>l`qAtrVPkh@rIl#(o0-Xr^k`HQP}X;&YAOn1Z?{&9O{*fMe~Oih0V;x$o}dNWIIdFy*_` z%RMs%PZ%y_Ip@CluS5jf#0jDkFNjR`Wf7U&!;(I+S7PD?F}PT=xM(e-P)>8I*R8-` P3_#%N>gTe~DWM4f8TzBK diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_68.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_68.png index 48bb7e75135b38fbd58a9787bbb8a40ad83827b2..826c18e2838fbcc6c210741b483c55c32b3d0348 100644 GIT binary patch delta 1169 zcmYjOdo_hmb0XWt+1_de%)-{*ba=PS?~HoRry z^4={01UI8gmAjI^s2KWpjVwHv85Cng40@hXc|s(pV~>SJr5t7MH0b_@j~ z7N%%M>lgm)aKr@Vsh+*jwIkb?!jOFM1j6xf!x0NHB3@LY30#b5`fs?25zR&ag-ylw zxB(=n@noq<3EQ>SaEvP9S4&|&9PcVx^9H(hBOCX+IEty9oC~f{%HEoHS}Pu9d-wn$ z7xDm`lbvrhqrDw~FHM`Dh#_i4%f>Ndl${=gj5@;>eLHgDsEUb3;B7GH2VB)_ZMQ1e>Bo2X|cMG zJ(27N+=*iU`FmZ%!yL!7mk(BEn6$LUnuV=#b%o#A>)DFu^o z0-=N@KQi2II8Q$wtg5jCJ*JoC@~T&+=MYXfV%ELgz{reQbR4T$4LOYR7x&^Waj+%s z%l4h~oAZ^PtF`yD2vNIOBsGy$A3zAZBatPTiHmzI4v8Cz8b_iXI39FnsQL=V&vgGx z786k=xmzua=@;1nk<y?_Pq&whye-(7qPVg(LWn4tWRT==iDK&7Pb z>8JVvtjnBi4`Qno1NB5bLD7>u!j$DVEMALeo&Qk^a^S^m2*pUry%8U3ME{ln%Pr>! z$y+&c_Y~^Pgg@>KYByPu3s9Q8?3#JQxvIU-32c5xmDW*@KVN~YI8k*@x z^aLDhKpXMFp$37lZO<4r==&M^vVIy`w2Ax2C_K9QeAV4Rfawde_2@j94L(~BuVMLC zO}?vyg6+Xc+Je<)Blp8NLp}P{j_QtH;*$b=i;;@FT};FXGIyR(2Y*sioU>SU$&t$;j#vKDbPs(7^79&?*Ua zMYen!UnwU7LTu2aN_qP$eD_$WR#}hs@iI&YUv^N(5#~l_ClY#TMfZ~eeLc{9@KA!! K1T~RAzxFqMMI`3{ delta 478 zcmX@f+rc?OS&PNr)5S5Q;?~={fqaJ)1Y85Z?SHw8sdH`fgW1JG^{aax-umHqob|vJ z1Ez^PH7BNNOiXT^*e5#ioXEs9k%_0p!6G8{8CxumrR%p$YLnjo>uRnWhpLmLWZyY^ zJ|JUfsvd|d%v*1+Foomk^vxAjvMrM~1k7?hYts^>A?P)6Pho9~&_WSUAYsBR;I%ME zf^(vah9K8#cOa1sB)GxEYc~x+9yrnS?RD7;RwvCVYt8=7tv9vSPQqLd*8cr-g)=lhf#jB zJHc2vZzMV*EFo7vKCmJ4UtjykxN%f>$J3d2_p6590aJp&n>sf)@|NB7H0g0u;pRCq zK8Yi9CppU8ZD?SHPsvtO^4vsPxQl-qz#u2@_gJm&WRNk7TnKiMA+sH#vv}m5A&MCjj zm?Tyz3Z88}#UK`3@@<|wG3n8~_{~qI+-vk4&TKhF_}pHbtl|5OR+TG^+gXPYil7Z? zrH9`SdE9((JlV7!l1xm~#v0Y;agnFteSu~5fHEsIFbYo0z3Yih9LNq8zdwr_9}2rv zSJLExe8CEN(rHHc%j>IhKzHQie`mg#d zPu!^%Nm1^hYFDFaOyHnMN(Z^|#c>7>YVaGZ#98IpKNlKBgycpm)m;H0MF&!GpS z#@co{Pfw@F5p{VOWZK`d42RSG?cS67nRwk4xQ?K^XmP3KjS@4s8nI2H?ZdMbcuvp~Cm>lXHN-8;z!a9g*xJJMgH?-M zOMP(Id8!E=&GWer_xn|Esb9JhhdY_46vr+b?PjjGZR%*b%!vZ}m{|(SugiWpv#r-=88#^L0?OaX1mp-?&_*vkb42_@iZ5JXAV%>m^0S zSx0m=Fu-e!wyV|=&lMneOZL`zGmP~H_T?wlBS+VH6gv4>$lOvAkT&Z6<4}O zteLEP8OKysS#?j0PlZs6stmJo{^2e4H34~LSo`1Q4Hw;Z literal 1156 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|SeM6^;g zYoT1Mreafy=0X^kSf$vU2^51FgB$|blwx(J6DNjJrvu9*vgKQZ6g7S?S;Ohn8L*AV zDtLKhABSoRj7g*n3gPxea+c(rUw`F8iU!W0w!)L+hv9?jxVb<&(9zpg((X^K)O zkVs=&sA3=mV#+*o)ez*{tTd&gJyOu?$l*C0s!U0KEkcZj>OkX@BdMiwCZn$SX(nqq5P4xkzJI#WP?omS_| zrRp?O%h;}WYBn=^r8 jFk_HI07dD)W8BjnuB_YF*tY;!x-fXU`njxgN@xNAaD6vj diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_7.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_7.png index 692525990c43d280982df274663054fa2b9e0158..17a26573c85fb40d6d72ef7e525357dd1009f7af 100644 GIT binary patch delta 1680 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 delta 903 zcmV;219<$|5upr_BQFK$Nklz-l)EEz;9Ju&ae{S9;V{`7@ zPmOWP8W2jMY`=&T#$Z|~6W4)I3T4YhoHQ1bLYcY_givU?~~-r(D5F$yI@84}90PeBN!H6WBG$(2y1eoU;}ViZb* z@{@C%LMfESMkvQml5fH<OuOY;2k=lz(LgdgWfDPzvRVaj{XaP{xHaX%X9aBzykb zR!u15LYcUTg)(>k+lNvpk4%K!yVI=f#VC|QxiU63?G?(HQ2zW~D21}h{9nCHp%ltv zo6icRP`;l3yDnQOg;FRVg!1+nee;}g`ulTtU%pTZrBDtJW%|cTPkdvgP&N!@#ed`c zb`e+D#%xk3lU~?(8Ojzo%+JAbaf>f91ap^O;3Z|*$`<-Jhux_+S)N};?I$jYIt zbgrv~vhrLLN}-Gn<*7w1ltL+#LKz>*(~G#nf)vV{>p&=l^2%}DSi}>~_sdWwJ{K;M zLRmhPKY#BW%A3b4ltL+#O$V?`C@aMBRVb6+g4W?F7oil&s8GIMJTF3-{(oLw_a=q1 zT`1Gf{pm4yxx@Lid;4}c7fPW#9Ln8e@#3o>(gNW-bA(bTgJZdSp}zPkh)!d2^6!OG zD1~xU)T(`*aN2x&IUcR%txyW(gjlW~Yv+fUA}N$YIXsvrkI`8452R2EW!qq$JT_x7 zE0E(tN#DiFyKxwEE=&gip_5GrJCV^Alb#49k>CZBO9&N_&lZzQ2q}|E2zim<2a}!% d4H$q#e*u_A`}z?|?n?jw002ovPDHLkV1hW8scZlM diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_71.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_71.png index 7aedf0517de05cda9784584876f9dd7f474c1e19..a64fc7410830638dbc0f300de5c75fce939fcecc 100644 GIT binary patch delta 1354 zcmV-Q1-1Io362ktBQFP4Nkl@gZG2WdCPGO-C{I4;gh>AT_y{G9 zBYESwjSWJH5H$K2Dv}7LNR|pgwFrqMLP^OG2qi*^cawgJAe0D!@j)mNe*$9zLMa5s z$M_(WPN)zVAA}MiI5|Exy+A01z}P(R18JOv5|JD^KDJduD22fId^0}wp+qQ!!1#PK zJ~r(|D20HpJ+Tu@p+qQ0hjP_pBa{paW#^BhyN^*Ug%Y706H4#u5lW#H$_t?sOQA$4 zV?x>GJRp<^rBEW2^bKX=1o52wg_ErU8GrsSmO_b83Z+mAB|=HHMJkj+DU=AMPzt3` zk`~I-3$Zl3MCP-+_{LW zN5c;12qixbhtHB zw3sVRinl)%C-~}PJu!}5W8dL*C7y>TF^EE0=QRjrt@F}t{tIQ;BuNNmmE#r4e(^~^ zCqgNdTaR5R^W!t&ya?s+3A5^X6GEAE&HdEtT`{&D&QDAzcP-i#$JupkS3Kr~*IW5G zcgE+&rwO5dT)6OrvPLw7vc@sq2xZziiu~_4q0D(_HSrvEiO-FX^g=0=g5j4#n|En9 zuYC%oP>Q5?lP%(N^RMYbDU^aCltL+#LMawLb|=I~D1}le&53cLT=j29LTOR7UyLFt zltL+#LMfE3U$;;SrBDin*Bunf-N)vf+YRebGJbBD{ZRx)VxwVHC>ti{|!qP@%kc{N3-xE|fxf zY|-3)N8$X}KJWhOEtKuQs&{I^B#eE^EiO*o+0g${3Z+mAW$dSkPe005{v)27i&-q! zCQj9_OFH*wW4UUa+%rcgBVW^mP$u75a`hj7MRv`n)O9SBLKz>*^m+Z}+}e*)D1~xh zD5u@0{F7_W9o|h=TgyT@=rv6YB|<5bLMfC&DU?EK(FmoF-9jmpLMfEacgQ>vN}(+I zdfd3)yGfxGN}=5FdeXj`Bb4XQjZm5pLg{0-P!_+0Ba{};k;#(s9bNAx@2v^{aBfn6 zyn4P)AxPPeveZHvc9S*V^%lz4&v$Ba@4n?kmx-Mm%Id+nxl_7OHV@^gouaFSxKbpO zLfQFU->yx7uQes%THWpK=T|(|jcxHe?@XP3GqbmkSM?@h)#koX77S(Odxvzq*U5yt zK6W`To#(z#28OcR*d|?CNeN}w^;x1iKSEhQl%2*m@fvhOD7&uFGW`+CJGTX`I!US@ zYuRg9Memc{b*+}`&lhDTOvmG=-hAr121<{;=?9Y_0X>n6P8ZPFA8_CE+fh#c;{X5v M07*qoM6N<$g79*RbN~PV literal 1233 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|UzpPZ!6Kid%2*dQWO{5O8pO zSD$%jx5LqQi|l3!<~3@*ZP#07>Bpca>&Bokg~5pvjc5p9;!s5+FjWCHVW`fuoiqfGvFaBK z`Ym+fnB{&*M!;(u`=%m|I|c$?hm<2VCGtc#RHMbp+cVbeDqASx#l~Xv$mZ&^&5veq zsPZ~VR-WUWSYvPJjd&!pt zXvGPc_WN>p$OCG zoiqAtH3YpB4d!?Mys3aIgBZa?xxq;G@KeAgn&+nY~?Yq(x zmENaEW-3hKNZTF3q2lBjVX*uh^FkL3cQz*lK`(}dECLuri;#l`BN~CJY9R}zDzGME zm14CUyQx@}qPY;tC0Z#qX9C5rnTky*cF*@RpopKUVl?+-DYO;N+W{=97(8A5T-G@y GGywqJGFmYJ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_72.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_72.png index 87d86520e60ac8602e1f064d99936f4762ade27e..f95b812c8d14e97e0fe51f191d8dce114ed94f39 100644 GIT binary patch literal 2223 zcmbtWeNYo;9uD4>3!w@E5y7T-63sHU7Pvz`4Z6q>A|z`ND~Dz}Vzji4m;ga238!S? zK!sLT4@{J%CBzymC8KhDNs9tw6haA=5)x3tM?)Yv68VUV+{U*50Dm}hGrPap_x(NZ z?|Jrp_xa5hLA02)IBy&VgIOC(*~`FS9H{mi>xj;L?ziDB3BXrvhI4ldURE*@$%fd>O z&}}8^^`bY1E~EWzcrkL@m{k{fiusJ}BOZ5YD_86fV`~S~$+LUv)V9q?^qM4gK33Y0 zF|!$A{V9o6c59&Ot?_II5YGHNmNi2e(!K|#?vRUpz<~_+Da|3!54k#V2wp3fBq5oVHmsDw-1XDY-JU)JaRc>B4`qR9H_%V+xti+gnuoz+QwnN^^la(b4;~QxNvryIbHvrKE|46T0;DyYkl|}(qeZf@sh{l|$ zIqJMRG88L?aARM^|Ce~4FzlA`sg6|G+a-q;@td2(S}^H^fHZu)J`)Jvp%ujs*rLU1 zdMgR;W&bSX_620}_w`(ut#qT#OFWc2JNsrvhxlob~Ijpy61TcKHV(GM_1-A{I!C#2Yp$FQwm3A8K73Jk{PX+(K{aU;wZ}*Qmp? zG+8a?p>NQQt&`L=CaI$;7LJ&ML9a!@amkdAvQKsvpEo|(@`bAsN#Bn$@QgX98vK*3g(UykaS|6UWlL7@+aVpJxIeHn%1KFylR!fXI$N5dCg@^$g z$cU`+jr5wBHQa`b9}XLkD1Dv)S8-R zIJpqIR$LA>-e~q#x|6c%Gf~C&MJfNPg5Et+L!jG)=uR+z1ejrN+kA&Js?%xQRF|XS3*vN9-%pA^4)+PP z3CezWW|b_y^NS+}blQw857@2$gw`wzD^Z}+O4RE`Zwg&b`@59Ys;&xMrttUS8$(x< ziO#L4D))S1ZOZE?;`<_<8@8sF4UswikhzW! zn7f!GW{TG3rJTeo%Q)HLBk$G()>c{;4D^quS zevRnfFF73al&~d~E%q}Cj9-7%hW}`u?}y~mAIF+QshJfL{$6|zx4nJgzp`!)NW?QSyCjhGHc)f@6qNLeI5e3rF&S?lwcPzBb&DfLC zz4iXMvD;k;nt6sK1BC^Owg9O;q0lDQ+65L@ad2a^(818}?4*?6R2LunCCtgLpW-e1 z1H>wF-?nu(=ywt2M~&`_KH2?_ig_LF!%%-jCYb0})x%UR*aJ8)pz<1s~YX z_qs>z zEkhaOpI-p{*N-6pk!n4W(iM@sDv@dwk_@bq^Jf91MJ?s(y|KJFAf9Mvv?PlvMGOqeGc^;NDEidN{>|&%B%J%^_HL$$N!d4 zdJd&f#_Ut#;$Ho1P@(+1Mm)4vDBJJTpZ_nELb>WsIdA^N;|b?NS!y3|3T2f!aBC=c zzt{<7e@G}#Uy3A#a^_gA9QUVx8?HF^tLJHIEQL}i
jP-Yf&hL^7>F#Jxl%9&+ifop%lt;2j^5M zyIlI5`s(1>q3rZxweyTODV9PR6v}S*v+eqPfA;K9&bYr*D1}liH-@tFrz2K<5@gqH zFG4AlLRmbN-9JKhDw4DA&)gMRp%hA?To{;bgkt`F`#9mzMxVaEPe9)F<}%E(ZzTHHy;M<|6-C=X7Alc8L_xRZ{} zf6Pa?C4_QU#DvmW<vh`T5-uIltL+#LKziHk6Ej8Jl_89 z8CL_htPf8Q5=)_Me3r2@l(#;)De-Lbico%<5Y^vpeG^JASo5}F^aLiu$l zcRh?jDDy+vEfBslM<|D4x$>rPq3nBaV(Z9PK_sn>mH%ES1ARkh4P|U&fIoqll!;lZx0(u{SJAN6w2+vT(QkUc`lSUd~du!3gwnyuHIIc-TSvG zJp{AXMC^FTk!lo?&lizuD3NDR7drY4zsGZR*jl!* P00000NkvXXu0mjf^9J$` diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_73.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_73.png index 6aec0b87d09dbf0fad6c1191cec9fe345d62124a..f62cfc0f967786acb625c44735a520e0432529e2 100644 GIT binary patch delta 1366 zcmYjR4NMbf7^bn&f&|+tiUI|pg+mZ=&H+P3jstBKTB{upT67dtL{UIm`6+d#XzD0c z?hp}#-7?l8incNoI_NNjrs&kLXo0mbrS%7EK_WvY=)U5z?DFQmzvq45=Xu}n?v=B} z?VNw;qF^Qxv**OnYjbzrSQt4j=Ho|p;2&4H3sd{=ne10WeAt=^xobB++G+Mx9tpic zq@!zzN2Txb)A`e-WERnHjjMPRs)Oa6-m*UxThBIf{3?a96C!#U7ozm-TAfT`;>%dF zJcKlSNyTwt_(gtkA@~^s0}d6=*0D%uhr>1D%YryrWhSA9#v-$5i!$JS2o=wGX?-Ev z@fD6hDYSFFI*_+Jk=Citka&|2-LmK z>l*|jplYH&Xl%}c{?$$>jkp>8jzB@f2%%uUR7#&==9%9&ec5IySf7Z8-1HE~YM!bl z>(=xXr-y0pN%~g_oY_=-Q+Rdj$s~z=yzYI^#tv@1FI>2v#?x1O7_LOkxn{aC(!pQip{r^ z{`D`@h@}u)!2MK!wk1|<>*9F@ZKecK(JA)d9r8mDl#j%PmpbBskZXxZl2-vO6)MZK z4anvhq;`F1Ek0Z|PHQdlMx)Em&0d5feX-rAI$wR;n>fNBFcr6)=eT5=KX_fhVpr#olJU*YD?2i-4ET{io=uyH#G>jPhzi(p6iWjyOT*8aD T^rtZ$PT*n2B_b{GzEl4IY=v`X literal 1259 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|Uz@PZ!6Kid%2*2Id_y5OBTt zrvCB<<|hLE#&ve?ugZm0^o+O6c+Gske|kHEg9c-Z5E{X-kVU`?oxo59)P$)Dtdm%! zXx75G*i41VAsdbELa3{WR*GyELK9X~u_?voOrRKsQohQhm}GknRi?ra3Ae`@bDTN@ zO8(2?r(wxGP8p5Haq&WpB>DH2Pt(I$PfYPLm8`td6Unt_$Vx%_Z z>UR~Oq(`2t_j_%nDN|TgY^NwpvElP@N^lWcxTHkZHzKkX$gokcZg*1=^lAyx5cIki zv%5TgzpK!~luVZvA)sylc~YN$;81ls`Ke(^`=y2A9IEcEpU!Qy(&Si}a*Jzku!-Bc z%Nw&eR8@l$y)@=JcLoHR3BD8RuD9E-Hw~!mr$Jeg=9Gxti?6*ul^LMXDs(x;MPpTX z+C~vCpUJoVr)u8|7x7x?qS1OOq%)u^#Z_asOVU;OIG|e$ee~n!@q)@NaQ1pp$`qpY(3xn|*cMAV;gO z4*-UXkg>1Y-*b9`!d?rHm}IUJ@dVij^6tbM%PA{2mQ+m$NSb95I!jH^>++J7mpGqu zEDhj#dZF~^IT@f!`uFzj-uOkghhu5xrynbeOv?6MmtJV%D`y)Tb`%&y8jGDQje&l> z_U^>jYBvKxuMbVi6F5{G0+=ue1}9F1Dd+@-DxgkGRbZXOD#d1ZLqHV=W=aDlVr+>L zk+u;mtf_n<3qk>cg;gm=DhI14S}B?{Z`>4@G4j!LSQeB8EW{W*UHx3vIVCg!0H(iT A!~g&Q diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_74.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_74.png index a252832b46e1470498f802fd60eb92f2901a50c3..ae2cfddba7ee3615206e5cdfc24e4e9d5b04a0b4 100644 GIT binary patch delta 1783 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 Hu0mjff&JX# diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_75.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_75.png index 30731fbf228af2891621ba764a3965f8f3550aa3..c5c3e7a63dd7092196749c987156f72a433c6a72 100644 GIT binary patch delta 1280 zcmV+b1^@ca3C#|WBQ6INNkl%AX@k|j^}Pk+ppa0(@!_{+jzP7q3=6wKl|LMRc+F@Z1- z2qopAOo_x@V-ZTBWN;{-j!beW?|4jvlI5X%H<+6u`S;@^ln7;6bkZV;P$HD^@exUc z5}_1Hgp!jH0vvzLjYRj~dJ82&N!w7S&VfxY5K5t3^~s!1j?GR%2&GV#e%3o_{I*p? zD1~zM?m_=MKKoE2l&s&6^3^fgv=^bIJd~5hKjn%Vp`=MDCyoEE$3`d-%J^;7?mBj{ z6iS40>^;hgUv43kgom;sK-)tpmO{z$P^LtpD(FHfln8%iY$${hp`?8%PsgJ2_JCLl zB|;e)3ZX%W!p-8p&k-y@U=Wke`8j~$`pa45IW4MK@fjthi9B9w^Z!}Ektf)^Ko z6p`W3k>4x?5K2=3lfeTNk^~Wd^38-_uYX{}I!{~k*QOJbuxOq<-rpX_9Y0-O5q~;S{L2ENG=8BJN}&`B zp%ltllU(tCwf_6EODKg>C{1$XP`3E9i33;DLSg(uDU>mxJoS-Fp)h`-6w3HeiiNQY zrAZb_p%ltxV;4%HYqxfMM+YucU=iDBE7)Zrd?v z``B%YA(TSdC>9B^+%k6iQ7*cCKfNpY)cM`I7v+Sp+u>X&SBLWSm!aMLL`_=5Nn`h& zIYL<$kB*C~`nJZFw|3LU?pqjza&0Il-}9U7#MsB(OBKqV5lQ=hcFFW$OqUo+zswmJ z$~zZh+Sl+3hOtk&y(E+kPI~Hnok@Z5@xZ(-`+PEI*kX9{&pA4d%la_(6<59%L;qNI zegW_n)Yvy1r%*NzX7^hP)`+ohI8LE#8q0Sd%M;6(gi%-U^9;;9qhpS0%yRCnrv>jO5{GHe%vCEt#j(x-N3T4A5c-Jk} zs?T556R%q+6ULtSjR8X0@Ga}KNS@w(>8VIO{o*!t>`$zJi_RPPUg`1c^mU%UeXN8H zdOMx#JJ(CMc}p4liQW8<_D3kse9w(t%+H_ejxR7NV^4TK3gx0uZn$M};#_x~yOgnS zilk6B59OA7yVd8q^W3G3eM=yPvfw6n(gI2ThQ1E-+HoD7{!aS|fs6}fs^rCy{$gqD qj#VfDgc3lLK>=`)-xwJ9`S}AF*3cUrPmde`00004HLn=Kt=73Z3qJGwqWaQ(~Vu!*V`l1_3XIg)C@PE}jGmm{ZnVQ(i9&4 zr&kmFx}H4$DhO1mW0g74MMLn^j~^W>PMrZ=Do!WY6#|VATFBEs!9!^Z&`=NoV}0p8 z@@{?=x2n_0Z3}(oHahDIcrBFqdUlR=c5#pZ(4wXHzxv(UpL`W0Tw8Tv`&Y|$p@k`b zDyO7pmt^QWc~)vzzukXY*wpEy+QK(m{x4tG3pD=Y@m024%QlJto%6POil}^^;*^&5 zO-c@zoi(R9o%|56%w>_*3!vc~sW}=zho$@u_-8FPHJ`r&=`pOHHIHgw%beD_9_R6B$g}F*V1A!q1GGngt&Z=HNej%@xAPrkzE>)+U zT6UT0^QvdLXtZwn^Wff*`E3H8K)K`pwH{xcx#mwb&=ox#N1yCfp7O_X%H{NCpc!wO z6en<~KH5>?$D#V;xzYqD&V~Rc4plUQ!HH903Oa$I3aklT6<8-WrI-eiq!i7CFfKMz xVRFc>!0Jq=Oct!-$QogW5o-}pJ&MxId&gH;>zMtQDgu^M44$rjF6*2UngAiWXm0=j diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_76.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_76.png index b0a9c86519580651dcba150e34e92eba39424d3b..8067b106cb241d399cfcaf818d2255e36e039066 100644 GIT binary patch delta 1314 zcmY+DYfw{16vt&4YZ3(^4Puo?8v?m8m7-uIil`B=L?O4}1B4==fE17cq!Mem)=8@2 z)h4;h6cCz9cnApvjRARBH4+JLFb(o70--@g3@T;>(slgM>CTy*J^ypg{{H)67cgy> zzc_uh%F5qo@1cyr7bAO9huo}u_l}zS-V(#|D|=RKLCP98g<;KpBtN=c@oe>l@MrrlJG08D&@H8U}`+#j$AOt5*> z=ng}*;*mqVx`}91YjCJVn(f)ML8XxG5Gzxj;cr^3M$K;o=tyzj$WSXoG&DE@z(Y1 z2;f6F5F)c=M4tg(CTS@3{#jZc8L$lJJ5 zz_eQ(n{RT*I3IX`6(Q#1qC9g45!KvQlw@v+G;sdb#+ihzg>GHkgv@P-@nzjrp{!pM z6LqK=!cJ6smQ=~u<)@C#GaAyb7uA21^jgl$G3JK2LU?xg%fNl|Y4@c;)~?XAcfC*S zqiP|gQE9AYK4;5IfP>ZVz{=`K~4 zksb0UxN^DzK2l%7axlF#`Of9B{*0Gv6WQ%JTNcO6)|U zqq@{0cxg*8?Lg3l>h2s>qP^O(X5b2~v$7$HGX4qMWZO6j@0e&hfdZI0+EYnl7l_`f~o42c&6ogjv$+*^Db&d_^2N!cu24~BOJ z$TDQO?S5AN36!ORT-=npGchHO+ZTTn0s}n5y$lzV&>tK$BHzB>E6@MjuIaX62Zx9W z>O28K-2sewl)8|cQpMexo(tH1B`&UH1AKQe84k+EOJyrD_yzE=%?jmJTyD02gO&4B_-XUo3v! zw(tXiDJHbVX2)vtHRUZ2rRQdBnBp8HTZ2UPRxe8~A1}g4;H;DFzBdiidEP6XPzFV~ z-}NLf*g)>qzg+jeMv|A1=>xG$e*Ly*u~WC?lda7};Dv(zb-n~XVjS`Wp9F;9)~P{X z@b)?mB=X)g?Lk59wSAAbIex0X;drIcL9Glc3|Qm_sspNcbx|ZO9WRzVqI~R+wyYHKU;VO!@o&RQ-3;agEgd1|_-jPDypswPZVW;8>~RsZ;dM z(-*&aMPkp${-KDgZ(S9((s!VZvy~aq<4tew&%Lgtc8tm11iy(Z)@XwUJ$ZEl3l)d# zwX^Ji{Y|r)(M%VqM45t%nfN^5SkE_rAq55gRStXyxD@@@?ewdN=H%2zCG2qkT2^^|U zoep9gZ2?MCrgXLg$t^ukdcMCF@@koMY+}vlzu~jgojebF)P2-h=%TUl!olM3nc7aB z9{1|@?Npi)@$5nI4mCk9o#GFXXT%mBG0oh@p{gf$CQM`F8IbtIBRN3H%{PH6)9T}Q z3wpI&iUA2^3jqyl1rcYj#Yv(A8|jj@w~PRyLf zp*roh4p8rQ%UMeUl%~y4bjm!byAy2CS^kAb7R{D->P-ElU}q zchvxDs{3I1CnV8PL-6#2pU+wXl$Z_{gN#j0o+;bXbrI;SNd{9S6Mq;T+gGMM#i#e_ zRF9PX^MPhBNii^vTj$v#v{B}tInYHj)-q{M;ZVKYbn|IC+d>u7Ig|G>Et|ZTNoukN mv-sp(CXvZ&m`cU}oZt&TJDa6_!$v&@Anl diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_77.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_77.png index c881da333dfc19df88355f7d381bb62c3da93c4a..abe377c382cc061566e58b5de7c829f754869fcd 100644 GIT binary patch delta 1635 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 DUZnQe delta 511 zcmeC;pTs#qS&Jpo)5S5Q;?~={7X_OY1Y84u5`~1uj2E*#jbt;*%4GW)f zFie~fG_gl?;u+D2sUj0kiBC+`n3&Wsu}7qSl9&1Rv$dAe&o!oSq+Yndt?G1gnuLY) zLJ_Z)O#vJ&LJL!>dHndBj2$&3k0qqW%-Q`}z-y7yPqR7aVl`SP-3YMbTvq(OPQ;5R zN8J1Nk^rSCNtv^OytQk+Gz7gC##n6W-1y~&?i7xt88_5gg_^Zx>?8!d7TTyx5q+#U z$*Hscp{T%hO`vqcjX6N|B3{=!0*c--g!6Ug27wF!IwMG<_0m?wDNdSGws`{Gv&B~l zs61C_p^HWGu0|iVQ&D>FVdQ I&MBb@00oB5!2kdN diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_79.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_79.png index 46289c1522615f1587201ff8c1353714775a14dc..3cd1c00371c984adc3a9f4a7fa501ff584fa41d1 100644 GIT binary patch delta 1706 zcmXw2YgAKL7G?@U2oTip63o~_BA3CcAQ&*B5W*v&kSkCSu~dbS+VTt<9t(4|lMqod zsJWuZYefuFkyj9?1eC6JB@!iB(xo({0TCkQkti>LXv17OowN3j@9cBV-uwH`-YOf- zmMb2(QFK+Ef z7{6Nbw!j?E)HN#5q}{ri#uSnRGu)xtOFEM1e$m@_V9;N*J)nT>1tVtJ8oUcy%!?fr zIMZ%u5r;gq@_jo&h~KwO`N=rLLkvDcsb-@XCJk7mOF6s%-$+r;!{3rDmdQtO0wqGLQhQP#k(oy zd2xV;)g6sGSi!A!8Tb%#+2_R+N-=4;sq{2J_@Cdr_aw*gB_lDl1+$+K z9H#5MoD}J#NzWBFqL3%Vm&~xyI$d@JijndxPSt=oJwgjvQm(|5q+2rQff#$;C3_pB z&yiv5!j&aLF>W7!NT^u>-yz9b- z5{Z$tKHMFJS4BTTlW4kDxwUQ%G@>WkKm&AiUYE8j>+_R4H|Ewo>08g1o>wz^-g#au zK7ubX5>}dP0vKQBiRRpBHY=7C$%q@Fls*)7)9=NO!+ZVVgn;~kuio1UYHo}n@3qRE z5nNy0HBFG>Tx!L;;HFa1l0*27-=Dwzm{5>2`~&k1icu3GLWv_Q)TME?5qUEZ^(r}O z;t24fE_LZ*njp%6CFPE!INl|DE=*X5Nw_r>+jn z`W9Ape!GZo@NxHoaR%rt^qVZpW`$jvRt#igxEr!6FQ%OVvhDwmGXQT}E|^}zGR};4 zkL6qr^1%+6m?Ux~PQfM2^{58#hEk9}(>gV-bs(Bega%F@X(Ja-C4Ze6bArN>Q7TQ( z{%G9fa;wxFe$q!Pneep}?3q4~k_PEYeY2oJk&%b#q0-y!@Y@5X1H!e?vi zM;;cfUdn9dR3tCI$~%=ItM141C9hL$?~O$z&mV~AWMqo1Zfg&;X_G!hAed9uC-rPlE~7Tx-pBc8>i%q8tC3 p(W>#DCcXMiFGe_TA#mwenanWfH`Bu|Q?8pKiy9U~X(6BZ{=X})F~|S_ literal 1487 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|V zRe^O9s}#*z7#EwVFgawS(On32HPK3u%|d9xYAQCR*qjLz!=m*3Z`Szg|E2f&m-qW$ zu_%-O&-HuH*FS=%B%Af8IB8CCihQ;}z-yt2ddnrpi(eXmOcAezI+Xz-Rt7CW8oF{V zpFTNGten7^dhdtN?fSV&I#ZgRc1oRFao<;?HAtg%(^;1qrD;HOjsfb z%bm$7(^PZHVYQ?%op7hfubYDxnp|%wdhmdAX#m&K0I5Ap8~;2h-Sx*bPGfEv_tJo6 z?VE0=dOKy#<9zyn@eE(;b?%3)m$HDS8>L9^i+|j*K8$OrrP`Fk?1n~Dme;VyYMeD( zD01rfKDWr)Mchj-=Pfi5+@5!MZs=m5=~tHoOp`w$d%N)YmM9IdDemo?KD&s6{3UE? zGv%&&)%4#=Tu<)+wdF{in*Sdtvt<_0&wrkq0zI@=4eYB}jsE!9y}$qf^2ER0KY6}e z&}*TLw3qqO8{(%l`ESgsx}`gX+4|mg|96QqLHf^bPyA|Z{CIP^b!*YNtxKIM9W?It z8`WEHR>}s3o|9z7hkySpop$D18;37G=BeS%Q*gxk=ta{6*p8-Z;rkbXF~uJhbkJu;KZpg1)ac91=fVF3ak^G zQcMF$Qi|q67#EwVFgavbV09*?o?jZvK!p7VBKI+f3GH=%6V7%7SWq)~y85}Sb4q9e E0PA||sQ>@~ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_8.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_8.png index 330e7b3ab83305e6105b77e4302a8c54316ce58a..c3d42d3c14874e6fdc843d3ae19948da9a2c753c 100644 GIT binary patch literal 1769 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VOzPZ!6Kid%2*Ud)qnKJ}3Pi0|n;#8P|PH?C;1Tdiyn5vvOF;#&z z5vvs4T8L9lP7vPr?$2v8ZxAG&J@p3=6rcj^q_S{k4<#YuAtkohT5$u>duejP!+qsN5D&GU!~%dh?>t%8XJE+YYj;Hc=q(37a;LhWF z)!aUR zUFCoM<T~X`h(#$Rn@O8%5CbVUvFyNbRqWK+NZDOPDM{#A+Tuf@$%p4 zZ#T?#`uXgnh2XN-)7KKOO`ZPR<;H&7eXsUkxKtLbVIOg4%J(Bn&sisK^uNcr{LbIo zXA>9JnC2|3d6w=m%l}le+8&=vmFCA=H+^D#tFM)H=dZ8T^r=oWcX6-29Td8MM(d|H zJuREgRfkS4Pb`gBTR2DhRP_JJcD7Si?zU8$!YRHv;2!_eEuSM5r@Y*~VVC|SQ0}?+ z|Frr-ow`e{K^m=}&KNFxpY}UIE%pR3OHF>Kw)@SYSNj~CZYocje{MyQ!X00()Sbe5 zQ{Jg*@6}VEKV^qHMJi7UcK-RL zXZQQG8V&2%BbS{kf8RD-KKJtS`?IZ5#lsE>aW3`XdU`j)@87+JK?~n}h?*L3tz${R zJKJNLyCtPh^@)Ex5^%3#|NHP2lTdD;czZya`=_fPeQc(eIcmhpFrMewbv9Z97^<-{AA#PxbzEzT z-UP#iYh+HUr@zYs2KJ_xALsn~GX0!9&&MN=m;U_&GVZ3%B=!1l`F*)jDnOmL+l_Q5 zy_fmC@_5D99dSZ}r?#mpKi!+6?i~5iw&efsAKUFrYpzc(UAk8VTm-W2f4{Wq!0tVn zU~8MjYMk~g-*iqQWom$z4PA(igf ti(sq;J65G=l?0Sav{GPA@%|U{gk|OPo?ZTO4p@aTc)I$ztaD0e0svm$ zVlx#chwN4~7s9y2D#hwdCr+3#$gaSu6j=d66E>wj{|~NyZk(&!BDAoFBh~ANpjXSL zr@xh_a4ZerQgzat0z@3D{R=-Vu*g>g3A(jkisMk_yH9}l_Q~F$@o@Q%Z%!J8xQL&> zKkU_a*8tiWgh|Nk+biG&Bi^V^v8Z{|8emn^p0D2`M1bfA>TG}i;caWcBV2^hqYsng zI3I>eaDe=XL4bn{TWA5r5W$IHVO2_e9AHhW*piCE6g36`FNTFIXoQ0XV~Y?PfvF0p w2}2cF6VXc1tc7v0nF^Cbb}Pb#3$C-(uiJQEZ;f6SuvB31boFyt=akR{00kBzGynhq diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_80.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_80.png index 03b332dc2e52c9e0c03041d6c514fed03b7f474b..b6721c29ec990e81ff844e00f1e2306e2eda0e76 100644 GIT binary patch literal 1817 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VOwPZ!6Kid%2*9xS?TAmHNo z@4vtGcbOp1R)w;(-K&eXN(xjksdm@YG5lD3T!4W?wIP5BjZm1v;KYeWV5;I!#Z(2> zM6^;gYoT0kzaPcV?_c}>J-L-r)k$*-5OFLG;DRw#oqj4$;!xFRX*L#g(-8D(2?7#5 znogO4(O1eQbErCH+6a2-Kke}ATUA5d7rxaHEK?Js&I zojP6LZ<1cjx8jNTJOb(%n zB&C=Jg3ZTfDmJAMccIz6kcDWaXr6&`v6_laDXKGVYCfF5|F`(fd)f1kmzt*in{l7p z`KLa&W$mXqcK@~?`*fsYUuBMG@#7~yB4$5bm=h@y+-I9;(^~YcJLmST9{$wRhh~)A z;Y`+=@_9Xj*}U$n3vFthmdO?$n!)w-j`*!*TX*VB5x)P$uJ+CHzU)J@zbO6uUtE5w zJMtHM(8q;)L_4F8|NDKu=JgIgy=lC~uhLZV=PiD+b*Iu4VYT~jkN(&%98MOE;F}05cXZ_wViivwITPQ_HVO{HhLLD6@NZ&fb}8 z?xwhF%r#!PXV>gIRr6hrt4#_0?5T0Sb<@YN1m5G|EGa*)!~XA@Ex*;a-MzjswR~S{ z&YiTiKa4)Q_~ad3@hb01e}G!+rQT|0v2)WG&atU9yCZ2+*te~}-+GSzjl?;8Ubm8y z-m0~3`dV|fz37nhG$FOp)9rpvGljkU6Lt1KnI~{+<#ey$`|rKxu3nq`q;RXZ($DP| zGvfYSR@-fV=ll%+iSMhsmjrBM(fX;qFxpA-_fxKkXa2<|X-?66JmpX6-Bkf~wMs2U z$;*|dd_N!j$ClS6NMpA1OuKsNW2+wKMT#z*^K0w=Ud0*Pq6JUwPQF^?eeg%XJv%`s zOY{P_PJ%y#+7ynOvdp@i3cjrXii8=gF zZ`%i}bUV+iP*SruR{v>Md|7{Ye#?v3KX+J8`nYh;4~rWs{S*HvJ&3kHveR^WUaL-N zF4xlylMO%qh*JBy?YRGvJT_o4sjOacy2Y<*!ObH(Q-Jb2CU49wGIz;*Ww6Um=jV*O71B&(=0HeEg)R33#ZWUVZl!2;Hze$5c)MGS V;nu9$6kwId;OXk;vd$@?2>>n!uh{?q delta 392 zcmbQqw~u3jvIYyQr;B4q#jUq@59YEc@VFklUw`=mqxykKw#vDTA5ZB&o0P&>Afn7L zc_CBRH!lW#MLPgYOXLT|he~U2^?yF8Oy+y(3WOx(d+PU0_|NP)i>D z%*X?pT6amb4`}NQNvF)0x_f6TPKl^Gp9iv6A87CUSuQ}$o1HW^{z+>MNcw5J8)WaC zGoBiP3^9{ARGl=Z0EtXD4ppTGV5OgdmN9_|pdpiv8P52pFQMon1ax;SNcl^!A|OxD m>wMm1N2XV3f#oj#BboVc^W(J@35A6WK;Y@>=d#Wzp$P!Lg`0=~ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_81.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_81.png index e5680dda22362a175957705c914cd562a2203087..37f60accabe3a9a107def4dbc078581abe78305e 100644 GIT binary patch literal 1788 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VP(PZ!6Kid%2*dKNu45O8(8 z^Z(MTQ2nQJOwNB-o#DtA6;QBi+UB#4pTRzA8H0lcV~Y?P!LX1;zzdzgPzBV4sS2!< zSfyyzLb;OLKD>T+e#-aAhqlU7IF<$|p%W&2s?|z8F!34AEtd{ipLnY#=+$!RkKz=I z3uon>I+^dLnmcs{%(89~V&8pN1;jM}tTx5sfnk0`68j$Jdk|@3p!8m_G?%KA=St@L zwUToq1b_zR2`zNdfS3tpwhApg@^ne1lZGI}ZqF8>g(mJCs!9ocX9S%znUo%Ek_M_i z%kR`FaKjhm+?|dZg3QIu0ZMFoyFt#{qcDY|31p21M-$lHmOurp5QF47R1YQC0qr~p zaT0fnP~nEzE*gSfpC7Dn&=BPK+z_B705S(9MzDt+))>L26vZq=G!m^8TNJklVKo(- zQiP2tEMk>nbEboaFJnUh6NhR;K%MlTU%TbMoy$Hnt32-etKtiVy_dD+N1xx_`3Y$Mf#tw%`LV1Y58iK z+r))6TQ|Hc-tgHpe_l7)Z~Q%bm$Scg{1JKIRsR+rPG9hZ-{+Fw(RG{d z-FTzby6Gyrn?`GpM(d>{ksWX5l`(KF4d7bJyzB|%3k4Ccg(9au?e<&J|;re@1lV7gCw@*%G5`X#b?epGE|8!ORyjRhlKHk(bWp+QxJ?!!!GY_7mS2-0x9ly|8DNNc+UY1A$NGThrYeZHIUMy=QUZ&~$Q{}iQ6^Gx%X+|RFR z*i5-Qzy6Zpq|5tCH@yD(XMOqI!gW`e4RuYXzPlXp^YEMk{d3|AZEDqjz01C0Hbq$J z=dZSHqW90Q-n}T?l5?KK^LN*MVisRq=(E$c?hvm**;@ChlTV#B-CwF%|A_5$@HG#O z?)FW$9)-`}edKGM=&A7cdk;Tz)o^yYnHd*+eeW-+@Y?s6m4Hz#xs`eTj$@+t|1WXi zdip^ByI-Z*m)GpuO5-=<#k<+sMvMwm7@RoK2xxu+XDS$h qsS2nGl@#0Oxl#^CAd=d#Wzp$PzYTBex* delta 417 zcmeyvyOU#rvN{Wcr;B4q#jUq@4)(Gr@UR>_X`gw5!Hy%cY-$PPn>8<5&!;jLhzL(U z$fhzmlTB}O4qN5qU2NJww&di?Y(h{mvHIYBKmPok{mD|hCapzip@2atw zJuvGGP~vJ*m;$m^xJ4+iV73d;dDTFHW?KQTmV=w6fv(SO3{c|B69PMzeL2%Y7lk(s z0ZIb%?oK|=CWj@cDmfLVFgO7THHOIwOtz9OLJyLdUnTL)zm+e=00N$_elF{r5}E)+ CoSiBF diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_82.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_82.png index eb3b671ecd1266fc8034c9b34b06c8e7d8d43944..ba1bdbc759323545177210a4e2d39a4b5bdc0574 100644 GIT binary patch delta 1650 zcmX9;3sh5A7PVCh8WkuYIs~DB^7wQRs8WK)_61rKFg!uA)FRZ70SfY!e@Ik_qEIa4 zDPlqTMq`GC;vygzB2ZC4LNPNz5C|cPgshZ61O!b3WNz$Rcdd8Vx##Y4_P%?aF5E54 zpPaqTejo>ac{FEiRz8qE_=N@gNV_5U(Y5pL6;BoiTlLlM+dLg_lutKJjYt=9XAOBF zAC&*Ef(2I`Xxzj_z`8S67^Oc31%*M;co+MgXY_M7-}!S$xrq)qE|NU@Gy$uB&at2g}gyczf2E)?EjB}Rod6wF%u8j0w9rat4g8~vw< z?c<5M)ke-Vrxr;^ZzC6qd}a&VVRaIKT{r}Vck2Fo`lT7SiHtGQTf!l>^v1{H`GBRv z+d6NPoLpPusDnYIsbh)foNZrH3a=U2yt3?zJ}h-m2*gegf%wsr zndVBF*M>7fR~~>IMcNWlenglH19c5pbs$u70YD~RSU4J6a~Sm5v44+YA{pCnC$>4L zXtSgQtRRktHNWXx7Ib`-G4mBP`^9@Tcd8@jOj7Ejs(b zMrC)rm#~nIe_tmoKh=8> zP>;3RaM{m-8k?qKs#Luf0+{G`YKKntxXd(rl0miCKhZwN(N99G zfSoVu9B5UaXBoX^jicF;-*4Vq%^0Cz)fvB6Z>A5~xtr0K(-g`wDjfN4%j}TpHa8d*4O>j4h>HG z?z+bBSySha->mXw?Wu@@g#-cY?}b_=3syqPV#lJG5k-RZROz&@u6rdA@+gglaGG_v z07FYAEObSOhJQs)-h4NB<+nrkt4Lz|S0ah(&qiM7suOzAOPFo{qCAx6f$#5I6w)+) zq}@vpZ^ z=`&qDVL3TE!G4FBQhAJjFg{>u<9Uv%X>x=e=F*RUp;+w`n|2K z8C{GBya>4*JHGvNoOZUJ01nAma}6+W0qno4;zJkX%ySxzKN4yfSV3uIFz*bDhl*;`w0;OHsD7_WPG$@zR>3@o-FO$m)0|ikz$&Ac?yg;Zd$>yK0p6Ekb(z+jzn4TJ~A}3zs2$NNq)-A04=j?d{Aopkhwlan5nMJ*B7q?A32B`*Z{|z|3BaSLU8~9 delta 819 zcmZ21c!+y~vH@$Sr;B4q#jUq@PviI`^^86sO9ovyRBwB$;YXahjR88|;^QjsBQNZuZshJJSt; zx~0+=$_Spiejn)MwQ4}3{-z&LFUYB03vI0Wc01ktr)@MHX-e2+rwP8?XLFZ(`k4dWx9LLkA>y6MakYeBDgP9d*_K4Pc%w5QDdUHyskd0wQ5 zSF`?<{N_GO8jT+Jdhc{lS) b@dwiLv!zU5e+@79VgLe9S3j3^P6DJoE)>g0`;i$jLOCZ#QCDQYX?1!M(Nfq{q&m6uWq1AN@-Iw(H4 zL_t=ph>e2n&}~>Rps3JU0z~8;L8VrvAdiAz1?g^?St2%>$&!2j-2eRF`Oe8X-?={@ z^xwP~_azR4!7OHMp$B3x^O(99Yk*qPod{oGFbh2x^o=`GyI=P-q!hWD_y){q#bl*l z-)|2~UbXkeMgQ;!?@8!9(m(%>H}yDX127N5&si{{1t!e7%O@z*=~L9K=jTG_g#EC6 zCN)!PhHS9JyUWa*+KStZ%|&!u#G?StE(i}_Va`Me z1A)3a^o$No zv_ID+%`jm?XB=w%EEhufFrL|Lzx4G|UxViA;)7N`8>&wn5MD2$XswsykynB2jjc;9cIyeQbfT>MFxTQK;&|5E>rfx$p)$ob`t7|$tL&T;ED~BCf z)c6t__ucNIltua8*`ToNJ?rG|0=rkaHW>5DtsybZhSmHfNpiaT)(^Xy^dm_w9H9*@bUZKsNUl$wtR{)3XDCX`vpNM?M9a+W1Ik&h%kqxuR?ZzuDF*%p{&7nBs@$4las*ZqX5AD?NHn7Bt{K zMAo*V6MVg~PpBTh;B-55$fUudKa9tEic?+a@$EAU8C*SJklfb4R98V!PPR&$c`aCO z2S+-=cEx2=owsG%-%i{x($y05d=g$C2>jwfC<6;^ba1rhi0sR!jff7&%R(Y0FC9-(mDJv9 zm*_NU9PAY5)=H=0CGW*qR9AV#e5 zvQj99-I!Sm5zx!6uQ!^4_+H-%Ad;?i)Iv)I1BpP?W48mO>kOWh(JsVf3HET(>0@K4gc5Fe>|W6-eLbe%Kt#;#6Da;ubO|lu=--p+>j3}& literal 1171 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|QHxr;B4q#jUq@1O1K|@VH)l zQ-ArgtWU^Q-&xO#RraMD{CMQWag4uVf14l!hiXFr6B?l~g~5pvjlfjJp^B*rtchr) zXx2ixSWU&I6wQS&F0o3nITI)bGX^;XuqnmrOeanZrI(&bC*S$au+T-K`B3EFoxd8D zrf{UhNVEtod@^~XfY(A1FPBdX0ytEiJR?=^ars{lP@2-hQgrln$y{TnlMffh{G8>~ z8IV+|zW#3EH4as!%Gb3sOr1K9&fOz_T?I_5e|FO-^qsZ6l3R71^qFXljXQRz33^RD zvPaOXJG=0#^ui;Ls@}M12zqUH1In%Q1lla(1td(eH;Z}c=mQ0UGz`;QE-_8lFZf>H z{a_YQHb|otq-x=p8@&NsO9OTR4Q#n&+8H3U`2@%{6Qx^^CT|Z=n&$L!mWxJfP)y8Z zpa))lb^zL9?5fcj{ifwW#hYW(qcmDUy11U6W3{(60@`#bRC5Z@0IsL+RQ-8XojN19 zdb5ERoet%mFX7cPscmCT@lT-5Dr!@%3R?UHLkIxGZK_yb0$y>o2l58Vx%)j nCMH%XRv%$Wy{Mj-FJ^RIYZv@NDtj8Ruwn3Y^>bP0l+XkK_i;(+ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_84.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_84.png index ba1683d11ac0a8dc6f51d031b5d4a54cae255aec..d29c347c13aadc166d46f71d875e173011076421 100644 GIT binary patch literal 2166 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 Cx6E1q delta 500 zcmX@bHZ8 zQTVX+;AUx{^0l5VlMbFf(N)Cf)ERJZ#|Nf|JS{@v`;4b}E)?(r%D2`Zf~z}uTB9^H zaxzfiztV@TK^m<>;&CQ_iXAk7Y>+uGPkU(8dOLNdrldwr20GPl{|BI2r72FDlQ@=o zoa0QLIw1li&bRYJC(!7PYHRgCHWYnnT`wVWKCdN6BmU>l=S@KWxh7}&g7i(frcw_y zf=kuuq}s$gh6eNQ0=4_?{V>(JGeBsY+FHYGp@mNlr>cO$K~lo&gJeZnbm}z~pvL_8 zA6^St7H&~nYYeg@NW*rwpqE&zo2V0~Q>JfJCRkB?{ExZLoIuq|KogdFtdltv>h$Dh pZvYdAY6FabFqdLP&SCLMe;K-!+PI%R6yC`I1fH&bF6*2UngHH>$=v_| diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_86.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_86.png index 0473d4a798913e6d033a60f58cf7b89c72a626e8..669ab1b53e762c60145f326d210b4ec9e2c5f335 100644 GIT binary patch delta 1673 zcmV;426p+V46_lCBQgkjNkl_>i~wfgg(Wsw zJS?{O`1}FjM<1&IlYRv$k_Bsj%I{Xl=jVS3%bvDQpZ=S;E-S77+uKMeg;FRl?~p<% zltTG(KnZ2t9aSiWQYeK|C=YEPp%hA?6w3BHs!-k!Wve#GR1YYrP-uV{&Gi7 z3uUzdE0kuFLOI~5c=O09ly`oQPzt3`KG@imLs|V4NGP3l3#CwA3uVe>OhRckDU?Hw ziZ>t5@Fb9x2CYzrlR#HM%o@M<~rEg|ftsb?Wh6Pkx7cy*(7eY*Hx8?6@~}{N$b6(}RRk zCvs_8*-18`%b_=CYzTQEF(yJiMCWSKgsCe?P-$Lo-VrG*<8F^GZwbKe^ z{deZHzt8z2ltTHb^Yer<=R3+#?~4&iq3j&W?hnP-8O(34SDo^Ig01P192Lr)JJaqz zD!f^q2|L=UP)>Xkq1mKRZk^Q#<@p)O&U?Lob7xeiporw4P@cZ-arGY+(vSKT?vGy? z%EW_}Pzq()Q@`Dz^x)oozw2)=mrI}7JM9+A#~VE1GL}`CWSKcdcJRdk5KLj<;mHo*`!bk<)%RX?Rzz$TocMw zzh5YYQY06~(t~^Zh0*4PzDa{Rkt(> z<^9_r+Xlb{Y4^Mtk-#OB5CN!>kQI^8LVrO2P<}q&|6}bsOL?~R42Ymo%Xd$$1x?82F>_EC6vazP#QG88aS{% zZ(f^e%nPMZHVI|-^?Cauc4OYS7Jtf+jn?hfJE1h@h0>rgn1s@p7fJ)hvI(UzFO)** zw7bl53#CvBr2%6$Sv-_oV_E&7%RlVsscd8ik*1b>)<)cWNO&asozfg`o z?RMX@*`(_zh0<(NBt=pvg)%K%BH4FacX+soP=YhHQGr;MkOp-kEU zogPzGA(R!j^@&hcT@OMzD3lXUH-xhOHclM#LOCFmlfIXk9?FDmoH*u%vT-oezGs~n z%2mspcrfhp)sj$##S4=jCU0+J{^Gi~3X{_&3_wx+|4%1PiWG^*mI#6X&Y9U_i(NaC zc}c~3TwegZblC)xO$5G^4g{uuX@gv^|5SMI)wb!~KNGj*N!ver9|@&U3T5(u6iT5K z%7-5)p*(k>3Z+mArBDjxru`$7LMfC&*?yo3Wqv4IwLu>5eVByu`L>PTUqYEXZiG@O zx4ti-yuaUsQYeKo`Orit^FtXmScUS8eJhlOX2q(ZJmmwsWBaX+rBGUbO$z0Q1G!o# zPy4_MrPZWR4ww})XHKEac^#n?N};^5vri7?>4!i<>9AWUg)%LaRZe3PN~=ks95O3r z-kjl1AW!PgP!5_EGecSVWO$*pniR@GvtmY^I$S#DTW_Hh%3(V@dv)~AxAQ{j zgmZ`8LfJZ$Pgaet%n?d|t4X0eVqopMz1N-BaILqSVpvTIaLMfD;L)rbN7?Htz=X}*E57?T29?4Omj2ukSUn)F# zKNAMpu24>V5~0B*gmV9iB=TDCPp*vW6cmvh6w2M_J+A&zq57;-rnIAPE)z_vrJu;M4tX7lylE5ZU19uMRMh# z{ii?2^Z~cx^;Z6W+lq0qniR^C=kvYuIzkx}%AKoGt4X00%Ai30^?Nm;TocMwuP>BB zDUu6g>BhbNLg}zuD9wt&zZ-MoUZJ#_6v|e!V&pB{q6fE73Z>PgP;T4V5uw~MxV!9& z)xQF9AWUTg{3Q&zBa;{o8)`xtCUdlR`OeRusy4p>#@+P?{B! z2ds(f{`OvV_n_{P6iT5K%BBM_@}&PK&v`d)gwm|I`F(W1`RnOdMs*LQ)#SiXo-`}2 z{PtBS_g`oK-~Tb`=Db2VER>bsk5J}6h0!x{5K5tJ6H2Qrp%lu3AM90^Gzw+@Wsq$H z;IMn%iV{GRKL{g{eiV~S2p5rlYmvSulT8RulOPBMlS>E}k$w~x`0)+K+~g8z4lvmO O0000lGCIr;cnyW(ZO zHf9DbWJ_wV{y9T(;b#YWh(W+R(5YM86{PCI*pAUoz8a$?&m7ycgE_rM%5ipGT zS(By!8}mIpM$|Ns9hgE1MeJ__FGp>;`<;aIG1(6H!ebi<9=>orHMl=-^eEgqjC@*M z2InJ`btp`d!1>mk74db58=AdmRX&n9x_coLBQl-aD)%h#MQ!Cs?@nP9Bj2p#}UwHsqJ5g8Wp+G;?LC2yYFCqkkE(KnmGjRw*0^45T8dtHT+ zUvWoEZ^lHpp};S?#MWa!%%cLOjxT_1;N4c9RJU)tqc?WbbXjuv{|t8C6V+mn0w;ZT4_u>z+W(S<*g zI@(tk7(G$==~|lO{gviBBN<^HsCB4xoaKWCgmMmN2`LA?I6;@{*8AyhEOyW|Rx}x0 zOL^kLZ?*d2tmzMqJNKo#H;Bg7ZlriYqiDQ5WMf%gw_r2$gpO^8sE_KA)&2M*`aDHs zc^mIVjC+lD)om7LdW5fk7gT({&62<+=l9p1ynSoO?Y%#H@cQQz*{8%Bb)2K6%-G6Y zxIR9Lzw?J5QFE>CACIl9Mv*ce^2)IGMkijRD%vU#f*e@43~U0VH%E<}KC?tzJw-qH z{|B;gE_XaZ(HWXHK2h56RJ{zl+9;WB;n;qj?LI$CR7!6TVKQ$DI=hb?T@+;&+y4h$Q9Ql(A2D|RxuVX9s8wk z^D6=00BU-8D?5DM#5pHTNz%(ZjvBkF)^}L-q*GpGZOwQvXjlUG`uS+7Nv(78QLV$; z?745I(s1?Wy$vot1NpcHWbh<=#4*4uB)=q|!;>7C*l2L1!F5aU>E+ZO{i$qAS~jfS z5kIM9shxHfQ8UoV$5hGWX|Dd87DAV9vhnfKK_`-H`6EZRoII^!?Ou>r8pNkzlWFx2kcje7;5(xauU#8A@nK zQKmr&rpf6+-A|dZuL@p6sIFhgZ{MWoG?XFd8e%^d9hWz|^lWuWW%Iogr#&BZ4^}rX z;V3rT%TfMoyjZo~hst#pC4P32twU^oB( delta 468 zcmdnS*U33SS&JpW)5S5Q;?~={jCsul0#-W&_U!T52jzRr*M3kwda6|NA z!N~r%)lZ(oq%qlnS$y&arn>r-`d=bGKj!&#j&q^Nsbhu$UM-W1CKj+cX-?sI z>VH^a3Ww@brH4E&K^mPLPhWl5Az1mIQ+2KLPm>u=odK8ZrZ_21a_V#x^S-V-g=1;L z4K+cpZM>TUxRwSa&2T*|1`-U|71t7^(R#_OGeBv|HqVwxi=6M~9v1RicqD+keRe$) z(58RJ$9)+Wrd&?wUJ}5i>hx1d0%*99=^eZFi^=9rCq+DNt2lXf2K*9b1B#pVFUt+m z5cJw8;srD}oTp-WLe~fxE(tg7iUW-CV~1*4g!5#Bu1yHBu+t<4Fb<^; zj;hHoKsMRjFxgpzzv$-HilwTW{Z<-M0nM2vF$lx4<-SLHx8pr1pzF9>v<}$ z?omoRfsS>F!B4a6%-14c`zEm=z4NqBy95p^ejpoacP!|8+@Ozo$cOcu}9GC1O!ZWc8UJ~;0_I`v4xMi{k$apck_1LVQ9Z0K@A5b@A zs{N_aaT_@YWEt}=q9WCIJinZ1X938LZPzrL@RY|RfH*?8oK!26O$~`ac>}~SknLtK z6KF_Eo>K)~K;O!*pSGhfSJ86r( z>1Yvuq?fOB;t%bBYaiP9`mMao?4Xo6FlX=UD>|2*xSG~JlQ^jx!xLBWgzudrct9Vd zfRT4stQPXLLg`2K@MnU1+H5X2Ma%rtYhNTU=ebESG~IfXvBy0}GL&=Ee#;%mg+1PN zleFr?uHX&>nCnK_HY#$GKM(94=;k^ zJr)T~`DakLY1mQp9G%R4qOZCbVqaca3EfK1|Ko^mM!mKwaSmLZu{~jUc%eil_6<2Z zM+*j6?pj+3GYjqRp?I?H4f4=UdG4_AjG>KIUlG1W=_+r(?xR*YN8O0L(|MnE0@?7%12K9a#FZ>6OSB+=98+=7U zh@r@a0?&VWuan>hZ9gb;7k(U=*s=H-uELbm2whu$>M$T|^qjxci8bm1^R&I=qv95? zVP72P?9RHnuydpWVx9KYKta@AfHfOzmMWd_&RA|3;go!E?2yLJ*NBQ`gYR!(F@3L; zxs2T?NK5mjtZEgg$sh-IfEl(X?S6#uA|TzJC?d$W}BA2U~&zVR(`iNYp_KNVo>YB HLl^!Ac*==w delta 592 zcmZqTzs@;9S&L{#7MZNWtUY-Hlj!6eX6=a+LSe!a&xq8o`OUub-~WwqEkcPhQWJAu zyJ~pyr7Z8riPCoRyyy_tcj6d3vyF9 zg)S0jj?5ACa@D{~Cv_)qEM>THWy`qs4N@&HyEWX9>?ZmU>i#t_@I{a$^TjYf;MMyjy#Kj7wRc z)9!?82zuR`qqTX_$E&~Q-fI=wXjAroEWt#e)Pm~Do){e_Tu}=oJe&i&&v^ck>*aF34NUH z9!gV|9811EOVF#O*jML>;A9VW<;m~aBqv9*3jt}}$sgIOfHdo5DR%M6G3@+Eaw6gq ZkJ;7izSkz~cpS_C1fH&bF6*2Ung9d5208!$ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_9.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_9.png index af17767e6c25de2230bc5ee72e21266ca2a54853..b51db49a211f7d7808f6bb728d156fa0ebeccb0d 100644 GIT binary patch literal 1762 zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mO}jwWb&=0|VPiPZ!6Kid%2*M&~_t;Bj?) zTYp(NL2SZ}0PiQNs~dins+9fyVYsd4FY|-&>4FR#sto~5XoSKP1}9E50#g--DyAy1 zCZd(1SqtT!7W-HA{r;4h3R5_qb_MwH+c|XxOq-_(Bg|Z|1b`RhjbEJp8KLy=@n*&pdhZ%VuvL zXSHVLJg3TH#ohT5jW*`}E!Jh1;)J~P-{;I&RxEgG=J~4DAdT>2n;!GDToPtks8e(K z_mTTEgiZ%PSDfwAK~W{i-p4yYx$CANSKv z#bvEVrM~lGRtqomsq0?yc)dYh)#;bBe(&W%o7&%;&-3-a&VT+RAdGGMr`kD3 z0?H~TteMfc*W|;&!e5(DezCrL?XmCt=DjA_XV))j^sOxu`fjx3hqA`x@2|G)onmx; zMu6Y`!>+cwxSn<-moz?o5b%qs{y*=%htj6kP86==U3y>PoJHBfGk4|27x46g^_zSP2YIz8d|Lzh*241?{e6>oB0Ag(b(!)&K(%f`oU>sef1a zQ)Vep@mWKoDf?z7>-XM%?ey|S>!s6qpy-j5@DAtSG`-~#o91nc{JU|}-#-tJkuUlb zcgxCu;hxIf!Shy@T3wsGJ^bV4?UTO;ow8}&6se(IcUMny%GLcdKVRGYeDe0YmHJE1 z1Z&K0`?S(xNsQ;p*Xs@D?Krzcdsq0sd4bC-xl$u!cGYt1d$djaylrZ3(6>v+^lLa$ zFFbo^*R7s@skV2Q{fV48%LDYdQ%~v4o8j%$U}b+GXWsIFDzU3}Q_7!TdKs~6jsN!K zyFw>I7rqgB{$+izohAS4$<=Evf8UK!(1S}{w1S?rBHW3S+|pjHkT zOb*#-bQeNhO|(*Evk;oFnu<*+HfI9Guqd5W^s)5&>rI?aodIqwo2owudbNCdSqUVA zG+Kogx`2o$1~Mn@+n&@4c(oM$?g1)PV)^E%A;|PwVG2hhNc4amhpJP8e2b9c27aeb zfg9`#T{zw(%eMq^V3%qR_~g$abpI647NLbAm;|aZK*MkugYFOp{7z~Hx?K0%8%ZAQ z);ee~wg>?U0WXGyENBEw4y*u5V5$OZB3dc3SqM#7O~s}Z&4n;7u}Tp(qOf4bAcp{o f0`fh-Bb({&|2v18UK)M}76c5Qu6{1-oD!M diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/ic_visibility_black_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/ic_visibility_black_24dp.png new file mode 100755 index 0000000000000000000000000000000000000000..c816ab49dca80cea33cd7815db4549dfa8978579 GIT binary patch literal 868 zcmV-q1DpJbP)U^7{~GN8fWWGhuM42IP8C5!>|i9#YQF&F;lz{3G6^3me%AU6$^wyL`3L7AqCN4 zn~D;6F&88HAB2e)VOWuH5nX9>bSL4ijX1Ugg7whx8eV&I0*1HZYTrQW( z<#OF5cc`L`C?mX=$p}%}c#1n*GmT0{iF1gaCx^rtr2>tj3-cMr=mqAOPpP3u%IM}N zbgXBKS1H9&UV8Zx-A0ax;>97)v5oFPe&tzgyUjehgPG$tHq`PPy2Cl(X|Cuk{t#k+eoFu|L6(FGvv??w zM>xpmM3F&1=caRJ&?v~q!aC1WsCHqc_mL4rH%$~P`h;oS2x>?RXXpPkT394OniP91 z&`cKLETyQz#N#A{J1cI7blco|(x03{(-@1m5;(|G|S*5wvTQPN`d8A_Qvo$u`}lq&W@ zFIl`~dt&vDy-Vh0-_oI8kUv%}9qK(w$kHh`4WKlO)r}}aV)ZLr;$cf@TDEZNzQbr$ zn7oNb4$p8QygK|SAx`sFCb^Fi5WdYXs3niD&`mRrQGK43lGI@|DNOyGydGoMwDp7_ zMj_U6T&(*T-6Lr_bDKvnQ7t@SmdMt`JiDA_vcnvWWQz$;t4aht;wx5U;kDWYvJZui z{B{cUBLAAsnxY^YGr~%JfNW4$=SwsSmy+#@DT_!I uK`U=C%)6Nk^E$0m;KSu|xm+&S&G8>_o}3QQ)9<4I0000FW!?-sLzGlhR8&+Y z1$x88`2T z;2#2hNQxqDT(Jo&$dPow7vyQDo;X!BkY$QB$^xmxDB8tXbQo2p4{LFpN-@u|fO-k7 zDp*CKTu4%B3Igd(Vt6cWa(s{=&zURfbv(9=LIpw^5J)c|M_%CQktT&nk08{6fzl_@ z#4fw6(1k7GES=JVOG*BaG0r4zVjqR#Yi`C`TDaqOsNvGy7Z4j5$fOfGv9=&gT>|Is z6E+&$K+Yqn8MBn|s5~cwLkWHsKwkoQByD4DU6}k04o#qh^*Csdx-pv;XXmh0g?yav z01eVAW*y?}Ux_Uk*D{7weOI(#4$6lA9y>-3aUn)z6sX0k+)P~ zRzeA+8!<~DPu~J-gUDMNF#8oHku)z^KUhn!CvM4Nwu;gq-Kl@5VMN?Cg;_UBgY=X* zdkE~s`BB)khP7=C(uOekTVgnL7Z<{R;S^@goOmQ9I1=7Pvf$iX!Y`S}TBlc%@P_gl zmsU&B6?9A*Yt4M+o3u*}E@ddWk_y=CVud1qQ(^~0n{-MmLSw>Z%X4`-ZPGBvz3K`& zV<0fni+C!=I|6Ak5YiiXF3x)>;Vh*+lltu>-4{iG7_SJVV-`r^R1;e$f%LNfj}1<% z%sSI_&`322(%j7qo1CLiuB1AySUbO={4bN_za;O5jRg0y6E;!>V;qEw1eJ{NL%2u) zZ7gx9@iBOr3=ebWn - + > + + + + diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/edit_time_dialog.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/edit_time_dialog.xml index c672e265..a6d367e2 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/edit_time_dialog.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/edit_time_dialog.xml @@ -57,7 +57,6 @@ android:id="@+id/submit_button" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:src="@drawable/ic_check_white_24dp" android:scaleType="center" android:elevation="2dp" android:contentDescription="@android:string/ok" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_trigger_edit.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_trigger_edit.xml index 7917cde6..b5efe7ef 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_trigger_edit.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_trigger_edit.xml @@ -199,6 +199,7 @@ android:hint="@string/trigger_note_text_hint" android:layout_marginStart="@dimen/edit_trigger_horizontal_margin" android:layout_marginEnd="@dimen/edit_trigger_horizontal_margin" + android:inputType="textCapSentences|textAutoCorrect" /> diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_experiment.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_experiment.xml index 4a025c9b..9153863e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_experiment.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_experiment.xml @@ -35,7 +35,7 @@ android:minHeight="@dimen/accessibility_touch_target_min_size" android:singleLine="true" android:imeOptions="actionDone" - android:inputType="textCapSentences" + android:inputType="textCapSentences|textAutoCorrect" android:contentDescription="@string/experiment_title_hint" > diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_run.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_run.xml index 380a2f9c..558ef5c8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_run.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_update_run.xml @@ -35,7 +35,7 @@ android:layout_height="wrap_content" android:minHeight="@dimen/accessibility_touch_target_min_size" android:singleLine="true" - android:inputType="textCapSentences" + android:inputType="textCapSentences|textAutoCorrect" android:contentDescription="@string/edit_trial_title_hint" android:imeOptions="actionDone" > diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/label_add.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/label_add.xml index 8025f2a2..cc55d9e5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/label_add.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/label_add.xml @@ -43,8 +43,8 @@ android:layout_height="wrap_content" > - + android:inputType="textCapSentences|textAutoCorrect" + android:maxLines="@integer/label_edit_max_lines"> + + + + \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/sensor_readings_label_details_fragment.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/sensor_readings_label_details_fragment.xml index 73958d0b..ff0ec1a1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/sensor_readings_label_details_fragment.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/sensor_readings_label_details_fragment.xml @@ -61,14 +61,14 @@ android:minHeight="@dimen/accessibility_touch_target_min_size" android:singleLine="true" android:imeOptions="actionDone" - android:inputType="textCapSentences" + android:inputType="textCapSentences|textAutoCorrect|textMultiLine" android:contentDescription="@string/experiment_title_hint" android:maxLines="5" > - + - - \ No newline at end of file + + + \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/text_label_fragment.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/text_label_fragment.xml index 185dc46b..caa6946a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/text_label_fragment.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/text_label_fragment.xml @@ -39,6 +39,7 @@ android:hint="@string/text_label_hint" android:padding="16dp" android:background="@android:color/transparent" + android:inputType="textMultiLine|textCapSentences|textAutoCorrect" /> diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml index 207d074e..ac0a8f14 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml @@ -265,7 +265,7 @@ "مزيد من المعلومات‏‏" "Science Journal" "إجراء تجارب عن العالم من حولك" - "الميزات والتحسينات الجديدة: \n• واجهة جديدة لتدوين الملاحظات وتوثيق التجارب العلميّة. \n• ميزة لقطة جديدة لالتقاط نقاط بيانات فرديّة. \n• مستشعرات جديدة: مقياس تسارع خطّي ومقياس المغناطيسيّة وبوصلة \n• معرض لتصفّح التجارب تمّت إعادة تصميمه \n• يتوفّر الآن على أجهزة iOS." + "الميزات والتحسينات الجديدة: \n• حذف التجارب والملاحظات بسهولة أكبر \n• إصلاح الأخطاء" "إنّ Science Journal عبارة عن دفتر ملاحظات رقمي مجّاني من Google. \n \nسواء أكنت معلّمًا في مجال العلوم أم هاويًا لممارسة العلوم في المنزل، يمكنك الاحتفاظ بالتعليقات والصور والملاحظات كلّها معًا في مكان ملائم. ويمكنك استخدام المستشعرات في هاتفك لقياس الظواهر مثل الضوء والصوت والحركة وتمثيلها بيانيًا أو التوصيل بمستشعرات خارجيّة عبر بلوتوث لإجراء تجارب عن العالم من حولك. \n \nبفضل تطبيق Science Journal، يمكنك: \n• قياس الضوء والصوت والسرعة وضغط الهواء والمزيد باستخدام المستشعرات المضمّنة في هاتفك. \n• تدوين الملاحظات والتقاط الصور لتوثيق تجاربك العلميّة. وسيتوفّر المزيد من أنواع الملاحظات قريبًا.\n• الاتّصال بمستشعرات خارجيّة باستخدام أجهزة Arduino وVernier محدّدة تمّ تمكين بلوتوث عليها. \n• تصدير بيانات المستشعر المسجّلة كملفّات CSV. \n• إنشاء مشغّلات تلقائيّة لتسجيل البيانات وتدوين الملاحظات. \n• استخدام الصوتنة لسماع حركة الرسم البياني. \n \nيتوفّر تطبيق Science Journal مجانًا على أجهزة Android وiPhone وiPad وأجهزة Chromebook المتوافقة. \n \nأنشطة تعليميّة من شركائنا: https://makingscience.withgoogle.com/science-journal/activities \nللحصول على الدعم: https://productforums.google.com/forum/#!forum/sciencejournal \nيتوفّر رمز البرنامج مفتوح المصدر: https://github.com/google/science-journal \n\n إشعار الأذونات: \n• الموقع: مطلوب للبحث عن أجهزة مزوّدة بمستشعرات بلوتوث . \n• الكاميرا: مطلوبة لالتقاط الصور لتوثيق التجارب . \n• الميكروفون: مطلوب لمستشعر شدّة الصوت. \n• سعة التخزين: مطلوبة للوصول إلى الصور لإدراجها ضمن التجارب." "البحث عن مستشعرات جهات خارجية" "ابحث عن التطبيقات التي تعتمد واجهة برمجة تطبيقات مستشعرات الجهات الخارجيّة، ومكّن إضافة هذه المستشعرات إلى التجارب." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml index a3bac447..f3db4d5c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml @@ -265,7 +265,7 @@ "Saznajte više" "Naučni dnevnik" "Eksperimentišite sa svetom." - "Nove funkcije i poboljšanja: \n• Novi interfejs za pravljenje beležaka i dokumentovanje naučnih eksperimenata. \n• Nova funkcija snimaka, za beleženje pojedinačnih činjenica sa podacima. \n• Novi senzori: linearni akcelerometar, magnetometar i kompas \n• Prerađen dizajn galerije za listanje eksperimenata \n• Od sada dostupno i na iOS uređajima!" + "Nove funkcije i poboljšanja: \n• Lakše brisanje eksperimenata i beležaka. \n• Ispravke grešaka" "Naučni dnevnik je besplatna digitalna naučna beležnica koju obezbeđuje Google. \n \nBilo da ste nastavnik ili neko ko se bavi naukom iz hobija, možete da čuvate beleške, fotografije i zapažanja na jednom praktičnom mestu. Pomoću senzora telefona možete da merite i grafički prikazujete pojave kao što su svetlo, zvuk i pokret i da se povezujete sa spoljnim senzorima preko Bluetooth-a da biste vršili eksperimente sa svetom koji vas okružuje. \n \nUz aplikaciju Naučni dnevnik možete: \n• da merite svetlo, zvuk, ubrzanje, vazdušni pritisak i druge parametre pomoću senzora u telefonu. \n• da pravite beleške i fotografije radi dokumentovanja naučnih eksperimenata. Uskoro će biti dostupno još vrsta beležaka! \n• da se povezujete sa spoljnim senzorima preko odabranih Arduino i Vernier uređaja koji podržavaju Bluetooth. \n• da izvozite podatke zabeležene senzorom kao CSV datoteke. \n• da pravite automatizovane okidače za snimanje podataka i unos beležaka. \n• da koristite sonifikaciju da biste mogli da čujete tendencije na grafikonima. \n \nNaučni dnevnik je dostupan besplatno na Android, iPhone i iPad uređajima i kompatibilnim Chromebook uređajima. \n \nObrazovne aktivnosti naših partnera: https://makingscience.withgoogle.com/science-journal/activities \nPodrška: https://productforums.google.com/forum/#!forum/sciencejournal \nDostupan je otvoreni kod: https://github.com/google/science-journal \n\n Obaveštenje o dozvolama: \n• Lokacija: potrebna da bi se nalazili uređaji sa Bluetooth senzorima. \n• Kamera: potrebna za pravljenje slika radi dokumentovanja eksperimenata. \n• Mikrofon: potrebna za senzor jačine zvuka. \n• Skladišni prostor: potrebna za pristup slikama koje će se umetati u eksperimente." "Potraži senzore treće strane" "Potražite aplikacije koje podržavaju API za senzor treće strane i omogućite dodavanje takvih senzora u eksperimente." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml index 4a51ab7a..3339afd6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml @@ -265,7 +265,7 @@ "Научете повече" "Научно списание" "Експериментирайте със света." - "Нови функции и подобрения: \n• Изцяло нов интерфейс за водене на бележки и документиране на научни експерименти \n• Нова функция за моментни снимки за заснемане на отделни точки с данни \n• Нови сензори: линеен акселерометър, магнитометър и компас \n• Нов дизайн на галерията за разглеждане на експерименти \n• Приложението вече е достъпно на устройства с iOS!" + "Нови функции и подобрения: \n• По-лесно изтриване на експерименти и бележки. \n• Поправки на програмни грешки" "Научно списание е безплатен цифров научен дневник, предоставен от Google. \n \nНезависимо дали сте преподавател, или се занимавате с наука като хоби, можете да съхранявате бележките, снимките и наблюденията си на едно удобно място. Използвайте сензорите в телефона си, за да измервате и да създавате графики на явления като светлина, звук и движение, или свързвайте външни сензори чрез Bluetooth, за да експериментирате със света около себе си. \n \nС приложението Научно списание можете да: \n• измервате светлина, звук, ускорение, въздушно налягане и много други чрез вградените сензори в телефона си; \n• добавяте текст и снимки като бележки към документи в научните си експерименти (скоро ще са достъпни и други типове бележки); \n• свързвате външни сензори чрез избрани устройства Arduino и Vernier с Bluetooth; \n• експортирате записани данни от сензори като CSV файлове; \n• създавате автоматизирани задействания, за да записвате данни и бележки; \n• използвате сонификация, за да чуете движението на графиките си. \n \nПриложението Научно списание е достъпно безплатно на устройства с Android, на iPhone, iPad и съвместими устройства Chromebook. \n \nОбразователни активности от наши партньори: https://makingscience.withgoogle.com/science-journal/activities \nЗа поддръжка: https://productforums.google.com/forum/#!forum/sciencejournal \nОтворен изходен код е достъпен на адрес: https://github.com/google/science-journal \n\n Съобщение за разрешенията: \n• Местоположение: необходимо е за сканиране за сензорни устройства с Bluetooth. \n• Камера: необходима е за правене на снимки с цел документиране на експерименти. \n• Микрофон: необходим е за сензор за интензитет на звука. \n• Хранилище: необходимо е за достъп до снимки с цел вмъкване в експерименти." "Сканиране за сензори на трети страни" "Търсене на приложения, които поддържат приложния програмен интерфейс (API) за сензори на трети страни, и активиране на добавянето на тези сензори към експерименти." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml index b244a979..25ad1265 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml @@ -265,7 +265,7 @@ "Saznajte više" "Science Journal" "Eksperimentirajte sa svijetom oko sebe." - "Nove značajke i poboljšanja: \n• potpuno novo sučelje za pisanje bilješki i dokumentiranje znanstvenih eksperimenata \n• nova značajka snimki za snimanje pojedinačnih podatkovnih točaka \n• novi senzori: linearni akcelerometar, magnetometar i kompas \n• novi dizajn galerije za pregledavanje eksperimenata \n• dostupnost na iOS uređajima" + "Nove značajke i poboljšanja: \n• lakše brisanje eksperimenata i bilješki \n• ispravci programskih pogrešaka" "Science Journal besplatan je digitalni znanstveni dnevnik iz Googlea. \n \nBez obzira prenosite li znanstvena znanja drugima ili je znanost vaš hobi, sve svoje bilješke, fotografije i opažanja možete čuvati na jednom praktičnom mjestu. Pomoću senzora u telefonu možete mjeriti pojave kao što su svjetlost, zvuk i kretanje, prikazivati ih u obliku grafikona te se putem Bluetooth veze povezivati s vanjskim senzorima i eksperimentirati sa svijetom oko sebe. \n \nUz aplikaciju Science Journal: \n• Mjerite svjetlost, zvuk, ubrzanje, tlak zraka i druge vrijednosti pomoću senzora ugrađenih u telefon. \n• Pišite bilješke i snimajte fotografije da biste dokumentirali svoje znanstvene eksperimente. Uskoro stižu nove vrste bilježaka! \n• Povezujte se s vanjskim senzorima pomoću odabranih Arduino i Vernier uređaja koji podržavaju Bluetooth. \n• Izvozite snimljene podatke sa senzora u obliku CSV datoteka. \n• Izrađujte automatizirane okidače za snimanje podataka i zapisivanje bilješki. \n• Upotrebljavajte sonifikaciju da biste čuli kretanje svojih grafikona. \n \nAplikacija Science Journal besplatna je i dostupna na Android, iPhone, iPad i kompatibilnim Chromebook uređajima. \n \nObrazovne aktivnosti naših partnera: https://makingscience.withgoogle.com/science-journal/activities \nPodrška: https://productforums.google.com/forum/#!forum/sciencejournal \nDostupan softver otvorenog izvornog koda: https://github.com/google/science-journal \n\n Obavijest o dopuštenjima: \n• Lokacija: potrebno za traženje Bluetooth senzorskih uređaja. \n• Fotoaparat: potrebno za snimanje fotografija i dokumentiranje eksperimenata. \n• Mikrofon: potrebno za senzor jakosti zvuka. \n• Pohrana: potrebno za pristupanje fotografijama radi njihova umetanja u eksperimente." "Potražite senzore treće strane" "Potražite aplikacije koje podržavaju API senzora treće strane i omogućite upotrebu tih senzora prilikom provođenja eksperimenata." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml index e4fa3e46..406aa938 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml @@ -265,7 +265,7 @@ "Més informació" "Science Journal" "Explora el teu món." - "Funcions noves i millores: \n• Interfície completament nova per prendre notes i documentar experiments científics. \n• Nova funció per fer instantànies i capturar punts de dades concrets. \n• Sensors nous: acceleròmetre lineal, magnetòmetre i brúixola \n• Galeria redissenyada per cercar experiments \n• Ara també disponible per a dispositius iOS." + "Noves funcions i millores: \n• Suprimir experiments i notes més fàcilment. \n• Correcció d\'errors." "Google t\'ofereix Science Journal, una llibreta científica digital gratuïta. \n \nTant si ensenyes ciències com si t\'agrada fer experiments científics a casa, pots prendre notes, fer fotos i anotar observacions en un sol lloc. Fes servir els sensors del teu telèfon per mesurar i crear gràfics de fenòmens com ara la llum, el so i el moviment, o connecta\'l per Bluetooth a sensors externs per dur a terme experiments en el teu entorn. \n\nL\'aplicació Science Journal et permet fer el següent: \n• Mesurar la llum, el so, l\'acceleració, la pressió atmosfèrica i molts altres fenòmens amb els sensors integrats al teu telèfon mòbil. \n• Prendre notes i fer fotos per documentar els teus experiments científics. Aviat afegirem més tipus de notes. \n• Connectar el dispositiu a sensors externs per Bluetooth (només amb determinats dispositius Arduino i Vernier compatibles). \n• Exportar les dades enregistrades amb els sensors com a fitxers CSV. \n• Crear activadors automàtics per gravar dades i prendre notes. \n• Fer servir la sonificació per sentir el moviment dels teus gràfics. \n\nScience Journal està disponible de manera gratuïta per a Android, iPhone, iPad i dispositius Chromebook compatibles. \n\nActivitats educatives dels nostres col·laboradors: https://makingscience.withgoogle.com/science-journal/activities. \nAssistència: https://productforums.google.com/forum/#!forum/sciencejournal. \nCodi obert disponible a https://github.com/google/science-journal. \n\n Avís de permisos: \n• Ubicació: es necessita per cercar dispositius amb sensors Bluetooth. \n• Càmera: es necessita per fer fotos per documentar experiments. \n• Micròfon: es necessita per utilitzar el sensor d\'intensitat del so. \n• Emmagatzematge: es necessita per accedir a les fotos i inserir-les als experiments." "Cerca sensors de tercers" "Cerca aplicacions que admetin l\'API de sensors de tercers i permet que s\'afegeixin aquests sensors als experiments." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml index b49c0c08..49093a2a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml @@ -265,7 +265,7 @@ "Další informace" "Vědecký žurnál" "Experimentujte se světem kolem vás." - "Nové funkce a vylepšení: \n• Zbrusu nové prostředí pro vkládání poznámek a dokumentaci vědeckých experimentů. \n• Nová funkce pořízení snímku pro zachycení jednotlivých datových bodů. \n• Nové senzory: lineární akcelerometr, magnetometr a kompas. \n• Nový design galerie pro procházení experimentů. \n• Nyní k dispozici i pro zařízení se systémem iOS!" + "Nové funkce a vylepšení: \n• snazší mazání experimentů a poznámek, \n• opravy chyb." "Vědecký žurnál je bezplatný digitální vědecký projekt, který vám přináší společnost Google. \n \nUčitelům přírodních věd i nadšencům, kteří se vědeckým pokusům věnují doma, tato aplikace nabízí praktický prostor pro ukládání poznámek, snímků i veškerých pozorování. Pomocí senzorů v telefonu můžete měřit a graficky interpretovat různé jevy, například světlo, zvuk či pohyb, nebo můžete prostřednictvím technologie Bluetooth připojit externí senzory a experimentovat se světem kolem sebe. \n \nAplikace Vědecký žurnál nabízí řadu možností: \n• Měření světla, zvuku, zrychlení, tlaku vzduchu a dalších veličin pomocí senzorů v telefonu. \n• Pořizování poznámkové a fotografické dokumentace vědeckých experimentů. Připravujeme další typy poznámek! \n• Připojení k externím senzorům prostřednictvím vybraných zařízení Arduino a Vernier s technologií Bluetooth. \n• Export dat senzorů do souborů formátu CSV. \n• Vytváření automatických spínačů pro záznam dat a pořizování poznámek. \n• Zvuková reprezentace pohybu v grafu. \n \nAplikace Vědecký žurnál je zdarma k dispozici pro zařízení Android, iPhony, iPady a kompatibilní zařízení Chromebook. \n \nVzdělávací aktivity našich partnerů: https://makingscience.withgoogle.com/science-journal/activities \nPodpora: https://productforums.google.com/forum/#!forum/sciencejournal \nOtevřený kód: https://github.com/google/science-journal \n\nOznámení o oprávněních: \n• Poloha: potřeba pro vyhledání zařízení s rozhraním Bluetooth. \n• Fotoaparát: potřeba pro pořizování fotek při dokumentování experimentů. \n• Mikrofon: potřeba pro snímač intenzity zvuku. \n• Úložiště: potřeba pro ukládání fotek pořízených při dokumentování experimentů." "Vyhledat senzory třetích stran" "Hledejte aplikace, které podporují rozhraní API senzorů třetích stran, a povolte přidání těchto senzorů k experimentům." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml index 7c519004..4e8b5aec 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml @@ -265,7 +265,7 @@ "Få flere oplysninger" "Science Journal" "Udfør forsøg på verden omkring dig." - "Nye funktioner og forbedringer: \n• Helt ny grænseflade til notetagning og dokumentation af videnskabelige eksperimenter. \n• Ny fotofunktion til registrering af individuelle datapunkter. \n• Nye sensorer: Lineært accelerometer, magnetometer og kompas \n• Nydesignet galleri til søgning blandt eksperimenter \n• Nu tilgængeligt på iOS-enheder!" + "Nye funktioner og forbedringer: \n• Lettere at slette eksperimenter og noter. \n• Fejlrettelser" "Science Journal er den gratis digitale videnskabsnotesbog fra Google. \n \nUanset om du underviser i naturvidenskab eller blot beskæftiger dig med det på hobbyplan, kan du samle dine noter, fotos og observationer på ét praktisk sted. Brug sensorerne i din telefon til at måle og illustrere fænomener som lys, lyd og bevægelse, eller opret forbindelse til eksterne sensorer via Bluetooth for at udføre eksperimenter på verden omkring dig. \n \nMed appen Science Journal kan du: \n• Måle lys, lyd, acceleration, lufttryk og meget mere med telefonens indbyggede sensorer. \n• Tage noter og fotos til dokumentation af dine videnskabelige eksperimenter. (Der kommer snart flere notetyper). \n• Oprette forbindelse til eksterne sensorer ved hjælp af udvalgte Bluetooth-aktiverede Arduino- og Vernier-enheder. \n• Eksportere registrerede sensordata som CSV-filer. \n• Oprette automatiske triggers til optagelse af data og notetagning. \n• Bruge sonificering til at høre bevægelserne i dine grafer. \n \nScience Journal er gratis til Android, iPhone, iPad og kompatible Chromebook-enheder. \n \nUddannelsesmæssige aktiviteter fra vores partnere: https://makingscience.withgoogle.com/science-journal/activities \nSupport: https://productforums.google.com/forum/#!forum/sciencejournal \nTilgængelig open source-kode: https://github.com/google/science-journal \n\n Meddelelse om tilladelser: \n• Placering: Påkrævet for at kunne scanne efter sensorenheder med Bluetooth. \n• Kamera: Påkrævet for at tage billeder til dokumentation af eksperimenter. \n• Mikrofon: Påkrævet for at kunne bruge sensor til registrering af lydstyrke. \n• Lager: Påkrævet for at få adgang til fotos til indsættelse i eksperimenter." "Scan efter tredjepartssensorer" "Se efter apps, der understøtter tredjepartssensorens API, og aktivér tilføjelse af de pågældende sensorer til eksperimenter." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml index 37dd079d..f013c240 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml @@ -265,7 +265,7 @@ "Weitere Informationen" "Science Journal" "Experimente mit der Umgebung." - "Neue Funktionen und Verbesserungen: \n• Brandneue Schnittstelle zum Erfassen von Notizen und zur Dokumentation wissenschaftlicher Experimente \n• Neue Snapshot-Funktion zur Erfassung einzelner Datenpunkte \n• Neue Sensoren: linearer Beschleunigungsmesser, Magnetometer und Kompass \n• Neu gestaltete Galerie zum Blättern in den Experimenten \n• Jetzt auf iOS-Geräten verfügbar!" + "Neue Funktionen und Verbesserungen: \n• Leichteres Löschen von Experimenten und Notizen. \n• Fehlerkorrekturen" "Science Journal von Google ist das kostenlose digitale Notizbuch für wissenschaftliche Zwecke. \n \nOb Sie Wissenschaft nun beruflich oder als Hobby betreiben, hier haben Sie einen praktischen Aufbewahrungsort für alle Ihre Notizen, Fotos und Beobachtungen. Mit den Sensoren in Ihrem Telefon können Sie Phänomene wie Licht, Ton und Bewegung messen und grafisch darstellen. Über Bluetooth können Sie auch externe Sensoren für Experimente mit Ihrer Umwelt anschließen. \n \nMit der Science Journal App können Sie: \n• Licht, Ton, Beschleunigung, Luftdruck und vieles mehr mit den integrierten Sensoren Ihres Smartphones messen, \n• Notizen und Fotos machen, um Ihre wissenschaftlichen Experimente zu dokumentieren (weitere Notizarten folgen demnächst!), \n• mit ausgewählten bluetoothfähigen Arduino- und Vernier-Geräten eine Verbindung zu externen Sensoren herstellen, \n• aufgezeichnete Sensordaten als CSV-Dateien exportieren, \n• automatisierte Trigger zum Aufzeichnen von Daten und Erfassen von Notizen erstellen, \n• über die Sonifikation die Bewegung in den Graphen hörbar machen. \n \nDas Science Journal ist kostenlos für Android, iPhone, iPad und kompatible Chromebook-Geräte verfügbar. \n \nBildungsaktivitäten unserer Partner: https://makingscience.withgoogle.com/science-journal/activities \nSupport: https://productforums.google.com/forum/#!forum/sciencejournal \nAls Open Source verfügbarer Code: https://github.com/google/science-journal \n\n Hinweis zu Berechtigungen: \n• Standort: erforderlich, um nach Bluetooth-Sensorgeräten zu scannen \n• Kamera: erforderlich, um Experimente in Bildern zu dokumentieren \n• Mikrofon: für den Geräuschintensitätssensor erforderlich \n• Speicher: für die Speicherung von Bildern zur Dokumentation von Experimenten erforderlich" "Sensoren von Drittanbietern suchen" "Nach Apps suchen, die die Drittanbieter-Sensor-API unterstützen, um diese Sensoren Experimenten hinzufügen zu können." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml index 7660d029..90b78e2d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml @@ -265,7 +265,7 @@ "Μάθετε περισσότερα" "Science Journal" "Πειραματιστείτε στον κόσμο." - "Νέα χαρακτηριστικά και βελτιώσεις: \n• Ολοκαίνουργια διεπαφή για σύνθεση σημειώσεων και καταγραφή επιστημονικών πειραμάτων. \n• Νέα λειτουργία σύνοψης για λήψη ξεχωριστών σημείων δεδομένων. \n• Νέοι αισθητήρες: γραμμικό επιταχύμετρο, μαγνητόμετρο και πυξίδα \n• Ανασχεδιασμένη συλλογή για περιήγηση σε πειράματα \n• Διαθεσιμότητα πλέον σε συσκευές iOS!" + "Νέες λειτουργίες και βελτιώσεις: \n• Πιο εύκολη διαγραφή πειραμάτων και σημειώσεων. \n• Διορθώσεις σφαλμάτων" "Το Science Journal είναι το ψηφιακό επιστημονικό σημειωματάριο που σας προσφέρει η Google. \n \nΕίτε είστε καθηγητής επιστημών είτε ασχολείστε με τις επιστήμες από χόμπι στο σπίτι σας, μπορείτε να κρατάτε σημειώσεις, φωτογραφίες και παρατηρήσεις σε ένα βολικό σημείο. Χρησιμοποιήστε τους αισθητήρες στο τηλέφωνό σας για να μετρήσετε και να καταγράψετε φαινόμενα, όπως το φως, τον ήχο και την κίνηση ή συνδεθείτε με εξωτερικούς αισθητήρες μέσω Bluetooth για να διεξάγετε πειράματα στον κόσμο γύρω σας. \n \nΜε την εφαρμογή Science Journal, μπορείτε: \n• Να μετράτε το φως, τον ήχο, την επιτάχυνση, την ατμοσφαιρική πίεση και πολλά άλλα χρησιμοποιώντας τους ενσωματωμένους αισθητήρες του τηλεφώνου σας. \n• Να κρατάτε σημειώσεις και φωτογραφίες για να αρχειοθετείτε τα επιστημονικά σας πειράματα. Έρχονται σύντομα περισσότεροι τύποι σημειώσεων! \n• Να συνδέεστε με εξωτερικούς αισθητήρες χρησιμοποιώντας επιλεγμένες συσκευές Arduino και Vernier με δυνατότητα Bluetooth. \n• Να εξάγετε καταγεγραμμένα δεδομένα αισθητήρα με τη μορφή αρχείων CSV. \n• Να δημιουργείτε αυτοματοποιημένα εναύσματα για καταγραφή δεδομένων και σημειώσεων. \n• Να χρησιμοποιείτε ηχητική αναπαράσταση για να ακούσετε την κίνηση των γραφημάτων σας. \n \nΤο Science Journal διατίθεται δωρεάν για συσκευές Android, iPhone, iPad και συμβατά Chromebook. \n \nΕκπαιδευτικές δραστηριότητες από τους συνεργάτες μας: https://makingscience.withgoogle.com/science-journal/activities \nΓια υποστήριξη: https://productforums.google.com/forum/#!forum/sciencejournal \nΔιατίθεται λογισμικό ανοικτού κώδικα: https://github.com/google/science-journal \n\n Σημείωση αδειών: \n• Τοποθεσία: Απαιτείται για τη σάρωση συσκευών με αισθητήρα Bluetooth. \n• Κάμερα: Απαιτείται για τη λήψη φωτογραφιών για την καταγραφή πειραμάτων. \n• Μικρόφωνο: Απαιτείται για τον αισθητήρα έντασης ήχου. \n• Αποθηκευτικός χώρος: Απαιτείται για την πρόσβαση σε φωτογραφίες από πειράματα." "Σάρωση για αισθητήρες τρίτων" "Αναζητήστε εφαρμογές που υποστηρίζουν το API αισθητήρων τρίτων και επιτρέψτε την προσθήκη αυτών των αισθητήρων σε πειράματα." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml index 8d048273..dd1cd903 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml @@ -265,7 +265,7 @@ "Learn More" "Science Journal" "Experiment on your world." - "New features and improvements: \n• Brand-new interface for taking notes and documenting science experiments. \n• New snapshot feature for capturing individual data points. \n• New sensors: linear accelerometer, magnetometer and compass \n• Redesigned gallery for browsing experiment \n• Now available on iOS devices!" + "New features and improvements: \n• Easier deletion of experiments and notes. \n• Bug fixes" "Science Journal is the free digital science notebook brought to you by Google. \n \nWhether you\'re a science educator or a hobbyist doing science at home, you can keep your notes, photos and observations all in one convenient place. Use the sensors in your phone to measure and graph phenomena such as light, sound and motion, or connect to external sensors via Bluetooth to conduct experiments on the world around you. \n \nWith the Science Journal app, you can: \n• Measure light, sound, acceleration, air pressure and more using your phone\'s built-in sensors. \n• Take notes and photos to document your science experiments. More note types coming soon! \n• Connect to external sensors using select Bluetooth-enabled Arduino and Vernier devices. \n• Export recorded sensor data as CSV files. \n• Create automated triggers for recording data and taking notes. \n• Use sonification to hear the movement of your graphs. \n \nScience Journal is available for free on Android, iPhone, iPad and compatible Chromebook devices. \n \nEducational activities by our partners: https://makingscience.withgoogle.com/science-journal/activities \nFor support: https://productforums.google.com/forum/#!forum/sciencejournal \nOpen-source code available: https://github.com/google/science-journal \n\n Permissions notice: \n• Location: Needed to scan for Bluetooth sensor devices. \n• Camera: Needed to take pictures to document experiments. \n• Microphone: Needed for sound intensity sensor. \n• Storage: Needed to access photos to insert into experiments." "Scan for third-party sensors" "Look for apps that support the third-party sensor API and enable adding those sensors to experiments." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml index 8d048273..dd1cd903 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml @@ -265,7 +265,7 @@ "Learn More" "Science Journal" "Experiment on your world." - "New features and improvements: \n• Brand-new interface for taking notes and documenting science experiments. \n• New snapshot feature for capturing individual data points. \n• New sensors: linear accelerometer, magnetometer and compass \n• Redesigned gallery for browsing experiment \n• Now available on iOS devices!" + "New features and improvements: \n• Easier deletion of experiments and notes. \n• Bug fixes" "Science Journal is the free digital science notebook brought to you by Google. \n \nWhether you\'re a science educator or a hobbyist doing science at home, you can keep your notes, photos and observations all in one convenient place. Use the sensors in your phone to measure and graph phenomena such as light, sound and motion, or connect to external sensors via Bluetooth to conduct experiments on the world around you. \n \nWith the Science Journal app, you can: \n• Measure light, sound, acceleration, air pressure and more using your phone\'s built-in sensors. \n• Take notes and photos to document your science experiments. More note types coming soon! \n• Connect to external sensors using select Bluetooth-enabled Arduino and Vernier devices. \n• Export recorded sensor data as CSV files. \n• Create automated triggers for recording data and taking notes. \n• Use sonification to hear the movement of your graphs. \n \nScience Journal is available for free on Android, iPhone, iPad and compatible Chromebook devices. \n \nEducational activities by our partners: https://makingscience.withgoogle.com/science-journal/activities \nFor support: https://productforums.google.com/forum/#!forum/sciencejournal \nOpen-source code available: https://github.com/google/science-journal \n\n Permissions notice: \n• Location: Needed to scan for Bluetooth sensor devices. \n• Camera: Needed to take pictures to document experiments. \n• Microphone: Needed for sound intensity sensor. \n• Storage: Needed to access photos to insert into experiments." "Scan for third-party sensors" "Look for apps that support the third-party sensor API and enable adding those sensors to experiments." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml index 8d048273..dd1cd903 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml @@ -265,7 +265,7 @@ "Learn More" "Science Journal" "Experiment on your world." - "New features and improvements: \n• Brand-new interface for taking notes and documenting science experiments. \n• New snapshot feature for capturing individual data points. \n• New sensors: linear accelerometer, magnetometer and compass \n• Redesigned gallery for browsing experiment \n• Now available on iOS devices!" + "New features and improvements: \n• Easier deletion of experiments and notes. \n• Bug fixes" "Science Journal is the free digital science notebook brought to you by Google. \n \nWhether you\'re a science educator or a hobbyist doing science at home, you can keep your notes, photos and observations all in one convenient place. Use the sensors in your phone to measure and graph phenomena such as light, sound and motion, or connect to external sensors via Bluetooth to conduct experiments on the world around you. \n \nWith the Science Journal app, you can: \n• Measure light, sound, acceleration, air pressure and more using your phone\'s built-in sensors. \n• Take notes and photos to document your science experiments. More note types coming soon! \n• Connect to external sensors using select Bluetooth-enabled Arduino and Vernier devices. \n• Export recorded sensor data as CSV files. \n• Create automated triggers for recording data and taking notes. \n• Use sonification to hear the movement of your graphs. \n \nScience Journal is available for free on Android, iPhone, iPad and compatible Chromebook devices. \n \nEducational activities by our partners: https://makingscience.withgoogle.com/science-journal/activities \nFor support: https://productforums.google.com/forum/#!forum/sciencejournal \nOpen-source code available: https://github.com/google/science-journal \n\n Permissions notice: \n• Location: Needed to scan for Bluetooth sensor devices. \n• Camera: Needed to take pictures to document experiments. \n• Microphone: Needed for sound intensity sensor. \n• Storage: Needed to access photos to insert into experiments." "Scan for third-party sensors" "Look for apps that support the third-party sensor API and enable adding those sensors to experiments." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml index eb3077fa..f17004b0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml @@ -265,7 +265,7 @@ "Más información" "Science Journal" "Experimenta en tu mundo." - "Funciones nuevas y mejoras: \n• Una interfaz nueva para tomar notas y documentar experimentos científicos. \n• La nueva función de instantáneas permite capturar puntos de datos específicos. \n• Sensores nuevos: acelerómetro lineal, magnetómetro y brújula. \n• Se rediseñó la galería de exploración de experimentos. \n• Ahora, la app está disponible en dispositivos iOS." + "Nuevas funciones y mejoras: \n• Ahora es más fácil borrar experimentos y notas. \n• Se corrigieron errores." "Science Journal es el cuaderno digital de ciencias que te ofrece Google. \n \nCon él, podrás guardar tus notas, fotos y observaciones en un solo lugar, independientemente de si eres profesor de ciencias o un aficionado a los experimentos caseros. Usa los sensores de tu teléfono para medir y crear gráficos de fenómenos como la luz, el sonido y el movimiento, o conéctate a sensores externos mediante Bluetooth para realizar experimentos en el mundo que te rodea. \n \nCon la app de Science Journal, puedes hacer lo siguiente:\n• Usar los sensores incorporados de tu teléfono para medir la luz, el sonido, la aceleración, la presión del aire y mucho más. \n• Tomar notas y capturar fotos para documentar tus experimentos científicos. Pronto tendremos nuevos tipos de notas disponibles. \n• Conectarte a sensores externos mediante ciertos dispositivos Arduino y Vernier compatibles con Bluetooth. \n• Exportar los datos que registraron los sensores en archivos CSV. \n• Crear activadores automáticos para registrar datos y tomar notas. \n• Usar la sonificación para escuchar los movimientos de tus gráficos. \n \nScience Journal está disponible sin costo para Android, iPhone, iPad y dispositivos Chromebook compatibles. \n \nActividades educativas de nuestros socios: https://makingscience.withgoogle.com/science-journal/activities. \nPara obtener asistencia, visita https://productforums.google.com/forum/#!forum/sciencejournal \nEl código fuente abierto está disponible en https://github.com/google/science-journal \n\n Aviso de permisos: \n• Ubicación: Se necesita para buscar dispositivos Bluetooth con sensores. \n• Cámara: Se necesita para tomar fotos y documentar experimentos. \n• Micrófono: Se necesita para usar el sensor de intensidad del sonido. \n• Almacenamiento: Se necesita para acceder a las fotos y agregarlas a los experimentos." "Buscar sensores de terceros" "Busca apps compatibles con la API de los sensores externos y habilítalos para agregarlos a los experimentos." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml index 2fc242f0..edc58ccd 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml @@ -265,7 +265,7 @@ "Más información" "Science Journal" "Experimenta con tu entorno." - "Novedades y mejoras: \n• Nueva interfaz para tomar notas y documentar los experimentos científicos. \n• Nueva función de captura para registrar puntos de datos concretos. \n• Nuevos sensores: acelerómetro lineal, magnetómetro y brújula. \n• Galería con un nuevo diseño para explorar experimentos. \n• Ya está disponible para los dispositivos iOS." + "Novedades y mejoras: \n• Ahora es más sencillo eliminar experimentos y notas. \n• Hemos corregido varios errores." "Google te ofrece Science Journal, un cuaderno científico digital gratuito. \n \nSi te dedicas a enseñar ciencia o te gusta hacer experimentos en casa, puedes guardar tus notas, fotos y observaciones en un lugar muy práctico. Usa los sensores de tu teléfono para medir y hacer gráficos de fenómenos como la luz, el sonido o el movimiento. También puedes conectarte a sensores externos a través de Bluetooth para llevar a cabo experimentos con el mundo que te rodea. \n \nCon la aplicación Science Journal, puedes hacer lo siguiente: \n• Usar los sensores integrados en tu teléfono para medir la luz, el sonido, la aceleración, la presión atmosférica y mucho más. \n• Tomar notas y fotos para documentar tus experimentos científicos. Muy pronto añadiremos más tipos de notas. \n• Conectarte a sensores externos mediante los exclusivos dispositivos Arduino y Vernier con Bluetooth. \n• Exportar como archivos CSV los datos registrados de los sensores. \n• Crear activadores automáticos para registrar datos y tomar notas. \n• Oír el movimiento de tus gráficos con la sonificación. \n \nScience Journal está disponible de forma gratuita para Android, iPhone, iPad y para los dispositivos Chromebook compatibles. \n \nActividades educativas de nuestros colaboradores: https://makingscience.withgoogle.com/science-journal/activities \nPara obtener asistencia, visita: https://productforums.google.com/forum/#!forum/sciencejournal \nCódigo abierto disponible: https://github.com/google/science-journal \n\n Aviso relacionado con los permisos: \n• Ubicación: necesaria para buscar sensores mediante Bluetooth. \n• Cámara: necesaria para sacar fotos con las que documentar los experimentos. \n• Micrófono: necesario para medir la intensidad del sonido. \n• Almacenamiento: necesario para acceder a las fotos e insertarlas en los experimentos." "Buscar sensores de terceros" "Busca aplicaciones que sean compatibles con la API del sensor de terceros y permite que se añadan dichos sensores a los experimentos." @@ -299,7 +299,7 @@ "Crear una nota" "Crear alertas" "Se detecten" - "Detecte menos de" + "Baje de" "Detecte más de" "Detecte menos de" "Detecte más de" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml index 0f874300..aa789fb7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml @@ -265,7 +265,7 @@ "Lisätietoja" "Science Journal" "Tutki ympäröivää maailmaa." - "Uusia ominaisuuksia ja parannuksia: \n• uusi käyttöjärjestelmä muistiinpanojen kirjaamiseen ja kokeiden dokumentointiin \n• uusi ominaisuus yksittäisten tietojen tallennukseen \n• uusia antureita: lineaarinen kiihtyvyysmittari, magnetometri ja kompassi \n• uudistettu galleria kokeiden selaukseen \n• saatavana myös iOS-laitteille." + "Uusia ominaisuuksia ja parannuksia: \n• Kokeet ja muistiinpanot on helpompi poistaa. \n• Bugeja on korjattu." "Science Journal on Googlen tarjoama ilmainen digitaalinen tutkimusapulainen. \n \nVoit tallentaa muistiinpanot, kuvat ja havainnot yhteen kätevään paikkaan niin opetus- kuin harrastuskäytössä. Voit mitata esimerkiksi valoa, ääntä ja liikettä puhelimesi antureilla ja esittää tulokset kaaviomuodossa. Voit myös liittää puhelimeen ulkoisia antureita Bluetooth-yhteydellä ja tutkia maailman ihmeitä. \n \nScience Journal ‑sovelluksen avulla voit \n• mitata valoa, ääntä, kiihtyvyyttä, ilmanpainetta ja monia muita ominaisuuksia puhelimen sisäänrakennetuilla antureilla \n• kirjata muistiinpanoja ja ottaa kuvia tutkimuksistasi (lisää muistiinpanotapoja tulossa pian!) \n• liittää puhelimeen ulkoisia antureita tiettyjen Bluetooth-yhteydellä toimivien Arduino and Vernier ‑laitteiden avulla \n• muuntaa tallennettuja anturitietoja CSV-muotoon \n• luoda automaattisia laukaisimia tietojen ja muistiinpanojen tallentamiselle \n• kuunnella kaavioidesi muutoksia sonifikaation avulla. \n \nScience Journalin voi ladata ilmaiseksi Android- ja iPhone-puhelimiin, iPadiin ja yhteensopiviin Chromebook-laitteisiin. \n \nOpetusmateriaalia kumppaneiltamme: https://makingscience.withgoogle.com/science-journal/activities \nTuki: https://productforums.google.com/forum/#!forum/sciencejournal \nAvoin lähdekoodi: https://github.com/google/science-journal \n\n Käyttöoikeusilmoitus: \n• Sijainti: Tarvitaan Bluetooth-laitteiden etsimiseen. \n• Kamera: Tarvitaan kokeiden kuvaamiseen. \n• Mikrofoni: Tarvitaan äänen intensiteetin mittaamiseen. \n• Tallennustila: Tarvitaan kokeisiin lisättävien kuvien käyttöön." "Etsi kolmannen osapuolen antureita" "Etsi sovelluksia, jotka tukevat kolmannen osapuolen anturirajapintaa, ja salli tällaisten antureiden käyttö kokeissa." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml index d5490007..944e4d5e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml @@ -265,7 +265,7 @@ "En savoir plus" "Science Journal" "Testez votre monde." - "Nouvelles fonctionnalités et améliorations : \n• Toute nouvelle interface pour la prise de notes et la collecte de données lors d\'expériences scientifiques \n• Nouvelle fonctionnalité Instantané pour capturer des points de données individuels \n• Nouveaux capteurs : accéléromètre linéaire, magnétomètre et boussole \n• Galerie repensée pour parcourir les expériences \n• Désormais disponible sur les appareils iOS" + "Nouvelles fonctionnalités et améliorations : \n• Suppression simplifiée des tests et des notes. \n• Correction de bugs" "Science Journal est un carnet scientifique numérique gratuit proposé par Google. \n \nQue vous soyez un professeur de science ou un amateur réalisant des expériences à la maison, cette application vous permet de conserver vos notes, photos et observations au même endroit. Utilisez les capteurs de votre téléphone pour mesurer et reproduire, sur des graphiques, des phénomènes comme la lumière, le son et le mouvement. Vous pouvez également connecter des capteurs externes via Bluetooth pour mener des expériences sur le monde qui vous entoure. \n \nVoici ce que l\'application Science Journal vous permet de faire : \n• Mesurer la lumière, le son, l\'accélération, la pression de l\'air et plus encore grâce aux capteurs intégrés de votre téléphone. \n• Prendre des notes et des photos pour décrire vos expériences scientifiques. De nouveaux types de notes seront bientôt disponibles ! \n• Connecter des capteurs externes à l\'aide des appareils Arduino et Vernier compatibles Bluetooth. \n• Exporter les données récoltées par les capteurs dans des fichiers .csv. \n• Créer des déclencheurs automatiques pour l\'enregistrement de données et la prise de notes. \n• Utiliser la sonification pour écouter les données de vos graphiques. \n \nScience Journal est disponible gratuitement sur les appareils Android, iPhone, et iPad, ainsi que sur les Chromebooks compatibles. \n \nActivités pédagogiques proposées par nos partenaires : https://makingscience.withgoogle.com/science-journal/activities \nAssistance : https://productforums.google.com/forum/#!forum/sciencejournal \nCode Open Source disponible : https://github.com/google/science-journal \n\n Avis relatif aux autorisations : \n• Position : autorisation requise pour rechercher des appareils dotés de capteurs Bluetooth. \n• Appareil photo : autorisation requise pour illustrer les expériences à l\'aide de photos. \n• Micro : autorisation requise pour le capteur d\'intensité sonore. \n• Stockage : autorisation requise pour stocker les photos prises afin d\'illustrer les expériences." "Rechercher des capteurs tiers" "Cherchez des applications compatibles avec l\'API du capteur tiers, et activez l\'ajout de ces capteurs aux expériences." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml index ce292989..8d61f905 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml @@ -265,7 +265,7 @@ "अधिक जानें" "विज्ञान शोध पत्रिका" "आपकी दुनिया पर प्रयोग." - "नई सुविधाएं और सुधार: \n• नोट लेने और विज्ञान प्रयोगों के दस्तावेज़ीकरण के लिए बिलकुल नया इंटरफ़ेस आया है. \n• डेटा अंक कैप्चर करने के लिए नई स्नैपशॉट सुविधा. \n• नए सेंसर: लीनियर एक्सलरोमीटर, मैग्नेटोमीटर और कम्पास \n• ब्राउज़िंग प्रयोगों के लिए नई डिज़ाइन वाली गैलरी \n• अब iOS डिवाइस पर भी उपलब्ध है!" + "नई सुविधाएं और सुधार: \n• अब आप प्रयोगों और नोट को आसानी से मिटा सकते हैं. \n• गड़बड़ी ठीक की गई है" "Google की ओर से जारी विज्ञान शोध पत्रिका एक डिजिटल विज्ञान नोटबुक है. \n \nचाहे आप विज्ञान के शिक्षक हों या घर पर शौकिया तौर पर विज्ञान के प्रयोग आज़मा रहे हों, आप अपने नोट, फ़ोटो और निरीक्षण इन सभी चीज़ों को एक सुलभ स्थान में रख सकते हैं. अपने फ़ोन के सेंसर का उपयोग करके रोशनी, ध्वनि और गति का मापन करें और ग्राफ़ देखें या अपने आस-पास की चीज़ों पर प्रयोग करने के लिए अपने फ़ोन के ब्लूटूथ के ज़रिए बाहरी सेंसर से कनेक्ट करें. \n \nविज्ञान शोध पत्रिका ऐप से आप ये चीज़ें कर सकते हैं: \n• आप अपने फ़ोन के आतंरिक सेंसर से प्रकाश, ध्वनि, गुरुत्वाकर्षण बल, वायु दबाव के अलावा और भी कई चीज़ों का मापन कर सकते हैं. \n• अपने विज्ञान प्रयोगों का दस्तावेज़ीकरण करने के लिए नोट और फ़ोटो लें. नोट के कई और प्रकार जल्द आने वाले हैं! \n• Arduino और Vernier जैसी चुनिंदा ब्लूटूथ-सक्षम डिवाइस के ज़रिए बाहरी सेंसर से कनेक्ट करें. \n• रिकॉर्ड किए गए सेंसर डेटा को CSV फ़ाइल के रूप में निर्यात करें. \n• डेटा रिकॉर्ड करने के लिए ऑटोमेटिक ट्रिगर और नोट्स बनाएं. \n• अपने ग्राफ़ की गतिविधि सुनने के लिए सोनिफ़िकेशन का उपयोग करें. \n \nविज्ञान शोध पत्रिका Android, iPhone, iPad और Chromebook संगत डिवाइस पर मुफ़्त में उपलब्ध है. \n \nहमारे साथियों की शैक्षिक गतिविधियां: https://makingscience.withgoogle.com/science-journal/activities \nसहायता के लिए यहां संपर्क करें: https://productforums.google.com/forum/#!forum/sciencejournal \nओपन सोर्स कोड उपलब्ध है: https://github.com/google/science-journal \n\n अनुमतियों की सूचना: \n• स्थान: ब्लूटूथ सेंसर डिवाइस स्कैन करने के लिए ज़रूरी है. \n• कैमरा: प्रयोगों की तस्वीरें लेने के लिए ज़रूरी है. \n• माइक्रोफ़ोन: ध्वनि तीव्रता सेंसर के लिए ज़रूरी है. \n• मेमोरी: प्रयोगों में शामिल करने के लिए फ़ोटो पर एक्सेस करने के लिए ज़रूरी है." "तृतीय-पक्ष सेंसर के लिए स्कैन करें" "ऐसे ऐप्लिकेशन खोजें जो तृतीय-पक्ष सेंसर API का समर्थन करते हैं और उन सेंसर को प्रयोगों में शामिल करना सक्षम करें." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml index b244a979..25ad1265 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml @@ -265,7 +265,7 @@ "Saznajte više" "Science Journal" "Eksperimentirajte sa svijetom oko sebe." - "Nove značajke i poboljšanja: \n• potpuno novo sučelje za pisanje bilješki i dokumentiranje znanstvenih eksperimenata \n• nova značajka snimki za snimanje pojedinačnih podatkovnih točaka \n• novi senzori: linearni akcelerometar, magnetometar i kompas \n• novi dizajn galerije za pregledavanje eksperimenata \n• dostupnost na iOS uređajima" + "Nove značajke i poboljšanja: \n• lakše brisanje eksperimenata i bilješki \n• ispravci programskih pogrešaka" "Science Journal besplatan je digitalni znanstveni dnevnik iz Googlea. \n \nBez obzira prenosite li znanstvena znanja drugima ili je znanost vaš hobi, sve svoje bilješke, fotografije i opažanja možete čuvati na jednom praktičnom mjestu. Pomoću senzora u telefonu možete mjeriti pojave kao što su svjetlost, zvuk i kretanje, prikazivati ih u obliku grafikona te se putem Bluetooth veze povezivati s vanjskim senzorima i eksperimentirati sa svijetom oko sebe. \n \nUz aplikaciju Science Journal: \n• Mjerite svjetlost, zvuk, ubrzanje, tlak zraka i druge vrijednosti pomoću senzora ugrađenih u telefon. \n• Pišite bilješke i snimajte fotografije da biste dokumentirali svoje znanstvene eksperimente. Uskoro stižu nove vrste bilježaka! \n• Povezujte se s vanjskim senzorima pomoću odabranih Arduino i Vernier uređaja koji podržavaju Bluetooth. \n• Izvozite snimljene podatke sa senzora u obliku CSV datoteka. \n• Izrađujte automatizirane okidače za snimanje podataka i zapisivanje bilješki. \n• Upotrebljavajte sonifikaciju da biste čuli kretanje svojih grafikona. \n \nAplikacija Science Journal besplatna je i dostupna na Android, iPhone, iPad i kompatibilnim Chromebook uređajima. \n \nObrazovne aktivnosti naših partnera: https://makingscience.withgoogle.com/science-journal/activities \nPodrška: https://productforums.google.com/forum/#!forum/sciencejournal \nDostupan softver otvorenog izvornog koda: https://github.com/google/science-journal \n\n Obavijest o dopuštenjima: \n• Lokacija: potrebno za traženje Bluetooth senzorskih uređaja. \n• Fotoaparat: potrebno za snimanje fotografija i dokumentiranje eksperimenata. \n• Mikrofon: potrebno za senzor jakosti zvuka. \n• Pohrana: potrebno za pristupanje fotografijama radi njihova umetanja u eksperimente." "Potražite senzore treće strane" "Potražite aplikacije koje podržavaju API senzora treće strane i omogućite upotrebu tih senzora prilikom provođenja eksperimenata." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml index ddb2ca14..c5931f08 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml @@ -265,7 +265,7 @@ "További információ" "Science Journal" "Tárd fel a környező világot." - "Új funkciók és fejlesztések: \n• Vadonatúj kezelőfelület a jegyzetek készítéséhez és a tudományos kísérletek dokumentálásához. \n• Új „pillanatkép” funkció, amely lehetővé teszi egyedi adatpontok felvételét. \n• Új érzékelők: lineáris gyorsulásmérő, magnetométer és iránytű \n• Újratervezett galéria a kísérletek tallózásához \n• Mostantól elérhető iOS eszközökön!" + "Új funkciók és fejlesztések: \n• A kísérletek és jegyzetek könnyebben törölhetők. \n• Programhiba-javítások" "A Science Journal alkalmazás a Google által kifejlesztett, ingyenes, digitális tudományos jegyzetfüzet. \n \nAkár a tudományok oktatója vagy, akár csak hobbiból végzel tudományos tevékenységet otthon, az alkalmazás segítségével összes jegyzetedet, fotódat és megfigyelésedet egyetlen helyen, kényelmesen tárolhatod. Telefonod érzékelőinek segítségével megmérheted és diagramon ábrázolhatod az olyan jelenségeket, mint a fény, a hangok és a mozgás, illetve Bluetooth-kapcsolat révén külső érzékelőkhöz csatlakozhatsz, és kísérleteket végezhetsz a téged körülvevő világgal. \n \nA Science Journal alkalmazással a következőkre nyílik lehetőséged: \n• A telefonodba épített érzékelők segítségével megmérheted a fényt, a hangokat, a gyorsulást, a légnyomást stb. \n• Tudományos kísérleteid dokumentálása céljából jegyzeteket és fotókat készíthetsz. Hamarosan újfajta jegyzetek is elérhetők lesznek! \n• Egyes Bluetooth-képes Arduino és Vernier eszközök használatával külső érzékelőkhöz csatlakozhatsz. \n• Az érzékelők által rögzített adatokat CSV-fájlként exportálhatod. \n• Létrehozhatsz automatikus aktiválókat az adatok rögzítéséhez és jegyzetek készítéséhez. \n• Szonifikáció segítségével hallhatod diagramjaid mozgását. \n \nA Science Journal alkalmazás ingyenesen elérhető Android, iPhone, iPad és kompatibilis Chromebook eszközökön. \n \nPartnereink oktató jellegű tevékenységei: https://makingscience.withgoogle.com/science-journal/activities \nÜgyfélszolgálati támogatás: https://productforums.google.com/forum/#!forum/sciencejournal \nA nyílt forráskód itt érhető el: https://github.com/google/science-journal \n\n Szükséges engedélyek: \n• Hely: a Bluetooth-érzékelővel rendelkező eszközök kereséséhez szükséges. \n• Kamera: a kísérletek dokumentálására szolgáló fényképek elkészítéséhez szükséges. \n• Mikrofon: a hangintenzitás-érzékelőhöz szükséges. \n• Tárhely: a kísérletekbe beilleszteni kívánt fotókhoz való hozzáféréshez szükséges." "Harmadik fél érzékelőinek keresése" "Harmadik fél érzékelő API-ját támogató alkalmazások keresése, és az érzékelők kísérletekhez adásának aktiválása." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml index 5bf5a339..0fe88914 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml @@ -265,7 +265,7 @@ "Pelajari Lebih Lanjut" "Jurnal Sains" "Eksperimen di sekitar Anda." - "Fitur dan peningkatan baru: \n• Antarmuka baru untuk mencatat dan mendokumentasikan eksperimen sains. \n• Fitur snapshot baru untuk merekam titik-titik data individual. \n• Sensor baru: akselerometer linear, magnetometer, dan kompas \n• Galeri yang dirancang ulang untuk mengakses berbagai eksperimen \n• Kini tersedia di perangkat iOS!" + "Fitur baru dan peningkatan: \n• Lebih mudah menghapus eksperimen dan catatan. \n• Perbaikan bug" "Jurnal Sains adalah buku catatan sains digital gratis dari Google. \n \nBaik sebagai pengajar sains maupun sekadar penikmat sains di rumah, Anda bisa menyimpan catatan, foto, dan hasil pengamatan di 1 tempat yang mudah diakses. Gunakan sensor di ponsel Anda untuk mengukur dan membuat grafik dari berbagai fenomena seperti cahaya, bunyi, dan gerakan, atau hubungkan ke sensor eksternal melalui bluetooth untuk mengadakan eksperimen tentang dunia di sekitar Anda. \n \nDengan aplikasi Jurnal Sains, Anda dapat: \n• Mengukur cahaya, suara, akselerasi, tekanan udara, dan sebagainya menggunakan sensor built-in ponsel. \n• Membuat catatan dan mengambil foto untuk mendokumentasikan eksperimen sains Anda. Jenis catatan lainnya akan segera tersedia! \n• Membuat koneksi ke sensor eksternal menggunakan perangkat Arduino dan Vernier tertentu yang memiliki kapabilitas bluetooth. \n• Mengekspor rekaman data sensor sebagai file CSV. \n• Membuat pemicu otomatis untuk merekam data dan membuat catatan. \n• Menggunakan sonification untuk mendengarkan gerakan grafik Anda. \n \nJurnal Sains tersedia gratis di perangkat Android, iPhone, iPad, dan perangkat Chromebook yang kompatibel. \n \nAktivitas edukatif dari para partner kami: https://makingscience.withgoogle.com/science-journal/activities \nUntuk mendapatkan dukungan: https://productforums.google.com/forum/#!forum/sciencejournal \nKode open source tersedia di: https://github.com/google/science-journal \n\n Pemberitahuan izin: \n• Lokasi: diperlukan untuk mendeteksi perangkat yang memiliki sensor bluetooth. \n• Kamera: diperlukan untuk mengambil gambar guna mendokumentasikan eksperimen. \n• Mikrofon: diperlukan untuk sensor intensitas suara. \n• Penyimpanan: diperlukan untuk mengakses foto yang akan dimasukkan ke dalam eksperimen." "Pindai sensor pihak ketiga" "Cari aplikasi yang mendukung sensor API pihak ketiga dan sebisa mungkin gunakan sensor tersebut dalam eksperimen." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml index d827a288..cdcb8088 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml @@ -265,7 +265,7 @@ "Ulteriori informazioni" "Science Journal" "Sperimenta nel tuo ambiente." - "Nuove funzioni e miglioramenti: \n• Nuova interfaccia per prendere appunti e documentare gli esperimenti scientifici. \n• Nuova funzione di istantanea per acquisire singoli punti di dati. \n• Nuovi sensori: accelerometro lineare, magnetometro e bussola. \n• Galleria riprogettata per sfogliare gli esperimenti. \n• Ora disponibile su dispositivi iOS." + "Nuove funzionalità e nuovi miglioramenti: \n• Eliminazione più semplice di esperimenti e note. \n• Correzioni di bug" "Science Journal è il quaderno scientifico digitale gratuito offerto da Google. \n \nChe tu sia un insegnante di scienze o un appassionato che coltiva la sua passione per la scienza a casa, potrai conservare appunti, foto e osservazioni in un unico posto facilmente consultabile. Puoi utilizzare i sensori del tuo telefono per misurare e raffigurare graficamente fenomeni come luce, suono e movimento oppure collegare il dispositivo a sensori esterni tramite Bluetooth per condurre esperimenti nell\'ambiente che ti circonda. \n \nL\'app Science Journal ti permette di: \n• Misurare la luce, il suono, l\'accelerazione, la pressione dell\'aria e molto altro tramite i sensori integrati del telefono. \n• Prendere appunti e scattare foto per documentare i tuoi esperimenti scientifici. A breve saranno disponibili altri tipi di note. \n• Collegare il dispositivo a sensori esterni tramite dispositivi Arduino e Vernier compatibili con Bluetooth. \n• Esportare i dati dei sensori registrati come file CSV. \n• Creare attivatori automatici per registrare i dati e prendere appunti. \n• Utilizzare la sonificazione per percepire il suono del movimento dei grafici. \n \nScience Journal è disponibile gratuitamente su Android, iPhone, iPad e sui dispositivi Chromebook compatibili. \n \nAttività didattiche dei nostri partner: https://makingscience.withgoogle.com/science-journal/activities \nPer assistenza: https://productforums.google.com/forum/#!forum/sciencejournal \nCodice open source disponibile: https://github.com/google/science-journal \n\n Notifica di autorizzazione: \n• Posizione: necessaria per rilevare dispositivi con sensore Bluetooth. \n• Fotocamera: necessaria per scattare foto per documentare gli esperimenti. \n• Microfono: necessaria per i sensori di intensità del suono. \n• Spazio di archiviazione: necessaria per accedere alle foto da inserire negli esperimenti." "Cerca sensori di terze parti" "Consente di cercare app che supportano l\'API dei sensori di terze parti permettendo di aggiungerli agli esperimenti." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml index fd3c45a7..74f9a1ed 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml @@ -265,7 +265,7 @@ "למידע נוסף" "מגזין המדע" "ערוך ניסויים בעולם שלך." - "תכונות חדשות ושיפורים: \n• ממשק חדש לרישום הערות ולתיעוד ניסויים מדעיים. \n• תכונה חדשה לתיעוד נקודות נתונים נפרדות. \n• חיישנים חדשים: מד תאוצה לינארית, מגנומטר ומצפן \n• גלריה בעיצוב חדש לעיון בניסויים \n• זמין עכשיו במכשירי iOS." + "תכונות חדשות ושיפורים: \n• מחיקה של ניסויים והערות בקלות רבה יותר. \n• תיקוני באגים" "יומן המדע הוא יומן מדעי דיגיטלי של Google.\n \nאם אתם מורים למדעים או חובבי מדע שעורכים ניסויים בבית, תוכלו לשמור את כל ההערות, התמונות והתצפיות במקום אחד נוח במיוחד. אפשר להשתמש בחיישנים שבטלפון כדי למדוד ולרשום תופעות כמו אור, קול ותנועה. לחלופין, ניתן להתחבר לחיישנים חיצוניים באמצעות Bluetooth כדי לערוך ניסויים בעולם שסביבכם. \n \nבאמצעות אפליקציית יומן המדע ניתן: \n• להשתמש בחיישנים המובנים בטלפון כדי למדוד אור, קול, תאוצה, לחץ אוויר ועוד. \n• לרשום הערות ולצלם תמונות כדי לתעד את הניסויים המדעיים. בקרוב ניתן יהיה לרשום סוגים שונים של הערות. \n• להתחבר לחיישנים חיצוניים באמצעות התקני Arduino ו-Vernier נבחרים שתומכים ב-Bluetooth. \n• לייצא נתוני חיישנים שתועדו כקובצי CSV. \n• ליצור גורמים מפעילים אוטומטיים לתיעוד נתונים ולרישום הערות. \n• להשתמש בהמרה לצליל כדי להאזין לתנועה של התרשימים. \n \nיומן המדע זמין בחינם במכשירי Android‏, iPhone‏, iPad ובמכשירי Chromebook תואמים. \n \nלעיון בפעילויות חינוכיות של השותפים שלנו, אפשר לבקר כאן: https://makingscience.withgoogle.com/science-journal/activities \nמשהו לא עובד? לתמיכה, אפשר לבקר כאן: https://productforums.google.com/forum/#!forum/sciencejournal \nקוד פתוח זמין כאן: https://github.com/google/science-journal \n\n למידע על הרשאות, אפשר לבקר כאן: \n• גישה למיקום: נדרשת כדי לאתר בסביבה התקנים עם חיישן Bluetooth. \n• גישה למצלמה: נדרשת כדי לצלם תמונות לתעד את הניסויים \n• גישה למיקרופון: נדרשת לחיישן עוצמת הקול. \n• גישה לאחסון: נדרשת כדי לגשת לתמונות לצורך הכנסתן לניסויים." "חפש חיישנים של צד שלישי" "חפש אפליקציות שתומכות בממשק API של חיישן צד שלישי ומאפשרות להוסיף חיישנים אלה לניסויים." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml index e858475e..9f9bc5c7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml @@ -265,7 +265,7 @@ "詳細" "サイエンス ジャーナル" "身の周りで実験しよう。" - "新機能と改善点: \n• メモの入力と科学実験の記録に新しいインターフェースが導入されました。\n• 各データポイントをキャプチャできるスナップショット機能が新たに加わりました。\n• 新しいセンサー: 直線加速度計、磁力計、コンパス\n• 実験を閲覧するギャラリーのデザインが一新されました。\n• iOS 端末でもご利用いただけるようになりました。" + "新機能と改善点: \n• 実験やメモが簡単に削除できるようにしました。\n• バグを修正しました。" "サイエンス ジャーナルは、Google が提供する無料のデジタル研究ノートです。\n\n科学教育の関係者の方も、科学が趣味という方も、メモや写真、観察記録のすべてを 1 つのアプリに保存できます。スマートフォンのセンサーを利用して、光、音、動きなどを測定してグラフにしたり、Bluetooth 経由で外部センサーと接続して身の回りのさまざまなもので実験したりすることができます。\n\nサイエンス ジャーナル アプリでは、次のことができます。\n• スマートフォンのセンサーを使って光、音、加速度、気圧などを測定できます。\n• メモを入力したり写真を撮ったりして、科学実験を記録することができます。メモの種類は今後も追加される予定です。\n• Bluetooth 対応の Arduino や Vernier の一部の端末を使って、外部センサーに接続できます。\n• 記録したデータを CSV ファイルとしてエクスポートできます。\n• データの記録やメモの入力に自動トリガーを作成できます。\n• ソニフィケーションを使ってグラフの動きを音で聴くことができます。\n \nサイエンス ジャーナルは Android、iPhone、iPad、および互換性のある Chromebook 端末に無料でダウンロードできます。\n \nパートナーによる教育アクティビティ: https://makingscience.withgoogle.com/science-journal/activities \nサポート: https://productforums.google.com/forum/#!forum/sciencejournal \nオープンソース コード: https://github.com/google/science-journal \n\n 権限に関する注意事項: \n• 位置情報: Bluetooth センサー端末をスキャンするために必要です。\n• カメラ: 実験の記録として写真を撮るために必要です。\n• マイク: 音響センサーに必要です。\n• ストレージ: 実験の記録に写真を挿入する場合の写真へのアクセスに必要です。" "サードパーティ製センサーのスキャン" "サードパーティのセンサー API をサポートするアプリを探して、そのセンサーを実験に追加できるようにします。" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml index 69da965c..4f72c4d9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml @@ -265,7 +265,7 @@ "자세히 알아보기" "과학 저널" "실험의 세상이 열립니다." - "새로운 기능 및 개선사항: \n• 메모 및 과학 실험 기록과 관련된 인터페이스 개편 \n• 개별 데이터 요소를 포착하는 새로운 스냅샷 기능 \n• 신규 센서: 선형 가속도계, 자기계, 나침반 \n• 실험 탐색 갤러리 개편 \n• iOS 기기 지원" + "새로운 기능 및 개선사항: \n• 더 간편해진 실험 및 메모 삭제 \n• 버그 수정" "과학 저널은 Google이 제공하는 무료 디지털 과학 노트입니다. \n \n과학 교사 또는 집에서 과학을 취미로 하는 여러분들이 메모, 사진, 관찰 자료를 한 곳에서 편리하게 관리할 수 있는 도구입니다. 휴대전화의 센서로 빛, 소리, 움직임 등의 현상을 측정하여 그래프화하거나 블루투스를 통해 외부 센서에 연결하여 자유롭게 실험해 보세요. \n \n과학 저널 앱의 기능은 다음과 같습니다. \n• 휴대전화에 내장된 센서를 사용하여 빛, 소리, 가속도, 기압 등을 측정합니다. \n• 메모와 사진으로 과학 실험을 기록합니다. 더 많은 메모 유형이 곧 제공됩니다. \n• 블루투스를 지원하는 Arduino 및 Vernier 기기를 통해 외부 센서에 연결합니다. \n• 기록된 센서 데이터를 CSV 파일로 내보냅니다. \n• 데이터를 기록하고 메모를 기재하는 자동 트리거를 만듭니다. \n• 청각화 기능으로 그래프의 움직임을 소리로 듣습니다. \n \n과학 저널은 Android, iPhone, iPad, 호환되는 Chromebook 기기에서 무료로 제공됩니다. \n \n파트너 제공 교육 활동: https://makingscience.withgoogle.com/science-journal/activities \n지원: https://productforums.google.com/forum/#!forum/sciencejournal \n오픈소스 코드: https://github.com/google/science-journal \n\n 필수 접근권한 안내: \n• 위치: 블루투스 센서 기기를 검색하는 데 필요합니다. \n• 카메라: 실험을 기록할 목적으로 사진을 찍는 데 필요합니다. \n• 마이크: 소리 세기 센서에 필요합니다. \n• 저장용량: 실험에 삽입할 사진에 액세스하는 데 필요합니다." "타사 센서 검색" "타사 센서 API를 지원하는 앱을 찾아 센서로 실험할 수 있도록 설정하세요." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml index b8737d82..08e39dce 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml @@ -265,7 +265,7 @@ "Sužinokite daugiau" "Science Journal" "Eksperimentuokite su pasauliu." - "Toliau nurodytos naujos funkcijos ir patobulinimai. \n• Visiškai nauja sąsaja, skirta užrašams išsaugoti ir moksliniams eksperimentams dokumentuoti. \n• Nauja ekrano kopijų išsaugojimo funkcija, skirta atskiriems duomenų taškams fiksuoti. \n• Nauji jutikliai: linijinis akcelerometras, magnetometras ir kompasas. \n• Iš naujo sukurta galerija, skirta eksperimentams naršyti. \n• Dabar pasiekiama „iOS“ įrenginiuose!" + "Toliau nurodytos naujos funkcijos ir patobulinimai. \n• Paprastesnis eksperimentų ir pastabų ištrynimas. \n• Riktų pataisymai" "„Science Journal“ yra „Google“ sukurta nemokama skaitmeninė mokslo užrašinė. \n \nNesvarbu, kas esate – mokslo pedagogas ar mėgėjas, užsiimantis moksline veikla namuose, – galite išsaugoti užrašus, nuotraukas ir stebėjimus vienoje patogioje vietoje. Naudodami telefono jutiklius matuokite ir grafiškai atvaizduokite reiškinius, pvz., šviesą, garsą ir judėjimą, arba prisijunkite prie išorinių jutiklių „Bluetooth“ ryšiu, kad atliktumėte eksperimentus jus supančiame pasaulyje. \n \nNaudodamiesi „Science Journal“ programa galite atlikti toliau išvardytus veiksmus. \nNaudodami telefono įtaisytuosius jutiklius išmatuoti šviesą, garsą, pagreitį, oro slėgį ir daugiau. \n• Išsaugoti užrašus ir nuotraukas, kad dokumentuotumėte mokslinius eksperimentus. Greitai bus pristatyta daugiau užrašų tipų! \n• Prisijungti prie išorinių jutiklių, naudodami „Arduino“ ir „Vernier“ įrenginius, kuriuose įgalintas „Bluetooth“ ryšys. \n• Eksportuoti įrašytus jutiklių duomenis kaip CSV failus. \n• Sukurti automatinius duomenų įrašymo ir užrašų išsaugojimo suaktyvinimo veiksmus. \n• Naudodami sonifikaciją įgarsinti diagramų judėjimą. \n \nGalimos nemokamos „Science Journal“ versijos „Android“, „iPhone“, „iPad“ ir suderinamiems „Chromebook“ įrenginiams. \n \nMūsų partnerių šviečiamoji veikla: https://makingscience.withgoogle.com/science-journal/activities \nPalaikymas: https://productforums.google.com/forum/#!forum/sciencejournal \nAtvirojo šaltinio kodas pasiekiamas adresu https://github.com/google/science-journal \n\nToliau pateiktas pranešimas apie leidimus. \n• Vietovė: reikalinga, kad būtų galima nuskaityti „Bluetooth“ jutiklių įrenginius. \n• Fotoaparatas: reikalinga, kad būtų galima fotografuoti, siekiant dokumentuoti eksperimentus. \n• Mikrofonas: reikalinga dėl garso stiprumo jutiklio. \n• Saugykla: reikalinga, kad būtų galima pasiekti į eksperimentus įterpiamas nuotraukas." "Ieškoti trečiosios šalies jutiklių" "Ieškokite programų, kurios palaiko trečiosios šalies jutiklių API ir leidžia šiuos jutiklius pridėti prie eksperimentų." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml index c3816ebf..2f4d4726 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml @@ -265,7 +265,7 @@ "Uzzināt vairāk" "Science Journal" "Eksperimentējiet ar pasauli." - "Jaunas funkcijas un uzlabojumi. \n• Jauna saskarne piezīmju veikšanai un zinātnisku eksperimentu dokumentēšanai. \n• Jauna momentuzņēmumu funkcija atsevišķu datu punktu tveršanai. \n• Jauni sensori: lineārais akselerometrs, magnetometrs un kompass. \n• Uzlabota galerija eksperimentu pārlūkošanai. \n• Tagad lietotne pieejama iOS ierīcēs." + "Jaunas funkcijas un uzlabojumi. \n• Ērtāka eksperimentu un piezīmju dzēšana. \n• Kļūdu labojumi" "Lietotne Science Journal ir bezmaksas digitālais zinātnisko darbu bloknots, ko piedāvā Google. \n \nNeatkarīgi no tā, vai esat dabaszinātņu skolotājs vai veicat eksperimentus mājās hobija līmenī, šeit varat vienuviet uzglabāt piezīmes, fotoattēlus un novērojumus. Izmantojiet sava tālruņa sensorus, lai mērītu dažādas parādības, piemēram, gaismu, skaņu un kustību, un veidotu diagrammas, vai pievienojiet ārējos sensorus, izmantojot Bluetooth savienojumu, lai veiktu eksperimentus apkārtējā pasaulē. \n \nAr lietotni Science Journal varat veikt tālāk norādītās darbības. \n• Mērīt gaismu, skaņu, paātrinājumu, gaisa spiedienu un vēl citus lielumus, izmantojot tālrunī iebūvētos sensorus. \n• Veikt piezīmes un uzņemt fotoattēlus, lai dokumentētu savus zinātniskos eksperimentus. Drīzumā būs pieejami jauni piezīmju veidi! \n• Veidot savienojumu ar ārējiem sensoriem, izmantojot atsevišķas Arduino un Vernier ierīces, kurās ir iespējota Bluetooth funkcija. \n• Eksportēt ierakstītos sensoru datus kā CSV failus. \n• Izveidot automatizētus aktivizētājus, lai ierakstītu datus un veiktu piezīmes. \n• Izmantot skaņas signālus, lai dzirdētu, kad diagrammā notiek izmaiņas. \n \nLietotne Science Journal bez maksas ir pieejama šādās ierīcēs: Android, iPhone, iPad, kā arī saderīgās Chromebook ierīcēs. \n \nIzglītojošas aktivitātes no mūsu partneriem: https://makingscience.withgoogle.com/science-journal/activities \nAtbalsts: https://productforums.google.com/forum/#!forum/sciencejournal \nPieejams atvērtais pirmkods: https://github.com/google/science-journal \n\n Paziņojums par atļaujām. \n• Atrašanās vieta: nepieciešama, lai meklētu sensoru ierīces, izmantojot Bluetooth. \n• Kamera: nepieciešama, lai uzņemtu fotoattēlus eksperimentu dokumentēšanai. \n• Mikrofons: nepieciešams skaņas intensitātes sensoram. \n• Krātuve: nepieciešama, lai piekļūtu fotoattēliem, ko pievienot eksperimentiem." "Atrodiet ārējos sensorus" "Atrodiet lietotnes, kas atbalsta ārējo sensoru API un ļauj pievienot šos sensorus eksperimentiem." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml index 0b367429..f4238817 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml @@ -265,7 +265,7 @@ "Finn ut mer" "Science Journal" "Eksperimentér på verden." - "Nye funksjoner og forbedringer: \n• helt nytt grensesnitt for notater og dokumentering av vitenskapelige eksperimenter \n• funksjon for øyeblikksbilder til registrering av separate datapunkter \n• nye sensorer: lineært akselerometer, magnetometer og kompass \n• ny design på galleriet som gjør det enklere å bla gjennom eksperimenter \n• nå tilgjengelig på iOS-enheter" + "Nye funksjoner og forbedringer: \n• enklere sletting av eksperimenter og notater \n• feilrettinger" "Science Journal er en gratis digital vitenskapelig notatblokk fra Google. \n \nNå har du alle notater, bilder og observasjoner på ett og samme sted, enten du er naturfagslærer eller bare liker å eksperimentere hjemme. Bruk sensorene i telefonen din til å måle og lage grafiske fremstillinger av forskjellige fenomener med lys, lyd og bevegelse. Du kan også koble til eksterne sensorer via Bluetooth for å gjøre eksperimenter på verden rundt deg. \n \nMed Science Journal-appen kan du gjøre følgende: \n• Mål lys, lyd, akselerasjon, lufttrykk med mer ved hjelp av de innebygde sensorene i telefonen din. \n• Ta notater og bilder for å dokumentere forsøkene dine. Det kommer snart flere typer notater. \n• Koble til eksterne sensorer med utvalgte Arduino- og Vernier-enheter med Bluetooth. \n• Eksportér registrerte sensordata som CSV-filer. \n• Opprett automatiske utløsere for opptak av data og notatskriving. \n• Bruk sonifikasjon til å høre bevegelsene i diagrammene dine. \n \nScience Journal er gratis for Android, iPhone, iPad og kompatible Chromebook-enheter. \n \nUndervisningsaktiviteter fra partnerne våre: https://makingscience.withgoogle.com/science-journal/activities \nBrukerstøtte: https://productforums.google.com/forum/#!forum/sciencejournal \nÅpen kildekode: https://github.com/google/science-journal \n\n Varsel om tillatelser: \n• Posisjon: nødvendig for å skanne etter sensorenheter med Bluetooth. \n• Kamera: nødvendig for å ta bilder for å dokumentere eksperimenter. \n• Mikrofon: nødvendig for sensoren for lydintensitet. \n• Lagring: nødvendig for å lagre bilder som tas for å dokumentere eksperimenter." "Se etter tredjepartssensorer" "Se etter apper som støtter API-en for tredjepartssensorer, og slå på muligheten for å legge til disse sensorene i eksperimenter." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml index b990b5a8..171ef6c9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml @@ -265,7 +265,7 @@ "Meer informatie" "Science-journal" "Experimenteer met uw wereld." - "Nieuwe functies en verbeteringen: \n• Gloednieuwe interface om notities te maken en wetenschappelijke experimenten te documenteren. \n• Nieuwe momentopnamefunctie om individuele gegevenspunten vast te leggen. \n• Nieuwe sensoren: lineaire versnellingsmeter, magnetometer en kompas. \n• Nieuw galerijontwerp om door experimenten te browsen. \n• Nu beschikbaar voor iOS-apparaten." + "Nieuwe functies en verbeteringen: \n• Experimenten en notities makkelijker verwijderen \n• Bugfixes" "Science Journal is het gratis digitale wetenschappelijke logboek van Google. \n \nBewaar al je notities, foto\'s en waarnemingen op één handige plek, of je nu wetenschapsdocent bent of gewoon graag proefjes doet thuis. Gebruik de sensoren in je telefoon om verschijnselen zoals licht, geluid en beweging te meten en grafisch weer te geven, of maak verbinding met externe sensoren via Bluetooth om experimenten uit te voeren en de wereld om je heen beter te begrijpen. \n \nMet de Science Journal-app kun je: \n• licht, geluid, versnelling, luchtdruk en meer meten met de ingebouwde sensoren van je telefoon, \n• notities en foto\'s maken om je wetenschappelijke experimenten te documenteren (binnenkort kun je nog meer notitietypen gebruiken), \n• verbinding maken met externe sensoren via bepaalde Arduino- en Vernier-apparaten met Bluetooth, \n• via sensoren opgenomen gegevens exporteren als CSV-bestanden, \n• automatische triggers maken voor het vastleggen van gegevens en het maken van notities, \n• sonificatie gebruiken om het verloop van je diagrammen te horen. \n \nScience Journal is gratis beschikbaar op Android-apparaten, iPhones, iPads en geschikte Chromebooks. \n \nEducatieve activiteiten van onze partners: https://makingscience.withgoogle.com/science-journal/activities \nGa voor ondersteuning naar: https://productforums.google.com/forum/#!forum/sciencejournal \nDe open source-code vind je hier: https://github.com/google/science-journal \n\nKennisgeving met betrekking tot rechten: \n• Locatie: nodig om apparaten met een Bluetooth-sensor te detecteren. \n• Camera: nodig om foto\'s te maken om experimenten te documenteren. \n• Microfoon: nodig voor de geluidsintensiteitssensor. \n• Opslag: nodig om toegang te krijgen tot foto\'s en deze in experimenten te gebruiken." "Zoeken naar sensoren van derden" "Zoek naar apps die de API voor sensoren van derden ondersteunen en stel in dat deze sensoren aan experimenten kunnen worden toegevoegd." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml index fcdf0006..8caa6ad1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml @@ -265,7 +265,7 @@ "Więcej informacji" "Science Journal" "Eksperymentuj w swoim świecie." - "Nowe funkcje i ulepszenia: \n• nowy interfejs do robienia notatek i dokumentowania doświadczeń; \n• nowa funkcja zrzutu do rejestrowania pojedynczych punktów danych; \n• nowe czujniki: akcelerometr liniowy, magnetometr i kompas; \n• nowy wygląd galerii pozwalającej na przeglądanie doświadczeń; \n• teraz również na urządzenia z iOS." + "Nowe funkcje i ulepszenia: \n• ułatwione usuwanie doświadczeń i notatek, \n• poprawki błędów." "Science Journal to bezpłatny cyfrowy notatnik naukowy stworzony przez Google. \n \nNiezależnie od tego, czy zajmujesz się nauczaniem, czy też nauka to Twoja pasja, którą realizujesz w domu, możesz gromadzić wszystkie notatki, zdjęcia i obserwacje w jednym miejscu. Korzystaj z czujników, w które jest wyposażony Twój telefon, aby mierzyć i dokumentować takie zjawiska jak światło, dźwięk i ruch. Możesz też podłączać czujniki zewnętrzne przez Bluetooth, by eksperymentować w otaczającym Cię świecie. \n \nAplikacja Science Journal pozwala: \n• mierzyć światło, dźwięk, przyspieszenie, ciśnienie powietrza i inne wskaźniki za pomocą czujników w telefonie; \n• robić notatki i zdjęcia, aby dokumentować doświadczenia – wkrótce udostępnimy nowe typy notatek; \n• podłączać czujniki zewnętrzne za pomocą urządzeń Arduino i Vernier z Bluetoothem; \n• eksportować zarejestrowane przez czujniki dane do plików CSV; \n• tworzyć automatyczne wyzwalacze do rejestrowania danych i robienia notatek; \n• wykorzystywać udźwiękowienie, aby słyszeć zmiany na wykresach. \n \nAplikacja Science Journal jest dostępna bezpłatnie na urządzeniach z Androidem, iPhone\'ach, iPadach i zgodnych Chromebookach. \n \nĆwiczenia przygotowane przez naszych partnerów: https://makingscience.withgoogle.com/science-journal/activities \nPomoc: https://productforums.google.com/forum/#!forum/sciencejournal \nKod open source: https://github.com/google/science-journal \n\n Powiadomienie o uprawnieniach: \n• Lokalizacja: potrzebna do skanowania w poszukiwaniu urządzeń z czujnikami komunikujących się przez Bluetooth. \n• Aparat: potrzebny, aby robić zdjęcia podczas doświadczeń. \n• Mikrofon: potrzebny, aby korzystać z czujnika natężenia dźwięku. \n• Pamięć: potrzebna, by mieć dostęp do zdjęć, które mają zostać umieszczone w opisach doświadczeń." "Wyszukaj czujniki innych firm" "Znajdź aplikacje, które obsługują interfejs API czujnika innej firmy, i włącz możliwość dodawania ich do doświadczeń." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml index 11c97984..bfd6fbb6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml @@ -265,7 +265,7 @@ "Saiba mais" "Science Journal" "O mundo é o seu laboratório." - "Novas funcionalidades e melhorias: \n• Interface nova para tirar notas e documentar experiências científicas. \n• Nova funcionalidade de instantâneo para captar pontos de dados individuais. \n• Novos sensores: acelerómetro linear, magnetómetro e bússola \n• Galeria redesenhada para experiências de navegação \n• Já disponível em dispositivos iOS!" + "Novas funcionalidades e melhorias: \n• Eliminação mais fácil de experiências e notas. \n• Correção de erros" "O Science Journal é o bloco de notas de ciência digital grátis oferecido pela Google. \n \nQuer seja um professor de ciência ou um entusiasta a fazer experiências em casa, pode guardar as suas notas, fotos e observações, tudo num único local prático. Utilize os sensores do seu telemóvel para medir e registar fenómenos como a luz, o som e o movimento, ou ligue-se a sensores externos através de Bluetooth para realizar experiências no mundo à sua volta. \n \nCom a aplicação Science Journal, pode: \n• Medir a luz, o som, a aceleração, a pressão do ar e muito mais através dos sensores incorporados do seu telemóvel. \n• Tire notas e fotos para documentar as suas experiências científicas. Mais tipos de nota brevemente! \n• Ligue-se a sensores externos através de dispositivos selecionados Arduino e Vernier com Bluetooth. \n• Exporte dados gravados de sensores como ficheiros CSV. \n• Crie acionadores automáticos para registar dados e tirar notas. \n• Utilize sonificação para ouvir o movimento dos seus gráficos. \n \nO Science Journal está disponível gratuitamente para Android, iPhone, iPad e dispositivos Chromebook compatíveis. \n \nAtividades educativas dos nossos parceiros: https://makingscience.withgoogle.com/science-journal/activities \nPara obter apoio técnico: https://productforums.google.com/forum/#!forum/sciencejournal \nCódigo-fonte aberto disponível: https://github.com/google/science-journal \n\n Aviso de autorizações: \n• Localização: necessária para procurar dispositivos com sensores Bluetooth. \n• Câmara: necessária para tirar fotos e documentar experiências. \n• Microfone: necessário para o sensor de intensidade do som. \n• Armazenamento: necessário para aceder a fotos para utilizar em experiências." "Pesquisar sensores de terceiros" "Procurar aplicações que suportem a API de sensores de terceiros e ativar a adição destes sensores às experiências." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml index 48fa70be..9085005a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml @@ -265,7 +265,7 @@ "Saiba mais" "Science Journal" "Seu mundo é o laboratório." - "Novos recursos e melhorias: \n• Nova interface para fazer anotações e documentar experimentos científicos. \n• Novo recurso de instantâneos para registrar pontos de dados individuais. \n• Novos sensores: acelerômetro linear, magnetômetro e bússola. \n• Galeria renovada para você pesquisar experimentos. \n• Agora disponível em dispositivos iOS." + "Novos recursos e melhorias: \n• exclusão mais fácil de experimentos e anotações. \n• Correções de bugs" "O Science Journal é um caderno de ciências digital gratuito, criado pelo Google. \n\nNão importa se você é um professor de ciências ou um curioso sobre o assunto, aqui você pode guardar suas anotações, fotos e observações em um só lugar. Use os sensores no seu smartphone para mensurar e criar gráficos sobre fenômenos, como luz, som e movimento. Você também pode conectar o smartphone a sensores externos por meio do Bluetooth e, assim, conduzir experimentos no mundo ao seu redor. \n\nCom o app do Science Journal, você pode: \n• medir luz, som, aceleração, pressão do ar e muito mais por meio dos sensores integrados ao seu smartphone; \n• fazer anotações e tirar fotos para documentar seus experimentos científicos. Mais tipos de anotações serão lançados em breve; \n• conectar-se a sensores externos usando alguns dispositivos Arduino e Vernier com Bluetooth; \n• exportar dados de sensores como arquivos CSV; \n• criar acionadores automatizados para registrar dados e fazer anotações; \n• usar sonificação para ouvir o movimento dos seus gráficos.\n \nO Science Journal está disponível gratuitamente para Android, iPhone, iPad e dispositivos Chromebook compatíveis. \n\nAtividades educacionais oferecidas por nossos parceiros: https://makingscience.withgoogle.com/science-journal/activities \nPara suporte, acesse: https://productforums.google.com/forum/#!forum/sciencejournal \nCódigo aberto disponível: https://github.com/google/science-journal \n\n Aviso de permissões: \n• Localização: necessária para procurar dispositivos com sensores Bluetooth. \n• Câmera: necessária para tirar fotos e documentar experimentos. \n• Microfone: necessário para o sensor de intensidade do som. \n• Armazenamento: necessário para acessar a galeria de fotos e inserir imagens nos experimentos." "Procurar sensores de terceiros" "Procure aplicativos compatíveis com a API de sensor de terceiros e ative esses sensores ao adicioná-los aos experimentos." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml index 46253878..7f166d57 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml @@ -265,7 +265,7 @@ "Aflați mai multe" "Science Journal" "Experimentați pe mediul din jur." - "Funcții și îmbunătățiri noi: \n• interfață nouă în care să luați notițe și să înregistrați decursul experimentelor științifice; \n• funcție nouă de instantaneu, pentru a surprinde date individuale; \n• senzori noi: accelerometru liniar, magnetometru și busolă; \n• galerie reconcepută pentru răsfoirea experimentelor; \n• aplicația este compatibilă acum și cu dispozitive iOS!" + "Funcții și îmbunătățiri noi: \n• experimentele și notele pot fi șterse mai ușor; \n• erori remediate." "Science Journal este caietul digital de notițe oferit gratuit de Google. \n \nFie că predați în domeniul științelor sau vă place să realizați experimente acasă, puteți să luați notițe, să fotografiați și să adăugați constatări, totul într-un singur loc. Folosiți senzorii telefonului pentru a măsura și a crea grafice pentru fenomene precum lumina, sunetul și mișcarea ori conectați-vă la senzori externi prin Bluetooth, pentru a realiza experimente pe mediul înconjurător. \n \nCu aplicația Science Journal, puteți: \n• să măsurați lumina, sunetul, accelerația, presiunea aerului și multe altele, folosind senzorii integrați ai telefonului; \n• să luați notițe și să fotografiați pentru a înregistra decursul experimentelor științifice. În curând, vor apărea mai multe tipuri de notițe! \n• să vă conectați la senzori externi folosind anumite dispozitive Arduino și Vernier, cu Bluetooth; \n• să exportați datele înregistrate de senzori ca fișiere CSV; \n• să creați declanșatoare automatizate pentru a înregistra date și a lua notițe; \n• să folosiți sonificarea pentru a auzi mișcarea graficelor. \n \nScience Journal este disponibil pe Android, iPhone, iPad și dispozitive Chromebook compatibile. \n \nActivități educaționale de la partenerii noștri: https://makingscience.withgoogle.com/science-journal/activities \nPentru asistență: https://productforums.google.com/forum/#!forum/sciencejournal \nCodul open source este disponibil aici: https://github.com/google/science-journal \n\n Notificare privind permisiunile: \n• Locație: pentru a găsi dispozitive cu senzor Bluetooth; \n• Cameră: pentru a face fotografii în cadrul experimentelor; \n• Microfon: pentru senzorul de intensitate a sunetului; \n• Stocare: pentru a stoca fotografiile realizate în cadrul experimentelor." "Căutați senzori terță parte" "Căutați aplicații care acceptă senzorul API terță parte și activați adăugarea senzorilor respectivi în experimente." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml index d2c3169b..7010690f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml @@ -265,7 +265,7 @@ "Подробнее" "Научный журнал" "Мир вокруг глазами науки" - "Новые функции и исправления: \n• Обновлен интерфейс – теперь оставлять комментарии и записывать эксперименты станет ещё проще. \n• Появилась возможность фиксировать текущие показатели датчиков. \n• Добавлен датчик линейного ускорения, магнитометр и компас. \n• Изменен вид вкладки с экспериментами. \n• Выпущена версия для устройств iOS." + "Изменения:\n• Стало проще удалять эксперименты и комментарии.\n• Исправлены ошибки." "\"Научный журнал\" – это бесплатное приложение от Google. С его помощью преподаватели и просто любители науки могут проводить эксперименты и сохранять данные о них. \n \nПриложение позволяет проводить исследования с помощью датчиков, встроенных в устройство или подключенных через Bluetooth. \n \nС Научным журналом можно: \n• Измерять уровень освещенности, силу звука, ускорение, давление воздуха и многое другое. \n• Делать снимки в ходе экспериментов и оставлять комментарии (скоро мы добавим много новых типов заметок). \n• Подключать через Bluetooth внешние датчики устройств Arduino и Vernier. \n• Экспортировать данные, зарегистрированные датчиками, в виде CSV-файлов. \n• Создавать триггеры для записи данных и комментариев. \n• Включать сонификацию: звуковое представление данных на графиках. \n \nУстановить Научный журнал можно на устройства Android, совместимые ноутбуки Chromebook, а также на смартфоны iPhone и планшеты iPad. \n \nЭксперименты от наших партнеров: https://makingscience.withgoogle.com/science-journal/activities. \nЕсли у вас возникнут вопросы о работе с Научным журналом, посетите форум: https://productforums.google.com/forum/#!forum/sciencejournal. \nКод приложения доступен по адресу https://github.com/google/science-journal. \n\n Управление разрешениями: \n• Доступ к геоданным (нужен, чтобы искать датчики, подключаемые к устройству через Bluetooth). \n• Доступ к камере (нужен, чтобы делать снимки в ходе экспериментов). \n• Доступ к микрофону (нужен, чтобы определять силу звука). \n• Доступ к хранилищу (нужен, чтобы добавлять к экспериментам изображения)." "Поиск сторонних датчиков" "Искать приложения, которые поддерживают API сторонних датчиков и позволяют использовать их в экспериментах." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml index c4f1b295..637c1aa7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml @@ -265,7 +265,7 @@ "Ďalšie informácie" "Vedecký zápisník" "Experimentujte so svetom." - "Nové funkcie a vylepšenia: \n• Úplne nové rozhranie na vytváranie poznámok a dokumentovanie vedeckých experimentov. \n• Nová funkcia snímok na zachytenie jednotlivých údajových bodov. \n• Nové senzory: lineárny akcelerometer, magnetometer a kompas. \n• Nový dizajn galérie na prehliadanie experimentov. \n• Teraz k dispozícii na zariadeniach so systémom iOS." + "Nové funkcie a zlepšenia: \n• Jednoduchšie odstránenie experimentov a poznámok. \n• Opravy chýb" "Vedecký zápisník je bezplatný digitálny zápisník na vedecké záznamy od spoločnosti Google. \n \nČi už ste vedecký pedagóg alebo nadšenec, ktorý sa vede venuje doma, všetky svoje poznámky, fotky a pozorovania môžete uchovávať na jednom pohodlnom mieste. Pomocou senzorov v telefóne môžete vytvárať grafy a merať javy, ako je napríklad svetlo, zvuk a pohyb, alebo experimentovať s okolitým svetom prostredníctvom pripojenia externých senzorov cez Bluetooth. \n \nS aplikáciou Vedeckého zápisníka môžete: \n• merať svetlo, zvuk, zrýchlenie, tlak vzduchu a ďalšie javy pomocou vstavaných senzorov vo vašom telefóne; \n• robiť poznámky, fotiť a dokumentovať tak svoje vedecké experimenty (ďalšie typy poznámok budú k dispozícii čoskoro); \n• pripojiť externé senzory pri používaní vybraných zariadení Arduino a Vernier s aktívnou funkciou Bluetooth; \n• exportovať zaznamenané údaje senzorov do súborov CSV; \n• vytvoriť automatické spúšťače na zaznamenávanie údajov a vytváranie poznámok; \n• počuť pohyby grafov pomocou sonifikácie. \n \nVedecký zápisník je k dispozícii zadarmo v zariadeniach so systémom Android, v zariadeniach iPhone, iPad a kompatibilných zariadeniach Chromebook. \n \nVzdelávacie aktivity našich partnerov: https://makingscience.withgoogle.com/science-journal/activities \nPodpora: https://productforums.google.com/forum/#!forum/sciencejournal \nOtvorený zdrojový kód je k dispozícii na stránke: https://github.com/google/science-journal \n\n Oznámenie o povoleniach: \n• Poloha: potrebná na vyhľadávanie zariadení so senzorom Bluetooth. \n• Fotoaparát: potrebný na snímanie fotiek na zdokumentovanie experimentu. \n• Mikrofón: potrebný pre senzor intenzity zvuku. \n• Úložisko: potrebné na prístup k fotkám na vkladanie do experimentov." "Vyhľadanie senzorov tretích strán" "Vyhľadajte aplikácie, ktoré podporujú rozhranie API pre senzory tretích strán, a povoľte pridanie týchto senzorov do experimentov." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml index 4cbb1e92..93fba815 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml @@ -265,7 +265,7 @@ "Več o tem" "Science Journal" "Poskusi v vašem svetu." - "Nove funkcije in izboljšave: \n• Popolnoma nov vmesnik za ustvarjanje zapiskov in beleženje znanstvenih poskusov. \n• Nova funkcija ustvarjanja posnetkov za zajemanje posameznih podatkovnih točk. \n• Nova tipala: linearni merilnik pospeška, magnetometer in kompas \n• Preoblikovana galerija za brskanje po poskusih \n• Zdaj na voljo tudi za naprave iOS." + "Nove funkcije in izboljšave: \n• Preprostejše brisanje poskusov in zapiskov. \n• Popravki napak" "Science Journal je brezplačna Googlova digitalna znanstvena beležka. \n \nNe glede na to, ali ste učitelj katere od naravoslovnih ved ali navdušenec, ki se z znanostjo ukvarja doma, imate lahko vse zapiske, fotografije in opazovanja shranjene na enem priročnem mestu. S tipali v telefonu lahko merite pojave, kot so svetloba, zvok in gibanje, ter jih prikazujete na grafikonih, ali s tehnologijo Bluetooth vzpostavite povezavo z zunanjimi tipali in izvajate poskuse v svetu okoli sebe. \n \nZ aplikacijo Science Journal lahko: \n• S tipali, vgrajenimi v telefon, merite svetlobo, zvok, pospeške, zračni tlak in drugo. \n• Ustvarjate zapiske in zajemate fotografije ter z njimi beležite znanstvene poskuse. Kmalu bodo na voljo dodatne vrste zapiskov. \n• Z določenimi napravami Arduino in Vernier, ki podpirajo Bluetooth, vzpostavite povezavo z zunanjimi tipali. \n• Izvažate zabeležene podatke tipal kot datoteke CSV. \n• Ustvarjate samodejne sprožilce za beleženje podatkov in ustvarjanje zapiskov. \n• S sonifikacijo poslušate premikanje svojih grafikonov. \n \nScience Journal je na voljo brezplačno za naprave Android, iPhone, iPad in združljive naprave Chromebook. \n \nIzobraževalne dejavnosti naših partnerjev so na voljo na naslovu https://makingscience.withgoogle.com/science-journal/activities \nZa podporo obiščite https://productforums.google.com/forum/#!forum/sciencejournal \nOdprtokodna koda je na voljo na naslovu https://github.com/google/science-journal \n\n Obvestilo o dovoljenjih: \n• Lokacija: potrebna je za iskanje naprav Bluetooth s tipali. \n• Fotoaparat: potreben je za beleženje poskusov s fotografiranjem. \n• Mikrofon: potreben je za tipalo za jakost zvoka. \n• Shramba: potrebna je za dostop do fotografij za vstavljanje v poskuse." "Iskanje senzorjev drugih ponudnikov" "Poiščite aplikacije, ki podpirajo programski vmesnik za senzorje drugih ponudnikov, in omogočite dodajanje teh senzorjev v poskuse." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml index 568c7e48..f695693b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml @@ -265,7 +265,7 @@ "Сазнајте више" "Научни дневник" "Експериментишите са светом." - "Нове функције и побољшања: \n• Нови интерфејс за прављење бележака и документовање научних експеримената. \n• Нова функција снимака, за бележење појединачних чињеница са подацима. \n• Нови сензори: линеарни акцелерометар, магнетометар и компас \n• Прерађен дизајн галерије за листање експеримената \n• Од сада доступно и на iOS уређајима!" + "Нове функције и побољшања: \n• Лакше брисање експеримената и бележака. \n• Исправке грешака" "Научни дневник је бесплатна дигитална научна бележница коју обезбеђује Google. \n \nБило да сте наставник или неко ко се бави науком из хобија, можете да чувате белешке, фотографије и запажања на једном практичном месту. Помоћу сензора телефона можете да мерите и графички приказујете појаве као што су светло, звук и покрет и да се повезујете са спољним сензорима преко Bluetooth-а да бисте вршили експерименте са светом који вас окружује. \n \nУз апликацију Научни дневник можете: \n• да мерите светло, звук, убрзање, ваздушни притисак и друге параметре помоћу сензора у телефону. \n• да правите белешке и фотографије ради документовања научних експеримената. Ускоро ће бити доступно још врста бележака! \n• да се повезујете са спољним сензорима преко одабраних Arduino и Vernier уређаја који подржавају Bluetooth. \n• да извозите податке забележене сензором као CSV датотеке. \n• да правите аутоматизоване окидаче за снимање података и унос бележака. \n• да користите сонификацију да бисте могли да чујете тенденције на графиконима. \n \nНаучни дневник је доступан бесплатно на Android, iPhone и iPad уређајима и компатибилним Chromebook уређајима. \n \nОбразовне активности наших партнера: https://makingscience.withgoogle.com/science-journal/activities \nПодршка: https://productforums.google.com/forum/#!forum/sciencejournal \nДоступан је отворени код: https://github.com/google/science-journal \n\n Обавештење о дозволама: \n• Локација: потребна да би се налазили уређаји са Bluetooth сензорима. \n• Камера: потребна за прављење слика ради документовања експеримената. \n• Микрофон: потребна за сензор јачине звука. \n• Складишни простор: потребна за приступ сликама које ће се уметати у експерименте." "Потражи сензоре треће стране" "Потражите апликације које подржавају API за сензор треће стране и омогућите додавање таквих сензора у експерименте." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml index 3b78cde2..e5f3b850 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml @@ -265,7 +265,7 @@ "Läs mer" "Science Journal" "Experimentera med omvärlden." - "Nya funktioner och förbättringar: \n• Helt nytt gränssnitt för att föra anteckningar och dokumentera experiment. \n• Ny ögonblicksfunktion för att hämta enskilda datapunkter. \n• Nya sensorer: linjär accelerometer, magnetometer och kompass \n• Nydesignat galleri där du kan se alla experiment \n• Finns nu till iOS-enheter!" + "Nya funktioner och förbättringar: \n• Enklare att radera experiment och kommentarer. \n• Felkorrigeringar" "Science Journal är en kostnadsfri digital forskningsloggbok från Google. \n \nOavsett om du är NO-lärare eller hobbyist som experimenterar hemma kan du föra anteckningar, ha foton och observationer på ett enda ställe. Använd sensorerna i telefonen för att mäta och göra diagram över fenomen som ljus, ljud och rörelse, eller anslut till externa sensorer via Bluetooth för att utföra experiment på allt möjligt i omgivningen. \n \nMed Science Journal-appen kan du göra följande: \n• Mäta ljus, ljud, acceleration, lufttryck och mycket annat med hjälp av telefonens inbyggda sensorer. \n• Föra anteckningar och ta foton för att dokumentera dina vetenskapliga experiment. Fler anteckningstyper kommer snart! \n• Ansluta till externa sensorer med hjälp av vissa Bluetooth-aktiverade Arduino- och Vernier-enheter. \n• Exportera registrerad sensordata som CSV-filer. \n• Skapa automatiska utlösare för dataregistrering och anteckningar. \n• Använda sonifiering för att höra diagrammens rörelser. \n \nScience Journal finns kostnadsfritt till Android, iPhone, iPad och kompatibla Chromebook-enheter. \n \nUtbildningsaktiviteter hos våra partner: https://makingscience.withgoogle.com/science-journal/activities \nSupport: https://productforums.google.com/forum/#!forum/sciencejournal \nÖppen källkod: https://github.com/google/science-journal \n\n Meddelande om behörighet: \n• Plats: behövs för att söka efter Bluetooth-sensorenheter. \n• Kamera: behövs för att dokumentera experiment med bilder. \n• Mikrofon: behövs för sensorn för ljudstyrka. \n• Lagring: behövs för att lagra bilder av experiment." "Sök efter sensorer från tredje part" "Sök efter appar som stöder sensor-API från tredje part, och gör det möjligt att lägga till sensorerna i experiment." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml index 04383efb..c94cd10f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml @@ -265,7 +265,7 @@ "เรียนรู้เพิ่มเติม" "วารสารวิทยาศาสตร์" "ทำการทดลองกับโลกรอบตัวคุณ" - "ฟีเจอร์ใหม่และการปรับปรุง: \n• อินเทอร์เฟซใหม่ล่าสุดสำหรับการจดบันทึกและทำเอกสารการทดลองทางวิทยาศาสตร์ \n• ฟีเจอร์สแนปชอตใหม่สำหรับการบันทึกข้อมูลทีละจุด \n• เซ็นเซอร์ใหม่: ตัวตรวจวัดความเร่งเชิงเส้น เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก และเข็มทิศ \n• แกลเลอรีที่ออกแบบใหม่สำหรับเรียกดูการทดลองต่างๆ \n• พร้อมใช้งานบนอุปกรณ์ iOS แล้ววันนี้" + "ฟีเจอร์และการปรับปรุงใหม่: \n• ลบการทดลองและบันทึกได้ง่ายขึ้น \n• แก้ไขข้อบกพร่อง" "วารสารวิทยาศาสตร์คือสมุดบันทึกทางวิทยาศาสตร์แบบดิจิทัลซึ่งจัดทำโดย Google \n \nโดยไม่ว่าคุณจะเป็นครูสอนวิทยาศาสตร์หรือผู้ที่ชื่นชอบการทดลองวิทยาศาสตร์ คุณก็จะเก็บบันทึก รูปภาพ และการสังเกตการณ์ได้อย่างสะดวกในที่เดียว ใช้เซ็นเซอร์ในโทรศัพท์เพื่อการวัดและสร้างกราฟจากปรากฏการณ์ต่างๆ เช่น แสง เสียง การเคลื่อนไหว หรือเชื่อมต่อกับเซ็นเซอร์ภายนอกผ่านทางบลูทูธเพื่อทำการทดลองต่างๆ ในโลกรอบตัวคุณ \n \nแอปวารสารวิทยาศาสตร์ช่วยให้คุณทำสิ่งต่างๆ ต่อไปนี้ได้ \n• วัดแสง เสียง ความเร่ง ความดันอากาศ และอีกมากมายด้วยเซ็นเซอร์ในโทรศัพท์ \n• จดบันทึกและถ่ายภาพเพื่อสร้างเอกสารการทดลองวิทยาศาสตร์ และเตรียมคอยพบกับบันทึกแบบใหม่เร็วๆ นี้ \n• เชื่อมต่อกับเซ็นเซอร์ภายนอกด้วยการเลือกอุปกรณ์ Arduino และ Vernier ที่รองรับการใช้งานบลูทูธ \n• ส่งออกไฟล์ข้อมูลเซ็นเซอร์ที่บันทึกไว้ในรูปแบบไฟล์ CSV \n• สร้างทริกเกอร์แบบอัตโนมัติสำหรับการบันทึกข้อมูลและจดบันทึก \n• ใช้การแปลงข้อมูลเป็นเสียงเพื่อฟังเสียงกราฟ \n \nวารสารวิทยาศาสตร์พร้อมใช้งานได้ฟรีบนอุปกรณ์ Android, iPhone, iPad และ Chromebook ที่ใช้งานร่วมกันได้ \n \n กิจกรรมด้านการศึกษาจากพาร์ทเนอร์ของเรา: https://makingscience.withgoogle.com/science-journal/activities \nสำหรับการสนับสนุน: https://productforums.google.com/forum/#!forum/sciencejournal \nโค้ดโอเพนซอร์สที่พร้อมใช้งาน: https://github.com/google/science-journal \n\nประกาศเกี่ยวกับสิทธิ์: \n• ตำแหน่ง: ใช้เพื่อสแกนหาอุปกรณ์เซ็นเซอร์บลูทูธ \n• กล้องถ่ายรูป: ใช้เพื่อถ่ายรูปทำบันทึกการทดลอง \n• ไมโครโฟน: ใช้เป็นเซ็นเซอร์วัดความเข้มเสียง \n• พื้นที่เก็บข้อมูล: ใช้เพื่อเข้าถึงรูปภาพที่จะนำมาใส่ในการทดลอง" "ค้นหาเซ็นเซอร์ของบุคคลที่สาม" "ค้นหาแอปที่สนับสนุน API เซ็นเซอร์ของบุคคลที่สาม และเปิดใช้การเพิ่มเซ็นเซอร์เหล่านั้นลงในการทดลอง" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml index 850cb2e9..ab826f1d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml @@ -265,7 +265,7 @@ "Matuto Pa" "Science Journal" "Mag-eksperimento sa iyong mundo." - "Mga bagong feature at pagpapabuti: \n• Brand-new na interface para sa pagkuha ng mga tala at pagdokumento ng mga eksperimento sa science. \n• Bagong feature na snapshot para sa pagkuha ng mga indibidwal na data point. \n• Mga bagong sensor: linear accelerometer, magnetometer, at compass \n• Gallery na binago ang disenyo para sa pag-browse ng mga eksperimento \n• Available na ngayon sa mga iOS device!" + "Mga bagong feature at pagpapabuti: \n• Mas madaling pag-delete ng mga eksperimento at mga tala. \n• Mga pag-aayos ng bug" "Ang Science Journal ay ang libreng digital na science notebook na hatid sa iyo ng Google. \n \nTagapagturo ka man ng science o hobbyist na nagsasagawa ng science sa bahay, maaari mong itabi ang lahat ng iyong mga tala, litrato, at mga obserbasyon sa isang madaling ma-access na lugar. Gamitin ang mga sensor sa iyong telepono upang masukat at mai-graph ang mga pangyayaring tulad ng liwanag, tunog, at paggalaw, o kumonekta sa mga external sensor sa pamamagitan ng bluetooth upang makapagsagawa ng mga eksperimento sa mundong nakapaligid sa iyo. \n \nGamit ang Science Journal app, maaari kang: \n• Magsukat ng liwanag, tunog, acceleration, air pressure, at marami pang iba gamit ang mga built-in sensor ng iyong telepono. \n• Kumuha ng mga tala at mga litrato upang madokumento ang mga eksperimento mo sa science. Parating na ang mas marami pang uri ng tala! \n• Kumonekta sa mga external sensor gamit ang mga piling Arduino at Vernier device na naka-enable ang Bluetooth. \n• Mag-export ng mga na-record na sensor data bilang mga CSV file. \n• Gumawa ng mga automated na trigger para sa pag-record ng data at pagkuha ng mga tala. \n• Gumamit ng sonification upang madinig ang pagkilos ng iyong mga graph. \n \nAvailable nang libre ang Science Journal sa Android, iPhone, iPad, at mga tugmang Chromebook device. \n \nMga gawaing pang-edukasyon ng ating mga partner: https://makingscience.withgoogle.com/science-journal/activities \nPara sa suporta: https://productforums.google.com/forum/#!forum/sciencejournal \nAvailable ang open-source code: https://github.com/google/science-journal \n\n Paunawa ukol sa mga pahintulot: \n• Lokasyon: kailangan upang makapag-scan ng mga bluetooth sensor device. \n• Camera: kailangan upang makakuha ng mga litrato para makapagdokumento ng mga eksperimento. \n• Mikropono: kailangan para sa sensor ng tindi ng tunog. \n• Storage: kailangan upang ma-access ang mga litrato na ipapasok sa mga eksperimento." "I-scan para sa mga third-party sensor" "Tumingin ng mga app na sumusuporta sa third-party sensor API, at i-enable ang pagdaragdag ng mga sensor na iyon sa mga eksperimento." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml index 4769b4ab..87d89abb 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml @@ -265,7 +265,7 @@ "Daha Fazla Bilgi" "Science Journal" "Dünyanızı deneylerle keşfedin." - "Yeni özellikler ve iyileştirmeler: \n• Notlar almak ve bilimsel deneyleri belgelemek için yepyeni bir arayüz. \n• Bağımsız veri noktalarını yakalamak için yeni anlık görüntü özelliği. \n• Yeni sensörler: Doğrusal ivmeölçer, manyetometre ve pusula \n• Gezinme deneyleri için yeniden tasarlanan galeri \n• Artık iOS cihazlarda da kullanılabilir!" + "Yeni özellikler ve iyileştirmeler: \n• Denemelerin ve notların daha kolay silinmesi. \n• Hata düzeltmeleri" "Science Journal, Google tarafından sunulan ücretsiz bir dijital bilim defteridir. \n \nİster bir bilim eğitmeni, ister evinizde bilim yapan bir amatör olun; notlarınızı, fotoğraflarınızı ve gözlemlerinizi tek bir pratik platformda saklayabilirsiniz. Işık, ses ve hareket gibi olayları ölçmek ve grafiklendirmek için telefonunuzdaki sensörleri kullanın veya çevrenizde deneyler yürütmek için Bluetooth ile harici sensörlere bağlanın. \n \nScience Journal uygulamasıyla şunları yapabilirsiniz: \n• Telefonunuzun dahili sensörlerini kullanarak ışığı, sesi, ivmelenmeyi, hava basıncını ve daha birçok şeyi ölçebilirsiniz. \n• Bilimsel deneylerinizi belgelendirmek için notlar alıp fotoğraflar çekebilirsiniz. Daha fazla not türü çok yakında sizinle! \n• Bluetooth özellikli belirli Arduino ve Vernier cihazlar kullanarak harici sensörlere bağlanabilirsiniz. \n• Kaydedilen sensör verilerini CSV dosyaları olarak dışa aktarabilirsiniz. \n• Veri kaydetmek ve notlar almak için otomatik tetikleyiciler oluşturabilirsiniz. \n• Grafiklerinizin hareketini duyabilmek için sonifikasyon özelliğini kullanabilirsiniz. \n \nScience Journal; Android, iPhone, iPad ve uyumlu Chromebook cihazlarında ücretsiz olarak kullanılabilir. \n \nİş ortaklarımızın yürüttüğü eğitim faaliyetleri: https://makingscience.withgoogle.com/science-journal/activities \nDestek için: https://productforums.google.com/forum/#!forum/sciencejournal \nAçık kaynak kodu mevcuttur: https://github.com/google/science-journal \n\n İzin bildirimi: \n• Konum: Bluetooth sensörlü cihazlar için tarama yapılırken gereklidir. \n• Kamera: Deneyleri belgelendirmek amacıyla fotoğraf çekmek için gereklidir. \n• Mikrofon: Ses şiddeti sensörü için gereklidir. \n• Depolama: Deneylere eklemek amacıyla fotoğraflara erişmek için gereklidir." "Üçüncü taraf sensörleri için tara" "Üçüncü taraf sensör API\'lerini destekleyen uygulamaları bulun ve bu sensörleri deneylere eklemeyi etkinleştirin." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml index 6e743d7e..806a8791 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml @@ -265,7 +265,7 @@ "Докладніше" "Науковий журнал" "Проводьте експерименти." - "Нові функції та покращення \n• Новий інтерфейс для створення нотаток і документування наукових експериментів \n• Функція знімків для фіксування окремих точок даних \n• Нові датчики: лінійний акселерометр, магнітометр і компас \n• Оновлена галерея для перегляду експериментів \n• Тепер додаток доступний на пристроях iOS" + "Нові функції та покращення: \n• спрощено видалення експериментів і нотаток \n• виправлено помилки" "Науковий журнал – це безкоштовний цифровий щоденник від Google для ваших наукових досліджень. \n \nЯкщо ви викладаєте науку або просто займаєтеся нею вдома, зберігайте свої нотатки, фотографії та спостереження в одному додатку. Вимірюйте світло, звук і рух та будуйте графіки за допомогою датчиків свого телефона або зовнішніх датчиків, до яких можна підключитися через Bluetooth. \n \nУ додатку Науковий журнал можна: \n• вимірювати світло, звук, прискорення, атмосферний тиск тощо за допомогою вбудованих датчиків телефона; \n• створювати нотатки та фотографії для документування наукових експериментів (незабаром з’являться додаткові види нотаток); \n• підключатися до зовнішніх датчиків за допомогою пристроїв Arduino та Vernier з підтримкою Bluetooth; \n• експортувати записані дані датчиків як файли CSV; \n• створювати автоматичні активатори для запису даних і нотаток; \n• використовувати соніфікацію для відстеження змін графіків. \n \nНауковий журнал доступний безкоштовно на пристроях Android, iPhone, iPad і сумісних пристроях Chromebook. \n \nНавчальні дослідження від наших партнерів: https://makingscience.withgoogle.com/science-journal/activities \nЩоб отримати підтримку, перейдіть на сторінку https://productforums.google.com/forum/#!forum/sciencejournal \nВідкритий код додатка доступний за посиланням https://github.com/google/science-journal \n\n Примітка про дозволи \n• Місцезнаходження: для пошуку пристроїв із датчиками через Bluetooth. \n• Камера: для документування експериментів. \n• Мікрофон: для роботи датчика інтенсивності звуку. \n• Пам’ять: для доступу до знімків, зроблених під час експериментів." "Пошук сторонніх датчиків" "Знайдіть додатки, що підтримують API сторонніх датчиків, і дозвольте додавати ці датчики в експерименти." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml index 0c96e9fc..8fa0bc76 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml @@ -265,7 +265,7 @@ "Tìm hiểu thêm" "Science Journal" "Thí nghiệm trong thế giới của bạn." - "Các tính năng và cải tiến mới: \n• Giao diện hoàn toàn mới để ghi chép và lưu hồ sơ về thí nghiệm khoa học. \n• Tính năng chụp ảnh nhanh mới để ghi lại từng điểm dữ liệu. \n• Cảm biến mới: gia tốc tuyến tính, từ kế và la bàn \n• Thư viện được thiết kế lại để dễ duyệt qua các thí nghiệm \n• Hiện có sẵn trên các thiết bị iOS!" + "Các tính năng và cải tiến mới: \n• Xóa thí nghiệm và ghi chú dễ dàng hơn. \n• Sửa lỗi" "Science Journal là sổ tay khoa học kỹ thuật số mà Google mang đến cho bạn. \n \nDù bạn là giáo viên dạy môn khoa học hay là người thích thực hiện thí nghiệm khoa học tại nhà thì bạn có thể giữ tất cả ghi chú, ảnh và kết quả quan sát ở một nơi thuận tiện. Hãy sử dụng cảm biến trong điện thoại để đo và lập biểu đồ cho các hiện tượng, chẳng hạn như ánh sáng, âm thanh và chuyển động hoặc kết nối với cảm biến bên ngoài thông qua bluetooth để tiến hành thí nghiệm về thế giới quanh bạn. \n \nVới ứng dụng Science Journal, bạn có thể: \n• Đo ánh sáng, âm thanh, gia tốc, áp suất không khí và hơn thế nữa bằng cảm biến tích hợp của điện thoại. \n• Ghi chép và chụp ảnh để lưu hồ sơ về các thí nghiệm khoa học. Ngoài ra, các loại ghi chú khác cũng sắp ra mắt! \n• Kết nối với cảm biến bên ngoài bằng một số thiết bị Arduino và Vernier đã bật Bluetooth. \n• Xuất dữ liệu cảm biến đã ghi thành tệp CSV. \n• Tạo trình kích hoạt tự động để ghi dữ liệu và ghi chép. \n• Sử dụng phương thức truyền thông tin qua âm thanh để nghe chuyển động của các biểu đồ. \n \nScience Journal được cung cấp miễn phí trên Android, iPhone, iPad và các thiết bị Chromebook có khả năng tương thích khác. \n \nBạn có thể xem các hoạt động giáo dục do đối tác của chúng tôi thực hiện tại đây: https://makingscience.withgoogle.com/science-journal/activities \nĐể được hỗ trợ, hãy truy cập vào https://productforums.google.com/forum/#!forum/sciencejournal \nMã nguồn mở có sẵn tại: https://github.com/google/science-journal \n\n Thông báo quyền: \n• Vị trí: cần có quyền truy cập vào vị trí để quét tìm thiết bị cảm biến bluetooth. \n• Máy ảnh: cần có quyền truy cập vào máy ảnh để chụp ảnh và lưu hồ sơ về thí nghiệm. \n• Micrô: cần có quyền sử dụng micrô cho cảm biến cường độ âm thanh. \n• Bộ nhớ: cần có quyền truy cập vào bộ nhớ để truy cập vào thư viện ảnh và chèn ảnh vào thí nghiệm." "Quét tìm các cảm biến của bên thứ ba" "Tìm các ứng dụng hỗ trợ API cảm biến của bên thứ ba và cho phép thêm các cảm biến đó vào thí nghiệm." diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml index 3a6c01ac..bb2db21a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml @@ -265,7 +265,7 @@ "了解详情" "科学日志" "探索您周围世界的科学奥秘。" - "新功能及改进之处:\n• 用于做笔记和记录科学实验的全新界面。\n• 用于捕获各个数据点的新快照功能。\n• 新的传感器:线性加速度计、磁力计和罗盘\n• 经过重新设计的用于浏览实验的图库\n• 现在支持 iOS 设备!" + "新功能及改进之处:\n• 轻松删除实验和备注。\n• 修复了多项错误" "科学日志是 Google 提供的免费数字科学笔记本。\n \n无论你是科学教育工作者还是自己在家进行科学实验的爱好者,你都可以将笔记、照片和观察结果全部保存在一个方便的地方。你可以使用手机中的传感器来测量诸如光、声音和运动之类的现象并生成相关图表,也可以通过蓝牙连接外部传感器,开始尽情探索周围的世界。\n \n借助科学日志应用,你可以:\n• 使用手机的内置传感器测量光、声音、加速度、气压等。\n• 记笔记和拍照片,以记录你的科学实验。我们将很快推出更多笔记类型!\n• 使用支持蓝牙功能的部分 Arduino 和 Vernier 设备连接外部传感器。\n• 将所记录的传感器数据导出为 CSV 文件。\n• 创建可自动记录数据和做笔记的触发器。\n• 使用可听化功能来倾听你的图表的变动。\n \n科学日志可在 Android、iPhone、iPad 及兼容的 Chromebook 设备上免费使用。\n \n我们的合作伙伴提供的教育活动:https://makingscience.withgoogle.com/science-journal/activities \n技术支持:https://productforums.google.com/forum/#!forum/sciencejournal \n可供使用的开源代码:https://github.com/google/science-journal \n\n 权限声明:\n• 位置信息:需要位置信息以便扫描寻找蓝牙传感器设备。\n• 摄像头:需要利用摄像头进行拍照,以记录实验。\n• 麦克风:需要开启麦克风以使用声强传感器。\n• 存储空间:需要使用存储空间以便存取照片并插入实验中。" "扫描第三方传感器" "查找支持第三方传感器 API 并且能够将这些传感器添加到实验中的应用。" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml index 3b70c4ce..32d4873e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml @@ -265,7 +265,7 @@ "瞭解詳情" "科學日誌" "盡情探索周圍的世界。" - "新功能與改善項目:\n• 在嶄新介面中做筆記和記錄科學實驗。\n• 全新的數據匯報功能,讓你輕鬆擷取個別數據點。\n• 全新感測器:線性加速計、磁力儀和指南針。\n• 新版圖片庫登場,方便你瀏覽實驗。\n• 現在起,iOS 裝置也可使用「科學日誌」!" + "新功能與改善項目:\n• 改善實驗和附註的刪除功能,想刪除資料再簡單不過!\n• 修正多項錯誤" "「科學日誌」是一款 Google 推出的免費應用程式,也是專為你設計的數位科學筆記本。\n\n無論你是從事科學教育的人員,或是熱衷於在家中動手玩科學的人士,都可以將你所有的筆記、相片和觀察結果集中存於此處。你可以利用手機內建的感測器來測量生活中的各種自然現象,例如光線、聲音和物體的運動,並將收集到的數據繪製成圖表。此外,你也可以透過藍牙功能與外部感測器建立連線,並在周遭環境進行實驗。\n\n「科學日誌」應用程式可以讓你:\n• 使用手機內建的感測器來測量光線、聲音、加速度及氣壓等自然現象。\n• 以文字筆記和相片的形式,將科學實驗的過程和結果記錄下來。我們日後還會提供更多種筆記類型,請拭目以待!\n• 讓手機連線至部分具備藍牙功能的 Arduino 和 Vernier 外部感測器裝置。\n• 將收集到的感測器資料匯出為 CSV 檔案。\n• 建立自動化的觸發條件,讓「科學日誌」自動幫你記錄資料和做筆記。\n• 透過超音波處理機制聽見圖表的變化趨勢。\n\n現在起,你可以在各種 Android、iPhone、iPad,以及相容的 Chromebook 裝置上免費下載「科學日誌」。\n\n歡迎瀏覽我們合作夥伴提供的教育活動:https://makingscience.withgoogle.com/science-journal/activities\n歡迎造訪支援論壇:https://productforums.google.com/forum/#!forum/sciencejournal\n如需取得開放原始碼,請造訪:https://github.com/google/science-journal\n\n權限聲明:\n• 位置:你必須提供這項權限,才能掃描藍牙感測器裝置。\n• 相機:你必須提供這項權限,才能拍攝相片來記錄實驗。\n• 麥克風:你必須提供這項權限,才能使用聲音強度感測器。\n• 儲存空間:你必須提供這項權限,才能將相片插入實驗中。" "掃描是否有第三方感測器" "尋找支援第三方感測器 API 的應用程式,並啟用將這類感應器加入實驗的功能。" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml index 3b70c4ce..32d4873e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml @@ -265,7 +265,7 @@ "瞭解詳情" "科學日誌" "盡情探索周圍的世界。" - "新功能與改善項目:\n• 在嶄新介面中做筆記和記錄科學實驗。\n• 全新的數據匯報功能,讓你輕鬆擷取個別數據點。\n• 全新感測器:線性加速計、磁力儀和指南針。\n• 新版圖片庫登場,方便你瀏覽實驗。\n• 現在起,iOS 裝置也可使用「科學日誌」!" + "新功能與改善項目:\n• 改善實驗和附註的刪除功能,想刪除資料再簡單不過!\n• 修正多項錯誤" "「科學日誌」是一款 Google 推出的免費應用程式,也是專為你設計的數位科學筆記本。\n\n無論你是從事科學教育的人員,或是熱衷於在家中動手玩科學的人士,都可以將你所有的筆記、相片和觀察結果集中存於此處。你可以利用手機內建的感測器來測量生活中的各種自然現象,例如光線、聲音和物體的運動,並將收集到的數據繪製成圖表。此外,你也可以透過藍牙功能與外部感測器建立連線,並在周遭環境進行實驗。\n\n「科學日誌」應用程式可以讓你:\n• 使用手機內建的感測器來測量光線、聲音、加速度及氣壓等自然現象。\n• 以文字筆記和相片的形式,將科學實驗的過程和結果記錄下來。我們日後還會提供更多種筆記類型,請拭目以待!\n• 讓手機連線至部分具備藍牙功能的 Arduino 和 Vernier 外部感測器裝置。\n• 將收集到的感測器資料匯出為 CSV 檔案。\n• 建立自動化的觸發條件,讓「科學日誌」自動幫你記錄資料和做筆記。\n• 透過超音波處理機制聽見圖表的變化趨勢。\n\n現在起,你可以在各種 Android、iPhone、iPad,以及相容的 Chromebook 裝置上免費下載「科學日誌」。\n\n歡迎瀏覽我們合作夥伴提供的教育活動:https://makingscience.withgoogle.com/science-journal/activities\n歡迎造訪支援論壇:https://productforums.google.com/forum/#!forum/sciencejournal\n如需取得開放原始碼,請造訪:https://github.com/google/science-journal\n\n權限聲明:\n• 位置:你必須提供這項權限,才能掃描藍牙感測器裝置。\n• 相機:你必須提供這項權限,才能拍攝相片來記錄實驗。\n• 麥克風:你必須提供這項權限,才能使用聲音強度感測器。\n• 儲存空間:你必須提供這項權限,才能將相片插入實驗中。" "掃描是否有第三方感測器" "尋找支援第三方感測器 API 的應用程式,並啟用將這類感應器加入實驗的功能。" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml index 10abbddd..07fa7464 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values/strings.xml @@ -92,8 +92,8 @@ dB - - Hz + + Hz RPM @@ -129,8 +129,8 @@ Sound intensity - - Sound frequency + + Pitch Birthday @@ -477,6 +477,12 @@ Changes to this setting only take effect after closing the application. + + Enable smooth scroll on refresh + + + Disable to reduce likelihood of crash with large experiment + Default @@ -559,8 +565,8 @@ The intensity of the sound, measured in decibels (dB), reaching the sound sensor or microphone. - - The frequency of the sound, measured in hertz (Hz), reaching the sound sensor or microphone. + + The pitch of the sound, measured in hertz (Hz), reaching the sound sensor or microphone. The amount of light, measured in lux, reaching the ambient light sensor. @@ -611,7 +617,7 @@ Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward—much like the expanding circular ripple made by a pebble thrown into a pond. - + All sounds can be described in terms of their frequency and intensity. \n\nIntensity is what you measure here with the Science Journal, in units of decibels (dB). Intensity, or loudness, depends on the distance that a vibrating object moves each time it vibrates; we hear greater intensity as increased loudness. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. The Science Journal does not measure frequency—only loudness. @@ -632,11 +638,11 @@ \n140 dB airplane taking off - - Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward—much like the expanding circular ripple made by a pebble thrown into a pond. + + Sounds are made by vibration. Your voice, for example, comes from vibrations in your throat\'s vocal cords. These vibrations create alternating zones of high and low air pressure that travel outward—much like the expanding circular ripple made by a pebble thrown into a pond. - - All sounds can be described in terms of their frequency and intensity. + + All sounds can be described in terms of their frequency and intensity. \n\nThe frequency (also, pitch or tone) of a sound wave is equivalent to its rate of vibration. The faster an object vibrates, the higher the pitch of the resulting sound. \n\nHumans can hear sounds in the range of 20 to 20,000 Hz. The lowest key on a piano produces a sound with a frequency of 27.5 Hz and the highest key produces a sound with a frequency of 4186.01 Hz. @@ -849,11 +855,8 @@ New features and improvements: -\n\u2022 Brand-new interface for taking notes and documenting science experiments. -\n\u2022 New snapshot feature for capturing individual data points. -\n\u2022 New sensors: linear accelerometer, magnetometer, and compass -\n\u2022 Redesigned gallery for browsing experiments -\n\u2022 Now available on iOS devices! +\n\u2022 Easier deletion of experiments and notes. +\n\u2022 Bug fixes Enable experimental ambient temperature sensor - - Enable sound frequency + + Enable pitch - - Enable experimental sound frequency sensor + + Enable experimental pitch sensor Enable sine wave @@ -1445,6 +1448,12 @@ Permissions notice: Sensor snapshot + + Recordings + + + Recording status + diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml index 791df9fc..b693d45d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/xml/dev_options.xml @@ -31,10 +31,10 @@ /> + + list = new ArrayList<>(); + boolean foundNonZero = false; + InputStream inputStream = classLoader.getResourceAsStream(filename); + try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) { + while (true) { + try { + String s = br.readLine(); + if (!s.isEmpty()) { + short n = Short.parseShort(s); + if (n != 0) { + foundNonZero = true; + } + if (foundNonZero) { + list.add(n); + } + } + } catch (Exception e) { + break; + } + } + } + short[] samples = new short[list.size()]; + for (int i = 0; i < list.size(); i++) { + samples[i] = list.get(i); + } + return samples; + } + + private void testDetectFundamentalFrequency(String sampleFilename, double expectedFrequency) + throws Exception { + short[] samples = readSamples(sampleFilename); + Double actualFrequency = audioAnalyzer.detectFundamentalFrequency(samples); + assertEquals(expectedFrequency, actualFrequency, expectedFrequency * 0.01); + } + + @Test + public void cokeBottle() throws Exception { + testDetectFundamentalFrequency("coke_bottle_325.samples", 325); + } + + @Test + public void guitar() throws Exception { + testDetectFundamentalFrequency("guitar_E_82_4069.samples", 82.4069); + testDetectFundamentalFrequency("guitar_A_110_000.samples", 110.000); + testDetectFundamentalFrequency("guitar_D_146_832.samples", 146.832); + testDetectFundamentalFrequency("guitar_G_195_998.samples", 195.998); + testDetectFundamentalFrequency("guitar_B_246_942.samples", 246.942); + testDetectFundamentalFrequency("guitar_E_329_628.samples", 329.628); + } + + @Test + public void melodica() throws Exception { + testDetectFundamentalFrequency("melodica_f3_174_614.samples", 174.614); + testDetectFundamentalFrequency("melodica_g3_195_998.samples", 195.998); + testDetectFundamentalFrequency("melodica_a3_220_000.samples", 220.000); + testDetectFundamentalFrequency("melodica_b3_246_942.samples", 246.942); + testDetectFundamentalFrequency("melodica_c4_261_626.samples", 261.626); + testDetectFundamentalFrequency("melodica_d4_293_665.samples", 293.665); + testDetectFundamentalFrequency("melodica_e4_329_628.samples", 329.628); + testDetectFundamentalFrequency("melodica_f4_349_228.samples", 349.228); + testDetectFundamentalFrequency("melodica_g4_391_995.samples", 391.995); + testDetectFundamentalFrequency("melodica_a4_440_000.samples", 440.000); + testDetectFundamentalFrequency("melodica_b4_493_883.samples", 493.883); + testDetectFundamentalFrequency("melodica_c5_523_251.samples", 523.251); + testDetectFundamentalFrequency("melodica_d5_587_330.samples", 587.330); + testDetectFundamentalFrequency("melodica_e5_659_255.samples", 659.255); + testDetectFundamentalFrequency("melodica_f5_698_456.samples", 698.456); + testDetectFundamentalFrequency("melodica_g5_783_991.samples", 783.991); + testDetectFundamentalFrequency("melodica_a5_880_000.samples", 880.000); + testDetectFundamentalFrequency("melodica_b5_987_767.samples", 987.767); + testDetectFundamentalFrequency("melodica_c6_1046_50.samples", 1046.50); + } + @Test + public void glass() throws Exception { + testDetectFundamentalFrequency("pint_glass_1797.samples", 1797); + } + + @Test + public void synthClarinet() throws Exception { + testDetectFundamentalFrequency("synth_clarinet_b2_123_471.samples", 123.471); + testDetectFundamentalFrequency("synth_clarinet_b3_246_942.samples", 246.942); + testDetectFundamentalFrequency("synth_clarinet_b4_493_883.samples", 493.883); + testDetectFundamentalFrequency("synth_clarinet_b5_987_767.samples", 987.767); + } + + @Test + public void synthGuitar() throws Exception { + testDetectFundamentalFrequency("synth_guitar_b2_123_471.samples", 123.471); + testDetectFundamentalFrequency("synth_guitar_b3_246_942.samples", 246.942); + testDetectFundamentalFrequency("synth_guitar_b4_493_883.samples", 493.883); + } + + @Test + public void synthPiano() throws Exception { + testDetectFundamentalFrequency("synth_piano_b2_123_471.samples", 123.471); + testDetectFundamentalFrequency("synth_piano_b3_246_942.samples", 246.942); + testDetectFundamentalFrequency("synth_piano_b4_493_883.samples", 493.883); + testDetectFundamentalFrequency("synth_piano_b5_987_767.samples", 987.767); + } + + @Test + public void tone() throws Exception { + testDetectFundamentalFrequency("tone_b3_246_942.samples", 246.942); + testDetectFundamentalFrequency("tone_b4_493_883.samples", 493.883); + testDetectFundamentalFrequency("tone_b5_987_767.samples", 987.767); + } + + @Test + public void xylophone() throws Exception { + testDetectFundamentalFrequency("xylophone_979.samples", 979); + testDetectFundamentalFrequency("xylophone_1081.samples", 1081); + testDetectFundamentalFrequency("xylophone_1250.samples", 1250); + testDetectFundamentalFrequency("xylophone_1295.samples", 1295); + testDetectFundamentalFrequency("xylophone_1466.samples", 1466); + testDetectFundamentalFrequency("xylophone_1594.samples", 1594); + testDetectFundamentalFrequency("xylophone_1802.samples", 1802); + testDetectFundamentalFrequency("xylophone_1950.samples", 1950); + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/coke_bottle_325.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/coke_bottle_325.samples new file mode 100644 index 00000000..906bd253 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/coke_bottle_325.samples @@ -0,0 +1,4096 @@ +-558 +-561 +-567 +-577 +-579 +-596 +-596 +-597 +-597 +-603 +-595 +-578 +-567 +-562 +-552 +-544 +-545 +-541 +-533 +-512 +-502 +-482 +-446 +-423 +-402 +-361 +-321 +-315 +-292 +-248 +-208 +-179 +-152 +-108 +-80 +-64 +-42 +4 +32 +49 +61 +92 +127 +135 +152 +171 +182 +193 +224 +261 +283 +308 +346 +357 +362 +378 +394 +404 +403 +422 +450 +465 +479 +498 +509 +510 +522 +532 +536 +549 +572 +563 +569 +578 +570 +564 +552 +553 +540 +528 +512 +496 +480 +450 +431 +412 +406 +395 +386 +384 +381 +374 +368 +360 +340 +328 +316 +303 +285 +271 +259 +237 +206 +179 +164 +131 +91 +59 +31 +3 +-25 +-50 +-87 +-116 +-138 +-164 +-195 +-217 +-250 +-287 +-320 +-351 +-390 +-420 +-441 +-469 +-488 +-497 +-505 +-514 +-523 +-538 +-538 +-553 +-566 +-574 +-584 +-586 +-597 +-597 +-598 +-607 +-618 +-634 +-640 +-643 +-648 +-658 +-649 +-632 +-621 +-603 +-576 +-558 +-535 +-508 +-485 +-464 +-441 +-409 +-384 +-364 +-340 +-319 +-305 +-274 +-255 +-213 +-162 +-118 +-82 +-64 +-33 +-10 +20 +58 +91 +133 +164 +183 +216 +234 +240 +259 +269 +281 +300 +321 +345 +369 +396 +421 +421 +439 +477 +501 +530 +551 +570 +581 +579 +568 +566 +571 +570 +573 +571 +587 +590 +585 +583 +569 +569 +564 +545 +540 +551 +540 +533 +526 +504 +477 +449 +426 +407 +393 +373 +351 +327 +300 +277 +265 +254 +243 +232 +233 +230 +207 +194 +169 +125 +89 +57 +24 +-8 +-39 +-68 +-90 +-124 +-163 +-201 +-234 +-272 +-296 +-300 +-323 +-345 +-366 +-395 +-414 +-436 +-454 +-469 +-486 +-498 +-530 +-552 +-565 +-603 +-631 +-633 +-644 +-644 +-630 +-619 +-613 +-608 +-605 +-604 +-615 +-623 +-630 +-631 +-618 +-617 +-614 +-604 +-582 +-574 +-555 +-538 +-523 +-503 +-481 +-457 +-415 +-383 +-359 +-307 +-283 +-244 +-207 +-165 +-124 +-105 +-73 +-50 +-26 +-6 +8 +27 +70 +108 +147 +186 +219 +250 +274 +298 +310 +308 +330 +351 +358 +386 +415 +430 +445 +454 +454 +468 +474 +492 +512 +519 +529 +537 +551 +563 +574 +586 +597 +604 +610 +605 +592 +587 +552 +523 +512 +494 +486 +483 +487 +489 +465 +461 +447 +424 +411 +383 +366 +348 +344 +322 +298 +282 +258 +240 +221 +193 +175 +152 +128 +105 +85 +56 +36 +19 +6 +-6 +-12 +-22 +-56 +-77 +-110 +-150 +-191 +-237 +-272 +-302 +-328 +-347 +-360 +-377 +-404 +-437 +-451 +-471 +-496 +-509 +-524 +-544 +-554 +-558 +-576 +-582 +-590 +-593 +-602 +-603 +-604 +-614 +-618 +-625 +-623 +-621 +-620 +-613 +-587 +-564 +-538 +-509 +-500 +-491 +-486 +-481 +-483 +-478 +-467 +-446 +-428 +-396 +-358 +-331 +-306 +-284 +-256 +-219 +-180 +-148 +-108 +-72 +-47 +-4 +33 +55 +92 +122 +154 +191 +215 +239 +252 +254 +262 +270 +290 +322 +364 +397 +424 +446 +459 +466 +475 +473 +476 +481 +481 +491 +495 +513 +527 +528 +520 +523 +534 +540 +545 +545 +549 +551 +541 +531 +532 +521 +521 +518 +521 +513 +495 +470 +430 +403 +367 +346 +329 +315 +306 +315 +322 +308 +292 +264 +245 +223 +186 +176 +165 +135 +112 +91 +73 +38 +14 +-6 +-37 +-46 +-64 +-90 +-127 +-167 +-193 +-222 +-247 +-260 +-270 +-282 +-297 +-319 +-348 +-386 +-431 +-471 +-500 +-519 +-534 +-543 +-553 +-543 +-542 +-553 +-555 +-566 +-577 +-580 +-582 +-588 +-593 +-603 +-612 +-614 +-615 +-609 +-603 +-590 +-577 +-564 +-551 +-550 +-549 +-542 +-527 +-505 +-467 +-425 +-379 +-335 +-303 +-280 +-263 +-244 +-240 +-238 +-210 +-174 +-141 +-110 +-85 +-37 +11 +17 +52 +85 +115 +157 +184 +218 +230 +246 +272 +283 +292 +339 +370 +381 +406 +403 +408 +402 +390 +410 +429 +453 +488 +510 +538 +557 +560 +575 +571 +564 +554 +545 +537 +550 +542 +528 +525 +508 +511 +508 +504 +495 +475 +467 +462 +456 +448 +432 +431 +427 +403 +391 +374 +350 +318 +293 +268 +239 +209 +190 +174 +158 +158 +147 +137 +117 +100 +82 +55 +27 +-8 +-33 +-65 +-100 +-124 +-159 +-187 +-217 +-246 +-269 +-292 +-319 +-343 +-355 +-360 +-382 +-398 +-409 +-429 +-457 +-475 +-480 +-501 +-524 +-550 +-569 +-589 +-610 +-626 +-639 +-636 +-643 +-640 +-622 +-620 +-604 +-588 +-583 +-568 +-560 +-558 +-554 +-546 +-527 +-512 +-500 +-498 +-484 +-474 +-454 +-431 +-401 +-357 +-324 +-294 +-263 +-224 +-200 +-169 +-135 +-103 +-71 +-45 +-15 +18 +34 +49 +61 +72 +86 +115 +146 +184 +222 +242 +269 +287 +321 +353 +363 +389 +417 +431 +444 +455 +459 +444 +444 +454 +465 +479 +493 +508 +525 +538 +541 +551 +544 +539 +544 +555 +565 +564 +560 +550 +524 +498 +473 +449 +429 +412 +405 +398 +393 +382 +373 +361 +356 +371 +370 +362 +358 +340 +320 +301 +269 +233 +201 +181 +166 +143 +126 +107 +70 +43 +23 +-7 +-37 +-61 +-75 +-79 +-94 +-114 +-147 +-179 +-216 +-254 +-281 +-315 +-346 +-381 +-413 +-444 +-466 +-479 +-490 +-507 +-519 +-513 +-507 +-508 +-524 +-533 +-546 +-562 +-580 +-593 +-604 +-615 +-622 +-620 +-623 +-629 +-635 +-640 +-631 +-628 +-606 +-587 +-567 +-546 +-524 +-497 +-475 +-456 +-428 +-415 +-407 +-384 +-373 +-354 +-338 +-314 +-289 +-262 +-228 +-188 +-128 +-79 +-32 +22 +65 +84 +108 +132 +159 +178 +201 +228 +239 +259 +265 +270 +283 +306 +323 +333 +355 +383 +415 +452 +478 +501 +524 +534 +551 +561 +567 +566 +541 +532 +517 +497 +497 +502 +512 +519 +525 +540 +550 +542 +552 +548 +539 +540 +532 +517 +490 +480 +461 +434 +401 +362 +333 +313 +296 +289 +284 +267 +265 +263 +267 +261 +259 +247 +219 +205 +172 +133 +92 +50 +5 +-28 +-61 +-95 +-124 +-152 +-167 +-183 +-197 +-209 +-229 +-248 +-262 +-277 +-281 +-299 +-338 +-375 +-415 +-446 +-486 +-530 +-552 +-583 +-598 +-603 +-610 +-615 +-613 +-610 +-599 +-592 +-586 +-566 +-578 +-581 +-589 +-593 +-595 +-608 +-615 +-617 +-620 +-616 +-605 +-600 +-568 +-557 +-532 +-489 +-447 +-405 +-361 +-309 +-271 +-245 +-224 +-202 +-192 +-177 +-168 +-148 +-143 +-144 +-125 +-104 +-61 +-19 +21 +68 +117 +166 +201 +219 +251 +293 +306 +315 +330 +360 +378 +384 +386 +382 +390 +396 +396 +413 +455 +476 +501 +528 +559 +598 +615 +631 +637 +641 +624 +600 +579 +552 +520 +487 +466 +459 +461 +469 +476 +480 +492 +501 +491 +473 +464 +464 +465 +455 +437 +426 +394 +358 +325 +284 +240 +205 +177 +154 +141 +126 +127 +110 +111 +116 +121 +117 +92 +62 +22 +-20 +-67 +-115 +-178 +-237 +-283 +-299 +-320 +-334 +-349 +-372 +-384 +-398 +-398 +-410 +-408 +-410 +-420 +-428 +-450 +-473 +-495 +-531 +-569 +-599 +-618 +-645 +-679 +-691 +-692 +-688 +-686 +-663 +-645 +-615 +-579 +-546 +-515 +-508 +-508 +-508 +-518 +-519 +-515 +-514 +-504 +-492 +-467 +-443 +-429 +-398 +-366 +-329 +-269 +-219 +-176 +-126 +-73 +-36 +-21 +-11 +6 +20 +31 +38 +37 +48 +63 +68 +87 +106 +141 +190 +237 +292 +343 +390 +424 +435 +451 +467 +471 +482 +489 +492 +488 +469 +462 +467 +453 +455 +469 +494 +521 +541 +569 +591 +604 +615 +610 +603 +587 +557 +552 +531 +502 +468 +445 +424 +399 +392 +399 +408 +416 +429 +432 +435 +430 +429 +417 +405 +391 +367 +331 +288 +235 +184 +140 +83 +35 +3 +-24 +-39 +-41 +-44 +-59 +-72 +-89 +-100 +-110 +-131 +-161 +-194 +-233 +-276 +-329 +-377 +-413 +-455 +-481 +-509 +-522 +-541 +-554 +-560 +-562 +-550 +-553 +-541 +-541 +-548 +-548 +-556 +-566 +-595 +-626 +-658 +-685 +-706 +-716 +-715 +-711 +-694 +-680 +-645 +-628 +-593 +-560 +-537 +-500 +-468 +-428 +-418 +-396 +-370 +-354 +-342 +-341 +-341 +-313 +-294 +-278 +-222 +-186 +-149 +-106 +-67 +-15 +35 +83 +142 +175 +203 +227 +222 +236 +229 +233 +252 +260 +278 +296 +317 +339 +362 +383 +419 +447 +483 +526 +563 +602 +618 +624 +628 +618 +604 +606 +586 +574 +581 +557 +545 +534 +536 +540 +548 +548 +555 +565 +570 +568 +559 +554 +524 +500 +477 +451 +426 +403 +371 +343 +314 +296 +276 +260 +258 +253 +250 +248 +245 +235 +213 +190 +169 +143 +96 +50 +23 +-28 +-74 +-109 +-152 +-188 +-228 +-255 +-271 +-289 +-305 +-313 +-322 +-333 +-350 +-364 +-383 +-419 +-440 +-464 +-498 +-525 +-554 +-576 +-617 +-645 +-652 +-661 +-663 +-667 +-658 +-641 +-632 +-627 +-618 +-614 +-607 +-599 +-601 +-599 +-600 +-599 +-603 +-610 +-597 +-594 +-593 +-568 +-542 +-513 +-474 +-441 +-399 +-359 +-312 +-263 +-225 +-190 +-157 +-135 +-111 +-93 +-86 +-86 +-76 +-69 +-52 +-17 +12 +45 +82 +128 +159 +195 +243 +280 +312 +340 +369 +407 +422 +436 +458 +466 +468 +474 +476 +479 +484 +499 +514 +529 +547 +580 +610 +637 +660 +671 +682 +676 +661 +636 +613 +587 +549 +525 +515 +499 +489 +482 +485 +480 +480 +479 +473 +470 +472 +483 +479 +467 +462 +439 +401 +367 +323 +275 +229 +178 +137 +97 +65 +46 +24 +13 +9 +-3 +0 +-16 +-35 +-61 +-96 +-132 +-178 +-217 +-260 +-298 +-340 +-368 +-409 +-438 +-470 +-499 +-514 +-532 +-536 +-544 +-540 +-531 +-531 +-541 +-554 +-564 +-569 +-591 +-623 +-640 +-669 +-700 +-721 +-726 +-736 +-733 +-721 +-706 +-672 +-639 +-601 +-577 +-560 +-536 +-508 +-485 +-465 +-446 +-437 +-424 +-412 +-405 +-388 +-374 +-369 +-346 +-298 +-250 +-209 +-179 +-130 +-74 +-35 +12 +53 +87 +114 +137 +156 +173 +189 +193 +193 +200 +237 +260 +294 +324 +342 +382 +415 +447 +477 +515 +542 +559 +568 +584 +585 +564 +553 +541 +533 +520 +512 +510 +516 +528 +550 +564 +578 +593 +612 +620 +621 +634 +625 +603 +582 +560 +529 +495 +466 +436 +402 +368 +346 +326 +305 +298 +300 +297 +290 +301 +301 +284 +270 +253 +237 +202 +150 +106 +61 +9 +-37 +-72 +-100 +-134 +-162 +-166 +-181 +-199 +-205 +-213 +-242 +-265 +-275 +-296 +-329 +-354 +-380 +-420 +-463 +-492 +-525 +-561 +-589 +-618 +-632 +-642 +-644 +-641 +-642 +-630 +-609 +-587 +-571 +-564 +-570 +-580 +-595 +-606 +-618 +-638 +-659 +-669 +-660 +-634 +-615 +-589 +-566 +-536 +-518 +-487 +-435 +-415 +-382 +-335 +-295 +-283 +-247 +-217 +-190 +-174 +-157 +-131 +-128 +-114 +-101 +-80 +-57 +-10 +45 +81 +119 +176 +234 +271 +288 +297 +311 +309 +310 +321 +335 +354 +357 +373 +391 +415 +439 +466 +485 +502 +524 +549 +570 +582 +611 +623 +632 +633 +630 +622 +603 +585 +562 +541 +502 +482 +468 +462 +475 +485 +497 +500 +515 +514 +493 +479 +473 +442 +408 +394 +368 +343 +319 +313 +292 +266 +257 +241 +214 +190 +174 +158 +140 +114 +94 +80 +60 +32 +0 +-35 +-70 +-122 +-173 +-225 +-277 +-315 +-347 +-358 +-382 +-388 +-389 +-389 +-397 +-402 +-399 +-426 +-449 +-465 +-490 +-521 +-539 +-558 +-572 +-586 +-600 +-609 +-631 +-639 +-646 +-664 +-668 +-659 +-657 +-648 +-634 +-608 +-590 +-583 +-563 +-548 +-528 +-520 +-517 +-509 +-516 +-516 +-501 +-477 +-445 +-413 +-383 +-329 +-283 +-247 +-194 +-166 +-138 +-113 +-81 +-51 +-36 +-17 +6 +23 +37 +67 +95 +117 +126 +150 +170 +183 +202 +227 +251 +286 +342 +369 +404 +438 +468 +482 +485 +497 +485 +474 +477 +480 +486 +507 +520 +540 +558 +587 +611 +620 +628 +615 +614 +599 +575 +568 +556 +549 +544 +533 +527 +518 +484 +454 +435 +407 +380 +372 +375 +366 +383 +408 +405 +400 +389 +384 +360 +310 +273 +228 +178 +144 +112 +76 +55 +43 +22 +-3 +-20 +-36 +-67 +-111 +-147 +-185 +-226 +-245 +-270 +-288 +-308 +-335 +-360 +-399 +-430 +-470 +-515 +-536 +-556 +-575 +-569 +-571 +-563 +-550 +-542 +-541 +-553 +-551 +-561 +-589 +-616 +-628 +-653 +-679 +-683 +-681 +-681 +-680 +-650 +-627 +-623 +-608 +-591 +-572 +-556 +-537 +-498 +-476 +-453 +-413 +-385 +-358 +-331 +-316 +-299 +-281 +-251 +-222 +-187 +-159 +-132 +-84 +-37 +19 +46 +85 +126 +153 +169 +184 +196 +189 +201 +215 +218 +227 +255 +267 +284 +310 +351 +384 +407 +444 +465 +480 +506 +537 +539 +548 +565 +581 +587 +583 +591 +578 +569 +563 +563 +553 +549 +555 +557 +566 +569 +569 +572 +575 +563 +551 +533 +506 +466 +428 +419 +382 +352 +353 +334 +324 +322 +323 +313 +282 +271 +259 +238 +220 +208 +188 +166 +138 +106 +68 +30 +-6 +-49 +-88 +-126 +-161 +-196 +-220 +-239 +-257 +-276 +-284 +-293 +-310 +-320 +-348 +-386 +-424 +-454 +-493 +-526 +-543 +-561 +-586 +-599 +-605 +-610 +-619 +-625 +-629 +-631 +-619 +-609 +-602 +-600 +-589 +-581 +-577 +-574 +-570 +-568 +-579 +-580 +-576 +-571 +-575 +-576 +-558 +-534 +-504 +-463 +-428 +-394 +-352 +-311 +-282 +-261 +-240 +-228 +-207 +-190 +-172 +-136 +-111 +-92 +-62 +-32 +-4 +37 +79 +108 +139 +176 +211 +237 +262 +295 +325 +352 +371 +383 +380 +388 +384 +385 +383 +382 +395 +412 +437 +476 +510 +527 +557 +577 +591 +590 +588 +597 +586 +577 +574 +556 +550 +543 +534 +527 +521 +520 +511 +503 +501 +496 +495 +488 +473 +460 +456 +451 +434 +408 +389 +362 +313 +281 +250 +217 +191 +173 +169 +154 +148 +148 +126 +113 +97 +76 +43 +13 +-17 +-56 +-91 +-139 +-179 +-214 +-258 +-287 +-316 +-331 +-355 +-384 +-397 +-414 +-440 +-457 +-465 +-476 +-488 +-499 +-508 +-521 +-543 +-562 +-582 +-606 +-629 +-646 +-656 +-658 +-651 +-646 +-635 +-627 +-611 +-592 +-576 +-561 +-556 +-553 +-546 +-537 +-530 +-528 +-512 +-516 +-513 +-486 +-470 +-449 +-404 +-370 +-360 +-327 +-287 +-239 +-199 +-161 +-115 +-88 +-55 +-25 +0 +24 +51 +60 +73 +89 +117 +147 +156 +182 +212 +230 +250 +282 +311 +347 +371 +402 +418 +423 +447 +452 +447 +454 +463 +468 +472 +473 +492 +511 +518 +541 +558 +565 +575 +586 +593 +597 +594 +583 +566 +558 +549 +539 +536 +513 +493 +475 +448 +422 +405 +389 +387 +380 +379 +380 +371 +367 +354 +328 +310 +293 +261 +225 +203 +181 +160 +140 +119 +90 +69 +54 +30 +11 +-17 +-38 +-71 +-114 +-145 +-165 +-197 +-229 +-245 +-281 +-313 +-345 +-377 +-407 +-439 +-462 +-495 +-505 +-515 +-523 +-528 +-524 +-534 +-553 +-556 +-569 +-582 +-592 +-597 +-612 +-625 +-635 +-635 +-635 +-638 +-635 +-632 +-621 +-613 +-601 +-595 +-591 +-581 +-558 +-545 +-526 +-496 +-471 +-434 +-418 +-390 +-369 +-352 +-327 +-303 +-281 +-248 +-210 +-171 +-129 +-100 +-56 +-6 +15 +36 +71 +104 +131 +148 +165 +189 +213 +234 +255 +269 +300 +323 +339 +351 +359 +382 +394 +403 +420 +452 +477 +503 +520 +544 +561 +558 +562 +554 +551 +553 +551 +555 +570 +570 +574 +572 +576 +578 +562 +559 +538 +524 +509 +488 +469 +453 +433 +427 +415 +393 +387 +374 +361 +341 +325 +305 +287 +276 +269 +261 +255 +250 +230 +209 +182 +152 +118 +81 +37 +-3 +-30 +-63 +-92 +-112 +-136 +-157 +-180 +-196 +-227 +-258 +-290 +-326 +-350 +-385 +-412 +-437 +-453 +-476 +-488 +-497 +-517 +-532 +-548 +-565 +-579 +-580 +-585 +-588 +-595 +-588 +-583 +-573 +-577 +-587 +-590 +-596 +-606 +-621 +-624 +-636 +-627 +-627 +-607 +-567 +-553 +-536 +-509 +-473 +-460 +-444 +-411 +-383 +-370 +-353 +-326 +-295 +-266 +-240 +-215 +-185 +-156 +-123 +-86 +-65 +-31 +16 +46 +57 +93 +148 +180 +200 +221 +252 +256 +258 +283 +296 +308 +317 +337 +360 +384 +405 +441 +468 +486 +508 +538 +548 +553 +577 +578 +578 +580 +586 +580 +577 +575 +578 +582 +571 +574 +575 +570 +566 +570 +569 +552 +544 +546 +530 +501 +493 +471 +434 +415 +399 +368 +351 +345 +328 +315 +302 +297 +275 +256 +239 +220 +201 +167 +137 +106 +70 +25 +-17 +-57 +-94 +-121 +-150 +-187 +-219 +-244 +-269 +-287 +-298 +-321 +-343 +-363 +-390 +-415 +-429 +-456 +-498 +-529 +-552 +-587 +-603 +-609 +-626 +-639 +-647 +-649 +-657 +-654 +-651 +-647 +-638 +-638 +-633 +-628 +-635 +-633 +-627 +-625 +-623 +-619 +-609 +-603 +-590 +-565 +-539 +-528 +-493 +-465 +-434 +-384 +-342 +-310 +-275 +-240 +-233 +-201 +-188 +-161 +-135 +-107 +-79 +-61 +-22 +1 +31 +53 +95 +116 +152 +184 +204 +245 +262 +291 +312 +333 +350 +374 +401 +413 +417 +436 +436 +453 +467 +475 +521 +542 +574 +598 +619 +628 +623 +628 +633 +625 +616 +619 +607 +605 +592 +587 +577 +556 +547 +533 +515 +505 +497 +495 +494 +495 +496 +481 +466 +462 +450 +421 +405 +381 +344 +306 +282 +259 +229 +215 +189 +169 +154 +128 +100 +65 +31 +-12 +-46 +-81 +-115 +-148 +-177 +-200 +-232 +-262 +-302 +-349 +-385 +-405 +-420 +-442 +-459 +-471 +-487 +-500 +-518 +-524 +-531 +-559 +-572 +-586 +-611 +-633 +-654 +-681 +-695 +-706 +-714 +-711 +-715 +-693 +-684 +-681 +-678 +-674 +-665 +-658 +-646 +-620 +-586 +-576 +-557 +-541 +-517 +-498 +-477 +-445 +-425 +-399 +-368 +-332 +-290 +-264 +-220 +-174 +-143 +-110 +-70 +-33 +-5 +22 +39 +46 +66 +86 +103 +125 +161 +188 +212 +249 +279 +307 +337 +367 +388 +416 +450 +474 +491 +519 +527 +536 +551 +555 +571 +574 +574 +586 +607 +606 +599 +604 +608 +613 +620 +630 +629 +637 +622 +606 +594 +567 +548 +528 +505 +491 +477 +459 +454 +447 +443 +434 +423 +413 +408 +395 +383 +366 +340 +317 +283 +258 +222 +204 +175 +141 +116 +76 +48 +15 +-31 +-59 +-84 +-106 +-114 +-131 +-151 +-184 +-217 +-241 +-287 +-324 +-364 +-396 +-439 +-469 +-492 +-514 +-536 +-557 +-557 +-572 +-566 +-566 +-579 +-580 +-591 +-600 +-605 +-629 +-645 +-645 +-661 +-660 +-663 +-668 +-687 +-702 +-706 +-709 +-690 +-679 +-657 +-633 +-609 +-573 +-548 +-522 +-492 +-462 +-433 +-421 +-399 +-369 +-344 +-330 +-308 +-283 +-252 +-207 +-167 +-142 +-103 +-45 +-11 +14 +40 +73 +97 +129 +148 +170 +203 +207 +214 +230 +253 +265 +291 +320 +345 +370 +395 +421 +464 +498 +519 +541 +568 +585 +598 +615 +611 +610 +616 +606 +595 +585 +577 +582 +593 +600 +596 +599 +613 +605 +606 +615 +591 +575 +568 +545 +518 +511 +497 +465 +438 +425 +406 +389 +373 +358 +350 +337 +317 +308 +298 +278 +262 +244 +224 +191 +157 +99 +56 +15 +-35 +-69 +-96 +-135 +-178 +-194 +-203 +-222 +-251 +-261 +-292 +-327 +-331 +-354 +-389 +-416 +-434 +-475 +-508 +-528 +-554 +-580 +-607 +-617 +-632 +-656 +-668 +-664 +-663 +-671 +-652 +-640 +-649 +-643 +-635 +-646 +-656 +-653 +-663 +-673 +-676 +-674 +-658 +-639 +-614 +-592 +-568 +-536 +-511 +-480 +-436 +-394 +-366 +-327 +-297 +-285 +-243 +-206 +-200 +-175 +-154 +-134 +-113 +-92 +-59 +-36 +-16 +20 +62 +110 +158 +198 +228 +246 +274 +306 +309 +320 +350 +358 +369 +389 +415 +419 +433 +453 +466 +486 +510 +535 +552 +580 +600 +607 +621 +638 +639 +648 +638 +619 +609 +596 +570 +561 +567 +548 +543 +543 +550 +554 +550 +544 +537 +525 +506 +496 +483 +460 +441 +435 +415 +388 +364 +340 +302 +277 +272 +248 +205 +195 +181 +146 +125 +118 +96 +59 +27 +-15 +-51 +-90 +-132 +-175 +-222 +-264 +-296 +-316 +-344 +-372 +-391 +-405 +-428 +-458 +-480 +-496 +-519 +-533 +-549 +-559 +-586 +-601 +-611 +-636 +-647 +-658 +-671 +-690 +-696 +-700 +-706 +-721 +-712 +-701 +-696 +-677 +-669 +-655 +-646 +-629 +-624 +-619 +-597 +-583 +-568 +-549 +-525 +-495 +-467 +-450 +-396 +-352 +-324 +-288 +-262 +-227 +-192 +-154 +-113 +-86 +-55 +-28 +-5 +28 +68 +102 +117 +131 +158 +176 +206 +233 +254 +288 +309 +332 +372 +403 +434 +457 +477 +491 +504 +518 +529 +547 +561 +566 +576 +586 +594 +617 +627 +624 +634 +640 +636 +625 +636 +648 +625 +625 +618 +609 +595 +582 +574 +547 +521 +507 +480 +455 +446 +438 +427 +407 +404 +392 +370 +358 +346 +346 +323 +301 +264 +236 +215 +185 +144 +105 +73 +39 +6 +-24 +-55 +-93 +-110 +-145 +-180 +-201 +-221 +-253 +-285 +-315 +-333 +-357 +-383 +-404 +-445 +-461 +-484 +-523 +-551 +-573 +-594 +-624 +-641 +-647 +-650 +-664 +-655 +-656 +-653 +-661 +-669 +-672 +-685 +-686 +-692 +-696 +-701 +-690 +-683 +-678 +-661 +-644 +-626 +-604 +-587 +-571 +-546 +-528 +-510 +-476 +-428 +-390 +-356 +-322 +-284 +-249 +-236 +-206 +-181 +-163 +-148 +-113 +-78 +-42 +0 +33 +75 +113 +152 +182 +205 +236 +267 +290 +300 +311 +325 +355 +391 +424 +441 +470 +487 +496 +513 +523 +543 +547 +564 +583 +607 +631 +648 +658 +662 +657 +651 +644 +620 +613 +589 +572 +578 +566 +564 +561 +555 +561 +556 +547 +535 +506 +487 +468 +441 +431 +412 +408 +396 +380 +372 +356 +335 +307 +284 +261 +233 +193 +172 +160 +145 +117 +85 +71 +36 +-14 +-45 +-80 +-130 +-174 +-214 +-244 +-277 +-305 +-313 +-336 +-361 +-378 +-393 +-413 +-433 +-456 +-478 +-501 +-531 +-546 +-567 +-585 +-597 +-607 +-613 +-625 +-640 +-655 +-676 +-679 +-680 +-693 +-699 +-690 +-686 +-681 +-671 +-663 +-661 +-656 +-656 +-647 +-637 +-631 +-595 +-569 +-553 +-523 +-487 +-459 +-430 +-379 +-337 +-302 +-268 +-237 +-210 +-200 +-173 +-137 +-104 +-78 +-43 +-8 +9 +33 +67 +91 +113 +142 +173 +213 +236 +277 +315 +341 +375 +391 +408 +432 +462 +480 +486 +498 +518 +528 +541 +559 +574 +599 +608 +610 +635 +630 +625 +641 +633 +626 +625 +622 +614 +599 +594 +586 +564 +538 +520 +513 +504 +502 +506 +498 +483 +472 +463 +454 +425 +410 +397 +365 +348 +330 +296 +262 +246 +227 +205 +172 +148 +127 +93 +65 +36 +11 +-14 +-40 +-56 +-78 +-104 +-128 +-165 +-215 +-260 +-303 +-330 +-360 +-394 +-406 +-417 +-440 +-452 +-459 +-475 +-500 +-521 +-526 +-541 +-572 +-583 +-601 +-612 +-626 +-637 +-639 +-662 +-660 +-664 +-678 +-689 +-687 +-682 +-691 +-681 +-650 +-624 +-613 +-592 +-560 +-554 +-551 +-536 +-522 +-517 +-508 +-491 +-466 +-440 +-399 +-343 +-307 +-266 +-222 +-194 +-167 +-126 +-79 +-37 +-21 +5 +49 +74 +93 +109 +131 +148 +165 +177 +204 +228 +245 +265 +283 +313 +352 +391 +421 +452 +489 +516 +517 +509 +509 +517 +518 +523 +552 +555 +561 +568 +577 +592 +598 +606 +607 +618 +618 +634 +622 +593 +585 +561 +538 +522 +501 +484 +457 +435 +427 +401 +385 +366 +351 +356 +363 +367 +361 +371 +357 +338 +312 +299 +272 +235 +208 +171 +133 +98 +74 +28 +-5 +-28 +-42 +-74 +-104 +-117 +-139 +-165 +-187 +-217 +-253 +-291 +-315 +-340 +-378 +-393 +-416 +-461 +-489 +-520 +-537 +-553 +-570 +-576 +-576 +-575 +-580 +-577 +-583 +-580 +-583 +-600 +-608 +-622 +-629 +-637 +-664 +-682 +-680 +-686 +-697 +-679 +-652 +-625 +-614 +-578 +-536 +-522 +-504 +-479 +-454 +-439 +-413 +-367 +-349 +-337 +-295 +-264 +-258 +-246 +-203 +-167 +-151 +-109 +-59 +-29 +0 +48 +101 +127 +159 +198 +226 +248 +267 +279 +289 +283 +275 +292 +316 +352 +391 +425 +437 +451 +478 +510 +534 +540 +555 +572 +578 +578 +598 +600 +593 +603 +598 +593 +584 +575 +563 +556 +552 +548 +535 +517 +526 +538 +536 +532 +529 +505 +473 +439 +423 +395 +356 +335 +320 +305 +295 +311 +304 +278 +268 +266 +248 +218 +196 +174 +137 +104 +86 +72 +33 +-5 +-26 +-63 +-110 +-152 +-182 +-225 +-266 +-283 +-303 +-329 +-340 +-337 +-347 +-364 +-375 +-398 +-426 +-456 +-488 +-521 +-552 +-573 +-591 +-595 +-601 +-596 +-599 +-603 +-611 +-619 +-624 +-639 +-642 +-647 +-644 +-639 +-635 +-623 +-611 +-611 +-595 +-595 +-592 +-592 +-581 +-554 +-544 +-516 +-477 +-450 +-410 +-352 +-296 +-244 +-229 +-196 +-171 +-183 +-167 +-140 +-119 +-102 +-74 +-33 +-4 +22 +59 +89 +113 +142 +169 +209 +216 +237 +269 +294 +325 +350 +381 +407 +424 +438 +453 +450 +440 +446 +459 +473 +505 +538 +561 +596 +608 +624 +623 +608 +613 +597 +578 +566 +559 +544 +532 +531 +535 +527 +518 +527 +514 +509 +498 +484 +469 +453 +445 +430 +426 +416 +409 +400 +372 +349 +322 +280 +238 +197 +172 +159 +144 +129 +118 +101 +79 +54 +27 +-10 +-49 +-92 +-117 +-156 +-201 +-224 +-259 +-294 +-316 +-332 +-355 +-370 +-389 +-400 +-428 +-462 +-476 +-509 +-531 +-534 +-540 +-547 +-556 +-557 +-570 +-600 +-618 +-636 +-660 +-682 +-681 +-672 +-673 +-668 +-657 +-640 +-625 +-615 +-597 +-587 +-580 +-575 +-564 +-548 +-533 +-521 +-509 +-482 +-445 +-400 +-365 +-341 +-311 +-276 +-240 +-209 +-185 +-163 +-142 +-111 +-72 +-13 +29 +39 +61 +90 +106 +130 +145 +154 +162 +173 +205 +236 +259 +300 +324 +335 +370 +397 +422 +444 +447 +463 +478 +487 +502 +513 +523 +540 +563 +582 +587 +595 +600 +585 +581 +579 +575 +558 +551 +549 +555 +560 +548 +551 +532 +513 +482 +465 +464 +446 +434 +423 +405 +397 +404 +406 +406 +390 +387 +367 +339 +315 +285 +258 +205 +174 +154 +133 +103 +91 +59 +20 +-12 +-46 +-89 +-134 +-163 +-196 +-215 +-246 +-261 +-290 +-309 +-325 +-348 +-370 +-401 +-421 +-465 +-494 +-529 +-556 +-571 +-584 +-585 +-579 +-572 +-575 +-581 +-608 +-620 +-631 +-649 +-662 +-679 +-685 +-687 +-674 +-668 +-665 +-644 +-629 +-632 +-625 +-601 +-598 +-595 +-569 +-534 +-513 +-472 +-433 +-401 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_A_110_000.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_A_110_000.samples new file mode 100644 index 00000000..1eaae57a --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_A_110_000.samples @@ -0,0 +1,4096 @@ +-63 +-47 +-2533 +-170 +-13 +5980 +9048 +11603 +13086 +13155 +12046 +10509 +-128 +9051 +9789 +-32 +13858 +-78 +-20 +18981 +-26 +-26 +-10 +-87 +-116 +13595 +-39 +-76 +17779 +17216 +-95 +-44 +-62 +9764 +10253 +11890 +-106 +15672 +16404 +-44 +-30 +-50 +-50 +-75 +-35 +4217 +1352 +-471 +-86 +65 +1625 +2926 +-109 +2141 +-138 +-3034 +-5780 +-56 +-8656 +-69 +-59 +-105 +-7346 +-84 +-5813 +-115 +-42 +-97 +-29 +-11259 +-110 +-45 +-8 +-12796 +-12212 +-12026 +-12466 +-13466 +-84 +-15615 +-79 +-74 +-15074 +-49 +-13774 +-13297 +-58 +-5 +-11516 +-29 +-9386 +-7 +-7106 +-50 +-32 +-4603 +-3785 +-3236 +-43 +-4294 +-9 +-46 +-6835 +-5784 +-19 +-1788 +-250 +512 +-12 +-90 +1288 +1656 +-49 +-39 +-69 +-3 +1886 +-80 +4367 +-82 +-2 +-111 +-10 +9591 +-17 +7764 +5380 +2602 +-17 +-975 +-662 +-66 +-124 +-55 +-95 +7499 +-72 +6503 +-74 +4387 +-116 +-110 +-110 +-78 +3880 +-61 +-128 +361 +-99 +-29 +2573 +3641 +-89 +-65 +5176 +-127 +4612 +4124 +-11 +2856 +1653 +-50 +-20 +-87 +-127 +-101 +-106 +-1784 +-56 +-1 +4116 +4153 +3590 +2913 +2404 +-70 +1339 +259 +-1171 +-2528 +-3306 +-77 +-2003 +-130 +-37 +3918 +5236 +-23 +5900 +-46 +5182 +4869 +-38 +3954 +-7 +-51 +-103 +-116 +-1474 +-510 +1293 +3592 +-114 +8280 +10050 +-98 +-116 +-114 +-81 +-78 +8563 +6482 +-19 +-9 +-930 +-2974 +-4320 +-4840 +-4507 +-3233 +-947 +2159 +5500 +-121 +10104 +-78 +-8 +-112 +7543 +5638 +-83 +-81 +-4 +-459 +-96 +-72 +-40 +3385 +2885 +1323 +-4 +-2766 +-126 +-5020 +-117 +-5024 +-117 +-3515 +-2 +-65 +-14 +4684 +-13 +-40 +7278 +5466 +-40 +-981 +-4309 +-6903 +-49 +-9184 +-9198 +-8849 +-8425 +-8068 +-17 +-62 +-5505 +-25 +-110 +-49 +-25 +9578 +10790 +10843 +10034 +-71 +-55 +4896 +-76 +1346 +-23 +-1223 +-83 +-17 +-85 +-94 +-69 +-2952 +-437 +-112 +-85 +-70 +-20 +3842 +-41 +111 +-1411 +-2179 +-80 +-39 +2312 +-108 +7748 +9266 +-53 +-5 +-94 +-105 +-7 +-51 +-40 +17677 +19062 +19515 +-61 +17451 +15690 +13902 +12039 +9839 +-122 +3643 +-61 +-3497 +-109 +-7127 +-24 +-5843 +-4331 +-2744 +-70 +-428 +-113 +-73 +-84 +-1521 +-28 +-19 +-4515 +-2 +-72 +-6 +-7158 +-7631 +-19 +-58 +-12948 +-27 +-18377 +-50 +-22472 +-23181 +-22946 +-21985 +-4 +-86 +-16271 +-54 +-29 +-10 +-123 +-11735 +-11682 +-66 +-24 +-109 +-9183 +-7914 +-6299 +-11 +-69 +-3252 +-33 +-7599 +-36 +-5 +-97 +-46 +-16047 +-12952 +-70 +-97 +-8844 +-38 +-114 +-14270 +-21 +-99 +-13261 +-11695 +-20 +-8366 +-6855 +-87 +-110 +-99 +-123 +-66 +-103 +114 +-61 +-71 +-98 +8312 +-52 +-128 +8465 +-41 +-52 +-30 +10276 +-55 +14929 +-33 +-53 +-6 +18749 +17478 +15705 +-33 +-21 +-116 +10013 +-3 +-106 +14704 +17255 +-48 +-105 +17955 +-19 +-46 +-86 +-5 +12061 +-37 +11811 +-46 +-123 +10862 +10339 +-79 +-39 +-109 +-101 +-89 +877 +617 +-29 +-496 +-1527 +-2698 +-22 +-10 +-5591 +-56 +-17 +-5624 +-5359 +-83 +-6102 +-7164 +-94 +-2 +-9908 +-10432 +-48 +-10977 +-19 +-11162 +-11657 +-110 +-14027 +-25 +-16312 +-16616 +-59 +-16111 +-13 +-15756 +-113 +-101 +-13231 +-11189 +-47 +-59 +-6278 +-6358 +-7383 +-8938 +-103 +-10930 +-128 +-8700 +-6315 +-3794 +-44 +-1022 +-1484 +-2798 +-115 +-5054 +-5057 +-8 +-27 +-123 +-1710 +-998 +24 +1559 +-49 +-55 +-2 +-34 +7686 +6734 +5494 +4408 +-22 +-67 +-75 +4118 +-90 +-105 +-103 +-55 +2671 +4144 +5962 +-127 +8496 +-112 +-70 +-122 +4941 +3446 +-15 +-41 +-62 +613 +542 +-34 +2142 +3961 +-67 +-43 +-69 +-108 +-91 +6148 +4173 +-69 +-14 +-1006 +-107 +-2753 +-120 +-13 +-1224 +-435 +-60 +-1 +-79 +2330 +-119 +3660 +3338 +-94 +541 +-1212 +-105 +-3510 +-71 +-94 +-2250 +-86 +-91 +1536 +-94 +4401 +-24 +-77 +-68 +-14 +4423 +3105 +-115 +-123 +-168 +-110 +-48 +-92 +-80 +-2294 +-21 +3194 +6924 +10551 +13410 +14950 +14922 +13419 +10811 +-32 +-118 +1835 +-50 +-1235 +-1958 +-2293 +-2007 +-74 +1096 +-91 +4896 +5736 +-84 +-72 +4428 +3365 +2428 +-64 +2370 +3699 +5681 +-3 +-5 +9057 +-7 +-41 +-40 +-49 +-1523 +-3219 +-4284 +-93 +-9 +-4295 +-3988 +-3721 +-3226 +-114 +-444 +-98 +-43 +5476 +6492 +6760 +6178 +4679 +2402 +-18 +-20 +-48 +-48 +-7568 +-8 +-51 +-95 +-51 +-71 +-112 +-8148 +-4496 +39 +-83 +8062 +10094 +-77 +9222 +7022 +-53 +-48 +-74 +568 +295 +92 +-152 +-89 +-22 +119 +-76 +1115 +-113 +859 +350 +-155 +-487 +-59 +-437 +-201 +17 +-74 +319 +-55 +578 +619 +557 +533 +810 +-100 +3362 +5725 +8542 +-26 +14340 +16941 +19230 +21043 +22052 +21872 +20315 +-95 +14187 +-110 +-102 +6759 +-34 +-50 +-119 +-31 +-9 +-201 +-76 +-916 +-752 +-105 +-1666 +-2973 +-34 +-4273 +-2992 +-100 +-54 +-17 +4148 +2674 +-401 +-65 +-27 +-11753 +-13796 +-14561 +-30 +-13722 +-13226 +-56 +-14333 +-110 +-69 +-19963 +-62 +-22451 +-43 +-20933 +-18305 +-3 +-92 +-8692 +-34 +-7599 +-58 +-9386 +-9662 +-75 +-8654 +-8178 +-41 +-7891 +-119 +-7839 +-99 +-96 +-10736 +-12169 +-85 +-59 +-104 +-58 +-11395 +-11150 +-11515 +-12447 +-13753 +-14997 +-32 +-15319 +-114 +-11743 +-9152 +-6559 +-4233 +-96 +-20 +-46 +-93 +-42 +-63 +-77 +-2289 +-45 +-103 +6207 +-125 +-40 +-71 +12908 +-17 +12398 +-19 +11838 +12039 +12652 +-69 +-66 +14635 +-123 +13906 +-34 +-73 +-26 +14166 +-109 +-12 +16491 +-31 +-41 +15138 +-66 +14179 +14168 +14408 +14688 +14673 +14083 +12876 +11341 +-90 +8800 +8049 +7442 +6720 +-3 +-59 +2113 +-37 +-124 +-123 +-68 +-645 +-197 +-84 +-22 +-4296 +-6571 +-8124 +-32 +-7643 +-6131 +-80 +-3987 +-4330 +-5602 +-9 +-9426 +-41 +-12932 +-14271 +-15331 +-12 +-47 +-16832 +-14 +-15335 +-68 +-45 +-11964 +-12247 +-13189 +-14230 +-14767 +-14491 +-13511 +-12173 +-95 +-9713 +-73 +-7921 +-7107 +-6394 +-33 +-93 +-102 +-5871 +-6109 +-36 +-80 +-6860 +-109 +-96 +-125 +-1 +-124 +-102 +4 +-77 +3158 +4359 +-55 +5965 +6183 +-14 +4981 +-11 +1919 +-20 +-153 +324 +1813 +-34 +5663 +7020 +-63 +-117 +-1 +-70 +7254 +5945 +-119 +3174 +2142 +1401 +-55 +-62 +-79 +-127 +3697 +4961 +-121 +-91 +7433 +7971 +-82 +-116 +7487 +5691 +-69 +857 +-72 +-10 +-125 +-758 +-107 +-124 +2056 +2577 +2677 +2579 +-6 +-98 +2893 +-13 +-84 +1054 +-84 +-2477 +-94 +-5363 +-28 +-94 +-3324 +-10 +1548 +-59 +-41 +7520 +-43 +7983 +-70 +-93 +3376 +-55 +-2219 +-127 +-71 +-7587 +-6529 +-127 +-415 +-98 +-122 +-10 +-88 +11352 +-42 +-91 +-103 +-121 +-57 +-87 +-125 +4895 +5205 +5147 +-18 +-29 +-51 +1039 +259 +110 +546 +1296 +-88 +-83 +2063 +1840 +2084 +3163 +-101 +7228 +-47 +10247 +10109 +8746 +-90 +-123 +-27 +852 +-214 +-1178 +-106 +-11 +-34 +-128 +-4835 +-4818 +-4241 +-2969 +-978 +1543 +-92 +6732 +8510 +-40 +8566 +-88 +-70 +-4 +-1961 +-72 +-9 +-10666 +-12204 +-12468 +-115 +-77 +-6830 +-34 +-3005 +-1787 +-676 +596 +-37 +-55 +-125 +3877 +3112 +2162 +1623 +1812 +2609 +-88 +3903 +-116 +-84 +540 +-50 +-61 +-2211 +-45 +-41 +1846 +-119 +3174 +2622 +1793 +-94 +-126 +555 +-122 +-95 +-76 +-65 +-7409 +-6794 +-86 +-1509 +-13 +6234 +-113 +12805 +-88 +15678 +15698 +15137 +-93 +-53 +-64 +15946 +-33 +18432 +18452 +16992 +-11 +-51 +-47 +-69 +-105 +-1424 +-5 +-764 +523 +-111 +3118 +-88 +3634 +-93 +-27 +-57 +-1472 +-70 +-128 +-399 +588 +-50 +-111 +-113 +-69 +-6055 +-114 +-11431 +-94 +-15285 +-126 +-40 +-16828 +-111 +-10 +-18058 +-11 +-92 +-123 +-17901 +-16356 +-12 +-12194 +-26 +-8873 +-8188 +-61 +-8940 +-9967 +-10908 +-77 +-3 +-9899 +-55 +-97 +-49 +-100 +-42 +-96 +-9907 +-12682 +-29 +-16074 +-86 +-15541 +-43 +-28 +-12 +-6 +-11512 +-11702 +-11709 +-22 +-10415 +-87 +-8340 +-7834 +-7824 +-18 +-16 +-6652 +-4803 +-2449 +-18 +2105 +3690 +4710 +-29 +5955 +6929 +-56 +10101 +-5 +12145 +11883 +11039 +-17 +10023 +-40 +12129 +-23 +15120 +15630 +-115 +-40 +13377 +12921 +13057 +13609 +14339 +15124 +15886 +-85 +-126 +17191 +16967 +-82 +15176 +13670 +12035 +-74 +-46 +-118 +10109 +-34 +9840 +8969 +-6 +-127 +-23 +-95 +-162 +-1986 +-3201 +-3572 +-49 +-2216 +-88 +-992 +-1153 +-70 +-74 +-2714 +-11 +-35 +-91 +-8075 +-9415 +-10479 +-44 +-125 +-12224 +-11 +-12287 +-12464 +-13029 +-94 +-14792 +-15324 +-39 +-101 +-15041 +-15081 +-15259 +-15347 +-15078 +-14253 +-76 +-114 +-107 +-80 +-6638 +-6032 +-66 +-6363 +-12 +-96 +-52 +-10692 +-11512 +-11691 +-6 +-9458 +-16 +-4537 +-1952 +-106 +-55 +-62 +1903 +1573 +-1 +1096 +-19 +-75 +874 +801 +785 +-47 +-44 +2401 +-122 +-16 +-70 +8559 +9319 +-112 +7940 +6212 +4418 +-112 +-71 +-55 +-108 +-69 +-71 +-27 +3358 +-57 +4971 +-4 +-107 +8268 +8802 +8777 +-45 +6958 +5435 +3862 +-68 +-105 +-98 +-67 +1 +-40 +-100 +2128 +3628 +5134 +-82 +6995 +-89 +6517 +5161 +2921 +-132 +-24 +-6874 +-9142 +-9719 +-48 +-36 +-477 +3923 +7265 +-27 +-42 +7699 +5928 +4143 +2573 +-55 +11 +-88 +-88 +-123 +-26 +-3272 +-2693 +-116 +-214 +-87 +3135 +-34 +-119 +-76 +-107 +-92 +-23 +-48 +6406 +-80 +-89 +-85 +7690 +6665 +-14 +4661 +3698 +2609 +-113 +332 +-416 +-669 +-403 +284 +-37 +-57 +-36 +-93 +-107 +4105 +-126 +-88 +-117 +-49 +-114 +-99 +-72 +-67 +-52 +-111 +-2508 +-4050 +-121 +-107 +-35 +-13 +-5773 +-21 +35 +3688 +-71 +-89 +9510 +-109 +7277 +5235 +3086 +1033 +-80 +-2535 +-4035 +-5280 +-98 +-12 +-7361 +-7609 +-7649 +-7409 +-6825 +-5875 +-48 +-33 +-2196 +-1256 +-405 +598 +1886 +3331 +-33 +5210 +4906 +3586 +-33 +-30 +-113 +-71 +-3517 +-1 +-194 +-117 +-52 +-127 +-111 +7201 +-51 +2654 +-225 +-2739 +-53 +-5004 +-60 +-3766 +-2798 +-2195 +-2182 +-2726 +-3536 +-67 +-50 +-52 +-969 +-76 +-8 +10261 +-34 +16969 +-25 +19047 +-33 +17178 +-57 +-54 +-97 +-96 +-48 +-100 +-24 +10621 +-52 +7208 +-76 +-39 +-79 +545 +-128 +-76 +-53 +3155 +-61 +4358 +-71 +3126 +-113 +863 +276 +347 +-128 +-121 +1366 +328 +-30 +-70 +-8613 +-12217 +-15044 +-16563 +-91 +-119 +-15030 +-121 +-14527 +-60 +-113 +-16531 +-118 +-39 +-15089 +-109 +-65 +-14038 +-13753 +-12944 +-11477 +-12 +-7402 +-128 +-5025 +-5349 +-69 +-92 +-8679 +-52 +-90 +-86 +-61 +-106 +-87 +-12761 +-6 +-127 +-13191 +-13003 +-12507 +-10 +-102 +-44 +-10995 +-97 +-72 +-100 +-13045 +-12710 +-89 +-10476 +-8594 +-19 +-4250 +-65 +-925 +83 +-29 +-71 +1662 +-27 +-106 +-33 +-108 +8218 +10063 +-70 +12090 +11897 +11091 +-105 +9512 +9503 +10109 +11114 +-30 +13316 +14156 +-47 +-40 +15707 +-4 +15706 +-103 +14675 +14174 +13906 +-105 +14427 +15192 +-127 +16507 +16390 +-53 +-123 +12588 +-113 +-9 +-125 +5945 +4472 +-89 +2336 +1796 +-2 +-107 +1366 +-35 +1027 +-42 +358 +-73 +-654 +-1458 +-2486 +-83 +-72 +-49 +-7329 +-26 +-26 +-98 +-66 +-8150 +-8102 +-8702 +-89 +-36 +-29 +-16544 +-10 +-68 +-18892 +-17915 +-16340 +-14531 +-20 +-11431 +-10435 +-13 +-5 +-120 +-8583 +-8623 +-108 +-9971 +-11209 +-12464 +-24 +-13497 +-71 +-67 +-9919 +-8105 +-6316 +-42 +-3208 +-33 +-106 +-1205 +-1504 +-55 +-2700 +-3028 +-111 +-2434 +-128 +-39 +40 +-114 +-25 +-40 +5384 +-36 +8239 +-101 +7484 +-83 +4640 +3651 +3159 +-120 +-69 +2380 +1874 +1390 +-120 +1383 +-75 +-43 +-106 +-43 +11055 +-49 +12395 +10591 +7444 +-120 +316 +-1986 +-2786 +-40 +-236 +-67 +-83 +6924 +-33 +9225 +-1 +9223 +-14 +6955 +-117 +-75 +-975 +-3539 +-84 +-73 +-8 +-37 +-81 +-921 +513 +-2 +3684 +5193 +6200 +-35 +-99 +3904 +-65 +-92 +-69 +-230 +329 +782 +-93 +-109 +-20 +-64 +-2811 +-89 +-1232 +287 +-98 +-103 +3375 +3886 +4457 +5126 +-78 +-1 +-83 +-91 +7184 +-10 +7021 +6716 +6211 +5462 +-103 +3398 +2173 +810 +-693 +-2186 +-3316 +-65 +-67 +-1010 +-88 +-30 +-55 +-97 +-37 +-83 +11827 +10355 +-109 +6013 +-72 +-91 +-1478 +-3462 +-4816 +-100 +-106 +-4850 +-3581 +-1754 +-114 +-22 +-20 +-126 +5949 +5723 +-79 +4221 +-48 +3134 +-117 +2835 +-46 +-94 +-112 +-2231 +-75 +-19 +-10626 +-78 +-83 +-9886 +-7047 +-71 +-400 +2082 +3347 +-49 +2078 +-17 +-1668 +-40 +-3718 +-34 +-2234 +-738 +-45 +1892 +2626 +2877 +2608 +-100 +-31 +-106 +-59 +2131 +3371 +-63 +-16 +-56 +-116 +-96 +-1 +-27 +-76 +-7660 +-36 +-93 +-104 +-6287 +-4240 +-26 +-924 +-164 +-49 +837 +2426 +-79 +-107 +-83 +15897 +-92 +17243 +16218 +-122 +-10 +13680 +13595 +-74 +13073 +-54 +11068 +-40 +8195 +6723 +5392 +-86 +3345 +2630 +2154 +-17 +2349 +3108 +4204 +5384 +-36 +-56 +6693 +-32 +4443 +2648 +-73 +-1222 +-115 +-4312 +-5331 +-6078 +-6789 +-35 +-10 +-10456 +-11930 +-116 +-8 +-14730 +-15235 +-90 +-41 +-16556 +-116 +-15 +-99 +-110 +-83 +-68 +-122 +-62 +-6 +-121 +-126 +-5624 +-81 +-98 +-36 +-9978 +-34 +-84 +-118 +-9893 +-8875 +-39 +-8181 +-1 +-9628 +-10750 +-117 +-12958 +-19 +-107 +-32 +-14318 +-50 +-12713 +-47 +-118 +-10719 +-95 +-101 +-29 +-10159 +-9369 +-8085 +-6325 +-4234 +-2030 +36 +-21 +3091 +-80 +4621 +-122 +5241 +5421 +5644 +-109 +6698 +-20 +-81 +-53 +11361 +-83 +12617 +12621 +12353 +-39 +-69 +11639 +11887 +-90 +-77 +-3 +-10 +15402 +-74 +16158 +-38 +17169 +17713 +17979 +17685 +-16 +-73 +12329 +-14 +7464 +-118 +-42 +5912 +6513 +6915 +-52 +-38 +-49 +4650 +-16 +-48 +-43 +-40 +-1970 +-2474 +-78 +-1987 +-108 +-44 +-35 +-2278 +-2805 +-65 +-40 +-114 +-6845 +-8947 +-70 +-91 +-15592 +-16880 +-34 +-106 +-88 +-15289 +-14020 +-12934 +-77 +-11490 +-10971 +-10490 +-10125 +-34 +-72 +-58 +-12200 +-13507 +-62 +-15280 +-7 +-14051 +-12233 +-58 +-26 +-87 +-12 +-6106 +-39 +-7116 +-55 +-39 +-5049 +-4015 +-3540 +-3816 +-54 +-5555 +-5852 +-5096 +-3244 +-120 +-110 +4732 +6710 +8036 +-8 +-74 +7766 +-45 +-115 +-41 +-38 +-3240 +-100 +-1986 +631 +3621 +6213 +8000 +9038 +9546 +-38 +9479 +8829 +-13 +5958 +-11 +1599 +-5 +-1259 +-62 +283 +-29 +5165 +-12 +-121 +-47 +10864 +-105 +8750 +7037 +-94 +3688 +2340 +-89 +-102 +-48 +-1667 +-2197 +-2222 +-1713 +-43 +-15 +-33 +2085 +-73 +-84 +3629 +3946 +4178 +-95 +-35 +-91 +2561 +1373 +-103 +-927 +-1666 +-128 +-1668 +-22 +-92 +-91 +333 +-46 +-97 +-437 +-662 +-70 +19 +1293 +-123 +5442 +-90 +9236 +-43 +-31 +10102 +-69 +-76 +-47 +3336 +-127 +-39 +-2506 +-28 +-77 +-76 +-48 +-1516 +-111 +-125 +-32 +-82 +11876 +12087 +11067 +-127 +-19 +-72 +-59 +-15 +-76 +-103 +1035 +538 +-90 +-1496 +-2781 +-3985 +-4764 +-77 +-50 +-94 +-106 +-62 +8528 +10051 +10265 +9321 +7465 +4958 +-2 +-986 +-3736 +-91 +-6562 +-44 +-60 +-70 +-40 +-2241 +-75 +-16 +-84 +-6530 +-25 +-86 +-13 +-46 +1910 +2078 +-25 +-102 +-19 +-4238 +-89 +-120 +-3035 +-1518 +60 +-21 +-116 +-20 +4106 +4408 +-19 +-122 +4895 +4947 +-128 +4105 +-71 +-47 +-36 +-101 +-81 +-108 +-111 +-29 +-11 +-8164 +-88 +-106 +-108 +-22 +-109 +-101 +3699 +5167 +6503 +-29 +9511 +11315 +13152 +-103 +-20 +16384 +-17 +15886 +-122 +13664 +-62 +10051 +-6 +6670 +5685 +-113 +-120 +5434 +-39 +5637 +-18 +5636 +-64 +6227 +6772 +7259 +7434 +-79 +6177 +-65 +3128 +1403 +-95 +-1155 +-1726 +-1953 +-50 +-2438 +-99 +-16 +-6037 +-8146 +-49 +-13033 +-15305 +-116 +-3 +-16 +-12 +-15840 +-14265 +-12733 +-1 +-73 +-10688 +-10953 +-63 +-11505 +-87 +-128 +-10189 +-9348 +-8415 +-61 +-110 +-47 +-6614 +-20 +-38 +-86 +-69 +-10193 +-10752 +-11175 +-111 +-25 +-10937 +-12 +-115 +-71 +-12019 +-62 +-15075 +-15824 +-42 +-14729 +-102 +-76 +-10985 +-7 +-47 +-7908 +-17 +-5357 +-4055 +-35 +-1770 +-82 +-91 +540 +1107 +-57 +-15 +3631 +-120 +-58 +8264 +9779 +10869 +11286 +-79 +-48 +-30 +-71 +-42 +7433 +8550 +10314 +12404 +14404 +-125 +-81 +17668 +-1 +-27 +-64 +-97 +-80 +15418 +14457 +-99 +-12 +11805 +-63 +11533 +11849 +12052 +11820 +-48 +-12 +7464 +-83 +3397 +2143 +-93 +1859 +2165 +-127 +-82 +-83 +326 +277 +-86 +-10 +-124 +-99 +-101 +-61 +-4087 +-7373 +-10126 +-19 +-13189 +-13730 +-71 +-24 +-45 +-106 +-12502 +-18 +-34 +-11224 +-51 +-89 +-32 +-12720 +-32 +-61 +-37 +-12728 +-10 +-78 +-15600 +-100 +-122 +-14056 +-94 +-9350 +-104 +-5342 +-54 +-5062 +-6354 +-8124 +-9875 +-11141 +-11711 +-82 +-10922 +-9727 +-88 +-5806 +-110 +-122 +2315 +4631 +-102 +-112 +6699 +5241 +-74 +536 +-3 +-2772 +-2994 +-2301 +-917 +-125 +2927 +4976 +-88 +8238 +9013 +9086 +8551 +-117 +6247 +4693 +-17 +1609 +-98 +-75 +-120 +1895 +3164 +-63 +5915 +7171 +-19 +8791 +9023 +8984 +-104 +-51 +8236 +-14 +-44 +4410 +2566 +843 +-56 +-1511 +-96 +-78 +-712 +-99 +-111 +3437 +-20 +-106 +3373 +2597 +2056 +-102 +-89 +2598 +2843 +2885 +-59 +2568 +2346 +-34 +-45 +781 +13 +-728 +-1426 +-2193 +-26 +-4046 +-4770 +-39 +-4067 +-38 +-99 +-47 +-8 +11089 +-73 +12869 +11625 +-82 +6667 +3936 +-21 +-429 +-34 +-34 +-100 +-2034 +-86 +561 +1817 +-10 +2636 +2346 +-87 +2818 +4402 +-88 +9524 +11776 +12866 +12329 +10109 +-96 +2401 +-1533 +-4491 +-6024 +-6083 +-98 +-83 +-1179 +557 +-4 +-112 +2670 +-58 +3076 +-31 +4904 +-97 +-76 +6939 +6225 +-104 +2821 +-24 +-1181 +-2769 +-3994 +-4847 +-5287 +-5253 +-4742 +-7 +-2814 +-1958 +-1485 +-1429 +-125 +-1989 +-2282 +-2496 +-115 +-48 +-3066 +-3269 +-3461 +-34 +-76 +-3499 +-3036 +-2281 +-21 +-155 +-110 +2682 +-52 +-98 +-54 +7281 +6993 +-100 +4618 +-117 +1307 +-122 +-1244 +-67 +-72 +-3718 +-109 +-5859 +-88 +-7893 +-83 +-38 +-87 +-5506 +-106 +-1721 +354 +-41 +4730 +-54 +8771 +-28 +-20 +-117 +14706 +-46 +-66 +-104 +-96 +-61 +10354 +-41 +-87 +6447 +-99 +6180 +-42 +7972 +-85 +-58 +10004 +9297 +8036 +-55 +5393 +4641 +4432 +4649 +-32 +-83 +5891 +-64 +-80 +5726 +4893 +3398 +-34 +-61 +-4033 +-79 +-8385 +-9603 +-10171 +-83 +-10396 +-10697 +-95 +-32 +-75 +-14326 +-117 +-82 +-97 +-14265 +-13262 +-89 +-1 +-86 +-9418 +-9092 +-106 +-9175 +-14 +-9105 +-98 +-8382 +-21 +-7641 +-96 +-7643 +-7932 +-53 +-8419 +-8417 +-8383 +-87 +-121 +-109 +-11485 +-7 +-10 +-15832 +-110 +-16358 +-19 +-13767 +-11944 +-10426 +-98 +-9447 +-92 +-61 +-10443 +-9968 +-8875 +-7408 +-32 +-21 +-3465 +-72 +-41 +-18 +-91 +-71 +7694 +-78 +6486 +4886 +-59 +-75 +-72 +-26 +6483 +8005 +-38 +10067 +10858 +-81 +12607 +-29 +14396 +-18 +-36 +-36 +-30 +15631 +-29 +-17 +-124 +-87 +15125 +-125 +-15 +15464 +-109 +-88 +14452 +12868 +10597 +8008 +-64 +3676 +2574 +2305 +-17 +3844 +-39 +-51 +6502 +6194 +-15 +4389 +3589 +-26 +2594 +-103 +832 +-89 +-3056 +-5575 +-8110 +-58 +-46 +-12512 +-121 +-11745 +-74 +-9951 +-70 +-8909 +-8870 +-9211 +-20 +-11237 +-23 +-14555 +-13 +-17297 +-17837 +-2 +-16813 +-15318 +-13289 +-10948 +-8691 +-74 +-56 +-31 +-65 +-100 +-72 +-20 +-49 +-15304 +-15813 +-40 +-13985 +-11720 +-8957 +-6094 +-109 +-1170 +594 +-12 +2309 +2119 +-64 +-206 +-1786 +-3049 +-14 +-3292 +-2245 +-745 +876 +2374 +3613 +-52 +-119 +-89 +6252 +-37 +-88 +6744 +6250 +-51 +-20 +2676 +1330 +-4 +-68 +-165 +879 +-72 +-15 +7445 +9237 +-72 +10256 +9771 +9073 +-12 +7950 +7506 +-21 +5923 +-5 +3141 +1891 +-118 +1079 +1544 +-46 +2887 +3170 +-49 +-4 +-79 +-90 +1063 +841 +785 +-62 +-77 +2421 +3851 +-33 +7267 +8302 +8209 +6750 +-23 +628 +-3018 +-88 +-8441 +-32 +-18 +-127 +-121 +16 +2630 +4187 +4671 +4424 +-86 +-102 +4695 +-62 +7741 +9085 +9560 +-115 +6945 +4172 +1045 +-67 +-4050 +-112 +-5323 +-46 +-91 +-74 +-74 +4664 +-31 +-1 +-100 +8796 +-1 +-41 +7937 +7257 +-54 +5182 +-71 +2164 +-61 +-1205 +-63 +-8 +-124 +-92 +-2769 +-1411 +-40 +-98 +3663 +5230 +6439 +-117 +-7 +-61 +4864 +3610 +2576 +1799 +1147 +-15 +-238 +-1022 +-5 +-2467 +-2974 +-3287 +-16 +-61 +-53 +-49 +-1021 +-432 +-61 +-762 +-1696 +-50 +-4030 +-92 +-5526 +-111 +-31 +-5362 +-4846 +-4081 +-3070 +-116 +-731 +377 +-120 +-88 +3609 +-85 +-65 +6523 +6692 +6225 +5153 +3664 +2086 +-37 +-219 +-55 +-92 +-121 +-55 +-101 +-50 +-8337 +-114 +-10217 +-49 +-8959 +-7071 +-4543 +-75 +-34 +4642 +-108 +-4 +11572 +-70 +-18 +-23 +10258 +-78 +-47 +-20 +-10 +10311 +-48 +-125 +-114 +11871 +-12 +-79 +-123 +-62 +-53 +5221 +-90 +-34 +-35 +-77 +-112 +-3 +-42 +8998 +8247 +-100 +-4 +-39 +4933 +4354 +-125 +2838 +1571 +-122 +-34 +-4012 +-5571 +-6586 +-36 +-7816 +-8855 +-10470 +-101 +-14060 +-63 +-114 +-71 +-12219 +-2 +-10369 +-126 +-83 +-11480 +-11987 +-119 +-109 +-24 +-62 +-9859 +-25 +-8578 +-7 +-6531 +-5312 +-67 +-4232 +-77 +-26 +-8341 +-38 +-95 +-92 +-13267 +-13045 +-12420 +-127 +-6 +-10751 +-10940 +-17 +-113 +-46 +-14256 +-111 +-15301 +-20 +-14329 +-12951 +-110 +-9119 +-36 +-5556 +-95 +-3021 +-1929 +-77 +-24 +-5 +-119 +-32 +2898 +-95 +-92 +1046 +-23 +1885 +3650 +5929 +-21 +-82 +-119 +-120 +-110 +-42 +10096 +10049 +-52 +11341 +12652 +14183 +15638 +16735 +-55 +-104 +17534 +17455 +-63 +-68 +16481 +15459 +-8 +-48 +-90 +-39 +8055 +-112 +5738 +-113 +4714 +4910 +-67 +-114 +-61 +8571 +-57 +9228 +8706 +-89 +5928 +-51 +1296 +-74 +-59 +-6031 +-25 +-43 +-7 +-6850 +-5858 +-5085 +-4759 +-87 +-7 +-6788 +-8359 +-50 +-12447 +-11 +-109 +-17812 +-18347 +-73 +-16806 +-15010 +-76 +-10693 +-27 +-110 +-6599 +-6899 +-8181 +-3 +-119 +-75 +-16547 +-88 +-49 +-15866 +-25 +-30 +-11515 +-10407 +-74 +-7911 +-37 +-4277 +-15 +-1519 +-80 +-2037 +-119 +-4352 +-27 +-5369 +-5041 +-4227 +-3031 +-1516 +-41 +-45 +3699 +5135 +6172 +6713 +6714 +6225 +5379 +4353 +-46 +-58 +1322 +603 +-35 +256 +-61 +-32 +-26 +-89 +5125 +-40 +-82 +-45 +10301 +-62 +-67 +-119 +-62 +-11 +3424 +3627 +-37 +-108 +-14 +-100 +-15 +7507 +4975 +1827 +-1241 +-3506 +-64 +-3808 +-126 +-67 +3421 +5736 +-108 +8032 +-6 +7184 +-83 +4910 +-80 +-113 +3144 +-76 +-98 +607 +-1242 +-7 +-5258 +-6616 +-7141 +-93 +-5539 +-105 +-73 +-3 +3950 +-35 +8192 +-34 +9282 +-60 +7488 +-114 +4432 +2819 +1352 +115 +-78 +-19 +-11 +-53 +-100 +-93 +-1515 +-439 +-125 +-79 +-7 +-32 +-87 +10511 +-52 +9556 +-90 +-76 +4440 +2621 +-30 +-95 +-81 +-1985 +-2231 +-56 +-1698 +-78 +-413 +341 +-93 +-118 +-11 +-126 +5500 +6157 +6268 +-126 +4706 +-22 +1879 +-25 +54 +-222 +-26 +-99 +-62 +-929 +-7 +-1499 +-1492 +-1252 +-88 +-433 +-133 +-106 +-459 +-1232 +-37 +-46 +-64 +-6057 +-6842 +-7 +-78 +-6312 +-5254 +-3998 +-2722 +-32 +-62 +259 +-78 +-46 +1895 +-52 +-76 +-1 +-33 +-123 +7498 +8031 +-59 +6228 +-33 +1366 +-115 +-4802 +-109 +-10189 +-60 +-11691 +-67 +-82 +-6111 +-3839 +-105 +-1218 +-106 +-704 +-231 +877 +2679 +4884 +7012 +-63 +9569 +-34 +10107 +-101 +-80 +11540 +-99 +11822 +11133 +10001 +8722 +-49 +6988 +6914 +-73 +8060 +8751 +-53 +-8 +8998 +8729 +8573 +8572 +-47 +-12 +-112 +-83 +-98 +-123 +7533 +7177 +-30 +-96 +-25 +2932 +865 +-1507 +-78 +-6043 +-7588 +-8407 +-8597 +-8430 +-62 +-106 +-8618 +-9160 +-9885 +-38 +-11920 +-13221 +-14476 +-15335 +-93 +-67 +-13039 +-10962 +-8889 +-75 +-6278 +-123 +-6319 +-68 +-57 +-8330 +-119 +-8403 +-59 +-7618 +-97 +-7817 +-8423 +-9112 +-9658 +-9916 +-9881 +-9710 +-9662 +-61 +-44 +-78 +-118 +-16122 +-82 +-17556 +-17060 +-8 +-120 +-12255 +-35 +-1 +-13 +-5799 +-5085 +-116 +-4563 +-25 +-3974 +-3267 +-23 +-46 +-405 +-127 +1101 +1855 +-106 +3617 +4443 +-36 +-127 +-108 +-87 +6423 +6933 +-121 +8267 +9032 +9843 +-24 +-46 +12898 +-59 +-34 +17420 +18774 +-78 +-92 +19482 +18494 +16976 +14975 +12650 +10251 +-60 +-35 +5951 +6151 +-111 +8312 +9544 +-12 +11070 +11387 +11520 +-69 +-43 +9830 +-48 +-116 +2309 +-401 +-40 +-93 +-38 +-1732 +-79 +815 +1350 +1099 +103 +-1508 +-3580 +-68 +-8443 +-47 +-12785 +-14216 +-15057 +-44 +-15350 +-93 +-76 +-12986 +-2 +-38 +-105 +-8141 +-8117 +-8674 +-9672 +-10978 +-12461 +-14006 +-111 +-25 +-4 +-17558 +-117 +-15774 +-13962 +-51 +-9687 +-7876 +-6629 +-6074 +-26 +-47 +-7344 +-61 +-33 +-7327 +-6842 +-76 +-6296 +-24 +-5781 +-29 +-55 +-4 +-81 +-95 +5946 +-22 +7792 +7002 +5157 +2659 +90 +-99 +-2766 +-2298 +-663 +-123 +-102 +5715 +6464 +6206 +5197 +3850 +2650 +-42 +2166 +3181 +4875 +6933 +-28 +-13 +11307 +11296 +10554 +9327 +-23 +-114 +-33 +-44 +3405 +2588 +1865 +-12 +809 +-40 +257 +-44 +-88 +-11 +-9 +-65 +-51 +7229 +-70 +-17 +-51 +-47 +7749 +5417 +2819 +295 +-91 +-2 +-4783 +-115 +-83 +-111 +-4837 +-3834 +-59 +-1264 +-78 +-63 +3405 +5123 +6719 +7993 +8738 +8786 +7997 +-22 +4102 +1576 +-702 +-56 +-3258 +-3513 +-3294 +-2742 +-85 +-700 +-59 +-60 +-59 +-122 +-22 +-80 +8799 +9254 +9053 +-46 +6661 +4887 +3162 +-82 +591 +-234 +-75 +-1239 +-111 +-1260 +-71 +-216 +540 +1343 +2133 +2892 +3595 +-105 +-52 +5228 +-3 +-39 +-114 +2919 +1399 +50 +-30 +-38 +-93 +-425 +75 +600 +-125 +-63 +-95 +2394 +2050 +1050 +-30 +-2441 +-121 +-35 +-71 +-5054 +-3775 +-127 +-127 +-1925 +-3237 +-98 +-35 +-88 +-79 +-7868 +-114 +-3574 +-942 +1610 +3898 +-65 +-108 +8303 +8715 +8534 +7772 +6456 +4646 +-76 +-17 +-1777 +-3268 +-80 +-85 +-5112 +-39 +-6362 +-98 +-7393 +-7396 +-122 +-6398 +-5566 +-4578 +-84 +-1998 +-18 +-83 +-29 +-102 +-29 +8505 +-122 +9293 +9245 +-121 +-4 +-71 +-36 +9071 +9284 +9519 +-15 +9797 +-22 +-75 +-87 +-8 +7480 +-1 +-27 +-126 +7468 +-42 +-63 +-33 +-85 +-88 +-86 +-95 +-75 +-21 +4472 +-63 +-21 +2068 +-22 +1864 +1391 +557 +-118 +-45 +-3719 +-6 +-36 +-8325 +-4 +-10401 +-11172 +-74 +-12471 +-12975 +-13269 +-13231 +-12774 +-11905 +-10748 +-58 +-84 +-26 +-7924 +-8337 +-8954 +-30 +-28 +-9622 +-9118 +-8378 +-110 +-38 +-62 +-9 +-1 +-5278 +-41 +-7058 +-83 +-10116 +-86 +-54 +-19 +-8 +-62 +-15513 +-15566 +-15260 +-21 +-13724 +-12774 +-11965 +-11395 +-10987 +-36 +-41 +-8629 +-118 +-6086 +-5328 +-5066 +-5036 +-4 +-117 +-2948 +-1234 +616 +-92 +-51 +-111 +3659 +-74 +-91 +-51 +-42 +2117 +2627 +-78 +4680 +-73 +-2 +9543 +-58 +14163 +16657 +-91 +-111 +-52 +-29 +18982 +-120 +-128 +-89 +-110 +8312 +-31 +-118 +-103 +-73 +-50 +13067 +-4 +14178 +-45 +13330 +12040 +10245 +-15 +6177 +-43 +-32 +3159 +-77 +3586 +3964 +-98 +4411 +4458 +4370 +-21 +3435 +2321 +634 +-78 +-4314 +-51 +-40 +-92 +-13978 +-4 +-115 +-12934 +-11165 +-9370 +-85 +-7422 +-7610 +-8407 +-8 +-33 +-100 +-11963 +-12464 +-13043 +-5 +-14829 +-60 +-22 +-88 +-17362 +-16338 +-106 +-11960 +-9379 +-81 +-6036 +-74 +-114 +-8959 +-17 +-47 +-14562 +-14504 +-118 +-10887 +-8114 +-5333 +-79 +-1021 +-97 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_B_246_942.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_B_246_942.samples new file mode 100644 index 00000000..dbeaa3dc --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_B_246_942.samples @@ -0,0 +1,4096 @@ +-100 +-65 +-53 +-24 +-11951 +-11776 +-27 +-85 +-3556 +-41 +-82 +637 +842 +94 +-35 +-99 +-59 +-9 +4618 +-39 +-30 +-39 +5382 +-27 +-32 +-51 +5466 +5714 +6149 +-117 +7806 +8297 +-90 +10517 +11642 +11601 +10586 +9824 +-36 +-6 +14674 +-65 +19480 +-39 +14954 +-11 +9561 +7715 +7476 +9844 +13930 +-39 +12577 +8270 +-37 +-47 +8471 +8999 +7453 +5213 +-17 +-78 +610 +-35 +531 +-114 +2571 +-72 +2903 +-124 +-4493 +-6840 +-7828 +-7399 +-70 +-87 +-103 +-1020 +-3071 +-32 +-6044 +-6904 +-111 +-90 +-73 +-73 +-59 +-6123 +-5051 +-4586 +-87 +-101 +-7919 +-8615 +-9427 +-9945 +-48 +-117 +-6288 +-3748 +-1510 +-119 +-5 +-2994 +-128 +-18 +-8176 +-46 +-103 +-73 +-7 +-6 +4897 +5703 +4209 +-94 +-53 +-54 +-4293 +-2222 +-19 +823 +-60 +-14 +6477 +-43 +-105 +9837 +10036 +-125 +-75 +5893 +-114 +-123 +-55 +-1986 +-3034 +-41 +-953 +1359 +2878 +4882 +8223 +-16 +17730 +-63 +-87 +17945 +16682 +15635 +-103 +11359 +7439 +-109 +-2536 +-6810 +-11190 +-124 +-20 +-35 +-13488 +-62 +-10203 +-77 +-109 +-2192 +-3721 +-7374 +-11949 +-76 +-17557 +-19143 +-31 +-24818 +-25579 +-27 +-5 +-65 +-18379 +-54 +-15751 +-15049 +-14071 +-11728 +-8131 +-125 +-3265 +-59 +-39 +-47 +-657 +-9 +-115 +-53 +-53 +4198 +5132 +-66 +5186 +-108 +3694 +-86 +4703 +-103 +-48 +5692 +-22 +-25 +7236 +10256 +11594 +10260 +8521 +-69 +8717 +9777 +11826 +14632 +18008 +-97 +19217 +-63 +-59 +8494 +-28 +-64 +-121 +-39 +12110 +-8 +9016 +-12 +8828 +8755 +-76 +8720 +-62 +-88 +-63 +845 +-95 +-81 +-37 +-14 +-42 +-36 +-428 +-4994 +-29 +-105 +-62 +-114 +-2009 +-117 +-44 +-3764 +-126 +-28 +-5337 +-76 +-8127 +-117 +-7917 +-63 +-5305 +-88 +-15 +-107 +-5603 +-106 +-8446 +-9896 +-86 +-10674 +-9138 +-33 +-16 +-21 +-500 +-2450 +-4228 +-11 +-49 +-7679 +-8170 +-93 +-3026 +1405 +-4 +5189 +4436 +-29 +-121 +-2007 +-80 +-41 +-3243 +-128 +-459 +795 +-55 +4898 +6500 +8542 +-40 +-75 +9555 +-77 +-72 +5416 +-94 +312 +-86 +-901 +-1702 +-34 +-103 +-1212 +-108 +-66 +-77 +-72 +17248 +18493 +18010 +17785 +-4 +17190 +15177 +-5 +6200 +625 +-3488 +-21 +-9611 +-47 +-114 +-97 +-25 +-8841 +-103 +-4095 +-4283 +-63 +-6103 +-16 +-6 +-13790 +-37 +-21187 +-18 +-126 +-29 +-94 +-36 +-30 +-33 +-18080 +-45 +-15745 +-13017 +-77 +-7353 +-110 +-68 +-2724 +-70 +-2807 +-1251 +-65 +864 +2652 +4653 +-25 +4706 +-21 +3166 +-78 +-95 +5406 +-23 +3132 +4682 +-116 +6267 +7028 +-17 +11365 +-65 +-36 +5144 +-65 +-64 +13645 +18237 +18988 +-97 +15364 +-30 +-44 +11120 +-107 +-62 +-78 +-53 +11874 +-54 +-41 +9566 +-8 +10503 +-61 +9530 +-54 +-8 +-82 +-43 +-59 +-127 +-103 +-6 +4935 +1659 +-1490 +-68 +-120 +-124 +-3991 +-127 +-99 +-41 +-47 +-58 +-2304 +-67 +-5772 +-59 +-125 +-79 +-7303 +-6139 +-5777 +-5801 +-64 +-4738 +-4078 +-5327 +-8928 +-11770 +-80 +-110 +-8599 +-82 +-114 +-3257 +-1418 +-62 +-112 +-5256 +-7870 +-9440 +-9146 +-6304 +-2724 +266 +2928 +-60 +3644 +-73 +-17 +-722 +-1428 +-73 +-3793 +-17 +-1474 +279 +-4 +2870 +3357 +-47 +-27 +-45 +10536 +-6 +7527 +6752 +5690 +-43 +1900 +-1007 +-96 +-4306 +-6 +-128 +804 +5153 +9056 +11553 +13084 +14914 +17265 +-113 +-9 +-67 +-93 +13319 +-117 +7468 +-18 +-3321 +-27 +-43 +-15000 +-14582 +-102 +-9192 +-115 +-6829 +-10 +-64 +-3990 +-68 +-7616 +-56 +-15843 +-92 +-21192 +-63 +-85 +-22484 +-97 +-99 +-60 +-20468 +-66 +-17146 +-14245 +-14 +-9866 +-10 +-4998 +-114 +-112 +-5824 +-2749 +561 +-73 +1856 +-26 +-49 +4166 +-97 +4096 +3841 +-38 +5128 +-95 +-64 +2055 +-93 +7209 +10248 +11391 +9745 +-53 +-111 +-53 +5957 +-68 +-11 +16680 +-32 +15893 +-92 +12924 +-89 +-65 +-79 +12881 +-81 +12392 +11896 +10764 +-25 +9585 +10772 +-97 +12907 +10772 +-43 +-46 +1099 +1134 +-27 +-29 +-72 +-5 +4158 +-41 +302 +-1458 +-3755 +-15 +-61 +-4035 +-3775 +-2459 +-1009 +-1196 +-2723 +-4249 +-12 +-6113 +-84 +-102 +-8404 +-8136 +-38 +-76 +-89 +-34 +-118 +-86 +-11 +-38 +-98 +-11449 +-78 +-7589 +-59 +-110 +-65 +-104 +-5 +-43 +-8637 +-9924 +-122 +-6638 +-48 +-18 +-53 +1887 +3408 +3362 +-31 +-994 +-2521 +-2554 +-1953 +-30 +-2258 +-20 +-3 +-101 +3840 +-13 +7715 +8759 +-111 +-99 +8773 +8549 +-33 +-93 +4466 +-5 +-105 +-110 +-4040 +-1738 +74 +1391 +3590 +-110 +-109 +-98 +16674 +18525 +18298 +18045 +-73 +18509 +-116 +-120 +-104 +-96 +-41 +-9406 +-71 +-33 +-51 +-11140 +-9645 +-7848 +-5521 +-3 +-119 +-61 +-105 +-20 +-13702 +-49 +-18081 +-19119 +-83 +-87 +-22658 +-118 +-21647 +-43 +-6 +-39 +-102 +-10 +-10458 +-9679 +-8943 +-7577 +-6280 +-5621 +-4482 +-71 +-72 +1583 +2383 +-32 +-112 +-19 +-93 +-31 +5171 +-115 +838 +305 +2593 +6230 +-101 +-83 +-62 +7454 +4181 +-107 +3155 +5696 +9781 +13058 +-90 +-11 +15369 +-49 +13158 +12637 +12621 +13170 +-2 +13682 +12329 +10776 +-108 +9076 +-50 +-25 +14916 +12589 +9503 +6190 +-40 +-114 +3623 +4953 +-45 +6500 +5745 +4722 +-58 +2604 +-113 +-3276 +-5075 +-67 +-2979 +-1992 +-1667 +-24 +-92 +-2557 +-124 +-2751 +-5560 +-7880 +-8334 +-27 +-7097 +-5526 +-83 +-107 +-3523 +-117 +-106 +-8082 +-10210 +-11405 +-80 +-108 +-63 +-4816 +-32 +-59 +-38 +-4581 +-6606 +-40 +-8349 +-8890 +-8424 +-5818 +-55 +1054 +2097 +2137 +-125 +-84 +-33 +256 +-80 +-2291 +-3286 +-3480 +-110 +-2202 +-96 +2402 +-50 +-74 +-18 +6696 +-17 +-111 +-62 +-13 +7783 +4143 +638 +-44 +-90 +-3003 +-49 +-22 +-121 +-41 +-101 +8830 +10869 +13093 +15208 +16736 +-39 +-7 +-7 +18486 +-88 +9246 +4381 +-30 +-97 +-21 +-14 +-9 +-99 +-11164 +-8110 +-100 +-3726 +-13 +-4300 +-5273 +-72 +-9878 +-51 +-18 +-96 +-18090 +-19625 +-99 +-23474 +-57 +-23272 +-21493 +-55 +-17916 +-107 +-12220 +-125 +-10152 +-10232 +-9879 +-88 +-71 +-2270 +-1249 +-1163 +-1153 +366 +-125 +5746 +-6 +5660 +-34 +306 +-972 +-10 +-76 +7800 +10365 +9807 +7951 +-40 +-99 +2383 +3328 +5478 +-30 +-72 +13326 +14871 +14343 +-123 +-8 +-80 +-27 +-66 +14648 +-99 +10016 +9322 +9997 +-83 +-95 +15676 +-65 +12049 +-69 +6951 +5503 +-85 +-107 +-113 +4877 +-70 +-128 +7537 +4949 +1874 +-212 +-63 +-68 +-2755 +-3206 +-3552 +-50 +-1473 +-768 +-1013 +-59 +-32 +-49 +-102 +-72 +-7923 +-6904 +-5525 +-55 +-4254 +-121 +-2488 +-3533 +-84 +-89 +-13288 +-13040 +-92 +-7594 +-5578 +-46 +-64 +-2 +-16 +-88 +-123 +-20 +-9627 +-14 +-29 +-3755 +-95 +354 +1149 +634 +585 +-75 +-117 +-92 +-21 +-118 +-80 +-112 +-1488 +36 +1040 +-60 +2325 +-4 +6956 +10055 +-23 +10524 +10019 +8723 +6268 +3587 +1346 +-972 +-86 +-128 +-4276 +-1448 +-73 +2325 +4442 +-92 +9565 +-103 +-125 +-33 +22042 +22787 +-90 +16173 +12361 +-6 +-103 +-1158 +-5833 +-88 +-43 +-10446 +-9979 +-33 +-7053 +-4352 +-3005 +-92 +-96 +-7106 +-118 +-10371 +-65 +-98 +-16325 +-94 +-121 +-62 +-23713 +-24794 +-23738 +-20678 +-2 +-23 +-14225 +-14315 +-5 +-115 +-9701 +-72 +-65 +-25 +-29 +-4831 +-120 +-79 +-104 +6522 +6161 +-70 +-78 +-1517 +-972 +1658 +4969 +7509 +-36 +9025 +-38 +-18 +3935 +-38 +1866 +4935 +-30 +10280 +11560 +-86 +-58 +11542 +13114 +15201 +16242 +-8 +13650 +-103 +-44 +9257 +-111 +-24 +14712 +14103 +-59 +-22 +-100 +9305 +-40 +3945 +-87 +5906 +-29 +-57 +-46 +6700 +-114 +4201 +2334 +-36 +-1679 +-101 +-3243 +-33 +-87 +-34 +-115 +296 +-10 +-3717 +-125 +-5269 +-6810 +-8144 +-37 +-7325 +-64 +-1955 +-39 +-26 +-23 +-7676 +-9118 +-103 +-12960 +-100 +-9169 +-109 +-3573 +-2475 +-2512 +-115 +-5578 +-7814 +-103 +-9388 +-45 +-5814 +-17 +-21 +-20 +-1170 +770 +-106 +-112 +-76 +-1464 +-92 +-3315 +-2997 +-2759 +-2216 +-1677 +-34 +-1273 +-59 +-121 +6684 +8205 +-101 +9763 +-90 +-47 +8768 +-96 +2581 +-127 +-2477 +-22 +-72 +-1928 +-493 +-40 +-3 +-93 +6206 +-104 +-94 +17496 +19981 +21351 +21879 +-57 +16398 +12056 +8010 +3350 +-68 +-72 +-9190 +-10646 +-9722 +-108 +-6289 +-5083 +-69 +-4327 +-78 +-5300 +-112 +-9162 +-10373 +-10678 +-4 +-44 +-19424 +-22506 +-24320 +-24558 +-22783 +-106 +-83 +-16 +-23 +-16562 +-14796 +-12177 +-9619 +-8700 +-8952 +-95 +-8896 +-74 +-2734 +2305 +5413 +5212 +3914 +-44 +342 +-1186 +-1013 +-115 +3965 +-34 +-25 +9586 +-43 +4619 +2919 +-13 +2878 +5120 +-125 +8734 +8248 +-16 +-93 +-39 +15361 +17192 +-37 +-39 +11599 +10605 +10503 +-50 +-105 +12115 +-104 +15720 +-53 +14117 +-35 +-71 +-22 +-43 +-38 +-33 +-30 +7983 +-22 +-55 +6516 +-29 +4643 +-18 +-27 +-87 +-105 +-50 +-33 +-953 +-1778 +-1200 +364 +-58 +-59 +-6044 +-8363 +-8665 +-7397 +-6355 +-57 +-2697 +-113 +-1422 +-3529 +-2 +-17 +-4 +-12776 +-126 +-124 +-6617 +-4294 +-112 +-2699 +-4259 +-6905 +-61 +-113 +-7084 +-5 +-62 +-7659 +-6119 +-3504 +-87 +1142 +-122 +2135 +102 +-1524 +-1469 +-1257 +-103 +-75 +-3784 +-3725 +-2501 +-57 +-729 +-107 +-100 +-49 +7779 +9578 +11055 +-121 +10522 +-19 +2930 +-27 +-148 +-118 +-1461 +-2520 +-62 +-2752 +-3 +588 +-29 +-42 +-112 +15167 +-111 +-11 +-21 +20824 +19469 +-74 +12670 +6739 +1033 +-2796 +-61 +-57 +-8684 +-22 +-120 +-102 +-4327 +-4294 +-5258 +-6303 +-6558 +-6539 +-6642 +-16 +-67 +-57 +-18648 +-21153 +-115 +-71 +-83 +-24 +-20645 +-82 +-20452 +-17284 +-13792 +-46 +-10917 +-11728 +-13011 +-111 +-10416 +-7054 +-76 +363 +-94 +4624 +3710 +1831 +-44 +-2292 +-1481 +637 +3937 +-125 +9332 +8457 +-42 +-58 +2673 +-75 +5980 +-98 +-3 +-14 +4966 +-95 +-126 +-52 +-75 +-37 +15199 +-33 +-88 +10340 +9590 +10273 +11284 +12342 +-103 +-66 +15906 +-64 +-126 +9558 +-98 +-73 +7450 +6694 +5950 +-94 +-124 +9513 +-90 +-55 +3691 +2373 +1642 +-101 +-2186 +-44 +-2441 +-954 +-49 +324 +-1 +112 +-2469 +-5272 +-66 +-8138 +-8385 +-6899 +-4329 +-48 +-1503 +-54 +-2480 +-4845 +-84 +-11680 +-13227 +-82 +-74 +-6587 +-5277 +-24 +-5011 +-5308 +-26 +-31 +-107 +-69 +-9109 +-51 +-8902 +-9 +-3528 +-40 +-123 +279 +-104 +-60 +112 +-72 +-71 +-42 +-3038 +-4274 +-89 +-90 +-59 +-1447 +-111 +875 +4146 +7787 +-39 +11055 +10514 +-103 +-23 +5464 +3843 +2106 +370 +-107 +-1193 +-2529 +-4288 +-4329 +-98 +829 +-5 +-23 +-67 +14867 +18704 +21595 +22378 +-113 +19246 +15727 +10830 +-14 +-101 +-3306 +-69 +-114 +-16 +-4603 +-4783 +-5585 +-1 +-6302 +-6533 +-36 +-3575 +-3836 +-5561 +-14 +-13230 +-80 +-61 +-18584 +-19676 +-98 +-47 +-23705 +-58 +-19605 +-16777 +-14304 +-13005 +-55 +-13990 +-15020 +-78 +-39 +-9201 +-88 +-10 +-89 +-85 +3363 +579 +-70 +-65 +-1767 +-7 +5691 +-66 +-42 +4463 +4721 +6013 +-91 +-31 +4864 +-103 +-122 +-127 +4215 +-73 +8804 +-125 +13409 +-28 +14907 +-54 +-107 +-61 +9006 +8763 +11012 +14117 +15672 +-63 +-37 +13669 +-80 +-66 +-21 +6767 +6149 +7169 +-93 +-71 +8477 +8459 +8007 +-50 +-61 +4716 +2580 +118 +-4 +-1948 +-1698 +-16 +-97 +1561 +1663 +258 +-2007 +-79 +-98 +-7399 +-8388 +-128 +-4997 +-1966 +-453 +-684 +-2296 +-5099 +-121 +-10752 +-88 +-9664 +-8090 +-7647 +-33 +-7134 +-29 +-4056 +-15 +-73 +-99 +-7627 +-9091 +-9676 +-3 +-7313 +-5055 +-20 +-32 +-1779 +-175 +-31 +1631 +-32 +-123 +-125 +-59 +-45 +-50 +-30 +-86 +-66 +-2280 +-86 +-10 +5926 +8574 +-117 +-71 +-110 +-73 +-34 +5678 +4915 +-53 +-83 +-105 +-41 +-9 +-109 +-3312 +-106 +-234 +-57 +-24 +12324 +-126 +-14 +-108 +22342 +21856 +19200 +-110 +-29 +-88 +-760 +-14 +-3719 +-105 +-3502 +-4787 +-99 +-29 +-7128 +-4772 +-67 +-27 +-19 +-63 +-8352 +-44 +-101 +-34 +-16272 +-19117 +-8 +-23511 +-24232 +-22488 +-19447 +-16895 +-97 +-20 +-54 +-15576 +-16321 +-121 +-16089 +-12713 +-6383 +-246 +2401 +1599 +-127 +-62 +-31 +-1487 +-70 +-107 +-99 +3938 +-30 +4874 +5462 +-118 +-17 +-28 +4906 +3406 +-9 +2647 +-53 +5135 +6170 +8717 +13319 +15920 +14936 +12586 +10601 +-122 +10598 +10759 +-105 +-11 +-107 +-56 +-35 +-30 +14373 +-17 +-112 +8962 +-4 +7546 +-44 +7793 +-47 +-57 +8559 +-8 +8209 +6768 +-126 +794 +-919 +-1229 +-955 +-692 +-52 +1110 +1841 +-126 +-118 +-3036 +-5606 +-7854 +-8901 +-7314 +-3836 +-998 +-409 +-1726 +-3773 +-5587 +-114 +-81 +-71 +-9696 +-9652 +-95 +-2 +-7809 +-5853 +-23 +-55 +-38 +-6356 +-57 +-114 +-8701 +-118 +-44 +-7597 +-6061 +-66 +-69 +-239 +91 +-47 +-123 +70 +2 +-21 +-2746 +-3472 +-6 +-5825 +-6306 +-100 +-48 +1659 +4969 +7445 +-43 +8467 +8481 +-76 +8460 +-41 +6176 +4413 +-99 +-18 +-75 +-67 +-35 +-5099 +-4023 +-88 +281 +-32 +-58 +-13 +-15 +-28 +-22 +23578 +21516 +16695 +-10 +-79 +-24 +-54 +1123 +-32 +-11 +-6301 +-95 +-6790 +-45 +-3559 +-2736 +-75 +-51 +-5325 +-6308 +-67 +-7861 +-31 +-37 +-48 +-21244 +-22229 +-22486 +-50 +-75 +-18089 +-14526 +-28 +-62 +-17 +-20718 +-67 +-101 +-87 +-80 +-22 +-75 +-10 +-2204 +-115 +-2537 +-6 +573 +-118 +1059 +-105 +-20 +5462 +6438 +5671 +5216 +6144 +6760 +-121 +-23 +789 +1085 +3344 +6775 +9747 +-124 +12621 +-68 +12658 +12386 +-114 +-83 +9297 +10515 +12316 +-21 +14392 +-14 +15718 +14706 +12888 +-97 +-121 +9521 +8511 +-7 +-117 +8277 +9339 +9555 +9296 +-65 +-15 +-89 +-32 +-18 +-247 +-975 +-125 +85 +1536 +3131 +3329 +360 +-3990 +-6544 +-7075 +-10 +-5366 +-3479 +-113 +-1941 +-104 +-34 +-2 +-76 +-28 +-7104 +-97 +-96 +-15 +-69 +-7068 +-65 +-4864 +-17 +-5840 +-5345 +-86 +-7615 +-9212 +-77 +-8582 +-47 +-79 +-92 +-45 +-2005 +-41 +-23 +-84 +-95 +563 +308 +-114 +-89 +-48 +-7079 +-7139 +-4998 +-127 +-75 +-57 +4650 +6251 +-28 +8491 +-98 +-115 +-84 +-71 +6472 +-96 +2885 +-8 +-2041 +-3813 +-110 +-5069 +-3831 +-2240 +-679 +-24 +7992 +14605 +20274 +-18 +23139 +-52 +16979 +13853 +11033 +8739 +6173 +-16 +120 +-2980 +-88 +-99 +-74 +-3476 +-3762 +-68 +-4782 +-4319 +-8 +-3278 +-5029 +-6624 +-8387 +-85 +-108 +-18906 +-22734 +-35 +-22658 +-18910 +-15572 +-14323 +-15491 +-90 +-20104 +-21223 +-20905 +-17537 +-71 +-8092 +-71 +-124 +-102 +-2979 +-1764 +-1973 +-121 +-18 +-96 +1049 +-61 +2111 +2823 +-32 +6005 +-82 +-57 +-109 +3125 +1553 +1402 +1825 +2835 +-5 +7480 +10087 +-54 +12057 +12115 +-11 +11050 +-29 +-71 +-10 +12151 +-114 +-106 +-55 +14908 +-25 +-111 +13058 +11122 +9797 +-107 +7797 +7713 +8804 +9849 +-87 +-98 +-117 +8996 +-69 +-2 +-107 +-24 +-57 +102 +2398 +3433 +-121 +-99 +-71 +-3315 +-39 +-5620 +-48 +-4337 +-122 +-3003 +-3761 +-25 +-68 +-50 +-13 +-43 +-16 +-8339 +-8944 +-56 +-47 +-33 +-119 +-119 +-5307 +-5004 +-97 +-78 +-57 +-8325 +-124 +-9115 +-8683 +-16 +-80 +-4815 +-127 +-2988 +-1723 +-83 +2063 +2409 +-20 +-68 +-47 +-69 +-6533 +-6575 +-5878 +-4293 +-1513 +1119 +2899 +-20 +-29 +7257 +-17 +-34 +-82 +8783 +-44 +6752 +-75 +-60 +-422 +-1750 +-2452 +-4291 +-6576 +-20 +-4765 +-62 +-3 +-41 +-3 +20486 +-46 +-104 +-25 +-25 +-88 +13366 +-24 +4393 +-28 +-714 +-1712 +-79 +-4342 +-4743 +-48 +-88 +-122 +-51 +-4520 +-4068 +-127 +-1982 +-4512 +-9126 +-13964 +-18358 +-113 +-22682 +-63 +-16884 +-14214 +-14825 +-17801 +-56 +-95 +-20727 +-34 +-17586 +-15283 +-12682 +-9666 +-23 +-57 +-5079 +-4850 +-3718 +-1947 +-705 +-723 +-1462 +-2 +-96 +3141 +-87 +-110 +-83 +-64 +-119 +3614 +2320 +1398 +-124 +-7 +3670 +5893 +8465 +-115 +-38 +11326 +-109 +-90 +9792 +-64 +10110 +11853 +-41 +12657 +-80 +15128 +15485 +14944 +13620 +-112 +9988 +10049 +-70 +8540 +-4 +-104 +9547 +-40 +-41 +-49 +-90 +4423 +1830 +551 +-107 +-42 +-21 +4703 +-88 +1040 +-98 +-2288 +-27 +-120 +-82 +-15 +-4251 +-3563 +-97 +-44 +-51 +-74 +-106 +-4782 +-6066 +-7360 +-8431 +-8911 +-8892 +-35 +-7333 +-114 +-118 +-5065 +-4804 +-43 +-25 +-8100 +-13 +-8681 +-7651 +-7389 +-7616 +-50 +-24 +-128 +-57 +280 +-128 +2620 +1796 +-74 +-2465 +-6 +-124 +-6798 +-6531 +-44 +-13 +-56 +-99 +2868 +3673 +-77 +-68 +-94 +-62 +9015 +7705 +-29 +5888 +4731 +-45 +-121 +-119 +-87 +-8169 +-9713 +-21 +-102 +4220 +-115 +-125 +15121 +-40 +19250 +20821 +20284 +17446 +-71 +-91 +-10 +5484 +1595 +-1174 +-1966 +-2033 +-2808 +-4031 +-4557 +-4541 +-33 +-108 +-119 +50 +860 +-61 +-7 +-13817 +-18367 +-112 +-79 +-16636 +-12 +-114 +-17136 +-68 +-38 +-20106 +-21989 +-21724 +-33 +-15807 +-13528 +-10 +-32 +-8592 +-6846 +-107 +-52 +-2737 +-62 +-39 +-49 +-2294 +-54 +2358 +-125 +5122 +-57 +6974 +5916 +4128 +-16 +1567 +891 +-110 +-45 +5136 +-127 +9481 +10015 +9764 +9771 +10251 +10346 +-115 +9295 +10108 +-54 +12885 +14136 +14866 +-37 +13907 +13943 +-5 +12155 +-21 +8994 +8316 +-102 +-70 +-51 +-123 +-89 +11122 +-93 +4190 +2315 +2152 +-72 +3947 +4154 +-12 +-107 +1594 +272 +-715 +-1767 +-3248 +-29 +-3717 +-3833 +-19 +-3036 +-2792 +-2484 +-127 +-3252 +-4330 +-116 +-3 +-38 +-116 +-8629 +-9098 +-117 +-40 +-93 +-5295 +-5880 +-105 +-7078 +-7126 +-2 +-7569 +-110 +-8345 +-9178 +-91 +-7918 +-5878 +-2960 +-200 +1287 +-76 +-1 +-34 +-685 +-9 +-9 +-83 +-36 +-4775 +-43 +-97 +-86 +307 +2113 +3935 +-128 +-128 +8825 +-11 +-68 +-90 +7799 +8474 +-106 +-30 +-1461 +-6573 +-8865 +-94 +-9 +-65 +-1187 +-51 +-103 +-11 +15168 +17190 +-79 +20289 +-51 +-30 +-12 +-8 +-20 +-113 +1568 +538 +-4 +-14 +-81 +-106 +-30 +-6084 +-127 +1591 +3413 +-116 +-5 +-7605 +-10891 +-13970 +-109 +-16574 +-99 +-15256 +-78 +-15584 +-18156 +-20153 +-20718 +-21208 +-1 +-85 +-17296 +-43 +-14746 +-12967 +-20 +-8072 +-6084 +-4787 +-64 +-4320 +-98 +-23 +-2958 +-81 +1037 +3166 +-70 +5501 +6697 +6417 +-78 +2423 +1094 +851 +-70 +-63 +4698 +-114 +6967 +-7 +9795 +-30 +-14 +8569 +-97 +-99 +10527 +11023 +-2 +13065 +-25 +-38 +-73 +14678 +14700 +-124 +-72 +-44 +7722 +-26 +10308 +12399 +13078 +12057 +9999 +7465 +5419 +4461 +4180 +4112 +-53 +4681 +4170 +3084 +2364 +-23 +-190 +-75 +-1950 +-2979 +-59 +-3756 +-3206 +-105 +-8 +-69 +-86 +-65 +-2962 +-84 +-55 +-15 +-52 +-8671 +-7901 +-7166 +-6649 +-36 +-60 +-2 +-6909 +-6601 +-6018 +-5848 +-6552 +-8161 +-9624 +-76 +-126 +-112 +-7839 +-5514 +-1961 +-43 +2334 +-85 +1052 +-41 +-3008 +-4769 +-107 +-5556 +-5347 +-107 +-78 +-4021 +-25 +-22 +4170 +-70 +-106 +4474 +4919 +7441 +-83 +-119 +-26 +7550 +4437 +794 +-29 +-80 +-7859 +-98 +-8 +-3581 +-52 +-49 +-27 +-22 +14868 +17731 +19485 +20076 +19771 +17251 +-17 +8298 +-31 +-57 +-106 +-61 +-1474 +-62 +-117 +-21 +-88 +-999 +1316 +2632 +-118 +-1489 +-5615 +-94 +-119 +-28 +-10 +-28 +-68 +-80 +-15543 +-17907 +-19674 +-20197 +-112 +-20674 +-112 +-46 +-18073 +-124 +-100 +-121 +-117 +-44 +-114 +-69 +-5807 +-108 +-4832 +-4264 +-2 +-920 +-82 +-7 +-14 +-33 +-98 +3869 +-96 +2313 +1644 +-116 +-78 +-76 +-70 +-1 +-120 +8565 +-16 +-102 +8254 +8457 +-120 +10532 +-9 +-86 +-2 +-45 +13847 +-99 +16462 +-127 +12320 +-108 +8533 +8732 +10036 +11610 +-127 +12668 +11636 +10062 +8490 +6770 +-55 +-31 +-77 +-105 +4938 +4370 +3850 +-89 +2423 +1076 +-684 +-2020 +-53 +-2279 +-3 +-3015 +-34 +-2972 +-50 +-2003 +-1954 +-90 +-48 +-5095 +-29 +-8086 +-70 +-6562 +-6103 +-7078 +-15 +-23 +-6640 +-6067 +-5788 +-6043 +-6043 +-44 +-125 +-8588 +-9627 +-10706 +-94 +-62 +-116 +-104 +-87 +1577 +2148 +781 +-59 +-100 +-27 +-24 +-3720 +-28 +-8442 +-35 +-4080 +-948 +624 +1352 +-99 +3087 +3380 +-37 +7938 +10103 +-57 +-22 +9790 +-57 +2414 +-92 +-3 +-19 +-7902 +-101 +-4996 +-1953 +812 +3120 +-48 +11635 +-48 +-15 +-60 +17523 +-124 +-118 +13436 +12657 +10778 +7500 +-122 +-92 +-41 +-5821 +-24 +-32 +-50 +1817 +-97 +2397 +-8 +-4604 +-7853 +-59 +-10986 +-91 +-118 +-80 +-39 +-15276 +-16868 +-17872 +-18925 +-85 +-20458 +-10 +-20974 +-80 +-28 +-15513 +-114 +-11725 +-10217 +-8106 +-89 +-14 +-33 +-83 +-68 +-32 +-86 +786 +2660 +4376 +5136 +-72 +-24 +-2 +-22 +1282 +1132 +1875 +-109 +-44 +-56 +6720 +-53 +6774 +7188 +-10 +-11 +-4 +9057 +-73 +9063 +-85 +-37 +-52 +16240 +15637 +-37 +12109 +-4 +-114 +-1 +-9 +-27 +13110 +12917 +-77 +10043 +-19 +8031 +7204 +6210 +-11 +-24 +5745 +5962 +-53 +3664 +-95 +-39 +565 +-673 +-76 +-1704 +-2236 +-3015 +-63 +-31 +-106 +-29 +-1458 +-3031 +-92 +-5085 +-5843 +-69 +-6138 +-6835 +-3 +-37 +-37 +-33 +-7362 +-7089 +-29 +-5031 +-73 +-5873 +-95 +-7853 +-9434 +-11512 +-12760 +-9 +-103 +-2491 +-35 +-1730 +-994 +-130 +-72 +1072 +-224 +-3051 +-31 +-7047 +-7321 +-6386 +-75 +-90 +-40 +-687 +-443 +339 +1897 +4648 +-82 +-107 +10321 +11349 +-109 +9535 +-117 +119 +-3058 +-4301 +-116 +-50 +-114 +-118 +-58 +65 +5126 +-120 +14360 +-125 +16641 +16246 +16239 +-19 +16989 +-117 +13437 +-43 +-101 +-107 +-3204 +-75 +-117 +-2047 +-24 +-53 +-99 +2375 +-24 +-3576 +-5882 +-4 +-8700 +-5 +-9668 +-11246 +-115 +-13456 +-14330 +-15824 +-17866 +-120 +-20 +-20689 +-20643 +-20612 +-19663 +-17650 +-21 +-12712 +-43 +-4 +-18 +-46 +-29 +-14 +-7120 +-5352 +-118 +-666 +-24 +-113 +-2 +4899 +-37 +2923 +1370 +-44 +-21 +-4 +3851 +4612 +4621 +4679 +-39 +-81 +-62 +-84 +-59 +7937 +-53 +7475 +-32 +-19 +12410 +14659 +15647 +-42 +13895 +11613 +9984 +10013 +11092 +-117 +-128 +12303 +12357 +-104 +11386 +-31 +-120 +-47 +-67 +6183 +-16 +7030 +-9 +5738 +4115 +-38 +-101 +2354 +-17 +-68 +-20 +-24 +-125 +-1973 +-1216 +-1179 +-99 +-1961 +-2548 +-3001 +-4068 +-5517 +-104 +-106 +-10 +-7349 +-7 +-12 +-102 +-7564 +-86 +-39 +-16 +-3325 +-13 +-6134 +-110 +-67 +-11498 +-10410 +-23 +-104 +-6375 +-6 +-35 +-1261 +626 +-114 +1354 +284 +-99 +-117 +-6837 +-28 +-4835 +-119 +-4094 +-127 +-3031 +-1280 +-417 +-1 +-93 +4724 +8961 +12132 +-124 +11044 +-2 +-97 +-106 +-93 +-187 +-4 +-82 +-86 +-8591 +-5858 +-1535 +2841 +6778 +10075 +12138 +-42 +-88 +-54 +17990 +18812 +18722 +16730 +12646 +7427 +-74 +-119 +-88 +-15 +-965 +1848 +3591 +-46 +1573 +-205 +-1711 +-3278 +-5328 +-7345 +-8338 +-112 +-9104 +-10232 +-121 +-12996 +-22 +-16541 +-17896 +-19112 +-90 +-13 +-21423 +-20424 +-89 +-16351 +-13761 +-11948 +-37 +-10721 +-10398 +-43 +-80 +-78 +-52 +-85 +-2711 +265 +-78 +3888 +-68 +-24 +-67 +1084 +1637 +2400 +-65 +-54 +2884 +2927 +3941 +5192 +-117 +7693 +8012 +7755 +-7 +-15 +-117 +7488 +10600 +-21 +14083 +14368 +14117 +13346 +-24 +10753 +-23 +-40 +11856 +-65 +-90 +12878 +12590 +-103 +10601 +-42 +7724 +7964 +-120 +-79 +-15 +6258 +5139 +-100 +-15 +-70 +2835 +-72 +125 +-924 +-2501 +-25 +-1787 +-723 +-470 +-45 +-2253 +-61 +-2278 +-2722 +-89 +-5795 +-5884 +-37 +-4850 +-6048 +-84 +-97 +-65 +-7056 +-53 +-3229 +-3762 +-5288 +-7149 +-36 +-21 +-14 +-103 +-9366 +-44 +-5 +-45 +-20 +-29 +1406 +1655 +-102 +-1498 +-1982 +-2982 +-4583 +-38 +-5773 +-78 +-3838 +-97 +-75 +-95 +-4287 +-2812 +-76 +5155 +8486 +-2 +10363 +-62 +9573 +8756 +7535 +-120 +-75 +-21 +-47 +-8440 +-8347 +-6529 +-3244 +337 +3386 +5717 +-121 +9832 +12597 +15455 +-77 +20075 +-100 +-39 +15364 +-81 +3428 +-28 +-112 +-903 +338 +1796 +-79 +3075 +-22 +-128 +-469 +-123 +-56 +-17 +-111 +-26 +-119 +-74 +-10 +-118 +-6 +-14307 +-89 +-18067 +-20631 +-29 +-71 +-20866 +-8 +-17137 +-15338 +-9 +-5 +-11657 +-11190 +-10913 +-19 +-101 +-78 +-7106 +-3789 +-480 +-51 +-61 +1858 +1859 +2162 +-95 +2103 +2120 +-71 +2831 +-80 +-105 +-28 +5425 +6977 +-96 +7429 +-76 +5159 +-108 +5698 +-17 +10030 +-83 +13171 +13182 +-69 +-103 +12313 +-62 +-32 +-92 +11014 +12348 +13881 +13853 +-100 +10573 +-59 +-48 +-11 +-110 +8030 +7539 +-51 +-83 +-4 +6227 +6775 +6512 +4407 +-74 +40 +-645 +-68 +-971 +-39 +-1997 +-111 +-407 +-165 +-998 +-28 +-95 +-4301 +-3226 +-84 +-3776 +-5561 +-7581 +-46 +-8698 +-2 +-31 +-4227 +-4 +-97 +-6364 +-7679 +-7580 +-24 +-108 +-10188 +-104 +-11481 +-115 +-2 +-5025 +-92 +-120 +-232 +-126 +-63 +-1231 +-3500 +-62 +-87 +-70 +-3028 +-128 +-57 +-103 +-7123 +-6021 +-25 +367 +3180 +5448 +-15 +-17 +-67 +-12 +-89 +10032 +7777 +-52 +-1437 +-5081 +-1 +-128 +-6580 +-38 +-1745 +569 +-108 +-35 +-109 +-69 +-126 +-57 +-14 +21866 +-81 +16421 +-63 +-51 +3353 +-46 +-3 +1148 +-25 +-29 +3648 +-87 +-18 +568 +-1255 +-2772 +-3786 +-4832 +-30 +-7140 +-101 +-8067 +-8890 +-9910 +-11907 +-51 +-17296 +-102 +-41 +-21395 +-20899 +-72 +-18652 +-82 +-47 +-12798 +-11408 +-12247 +-13566 +-42 +-12455 +-10719 +-8327 +-5298 +-119 +-10 +-40 +-46 +799 +-60 +2857 +2830 +2173 +-36 +1311 +-65 +1562 +3447 +5692 +-27 +6927 +6430 +5226 +3927 +-24 +5933 +7797 +8779 +9850 +11588 +-50 +13903 +13056 +-27 +10366 +-43 +12094 +-18 +-42 +-15 +12852 +-40 +-95 +11031 +-99 +-41 +-65 +8471 +-18 +6741 +7459 +8537 +-58 +-120 +5680 +-75 +-79 +-30 +890 +-98 +-115 +-88 +43 +-81 +-223 +-123 +-2230 +-2534 +-2798 +-2702 +-1923 +-106 +-107 +-120 +-8867 +-82 +-7410 +-18 +-108 +-107 +-5582 +-5568 +-45 +-128 +-5549 +-7347 +-9446 +-10445 +-32 +-10943 +-10433 +-9208 +-79 +-118 +-1738 +-177 +-152 +-1216 +-70 +-44 +-3242 +-1922 +-1492 +-56 +-114 +-6074 +-7390 +-76 +-6613 +-53 +-1197 +-40 +1881 +-53 +6964 +9754 +11854 +-114 +11131 +-67 +-58 +1059 +-49 +-5357 +-6100 +-6 +-3577 +-31 +-2734 +-2433 +-1190 +1846 +-35 +-98 +16410 +20314 +21790 +-126 +17989 +-107 +-55 +5724 +-13 +1842 +-73 +3140 +3651 +3910 +3663 +-23 +1868 +798 +-931 +-111 +-4334 +-71 +-6021 +-6386 +-41 +-6123 +-8142 +-23 +-13031 +-15059 +-17038 +-19187 +-21244 +-106 +-122 +-73 +-99 +-15290 +-13777 +-12974 +-16 +-14804 +-15014 +-3 +-11953 +-9663 +-6785 +-33 +-3308 +-15 +-691 +-1 +1912 +-41 +-18 +-40 +768 +-74 +-105 +2048 +4683 +-106 +-18 +-49 +-24 +5432 +-111 +-117 +3875 +-88 +8276 +10003 +-73 +-43 +12156 +-11 +11605 +-115 +-57 +12086 +12916 +12818 +12131 +-35 +-72 +-64 +13346 +12608 +10797 +9036 +8530 +-69 +8807 +-115 +7277 +-59 +-108 +-49 +-126 +4695 +2855 +-95 +-222 +-1017 +-402 +-91 +891 +-714 +-127 +-1 +-5 +-681 +522 +-252 +-2768 +-88 +-6540 +-6803 +-6575 +-6563 +-24 +-12 +-6019 +-4817 +-7 +-4595 +-5012 +-58 +-26 +-8176 +-8923 +-10373 +-43 +-51 +-22 +-7110 +-31 +-2705 +-1950 +-114 +-2994 +-3257 +-2708 +-1209 +-94 +-672 +-81 +-4822 +-75 +-55 +-106 +-52 +-5607 +-89 +-21 +-670 +2101 +5126 +-65 +11299 +-76 +-105 +-109 +-7 +2409 +-645 +-2451 +-97 +-12 +-34 +-98 +-51 +-5537 +-126 +-118 +-127 +8450 +13658 +17756 +-50 +-51 +19243 +15486 +11794 +-6 +5639 +-123 +-32 +-105 +3901 +3939 +3956 +-22 +-17 +2401 +-100 +-40 +-3835 +-118 +-50 +-4816 +-5255 +-79 +-80 +-8181 +-9923 +-12259 +-93 +-18417 +-108 +-114 +-105 +-19455 +-17307 +-15286 +-14271 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_D_146_832.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_D_146_832.samples new file mode 100644 index 00000000..d00a1ca0 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_D_146_832.samples @@ -0,0 +1,4096 @@ +-58 +-82 +-72 +-698 +-1 +-98 +-7846 +-37 +-7046 +-5050 +-34 +-62 +-6120 +-9471 +-12739 +-95 +-99 +-95 +-13813 +-12001 +-10219 +-31 +-108 +-127 +-11707 +-13474 +-14224 +-13499 +-52 +-75 +-7631 +-7141 +-46 +-123 +-9916 +-42 +-125 +-11448 +-96 +-83 +-6623 +-50 +-4026 +-37 +-42 +-2297 +-1480 +-58 +-1202 +-1498 +-1475 +-55 +-79 +-100 +-70 +-103 +-50 +-27 +2817 +-76 +2124 +-78 +4116 +6147 +8536 +10854 +-127 +13632 +13400 +11803 +-71 +6243 +-91 +2928 +3141 +-3 +6936 +9272 +10611 +-60 +-24 +6704 +4376 +-55 +1655 +-19 +4427 +-45 +-21 +11293 +-6 +10338 +9062 +-85 +-96 +-93 +884 +-44 +-30 +-69 +-109 +-80 +-58 +-10 +1063 +610 +818 +1369 +-17 +-27 +-69 +-16 +-3809 +-4232 +-89 +-3251 +-2511 +-1767 +-16 +597 +2146 +-40 +-97 +2612 +884 +-18 +-3462 +-79 +-6343 +-76 +-7085 +-86 +-98 +-2 +-97 +7695 +-7 +10607 +9827 +-112 +5667 +2651 +-120 +-36 +-13 +-9949 +-9899 +-7641 +-3763 +-99 +-28 +-68 +9038 +10028 +10526 +-115 +9488 +-31 +6918 +5993 +-85 +4629 +3932 +3138 +2109 +-103 +-1200 +-113 +-128 +-5347 +-90 +-46 +-76 +-28 +-120 +6456 +-33 +14114 +-52 +-30 +-96 +22108 +-66 +-45 +-123 +14617 +-64 +-109 +-65 +3881 +-21 +577 +-439 +-964 +-100 +-96 +-3 +-93 +-43 +-471 +-2971 +-5627 +-32 +-9867 +-11500 +-122 +-15073 +-17077 +-98 +-19620 +-19158 +-20 +-71 +-78 +-105 +-7 +-55 +-7085 +-6029 +-4855 +-3834 +-3468 +-86 +-6054 +-8699 +-92 +-14320 +-116 +-18060 +-79 +-20618 +-43 +-88 +-13 +-88 +-65 +-24058 +-21743 +-101 +-17287 +-56 +-97 +-13781 +-11972 +-9396 +-6329 +-113 +-44 +-117 +-107 +-28 +6930 +7443 +-54 +-23 +-82 +-54 +-8 +11565 +12092 +12357 +12341 +-44 +-114 +-122 +10816 +11312 +12105 +12661 +12643 +12127 +11523 +11298 +11625 +12368 +-33 +14129 +14711 +14712 +13949 +12667 +-37 +11061 +11619 +-106 +13352 +-99 +-92 +6973 +-77 +-120 +521 +1295 +2587 +-26 +3843 +3375 +2143 +-94 +-2228 +-4247 +-5053 +-4280 +-2445 +-723 +-207 +-1236 +-93 +-14 +-8915 +-11188 +-12503 +-99 +-26 +-10495 +-9406 +-7 +-10198 +-11917 +-13494 +-122 +-46 +-28 +-27 +-10388 +-90 +-9166 +-9157 +-107 +-12 +-23 +-122 +-11218 +-67 +-25 +-21 +-28 +-41 +-3 +-5291 +-99 +-4239 +-75 +-4574 +-23 +-3810 +-2976 +-1922 +-81 +-60 +-88 +3439 +3396 +-11 +636 +-43 +-1466 +-56 +-112 +2929 +6234 +-3 +12607 +-70 +13382 +-101 +-61 +4971 +-84 +-102 +6469 +-18 +9226 +9536 +-102 +8976 +8285 +7011 +-54 +2929 +1536 +-77 +-30 +-89 +8969 +-13 +11338 +-100 +-84 +8797 +7801 +6680 +5175 +3380 +-78 +-108 +361 +548 +786 +854 +-102 +1303 +-10 +-36 +-37 +-49 +-11 +-112 +-1945 +-12 +-85 +-32 +-75 +-3787 +-83 +-104 +-37 +-81 +-6 +4876 +3454 +1335 +-64 +-49 +-4824 +-6622 +-7911 +-85 +-45 +-75 +-18 +1602 +5723 +-49 +11123 +-100 +9472 +6659 +3340 +-140 +-11 +-6588 +-8418 +-87 +-55 +-4343 +-1422 +1341 +-76 +5699 +7003 +-20 +-55 +-33 +-72 +-84 +-26 +7946 +7786 +7216 +-95 +-88 +2116 +18 +-1767 +-3274 +-4608 +-82 +-6308 +-6029 +-10 +-1983 +1629 +5677 +9553 +12857 +-113 +-17 +-28 +20763 +21328 +20757 +-94 +-122 +12040 +8560 +-117 +4631 +-42 +-66 +3415 +2861 +-104 +-126 +-69 +1599 +-66 +1344 +-4 +-2440 +-5627 +-19 +-116 +-14018 +-15303 +-109 +-48 +-16882 +-114 +-17324 +-71 +-38 +-90 +-9711 +-26 +-84 +-125 +-5283 +-5307 +-22 +-5022 +-5325 +-6319 +-125 +-10469 +-52 +-65 +-19337 +-113 +-23003 +-23493 +-113 +-23182 +-22993 +-22742 +-49 +-60 +-35 +-20475 +-46 +-16628 +-13527 +-103 +-114 +-4018 +-2024 +-667 +-111 +-26 +2856 +4460 +6216 +7938 +-71 +10363 +10598 +-55 +-99 +-79 +-115 +-120 +-66 +13090 +11796 +10297 +9532 +-115 +11021 +12395 +13432 +-6 +-33 +-19 +11801 +-67 +-70 +-68 +-42 +15458 +16984 +-97 +-31 +13059 +-58 +-99 +-84 +5217 +5712 +6703 +-7 +7290 +-80 +-18 +-11 +-1532 +-105 +-2712 +-1200 +-27 +2080 +2173 +-15 +-949 +-56 +-5071 +-74 +-51 +-41 +-7570 +-7846 +-8384 +-112 +-43 +-10480 +-36 +-12265 +-13212 +-13777 +-76 +-12769 +-11462 +-10235 +-8 +-14 +-64 +-10 +-9908 +-10645 +-48 +-42 +-12535 +-11983 +-45 +-9392 +-8189 +-7423 +-88 +-84 +-6632 +-122 +-41 +-104 +-7051 +-81 +-23 +1394 +3856 +-14 +-14 +100 +-27 +-4277 +-120 +-3226 +-29 +-71 +-66 +-104 +8828 +10352 +10600 +-29 +7432 +-91 +4694 +-111 +-11 +8821 +10292 +-48 +10775 +-111 +8484 +-57 +5198 +3679 +2566 +-60 +-36 +-52 +-41 +-16 +-34 +9482 +9838 +10327 +10531 +-31 +8458 +6405 +4471 +3164 +-99 +-39 +1581 +-30 +-128 +1315 +-60 +-109 +3388 +4151 +4144 +-54 +-45 +-1251 +-2978 +-3976 +-45 +-95 +-7 +-99 +-48 +-17 +2653 +4411 +-61 +-38 +3666 +-6 +-1674 +-99 +-7385 +-74 +-25 +-9211 +-6863 +-3315 +798 +4730 +-100 +-12 +-15 +-90 +-86 +4403 +1040 +-2179 +-104 +-6132 +-6335 +-5555 +-119 +-2702 +-1228 +-122 +-52 +-115 +-75 +5964 +6961 +-8 +7522 +-37 +-123 +8754 +9290 +-81 +-16 +5679 +-16 +-109 +-2527 +-103 +-90 +-5782 +-6099 +-18 +-48 +-64 +-1269 +2822 +7490 +-117 +15480 +-44 +-117 +19286 +18797 +17938 +16904 +15649 +13944 +11614 +8810 +-9 +-15 +3840 +4387 +-118 +5726 +-122 +-126 +3682 +-53 +-13 +-66 +-46 +-122 +-5847 +-52 +-46 +-14487 +-16301 +-17134 +-17116 +-16514 +-15614 +-87 +-13790 +-26 +-82 +-10128 +-95 +-62 +-40 +-76 +-2780 +-2511 +-3497 +-3 +-8372 +-75 +-123 +-36 +-17050 +-18372 +-105 +-19915 +-33 +-45 +-122 +-51 +-25788 +-77 +-47 +-126 +-17862 +-16020 +-14 +-72 +-11229 +-8851 +-5 +-66 +-897 +1028 +-34 +-61 +3659 +-10 +5997 +7807 +9742 +11349 +12116 +-2 +10575 +9240 +8540 +-110 +10021 +11622 +13148 +14108 +14145 +13129 +11353 +-25 +8216 +-123 +-47 +12631 +15477 +17483 +17979 +16899 +14714 +-86 +-34 +-108 +9792 +-57 +-109 +-99 +-23 +-112 +-20 +3920 +2309 +1316 +831 +809 +-55 +1904 +-53 +2616 +-78 +633 +-992 +-58 +-3204 +-108 +-63 +-4765 +-9 +-5833 +-59 +-6837 +-117 +-59 +-51 +-50 +-2 +-13050 +-91 +-11675 +-127 +-10684 +-10118 +-9405 +-8875 +-72 +-10172 +-12022 +-13725 +-14262 +-13205 +-10988 +-8650 +-7 +-82 +-2 +-9418 +-17 +-11480 +-43 +-11 +-8431 +-6041 +-3298 +-53 +1563 +2378 +-28 +-727 +-3327 +-37 +-5574 +-77 +-3022 +-1024 +-123 +-113 +-56 +-21 +7018 +-23 +4939 +-77 +-84 +-56 +-60 +8724 +10042 +-39 +-96 +-120 +-63 +-97 +7530 +-101 +-31 +2862 +-92 +2654 +-92 +5738 +-120 +-23 +-96 +-102 +10103 +-18 +10507 +-62 +-59 +-53 +4954 +3354 +2306 +1814 +-64 +-119 +2368 +-55 +-80 +4376 +4638 +4369 +-29 +-20 +-98 +-1155 +-2986 +-4534 +-84 +-71 +-13 +-5 +366 +3119 +-36 +6517 +-29 +4933 +-98 +-692 +-28 +-7377 +-9892 +-31 +-10397 +-6 +-98 +-13 +-122 +-13 +7777 +8047 +7510 +6441 +4981 +3162 +-17 +-58 +-3521 +-5029 +-72 +-4766 +-114 +-69 +-1190 +-122 +-139 +-113 +1893 +-89 +-125 +6961 +-62 +9276 +9479 +-68 +-29 +-102 +8010 +-23 +-106 +2364 +-63 +-45 +-21 +-75 +-81 +-32 +-118 +-127 +-44 +-2 +5126 +8749 +12372 +15633 +-107 +19249 +19006 +-22 +-122 +13881 +12333 +11078 +-47 +8764 +-62 +6730 +-112 +6197 +6197 +6148 +-26 +-19 +-34 +-77 +2644 +-103 +-3564 +-6337 +-16 +-10184 +-33 +-33 +-14545 +-15245 +-15562 +-15755 +-33 +-15780 +-15021 +-34 +-31 +-67 +-78 +-79 +-2786 +-37 +-5010 +-6316 +-110 +-41 +-8622 +-18 +-121 +-94 +-41 +-90 +-58 +-57 +-22503 +-82 +-117 +-22959 +-23490 +-23789 +-60 +-21949 +-19646 +-16788 +-13798 +-102 +-82 +-7674 +-6797 +-29 +-4535 +-87 +-78 +-61 +-102 +8234 +9021 +-9 +-18 +-59 +6225 +7007 +8960 +11537 +13832 +14900 +-82 +-84 +9735 +7959 +7523 +-66 +9996 +-38 +-66 +14363 +14959 +14872 +14129 +13092 +12303 +-109 +-91 +-16 +14197 +-86 +-15 +-47 +-116 +9030 +7498 +5980 +-115 +-11 +-13 +-23 +-109 +4199 +3889 +-73 +-26 +103 +-415 +-489 +-72 +-27 +-83 +-2813 +-3536 +-45 +-4043 +-4503 +-5790 +-96 +-10742 +-12953 +-13790 +-16 +-11413 +-58 +-8842 +-8652 +-8951 +-9612 +-10678 +-64 +-120 +-13999 +-78 +-11766 +-41 +-8119 +-7358 +-9 +-16 +-15 +-12467 +-13556 +-13719 +-57 +-18 +-8431 +-64 +-59 +-95 +121 +-74 +-45 +-30 +-5775 +-121 +-5 +-9 +-1951 +-39 +521 +1378 +-128 +2900 +3401 +-46 +3343 +3178 +-84 +-22 +-87 +8231 +9817 +-30 +10874 +-22 +9763 +-88 +7791 +6523 +5219 +-18 +-76 +2887 +3083 +3887 +5167 +6708 +8282 +-41 +-18 +-8 +-125 +-103 +-56 +7691 +6257 +-102 +-107 +3125 +-102 +2168 +-113 +-16 +4473 +-110 +-33 +-104 +5244 +-49 +1863 +-53 +-2486 +-34 +-88 +-33 +-64 +-9 +-42 +3704 +-120 +8266 +7783 +5680 +2631 +-735 +-3990 +-101 +-8699 +-9605 +-9428 +-9 +-82 +-107 +-3 +-104 +6206 +7521 +7505 +-70 +-91 +-93 +1399 +562 +-94 +-946 +-78 +-90 +-55 +-95 +-84 +-3011 +-45 +-2 +799 +1606 +2325 +3199 +-90 +6423 +-35 +10609 +11580 +11308 +10069 +-67 +-76 +4617 +-50 +-501 +-3280 +-29 +-7401 +-8444 +-8675 +-7844 +-125 +-2521 +1398 +-57 +-32 +-12 +13182 +14713 +15966 +-92 +16945 +16183 +14656 +-20 +11040 +-33 +8745 +-124 +-12 +-22 +-78 +-87 +9501 +9487 +8505 +-18 +-65 +-103 +-75 +-1721 +-42 +-4485 +-38 +-32 +-101 +-45 +-16778 +-15 +-17636 +-36 +-15 +-23 +-10473 +-9429 +-12 +-64 +-7048 +-5876 +-113 +-67 +-3764 +-87 +-5822 +-7617 +-9427 +-10979 +-12214 +-13307 +-7 +-16330 +-36 +-20704 +-22720 +-24305 +-25235 +-117 +-24018 +-106 +-19424 +-17552 +-102 +-16803 +-34 +-55 +-14002 +-10490 +-6319 +-113 +-65 +-66 +2387 +-107 +-47 +-43 +-88 +-124 +-53 +-63 +-68 +12860 +12377 +-69 +-87 +8478 +8480 +-110 +-98 +10545 +-120 +-18 +12327 +12671 +12666 +12351 +-116 +-94 +-39 +-28 +-28 +15957 +16415 +-54 +-71 +11885 +-60 +-65 +9756 +-102 +7427 +5938 +4975 +-110 +-119 +5176 +4864 +3932 +2582 +-71 +-80 +-91 +-127 +-59 +-75 +810 +-39 +-77 +-1697 +-4022 +-39 +-9110 +-10665 +-58 +-10452 +-114 +-91 +-93 +-47 +-8853 +-10150 +-62 +-71 +-13736 +-80 +-107 +-14 +-9405 +-61 +-6538 +-7047 +-8949 +-67 +-13971 +-15269 +-61 +-77 +-11976 +-119 +-118 +-91 +-4521 +-9 +-3321 +-117 +-4514 +-25 +-89 +-50 +-81 +-98 +-2478 +-1187 +-55 +121 +270 +335 +-89 +580 +883 +-43 +-54 +3879 +5412 +-49 +-100 +-107 +-11 +10588 +-36 +-38 +-116 +-64 +5961 +4388 +3185 +2640 +2840 +-13 +-73 +-55 +6769 +8197 +9730 +-14 +11584 +11316 +10295 +-99 +-55 +-85 +4946 +3962 +3098 +-18 +2572 +3361 +-26 +-58 +8028 +-124 +-44 +5937 +-95 +-396 +-3466 +-5572 +-6324 +-84 +-4044 +-5 +620 +-70 +5235 +-126 +-37 +7269 +-111 +1556 +-2303 +-5833 +-32 +-78 +-102 +-7936 +-109 +-2977 +-918 +631 +-53 +-112 +4980 +-79 +6229 +-26 +-77 +-48 +-28 +-117 +-103 +-1923 +-48 +-2711 +-3043 +-15 +-3583 +-30 +-110 +-29 +-69 +-41 +-115 +-47 +-46 +-99 +-18 +-124 +-79 +11831 +-68 +-39 +5491 +2377 +-684 +-3532 +-79 +-47 +-8601 +-23 +-7380 +-115 +-3024 +-201 +-47 +-125 +-7 +-57 +13873 +15635 +16463 +16163 +-37 +-7 +-12 +9286 +8827 +-114 +-80 +11337 +11579 +11013 +-59 +8732 +7769 +7229 +-93 +7031 +-33 +-59 +2872 +-461 +-4037 +-56 +-9727 +-63 +-12967 +-13999 +-91 +-14987 +-38 +-101 +-13703 +-112 +-11205 +-9365 +-7415 +-5783 +-39 +-62 +-1 +-25 +-24 +-32 +-5273 +-4847 +-78 +-8101 +-11513 +-15095 +-18124 +-29 +-21382 +-55 +-54 +-20365 +-20125 +-5 +-74 +-23545 +-24279 +-108 +-21 +-18155 +-14229 +-123 +-96 +-10 +-6108 +-5630 +-77 +-3218 +-1496 +273 +2150 +-8 +-88 +9074 +-97 +10365 +9239 +-72 +7168 +-73 +-15 +-23 +-43 +-110 +-53 +10580 +-61 +-50 +10518 +-44 +-103 +-125 +12564 +-100 +-107 +-38 +15739 +-2 +-112 +13950 +12660 +11321 +10106 +-54 +-86 +8478 +-113 +-83 +-28 +6993 +5183 +3146 +-70 +612 +-34 +1578 +2619 +3375 +3591 +-102 +-33 +-76 +-1495 +-4012 +-6359 +-36 +-20 +-7849 +-6596 +-109 +-99 +-6114 +-50 +-78 +-12445 +-13770 +-13974 +-116 +-11770 +-10224 +-8849 +-7815 +-7350 +-34 +-12 +-65 +-12726 +-108 +-55 +-14787 +-41 +-9 +-118 +-8439 +-6909 +-104 +-65 +-5848 +-95 +-6646 +-6831 +-6579 +-5850 +-4809 +-3765 +-2968 +-2469 +-62 +-1732 +-24 +-939 +-12 +-92 +-1007 +-100 +-102 +1347 +-93 +5172 +-31 +8217 +-19 +-85 +10359 +-61 +-98 +-45 +6988 +-52 +-104 +3135 +-45 +2930 +3614 +4668 +-53 +6922 +8020 +9318 +10781 +-46 +12322 +-95 +-80 +-124 +-17 +2607 +-123 +2340 +3701 +5637 +-101 +8969 +-4 +9081 +7998 +-9 +-79 +1603 +-1475 +-57 +-9 +-6793 +-5323 +-77 +-112 +4371 +-105 +7489 +-112 +6254 +-73 +2308 +-221 +-2773 +-5032 +-107 +-7869 +-70 +-7817 +-6391 +-4051 +-1218 +-113 +-69 +4103 +4189 +-127 +-68 +3680 +-39 +3136 +2309 +1145 +-131 +-7 +-2225 +-2960 +-3510 +-53 +-4076 +-4006 +-39 +-77 +-5 +-35 +1599 +-65 +-84 +8295 +10320 +-124 +-95 +12351 +10774 +8265 +-11 +-18 +-1 +-2294 +-34 +-118 +-117 +-61 +-8879 +-7872 +-5593 +-59 +2147 +6408 +9824 +11852 +-49 +-49 +-52 +-81 +11552 +-89 +-5 +12296 +11875 +-82 +-5 +-7 +-83 +9498 +-49 +10271 +11089 +11585 +-109 +9597 +7245 +-111 +2589 +-9 +-51 +-3306 +-6063 +-9143 +-53 +-14326 +-96 +-15357 +-14262 +-12709 +-33 +-10410 +-119 +-10148 +-5 +-81 +-56 +-7644 +-5293 +-16 +-1184 +-1178 +-3038 +-1 +-9400 +-16 +-12986 +-47 +-36 +-14273 +-15497 +-17106 +-18873 +-20708 +-24 +-24248 +-85 +-12 +-113 +-21969 +-18848 +-96 +-14009 +-61 +-70 +-19 +-56 +-9670 +-7050 +-79 +-1480 +785 +2575 +3959 +-122 +-116 +-43 +-85 +7259 +7752 +-83 +9063 +-51 +10060 +-10 +10284 +10290 +-30 +-10 +-115 +9299 +-121 +10099 +11621 +13571 +-65 +16219 +16142 +-82 +-11 +12916 +12081 +-85 +-84 +11873 +-67 +11839 +-78 +-87 +9330 +-66 +-95 +2888 +1599 +1563 +2671 +-7 +-69 +6490 +-112 +4471 +2155 +-115 +-2511 +-35 +-11 +-67 +-48 +-83 +-3059 +-3576 +-4807 +-6637 +-58 +-10744 +-12170 +-12796 +-61 +-11755 +-10492 +-105 +-114 +-7062 +-7165 +-8170 +-9858 +-25 +-13484 +-14474 +-14568 +-42 +-12782 +-11727 +-104 +-63 +-9129 +-8163 +-13 +-48 +-7 +-69 +-7829 +-93 +-6845 +-39 +-9 +-3812 +-127 +-2440 +-25 +-2449 +-2555 +-2535 +-2463 +-2453 +-2466 +-2211 +-34 +358 +2592 +4935 +6956 +-29 +9251 +9522 +-80 +9045 +-96 +-102 +-17 +6403 +-109 +3385 +-116 +-55 +-74 +-108 +-66 +8745 +10752 +-38 +11799 +-7 +10355 +-117 +-18 +5408 +-34 +2413 +2416 +-1 +-11 +8038 +10271 +-45 +-92 +-86 +8009 +-124 +838 +-2181 +-4041 +-42 +-4241 +-120 +-1762 +-1 +2064 +-74 +6259 +7522 +7689 +-4 +-14 +1880 +-4 +-82 +-13 +-121 +-7108 +-6838 +-6133 +-5032 +-3548 +-9 +-31 +-48 +2591 +-13 +-60 +-44 +-24 +-81 +3115 +-40 +1368 +526 +-29 +-79 +-1957 +-36 +-3800 +-4760 +-5512 +-101 +-42 +-128 +-1454 +1379 +4377 +7000 +8823 +9799 +10258 +-94 +-115 +11381 +-12 +8792 +-57 +1605 +-122 +-24 +-6 +-51 +-9704 +-72 +-5798 +-89 +-171 +-4 +-127 +-35 +6497 +-34 +10006 +-80 +-23 +12919 +-121 +-55 +-81 +9473 +-25 +10294 +10861 +-74 +11318 +11347 +11331 +-28 +11062 +-113 +10753 +-48 +9521 +7464 +-41 +-76 +-4757 +-8154 +-9916 +-10189 +-26 +-86 +-10186 +-72 +-13205 +-14317 +-14517 +-13775 +-16 +-10401 +-83 +-6138 +-4288 +-35 +-65 +-84 +-24 +-91 +-7891 +-85 +-120 +-69 +-81 +-82 +-11666 +-14738 +-17899 +-47 +-24 +-23170 +-2 +-105 +-106 +-21209 +-20414 +-19878 +-46 +-11 +-17905 +-16261 +-14223 +-29 +-9968 +-38 +-122 +-3996 +-107 +-87 +-80 +-91 +3932 +-61 +-102 +5680 +-120 +8556 +9729 +10251 +10082 +9487 +8794 +8254 +7958 +7962 +-111 +-75 +10359 +11846 +13347 +-69 +-58 +-92 +-16 +12649 +11862 +11853 +12640 +13856 +14939 +15365 +-36 +-45 +-27 +-25 +6153 +4647 +-5 +4406 +-77 +-4 +7263 +7472 +-114 +-22 +-24 +1851 +-70 +-102 +-26 +-1536 +-1263 +-653 +-189 +-452 +-1763 +-3973 +-6549 +-8867 +-7 +-52 +-85 +-10746 +-10 +-8652 +-7829 +-31 +-88 +-7931 +-8679 +-43 +-11146 +-24 +-96 +-42 +-38 +-7 +-30 +-11145 +-10456 +-9964 +-109 +-18 +-8941 +-46 +-8662 +-8589 +-8395 +-14 +-30 +-50 +-5022 +-3819 +-2762 +-112 +-2277 +-70 +-4344 +-101 +-5249 +-28 +-2991 +-62 +-500 +-117 +1401 +-12 +4668 +6750 +-77 +-72 +-83 +-98 +-8 +7774 +-107 +-53 +2854 +-108 +-105 +2085 +3087 +4639 +6709 +9067 +-24 +12612 +12664 +11296 +-108 +-115 +3588 +2154 +-4 +-101 +-75 +-29 +-23 +11094 +-43 +11627 +10773 +-105 +-19 +3605 +-14 +-90 +-32 +-4491 +-3970 +-2484 +-104 +-62 +4179 +5933 +-126 +-87 +6740 +-37 +3421 +1334 +-708 +-62 +-4320 +-5626 +-6350 +-19 +-47 +-5077 +-103 +-2510 +-4 +1064 +-3 +-32 +-94 +-67 +2415 +2604 +-97 +-2 +3905 +3111 +-52 +-666 +-58 +-65 +-5764 +-6103 +-5832 +-30 +-4231 +-95 +-1949 +-16 +-72 +3375 +-94 +-118 +12069 +-105 +-9 +-23 +10612 +-97 +-43 +-163 +-52 +-83 +-5790 +-70 +-7142 +-49 +-62 +-105 +-3298 +-1156 +-89 +-67 +-37 +-26 +-38 +9330 +8981 +9024 +9747 +-124 +-13 +-2 +10805 +9339 +8227 +-51 +9272 +-8 +13379 +14923 +15427 +-89 +13108 +10793 +-30 +5476 +2922 +-108 +-122 +-2468 +-3575 +-83 +-52 +-115 +-19 +-85 +-42 +-15092 +-99 +-60 +-9409 +-7656 +-6653 +-6 +-15 +-7072 +-41 +-6840 +-40 +-4745 +-3740 +-64 +-4044 +-110 +-8157 +-10735 +-12993 +-14762 +-92 +-17623 +-90 +-89 +-21215 +-21641 +-21666 +-21504 +-94 +-24 +-21191 +-100 +-19893 +-65 +-126 +-13533 +-11214 +-9 +-94 +-64 +-65 +-93 +-1456 +-27 +-105 +-107 +-26 +6240 +7784 +-24 +-99 +-9 +-49 +6720 +6014 +-43 +6952 +8316 +-109 +11336 +-125 +12871 +12599 +11789 +-61 +-89 +11270 +12610 +14196 +-88 +-83 +16390 +-104 +-106 +-113 +-93 +8771 +-67 +-28 +-50 +-14 +7983 +-9 +-56 +-121 +6969 +-8 +-82 +1854 +-112 +-118 +1562 +-26 +-64 +2050 +-110 +374 +-85 +-3019 +-77 +-97 +-110 +-9629 +-9722 +-76 +-118 +-60 +-102 +-6637 +-6807 +-7557 +-8701 +-9914 +-10920 +-119 +-12173 +-12685 +-13190 +-13443 +-104 +-12242 +-10938 +-41 +-14 +-9463 +-10223 +-10969 +-11199 +-10714 +-9637 +-96 +-54 +-5876 +-5108 +-95 +-4588 +-4597 +-4515 +-4312 +-24 +-43 +-86 +-6 +-37 +-5024 +-4304 +-2991 +-1195 +886 +-74 +4940 +-31 +-116 +9283 +10073 +-111 +-22 +7270 +-116 +-44 +-17 +-33 +855 +2918 +-99 +8027 +-86 +-37 +-39 +-41 +9495 +7751 +-87 +4102 +-10 +2882 +-21 +4934 +-77 +9037 +-73 +-15 +-6 +12548 +-58 +-46 +-97 +2370 +-53 +-115 +-16 +-25 +-2467 +-21 +1641 +-50 +4884 +5720 +6179 +-4 +-77 +-115 +-63 +-31 +-40 +-107 +-122 +-5815 +-48 +-28 +-4605 +-3803 +-7 +-112 +-1762 +-50 +-60 +608 +1828 +-19 +4734 +-33 +5485 +4381 +-128 +-7 +-192 +-106 +-51 +-1985 +-23 +-4585 +-6120 +-68 +-7584 +-37 +-5263 +-2541 +1046 +-81 +8739 +-108 +12664 +12609 +-33 +10610 +-41 +8028 +-82 +-8 +-79 +-4 +-35 +-7923 +-7844 +-6583 +-27 +-109 +-2434 +-102 +-95 +-81 +-77 +-86 +7460 +9221 +10362 +10791 +-2 +9589 +-84 +7252 +6723 +-65 +8469 +10575 +12882 +-106 +-7 +-21 +14194 +12660 +-93 +-31 +9042 +-108 +-69 +6469 +-88 +1580 +-71 +-111 +-9351 +-87 +-12522 +-11 +-11443 +-60 +-98 +-10114 +-10375 +-10473 +-10144 +-9395 +-8404 +-7364 +-6321 +-5274 +-4250 +-84 +-2986 +-92 +-4037 +-5565 +-7558 +-9677 +-53 +-13051 +-115 +-15247 +-49 +-109 +-19081 +-20179 +-43 +-11 +-22432 +-71 +-22746 +-21900 +-20356 +-18411 +-16375 +-123 +-12779 +-11396 +-57 +-9362 +-118 +-6800 +-18 +-38 +-39 +-52 +-69 +7036 +6956 +6170 +5205 +-14 +4650 +5440 +6737 +8210 +9477 +10271 +10499 +10262 +9808 +-92 +-54 +9300 +-48 +-70 +-59 +-101 +-13 +-60 +16956 +-15 +-90 +11867 +-117 +-9 +-110 +9235 +-45 +-49 +-73 +-117 +9252 +7978 +-74 +-58 +-69 +-69 +-33 +2934 +-73 +3893 +-86 +4625 +-31 +2055 +-216 +-116 +-75 +-32 +-6302 +-119 +-7610 +-7931 +-7868 +-7411 +-53 +-6024 +-58 +-104 +-7051 +-8672 +-10442 +-116 +-12688 +-12770 +-40 +-11665 +-85 +-90 +-10986 +-11393 +-11 +-11925 +-11728 +-10 +-10731 +-10222 +-93 +-9430 +-8900 +-8124 +-7083 +-48 +-84 +-54 +-34 +-102 +-5070 +-82 +-12 +-10 +-46 +-61 +-6347 +-33 +-25 +-3221 +-52 +-45 +-20 +8243 +-52 +10356 +9500 +7718 +-81 +-55 +-48 +1136 +-1 +-72 +3168 +5166 +-102 +-38 +10364 +-95 +10075 +8829 +7249 +-1 +4192 +3100 +-2 +-6 +-64 +6206 +8977 +-83 +13605 +14184 +13382 +11544 +9233 +-59 +-46 +2369 +350 +-1 +-2255 +-84 +-1682 +-50 +-47 +3431 +-72 +-45 +-128 +-128 +6727 +-100 +-59 +590 +-82 +-1160 +-24 +-2229 +-3273 +-122 +-58 +-5834 +-5509 +-4485 +-89 +-4 +833 +2351 +-29 +3588 +3369 +-116 +-73 +-58 +-123 +4384 +-3 +-5 +-23 +-4 +-54 +-105 +-62 +-8333 +-42 +-5806 +-4233 +-49 +34 +-82 +-80 +9534 +12043 +13365 +13338 +12142 +-126 +-109 +-56 +2131 +-166 +-101 +-15 +-3972 +-4788 +-5608 +-6274 +-89 +-21 +-25 +-1948 +1045 +-9 +-29 +8236 +8755 +8304 +7237 +-114 +5181 +5123 +-46 +7969 +-74 +-51 +12898 +12864 +-14 +-67 +11632 +-91 +-97 +-102 +14696 +14174 +-17 +-28 +6912 +-19 +-118 +-1 +-4276 +-1 +-12 +-118 +-9215 +-35 +-9950 +-69 +-11148 +-11472 +-122 +-105 +-9950 +-42 +-7349 +-7 +-4575 +-6 +-24 +-71 +-96 +-4575 +-61 +-19 +-23 +-5 +-10646 +-11716 +-12756 +-13957 +-127 +-17400 +-35 +-21439 +-83 +-23488 +-23172 +-22008 +-20363 +-43 +-17596 +-17136 +-4 +-17150 +-16567 +-15076 +-12715 +-77 +-52 +-3734 +-51 +1073 +-10 +-85 +-59 +-113 +-51 +-9 +-74 +5490 +-64 +8451 +9246 +-76 +-16 +8063 +-94 +6461 +-9 +-94 +9825 +12058 +-106 +-116 +-29 +15898 +-98 +-83 +13683 +-121 +11279 +10569 +10505 +11024 +11807 +12368 +-11 +11358 +9806 +8041 +6522 +-101 +-27 +-70 +5183 +-33 +5439 +5456 +5389 +5215 +-42 +-79 +2629 +-91 +-84 +-31 +-26 +-43 +-18 +-65 +-5603 +-4748 +-4310 +-4550 +-81 +-70 +-7917 +-31 +-9203 +-85 +-57 +-10671 +-11239 +-17 +-11508 +-63 +-11215 +-52 +-91 +-11952 +-12190 +-12223 +-12004 +-11497 +-14 +-9947 +-9215 +-8675 +-100 +-7880 +-73 +-6284 +-5116 +-4059 +-3480 +-50 +-4540 +-82 +-98 +-45 +-63 +-8900 +-7586 +-50 +-30 +-78 +-109 +6728 +-64 +8720 +-33 +6400 +4711 +-87 +2154 +-60 +-52 +1549 +2606 +4442 +6781 +9007 +-16 +10803 +10012 +8448 +-93 +4708 +3145 +2126 +-114 +-85 +4419 +-65 +8741 +10503 +-28 +12549 +-83 +-110 +-36 +-76 +-23 +-113 +-26 +-120 +-77 +-2514 +-1483 +-29 +2098 +-80 +-112 +-112 +6010 +-107 +-87 +-12 +4644 +-52 +4206 +3174 +1289 +-1227 +-3793 +-57 +-6373 +-5767 +-4340 +-23 +-99 +-1668 +-59 +-83 +-18 +-28 +-90 +-122 +4894 +5753 +5971 +-48 +4664 +3329 +-119 +-229 +-14 +-108 +-81 +-8149 +-13 +-9452 +-122 +-57 +-3277 +-20 +4207 +-125 +9476 +-49 +11121 +-107 +-43 +-40 +7999 +6750 +-14 +3619 +1376 +-53 +-90 +-49 +-8373 +-45 +-7595 +-5067 +-1790 +1309 +3414 +4211 +-120 +3407 +3147 +-62 +4462 +5652 +6758 +-70 +-14 +8521 +8714 +-99 +-114 +-123 +-9 +-41 +-100 +14638 +15700 +16139 +-60 +14702 +12876 +10499 +-92 +5197 +-35 +-93 +-1178 +-81 +-4536 +-6114 +-7581 +-8896 +-18 +-102 +-120 +-32 +-85 +-24 +-9881 +-8665 +-24 +-5 +-4330 +-22 +-42 +-4243 +-5077 +-68 +-5853 +-5631 +-58 +-5762 +-11 +-8879 +-34 +-13794 +-16089 +-90 +-19432 +-20 +-20435 +-20199 +-128 +-19684 +-19859 +-80 +-52 +-41 +-85 +-4 +-18363 +-91 +-12938 +-9662 +-6650 +-4345 +-110 +-2259 +-1932 +-1451 +-499 +-54 +-107 +4370 +5720 +6669 +7229 +-19 +7188 +-18 +5903 +-107 +-51 +-45 +6918 +-54 +-83 +-88 +-6 +-74 +14669 +13863 +-6 +-18 +12348 +12415 +12598 +12802 +-104 +-119 +-126 +12131 +11373 +10508 +9587 +8570 +-24 +6198 +5243 +4907 +5376 +6452 +-21 +-70 +8230 +-32 +-38 +-116 +1116 +-697 +-58 +-16 +-124 +-4060 +-4252 +-4328 +-4323 +-4290 +-4349 +-43 +-5271 +-10 +-8 +-8159 +-8921 +-120 +-9422 +-9378 +-34 +-11 +-46 +-11667 +-12279 +-12466 +-12244 +-68 +-11515 +-11435 +-32 +-11682 +-11656 +-11405 +-10940 +-42 +-120 +-50 +-113 +-97 +-32 +-2732 +-3534 +-118 +-95 +-83 +-10223 +-10685 +-10397 +-106 +-7420 +-4783 +-1709 +1396 +-31 +5966 +6913 +-32 +6000 +-103 +-88 +1061 +-57 +-227 +773 +2830 +5418 +7804 +-117 +9834 +-50 +8505 +-31 +6254 +-11 +-124 +2938 +-79 +2069 +2667 +-27 +-17 +8552 +-12 +13102 +-77 +14898 +-65 +11842 +8761 +5462 +-62 +-97 +-9 +1037 +1405 +-74 +-69 +-27 +-14 +2319 +-35 +-121 +-116 +-29 +-26 +6265 +4435 +2607 +1040 +-156 +-1015 +-98 +-2178 +-2779 +-3518 +-4274 +-4781 +-4786 +-115 +-3214 +-2014 +-9 +-69 +1660 +2892 +4114 +-116 +6204 +6703 +6488 +-18 +-30 +549 +-2543 +-5553 +-8091 +-70 +-10387 +-9679 +-26 +-4850 +-1750 +-64 +2915 +4199 +-111 +-51 +-18 +10515 +-69 +12867 +-27 +-70 +6241 +2419 +-115 +-57 +-5545 +-6057 +-19 +-86 +-3567 +-2527 +-1701 +-55 +-31 +23 +-34 +-127 +-11 +-48 +5180 +5995 +-19 +-26 +-1 +5939 +5994 +6498 +7531 +9038 +10847 +-92 +-10 +15437 +15915 +-75 +-102 +14453 +13342 +11829 +9849 +-119 +-102 +-49 +1630 +116 +-57 +-101 +-6039 +-8323 +-10144 +-11242 +-50 +-11199 +-100 +-24 +-8184 +-7390 +-48 +-6815 +-102 +-6558 +-122 +-5120 +-4086 +-3215 +-2774 +-105 +-117 +-5066 +-33 +-9177 +-11510 +-15 +-15078 +-15866 +-16086 +-2 +-48 +-17300 +-43 +-20473 +-99 +-23214 +-23479 +-31 +-21394 +-48 +-24 +-15339 +-13300 +-121 +-9678 +-80 +-7161 +-6143 +-65 +-3279 +-1167 +-124 +-2 +4974 +5917 +-27 +5686 +-26 +3900 +-59 +-35 +4108 +-84 +7233 +8759 +-55 +10782 +-27 +-119 +-15 +-98 +13327 +13094 +12648 +-42 +-108 +12587 +13334 +14090 +14461 +14168 +13140 +11550 +-16 +8033 +-59 +-42 +6504 +-80 +-106 +8474 +-113 +-65 +-94 +7979 +6944 +5467 +3614 +1604 +-215 +-1500 +-51 +-108 +-2042 +-101 +-73 +-41 +-4076 +-4571 +-49 +-5282 +-5782 +-6331 +-6789 +-7129 +-55 +-102 +-8903 +-9951 +-10903 +-11458 +-11501 +-11151 +-10724 +-69 +-124 +-99 +-12532 +-13294 +-106 +-13552 +-84 +-124 +-9885 +-127 +-5791 +-4255 +-3489 +-3557 +-4300 +-5512 +-90 +-8612 +-10180 +-11489 +-12174 +-73 +-18 +-29 +-21 +-185 +-19 +-13 +5122 +4646 +3585 +2318 +1106 +-46 +-141 +-25 +1322 +2890 +-6 +6144 +-56 +8243 +8815 +9079 +-47 +-90 +6497 +4210 +-62 +-153 +-674 +-10 +3091 +-80 +9324 +-33 +12604 +12810 +-117 +11777 +11080 +10367 +9492 +8227 +6445 +-93 +-18 +-38 +-1 +-750 +-78 +-70 +-119 +-104 +-39 +-54 +-59 +-125 +-51 +5387 +-16 +4102 +3090 +1865 +584 +-93 +-111 +-5 +-65 +-4093 +-4550 +-42 +-39 +-43 +-3279 +-2560 +-1515 +107 +2381 +-71 +7515 +9068 +-37 +7699 +4923 +-33 +-33 +-99 +-6093 +-6818 +-56 +-6908 +-6873 +-6852 +-6596 +-5778 +-38 +-54 +-123 +5241 +-92 +11289 +12861 +13080 +-66 +9812 +-45 +4401 +-26 +127 +-1278 +-2251 +-26 +-83 +-3 +-3517 +-3732 +-3810 +-3472 +-2503 +-975 +777 +2328 +3380 +3888 +-92 +3965 +3954 +-79 +4150 +4373 +-51 +-3 +6918 +-68 +10579 +-76 +-31 +15119 +-24 +15478 +14884 +-67 +13103 +12306 +11593 +-4 +-23 +7477 +4864 +1873 +-106 +-3820 +-85 +-83 +-8435 +-8854 +-8924 +-111 +-8693 +-8668 +-105 +-85 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_329_628.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_329_628.samples new file mode 100644 index 00000000..fd5d3175 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_329_628.samples @@ -0,0 +1,4096 @@ +-118 +13599 +16652 +-75 +-8 +-17 +3390 +-91 +-5596 +-10917 +-18319 +-11 +-54 +-127 +-20929 +-105 +-112 +-9368 +-58 +-12723 +-17295 +-113 +-111 +-22952 +-15 +-115 +-57 +-29 +1646 +-42 +11344 +-106 +15925 +16398 +15691 +-83 +-100 +-76 +-74 +7284 +-84 +-77 +-102 +6680 +-15 +-24 +-123 +-78 +5461 +5150 +6210 +8217 +9777 +-83 +11624 +-102 +-109 +-111 +-14 +-12 +-124 +9493 +9536 +-122 +11284 +11098 +-40 +-83 +-47 +8547 +-77 +-31 +-6 +-121 +-13 +-19 +-28 +9026 +-53 +4624 +-26 +-104 +7200 +6731 +4936 +-112 +-45 +-16 +4185 +-61 +593 +2373 +-128 +-660 +-36 +-10 +-5585 +-7117 +-28 +-9444 +-119 +-13 +-9661 +-8104 +-118 +-1 +-32 +-14 +-65 +-85 +-91 +-6631 +-9676 +-57 +-63 +-19 +1110 +612 +-30 +-6822 +-8935 +-64 +-120 +-13 +-100 +-20 +-952 +-27 +-6385 +-11148 +-92 +-12519 +-6612 +1307 +-96 +15180 +-77 +12866 +-76 +6146 +-85 +-947 +-36 +-53 +-37 +-25029 +-26259 +-49 +-40 +-14297 +-10232 +-8938 +-109 +-11 +-17542 +-21 +-23195 +-22171 +-31 +-54 +-9952 +-3522 +2595 +-59 +-19 +14704 +-104 +-116 +-36 +-32 +-46 +9836 +-103 +7940 +-11 +-59 +7760 +-60 +4976 +4103 +-121 +-37 +4403 +-106 +7265 +-118 +8798 +10794 +12579 +-110 +-59 +-64 +-16 +-15 +-69 +9551 +10049 +11031 +-100 +-31 +9526 +8984 +8558 +7958 +8486 +-125 +10298 +-9 +8224 +-108 +9802 +8282 +5652 +-83 +-8 +7176 +-89 +4886 +4434 +-55 +-16 +4919 +-111 +1350 +-3 +2581 +622 +-102 +-38 +-85 +-36 +-7333 +-8875 +-9952 +-23 +-126 +-8692 +-61 +-6902 +-9940 +-91 +-12997 +-9132 +-6116 +-6067 +-106 +-10656 +-47 +-5120 +-19 +-29 +-100 +-4056 +-7571 +-66 +-96 +-39 +-31 +-3526 +-1410 +-102 +-121 +-8873 +-91 +-20 +-11440 +-4544 +-117 +-102 +-117 +14596 +-26 +-91 +5732 +-104 +-1964 +-16 +-123 +-65 +-4 +-13 +-6 +-17398 +-11923 +-9641 +-10125 +-11649 +-15013 +-98 +-120 +-93 +-101 +-18837 +-14507 +-77 +-1961 +3335 +-81 +-122 +-72 +15442 +-2 +16188 +13846 +11090 +-37 +8519 +-43 +-128 +-30 +-94 +-11 +4934 +-44 +-24 +-122 +5209 +-67 +6951 +7979 +10006 +11603 +11872 +12077 +-43 +-26 +12335 +10864 +-83 +-114 +-7 +-118 +-16 +-4 +9570 +-33 +8012 +8024 +-71 +-85 +9261 +8521 +9338 +10324 +-88 +6709 +4631 +5240 +-1 +-65 +4712 +4375 +6782 +7771 +-89 +-107 +-107 +2916 +-16 +-111 +265 +-42 +-95 +-4821 +-76 +-7592 +-8917 +-91 +-11002 +-9631 +-28 +-5886 +-40 +-118 +-2 +-10494 +-7148 +-5845 +-118 +-13 +-103 +-83 +-2757 +32 +323 +-91 +-38 +-8145 +-9857 +-9716 +-63 +-59 +-11 +-83 +-1485 +-5793 +-15 +-14044 +-14551 +-9141 +-75 +6473 +-14 +14672 +-100 +10858 +8464 +5964 +-69 +-2777 +-38 +-18051 +-92 +-25237 +-24457 +-19950 +-63 +-42 +-9623 +-95 +-12720 +-13 +-56 +-8 +-22425 +-68 +-104 +-12777 +-7080 +-999 +-66 +10086 +12403 +14119 +-104 +16498 +14605 +13083 +11851 +9300 +7460 +-49 +-78 +-99 +-72 +-94 +5477 +-118 +-86 +4935 +-85 +5953 +-37 +-1 +-18 +-54 +11812 +12636 +13108 +13063 +11520 +-92 +-81 +-86 +-28 +11068 +10577 +-1 +9473 +-75 +-9 +-12 +10110 +9224 +-39 +-60 +10601 +10329 +-44 +4922 +-48 +-43 +-39 +4864 +-40 +6251 +-93 +6518 +-18 +2943 +2940 +-124 +-73 +-59 +-219 +-19 +-3755 +-5016 +-7 +-36 +-78 +-74 +-110 +-7663 +-5617 +-33 +-7 +-120 +-11951 +-8636 +-81 +-102 +-40 +-107 +-9377 +-104 +-1461 +-7 +-686 +-3225 +-6554 +-65 +-91 +-58 +-111 +-3839 +-60 +-47 +-2716 +-7048 +-13046 +-15254 +-12705 +-6839 +-39 +-76 +-10 +-118 +12381 +-79 +8293 +-25 +-107 +-29 +-120 +-92 +-24282 +-25075 +-63 +-18424 +-13804 +-10908 +-91 +-10719 +-14066 +-68 +-20189 +-10 +-69 +-20704 +-16547 +-11997 +-52 +788 +6154 +9224 +12641 +-100 +15951 +-73 +14612 +13176 +-102 +-128 +8267 +8538 +7545 +-61 +-63 +5898 +-2 +4147 +-55 +4978 +-22 +-67 +8006 +9335 +10509 +11078 +-85 +-119 +-20 +-119 +10539 +9790 +10508 +-99 +-41 +-22 +-23 +-100 +-32 +-106 +-24 +-123 +-49 +8293 +8493 +10573 +11367 +8533 +-41 +5701 +7266 +-30 +-82 +-1 +5977 +-81 +-71 +5188 +3632 +3360 +3184 +2867 +2100 +-110 +-53 +-2486 +-4082 +-5082 +-6337 +-100 +-66 +-11412 +-126 +-6037 +-20 +-9185 +-24 +-13043 +-7 +-89 +-6650 +-128 +-81 +-10699 +-25 +-61 +-970 +37 +-1789 +-4802 +-70 +-8919 +-122 +-9122 +-92 +-3013 +-468 +-416 +-4274 +-52 +-74 +-67 +-11432 +-4019 +-115 +-121 +-31 +12605 +-63 +-43 +9039 +5142 +-125 +-52 +-14505 +-32 +-24513 +-115 +-73 +-17097 +-63 +-71 +-33 +-94 +-94 +-26 +-20955 +-22732 +-21733 +-19624 +-16515 +-96 +-3714 +-89 +-57 +10286 +-123 +-76 +-42 +15882 +14456 +-6 +-115 +9013 +8732 +7696 +7451 +-69 +6243 +-37 +-3 +4700 +4464 +4702 +5423 +6783 +8524 +-76 +-114 +11269 +-97 +-78 +12819 +-4 +10298 +10528 +-101 +-74 +-109 +-56 +-17 +-107 +-23 +8733 +9798 +-23 +-29 +8047 +10354 +11626 +9506 +6691 +6247 +-124 +7294 +-23 +-73 +5486 +-47 +-112 +-89 +4430 +-92 +-95 +-54 +-86 +2119 +-91 +-53 +-2975 +-102 +-4530 +-34 +-61 +-50 +-52 +-6860 +-60 +-7821 +-83 +-12968 +-60 +-7888 +-50 +-128 +-10373 +-71 +-9655 +-51 +-2450 +-240 +-32 +-2701 +-4798 +-12 +-10119 +-50 +-111 +-5027 +-95 +369 +-1742 +-6337 +-46 +-15293 +-23 +-24 +-19 +5979 +10760 +11541 +11848 +11633 +10565 +-86 +4463 +-86 +-8902 +-6 +-48 +-24022 +-23009 +-19630 +-15300 +-107 +-125 +-10688 +-111 +-99 +-45 +-81 +-8 +-21936 +-19629 +-31 +-2 +-3210 +1853 +-33 +-88 +-59 +-97 +16403 +15457 +12814 +10841 +-7 +8960 +8023 +-101 +-94 +-99 +5665 +4987 +-126 +4630 +-33 +4675 +-87 +7521 +8542 +9216 +-127 +12094 +13405 +12923 +-81 +-53 +-33 +10025 +-22 +11317 +11639 +11096 +-108 +-123 +8751 +10077 +9501 +7689 +-101 +-37 +11887 +10042 +-17 +6986 +7991 +7549 +-27 +4401 +5234 +-95 +7216 +-29 +5168 +4422 +-123 +-16 +3194 +-51 +2089 +-31 +-2226 +-2445 +-3210 +-5777 +-8942 +-11229 +-128 +-59 +-5325 +-6553 +-23 +-64 +-11906 +-56 +-6891 +-7608 +-92 +-76 +-11419 +-8405 +-4286 +-2014 +-1021 +-1020 +-3229 +-88 +-45 +-109 +-9883 +-7041 +-2978 +-195 +-51 +-121 +-8886 +-85 +-4 +-67 +-80 +-92 +6951 +10089 +-106 +-96 +11575 +-41 +-89 +-114 +-3259 +-69 +-18097 +-104 +-128 +-24 +-17899 +-56 +-11717 +-10115 +-10444 +-89 +-64 +-57 +-68 +-22733 +-60 +-17812 +-12936 +-71 +-2254 +3651 +-47 +10781 +-6 +-52 +-32 +13920 +-32 +11016 +-59 +-111 +-92 +8200 +-62 +6267 +5380 +5146 +4652 +4135 +4200 +5125 +6733 +-114 +8036 +-113 +11114 +12920 +12614 +12065 +11845 +10816 +-11 +-90 +10775 +11780 +11799 +9824 +8318 +-13 +10091 +-31 +7497 +6992 +9521 +-38 +-105 +-56 +-24 +-44 +-39 +-96 +4681 +4918 +6163 +-65 +6695 +-111 +-114 +-24 +3595 +3115 +3662 +-127 +-23 +-101 +-1444 +-9 +-109 +-50 +-96 +-11141 +-8632 +-5802 +-110 +-63 +-11958 +-12162 +-9979 +-8157 +-7116 +-85 +-10726 +-11912 +-109 +-6901 +-55 +-1498 +-67 +-2033 +-4306 +-32 +-9653 +-23 +-96 +-5828 +-1455 +-28 +-106 +-5000 +-100 +-115 +-15353 +-10971 +-3713 +-80 +-23 +10017 +-25 +11646 +-70 +-45 +7700 +2117 +-5524 +-12994 +-19133 +-23251 +-22945 +-20135 +-16883 +-13504 +-75 +-108 +-40 +-8 +-16632 +-19618 +-22440 +-22737 +-109 +-36 +-12462 +-6536 +-495 +-46 +7708 +-2 +14909 +-123 +14965 +-71 +11881 +-102 +-28 +8995 +8743 +-29 +-104 +-10 +5462 +-51 +4206 +3698 +4460 +5958 +-13 +6935 +8011 +10323 +11887 +-34 +12565 +-84 +11389 +10316 +9569 +10296 +-43 +12107 +-20 +8535 +8795 +-73 +-126 +-80 +6723 +9004 +11041 +-87 +8813 +-8 +8730 +-96 +-32 +-122 +4909 +5487 +6698 +6741 +5973 +5697 +-41 +-82 +3647 +4154 +-91 +1898 +4 +-768 +-958 +-125 +-122 +-96 +-37 +-74 +-57 +-5120 +-7596 +-80 +-11651 +-11259 +-9148 +-6863 +-14 +-41 +-46 +-94 +-9131 +-21 +-2762 +-1247 +-1161 +-2263 +-83 +-66 +-113 +-10633 +-39 +-3570 +-395 +-57 +-1930 +-78 +-72 +-31 +-13786 +-8361 +-1973 +-73 +7682 +9787 +-83 +-80 +-119 +10793 +-69 +-114 +-7074 +-95 +-101 +-22476 +-21682 +-58 +-15809 +-72 +-42 +-3 +-12272 +-81 +-17624 +-20941 +-22412 +-21667 +-19905 +-16351 +-9 +-4833 +-79 +4428 +-22 +-59 +-48 +-13 +-50 +13116 +11319 +10091 +-75 +-121 +8518 +-63 +6713 +-43 +5653 +4652 +3439 +3938 +-9 +6202 +-1 +7255 +8980 +-41 +11791 +12379 +12567 +12124 +-20 +-123 +9763 +11564 +-73 +-128 +-89 +9033 +10795 +10297 +7794 +-79 +-50 +10322 +-43 +8984 +-110 +-83 +8971 +7943 +-32 +4922 +-82 +-57 +6238 +6520 +6266 +-96 +3841 +-97 +-12 +4105 +-119 +844 +-203 +75 +-24 +-3045 +-63 +-105 +-10410 +-7139 +-5526 +-6621 +-35 +-11184 +-12012 +-9883 +-7399 +-7370 +-123 +-112 +-51 +-10654 +-7845 +-82 +-2260 +-912 +-106 +-3220 +-6067 +-9354 +-126 +-9641 +-6068 +-37 +349 +-119 +-3553 +-9923 +-14514 +-3 +-12205 +-6362 +-72 +-2 +-62 +9520 +11278 +12625 +-95 +9819 +5474 +-124 +-9859 +-16615 +-50 +-111 +-21447 +-3 +-13822 +-32 +-92 +-10892 +-85 +-28 +-50 +-1 +-25 +-4 +-19189 +-14284 +-111 +-125 +627 +5460 +10073 +13056 +-25 +-94 +-103 +12370 +-115 +10270 +-56 +9006 +8018 +7034 +6683 +-83 +4964 +-25 +3959 +-106 +5418 +5675 +6270 +7724 +-64 +-41 +11819 +-60 +-85 +-67 +-69 +-25 +11271 +12660 +-36 +8991 +-108 +-120 +10558 +-31 +-50 +8012 +9839 +9997 +9254 +-107 +8976 +9561 +8764 +-32 +5724 +5669 +-81 +-84 +6728 +6667 +5480 +-23 +-46 +-54 +-63 +3644 +-33 +639 +-58 +802 +-35 +-40 +-9661 +-10123 +-75 +-6307 +-121 +-58 +-10396 +-11993 +-12 +-96 +-71 +-7812 +-9872 +-11205 +-11210 +-20 +-54 +-61 +-99 +-55 +-126 +-4060 +-7658 +-127 +-52 +-8443 +-5042 +-662 +1299 +-24 +-6036 +-34 +-2 +-14300 +-91 +-85 +-36 +-27 +7493 +-124 +-35 +12665 +-74 +-2 +3891 +-81 +-83 +-18 +-21221 +-111 +-45 +-16069 +-31 +-110 +-10145 +-10714 +-114 +-16383 +-18871 +-100 +-85 +-21164 +-23 +-93 +-8625 +-3522 +1548 +-74 +-112 +-96 +-14 +-18 +-90 +-39 +-107 +-98 +-66 +8450 +-18 +-95 +-11 +5437 +4120 +3901 +4628 +4975 +5217 +5691 +6660 +8244 +9599 +10806 +-76 +-7 +-62 +10011 +-49 +-16 +12656 +-124 +9484 +-47 +-32 +11060 +8800 +7273 +-3 +9047 +-28 +-47 +-31 +9281 +-46 +-9 +7519 +-115 +-9 +5411 +5904 +-30 +-75 +6268 +4698 +3939 +-65 +4982 +-9 +-114 +-41 +-34 +2128 +-43 +-92 +-7559 +-9412 +-53 +-84 +-5 +-64 +-91 +-10902 +-67 +-54 +-7587 +-7657 +-8692 +-10386 +-78 +-11147 +-8862 +-6069 +-91 +-17 +-664 +-2249 +-121 +-8622 +-39 +-125 +-7411 +-37 +-10 +1089 +-60 +-103 +-13266 +-124 +-13472 +-16 +-3032 +1332 +4910 +8205 +-102 +-15 +13415 +12547 +-73 +1551 +-44 +-95 +-50 +-21652 +-26 +-67 +-15783 +-78 +-10394 +-10414 +-11666 +-66 +-39 +-5 +-22228 +-28 +-20201 +-9 +-12440 +-86 +-2560 +2596 +-88 +-84 +-76 +-72 +-43 +12614 +-81 +-125 +10514 +-110 +8028 +-87 +7752 +6191 +-109 +4179 +-29 +4689 +-20 +-12 +5979 +-30 +-38 +9578 +11350 +-34 +-125 +-42 +9241 +-123 +-100 +-48 +-124 +-110 +-85 +11112 +-107 +-77 +-120 +8753 +-64 +-86 +8534 +9273 +-63 +-116 +8528 +-45 +6258 +-30 +-85 +-119 +-26 +-31 +-33 +4444 +-93 +4948 +-96 +3671 +-14 +-29 +2851 +-123 +-703 +-4559 +-62 +-9687 +-120 +-112 +-97 +-7828 +-48 +-13 +-9868 +-8425 +-74 +-7825 +-25 +-11165 +-11686 +-10194 +-125 +-5629 +-2456 +-710 +-1279 +-3464 +-79 +-80 +-10952 +-8 +-72 +-5 +1382 +-6 +-4768 +-10387 +-14522 +-6 +-11517 +-40 +-2471 +2140 +5641 +8063 +-48 +-47 +-107 +11374 +6520 +-68 +-79 +-15019 +-19396 +-38 +-53 +-17814 +-14557 +-11744 +-88 +-10732 +-11937 +-61 +-113 +-51 +-103 +-83 +-123 +-43 +-21 +-106 +-1728 +-111 +-78 +-13 +14135 +14188 +-73 +-35 +12092 +-93 +-2 +-72 +-25 +8263 +-30 +-5 +4663 +-29 +-67 +4644 +4713 +-55 +6474 +-51 +-30 +-97 +12913 +12861 +10820 +9241 +-14 +-84 +11627 +10081 +-81 +-76 +-3 +-104 +-37 +-68 +-4 +-119 +8750 +-55 +-43 +-56 +-1 +9266 +-7 +-128 +5944 +-38 +-65 +6954 +-56 +5931 +4681 +-71 +4959 +-51 +-72 +-124 +1841 +-97 +3192 +-93 +-67 +-9 +-8926 +-106 +-66 +-89 +-6828 +-111 +-1 +-10409 +-9147 +-7892 +-7316 +-121 +-10702 +-15 +-87 +-9952 +-3 +-118 +-55 +-686 +-113 +-90 +-7659 +-10702 +-11217 +-8177 +-17 +-110 +-67 +-105 +-18 +-12471 +-14478 +-13546 +-10406 +-63 +-2 +2670 +5503 +-102 +12133 +14105 +13082 +10559 +5645 +-1948 +-9945 +-15756 +-19184 +-20408 +-102 +-16370 +-13542 +-11474 +-21 +-40 +-25 +-19 +-18876 +-25 +-21997 +-21166 +-18429 +-15031 +-10928 +-5786 +-58 +4414 +-55 +12633 +13656 +13118 +12924 +12854 +11781 +10347 +9259 +9059 +-103 +7776 +6443 +5243 +-113 +-120 +4471 +4186 +5202 +5946 +5926 +-60 +-58 +12156 +-68 +-111 +-118 +-41 +12080 +-43 +-80 +-86 +-94 +11830 +-68 +-110 +-77 +8775 +8990 +8768 +-36 +8792 +9596 +-101 +-25 +-20 +7963 +-24 +5634 +-93 +6696 +7031 +-32 +-45 +3701 +5438 +-49 +4685 +2830 +1876 +-113 +3900 +-70 +-41 +-28 +-7894 +-8446 +-6793 +-125 +-112 +-8083 +-9637 +-10481 +-38 +-8131 +-75 +-8084 +-48 +-10732 +-11469 +-113 +-9435 +-6348 +-60 +-22 +-70 +-51 +-5514 +-9381 +-79 +-65 +-6273 +-1745 +-22 +-122 +-68 +-2 +-126 +-53 +-106 +-68 +-75 +-50 +-19 +-71 +-2 +-54 +13828 +13374 +9984 +3439 +-4268 +-99 +-16554 +-119 +-19949 +-18148 +-69 +-101 +-11245 +-10226 +-24 +-13254 +-16321 +-51 +-127 +-21680 +-98 +-59 +-14299 +-21 +-92 +-107 +-23 +10353 +-47 +12888 +13141 +-29 +-8 +11107 +-14 +9598 +9234 +-77 +7280 +5735 +5461 +-75 +-97 +4203 +4970 +5727 +-67 +-113 +7474 +11082 +12410 +-58 +-107 +10526 +-55 +-58 +-69 +9747 +-128 +-49 +-121 +9579 +-9 +-80 +9026 +8708 +8472 +-19 +-27 +-109 +-29 +9817 +8743 +7026 +-11 +5672 +6161 +7779 +7260 +4979 +-76 +5215 +5988 +-78 +3600 +2058 +2356 +3677 +4629 +-6 +-27 +-35 +-8069 +-7073 +-5775 +-107 +-44 +-8603 +-10378 +-10157 +-8687 +-7586 +-7633 +-8620 +-9955 +-76 +-85 +-10923 +-8362 +-68 +-37 +-12 +-701 +-3246 +-7366 +-90 +-11168 +-9164 +-40 +-11 +1606 +-112 +-85 +-72 +-13553 +-14321 +-79 +-7353 +-4023 +-750 +-64 +-45 +-2 +-116 +14611 +-106 +-6 +-36 +-5877 +-12506 +-78 +-19601 +-126 +-17100 +-14845 +-22 +-9 +-10170 +-11224 +-65 +-17364 +-122 +-101 +-62 +-20111 +-65 +-13244 +-51 +-4063 +-69 +7187 +10328 +11867 +12897 +-24 +-96 +-24 +10812 +-14 +10017 +-94 +-66 +6756 +-82 +5497 +4395 +3891 +4953 +-116 +-36 +3923 +6144 +-26 +11553 +-9 +10029 +-110 +-10 +12110 +10580 +9823 +-84 +11642 +11608 +10252 +-45 +-97 +-58 +-69 +8449 +-92 +8797 +8823 +-75 +-62 +-89 +8540 +6924 +5376 +-54 +-101 +-42 +-116 +-105 +4888 +-114 +-48 +-96 +-14 +-3 +3365 +4906 +4661 +-123 +-3720 +-6544 +-7061 +-6370 +-56 +-84 +-36 +-9695 +-38 +-9357 +-8066 +-24 +-7861 +-8926 +-65 +-24 +-11743 +-9902 +-7401 +-113 +-1790 +-206 +-88 +-4823 +-8660 +-92 +-10989 +-7158 +-1983 +-31 +-88 +-42 +-77 +-82 +-14224 +-12966 +-72 +-62 +-3733 +303 +-19 +-6 +-32 +14181 +-50 +-66 +-109 +-240 +-40 +-36 +-20 +-17 +-60 +-95 +-13997 +-11692 +-10217 +-34 +-85 +-18 +-17890 +-20164 +-38 +-21135 +-34 +-16356 +-13014 +-8394 +-28 +-87 +-24 +-57 +12098 +-29 +13435 +12607 +-12 +-61 +-12 +9985 +-67 +7522 +6971 +6271 +4626 +3872 +5128 +-15 +-11 +3333 +4885 +7964 +10526 +-107 +-24 +9986 +11533 +11823 +-116 +-114 +-68 +11561 +11612 +-27 +9728 +9569 +8991 +8473 +-71 +8723 +8250 +8972 +9533 +-16 +-28 +9574 +-99 +5894 +6207 +-81 +7738 +6195 +4908 +-107 +5691 +6244 +5169 +3347 +2066 +2642 +4931 +5725 +3186 +-966 +-4551 +-56 +-104 +-126 +-5117 +-6605 +-56 +-9869 +-9640 +-8660 +-30 +-110 +-7905 +-9377 +-99 +-11771 +-10946 +-64 +-6786 +-3312 +-936 +-486 +-2501 +-109 +-10207 +-11996 +-54 +-101 +-646 +1121 +262 +-3780 +-50 +-12790 +-13205 +-12007 +-101 +-6394 +-6 +768 +4653 +-15 +12546 +-110 +-113 +10773 +-10 +-2206 +-9161 +-14566 +-5 +-18 +-17627 +-96 +-103 +-10940 +-9682 +-10687 +-56 +-15500 +-107 +-20685 +-36 +-20199 +-18429 +-16328 +-12286 +-6600 +-960 +4161 +-7 +10287 +12337 +13326 +-99 +11865 +-33 +11041 +10586 +-63 +8228 +7967 +6993 +4897 +-17 +-12 +5925 +-88 +3400 +-71 +6459 +9525 +10076 +9575 +9732 +-33 +11836 +-31 +10021 +-24 +11371 +11543 +10836 +-85 +10001 +8970 +9061 +-66 +-103 +8573 +-46 +-18 +9309 +-50 +-110 +8239 +-125 +-68 +7466 +-18 +6990 +-28 +4920 +-127 +6186 +5955 +-111 +-61 +-66 +4412 +-76 +4929 +1661 +-2233 +-99 +-6390 +-5573 +-4839 +-120 +-10 +-42 +-88 +-9190 +-128 +-6 +-15 +-10 +-10386 +-52 +-11731 +-10997 +-8915 +-5540 +-82 +-44 +-717 +-38 +-8345 +-120 +-10993 +-7579 +-51 +326 +1662 +-1166 +-87 +-75 +-61 +-13015 +-74 +-72 +-5775 +-18 +1123 +-58 +10028 +13426 +-66 +13668 +-117 +3131 +-67 +-10425 +-15340 +-80 +-18079 +-17346 +-15051 +-119 +-86 +-1 +-75 +-13305 +-16309 +-19426 +-113 +-20459 +-30 +-71 +-26 +-10939 +-5262 +-44 +4384 +-26 +10798 +12639 +-88 +12133 +-97 +-76 +11063 +9558 +-36 +-119 +-15 +5403 +4653 +5130 +-1 +-28 +-40 +2824 +-94 +-103 +-2 +8998 +-49 +-54 +-38 +11042 +-43 +-98 +11108 +-27 +11270 +-45 +-59 +9584 +9476 +-116 +-109 +8776 +8710 +-86 +8782 +10272 +10529 +9042 +-87 +6420 +-105 +-128 +-88 +-94 +-125 +-43 +-113 +-36 +4963 +2584 +2053 +3595 +5439 +-52 +3962 +271 +-38 +-5626 +-5540 +-71 +-5033 +-78 +-40 +-9110 +-52 +-88 +-7613 +-7150 +-7925 +-120 +-103 +-123 +-109 +-64 +-125 +-50 +-32 +-85 +-1454 +-73 +-101 +-87 +-103 +-50 +-1496 +-105 +-80 +-3067 +-102 +-127 +-75 +-12691 +-117 +-37 +-1 +-105 +2081 +6674 +-104 +-39 +-104 +-32 +8035 +1576 +-63 +-63 +-26 +-48 +-123 +-16536 +-55 +-11395 +-92 +-9972 +-92 +-39 +-16 +-107 +-1 +-20451 +-14 +-18349 +-14583 +-9436 +-3973 +768 +-27 +-93 +-59 +-99 +12055 +-105 +-108 +11305 +-49 +-102 +-17 +-98 +-25 +-11 +-94 +-82 +-19 +3634 +-85 +-57 +-26 +8277 +-60 +8739 +-95 +11549 +-102 +10287 +10517 +10300 +-97 +11528 +11026 +-26 +10110 +-28 +8962 +-19 +9017 +-126 +7938 +-95 +9839 +-115 +9842 +-5 +-76 +-93 +7797 +7801 +6768 +-29 +4991 +6207 +6965 +-127 +3435 +-33 +2889 +4684 +-33 +-102 +2610 +-66 +-110 +-5055 +-115 +-4830 +-39 +-42 +-8604 +-13 +-9440 +-8147 +-113 +-31 +-90 +-66 +-11145 +-12002 +-11 +-9890 +-109 +-86 +-98 +-223 +-22 +-73 +-10698 +-117 +-8904 +-110 +31 +-111 +-93 +-4594 +-27 +-11502 +-12755 +-12018 +-10179 +-33 +-5068 +-6 +2903 +-22 +12079 +-108 +14600 +-1 +-53 +-409 +-62 +-72 +-14 +-70 +-33 +-109 +-13256 +-11178 +-9706 +-10230 +-12424 +-15319 +-46 +-19154 +-20097 +-20638 +-91 +-17633 +-13220 +-8126 +-3226 +-96 +5691 +9784 +11113 +-38 +12313 +-82 +11585 +-64 +-18 +-16 +9577 +-10 +-39 +5472 +6668 +-49 +-96 +2609 +3073 +-125 +7252 +-8 +8205 +10056 +10577 +-6 +-64 +10101 +-128 +-45 +11279 +-43 +-1 +-124 +-24 +9052 +9061 +-18 +-59 +-83 +-9 +9289 +10604 +10063 +8489 +-9 +7190 +7780 +8231 +-15 +5696 +-85 +-49 +-89 +6411 +-113 +-123 +2356 +-9 +-44 +6427 +4713 +-33 +-59 +-4050 +-38 +-4525 +-4761 +-5791 +-7599 +-45 +-40 +-8651 +-111 +-7388 +-114 +-8629 +-10373 +-3 +-11758 +-11467 +-36 +-104 +-19 +-120 +-82 +-4846 +-72 +-11664 +-10918 +-79 +-2221 +567 +-36 +-1982 +-108 +-94 +-68 +-12229 +-11520 +-9938 +-7373 +-3 +-690 +4188 +8803 +12801 +14867 +14369 +10508 +-125 +-66 +-104 +-92 +-16525 +-7 +-16776 +-125 +-12488 +-10389 +-9674 +-10957 +-109 +-15836 +-70 +-124 +-6 +-20881 +-116 +-16552 +-11763 +-7573 +-102 +2649 +6949 +9329 +-65 +-1 +12559 +11892 +10823 +-11 +11029 +-99 +-81 +5998 +-43 +6745 +6955 +5225 +2671 +2819 +-4 +-41 +-71 +-32 +-24 +-42 +-54 +-68 +10033 +-10 +10597 +-56 +-18 +11089 +-74 +-77 +-93 +-66 +9492 +9076 +7720 +-3 +8812 +-107 +10253 +9265 +7939 +7193 +7712 +8524 +7950 +-8 +-74 +-17 +-9 +7017 +5379 +-87 +2418 +-5 +4899 +-99 +-104 +-123 +-389 +-2734 +-125 +-4327 +-104 +-4817 +-6588 +-46 +-20 +-88 +-8324 +-7555 +-107 +-7932 +-103 +-10385 +-12 +-12534 +-11475 +-117 +-79 +-76 +-205 +-14 +-6536 +-56 +-25 +-9377 +-96 +-100 +619 +-43 +-3203 +-7132 +-9930 +-103 +-12025 +-47 +-42 +-60 +-115 +-118 +5176 +-117 +-65 +-48 +-45 +-60 +3344 +-26 +-20 +-13797 +-90 +-17143 +-16357 +-14060 +-23 +-9912 +-64 +-11962 +-13995 +-16028 +-126 +-74 +-121 +-128 +-18595 +-15259 +-77 +-6880 +-1154 +3618 +-51 +-33 +-114 +-33 +12101 +-57 +-103 +11621 +-62 +-38 +-30 +-60 +6993 +7773 +-73 +3386 +3189 +3961 +-24 +-38 +6684 +-44 +-57 +-42 +10541 +-67 +10102 +-106 +10504 +-56 +11021 +-88 +10555 +-19 +-73 +-77 +-100 +7951 +-4 +8268 +9554 +10250 +-96 +8479 +7284 +-128 +-68 +8313 +-28 +-60 +-88 +-18 +7217 +-3 +4704 +2671 +-75 +-44 +-22 +6687 +-79 +1857 +-946 +-28 +-40 +-112 +-4014 +-81 +-27 +-81 +-9191 +-16 +-7636 +-72 +-12 +-8439 +-50 +-105 +-12508 +-52 +-10395 +-6609 +-119 +-216 +-488 +-18 +-32 +-30 +-72 +-85 +-26 +-152 +512 +-1166 +-28 +-7856 +-23 +-11681 +-11660 +-99 +-9380 +-38 +-3 +1130 +6203 +-75 +14452 +14706 +12369 +-69 +1899 +-8 +-97 +-14259 +-16568 +-61 +-82 +-108 +-10687 +-9984 +-81 +-86 +-67 +-15805 +-37 +-40 +-60 +-53 +-22 +-15082 +-10644 +-44 +-81 +3939 +6974 +-68 +11845 +11869 +10851 +-60 +-35 +-125 +10853 +7720 +-118 +7547 +7952 +-114 +4467 +3616 +-3 +3928 +4939 +5699 +6674 +-11 +9787 +10047 +9991 +-2 +-64 +10251 +10324 +-39 +-20 +10775 +-51 +-6 +-60 +9730 +-98 +-126 +7747 +8767 +-44 +10244 +-44 +7743 +7800 +-50 +8827 +-29 +-111 +-3 +6506 +7212 +7277 +-62 +3368 +2120 +-86 +-49 +6656 +-71 +3885 +-78 +-1778 +-3265 +-113 +-76 +-16 +-59 +-7602 +-9143 +-61 +-15 +-7399 +-93 +-7665 +-96 +-60 +-110 +-12929 +-12174 +-84 +-125 +-19 +-117 +-102 +-57 +-72 +-11401 +-9890 +-6056 +-117 +-126 +28 +-2194 +-5534 +-8690 +-10645 +-11407 +-124 +-23 +-8657 +-103 +-85 +2312 +-46 +12288 +14459 +14356 +-92 +6441 +-98 +-5831 +-10742 +-102 +-16794 +-7 +-14520 +-6 +-10134 +-10170 +-11651 +-12795 +-13957 +-16334 +-19164 +-112 +-52 +-27 +-111 +-41 +-68 +-3757 +304 +3950 +-10 +-24 +11374 +11034 +-50 +11385 +-87 +-82 +-17 +7196 +-72 +-10 +-111 +5632 +-96 +3433 +-65 +-108 +4609 +5747 +-19 +-59 +-95 +9772 +9988 +-29 +-101 +-73 +10843 +-20 +-90 +-120 +9994 +10358 +9990 +9085 +-60 +7283 +8231 +-22 +10255 +-52 +8010 +-76 +8763 +9042 +8003 +-90 +-102 +6179 +-128 +7779 +-76 +-93 +-79 +2679 +-94 +6210 +-18 +5635 +-118 +-40 +-1986 +-54 +-32 +-3561 +-4541 +-7 +-41 +-8851 +-8323 +-7870 +-15 +-96 +-7559 +-118 +-10659 +-12540 +-34 +-36 +-8165 +-3484 +-2 +-232 +-3237 +-7603 +-10 +-31 +-13 +-3 +-1254 +-35 +-477 +-62 +-77 +-113 +-9 +-11685 +-11422 +-10224 +-8636 +-6052 +-1482 +-71 +9021 +-92 +-25 +13904 +10286 +4919 +-62 +-6621 +-18 +-39 +-16524 +-15820 +-11 +-10888 +-10434 +-59 +-25 +-61 +-14728 +-17336 +-102 +-20422 +-83 +-62 +-107 +-37 +-127 +-4 +-113 +-99 +-19 +-118 +10531 +-52 +11337 +13179 +12376 +-16 +8239 +-19 +8229 +7959 +6688 +4978 +-21 +3908 +3856 +-91 +-78 +-40 +8048 +-121 +-72 +10021 +-48 +-49 +9583 +-48 +-116 +10844 +-39 +-114 +10268 +-22 +9742 +-94 +-61 +7731 +-54 +10275 +-98 +8294 +-121 +-54 +9077 +8525 +7546 +-51 +-35 +-107 +7952 +-117 +5460 +3149 +2636 +3621 +5190 +-102 +-109 +-81 +-117 +-438 +-85 +-126 +-2794 +-3491 +-5534 +-100 +-72 +-8427 +-8101 +-119 +-128 +-6845 +-7615 +-9435 +-56 +-12983 +-111 +-42 +-6364 +-2041 +-114 +-1169 +-55 +-58 +-56 +-25 +-7164 +-31 +-116 +15 +-62 +-94 +-6811 +-9396 +-11149 +-60 +-11187 +-68 +-32 +-59 +-213 +5168 +9995 +-126 +-71 +12910 +9067 +3901 +-95 +-45 +-122 +-61 +-16317 +-35 +-111 +-11176 +-36 +-10674 +-67 +-88 +-15490 +-17859 +-19075 +-108 +-20958 +-19105 +-15796 +-84 +-7136 +-3037 +-76 +-23 +9503 +9584 +-36 +11013 +-63 +12662 +-42 +9275 +-17 +-111 +-106 +7473 +5995 +-59 +-95 +3949 +-56 +-64 +5478 +-124 +7960 +8828 +-35 +-67 +9340 +-10 +-70 +11030 +-7 +-40 +10087 +10342 +-22 +10325 +-76 +7542 +-60 +8753 +9996 +9736 +-84 +8251 +8540 +-69 +9048 +8262 +-127 +5935 +6445 +7981 +-9 +6455 +-44 +-50 +-127 +4196 +-58 +6946 +-42 +3619 +-46 +-93 +-2027 +-1963 +-87 +-4261 +-76 +-7643 +-109 +-8370 +-42 +-7409 +-121 +-125 +-117 +-9911 +-12239 +-33 +-29 +-80 +-22 +-897 +47 +-78 +-12 +-69 +-10919 +-9216 +-94 +-1984 +-104 +-658 +-47 +-4809 +-7633 +-9722 +-10942 +-11252 +-11220 +-10460 +-46 +-4065 +798 +-46 +11332 +-82 +14390 +-103 +7985 +-85 +-3053 +-8658 +-13786 +-112 +-12 +-13238 +-62 +-39 +-116 +-33 +-112 +-13981 +-15748 +-17652 +-6 +-20871 +-94 +-18384 +-54 +-10670 +-7076 +-2441 +-20 +7497 +-76 +8453 +-4 +12135 +12803 +11865 +10062 +9056 +-61 +8992 +8280 +-44 +5692 +4982 +-114 +3431 +-122 +-106 +-122 +6725 +-22 +9569 +9788 +9270 +9309 +-47 +10817 +11046 +10590 +-1 +-5 +10776 +-91 +9803 +7964 +7229 +-127 +-119 +-116 +9078 +8464 +-66 +-127 +9272 +-28 +7482 +5999 +6241 +-120 +-3 +7478 +5717 +3597 +-72 +3418 +5465 +-10 +6671 +5450 +-35 +277 +-59 +-1447 +-1762 +-101 +-5054 +-102 +-87 +-8386 +-8374 +-96 +-7069 +-5 +-7060 +-8381 +-61 +-13231 +-13759 +-12011 +-7666 +-77 +-67 +-1005 +-91 +-7826 +-10629 +-10637 +-97 +-4341 +-1666 +-110 +-950 +-39 +-5628 +-8168 +-63 +-10722 +-69 +-119 +-2 +-11 +-106 +-60 +7768 +11855 +-42 +-84 +-73 +-48 +1918 +-4509 +-10393 +-13977 +-70 +-13814 +-12 +-12023 +-81 +-20 +-10933 +-33 +-13970 +-116 +-1 +-117 +-21147 +-20117 +-14 +-33 +-114 +-6303 +126 +-51 +6439 +-50 +-31 +-104 +-36 +-23 +-118 +-95 +9283 +-95 +8831 +7713 +-92 +5940 +-10 +-85 +3379 +-86 +4898 +5740 +-37 +8810 +9494 +-6 +9028 +9594 +-105 +10853 +-37 +-92 +10047 +-116 +11321 +-4 +8482 +7528 +7982 +9031 +9509 +9275 +-102 +-88 +8492 +-100 +9595 +8012 +6501 +-32 +7288 +-44 +8266 +-108 +-50 +2855 +3097 +-86 +5966 +7020 +-122 +-128 +1857 +-34 +-71 +-1005 +-2255 +-119 +-123 +-81 +-7810 +-8377 +-65 +-30 +-6800 +-6309 +-52 +-9142 +-93 +-116 +-13770 +-104 +-3 +-51 +-95 +-128 +-53 +-9380 +-54 +-109 +-14 +-3460 +-1212 +-407 +-32 +-54 +-118 +-67 +-9932 +-11195 +-119 +-23 +-9979 +-32 +-14 +3398 +8800 +-82 +-87 +-83 +10506 +-24 +317 +-6293 +-25 +-15 +-121 +-13779 +-119 +-91 +-10223 +-10410 +-111 +-12499 +-14260 +-35 +-45 +-90 +-20724 +-18389 +-69 +-14539 +-128 +-4006 +-13 +-104 +5744 +7506 +9793 +11845 +12372 +-47 +10300 +-47 +9773 +9307 +8229 +7525 +7010 +5466 +-14 +-98 +3869 +4153 +-17 +-114 +8030 +8966 +9014 +-90 +-78 +-26 +10579 +10792 +10084 +-52 +-22 +-68 +-109 +9277 +7949 +7760 +-56 +-39 +-75 +8977 +-89 +8235 +9341 +-23 +-128 +-69 +-102 +6686 +-99 +8796 +-32 +-119 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_82_4069.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_82_4069.samples new file mode 100644 index 00000000..98636b7c --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_E_82_4069.samples @@ -0,0 +1,4096 @@ +-27 +-102 +4657 +-15 +5147 +-97 +-14 +-56 +6267 +-41 +-20 +-90 +-99 +7017 +-53 +5139 +4415 +-101 +-74 +-57 +-120 +2880 +2640 +2402 +-80 +-37 +374 +-88 +-689 +-52 +90 +1328 +3087 +-27 +6912 +8213 +-96 +-53 +-7 +7527 +6203 +-67 +2643 +-105 +-1250 +-2965 +-4347 +-78 +-5325 +-87 +-3482 +-1994 +-496 +888 +2148 +3342 +-84 +5645 +-81 +-24 +7254 +6931 +-77 +-53 +-112 +-65 +2606 +1288 +-71 +-1 +-2209 +-32 +-3301 +-96 +-3976 +-4046 +-3761 +-44 +-2267 +-1435 +-719 +-38 +772 +-45 +2853 +-82 +5199 +-121 +6998 +-68 +-110 +-117 +4208 +-60 +-51 +-216 +-66 +-114 +-66 +-79 +-661 +-49 +-20 +37 +-72 +-6 +-93 +-108 +-116 +372 +1321 +-14 +-61 +2860 +-37 +3888 +4617 +5379 +-112 +6428 +6437 +-59 +-123 +4904 +4419 +-41 +-79 +-96 +-71 +3108 +3100 +-28 +3656 +3962 +3919 +3348 +2315 +1024 +-51 +-41 +-2749 +-3801 +-61 +-5303 +-39 +-127 +-5588 +-120 +-4795 +-125 +-17 +-2019 +-108 +-1 +2604 +-50 +4204 +4866 +5684 +6703 +-116 +8823 +-98 +10284 +10836 +-53 +-5 +-104 +-52 +-34 +7950 +6474 +4708 +2640 +-105 +-1722 +-3476 +-4753 +-5545 +-27 +-2 +-5564 +-5094 +-25 +-4227 +-3800 +-3257 +-11 +-35 +-43 +-9 +629 +1651 +-21 +-117 +-49 +5975 +6670 +7224 +7736 +8256 +8725 +8982 +-64 +8499 +8001 +-34 +-83 +-44 +-25 +9006 +-2 +-2 +9759 +9563 +-46 +8743 +8551 +8800 +-14 +10287 +-21 +-73 +11823 +12368 +-122 +14112 +-6 +15176 +-20 +14655 +13930 +12892 +-22 +9802 +7947 +6146 +-47 +-58 +-77 +-46 +32 +-10 +-109 +-27 +-87 +-3 +-10645 +-46 +-124 +-44 +-16771 +-18176 +-19633 +-24 +-22192 +-19 +-23540 +-23543 +-23025 +-114 +-21164 +-20468 +-23 +-13 +-24 +-7 +-21719 +-50 +-103 +-3 +-19856 +-99 +-121 +-18305 +-17649 +-59 +-125 +-14256 +-50 +-13020 +-73 +-60 +-124 +-13210 +-12790 +-87 +-12197 +-79 +-46 +-13479 +-14076 +-122 +-14488 +-93 +-126 +-32 +-4 +-13546 +-13795 +-81 +-51 +-13757 +-13502 +-13042 +-12471 +-12017 +-122 +-46 +-77 +-12534 +-12434 +-11953 +-56 +-112 +-8413 +-86 +-5827 +-24 +-5086 +-5517 +-15 +-38 +-16 +-6792 +-92 +-123 +-38 +-33 +-71 +-76 +1394 +-64 +-101 +-127 +2159 +2417 +-32 +3883 +4660 +5156 +-4 +5485 +5654 +-51 +-13 +5715 +5491 +5387 +5474 +5659 +-50 +6000 +6224 +-62 +-112 +-32 +7443 +7173 +6703 +6190 +-79 +5677 +-83 +-48 +-52 +-7 +-28 +-111 +4702 +-15 +-65 +-20 +1622 +-54 +307 +-115 +-63 +-1938 +-3020 +-4299 +-5540 +-80 +-85 +-7160 +-7135 +-7060 +-7091 +-7334 +-122 +-8356 +-85 +-37 +-75 +-72 +-48 +-8951 +-8947 +-9194 +-9873 +-10930 +-102 +-13193 +-93 +-14303 +-48 +-70 +-13510 +-12427 +-36 +-9678 +-8646 +-8087 +-52 +-8174 +-32 +-97 +-9115 +-9472 +-9897 +-91 +-10628 +-101 +-10115 +-45 +-38 +-1 +-6061 +-4815 +-59 +-1782 +-70 +1645 +3152 +4193 +4642 +-26 +4187 +3680 +-79 +-32 +3105 +3382 +-65 +-104 +-96 +-80 +-102 +6206 +-40 +-35 +-69 +8815 +9845 +-23 +-29 +-16 +10805 +10062 +-28 +-128 +-106 +7010 +-3 +-113 +6745 +7290 +-72 +9039 +9852 +-73 +-59 +-67 +10519 +10317 +-83 +10098 +10087 +10058 +-66 +9594 +-123 +8456 +7750 +7018 +6249 +-16 +-68 +3138 +-45 +-65 +2403 +-34 +-77 +-117 +5398 +-43 +-110 +-112 +-117 +6406 +-103 +5946 +5455 +4972 +4645 +-38 +-46 +5401 +6200 +7025 +-87 +-6 +-15 +-54 +4686 +-111 +-97 +1050 +526 +300 +-34 +-57 +-8 +-84 +848 +1570 +2624 +3955 +5464 +7033 +8523 +9758 +10622 +11041 +-78 +-98 +-58 +-7 +-31 +-19 +-67 +602 +-66 +277 +812 +1563 +-64 +2683 +-122 +-116 +3646 +-67 +-30 +5938 +-32 +6954 +6914 +-39 +6246 +-20 +5461 +4958 +-56 +-106 +-90 +1320 +99 +-56 +-2048 +-54 +-92 +-2204 +-1431 +-498 +-8 +1622 +2836 +-98 +4927 +-113 +-103 +-73 +5677 +5448 +5136 +4697 +-79 +3108 +2120 +-26 +621 +-30 +13 +-172 +-501 +-27 +-1700 +-2178 +-2 +-60 +-1770 +-98 +-115 +-240 +-36 +1100 +1574 +-58 +-66 +3159 +3911 +-71 +-61 +-6 +-117 +-26 +-123 +770 +-224 +-104 +-73 +-967 +-686 +-424 +-225 +-23 +275 +-106 +1057 +1375 +1536 +-63 +1137 +565 +-63 +-23 +-691 +-9 +-127 +363 +-90 +1649 +-21 +-125 +4178 +-75 +-66 +4356 +4170 +4156 +4420 +4977 +5695 +-87 +-62 +6487 +6174 +5926 +-14 +-5 +5700 +5130 +-20 +2585 +-27 +-20 +-3213 +-72 +-5515 +-5803 +-5820 +-5876 +-6113 +-54 +-9 +-93 +-5859 +-11 +-109 +-36 +-736 +1100 +-72 +-88 +-71 +-4 +-68 +-45 +-49 +11049 +-56 +10496 +9786 +-3 +-48 +7447 +-111 +-108 +4983 +3634 +2173 +831 +-223 +-941 +-1413 +-1770 +-82 +-30 +-3224 +-4029 +-14 +-5511 +-59 +-5330 +-4484 +-3238 +-1702 +-37 +-27 +-95 +-17 +4182 +4731 +5212 +-54 +-122 +-86 +-128 +5690 +-28 +5424 +-29 +4660 +-35 +-48 +4726 +-99 +6507 +-51 +-35 +8043 +-4 +7732 +-95 +-47 +8009 +8808 +10029 +11540 +13090 +14389 +15213 +-69 +-86 +15375 +-119 +15199 +15201 +15159 +-54 +14869 +-45 +13918 +12835 +11276 +-115 +7267 +5184 +-100 +-89 +-164 +-68 +-64 +-3987 +-80 +-5848 +-6906 +-107 +-10119 +-12251 +-113 +-30 +-17888 +-91 +-19147 +-4 +-19172 +-34 +-6 +-19841 +-71 +-17 +-21153 +-21407 +-21443 +-21224 +-44 +-20168 +-5 +-124 +-18364 +-33 +-102 +-18336 +-18160 +-17630 +-16804 +-10 +-15092 +-14564 +-14266 +-60 +-50 +-14225 +-43 +-14469 +-82 +-14219 +-13969 +-13810 +-12 +-14052 +-18 +-14583 +-49 +-14506 +-14235 +-48 +-90 +-35 +-13 +-12000 +-22 +-94 +-8 +-13222 +-48 +-13956 +-98 +-85 +-26 +-113 +-121 +-10933 +-55 +-77 +-8841 +-31 +-9100 +-8865 +-52 +-7340 +-6298 +-72 +-21 +-74 +-4 +-88 +-81 +-744 +-9 +-386 +-30 +-127 +-44 +807 +1564 +-42 +-118 +2827 +-40 +-108 +-82 +2907 +-66 +-77 +-74 +4702 +-125 +5201 +-21 +5499 +5757 +-118 +-32 +-11 +-25 +-45 +10303 +10242 +9817 +-86 +8237 +-23 +-38 +4410 +-67 +1855 +1122 +819 +826 +1036 +1322 +1554 +1567 +1280 +-20 +-92 +-49 +-93 +-39 +-67 +-90 +-2500 +-115 +-21 +-17 +-8089 +-9195 +-9879 +-10176 +-10240 +-10155 +-9964 +-9646 +-9194 +-37 +-8408 +-95 +-8389 +-9 +-71 +-10121 +-11179 +-12282 +-113 +-71 +-126 +-13533 +-23 +-57 +-12764 +-12190 +-11430 +-10670 +-10123 +-9903 +-9965 +-125 +-10114 +-69 +-76 +-7856 +-98 +-5296 +-4500 +-71 +-104 +-4510 +-4995 +-56 +-5549 +-5089 +-3981 +-49 +-490 +1357 +-62 +4362 +-19 +5960 +6259 +-1 +6505 +-5 +-91 +6935 +-1 +6693 +-72 +5906 +-90 +-67 +-100 +-123 +5992 +-19 +-108 +7961 +8571 +-52 +-28 +10067 +-18 +10250 +10249 +10265 +-30 +-27 +9527 +-78 +-81 +-48 +-120 +11594 +-69 +12359 +-43 +-81 +10075 +-122 +-75 +6433 +-72 +4179 +3085 +2157 +1570 +-63 +-124 +2884 +4206 +5644 +6933 +-44 +8515 +-31 +9223 +-61 +-97 +9046 +8462 +7772 +-68 +6476 +-84 +4985 +-119 +2839 +-58 +848 +371 +382 +810 +-44 +-90 +2837 +3336 +-39 +4363 +-31 +5941 +6767 +-18 +7750 +7763 +7443 +-112 +5891 +4865 +3942 +-75 +2839 +2585 +2341 +-5 +-62 +1584 +1813 +-27 +3683 +-104 +6252 +-5 +7680 +-84 +7713 +-73 +-68 +-42 +-123 +-63 +5637 +-81 +4691 +3886 +-7 +2410 +-53 +-76 +1375 +842 +-110 +-37 +-10 +-1173 +-919 +-55 +572 +1651 +-12 +-117 +-23 +-102 +6735 +-46 +7182 +-19 +6249 +-100 +-39 +-106 +1404 +372 +-200 +-2 +38 +-111 +619 +639 +513 +289 +-2 +-76 +-77 +-659 +-473 +-27 +623 +1349 +-97 +-53 +-42 +2117 +-56 +-93 +-17 +-86 +-67 +-67 +2824 +2603 +2136 +1592 +1074 +624 +278 +104 +-47 +570 +1074 +-19 +-110 +-114 +780 +-5 +-109 +-89 +-683 +-224 +292 +639 +-85 +-51 +110 +-19 +-113 +-92 +-86 +-488 +-51 +1091 +-60 +2844 +3707 +4636 +-42 +6489 +7277 +7956 +-116 +-66 +9582 +-29 +-127 +8449 +-92 +5421 +3681 +-50 +-77 +-927 +-1981 +-104 +-2996 +-29 +-70 +-3305 +-112 +-4333 +-11 +-18 +-62 +-6644 +-6346 +-5545 +-4275 +-50 +-673 +1319 +3152 +4618 +-13 +6183 +6480 +6743 +7215 +8027 +-127 +10101 +-65 +10609 +9841 +8573 +-87 +-58 +4162 +2860 +-48 +858 +-34 +-251 +-651 +-23 +-1497 +-1989 +-2525 +-3047 +-3474 +-101 +-3574 +-16 +-13 +-1445 +-127 +19 +562 +-4 +-93 +1859 +2322 +2892 +-45 +4102 +4393 +-19 +-72 +3618 +-88 +2906 +2627 +-104 +-89 +-126 +-41 +3396 +-100 +-26 +4421 +-60 +-128 +-120 +6407 +7231 +8306 +-81 +-103 +12670 +13950 +-53 +15119 +-71 +-60 +14684 +14897 +15407 +-54 +16701 +-36 +17183 +-80 +15966 +14649 +-66 +-53 +9540 +-100 +-113 +5501 +4133 +-59 +-34 +-120 +-713 +-1954 +-83 +-5100 +-17 +-85 +-19 +-11935 +-13014 +-41 +-14721 +-15746 +-16893 +-23 +-18665 +-34 +-25 +-71 +-33 +-18148 +-17893 +-17807 +-33 +-104 +-18629 +-18846 +-18860 +-26 +-44 +-26 +-17896 +-17571 +-85 +-51 +-16774 +-16798 +-98 +-66 +-17286 +-17034 +-84 +-88 +-30 +-15 +-100 +-60 +-12518 +-12470 +-12717 +-91 +-13556 +-13750 +-115 +-13458 +-13251 +-13208 +-15 +-13534 +-13745 +-77 +-13993 +-14008 +-13980 +-13954 +-14054 +-14310 +-63 +-55 +-27 +-14508 +-13818 +-73 +-4 +-10628 +-11 +-8390 +-7405 +-6573 +-16 +-5320 +-93 +-73 +-101 +-17 +-36 +-204 +-253 +-16 +-94 +-3969 +-5288 +-61 +-5761 +-4744 +-106 +-1431 +-56 +1600 +2820 +3902 +-66 +5408 +5646 +-71 +-59 +5134 +5161 +5418 +-55 +-121 +6729 +7190 +-49 +-33 +-67 +7524 +7034 +-66 +-110 +-15 +-49 +-15 +6184 +6156 +5976 +-12 +-56 +-74 +-25 +-20 +1342 +595 +24 +-424 +-64 +-1248 +-1675 +-15 +-32 +-2458 +-2480 +-2471 +-2532 +-2705 +-2993 +-97 +-4057 +-68 +-6029 +-29 +-50 +-91 +-9684 +-76 +-107 +-21 +-12940 +-13518 +-53 +-13214 +-112 +-99 +-115 +-9626 +-9350 +-53 +-60 +-16 +-30 +-12265 +-12797 +-23 +-116 +-81 +-12996 +-12679 +-72 +-11253 +-10183 +-92 +-89 +-99 +-6830 +-11 +-6644 +-6575 +-6281 +-58 +-4864 +-80 +-2997 +-59 +-1195 +-183 +-90 +2057 +-13 +3858 +-122 +4986 +5379 +-50 +-117 +5185 +4714 +-89 +-126 +-13 +-96 +3685 +3685 +3858 +-34 +-31 +-7 +-56 +-71 +9794 +-16 +-89 +-111 +-31 +-45 +-115 +12812 +12824 +12618 +12116 +11311 +10289 +-25 +-63 +7169 +-74 +5643 +5177 +4975 +-64 +-5 +-61 +-50 +-19 +7447 +8040 +8704 +-65 +10065 +10565 +10763 +10500 +-41 +-72 +-83 +-15 +-119 +-50 +-71 +3367 +-45 +4421 +-90 +5380 +-49 +4921 +4408 +-36 +-71 +-43 +-56 +5398 +5954 +-33 +-96 +-128 +-41 +-23 +-72 +5416 +4923 +4376 +3841 +3350 +2859 +2325 +-71 +1091 +579 +-121 +-67 +1547 +2820 +-53 +5732 +6932 +7768 +8234 +-35 +-35 +-125 +-49 +-86 +7446 +6958 +6407 +-71 +5158 +4445 +-113 +-57 +-33 +-55 +-52 +-86 +27 +323 +883 +-89 +1842 +2062 +-115 +-31 +2342 +2428 +2636 +3077 +-74 +-42 +-120 +5666 +5700 +-24 +4729 +3964 +-90 +-122 +2396 +2317 +2374 +-77 +-3 +-48 +-105 +-1 +536 +-104 +-85 +-2187 +-93 +-1470 +-110 +-122 +2082 +-109 +3396 +-11 +-53 +1886 +-62 +-15 +-88 +18 +-81 +-66 +-116 +-61 +-78 +-67 +2565 +2853 +-95 +2893 +2677 +-66 +2428 +-121 +2401 +2165 +-126 +-122 +-75 +-122 +-115 +-105 +-3253 +-52 +-124 +-2206 +-1924 +-81 +-1930 +-97 +-55 +-964 +-64 +-47 +-29 +-101 +-23 +-38 +5223 +-125 +6216 +-10 +-83 +7536 +7994 +-6 +8795 +-43 +-15 +8050 +7023 +5680 +4140 +2590 +-33 +-44 +-15 +-58 +-31 +-2045 +-22 +-3262 +-21 +-5079 +-57 +-56 +-34 +-5855 +-4844 +-3575 +-2226 +-907 +292 +1328 +-106 +-118 +3676 +4403 +-17 +5725 +6245 +6726 +7250 +-122 +-126 +-124 +-30 +7776 +6779 +5701 +-83 +-35 +3435 +-83 +1881 +-93 +-2 +-25 +-50 +-35 +-24 +-122 +-1188 +-941 +-643 +-49 +-36 +29 +-143 +-433 +-119 +-33 +-128 +584 +-77 +2352 +3095 +-57 +-47 +3127 +2428 +-126 +1061 +-26 +-78 +-5 +810 +-27 +610 +561 +-22 +-34 +-18 +-114 +3921 +-16 +5704 +6456 +-92 +-87 +-73 +8803 +9782 +11056 +-61 +-1 +-21 +15394 +-37 +-62 +15486 +-123 +15631 +15902 +-104 +16657 +16915 +16904 +-116 +-119 +-29 +-78 +11075 +9021 +-113 +-26 +3928 +-92 +1605 +-43 +-747 +-13 +-3463 +-116 +-6600 +-99 +-9901 +-11251 +-12193 +-12732 +-12971 +-13023 +-13038 +-36 +-13291 +-13743 +-14521 +-17 +-55 +-29 +-123 +-127 +-62 +-18319 +-17576 +-17034 +-16786 +-16832 +-17080 +-62 +-43 +-56 +-44 +-19383 +-19610 +-19634 +-19388 +-83 +-47 +-16284 +-92 +-108 +-126 +-10992 +-1 +-10439 +-73 +-22 +-87 +-81 +-13743 +-128 +-51 +-15097 +-15574 +-16023 +-16379 +-16599 +-11 +-16545 +-16284 +-30 +-99 +-15001 +-14533 +-13994 +-13301 +-12445 +-11505 +-10652 +-50 +-9673 +-21 +-9345 +-120 +-8641 +-96 +-7364 +-113 +-6372 +-23 +-6078 +-90 +-5821 +-5621 +-5364 +-5014 +-4489 +-3800 +-3039 +-27 +-1765 +-47 +-988 +-732 +-75 +-13 +-482 +-114 +-151 +-62 +-58 +-42 +2644 +4111 +5707 +-1 +8309 +9065 +-5 +9545 +9304 +8747 +-7 +6973 +-82 +-40 +4869 +4660 +4638 +4693 +-119 +4712 +-9 +4472 +4427 +-86 +4681 +-101 +4621 +4160 +3358 +2308 +-108 +-104 +-63 +-960 +-75 +-123 +-1237 +-1416 +-1670 +-2007 +-2455 +-6 +-54 +-4836 +-113 +-84 +-103 +-1 +-7855 +-8419 +-9186 +-125 +-29 +-11743 +-45 +-3 +-11693 +-11176 +-107 +-10123 +-9922 +-10155 +-64 +-11739 +-112 +-10 +-51 +-32 +-101 +-13200 +-13013 +-11 +-26 +-48 +-12162 +-12020 +-1 +-11249 +-124 +-9160 +-76 +-6273 +-4801 +-100 +-2242 +-26 +-669 +-93 +-61 +-477 +-733 +-993 +-1219 +-1411 +-42 +-1732 +-25 +-1732 +-114 +-732 +259 +1562 +3132 +-35 +6441 +7754 +-39 +9218 +9519 +-111 +9527 +9255 +-59 +-86 +8537 +8726 +-99 +9535 +9785 +-26 +9224 +-4 +-111 +-56 +-121 +6722 +-47 +8260 +9049 +9487 +9552 +-64 +9274 +9290 +-4 +9750 +10076 +-116 +10550 +-23 +10067 +9319 +8299 +-53 +5905 +-87 +3874 +3368 +3353 +-27 +4612 +-111 +-83 +-58 +-96 +7003 +6782 +-72 +6525 +6667 +6991 +7439 +-20 +8306 +-30 +8063 +-5 +-83 +-112 +-33 +-86 +1134 +1041 +-15 +1663 +2144 +2681 +-62 +-25 +4210 +4368 +-25 +4208 +4200 +4464 +-70 +-63 +-97 +7026 +7183 +-36 +7037 +7023 +-49 +7269 +-43 +-69 +-78 +6516 +-5 +-104 +-6 +2304 +1590 +-52 +-115 +1299 +1578 +-88 +2390 +-19 +3092 +-110 +3185 +3102 +3088 +-85 +-15 +-124 +-29 +-126 +4411 +4130 +-115 +-15 +-89 +-18 +-70 +2837 +-1 +3440 +3874 +-110 +4359 +4136 +-37 +2676 +-115 +-25 +26 +-394 +-30 +-505 +-84 +-103 +-128 +256 +-84 +-119 +-467 +-106 +-124 +-16 +1081 +-122 +2626 +3136 +-103 +-122 +3879 +-78 +4174 +4355 +-107 +-117 +4205 +-15 +2621 +-25 +-70 +-426 +-1023 +-64 +-1451 +-1508 +-1672 +-2047 +-56 +-3233 +-3740 +-4026 +-1 +-3986 +-104 +-68 +-8 +-1275 +-158 +-70 +-31 +-36 +-79 +4947 +-55 +6657 +-80 +-124 +7990 +-17 +7735 +-115 +7481 +7450 +-41 +7213 +-30 +-79 +5457 +-80 +2851 +1351 +-98 +-102 +-2493 +-67 +-4025 +-4300 +-110 +-13 +-97 +-12 +-66 +-2778 +-2722 +-109 +-2550 +-2249 +-1674 +-760 +-67 +1825 +-124 +4380 +5184 +-87 +5500 +5190 +4868 +-63 +-5 +5727 +-15 +-100 +-56 +6494 +-114 +-45 +-74 +-97 +-24 +-94 +-20 +-238 +-392 +-205 +-13 +789 +1285 +1638 +-3 +-75 +-98 +-23 +-4 +96 +-115 +-20 +352 +-123 +-96 +1803 +1913 +-41 +1367 +867 +381 +-17 +-53 +-504 +-92 +-56 +-98 +37 +581 +-104 +-91 +-1 +2123 +1907 +-55 +1028 +818 +1064 +1843 +-29 +4473 +5997 +-82 +9285 +-23 +-29 +13661 +14364 +14685 +-26 +14959 +15213 +15618 +-7 +-37 +16974 +17199 +-113 +-124 +-41 +16718 +-36 +-118 +14152 +-5 +-93 +9341 +7442 +-15 +-121 +-64 +1124 +-225 +-9 +-2766 +-3765 +-4483 +-101 +-5313 +-5625 +-90 +-9 +-60 +-68 +-67 +-47 +-11430 +-43 +-99 +-24 +-19 +-17150 +-17556 +-11 +-17659 +-54 +-55 +-18403 +-18882 +-60 +-19448 +-19387 +-80 +-18357 +-66 +-16515 +-15604 +-18 +-14328 +-14012 +-57 +-39 +-55 +-55 +-75 +-13989 +-14227 +-59 +-121 +-15836 +-16299 +-76 +-125 +-100 +-14986 +-14260 +-13702 +-13441 +-13516 +-52 +-112 +-36 +-17 +-16558 +-103 +-17067 +-38 +-15869 +-14791 +-74 +-48 +-11735 +-51 +-10481 +-9904 +-42 +-91 +-7836 +-125 +-125 +-7127 +-84 +-97 +-53 +-62 +-60 +-43 +-97 +-26 +-97 +-15 +-4 +-3735 +-125 +-1940 +-84 +-1683 +-1940 +-54 +-1966 +-1449 +-641 +334 +1360 +2377 +-2 +4145 +-121 +-25 +-87 +5476 +-83 +-86 +-3 +-8 +-20 +7542 +-67 +6455 +-79 +-64 +-59 +-108 +-48 +5149 +5193 +5154 +-125 +4707 +-34 +3868 +3428 +-3 +2832 +-36 +2918 +3161 +3339 +-96 +-120 +-99 +322 +-1217 +-2696 +-56 +-59 +-124 +-89 +-4738 +-4505 +-26 +-27 +-4486 +-51 +-85 +-32 +-6063 +-6821 +-7561 +-30 +-8860 +-9669 +-49 +-12236 +-13766 +-40 +-57 +-16778 +-16875 +-51 +-15508 +-14243 +-88 +-11689 +-73 +-10373 +-58 +-10474 +-10679 +-10688 +-94 +-9612 +-8645 +-7637 +-6791 +-87 +-117 +-6104 +-89 +-116 +-115 +-7834 +-127 +-29 +-6813 +-77 +-116 +-3978 +-3028 +-104 +-34 +-425 +531 +-18 +-74 +3404 +-80 +-26 +-46 +6430 +6781 +-31 +-83 +6773 +6780 +-121 +6716 +6514 +6259 +-97 +5916 +-17 +5923 +-19 +-113 +7203 +-104 +-66 +10317 +-88 +12291 +-92 +12584 +-84 +-53 +-128 +-60 +8255 +7990 +8026 +8196 +8306 +8212 +-49 +-10 +6955 +-39 +6478 +-114 +6783 +-15 +-120 +-40 +8038 +-1 +-51 +7252 +6953 +-59 +6993 +-107 +7710 +8019 +-64 +7992 +-67 +-75 +-124 +5995 +5474 +4904 +-98 +3593 +-72 +-3 +-15 +-108 +-28 +-30 +2931 +3453 +-20 +-107 +5383 +-69 +5956 +-58 +-37 +5428 +5420 +-101 +5673 +5757 +-82 +-20 +5976 +-13 +6262 +-96 +6218 +5988 +5645 +5240 +-45 +4453 +4207 +4097 +-1 +-8 +-118 +-105 +3395 +-21 +-16 +2677 +2634 +2591 +-70 +2334 +2143 +-61 +1912 +-74 +-66 +-59 +-14 +-1 +5686 +6521 +-77 +-124 +5758 +-56 +3949 +3333 +-95 +2829 +-12 +-7 +-72 +-32 +2128 +1587 +-65 +261 +-498 +-1268 +-1962 +-83 +-66 +-58 +-915 +-60 +-30 +2064 +2583 +2859 +-86 +3082 +-97 +-89 +3872 +-35 +-73 +5209 +5500 +-36 +5420 +4938 +4151 +3140 +-19 +-65 +45 +-681 +-1221 +-107 +-2047 +-2504 +-3039 +-19 +-28 +-4530 +-4802 +-70 +-43 +-77 +-114 +-103 +-2304 +-65 +874 +2643 +-109 +5495 +-93 +6701 +-112 +6745 +-2 +-44 +6665 +-95 +-86 +-11 +7726 +-30 +7800 +-104 +6460 +-87 +3954 +-9 +-45 +79 +-97 +-25 +-2015 +-2250 +-5 +-2267 +-2226 +-2270 +-2435 +-127 +-92 +-2988 +-38 +-2488 +-95 +-28 +-18 +1138 +2304 +3353 +4190 +-108 +-123 +4878 +4453 +-34 +3120 +2577 +2334 +-101 +2888 +3455 +3917 +4135 +4112 +3964 +-8 +-74 +-122 +3587 +-37 +2846 +2323 +1848 +-67 +-128 +833 +-28 +-65 +97 +311 +827 +1549 +-6 +2848 +-27 +-4 +-105 +1392 +590 +-46 +-472 +-693 +-758 +-697 +-24 +-93 +-208 +-180 +-221 +-249 +-216 +-149 +-140 +-1 +-502 +-44 +-101 +-108 +-1517 +-123 +-937 +-77 +1135 +2597 +4210 +-14 +7522 +-108 +10591 +-127 +-101 +-94 +-87 +14621 +-96 +-77 +-110 +-42 +-79 +18210 +-98 +17468 +-121 +15374 +14155 +-112 +11833 +-101 +-45 +-66 +9233 +8812 +-109 +7771 +-86 +-125 +5403 +-76 +3709 +2892 +-83 +794 +-682 +-120 +-4347 +-6338 +-80 +-44 +-11434 +-77 +-12778 +-12777 +-14 +-44 +-12 +-12534 +-13 +-10 +-14740 +-52 +-16515 +-40 +-17634 +-17836 +-17810 +-17611 +-17307 +-47 +-16565 +-20 +-56 +-19 +-14513 +-96 +-13455 +-126 +-72 +-13296 +-13714 +-29 +-81 +-16035 +-99 +-5 +-58 +-2 +-16307 +-15581 +-85 +-14545 +-14497 +-14742 +-31 +-15499 +-74 +-6 +-15286 +-14758 +-77 +-62 +-13288 +-107 +-13220 +-63 +-13530 +-14 +-111 +-12965 +-12201 +-11235 +-23 +-24 +-85 +-8915 +-35 +-9142 +-9198 +-102 +-25 +-53 +-8 +-7165 +-121 +-6572 +-6533 +-6594 +-15 +-33 +-6561 +-41 +-49 +-4234 +-96 +-908 +-35 +-3 +2886 +-71 +-115 +2878 +2396 +1887 +-41 +1340 +-3 +2114 +-70 +-66 +4975 +5705 +6226 +-12 +-88 +-121 +8000 +8275 +8268 +7950 +-122 +-28 +-105 +4163 +-58 +-120 +-110 +2389 +2346 +-118 +1911 +1576 +-49 +-90 +-67 +599 +-39 +1146 +-12 +-125 +2857 +2858 +2379 +-61 +285 +-1023 +-2299 +-3478 +-4547 +-5522 +-52 +-7363 +-71 +-9164 +-78 +-10935 +-11752 +-12473 +-18 +-13543 +-33 +-13974 +-52 +-10 +-89 +-95 +-69 +-23 +-10968 +-10404 +-9926 +-9605 +-16 +-76 +-9 +-3 +-33 +-117 +-16 +-2 +-12012 +-65 +-96 +-12023 +-28 +-72 +-33 +-48 +-7348 +-121 +-29 +-61 +-3530 +-58 +-64 +-121 +-46 +-34 +-457 +-115 +-100 +-51 +303 +1125 +-30 +2851 +-21 +4145 +-11 +4937 +5210 +5474 +5731 +5978 +6237 +6520 +-55 +7263 +7686 +-109 +-20 +8715 +9002 +9331 +-8 +-124 +-107 +-67 +-56 +-34 +9074 +-1 +-49 +7445 +-14 +7033 +-35 +7485 +8062 +8733 +-103 +9803 +-61 +-8 +9242 +-80 +8032 +-51 +7514 +7712 +-21 +8768 +9281 +9506 +9321 +8761 +7961 +-107 +6162 +-16 +-107 +4452 +4479 +-87 +5203 +-33 +-44 +5906 +-103 +-104 +5195 +-22 +-94 +-124 +-84 +3871 +3848 +-102 +-29 +-122 +-16 +-118 +5176 +4981 +-25 +4873 +-52 +-39 +-32 +-38 +-31 +6428 +-122 +-48 +7290 +7190 +6758 +-89 +5217 +4442 +3860 +-58 +3405 +3412 +-128 +3454 +3340 +3085 +-117 +-37 +1907 +-114 +1596 +1652 +1892 +2375 +3127 +-13 +-66 +-28 +-46 +6501 +-54 +5945 +5376 +4696 +-98 +3377 +2920 +-123 +2683 +2830 +-43 +3168 +3136 +2819 +2174 +-36 +-111 +-964 +-1929 +-65 +-112 +-2739 +-2046 +-977 +-10 +1390 +-66 +-72 +-93 +3091 +-51 +3641 +4191 +-21 +5444 +-16 +-62 +-54 +5913 +-84 +4991 +-101 +3416 +-44 +1577 +574 +-468 +-1512 +-2477 +-3286 +-62 +-4307 +-4515 +-4552 +-101 +-4242 +-100 +-3569 +-85 +-2753 +-69 +-2021 +-97 +-1173 +-39 +289 +1375 +2676 +4114 +-20 +7036 +8261 +-70 +-126 +-99 +9279 +-55 +-99 +-6 +5935 +4981 +-18 +-112 +2391 +1593 +871 +309 +-33 +-157 +-122 +-25 +68 +109 +18 +-10 +-763 +-1411 +-36 +-38 +-2791 +-2544 +-47 +-760 +512 +-44 +-77 +3366 +3594 +-105 +3124 +2663 +-82 +1895 +-46 +-39 +1900 +2140 +-115 +-22 +3141 +3419 +-21 +3586 +-12 +3629 +-52 +3943 +3953 +-113 +-39 +-61 +-85 +-41 +1369 +1109 +1043 +-60 +1629 +2169 +-127 +-29 +3111 +2858 +2358 +-60 +-123 +796 +-22 +-41 +1400 +1831 +2082 +-13 +1642 +-56 +110 +-76 +-32 +-2774 +-46 +-4325 +-4792 +-5014 +-5040 +-44 +-4595 +-4045 +-83 +-58 +-152 +1819 +-23 +-22 +7017 +7975 +8514 +8722 +8724 +-47 +-34 +-95 +9301 +10002 +-41 +12136 +13386 +-46 +15459 +-112 +16220 +-6 +-31 +-111 +15212 +-79 +14889 +14705 +14344 +-94 +12864 +11805 +-72 +9597 +-44 +7938 +7445 +-7 +6937 +-70 +-11 +4662 +2935 +840 +-92 +-85 +-5095 +-6362 +-126 +-111 +-28 +-9423 +-10165 +-10940 +-11706 +-12421 +-13042 +-13541 +-53 +-14016 +-13967 +-13810 +-90 +-37 +-107 +-2 +-13989 +-42 +-14234 +-31 +-5 +-14988 +-15554 +-93 +-16837 +-74 +-17286 +-99 +-35 +-46 +-37 +-14213 +-13761 +-8 +-84 +-126 +-71 +-15009 +-115 +-16558 +-17337 +-17865 +-23 +-80 +-16631 +-15591 +-26 +-44 +-60 +-26 +-121 +-15 +-12704 +-16 +-116 +-2 +-7 +-12459 +-12726 +-13016 +-13255 +-55 +-13312 +-13045 +-15 +-11905 +-11152 +-10389 +-9644 +-8927 +-36 +-7568 +-53 +-20 +-48 +-5515 +-101 +-11 +-5272 +-5598 +-117 +-6319 +-6388 +-6108 +-100 +-4589 +-2 +-4 +-34 +-71 +-80 +-54 +-57 +3413 +4176 +-59 +5379 +5915 +-32 +-31 +-34 +-21 +6006 +-17 +-96 +4977 +4696 +4417 +4162 +3939 +-104 +-74 +-83 +-121 +2651 +2390 +-85 +-76 +-50 +3083 +3889 +-106 +-115 +-127 +6175 +5979 +5501 +4865 +4153 +3404 +2568 +1576 +-112 +-935 +-58 +-3782 +-21 +-6370 +-7 +-82 +-125 +-101 +-8959 +-8605 +-8148 +-102 +-19 +-66 +-8685 +-9637 +-10677 +-82 +-7 +-12680 +-12763 +-46 +-12219 +-11772 +-105 +-125 +-11142 +-11402 +-45 +-13 +-12726 +-13024 +-80 +-13022 +-12695 +-12165 +-11466 +-10659 +-89 +-91 +-20 +-8130 +-43 +-7903 +-86 +-101 +-11 +-122 +-6281 +-50 +-95 +-51 +-3312 +-2537 +-99 +-92 +-976 +-649 +-50 +-107 +794 +1649 +2655 +3702 +4640 +5384 +5893 +6185 +-80 +-23 +6427 +6518 +6658 +-84 +7001 +-4 +-106 +7468 +-76 +7707 +7789 +-93 +-88 +7778 +-55 +7464 +7424 +-36 +-41 +-97 +-89 +10326 +10843 +11089 +-8 +10545 +9798 +-15 +8220 +-116 +7777 +8036 +8480 +8969 +-82 +-119 +9569 +9218 +-99 +-87 +-81 +6471 +-63 +5933 +5992 +6238 +-42 +-102 +7452 +-67 +7450 +6952 +6204 +-10 +-25 +3947 +-78 +-78 +3182 +-7 +3663 +4179 +-85 +-25 +-55 +6206 +6496 +6710 +-71 +-24 +-72 +6721 +-123 +-91 +-91 +-80 +5645 +-24 +5700 +-47 +5919 +-42 +-62 +5132 +-19 +-109 +3416 +2942 +2609 +-101 +-17 +2842 +-45 +-92 +-30 +4167 +-32 +3859 +3702 +3685 +3847 +4168 +-36 +4985 +-6 +5712 +6011 +6222 +-123 +-9 +-95 +-96 +4655 +-116 +-61 +-23 +-16 +-50 +-126 +-703 +-124 +-69 +-1977 +-1704 +-35 +-153 +859 +1797 +-56 +2891 +2939 +-105 +2319 +1905 +1619 +1614 +-56 +-47 +3863 +-54 +6145 +-36 +7195 +-42 +6763 +6212 +-92 +-115 +-38 +-120 +-107 +77 +-1 +-2540 +-31 +-103 +-5030 +-5314 +-5271 +-51 +-4340 +-3726 +-3241 +-2985 +-70 +-2801 +-60 +-2270 +-1738 +-1008 +-69 +1093 +2419 +-4 +5220 +6444 +-18 +8005 +8206 +8017 +7528 +-34 +6203 +-29 +-28 +4635 +4158 +3611 +-66 +2389 +1868 +-22 +1384 +-114 +-15 +1571 +-83 +1111 +558 +-141 +-897 +-15 +-1964 +-1991 +-20 +-700 +-94 +1538 +2399 +-55 +-2 +1854 +-127 +18 +-8 +-61 +-198 +-41 +1299 +2145 +2904 +-86 +3891 +4135 +-46 +4430 +-124 +-5 +3950 +-29 +-48 +-39 +1125 +-110 +320 +91 +4 +-109 +613 +-124 +-90 +3626 +4715 +-22 +6242 +-75 +-48 +-82 +5712 +-4 +3851 +-6 +1819 +-81 +-56 +-421 +-930 +-35 +-43 +-1712 +-1747 +-1742 +-1770 +-113 +-2220 +-2728 +-40 +-3999 +-79 +-4544 +-4270 +-76 +-2796 +-3 +-764 +-93 +-104 +-26 +-67 +-109 +-74 +3693 +-48 +-23 +-119 +8006 +-89 +10036 +-61 +11119 +-122 +11602 +11779 +-110 +12050 +-90 +-117 +-18 +13336 +-12 +14942 +-27 +-15 +17156 +-48 +17256 +-25 +16202 +15227 +13923 +12323 +10554 +8786 +-2 +-113 +4625 +3674 +2857 +2108 +1340 +-11 +-398 +-71 +-13 +-3265 +-87 +-5048 +-5856 +-2 +-105 +-86 +-9650 +-8 +-11742 +-12502 +-13007 +-13259 +-13286 +-64 +-11 +-12452 +-98 +-11933 +-122 +-12 +-88 +-66 +-13482 +-53 +-14731 +-115 +-21 +-16056 +-16553 +-17130 +-8 +-128 +-18139 +-17895 +-17341 +-16543 +-15594 +-30 +-13760 +-72 +-10 +-20 +-53 +-24 +-115 +-14815 +-12 +-15786 +-16013 +-16025 +-8 +-28 +-51 +-15244 +-35 +-15032 +-14814 +-76 +-13816 +-35 +-25 +-52 +-10930 +-10472 +-13 +-19 +-10412 +-87 +-10683 +-10660 +-33 +-75 +-57 +-10 +-9410 +-117 +-73 +-122 +-25 +-17 +-31 +-8434 +-41 +-118 +-7070 +-105 +-4584 +-105 +-106 +599 +2096 +-125 +3861 +4100 +-107 +3667 +-52 +2883 +-22 +-44 +-6 +1899 +1836 +1874 +-34 +-40 +2593 +-94 +3346 +3630 +-13 +-106 +4181 +4473 +4883 +-8 +-32 +-126 +-110 +-14 +-122 +6213 +5691 +-93 +-46 +3659 +3172 +2876 +-79 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_G_195_998.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_G_195_998.samples new file mode 100644 index 00000000..cf1b81e0 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/guitar_G_195_998.samples @@ -0,0 +1,4096 @@ +14692 +14168 +-107 +-119 +-56 +12079 +9274 +7524 +7746 +8813 +9002 +-38 +5405 +3427 +-1 +2138 +-12 +-57 +2938 +583 +-2195 +-3713 +-3728 +-126 +-97 +-3272 +-4602 +-6634 +-122 +-17 +-7896 +-73 +-89 +-68 +-10629 +-11977 +-12519 +-36 +-28 +-45 +-61 +-11451 +-51 +-12423 +-12458 +-12485 +-12514 +-101 +-10482 +-43 +-8913 +-77 +-9970 +-55 +-10431 +-9133 +-48 +-12 +-125 +-75 +-5545 +-7810 +-9146 +-8373 +-128 +-62 +-50 +-26 +-106 +-1520 +-2801 +-117 +-118 +-78 +-72 +-118 +-106 +4669 +-4 +1900 +1551 +2088 +-13 +5473 +6660 +6727 +6463 +-90 +-44 +-10 +-25 +6451 +-74 +4173 +-58 +-46 +7200 +9224 +-92 +-120 +11276 +8467 +-11 +1821 +-60 +-21 +2074 +-14 +-32 +13337 +14359 +-102 +9073 +4897 +-121 +-1012 +-27 +-44 +-87 +-85 +5924 +-29 +8991 +9544 +9564 +-111 +7480 +-66 +-52 +3085 +1807 +-187 +-110 +-42 +-6399 +-5376 +-93 +-89 +5633 +-63 +14374 +-82 +19992 +20035 +17687 +-60 +-93 +4192 +807 +-1691 +-72 +-5268 +-81 +-6118 +-57 +-6581 +-39 +-127 +-126 +-17093 +-19182 +-100 +-110 +-31 +-21193 +-29 +-15331 +-109 +-10383 +-115 +-88 +-107 +-4502 +-91 +-10976 +-46 +-101 +-19926 +-22146 +-24566 +-26609 +-27597 +-7 +-25562 +-23543 +-21169 +-57 +-105 +-53 +-5343 +-22 +840 +-45 +-100 +6243 +7726 +-66 +9845 +10346 +10255 +-102 +9581 +-93 +-51 +11806 +12851 +-3 +12663 +-128 +11888 +-26 +-3 +-74 +-81 +13072 +12649 +13323 +-109 +16963 +16959 +15684 +-67 +-83 +15916 +16695 +-61 +-22 +13678 +11380 +10265 +10550 +11290 +-93 +-120 +-57 +5468 +4368 +4389 +5229 +5692 +-71 +2592 +-117 +-4 +-18 +-711 +-121 +-1474 +-3037 +-118 +-6576 +-13 +-52 +-5614 +-121 +-7139 +-26 +-9717 +-10703 +-52 +-1 +-11414 +-111 +-24 +-29 +-11412 +-65 +-117 +-13476 +-115 +-10 +-10633 +-9662 +-9197 +-76 +-66 +-12522 +-52 +-4 +-6558 +-4308 +-3999 +-5270 +-77 +-100 +-30 +-8623 +-31 +-10 +-760 +-483 +-1519 +-2806 +-3715 +-19 +-2723 +-256 +2591 +4362 +-88 +-101 +1899 +1836 +-17 +-116 +-55 +3133 +3606 +-96 +-85 +7184 +-98 +8549 +8218 +6952 +-56 +3403 +2916 +3949 +-56 +8572 +10809 +12355 +-14 +10572 +6698 +-56 +-190 +-48 +-108 +-41 +7980 +-6 +-67 +13326 +11346 +-111 +-35 +-57 +-499 +-14 +-82 +266 +-97 +5452 +7508 +8481 +8521 +-33 +7978 +-57 +8028 +-47 +4620 +-50 +-87 +-4018 +-88 +-120 +-50 +-121 +-39 +4196 +10076 +-2 +17753 +18957 +18781 +17266 +14353 +-88 +5473 +1630 +-667 +-1750 +-33 +-3047 +-41 +-5367 +-81 +-7892 +-76 +-108 +-17034 +-12 +-20687 +-61 +-21185 +-21244 +-20381 +-50 +-13704 +-9722 +-120 +-5326 +-5256 +-6024 +-7354 +-1 +-12440 +-15769 +-18866 +-21486 +-128 +-117 +-26806 +-111 +-27091 +-39 +-22687 +-89 +-16 +-8 +-20 +-4341 +-1921 +360 +2879 +5402 +-122 +-45 +9042 +-90 +8525 +8234 +9248 +-32 +12047 +11841 +11080 +11043 +-62 +-112 +-113 +-96 +11797 +11082 +11310 +-60 +-16 +-21 +-15 +14433 +-67 +-80 +-126 +17490 +-97 +17017 +-124 +13385 +12650 +-83 +-104 +13589 +11851 +9562 +-99 +6500 +6698 +-118 +-120 +6783 +4699 +-60 +-23 +-57 +1609 +-46 +598 +-919 +-83 +-62 +-122 +-125 +-81 +-5107 +-5280 +-96 +-93 +-88 +-9711 +-10476 +-10664 +-10667 +-30 +-10226 +-10113 +-10704 +-12180 +-13781 +-14249 +-99 +-11206 +-9626 +-7 +-11 +-11455 +-12965 +-13551 +-13 +-19 +-6555 +-4852 +-33 +-6288 +-8068 +-9368 +-5 +-114 +-6543 +-78 +-123 +-70 +-100 +-4803 +-5056 +-3779 +-65 +-188 +855 +-65 +-34 +-103 +2616 +2585 +2627 +-13 +-70 +-24 +2108 +-51 +-15 +-124 +-3 +8801 +-124 +7545 +-108 +3651 +-9 +-17 +-7 +7525 +-115 +12892 +13094 +11580 +8499 +-55 +1119 +-11 +102 +-114 +-78 +9598 +11644 +-34 +-13 +-74 +7762 +-74 +1315 +-28 +-17 +-6 +-17 +3875 +-54 +5229 +-120 +7547 +-32 +-71 +-103 +-10 +6954 +5422 +-67 +-36 +-3753 +-3 +-7401 +-36 +-4065 +-78 +-5 +-102 +13413 +17429 +-56 +-56 +16448 +13312 +10329 +-56 +4186 +1314 +-10 +-100 +-1013 +-31 +-81 +-5519 +-11 +-10375 +-12268 +-14469 +-51 +-63 +-98 +-22696 +-21739 +-42 +-17069 +-13985 +-115 +-45 +-19 +-112 +-5767 +-43 +-37 +-16 +-14224 +-85 +-40 +-22180 +-24976 +-27089 +-27844 +-27361 +-26039 +-23759 +-104 +-60 +-123 +-10629 +-7894 +-13 +-403 +-121 +4941 +5700 +5985 +6493 +7529 +-64 +-28 +-88 +-90 +-44 +-127 +-73 +-47 +-24 +-13 +-82 +-44 +10781 +12085 +-121 +13942 +13432 +12619 +12567 +-89 +-110 +17006 +-63 +16942 +15452 +-90 +14205 +15134 +15986 +15729 +14086 +-61 +-46 +8745 +-12 +9483 +9333 +-6 +6525 +-26 +4223 +3636 +3089 +2671 +2309 +1624 +339 +-33 +-116 +-3295 +-3477 +-3806 +-4290 +-4526 +-75 +-9 +-6894 +-8702 +-9972 +-10227 +-9698 +-59 +-109 +-28 +-65 +-12983 +-14283 +-14069 +-20 +-10179 +-9126 +-9696 +-49 +-97 +-13772 +-13739 +-28 +-7 +-46 +-123 +-5339 +-7044 +-9465 +-13 +-9976 +-7833 +-98 +-111 +-4046 +-108 +-78 +-16 +-5017 +-4048 +-89 +-1483 +-5 +-56 +315 +1367 +-48 +-59 +-101 +-123 +1838 +1584 +1379 +1624 +2855 +-90 +7469 +9281 +-102 +8233 +-51 +-100 +-31 +-105 +2386 +-99 +9522 +12641 +-98 +12576 +9747 +6182 +2928 +864 +-68 +1555 +3642 +-50 +9544 +12386 +-84 +-126 +-85 +-61 +3399 +2148 +1605 +1105 +-59 +1054 +-69 +3702 +-65 +-1 +-103 +-43 +-7 +-51 +-57 +-67 +-13 +2589 +-122 +-3221 +-4 +-7860 +-66 +-50 +-1453 +-74 +8217 +-90 +15409 +17706 +-4 +17022 +13861 +-111 +6959 +4896 +-62 +2895 +1596 +5 +-54 +-94 +-3733 +-96 +-15 +-85 +-13699 +-37 +-19871 +-89 +-21990 +-21488 +-20115 +-17615 +-14259 +-10996 +-122 +-52 +-49 +-5599 +-121 +-7928 +-59 +-111 +-14501 +-28 +-21487 +-24824 +-26855 +-12 +-14 +-25048 +-23455 +-48 +-128 +-16794 +-51 +-75 +-37 +-1747 +-20 +-89 +3611 +-66 +7217 +8036 +-13 +-89 +7985 +-113 +11090 +-22 +12411 +-95 +-28 +10358 +-66 +12127 +13063 +-90 +-92 +-84 +-93 +-86 +-98 +-79 +16721 +-114 +-88 +14158 +-29 +16236 +17154 +-109 +15457 +13948 +-91 +-63 +-42 +-102 +10590 +-80 +9003 +7491 +-94 +5709 +-7 +-54 +-59 +-13 +2625 +-94 +-99 +-12 +-2208 +-2757 +-2 +-2777 +-13 +-3246 +-117 +-62 +-8356 +-9159 +-8645 +-105 +-94 +-7827 +-17 +-8 +-22 +-56 +-59 +-11736 +-10149 +-8909 +-9193 +-11244 +-6 +-15262 +-39 +-15 +-33 +-60 +-6851 +-36 +-8670 +-83 +-28 +-30 +-63 +-6104 +-63 +-5569 +-5812 +-125 +-3 +-4852 +-1 +-77 +-3289 +-30 +-52 +-42 +-13 +1362 +-12 +3150 +-38 +-98 +617 +117 +359 +-89 +-16 +6427 +-77 +-108 +-47 +6952 +3854 +1148 +111 +1351 +4457 +-31 +11069 +-113 +12395 +11367 +9251 +6005 +-84 +31 +-243 +1829 +-14 +8768 +-102 +11639 +11337 +10347 +-100 +-15 +-15 +2573 +1540 +-66 +1651 +1645 +1629 +2094 +-119 +-111 +7446 +8708 +9516 +-54 +10508 +9733 +-125 +-80 +-718 +-4349 +-10 +-84 +-66 +-63 +-41 +1617 +7279 +12155 +15198 +16506 +16457 +15214 +13094 +10799 +8812 +7001 +5158 +3411 +2105 +1330 +-127 +-90 +-69 +-4244 +-13 +-9440 +-42 +-16527 +-19175 +-20922 +-21727 +-21480 +-118 +-33 +-14775 +-95 +-9460 +-7881 +-7074 +-126 +-61 +-6 +-7316 +-10475 +-14527 +-110 +-84 +-108 +-77 +-25254 +-26359 +-79 +-26298 +-23988 +-20406 +-16537 +-13192 +-10372 +-7632 +-48 +-1447 +1558 +-94 +-123 +-28 +4956 +-5 +-3 +-63 +-53 +-120 +10526 +9832 +9820 +10822 +12381 +13359 +12830 +11132 +-40 +9733 +-30 +-17 +14168 +-44 +-88 +-81 +14120 +-112 +15417 +-107 +17175 +-43 +15701 +-103 +-54 +13384 +12891 +-68 +-9 +10760 +9817 +8740 +7794 +-84 +6441 +-57 +-65 +-44 +4183 +3144 +-13 +-392 +-1761 +-66 +-939 +-46 +-11 +-109 +-78 +-6387 +-7097 +-35 +-6885 +-6386 +-6144 +-6802 +-48 +-11470 +-13528 +-13741 +-12257 +-10240 +-100 +-8661 +-19 +-11 +-75 +-15238 +-42 +-12209 +-56 +-8337 +-126 +-9155 +-9925 +-45 +-20 +-126 +-68 +-91 +-6636 +-6132 +-27 +-6297 +-6036 +-118 +-5009 +-34 +-4304 +-45 +-127 +-102 +-27 +-20 +-122 +-104 +-40 +1873 +-120 +-102 +-1270 +-506 +-80 +-105 +8773 +-41 +9226 +6732 +4099 +2124 +1124 +-50 +-124 +-90 +-109 +-21 +13609 +13319 +-45 +6987 +3623 +1581 +1052 +-55 +-16 +-5 +-19 +10820 +-16 +11084 +-126 +-39 +-4 +5665 +-87 +-23 +1536 +-86 +-50 +-83 +2409 +-101 +3860 +6211 +-3 +-48 +11624 +11053 +-54 +7461 +4182 +-20 +-3523 +-6544 +-22 +-8632 +-100 +-2476 +-68 +-74 +-42 +-25 +-6 +-26 +14647 +-26 +11613 +-5 +7699 +-69 +4380 +3371 +2652 +2088 +-6 +-52 +-2691 +-108 +-10 +-11720 +-15311 +-64 +-82 +-119 +-20654 +-19 +-110 +-108 +-32 +-12012 +-56 +-27 +-4526 +-13 +-21 +-8377 +-10944 +-13249 +-93 +-7 +-63 +-23753 +-19 +-97 +-26813 +-25328 +-23475 +-78 +-19401 +-52 +-94 +-27 +-6 +-77 +-128 +-92 +1047 +-71 +-5 +7803 +9248 +-61 +-13 +-116 +9334 +-110 +-123 +12655 +12409 +11562 +-39 +9810 +-16 +-61 +12654 +13167 +13080 +12901 +-14 +13635 +-16 +-54 +16245 +-122 +16392 +15929 +-1 +14946 +14680 +-116 +13393 +-24 +-85 +-127 +10344 +8829 +7487 +6978 +-91 +7776 +7285 +-110 +-58 +1553 +597 +-67 +-37 +-5 +634 +22 +-1665 +-4019 +-6026 +-6810 +-107 +-128 +-4069 +-26 +-8 +-112 +-94 +-99 +-91 +-37 +-9095 +-6 +-44 +-10885 +-13015 +-14255 +-8 +-13550 +-52 +-51 +-43 +-9637 +-9888 +-10226 +-10212 +-9875 +-123 +-8655 +-87 +-7570 +-56 +-27 +-6617 +-5 +-90 +-5585 +-30 +-5580 +-43 +-4579 +-12 +-95 +-765 +-33 +-68 +3592 +2174 +-72 +-70 +-118 +-74 +1604 +4447 +6714 +-70 +-63 +-41 +6434 +3659 +818 +-17 +535 +-117 +6927 +-13 +-7 +12640 +-57 +9509 +6473 +3381 +1297 +-27 +-95 +-46 +6926 +8312 +-89 +-4 +11099 +-70 +-38 +-63 +5644 +-66 +-6 +-88 +-92 +888 +522 +-114 +-34 +4409 +-8 +8556 +10253 +-74 +-20 +-20 +8519 +-37 +113 +-4022 +-113 +-8354 +-7911 +-39 +-2732 +-75 +5205 +-83 +-53 +13114 +14371 +14638 +13629 +-100 +9580 +-38 +6661 +5659 +4721 +3866 +3185 +2583 +1636 +-6 +-3490 +-98 +-125 +-15561 +-17620 +-18659 +-75 +-19868 +-20177 +-19602 +-17812 +-11 +-54 +-57 +-111 +-6044 +-3 +-6394 +-7041 +-74 +-10937 +-14077 +-17541 +-43 +-23217 +-1 +-53 +-25516 +-26035 +-47 +-24716 +-21148 +-16301 +-91 +-8913 +-7145 +-29 +-3800 +-1411 +-15 +-88 +5498 +6227 +-61 +-56 +-123 +-30 +-83 +-27 +12051 +11388 +-33 +-54 +10530 +-82 +11552 +-18 +-20 +-5 +-16 +12296 +-9 +-26 +14917 +15204 +-5 +16235 +-76 +16137 +15227 +14632 +-66 +15227 +-56 +13824 +12041 +-33 +-27 +9022 +-101 +9317 +-61 +-38 +6985 +4890 +2676 +1323 +1287 +-16 +2664 +-90 +-118 +-2 +-3471 +-12 +-52 +-4827 +-2978 +-35 +-78 +-5799 +-62 +-10891 +-47 +-10958 +-30 +-25 +-8445 +-9199 +-10724 +-35 +-76 +-13732 +-13468 +-12701 +-11741 +-73 +-10895 +-10900 +-17 +-10434 +-54 +-2 +-43 +-9205 +-8632 +-7910 +-7325 +-7050 +-6850 +-6364 +-51 +-15 +-5824 +-43 +-102 +-6641 +-4325 +-957 +1870 +-120 +2354 +-64 +-439 +-6 +-2252 +-2200 +-912 +1662 +4904 +7772 +9248 +8784 +-29 +3888 +-66 +524 +261 +-5 +3959 +7784 +-48 +-77 +-4 +10075 +-41 +-99 +-33 +2383 +2054 +2895 +-65 +-28 +-11 +-120 +-27 +10015 +-92 +-124 +8194 +7176 +5732 +4120 +2640 +-37 +830 +-115 +-118 +1654 +-112 +5717 +-40 +-7 +12870 +13133 +11868 +8973 +4687 +-26 +-115 +-33 +-7378 +-98 +-5631 +-31 +-196 +-10 +-99 +-78 +-100 +13334 +13413 +-36 +-123 +10619 +8523 +-95 +5453 +-30 +-77 +-19 +5469 +-62 +-227 +-4046 +-7313 +-9911 +-43 +-14989 +-116 +-57 +-83 +-50 +-19349 +-17106 +-14525 +-76 +-10221 +-8700 +-7056 +-5371 +-4566 +-5599 +-8334 +-51 +-113 +-16076 +-17815 +-67 +-22920 +-27 +-27832 +-104 +-25 +-23495 +-128 +-17063 +-14791 +-46 +-10471 +-7409 +-17 +-1243 +773 +-85 +-58 +3638 +4888 +-90 +8485 +-112 +-63 +10856 +10363 +-22 +-20 +-94 +11584 +-78 +-64 +-49 +11609 +-25 +-23 +-71 +-76 +-33 +15378 +-114 +-22 +15417 +15228 +15444 +15885 +16229 +-117 +15939 +-91 +13347 +-50 +10283 +-83 +-103 +11077 +-75 +-1 +8205 +5898 +-108 +-27 +-42 +-93 +4883 +-109 +-17 +-54 +-3207 +-4312 +-61 +-5 +-1452 +-1512 +-2965 +-5276 +-7609 +-55 +-9942 +-9688 +-6 +-8400 +-8417 +-9167 +-10478 +-10 +-12536 +-12757 +-38 +-92 +-12756 +-37 +-11740 +-11246 +-10996 +-3 +-11 +-10670 +-9945 +-59 +-9157 +-60 +-81 +-5 +-6539 +-5046 +-45 +-6068 +-36 +-8856 +-79 +-7382 +-34 +-2773 +-646 +1101 +-101 +2079 +-80 +-2010 +-118 +-3579 +-1931 +344 +2885 +5672 +8059 +8983 +-18 +-39 +2368 +-69 +-454 +616 +-71 +5901 +8507 +-112 +-127 +11322 +10043 +-107 +-67 +-25 +2379 +2629 +-13 +5462 +6923 +7991 +-51 +9802 +10338 +-47 +-18 +8450 +7424 +-98 +4942 +3403 +-124 +792 +115 +-16 +-72 +2599 +-12 +-83 +-62 +-97 +-51 +-114 +-36 +-70 +1099 +-2454 +-11 +-7089 +-21 +-5792 +-34 +-391 +2683 +-21 +-35 +11024 +13129 +14116 +-105 +11381 +-32 +-94 +-73 +7705 +-4 +7959 +6982 +5382 +3178 +-69 +-1685 +-66 +-117 +-11154 +-15087 +-18073 +-61 +-19616 +-19182 +-18841 +-18320 +-16839 +-45 +-7 +-51 +-5864 +-55 +-6131 +-7318 +-9 +-9471 +-27 +-13030 +-72 +-13 +-24061 +-26289 +-24 +-26271 +-25079 +-23696 +-38 +-83 +-21 +-14764 +-11174 +-81 +-87 +-5 +-98 +-17 +828 +-125 +-33 +-71 +-68 +8740 +9576 +10247 +10524 +-53 +-38 +-75 +11603 +11808 +11352 +-28 +-8 +10752 +-104 +12401 +-31 +-57 +-9 +-56 +14676 +14657 +-49 +-111 +17005 +17240 +16902 +15895 +-66 +-89 +11277 +11284 +-122 +-31 +-102 +-57 +-83 +6267 +4715 +-9 +5484 +6401 +-54 +-4 +2403 +-38 +-1685 +-2262 +-1921 +-73 +-458 +-721 +-97 +-4294 +-6331 +-7603 +-88 +-7 +-110 +-7936 +-22 +-9092 +-118 +-10169 +-11149 +-41 +-13023 +-89 +-30 +-12008 +-12259 +-95 +-12489 +-118 +-32 +-63 +-9879 +-23 +-11739 +-93 +-9971 +-81 +-110 +-5821 +-119 +-77 +-7393 +-71 +-9883 +-9657 +-109 +-61 +-7 +115 +-16 +1291 +265 +-1453 +-3229 +-35 +-4254 +-101 +-128 +-75 +7212 +8224 +-118 +5700 +3359 +1365 +267 +-45 +-101 +3170 +5951 +8807 +10833 +11368 +-71 +-50 +-71 +-75 +-67 +-99 +3192 +3911 +-6 +6486 +-117 +-22 +-16 +-126 +-68 +9788 +8983 +8029 +-55 +-85 +-102 +2346 +103 +-34 +-1221 +-90 +3183 +6453 +9588 +12058 +-64 +13607 +-72 +-35 +-44 +1299 +-108 +-93 +-5586 +-5769 +-5583 +-11 +-109 +-37 +4967 +-15 +11381 +12575 +12318 +11085 +-85 +8822 +-66 +9308 +9282 +8538 +7519 +-97 +6445 +5707 +-69 +517 +-112 +-7329 +-68 +-13050 +-85 +-17328 +-87 +-70 +-110 +-98 +-23 +-12935 +-10485 +-9114 +-8335 +-103 +-6556 +-5846 +-64 +-7162 +-60 +-12943 +-16874 +-20408 +-22783 +-24004 +-123 +-16 +-52 +-25815 +-111 +-63 +-32 +-82 +-95 +-9966 +-7820 +-40 +-3722 +-2030 +-36 +1829 +4127 +-95 +7285 +7996 +8541 +-103 +-56 +10267 +-13 +11606 +-124 +11032 +-11 +9843 +10103 +10876 +11873 +12817 +-53 +13863 +13886 +-51 +13877 +14600 +15956 +-21 +-39 +17729 +16215 +-105 +-96 +12372 +-52 +-83 +14920 +13865 +-56 +-110 +7535 +6734 +7002 +7749 +-84 +7456 +5736 +3399 +1149 +-30 +-22 +96 +-3 +-114 +-420 +-76 +-18 +-12 +-127 +-6400 +-7119 +-88 +-7122 +-7132 +-7600 +-8628 +-28 +-114 +-114 +-30 +-59 +-54 +-13494 +-14045 +-13218 +-11750 +-10726 +-26 +-58 +-11250 +-11755 +-127 +-27 +-11144 +-9469 +-49 +-5876 +-17 +-93 +-7846 +-9390 +-70 +-10380 +-9463 +-115 +-4838 +-126 +-108 +1337 +627 +-98 +-3780 +-76 +-113 +-114 +-1 +-33 +-88 +6517 +7224 +-60 +-107 +2379 +373 +-506 +43 +1803 +-125 +6699 +-20 +-79 +10262 +-30 +-88 +6722 +-84 +-75 +3651 +3427 +-63 +-58 +-61 +-43 +-47 +9277 +-114 +9566 +-95 +10060 +9800 +8750 +-9 +3847 +-37 +-461 +-81 +-57 +351 +2605 +5918 +-49 +-72 +14097 +13607 +-109 +-34 +5899 +-17 +-187 +-56 +-5094 +-4 +-118 +-5597 +-59 +-6 +-36 +-64 +9259 +-78 +10031 +10537 +-8 +10306 +-61 +-116 +8274 +8575 +-56 +-98 +-102 +-61 +-96 +835 +-128 +-46 +-100 +-41 +-14833 +-17882 +-19689 +-61 +-19141 +-17545 +-15763 +-99 +-49 +-11449 +-121 +-72 +-5034 +-4045 +-71 +-7397 +-10386 +-12992 +-28 +-17387 +-20098 +-94 +-25016 +-45 +-36 +-10 +-83 +-22014 +-19130 +-16348 +-69 +-11703 +-9704 +-7819 +-5 +-3731 +-1 +-78 +-43 +4719 +5643 +6445 +7452 +-29 +9836 +-91 +11084 +11107 +-47 +10077 +-84 +-18 +10307 +-4 +-1 +-89 +12906 +-10 +11886 +-51 +14180 +-79 +-48 +-29 +-35 +15443 +-84 +-64 +14112 +15204 +15899 +15685 +-111 +-66 +-33 +-125 +-124 +9221 +10108 +-102 +-67 +-128 +-77 +-17 +-68 +-123 +-2 +1292 +-73 +-108 +-44 +-953 +-116 +-4840 +-5626 +-5279 +-17 +-5373 +-6654 +-1 +-8605 +-8683 +-8675 +-9099 +-106 +-74 +-12420 +-49 +-1 +-13006 +-12204 +-11172 +-10415 +-10438 +-40 +-12478 +-128 +-12985 +-11926 +-23 +-8392 +-6837 +-6045 +-6 +-114 +-24 +-10158 +-11482 +-68 +-9929 +-6804 +-4 +-738 +341 +-92 +-62 +-3501 +-5059 +-123 +-5291 +-3505 +-71 +-106 +-35 +-31 +6414 +-95 +3100 +-33 +-103 +-30 +299 +-39 +4617 +-30 +-115 +9026 +-48 +-58 +8218 +-111 +5239 +3917 +-99 +3445 +4440 +5633 +6422 +6779 +7173 +8036 +-108 +10615 +-87 +-79 +-128 +-126 +-3 +-31 +-20 +-29 +-1965 +-69 +269 +-42 +-123 +-10 +12092 +12846 +-14 +-120 +10349 +8243 +4945 +-122 +-3556 +-6312 +-108 +-72 +-3776 +-1162 +1284 +3386 +5401 +-128 +9514 +10615 +10499 +9560 +-28 +8533 +-78 +-60 +10282 +-7 +-37 +-17 +-89 +5748 +3882 +-3 +-2179 +-6387 +-69 +-22 +-60 +-35 +-17552 +-125 +-17917 +-23 +-75 +-107 +-11140 +-8443 +-104 +-5 +-13 +-117 +-122 +-56 +-118 +-59 +-76 +-19188 +-21988 +-24253 +-25755 +-26365 +-126 +-24535 +-22251 +-69 +-17637 +-15796 +-116 +-120 +-121 +-7042 +-123 +-124 +-241 +1375 +2833 +-88 +5682 +7035 +-54 +-11 +-103 +10788 +-82 +9334 +8968 +-92 +-66 +11628 +12297 +-95 +10879 +-114 +10509 +12036 +14090 +15958 +-8 +-104 +-43 +-60 +-104 +13949 +-108 +16646 +17187 +16480 +14693 +-78 +10757 +10291 +10801 +11270 +-16 +-97 +-5 +8207 +6768 +-25 +-53 +2123 +2370 +3086 +-75 +2357 +-58 +-928 +-1965 +-123 +-2790 +-119 +-11 +-125 +-63 +-6541 +-95 +-101 +-8 +-7809 +-27 +-10182 +-11741 +-53 +-13205 +-12750 +-11731 +-10697 +-79 +-42 +-11691 +-12488 +-13015 +-123 +-30 +-27 +-110 +-31 +-6090 +-5348 +-40 +-15 +-10480 +-6 +-12210 +-10899 +-125 +-5827 +-50 +-41 +-83 +-1190 +-37 +-5098 +-6316 +-6364 +-82 +-92 +-99 +3189 +-84 +5985 +-73 +3705 +1848 +378 +-51 +-97 +889 +2317 +-122 +-63 +7738 +-15 +9541 +-83 +7037 +-9 +-21 +-18 +4466 +-49 +-92 +-66 +5133 +5937 +-2 +8039 +9294 +10562 +-12 +11779 +-21 +9794 +7273 +3859 +-35 +-117 +-96 +-30 +1565 +-63 +5895 +8022 +-9 +12361 +13883 +-100 +12059 +-112 +3848 +-163 +-93 +-16 +-113 +-5013 +-4340 +-99 +-50 +-110 +-19 +-63 +8203 +8496 +-70 +8809 +9063 +9473 +-6 +-46 +9797 +-94 +-62 +-108 +9740 +8814 +-88 +-67 +-72 +-21 +-9129 +-9 +-13741 +-15823 +-17555 +-41 +-97 +-28 +-16334 +-110 +-11502 +-53 +-7371 +-95 +-5316 +-77 +-124 +-7586 +-9418 +-73 +-14831 +-18110 +-21241 +-23776 +-25336 +-100 +-25068 +-23973 +-22745 +-59 +-104 +-17574 +-109 +-13230 +-29 +-37 +-5825 +-3733 +-1947 +-410 +1026 +-123 +4872 +7281 +-98 +-39 +-35 +8511 +-52 +-47 +-127 +-54 +-33 +-86 +-58 +-36 +-116 +-38 +-123 +-110 +-35 +-32 +-36 +-3 +13419 +13626 +-33 +16655 +-72 +16946 +-120 +-114 +-81 +12921 +11850 +-79 +11303 +-62 +12334 +11579 +-74 +-111 +-107 +4706 +-93 +4403 +4115 +3606 +-3 +-23 +-20 +-26 +-662 +-100 +-2213 +-98 +-4254 +-122 +-5789 +-5836 +-5628 +-5590 +-49 +-7639 +-31 +-80 +-11993 +-12215 +-11960 +-11506 +-58 +-10727 +-97 +-107 +-11721 +-13054 +-122 +-14311 +-13030 +-81 +-85 +-118 +-37 +-31 +-116 +-9620 +-47 +-9 +-99 +-10375 +-99 +-4994 +-78 +-28 +-92 +-104 +-4531 +-98 +-7149 +-96 +-60 +-2026 +1131 +-58 +-10 +-51 +-126 +3091 +1905 +530 +-60 +-29 +-18 +2327 +4699 +-68 +7703 +-38 +-105 +-121 +6761 +-115 +-116 +-40 +-63 +-47 +3917 +4219 +4686 +5156 +-45 +-68 +9031 +-28 +12927 +-18 +-107 +-112 +5703 +-61 +-97 +-93 +-78 +-164 +-99 +-29 +4195 +-82 +-69 +-17 +-31 +13141 +-38 +8275 +5133 +1662 +-32 +-54 +-5105 +-123 +-4277 +-2257 +374 +2842 +-83 +-25 +5957 +7007 +8491 +-45 +-43 +9328 +8553 +-84 +9026 +10274 +-62 +11849 +-39 +-124 +5902 +-28 +-211 +-3230 +-6397 +-119 +-46 +-100 +-98 +-21 +-18660 +-25 +-106 +-14480 +-119 +-9916 +-8131 +-6824 +-5814 +-2 +-5075 +-6069 +-8136 +-10978 +-110 +-21 +-51 +-109 +-23724 +-24505 +-24742 +-24286 +-23271 +-82 +-20937 +-19397 +-123 +-14052 +-11257 +-9128 +-7589 +-97 +-67 +-45 +68 +-52 +-65 +-92 +7498 +-69 +7247 +7551 +8483 +9984 +-5 +-89 +-74 +9589 +-65 +-106 +9045 +-64 +-85 +14342 +14199 +-58 +13643 +13924 +14339 +-90 +15470 +-66 +17434 +-119 +-42 +14425 +-27 +12390 +12565 +13090 +13399 +13093 +12099 +10600 +8994 +-36 +6686 +-92 +-48 +-20 +4443 +-6 +-128 +-19 +1641 +-43 +-52 +-70 +-2452 +-35 +-36 +-22 +-65 +-82 +-55 +-98 +-39 +-7902 +-9199 +-85 +-11698 +-40 +-33 +-96 +-9866 +-61 +-10449 +-11680 +-77 +-14310 +-98 +-101 +-69 +-52 +-7666 +-6317 +-6058 +-115 +-8914 +-10936 +-12273 +-12502 +-82 +-9701 +-7054 +-4270 +-122 +-1494 +-2446 +-85 +-6364 +-7300 +-74 +-121 +-4024 +-124 +-1 +2828 +-6 +4653 +3888 +-102 +822 +-15 +-40 +-473 +1072 +-87 +4681 +5916 +6758 +-113 +7533 +-82 +6781 +-60 +5494 +5140 +4979 +-97 +-126 +3369 +-75 +3151 +4977 +-93 +10818 +12847 +-109 +-9 +-42 +8500 +-14 +4944 +-61 +102 +-1456 +-1669 +-496 +-20 +-94 +8061 +-5 +-128 +-10 +13071 +-79 +-39 +6181 +-93 +-20 +-4006 +-41 +-61 +-56 +-1415 +-432 +604 +-12 +-80 +6249 +8001 +-7 +-41 +7771 +7497 +7941 +9014 +10353 +-8 +12062 +11807 +10860 +-71 +7440 +4891 +1911 +-1230 +-73 +-111 +-4 +-39 +-16590 +-118 +-18062 +-17542 +-16370 +-25 +-13272 +-11456 +-45 +-28 +-43 +-76 +-75 +-45 +-7419 +-41 +-13238 +-27 +-48 +-125 +-22179 +-82 +-20 +-32 +-24475 +-23749 +-21959 +-19403 +-93 +-14541 +-12981 +-11713 +-69 +-85 +-32 +-50 +277 +3167 +-48 +-13 +4690 +4714 +-32 +-27 +11049 +-109 +-114 +-65 +8518 +-11 +8528 +9289 +10314 +11538 +-115 +13348 +13356 +-88 +-92 +-23 +14097 +-40 +-49 +-42 +16963 +15906 +-88 +-115 +13630 +13694 +-112 +14084 +-98 +12850 +-100 +-38 +-59 +-86 +7970 +7198 +-54 +-40 +3903 +3676 +3891 +3860 +-25 +1539 +-132 +-1511 +-2478 +-79 +-3566 +-75 +-3480 +-55 +-3767 +-4758 +-84 +-60 +-3 +-10975 +-122 +-10978 +-10137 +-9409 +-9215 +-27 +-11007 +-12721 +-14321 +-14 +-106 +-66 +-10923 +-84 +-84 +-6546 +-66 +-7842 +-98 +-12025 +-9 +-97 +-10881 +-8134 +-5596 +-3819 +-3005 +-66 +-4036 +-5342 +-6552 +-68 +-7159 +-59 +-4352 +-1777 +-21 +3194 +4207 +-113 +2853 +1344 +59 +-37 +-448 +-93 +-101 +2592 +4222 +5709 +6718 +-97 +-102 +-109 +-110 +-42 +6969 +7037 +5913 +-31 +1844 +-94 +-113 +-65 +-51 +-93 +-28 +-91 +12136 +12148 +-121 +-7 +-53 +5127 +2061 +-490 +-1726 +-1450 +-64 +1911 +-107 +6923 +9826 +-73 +14165 +-106 +12369 +8982 +-16 +1823 +-105 +-106 +-2464 +-3051 +-3320 +-3051 +-1989 +-45 +2407 +-8 +5937 +6443 +-118 +-49 +-104 +7243 +-104 +9308 +10529 +-128 +11822 +11827 +11318 +-39 +-111 +6665 +-94 +1033 +-102 +-6898 +-29 +-81 +-53 +-33 +-17333 +-104 +-50 +-15760 +-14080 +-11980 +-9613 +-107 +-5325 +-4057 +-15 +-5020 +-7336 +-70 +-1 +-78 +-16629 +-18619 +-20721 +-22731 +-24238 +-79 +-98 +-7 +-21639 +-87 +-41 +-109 +-15579 +-14994 +-13048 +-18 +-5313 +-1964 +-185 +-101 +835 +1902 +3711 +-27 +-54 +-78 +-37 +10256 +-13 +-77 +-41 +7960 +-126 +9810 +11109 +-94 +12123 +11879 +11595 +-71 +-98 +-90 +15166 +16242 +16683 +16496 +15877 +-3 +-71 +14426 +-104 +-41 +14876 +-31 +-70 +-9 +12037 +11783 +-31 +9554 +-4 +-46 +-94 +5390 +5228 +-2 +-38 +4151 +-6 +-84 +-28 +-1235 +-114 +-3026 +-3000 +-47 +-2276 +-85 +-3213 +-108 +-6556 +-8406 +-9946 +-39 +-10653 +-9691 +-8634 +-8340 +-9122 +-122 +-12252 +-121 +-14743 +-67 +-19 +-48 +-36 +-7843 +-59 +-80 +-81 +-61 +-17 +-12960 +-92 +-11704 +-82 +-7662 +-68 +-4296 +-72 +-3785 +-5 +-76 +-7372 +-8170 +-123 +-27 +-110 +-1019 +-38 +-125 +3192 +2915 +-100 +1304 +295 +-111 +-967 +-2 +-23 +3628 +-42 +-8 +4967 +4881 +5679 +7031 +-86 +8289 +7508 +6015 +4198 +2577 +-88 +1900 +-74 +4468 +5953 +7509 +9300 +-87 +12670 +-106 +12398 +10284 +7426 +-6 +2330 +631 +-679 +-1457 +-1213 +-59 +3432 +-20 +-35 +13180 +13875 +12836 +10788 +8549 +-25 +-23 +1593 +-745 +-20 +-126 +-89 +-30 +-1433 +-8 +-116 +-103 +4429 +-106 +-115 +5420 +5911 +6924 +8258 +-73 +10092 +10590 +-99 +-53 +-103 +11530 +10338 +8235 +-17 +2051 +-1420 +-63 +-124 +-68 +-13726 +-79 +-16560 +-56 +-17350 +-16770 +-105 +-107 +-114 +-6823 +-5043 +-51 +-33 +-5529 +-89 +-8921 +-10943 +-12800 +-79 +-118 +-41 +-23034 +-59 +-15 +-9 +-21474 +-20397 +-38 +-20406 +-19860 +-18061 +-65 +-94 +-8884 +-6541 +-4764 +-4 +-2018 +-33 +1316 +-27 +5889 +-56 +-86 +-3 +9031 +8265 +7752 +-17 +8727 +9770 +10586 +-69 +-91 +-19 +10588 +10756 +11528 +-99 +14600 +-125 +15947 +15448 +-128 +-93 +15408 +15726 +15689 +-100 +14626 +14105 +13876 +13835 +13673 +13145 +-113 +10878 +-17 +-32 +-3 +6489 +-58 +5948 +5932 +5675 +-26 +3398 +-119 +56 +-1222 +-24 +-114 +-119 +-1487 +-987 +-1425 +-3045 +-5280 +-7331 +-40 +-9460 +-79 +-9156 +-92 +-121 +-8101 +-18 +-10712 +-12934 +-78 +-55 +-15519 +-13807 +-90 +-8922 +-103 +-6 +-7817 +-9420 +-39 +-12238 +-12780 +-12538 +-11459 +-9685 +-7555 +-5557 +-62 +-3739 +-51 +-5882 +-102 +-74 +-8368 +-16 +-5513 +-126 +-1759 +-104 +2410 +3451 +-103 +1341 +-77 +-68 +-733 +311 +-42 +2407 +2887 +-47 +-91 +-116 +-23 +6965 +8195 +8565 +7940 +-62 +-50 +3872 +3148 +2656 +-59 +-88 +-3 +4961 +7466 +-22 +11897 +12880 +-32 +11782 +10358 +-53 +-37 +3397 +325 +-83 +-2467 +-24 +-24 +-97 +7688 +-83 +11613 +-86 +-79 +11607 +-115 +7730 +-5 +2053 +-396 +-21 +-107 +-119 +-2458 +-924 +612 +-38 +2430 +2870 +3380 +4129 +-53 +5988 +6736 +-31 +-42 +-114 +-37 +11287 +12087 +12383 +12090 +-91 +-2 +-65 +-126 +-169 +-3493 +-6353 +-68 +-39 +-14539 +-20 +-90 +-17808 +-92 +-15323 +-12776 +-4 +-126 +-126 +-5285 +-5807 +-6294 +-37 +-56 +-46 +-10733 +-14539 +-66 +-45 +-104 +-21927 +-21715 +-2 +-22147 +-46 +-84 +-21893 +-41 +-1 +-15251 +-84 +-83 +-39 +-7053 +-91 +-4074 +-2 +-10 +-32 +5962 +7227 +7788 +-57 +-8 +7463 +-6 +8525 +-42 +10518 +10590 +9995 +9324 +9229 +9999 +11350 +-98 +13630 +14081 +-52 +-81 +14890 +15391 +-99 +-44 +-55 +15181 +14919 +-34 +-77 +14655 +14450 +14178 +13660 +12616 +11093 +9543 +-46 +7735 +-107 +7011 +-56 +-108 +6484 +5465 +3679 +1537 +-57 +-71 +-1450 +-930 +-100 +-216 +-680 +-1726 +-3304 +-121 +-7131 +-46 +-87 +-74 +-7 +-7045 +-54 +-34 +-9389 +-11997 +-72 +-15802 +-15799 +-14546 +-12518 +-97 +-8607 +-81 +-7887 +-61 +-55 +-11428 +-12684 +-123 +-73 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a3_220_000.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a3_220_000.samples new file mode 100644 index 00000000..2b228435 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a3_220_000.samples @@ -0,0 +1,4096 @@ +-587 +-693 +-768 +-816 +-862 +-915 +-960 +-985 +-986 +-987 +-1013 +-1053 +-1080 +-1089 +-1083 +-1049 +-952 +-793 +-627 +-524 +-509 +-585 +-747 +-975 +-1229 +-1465 +-1632 +-1675 +-1574 +-1341 +-1042 +-764 +-559 +-451 +-467 +-594 +-785 +-969 +-1081 +-1103 +-1045 +-925 +-803 +-714 +-682 +-723 +-883 +-1193 +-1643 +-2147 +-2589 +-2847 +-2764 +-2286 +-1527 +-738 +-94 +374 +723 +996 +1202 +1337 +1384 +1375 +1365 +1393 +1455 +1516 +1560 +1591 +1606 +1590 +1490 +1277 +932 +483 +53 +-237 +-365 +-408 +-461 +-578 +-694 +-725 +-624 +-426 +-218 +-55 +69 +194 +343 +521 +717 +921 +1126 +1313 +1429 +1453 +1399 +1326 +1301 +1313 +1296 +1203 +1087 +1007 +959 +903 +812 +656 +458 +276 +158 +146 +198 +239 +221 +145 +5 +-204 +-398 +-499 +-528 +-501 +-371 +-91 +312 +754 +1154 +1500 +1778 +1981 +2103 +2135 +2077 +1942 +1803 +1731 +1749 +1796 +1807 +1764 +1683 +1560 +1395 +1220 +1043 +880 +720 +548 +336 +73 +-204 +-439 +-622 +-768 +-859 +-843 +-693 +-453 +-181 +40 +154 +145 +58 +-33 +-98 +-137 +-155 +-133 +-32 +155 +355 +484 +512 +455 +336 +185 +18 +-158 +-313 +-436 +-564 +-721 +-914 +-1118 +-1255 +-1298 +-1257 +-1152 +-988 +-770 +-529 +-322 +-206 +-192 +-250 +-346 +-468 +-609 +-758 +-891 +-981 +-1019 +-1028 +-1040 +-1066 +-1091 +-1082 +-1037 +-987 +-954 +-932 +-916 +-901 +-876 +-816 +-697 +-541 +-403 +-328 +-331 +-421 +-594 +-823 +-1073 +-1295 +-1443 +-1473 +-1372 +-1157 +-897 +-660 +-486 +-427 +-497 +-664 +-873 +-1044 +-1128 +-1132 +-1069 +-963 +-855 +-770 +-735 +-791 +-989 +-1347 +-1811 +-2282 +-2641 +-2746 +-2474 +-1841 +-1027 +-263 +326 +749 +1053 +1262 +1394 +1431 +1393 +1336 +1313 +1338 +1382 +1421 +1444 +1455 +1439 +1369 +1189 +873 +447 +-9 +-369 +-555 +-607 +-627 +-685 +-782 +-833 +-790 +-640 +-437 +-244 +-70 +98 +287 +496 +720 +950 +1183 +1396 +1549 +1604 +1564 +1484 +1442 +1460 +1476 +1427 +1316 +1219 +1153 +1079 +972 +803 +580 +375 +232 +180 +208 +252 +264 +216 +104 +-88 +-337 +-530 +-616 +-609 +-500 +-266 +95 +520 +933 +1308 +1629 +1875 +2039 +2113 +2100 +2013 +1882 +1781 +1757 +1787 +1810 +1784 +1718 +1613 +1457 +1270 +1083 +906 +742 +569 +361 +98 +-206 +-489 +-714 +-891 +-1024 +-1081 +-1007 +-801 +-518 +-239 +-43 +29 +-6 +-77 +-138 +-170 +-179 +-159 +-71 +119 +376 +599 +714 +715 +631 +500 +351 +178 +-7 +-179 +-327 +-476 +-639 +-834 +-1033 +-1178 +-1245 +-1227 +-1131 +-977 +-788 +-613 +-493 +-445 +-468 +-534 +-645 +-794 +-959 +-1110 +-1215 +-1260 +-1262 +-1265 +-1270 +-1258 +-1212 +-1125 +-1038 +-975 +-940 +-906 +-856 +-799 +-728 +-614 +-443 +-259 +-125 +-80 +-135 +-285 +-506 +-759 +-1009 +-1207 +-1309 +-1281 +-1116 +-871 +-630 +-455 +-388 +-448 +-617 +-838 +-1046 +-1183 +-1230 +-1191 +-1079 +-938 +-808 +-720 +-709 +-809 +-1055 +-1428 +-1861 +-2259 +-2505 +-2462 +-2049 +-1350 +-583 +68 +536 +859 +1090 +1249 +1345 +1377 +1351 +1312 +1295 +1298 +1307 +1298 +1277 +1247 +1185 +1056 +833 +511 +109 +-282 +-562 +-692 +-733 +-766 +-843 +-924 +-933 +-828 +-620 +-373 +-145 +57 +251 +454 +674 +900 +1131 +1346 +1535 +1676 +1728 +1708 +1665 +1653 +1672 +1653 +1548 +1408 +1289 +1188 +1090 +968 +798 +595 +407 +269 +216 +226 +237 +208 +120 +-31 +-240 +-439 +-543 +-549 +-498 +-370 +-122 +241 +654 +1055 +1419 +1719 +1937 +2073 +2132 +2117 +2022 +1895 +1809 +1796 +1817 +1820 +1775 +1692 +1560 +1385 +1187 +994 +805 +615 +410 +171 +-112 +-410 +-665 +-861 +-1021 +-1131 +-1139 +-1019 +-788 +-508 +-261 +-107 +-65 +-94 +-130 +-149 +-143 +-115 +-47 +95 +320 +558 +729 +790 +764 +677 +559 +416 +239 +70 +-73 +-209 +-372 +-590 +-843 +-1067 +-1201 +-1238 +-1199 +-1106 +-974 +-816 +-670 +-578 +-572 +-645 +-769 +-917 +-1070 +-1210 +-1315 +-1382 +-1403 +-1393 +-1375 +-1346 +-1309 +-1248 +-1163 +-1077 +-1001 +-926 +-845 +-770 +-697 +-601 +-455 +-275 +-119 +-39 +-56 +-155 +-318 +-524 +-745 +-958 +-1116 +-1185 +-1133 +-983 +-795 +-631 +-527 +-498 +-572 +-731 +-926 +-1091 +-1175 +-1175 +-1107 +-1004 +-909 +-838 +-799 +-812 +-927 +-1176 +-1533 +-1923 +-2247 +-2389 +-2217 +-1706 +-1002 +-304 +249 +651 +939 +1150 +1282 +1339 +1318 +1249 +1190 +1167 +1167 +1170 +1179 +1177 +1166 +1104 +944 +677 +297 +-136 +-506 +-722 +-801 +-817 +-850 +-912 +-939 +-869 +-697 +-468 +-249 +-66 +102 +287 +505 +746 +999 +1246 +1473 +1659 +1762 +1765 +1716 +1667 +1665 +1681 +1635 +1520 +1392 +1297 +1224 +1134 +988 +771 +532 +332 +213 +198 +232 +243 +208 +110 +-49 +-257 +-437 +-537 +-566 +-513 +-333 +-7 +415 +844 +1234 +1573 +1838 +2023 +2119 +2127 +2046 +1908 +1785 +1737 +1763 +1807 +1807 +1750 +1651 +1509 +1336 +1136 +936 +735 +529 +311 +59 +-227 +-505 +-738 +-920 +-1067 +-1143 +-1096 +-929 +-678 +-407 +-185 +-57 +-30 +-67 +-99 +-121 +-122 +-98 +-29 +125 +357 +586 +740 +791 +755 +661 +532 +371 +186 +12 +-145 +-306 +-496 +-712 +-922 +-1076 +-1152 +-1158 +-1105 +-994 +-846 +-692 +-578 +-544 +-583 +-662 +-763 +-889 +-1040 +-1190 +-1317 +-1384 +-1392 +-1383 +-1385 +-1388 +-1363 +-1284 +-1169 +-1060 +-979 +-911 +-842 +-772 +-699 +-601 +-457 +-288 +-149 +-79 +-98 +-204 +-392 +-626 +-877 +-1098 +-1240 +-1271 +-1175 +-984 +-763 +-573 +-457 +-461 +-585 +-793 +-1012 +-1164 +-1226 +-1206 +-1123 +-1005 +-889 +-796 +-755 +-819 +-1019 +-1358 +-1777 +-2175 +-2461 +-2494 +-2168 +-1524 +-760 +-85 +424 +783 +1041 +1212 +1301 +1315 +1282 +1247 +1250 +1279 +1303 +1320 +1327 +1321 +1280 +1158 +929 +600 +184 +-231 +-531 +-673 +-702 +-711 +-770 +-853 +-890 +-822 +-654 +-434 +-223 +-39 +139 +335 +550 +777 +1012 +1233 +1428 +1569 +1627 +1599 +1555 +1548 +1590 +1607 +1527 +1393 +1282 +1197 +1098 +970 +793 +581 +392 +271 +230 +258 +293 +281 +215 +83 +-140 +-394 +-557 +-600 +-567 +-454 +-214 +149 +566 +963 +1320 +1628 +1860 +2005 +2080 +2086 +2019 +1906 +1820 +1807 +1843 +1860 +1828 +1755 +1646 +1494 +1312 +1125 +942 +761 +573 +355 +88 +-210 +-478 +-687 +-857 +-992 +-1045 +-957 +-747 +-478 +-220 +-53 +-9 +-55 +-124 +-167 +-190 +-199 +-180 +-83 +127 +392 +601 +683 +647 +544 +411 +264 +90 +-91 +-228 +-340 +-461 +-628 +-844 +-1043 +-1170 +-1200 +-1150 +-1040 +-882 +-684 +-500 +-369 +-328 +-367 +-454 +-580 +-738 +-909 +-1045 +-1128 +-1159 +-1158 +-1167 +-1179 +-1181 +-1149 +-1084 +-1024 +-992 +-985 +-952 +-914 +-865 +-802 +-694 +-518 +-338 +-227 +-219 +-305 +-476 +-692 +-930 +-1161 +-1339 +-1411 +-1347 +-1155 +-897 +-671 +-524 +-474 +-537 +-702 +-920 +-1120 +-1232 +-1257 +-1199 +-1081 +-957 +-864 +-813 +-827 +-944 +-1205 +-1593 +-2028 +-2408 +-2622 +-2522 +-2033 +-1282 +-520 +84 +516 +837 +1079 +1259 +1384 +1439 +1441 +1437 +1454 +1478 +1494 +1511 +1536 +1551 +1515 +1383 +1149 +812 +383 +-31 +-315 +-443 +-496 +-557 +-681 +-794 +-811 +-696 +-483 +-269 +-97 +27 +165 +331 +509 +707 +913 +1126 +1326 +1463 +1489 +1430 +1364 +1342 +1362 +1327 +1197 +1057 +974 +919 +859 +759 +599 +406 +229 +125 +102 +145 +170 +148 +87 +-46 +-263 +-466 +-546 +-547 +-522 +-414 +-146 +255 +691 +1085 +1423 +1692 +1891 +2021 +2070 +2035 +1908 +1764 +1696 +1729 +1795 +1821 +1796 +1734 +1626 +1476 +1300 +1124 +961 +804 +635 +420 +141 +-154 +-396 +-580 +-737 +-847 +-843 +-706 +-480 +-231 +-29 +65 +38 +-62 +-165 +-232 +-271 +-294 +-284 +-186 +16 +233 +356 +367 +294 +173 +43 +-107 +-275 +-417 +-514 +-601 +-734 +-921 +-1131 +-1263 +-1274 +-1204 +-1083 +-924 +-695 +-428 +-188 +-47 +-37 +-105 +-205 +-319 +-453 +-609 +-745 +-829 +-862 +-871 +-910 +-974 +-1025 +-1032 +-997 +-967 +-960 +-967 +-957 +-948 +-946 +-918 +-824 +-668 +-540 +-486 +-515 +-615 +-775 +-977 +-1202 +-1413 +-1555 +-1577 +-1466 +-1236 +-968 +-733 +-554 +-487 +-548 +-720 +-936 +-1102 +-1172 +-1173 +-1108 +-1018 +-932 +-863 +-815 +-833 +-997 +-1322 +-1764 +-2214 +-2565 +-2705 +-2477 +-1866 +-1065 +-337 +213 +631 +955 +1193 +1346 +1428 +1449 +1456 +1501 +1578 +1643 +1699 +1764 +1824 +1858 +1808 +1640 +1362 +966 +507 +119 +-91 +-164 +-198 +-291 +-444 +-569 +-571 +-451 +-276 +-128 +-26 +70 +207 +367 +534 +714 +894 +1091 +1248 +1305 +1248 +1134 +1076 +1114 +1169 +1119 +975 +868 +841 +808 +732 +582 +361 +154 +18 +-28 +23 +86 +112 +112 +58 +-110 +-387 +-595 +-640 +-602 +-507 +-294 +64 +507 +919 +1272 +1577 +1809 +1958 +2028 +2026 +1941 +1795 +1679 +1682 +1768 +1832 +1817 +1771 +1696 +1569 +1411 +1240 +1073 +926 +792 +640 +427 +148 +-123 +-325 +-478 +-639 +-731 +-696 +-520 +-258 +0 +172 +189 +86 +-56 +-176 +-271 +-355 +-423 +-423 +-297 +-68 +125 +191 +143 +26 +-112 +-259 +-430 +-612 +-738 +-811 +-882 +-987 +-1143 +-1294 +-1360 +-1318 +-1199 +-1024 +-788 +-492 +-206 +9 +109 +110 +73 +14 +-102 +-266 +-429 +-553 +-611 +-632 +-671 +-759 +-854 +-907 +-884 +-845 +-863 +-921 +-972 +-986 +-995 +-1010 +-987 +-879 +-726 +-607 +-578 +-638 +-779 +-977 +-1203 +-1442 +-1651 +-1763 +-1718 +-1510 +-1202 +-906 +-687 +-555 +-548 +-662 +-857 +-1062 +-1189 +-1224 +-1181 +-1079 +-971 +-886 +-835 +-831 +-941 +-1205 +-1610 +-2070 +-2481 +-2755 +-2732 +-2291 +-1516 +-694 +-43 +405 +739 +1007 +1205 +1360 +1459 +1519 +1574 +1655 +1725 +1774 +1829 +1867 +1900 +1892 +1789 +1602 +1301 +892 +461 +162 +30 +-19 +-92 +-254 +-439 +-544 +-506 +-345 +-146 +2 +96 +190 +309 +447 +602 +752 +898 +1053 +1169 +1186 +1116 +1028 +1014 +1069 +1071 +958 +804 +728 +699 +639 +549 +392 +209 +65 +-20 +-23 +29 +60 +50 +4 +-122 +-358 +-597 +-681 +-633 +-560 +-429 +-163 +244 +681 +1067 +1429 +1726 +1922 +2042 +2093 +2069 +1948 +1789 +1708 +1744 +1821 +1857 +1829 +1778 +1695 +1569 +1411 +1236 +1071 +918 +776 +601 +347 +56 +-184 +-356 +-508 +-638 +-658 +-537 +-320 +-79 +127 +225 +176 +34 +-111 +-218 +-300 +-374 +-419 +-365 +-181 +31 +148 +135 +41 +-87 +-217 +-361 +-543 +-703 +-789 +-849 +-931 +-1080 +-1266 +-1398 +-1406 +-1309 +-1148 +-935 +-671 +-368 +-87 +108 +183 +162 +92 +-7 +-140 +-289 +-412 +-499 +-548 +-587 +-664 +-756 +-839 +-869 +-851 +-854 +-902 +-948 +-954 +-948 +-959 +-970 +-914 +-771 +-632 +-571 +-608 +-730 +-908 +-1113 +-1324 +-1531 +-1674 +-1711 +-1593 +-1340 +-1063 +-828 +-669 +-606 +-661 +-816 +-1021 +-1190 +-1255 +-1249 +-1177 +-1069 +-980 +-909 +-867 +-876 +-1021 +-1338 +-1777 +-2220 +-2596 +-2774 +-2597 +-2006 +-1192 +-439 +127 +545 +878 +1134 +1327 +1456 +1521 +1539 +1571 +1613 +1662 +1710 +1769 +1835 +1872 +1837 +1699 +1457 +1103 +645 +228 +-23 +-118 +-141 +-222 +-384 +-521 +-545 +-424 +-225 +-69 +16 +79 +184 +330 +493 +664 +839 +1026 +1199 +1299 +1265 +1150 +1053 +1063 +1104 +1051 +916 +792 +752 +730 +675 +565 +369 +156 +-8 +-74 +-36 +31 +60 +47 +-6 +-161 +-407 +-602 +-660 +-648 +-590 +-411 +-65 +398 +846 +1217 +1533 +1780 +1954 +2060 +2082 +2021 +1875 +1747 +1732 +1813 +1891 +1895 +1857 +1776 +1649 +1484 +1305 +1131 +974 +832 +677 +462 +178 +-107 +-317 +-476 +-631 +-741 +-725 +-574 +-329 +-71 +122 +181 +105 +-20 +-128 +-191 +-247 +-299 +-308 +-197 +26 +232 +327 +313 +221 +92 +-50 +-214 +-396 +-538 +-627 +-719 +-849 +-1040 +-1219 +-1303 +-1289 +-1208 +-1084 +-888 +-623 +-334 +-112 +-23 +-26 +-86 +-156 +-244 +-380 +-537 +-670 +-741 +-751 +-764 +-830 +-909 +-956 +-931 +-868 +-836 +-843 +-856 +-860 +-856 +-867 +-839 +-737 +-596 +-475 +-429 +-457 +-565 +-745 +-973 +-1213 +-1429 +-1560 +-1563 +-1422 +-1173 +-903 +-675 +-524 +-503 +-619 +-825 +-1051 +-1207 +-1275 +-1274 +-1200 +-1081 +-966 +-876 +-837 +-897 +-1116 +-1493 +-1939 +-2368 +-2685 +-2733 +-2368 +-1637 +-796 +-93 +411 +777 +1047 +1237 +1361 +1423 +1442 +1456 +1501 +1557 +1601 +1631 +1677 +1712 +1702 +1606 +1395 +1071 +642 +192 +-137 +-287 +-329 +-366 +-489 +-644 +-728 +-697 +-540 +-340 +-160 +-20 +115 +270 +439 +626 +827 +1032 +1227 +1360 +1379 +1300 +1212 +1200 +1258 +1278 +1178 +1022 +922 +869 +797 +684 +506 +290 +102 +-16 +-44 +1 +52 +52 +9 +-107 +-340 +-606 +-748 +-746 +-665 +-518 +-247 +149 +589 +996 +1353 +1652 +1858 +1986 +2049 +2051 +1973 +1855 +1786 +1807 +1877 +1916 +1888 +1821 +1701 +1527 +1327 +1131 +957 +793 +628 +428 +164 +-132 +-394 +-593 +-764 +-913 +-967 +-873 +-656 +-381 +-128 +27 +46 +-30 +-121 +-180 +-219 +-238 +-232 +-142 +71 +339 +529 +589 +545 +437 +305 +152 +-19 +-180 +-300 +-396 +-506 +-666 +-880 +-1068 +-1166 +-1176 +-1111 +-993 +-816 +-611 +-421 +-293 +-257 +-289 +-363 +-481 +-633 +-803 +-949 +-1034 +-1065 +-1064 +-1082 +-1120 +-1134 +-1096 +-1007 +-926 +-881 +-853 +-811 +-758 +-717 +-668 +-559 +-386 +-206 +-96 +-83 +-167 +-337 +-554 +-793 +-1027 +-1213 +-1300 +-1247 +-1059 +-807 +-591 +-461 +-437 +-533 +-711 +-927 +-1112 +-1218 +-1246 +-1199 +-1100 +-996 +-913 +-874 +-898 +-1028 +-1302 +-1696 +-2123 +-2482 +-2654 +-2489 +-1931 +-1132 +-350 +247 +668 +975 +1203 +1368 +1475 +1520 +1517 +1518 +1535 +1542 +1530 +1518 +1499 +1478 +1420 +1272 +1014 +637 +180 +-236 +-487 +-586 +-624 +-700 +-837 +-950 +-946 +-796 +-557 +-319 +-132 +17 +172 +353 +550 +762 +983 +1203 +1402 +1537 +1572 +1533 +1488 +1497 +1512 +1454 +1308 +1154 +1052 +972 +882 +756 +574 +358 +164 +37 +0 +19 +29 +-6 +-91 +-244 +-459 +-631 +-691 +-672 +-609 +-449 +-144 +277 +715 +1113 +1456 +1733 +1936 +2066 +2109 +2058 +1926 +1795 +1748 +1793 +1855 +1873 +1833 +1743 +1598 +1403 +1182 +965 +763 +564 +359 +112 +-178 +-469 +-704 +-889 +-1052 +-1157 +-1147 +-995 +-740 +-463 +-239 +-132 +-134 +-182 +-218 +-222 +-206 +-171 +-91 +84 +342 +594 +742 +780 +734 +637 +517 +356 +179 +22 +-97 +-221 +-394 +-622 +-873 +-1060 +-1142 +-1143 +-1085 +-983 +-836 +-663 +-523 +-465 +-510 +-620 +-752 +-888 +-1021 +-1143 +-1242 +-1295 +-1305 +-1290 +-1269 +-1253 +-1231 +-1173 +-1081 +-984 +-890 +-803 +-722 +-648 +-583 +-476 +-312 +-120 +35 +109 +99 +13 +-148 +-367 +-622 +-863 +-1031 +-1084 +-1013 +-848 +-660 +-501 +-400 +-399 +-511 +-723 +-962 +-1151 +-1246 +-1258 +-1203 +-1114 +-1025 +-945 +-885 +-895 +-1038 +-1342 +-1752 +-2165 +-2465 +-2507 +-2181 +-1530 +-752 +-56 +470 +862 +1155 +1363 +1482 +1516 +1475 +1413 +1386 +1387 +1395 +1390 +1376 +1358 +1328 +1233 +1032 +703 +259 +-217 +-578 +-758 +-808 +-833 +-910 +-1014 +-1058 +-982 +-795 +-552 +-332 +-140 +42 +243 +465 +701 +961 +1224 +1467 +1642 +1707 +1674 +1602 +1569 +1599 +1606 +1530 +1386 +1263 +1181 +1094 +970 +771 +510 +266 +90 +9 +16 +33 +16 +-41 +-148 +-323 +-536 +-697 +-750 +-718 +-577 +-292 +119 +573 +990 +1361 +1673 +1908 +2062 +2139 +2129 +2049 +1935 +1862 +1864 +1904 +1926 +1883 +1789 +1646 +1445 +1212 +975 +758 +563 +374 +159 +-104 +-402 +-678 +-894 +-1061 +-1195 +-1242 +-1163 +-960 +-688 +-415 +-217 +-133 +-137 +-169 +-181 +-180 +-158 +-107 +16 +243 +520 +756 +881 +894 +824 +707 +566 +399 +227 +75 +-67 +-228 +-427 +-658 +-882 +-1035 +-1114 +-1127 +-1072 +-959 +-807 +-667 +-587 +-588 +-652 +-753 +-873 +-1022 +-1179 +-1313 +-1399 +-1426 +-1420 +-1405 +-1397 +-1369 +-1295 +-1165 +-1021 +-903 +-813 +-737 +-667 +-593 +-509 +-381 +-207 +-25 +115 +172 +143 +16 +-182 +-427 +-686 +-904 +-1033 +-1032 +-907 +-709 +-510 +-368 +-323 +-404 +-594 +-839 +-1069 +-1223 +-1284 +-1259 +-1173 +-1065 +-967 +-893 +-874 +-958 +-1185 +-1543 +-1948 +-2302 +-2485 +-2355 +-1859 +-1111 +-343 +268 +691 +971 +1164 +1294 +1370 +1385 +1361 +1337 +1340 +1352 +1353 +1341 +1317 +1285 +1214 +1061 +806 +445 +14 +-378 +-629 +-733 +-764 +-818 +-924 +-1014 +-1018 +-896 +-678 +-437 +-218 +-26 +167 +368 +579 +806 +1047 +1280 +1481 +1605 +1632 +1596 +1565 +1588 +1624 +1594 +1472 +1318 +1195 +1091 +975 +824 +619 +392 +192 +61 +21 +39 +43 +-5 +-101 +-268 +-489 +-678 +-756 +-732 +-635 +-439 +-118 +304 +737 +1133 +1479 +1765 +1974 +2096 +2138 +2103 +2004 +1898 +1850 +1870 +1904 +1905 +1852 +1751 +1591 +1377 +1154 +939 +745 +552 +349 +103 +-186 +-481 +-726 +-925 +-1092 +-1197 +-1194 +-1047 +-793 +-508 +-270 +-141 +-121 +-160 +-196 +-203 +-190 +-151 +-65 +112 +374 +629 +791 +833 +782 +683 +553 +399 +225 +72 +-46 +-165 +-320 +-539 +-789 +-1003 +-1130 +-1158 +-1113 +-1015 +-873 +-722 +-584 +-511 +-514 +-583 +-704 +-851 +-1021 +-1173 +-1274 +-1325 +-1328 +-1311 +-1294 +-1267 +-1217 +-1131 +-1022 +-923 +-842 +-769 +-700 +-637 +-578 +-486 +-330 +-131 +38 +122 +112 +7 +-172 +-397 +-646 +-883 +-1053 +-1104 +-1029 +-850 +-651 +-496 +-422 +-456 +-595 +-809 +-1047 +-1228 +-1318 +-1323 +-1254 +-1148 +-1053 +-982 +-955 +-1001 +-1159 +-1447 +-1826 +-2216 +-2491 +-2521 +-2199 +-1550 +-774 +-92 +402 +753 +1015 +1221 +1370 +1446 +1456 +1439 +1438 +1460 +1484 +1488 +1477 +1460 +1433 +1362 +1199 +912 +504 +52 +-304 +-500 +-567 +-608 +-708 +-836 +-908 +-850 +-665 +-431 +-228 +-74 +58 +211 +396 +600 +814 +1035 +1250 +1426 +1514 +1498 +1430 +1379 +1380 +1369 +1290 +1150 +1021 +936 +862 +774 +624 +411 +179 +-6 +-99 +-98 +-63 +-66 +-125 +-239 +-416 +-615 +-747 +-790 +-777 +-686 +-458 +-82 +379 +822 +1207 +1528 +1783 +1969 +2082 +2107 +2042 +1928 +1854 +1866 +1935 +1985 +1980 +1924 +1819 +1666 +1471 +1266 +1069 +888 +695 +472 +188 +-128 +-410 +-633 +-807 +-952 +-1019 +-965 +-785 +-534 +-295 +-143 +-113 +-177 +-255 +-301 +-312 +-307 +-280 +-191 +-5 +242 +448 +544 +538 +457 +342 +214 +71 +-71 +-184 +-293 +-425 +-600 +-812 +-999 +-1113 +-1138 +-1092 +-991 +-822 +-612 +-409 +-276 +-248 +-303 +-399 +-506 +-624 +-756 +-878 +-959 +-989 +-976 +-969 +-990 +-1019 +-1023 +-973 +-887 +-803 +-741 +-689 +-644 +-607 +-558 +-469 +-331 +-191 +-100 +-80 +-135 +-263 +-451 +-680 +-920 +-1131 +-1262 +-1278 +-1172 +-988 +-791 +-644 +-583 +-636 +-799 +-1018 +-1230 +-1360 +-1416 +-1407 +-1346 +-1257 +-1164 +-1082 +-1037 +-1090 +-1281 +-1601 +-1987 +-2340 +-2541 +-2445 +-1981 +-1251 +-482 +137 +583 +900 +1134 +1316 +1443 +1506 +1516 +1529 +1581 +1645 +1699 +1728 +1741 +1756 +1746 +1659 +1456 +1124 +693 +278 +4 +-114 +-157 +-223 +-360 +-509 +-576 +-527 +-378 +-211 +-73 +32 +136 +253 +390 +544 +723 +915 +1084 +1184 +1174 +1085 +994 +974 +996 +968 +852 +718 +638 +593 +536 +430 +246 +21 +-167 +-278 +-290 +-239 +-186 +-169 +-204 +-313 +-511 +-720 +-827 +-826 +-747 +-557 +-240 +178 +617 +1009 +1355 +1640 +1847 +1977 +2035 +2020 +1936 +1851 +1829 +1885 +1976 +2020 +2012 +1950 +1824 +1649 +1451 +1262 +1101 +954 +797 +597 +338 +55 +-193 +-403 +-594 +-752 +-811 +-731 +-548 +-317 +-130 +-50 +-89 +-192 +-292 +-369 +-436 +-492 +-505 +-426 +-224 +-1 +150 +184 +115 +2 +-119 +-242 +-376 +-490 +-569 +-631 +-709 +-834 +-999 +-1136 +-1187 +-1139 +-1011 +-816 +-573 +-328 +-127 +-10 +21 +-10 +-73 +-172 +-299 +-429 +-533 +-582 +-590 +-595 +-637 +-701 +-750 +-748 +-702 +-660 +-642 +-642 +-646 +-651 +-667 +-653 +-580 +-463 +-349 +-294 +-314 +-419 +-595 +-821 +-1075 +-1319 +-1508 +-1579 +-1511 +-1313 +-1064 +-851 +-723 +-717 +-826 +-1018 +-1235 +-1405 +-1492 +-1495 +-1436 +-1327 +-1213 +-1122 +-1054 +-1056 +-1175 +-1434 +-1796 +-2171 +-2468 +-2541 +-2257 +-1631 +-846 +-140 +366 +703 +951 +1148 +1321 +1466 +1559 +1628 +1711 +1804 +1884 +1929 +1951 +1967 +1989 +1978 +1869 +1638 +1274 +856 +504 +302 +216 +142 +-4 +-204 +-367 +-410 +-319 +-159 +-13 +72 +120 +171 +242 +339 +453 +587 +723 +837 +885 +849 +768 +714 +721 +724 +661 +528 +416 +357 +316 +266 +169 +13 +-162 +-303 +-366 +-336 +-267 +-222 +-226 +-291 +-428 +-604 +-712 +-722 +-678 +-581 +-382 +-52 +355 +756 +1108 +1402 +1631 +1804 +1917 +1960 +1927 +1829 +1771 +1793 +1892 +1988 +2023 +2004 +1932 +1806 +1637 +1465 +1311 +1178 +1050 +898 +687 +414 +144 +-84 +-278 +-453 +-571 +-572 +-454 +-266 +-82 +27 +12 +-110 +-265 +-398 +-496 +-569 +-617 +-602 +-477 +-279 +-116 +-51 +-91 +-190 +-314 +-429 +-541 +-640 +-693 +-719 +-757 +-846 +-985 +-1127 +-1195 +-1155 +-1020 +-829 +-592 +-322 +-53 +163 +280 +292 +225 +120 +-1 +-117 +-213 +-283 +-325 +-349 +-389 +-456 +-533 +-594 +-614 +-610 +-614 +-625 +-645 +-673 +-708 +-739 +-721 +-641 +-546 +-483 +-489 +-555 +-672 +-833 +-1027 +-1244 +-1439 +-1564 +-1579 +-1475 +-1296 +-1113 +-972 +-898 +-916 +-1028 +-1197 +-1365 +-1470 +-1492 +-1455 +-1383 +-1306 +-1240 +-1184 +-1151 +-1187 +-1356 +-1653 +-2022 +-2360 +-2537 +-2440 +-1994 +-1282 +-529 +73 +509 +834 +1094 +1312 +1483 +1601 +1667 +1722 +1802 +1891 +1957 +2001 +2034 +2070 +2087 +2042 +1884 +1598 +1203 +786 +491 +343 +273 +178 +8 +-177 +-283 +-266 +-149 +-19 +61 +94 +118 +163 +230 +321 +437 +576 +716 +808 +806 +714 +598 +544 +547 +520 +421 +295 +217 +196 +178 +127 +-3 +-192 +-369 +-475 +-475 +-396 +-314 +-277 +-291 +-359 +-500 +-655 +-740 +-743 +-693 +-549 +-259 +148 +583 +968 +1298 +1573 +1776 +1911 +1971 +1961 +1889 +1795 +1767 +1830 +1933 +2001 +2013 +1977 +1891 +1752 +1579 +1404 +1251 +1113 +968 +784 +535 +259 +14 +-181 +-359 +-515 +-581 +-527 +-365 +-169 +-18 +29 +-42 +-181 +-321 +-431 +-520 +-596 +-639 +-595 +-440 +-242 +-104 +-64 +-114 +-217 +-327 +-432 +-534 +-613 +-666 +-713 +-780 +-893 +-1028 +-1122 +-1136 +-1056 +-910 +-699 +-435 +-158 +80 +229 +280 +257 +198 +123 +20 +-95 +-190 +-251 +-273 +-296 +-357 +-446 +-523 +-556 +-537 +-512 +-511 +-524 +-550 +-581 +-615 +-648 +-623 +-551 +-472 +-432 +-464 +-563 +-729 +-941 +-1174 +-1404 +-1584 +-1668 +-1632 +-1468 +-1251 +-1044 +-909 +-874 +-951 +-1117 +-1311 +-1464 +-1539 +-1545 +-1490 +-1396 +-1289 +-1190 +-1108 +-1079 +-1168 +-1402 +-1738 +-2110 +-2397 +-2485 +-2240 +-1657 +-899 +-191 +344 +716 +982 +1187 +1350 +1477 +1565 +1643 +1731 +1832 +1913 +1964 +1995 +2020 +2044 +2033 +1929 +1700 +1352 +946 +608 +412 +334 +273 +148 +-45 +-220 +-292 +-245 +-126 +-10 +63 +102 +133 +183 +256 +359 +487 +614 +705 +724 +664 +567 +503 +496 +491 +411 +273 +157 +102 +74 +22 +-83 +-241 +-408 +-521 +-554 +-503 +-411 +-347 +-330 +-368 +-489 +-663 +-781 +-790 +-718 +-591 +-372 +-49 +348 +738 +1084 +1383 +1624 +1794 +1907 +1955 +1936 +1867 +1799 +1810 +1890 +1969 +2004 +1990 +1929 +1830 +1680 +1518 +1365 +1225 +1088 +929 +720 +461 +203 +-18 +-205 +-383 +-514 +-540 +-446 +-280 +-112 +-16 +-33 +-151 +-298 +-428 +-529 +-610 +-667 +-663 +-561 +-382 +-214 +-136 +-160 +-245 +-358 +-463 +-569 +-660 +-716 +-734 +-752 +-799 +-902 +-1023 +-1086 +-1056 +-932 +-745 +-508 +-249 +1 +200 +321 +366 +354 +291 +190 +75 +-29 +-92 +-120 +-135 +-168 +-237 +-314 +-362 +-375 +-371 +-387 +-420 +-456 +-495 +-543 +-594 +-606 +-558 +-473 +-414 +-416 +-481 +-619 +-816 +-1047 +-1292 +-1516 +-1660 +-1687 +-1591 +-1398 +-1197 +-1039 +-957 +-976 +-1085 +-1253 +-1428 +-1543 +-1576 +-1540 +-1454 +-1348 +-1259 +-1189 +-1145 +-1153 +-1267 +-1503 +-1813 +-2101 +-2278 +-2198 +-1799 +-1154 +-457 +103 +493 +778 +1013 +1221 +1404 +1541 +1636 +1718 +1815 +1906 +1972 +2013 +2042 +2076 +2096 +2072 +1957 +1714 +1362 +980 +692 +534 +452 +354 +183 +-26 +-170 +-198 +-121 +-12 +58 +73 +62 +64 +90 +138 +217 +318 +418 +488 +480 +402 +305 +251 +244 +215 +119 +-4 +-84 +-117 +-136 +-174 +-275 +-425 +-572 +-663 +-663 +-588 +-501 +-449 +-446 +-498 +-608 +-730 +-770 +-740 +-675 +-543 +-297 +73 +480 +851 +1163 +1423 +1631 +1779 +1870 +1899 +1851 +1783 +1766 +1836 +1944 +2019 +2035 +2001 +1923 +1798 +1646 +1490 +1345 +1216 +1081 +915 +685 +417 +170 +-32 +-206 +-366 +-455 +-442 +-340 +-201 +-93 +-76 +-163 +-312 +-462 +-577 +-660 +-721 +-760 +-732 +-608 +-446 +-326 +-293 +-344 +-433 +-528 +-614 +-688 +-737 +-743 +-745 +-775 +-846 +-949 +-1021 +-1006 +-910 +-758 +-566 +-328 +-61 +186 +358 +430 +420 +379 +324 +258 +188 +111 +51 +15 +-10 +-48 +-116 +-196 +-252 +-270 +-269 +-272 +-291 +-322 +-374 +-442 +-493 +-490 +-437 +-380 +-364 +-399 +-489 +-634 +-824 +-1044 +-1273 +-1467 +-1581 +-1593 +-1500 +-1348 +-1198 +-1088 +-1049 +-1107 +-1248 +-1422 +-1570 +-1649 +-1659 +-1622 +-1546 +-1462 +-1382 +-1295 +-1241 +-1269 +-1404 +-1643 +-1914 +-2139 +-2206 +-1998 +-1484 +-802 +-157 +336 +687 +964 +1195 +1390 +1547 +1656 +1735 +1820 +1915 +2005 +2070 +2116 +2166 +2203 +2201 +2120 +1931 +1636 +1265 +934 +724 +626 +557 +432 +243 +60 +-37 +-27 +39 +93 +100 +83 +72 +81 +108 +155 +227 +317 +389 +394 +307 +172 +68 +38 +45 +-8 +-125 +-239 +-288 +-306 +-333 +-406 +-550 +-713 +-830 +-862 +-799 +-685 +-586 +-526 +-519 +-578 +-696 +-800 +-819 +-766 +-652 +-445 +-124 +268 +651 +980 +1266 +1497 +1672 +1794 +1868 +1884 +1847 +1822 +1857 +1952 +2043 +2082 +2066 +2007 +1903 +1761 +1613 +1482 +1359 +1237 +1088 +890 +640 +376 +156 +-41 +-233 +-393 +-458 +-419 +-302 +-175 +-113 +-149 +-277 +-434 +-566 +-668 +-753 +-826 +-848 +-780 +-619 +-458 +-370 +-374 +-441 +-526 +-615 +-694 +-767 +-807 +-812 +-810 +-835 +-899 +-973 +-1006 +-960 +-845 +-672 +-445 +-186 +65 +265 +380 +423 +425 +409 +362 +285 +201 +134 +115 +125 +115 +67 +-8 +-74 +-93 +-87 +-100 +-136 +-188 +-244 +-308 +-382 +-426 +-419 +-378 +-352 +-373 +-449 +-584 +-766 +-987 +-1224 +-1445 +-1606 +-1673 +-1626 +-1484 +-1312 +-1181 +-1113 +-1140 +-1253 +-1416 +-1581 +-1689 +-1727 +-1705 +-1636 +-1533 +-1417 +-1308 +-1226 +-1204 +-1293 +-1483 +-1735 +-1971 +-2108 +-2043 +-1678 +-1069 +-389 +177 +573 +849 +1066 +1258 +1430 +1573 +1684 +1787 +1895 +2002 +2087 +2145 +2185 +2210 +2218 +2174 +2049 +1839 +1548 +1220 +960 +808 +725 +631 +462 +251 +84 +16 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a4_440_000.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a4_440_000.samples new file mode 100644 index 00000000..c432126a --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a4_440_000.samples @@ -0,0 +1,4096 @@ +1427 +1543 +1568 +1485 +1305 +1069 +830 +633 +496 +425 +398 +374 +309 +215 +110 +38 +20 +33 +74 +105 +84 +27 +-62 +-171 +-215 +-116 +78 +262 +386 +476 +577 +671 +716 +726 +752 +792 +828 +830 +776 +668 +552 +465 +390 +306 +173 +-16 +-253 +-546 +-906 +-1338 +-1808 +-2182 +-2397 +-2534 +-2607 +-2517 +-2189 +-1665 +-1100 +-636 +-312 +-59 +210 +501 +752 +934 +1106 +1266 +1332 +1259 +1069 +815 +583 +384 +177 +-52 +-273 +-456 +-644 +-886 +-1154 +-1368 +-1492 +-1557 +-1615 +-1662 +-1676 +-1600 +-1394 +-1039 +-602 +-141 +297 +667 +963 +1176 +1268 +1256 +1245 +1298 +1404 +1499 +1515 +1432 +1280 +1083 +882 +710 +573 +477 +422 +364 +279 +175 +70 +8 +8 +52 +129 +184 +171 +94 +-45 +-205 +-282 +-193 +26 +259 +419 +527 +627 +712 +736 +712 +693 +702 +737 +779 +777 +721 +635 +543 +456 +342 +183 +-24 +-261 +-539 +-867 +-1259 +-1706 +-2077 +-2299 +-2443 +-2558 +-2544 +-2297 +-1825 +-1254 +-746 +-367 +-71 +207 +488 +731 +899 +1051 +1197 +1259 +1205 +1048 +841 +653 +482 +282 +29 +-232 +-452 +-661 +-906 +-1177 +-1387 +-1489 +-1515 +-1541 +-1585 +-1619 +-1600 +-1453 +-1152 +-741 +-273 +193 +610 +950 +1193 +1304 +1287 +1240 +1252 +1334 +1427 +1461 +1414 +1304 +1143 +963 +788 +622 +483 +385 +304 +223 +143 +67 +33 +52 +113 +195 +247 +210 +87 +-88 +-262 +-341 +-235 +20 +285 +466 +566 +648 +704 +706 +666 +637 +653 +708 +776 +807 +778 +698 +590 +466 +319 +142 +-56 +-267 +-509 +-796 +-1159 +-1593 +-1985 +-2237 +-2409 +-2560 +-2607 +-2407 +-1929 +-1305 +-727 +-300 +-5 +244 +497 +714 +865 +992 +1127 +1214 +1200 +1098 +926 +736 +555 +334 +56 +-239 +-486 +-696 +-921 +-1153 +-1325 +-1402 +-1425 +-1471 +-1553 +-1632 +-1652 +-1536 +-1242 +-820 +-329 +178 +632 +992 +1235 +1326 +1279 +1202 +1197 +1273 +1385 +1454 +1442 +1370 +1241 +1049 +835 +614 +428 +314 +254 +204 +144 +87 +59 +88 +155 +218 +238 +166 +19 +-143 +-288 +-334 +-218 +45 +314 +487 +564 +611 +657 +657 +620 +601 +641 +725 +818 +869 +834 +726 +575 +422 +270 +112 +-54 +-233 +-442 +-708 +-1056 +-1493 +-1927 +-2239 +-2461 +-2641 +-2703 +-2503 +-2003 +-1349 +-739 +-301 +-20 +204 +429 +633 +781 +916 +1088 +1227 +1264 +1193 +1013 +796 +580 +333 +37 +-270 +-512 +-694 +-873 +-1077 +-1248 +-1351 +-1400 +-1463 +-1560 +-1662 +-1709 +-1619 +-1332 +-890 +-364 +169 +631 +975 +1197 +1282 +1243 +1168 +1155 +1239 +1382 +1498 +1533 +1480 +1321 +1086 +823 +583 +403 +308 +272 +240 +202 +155 +119 +126 +146 +159 +158 +89 +-22 +-140 +-252 +-293 +-196 +39 +291 +448 +506 +538 +589 +622 +612 +618 +670 +767 +870 +913 +854 +705 +524 +371 +256 +153 +30 +-130 +-342 +-623 +-986 +-1449 +-1923 +-2280 +-2509 +-2681 +-2736 +-2529 +-2035 +-1386 +-786 +-362 +-102 +99 +319 +547 +733 +903 +1097 +1266 +1322 +1248 +1063 +819 +576 +319 +29 +-259 +-475 +-622 +-778 +-990 +-1201 +-1341 +-1419 +-1495 +-1605 +-1707 +-1744 +-1640 +-1340 +-888 +-373 +133 +563 +893 +1119 +1235 +1225 +1159 +1157 +1262 +1434 +1565 +1599 +1512 +1318 +1059 +790 +566 +410 +346 +337 +323 +280 +203 +134 +98 +93 +102 +112 +89 +23 +-61 +-150 +-215 +-177 +-3 +213 +367 +437 +489 +569 +638 +663 +684 +736 +815 +878 +884 +803 +653 +498 +381 +305 +224 +114 +-46 +-267 +-561 +-936 +-1405 +-1896 +-2259 +-2464 +-2599 +-2650 +-2479 +-2045 +-1445 +-875 +-461 +-207 +-3 +235 +499 +726 +913 +1115 +1285 +1344 +1252 +1046 +789 +544 +312 +54 +-207 +-412 +-554 +-710 +-939 +-1193 +-1380 +-1483 +-1554 +-1639 +-1715 +-1733 +-1628 +-1347 +-923 +-434 +42 +458 +786 +1034 +1188 +1224 +1191 +1198 +1293 +1445 +1561 +1568 +1463 +1268 +1024 +782 +592 +456 +396 +376 +351 +286 +185 +79 +12 +2 +27 +86 +122 +100 +34 +-72 +-191 +-220 +-97 +113 +299 +408 +491 +591 +675 +707 +715 +743 +788 +827 +836 +772 +668 +553 +464 +394 +303 +164 +-30 +-269 +-575 +-938 +-1377 +-1842 +-2193 +-2384 +-2518 +-2597 +-2495 +-2137 +-1586 +-1019 +-583 +-289 +-44 +234 +534 +776 +949 +1120 +1276 +1329 +1239 +1038 +781 +553 +357 +142 +-104 +-323 +-494 +-679 +-928 +-1201 +-1412 +-1513 +-1560 +-1613 +-1657 +-1671 +-1589 +-1365 +-1003 +-562 +-97 +338 +706 +999 +1204 +1279 +1255 +1244 +1303 +1420 +1515 +1520 +1432 +1261 +1051 +844 +669 +533 +446 +393 +337 +251 +140 +31 +-27 +-21 +32 +123 +183 +165 +70 +-92 +-265 +-330 +-207 +48 +290 +446 +547 +649 +727 +742 +709 +690 +712 +761 +809 +804 +742 +647 +557 +469 +353 +181 +-42 +-296 +-591 +-922 +-1319 +-1755 +-2107 +-2320 +-2469 +-2580 +-2547 +-2260 +-1744 +-1155 +-656 +-296 +-13 +268 +558 +798 +955 +1096 +1229 +1268 +1193 +1020 +808 +625 +460 +261 +-2 +-262 +-476 +-683 +-940 +-1215 +-1417 +-1502 +-1514 +-1535 +-1578 +-1623 +-1607 +-1450 +-1129 +-698 +-217 +254 +673 +1013 +1254 +1349 +1314 +1262 +1284 +1375 +1469 +1497 +1431 +1302 +1123 +938 +774 +614 +487 +401 +321 +234 +131 +31 +-19 +1 +74 +175 +234 +189 +53 +-136 +-312 +-370 +-231 +46 +314 +482 +570 +649 +708 +706 +659 +632 +656 +728 +806 +836 +795 +700 +580 +452 +304 +122 +-84 +-304 +-546 +-837 +-1209 +-1653 +-2050 +-2301 +-2492 +-2652 +-2669 +-2419 +-1899 +-1256 +-689 +-283 +-3 +245 +507 +730 +878 +1012 +1157 +1244 +1225 +1104 +919 +722 +533 +303 +5 +-288 +-528 +-729 +-950 +-1185 +-1356 +-1429 +-1441 +-1485 +-1564 +-1649 +-1678 +-1563 +-1261 +-824 +-306 +226 +688 +1042 +1269 +1345 +1284 +1216 +1223 +1307 +1424 +1487 +1480 +1400 +1252 +1046 +821 +602 +429 +328 +266 +202 +136 +73 +47 +86 +148 +209 +227 +143 +-9 +-176 +-322 +-357 +-214 +62 +336 +496 +558 +606 +645 +646 +613 +609 +668 +770 +879 +932 +886 +763 +600 +434 +272 +108 +-62 +-242 +-449 +-720 +-1085 +-1546 +-1989 +-2291 +-2504 +-2684 +-2743 +-2514 +-1981 +-1299 +-681 +-261 +-2 +208 +441 +656 +813 +957 +1130 +1269 +1301 +1217 +1035 +817 +596 +337 +23 +-289 +-521 +-693 +-881 +-1099 +-1280 +-1376 +-1418 +-1485 +-1593 +-1702 +-1748 +-1641 +-1337 +-870 +-326 +218 +683 +1020 +1237 +1308 +1253 +1171 +1167 +1268 +1410 +1514 +1528 +1451 +1282 +1039 +780 +544 +371 +289 +261 +235 +190 +132 +92 +96 +115 +139 +145 +83 +-20 +-139 +-254 +-291 +-176 +80 +329 +464 +496 +518 +573 +608 +603 +615 +676 +776 +891 +942 +882 +728 +541 +387 +275 +177 +60 +-93 +-310 +-609 +-994 +-1475 +-1969 +-2322 +-2559 +-2736 +-2775 +-2539 +-2001 +-1318 +-709 +-307 +-73 +114 +332 +567 +764 +950 +1168 +1340 +1385 +1291 +1082 +828 +571 +303 +-7 +-301 +-501 +-630 +-782 +-1003 +-1224 +-1372 +-1448 +-1526 +-1643 +-1764 +-1813 +-1703 +-1368 +-877 +-333 +187 +623 +944 +1160 +1258 +1221 +1138 +1132 +1244 +1415 +1542 +1556 +1450 +1243 +966 +699 +485 +341 +294 +299 +295 +257 +188 +117 +83 +78 +99 +122 +108 +40 +-55 +-160 +-237 +-192 +-3 +211 +341 +385 +431 +519 +592 +615 +637 +697 +786 +867 +882 +805 +649 +497 +399 +341 +282 +178 +14 +-218 +-528 +-919 +-1413 +-1924 +-2300 +-2514 +-2652 +-2683 +-2468 +-1973 +-1322 +-742 +-355 +-137 +46 +288 +566 +800 +996 +1209 +1386 +1436 +1332 +1092 +802 +532 +285 +32 +-213 +-390 +-517 +-680 +-927 +-1179 +-1359 +-1449 +-1529 +-1637 +-1731 +-1766 +-1654 +-1344 +-897 +-398 +94 +522 +859 +1104 +1231 +1214 +1128 +1116 +1224 +1393 +1513 +1501 +1370 +1155 +895 +654 +468 +349 +309 +318 +313 +257 +162 +60 +14 +22 +67 +137 +167 +127 +41 +-97 +-241 +-269 +-129 +91 +268 +365 +440 +537 +612 +625 +624 +657 +714 +772 +788 +735 +639 +545 +488 +446 +373 +248 +68 +-171 +-478 +-861 +-1335 +-1834 +-2202 +-2398 +-2529 +-2596 +-2463 +-2055 +-1458 +-871 +-444 +-175 +45 +318 +615 +857 +1034 +1214 +1372 +1405 +1294 +1066 +798 +569 +372 +154 +-92 +-303 +-468 +-651 +-912 +-1183 +-1372 +-1453 +-1497 +-1561 +-1628 +-1661 +-1595 +-1357 +-975 +-527 +-56 +387 +762 +1050 +1228 +1253 +1177 +1132 +1181 +1299 +1387 +1370 +1257 +1073 +858 +657 +501 +381 +319 +293 +245 +166 +63 +-34 +-60 +-20 +65 +189 +266 +241 +127 +-82 +-302 +-397 +-280 +-18 +225 +365 +450 +538 +606 +600 +562 +548 +573 +629 +688 +703 +670 +613 +562 +510 +424 +288 +95 +-138 +-424 +-770 +-1204 +-1682 +-2047 +-2244 +-2394 +-2517 +-2476 +-2153 +-1586 +-963 +-466 +-133 +121 +383 +662 +880 +1023 +1176 +1320 +1357 +1264 +1065 +828 +634 +465 +254 +-20 +-270 +-454 +-639 +-882 +-1147 +-1335 +-1402 +-1417 +-1461 +-1534 +-1604 +-1599 +-1432 +-1083 +-633 +-134 +349 +760 +1080 +1280 +1303 +1182 +1068 +1065 +1155 +1256 +1270 +1198 +1062 +888 +707 +535 +372 +255 +201 +159 +112 +44 +-19 +-25 +38 +143 +267 +325 +252 +79 +-159 +-382 +-461 +-304 +4 +283 +431 +486 +533 +562 +522 +452 +426 +477 +587 +702 +769 +755 +685 +597 +507 +389 +246 +84 +-93 +-308 +-592 +-985 +-1472 +-1886 +-2142 +-2354 +-2553 +-2589 +-2304 +-1707 +-995 +-401 +-18 +215 +425 +657 +848 +965 +1088 +1226 +1303 +1273 +1143 +959 +769 +577 +326 +3 +-294 +-507 +-680 +-892 +-1126 +-1285 +-1329 +-1326 +-1376 +-1485 +-1615 +-1675 +-1558 +-1227 +-755 +-205 +337 +795 +1124 +1307 +1303 +1147 +990 +948 +1026 +1152 +1214 +1194 +1104 +946 +740 +516 +299 +135 +69 +52 +43 +19 +-4 +17 +98 +201 +289 +310 +202 +7 +-213 +-404 +-459 +-293 +18 +292 +418 +432 +441 +458 +427 +370 +367 +443 +585 +740 +829 +811 +708 +573 +449 +342 +239 +128 +5 +-182 +-450 +-833 +-1322 +-1776 +-2084 +-2326 +-2552 +-2605 +-2328 +-1732 +-990 +-368 +16 +223 +394 +591 +772 +893 +1027 +1208 +1346 +1371 +1275 +1081 +854 +623 +340 +3 +-308 +-507 +-640 +-801 +-1002 +-1167 +-1237 +-1268 +-1348 +-1492 +-1648 +-1741 +-1644 +-1302 +-791 +-209 +344 +786 +1095 +1255 +1243 +1089 +924 +888 +984 +1144 +1264 +1282 +1193 +1000 +735 +459 +225 +79 +44 +64 +84 +77 +54 +57 +107 +163 +208 +216 +124 +-13 +-167 +-318 +-373 +-248 +18 +260 +361 +351 +341 +367 +369 +353 +385 +486 +640 +786 +850 +801 +663 +516 +414 +356 +307 +238 +130 +-60 +-349 +-764 +-1307 +-1834 +-2196 +-2438 +-2636 +-2669 +-2386 +-1757 +-994 +-359 +12 +181 +314 +506 +716 +879 +1042 +1253 +1429 +1471 +1366 +1126 +841 +567 +278 +-36 +-318 +-478 +-561 +-690 +-901 +-1109 +-1238 +-1308 +-1406 +-1557 +-1715 +-1791 +-1672 +-1307 +-778 +-200 +331 +754 +1042 +1204 +1220 +1087 +934 +901 +1013 +1203 +1339 +1341 +1217 +984 +692 +409 +191 +64 +57 +109 +154 +158 +112 +66 +66 +86 +125 +164 +135 +49 +-72 +-217 +-317 +-267 +-60 +159 +268 +282 +309 +384 +432 +443 +470 +559 +682 +791 +822 +742 +600 +477 +427 +427 +422 +360 +228 +5 +-312 +-743 +-1301 +-1865 +-2257 +-2489 +-2663 +-2698 +-2439 +-1864 +-1136 +-515 +-135 +51 +212 +446 +717 +937 +1130 +1356 +1534 +1565 +1424 +1150 +824 +543 +289 +24 +-223 +-376 +-474 +-623 +-871 +-1131 +-1310 +-1402 +-1498 +-1630 +-1754 +-1800 +-1682 +-1333 +-830 +-287 +234 +660 +971 +1173 +1245 +1159 +1015 +971 +1069 +1241 +1354 +1329 +1186 +950 +669 +422 +236 +131 +131 +174 +198 +164 +84 +7 +-10 +34 +107 +198 +227 +165 +45 +-154 +-345 +-389 +-229 +13 +185 +264 +327 +421 +495 +500 +506 +552 +638 +719 +751 +707 +618 +548 +531 +535 +500 +393 +222 +-15 +-341 +-768 +-1312 +-1877 +-2251 +-2435 +-2580 +-2655 +-2488 +-1998 +-1318 +-678 +-245 +4 +217 +493 +798 +1024 +1185 +1374 +1539 +1555 +1399 +1114 +808 +580 +389 +169 +-86 +-290 +-436 +-619 +-897 +-1190 +-1380 +-1445 +-1495 +-1571 +-1665 +-1724 +-1657 +-1385 +-944 +-442 +72 +524 +888 +1156 +1290 +1244 +1094 +1010 +1058 +1192 +1280 +1246 +1113 +910 +685 +487 +335 +234 +202 +206 +180 +111 +13 +-62 +-53 +19 +139 +282 +348 +279 +111 +-161 +-431 +-525 +-356 +-52 +196 +315 +380 +479 +541 +512 +452 +437 +487 +585 +677 +710 +690 +651 +628 +609 +543 +401 +206 +-32 +-332 +-703 +-1187 +-1723 +-2111 +-2316 +-2491 +-2641 +-2579 +-2181 +-1516 +-825 +-310 +11 +257 +529 +815 +1017 +1147 +1308 +1473 +1500 +1370 +1126 +867 +690 +542 +323 +18 +-261 +-455 +-642 +-902 +-1182 +-1364 +-1409 +-1411 +-1462 +-1561 +-1666 +-1699 +-1520 +-1132 +-622 +-68 +451 +882 +1202 +1377 +1339 +1143 +985 +966 +1060 +1162 +1162 +1085 +943 +761 +577 +412 +259 +158 +116 +81 +28 +-39 +-81 +-49 +62 +216 +366 +418 +312 +90 +-204 +-484 +-572 +-374 +-12 +283 +400 +432 +480 +504 +441 +342 +311 +377 +516 +668 +754 +753 +703 +644 +581 +480 +332 +170 +-3 +-219 +-524 +-973 +-1536 +-1974 +-2209 +-2417 +-2638 +-2685 +-2337 +-1634 +-839 +-221 +136 +341 +545 +784 +968 +1070 +1214 +1390 +1461 +1388 +1206 +985 +800 +623 +352 +-21 +-338 +-529 +-669 +-871 +-1117 +-1276 +-1305 +-1302 +-1364 +-1503 +-1674 +-1765 +-1647 +-1264 +-730 +-126 +450 +910 +1229 +1373 +1298 +1063 +859 +818 +925 +1071 +1130 +1108 +1016 +857 +635 +387 +152 +5 +-14 +7 +9 +-16 +-40 +8 +132 +269 +381 +391 +237 +5 +-252 +-480 +-535 +-323 +38 +315 +390 +357 +360 +373 +314 +230 +231 +350 +551 +748 +849 +812 +698 +581 +482 +401 +304 +202 +98 +-68 +-337 +-775 +-1366 +-1882 +-2177 +-2412 +-2671 +-2742 +-2387 +-1629 +-762 +-99 +236 +374 +523 +730 +913 +999 +1121 +1331 +1492 +1511 +1379 +1137 +890 +664 +356 +-28 +-370 +-541 +-624 +-761 +-970 +-1134 +-1181 +-1196 +-1304 +-1500 +-1721 +-1854 +-1743 +-1346 +-770 +-138 +459 +918 +1212 +1343 +1264 +1001 +771 +727 +853 +1043 +1150 +1157 +1065 +862 +579 +288 +34 +-97 +-81 +-14 +36 +44 +44 +88 +191 +264 +316 +299 +175 +7 +-175 +-370 +-446 +-289 +35 +299 +348 +274 +242 +266 +250 +194 +208 +329 +515 +705 +788 +723 +572 +435 +386 +388 +376 +328 +238 +73 +-200 +-647 +-1266 +-1860 +-2200 +-2424 +-2667 +-2713 +-2342 +-1574 +-706 +-79 +206 +290 +408 +629 +843 +944 +1086 +1358 +1582 +1628 +1465 +1162 +856 +597 +312 +-58 +-380 +-504 +-528 +-626 +-851 +-1062 +-1163 +-1202 +-1319 +-1518 +-1732 +-1862 +-1750 +-1332 +-748 +-138 +409 +819 +1079 +1214 +1164 +934 +702 +668 +816 +1034 +1163 +1149 +1019 +774 +466 +176 +-42 +-136 +-76 +37 +103 +106 +69 +62 +119 +169 +216 +247 +198 +105 +-15 +-210 +-371 +-318 +-54 +188 +250 +179 +176 +252 +299 +268 +267 +367 +524 +672 +717 +630 +483 +394 +414 +484 +514 +473 +368 +183 +-111 +-561 +-1208 +-1847 +-2181 +-2328 +-2478 +-2545 +-2266 +-1582 +-756 +-127 +156 +231 +338 +586 +865 +1030 +1181 +1446 +1669 +1689 +1485 +1129 +771 +529 +306 +8 +-278 +-398 +-398 +-492 +-743 +-1016 +-1172 +-1230 +-1340 +-1521 +-1698 +-1801 +-1690 +-1303 +-774 +-220 +290 +697 +966 +1147 +1171 +968 +743 +682 +814 +1024 +1138 +1090 +925 +681 +394 +144 +-33 +-108 +-31 +94 +134 +92 +-7 +-64 +-22 +55 +148 +255 +278 +234 +130 +-105 +-371 +-441 +-235 +41 +166 +151 +170 +282 +349 +308 +263 +307 +398 +527 +599 +563 +478 +431 +485 +562 +574 +499 +355 +153 +-132 +-544 +-1147 +-1762 +-2075 +-2180 +-2338 +-2495 +-2342 +-1759 +-960 +-284 +69 +191 +340 +635 +956 +1123 +1215 +1419 +1620 +1631 +1417 +1054 +708 +522 +384 +159 +-127 +-300 +-352 +-479 +-770 +-1087 +-1259 +-1285 +-1317 +-1436 +-1581 +-1687 +-1649 +-1366 +-909 +-396 +115 +555 +902 +1143 +1228 +1074 +816 +707 +788 +967 +1063 +1001 +847 +640 +406 +223 +84 +-8 +-2 +39 +42 +-5 +-76 +-112 +-36 +81 +217 +378 +441 +366 +191 +-139 +-494 +-618 +-392 +-24 +205 +246 +265 +373 +435 +354 +248 +220 +304 +451 +579 +612 +579 +553 +594 +648 +614 +472 +289 +92 +-144 +-458 +-977 +-1589 +-1952 +-2081 +-2260 +-2471 +-2427 +-1942 +-1161 +-411 +57 +256 +420 +691 +989 +1149 +1194 +1353 +1545 +1573 +1411 +1117 +841 +692 +577 +334 +-21 +-280 +-392 +-517 +-790 +-1099 +-1256 +-1238 +-1208 +-1293 +-1460 +-1649 +-1720 +-1514 +-1079 +-549 +3 +505 +899 +1205 +1342 +1202 +911 +714 +727 +864 +959 +936 +840 +714 +557 +373 +197 +12 +-63 +-54 +-48 +-76 +-121 +-142 +-44 +115 +300 +462 +499 +367 +114 +-238 +-603 +-719 +-447 +-4 +296 +339 +305 +364 +393 +293 +137 +92 +188 +397 +620 +727 +704 +626 +590 +587 +538 +412 +251 +90 +-101 +-376 +-859 +-1491 +-1930 +-2124 +-2363 +-2654 +-2699 +-2251 +-1396 +-509 +80 +348 +495 +710 +975 +1115 +1118 +1236 +1454 +1560 +1492 +1257 +992 +819 +676 +396 +-15 +-343 +-497 +-603 +-833 +-1090 +-1216 +-1180 +-1136 +-1249 +-1462 +-1708 +-1841 +-1692 +-1266 +-699 +-80 +494 +954 +1265 +1396 +1248 +895 +651 +632 +779 +945 +991 +951 +853 +686 +454 +191 +-79 +-211 +-180 +-98 +-45 +-35 +-32 +55 +216 +364 +485 +480 +294 +40 +-263 +-566 +-650 +-380 +70 +366 +389 +285 +255 +258 +155 +40 +55 +215 +474 +724 +827 +777 +646 +547 +500 +457 +389 +295 +212 +67 +-189 +-677 +-1361 +-1921 +-2199 +-2455 +-2768 +-2843 +-2399 +-1479 +-502 +172 +428 +507 +646 +883 +1047 +1083 +1216 +1468 +1649 +1641 +1459 +1170 +924 +710 +390 +-58 +-425 +-563 +-602 +-735 +-953 +-1105 +-1121 +-1121 +-1268 +-1518 +-1805 +-1974 +-1841 +-1384 +-751 +-59 +567 +1026 +1302 +1399 +1239 +887 +604 +566 +727 +937 +1048 +1055 +975 +756 +443 +129 +-139 +-234 +-158 +-46 +16 +33 +39 +122 +247 +335 +401 +375 +227 +38 +-192 +-453 +-570 +-373 +24 +305 +308 +181 +143 +174 +151 +77 +110 +269 +508 +748 +836 +757 +582 +456 +431 +458 +466 +431 +371 +206 +-83 +-594 +-1327 +-1983 +-2312 +-2536 +-2802 +-2851 +-2412 +-1524 +-541 +130 +375 +403 +500 +742 +975 +1088 +1254 +1554 +1772 +1782 +1580 +1233 +912 +636 +309 +-99 +-419 +-497 +-478 +-588 +-843 +-1064 +-1142 +-1172 +-1338 +-1603 +-1888 +-2031 +-1866 +-1363 +-707 +-47 +521 +917 +1179 +1297 +1198 +888 +610 +578 +758 +1003 +1131 +1105 +946 +670 +327 +20 +-206 +-261 +-142 +22 +122 +127 +95 +89 +162 +217 +278 +314 +237 +133 +-19 +-252 +-439 +-385 +-109 +130 +163 +82 +87 +179 +208 +176 +190 +317 +505 +680 +726 +625 +464 +389 +444 +546 +595 +560 +450 +256 +-68 +-577 +-1303 +-1982 +-2319 +-2507 +-2713 +-2758 +-2373 +-1557 +-632 +16 +264 +315 +439 +719 +1018 +1174 +1338 +1624 +1844 +1844 +1604 +1203 +817 +544 +293 +-16 +-280 +-367 +-377 +-505 +-793 +-1075 +-1221 +-1285 +-1430 +-1648 +-1851 +-1949 +-1804 +-1364 +-770 +-173 +377 +794 +1084 +1256 +1221 +967 +700 +650 +795 +1020 +1115 +1040 +857 +573 +263 +1 +-168 +-211 +-101 +49 +110 +93 +21 +-11 +45 +124 +244 +368 +394 +314 +135 +-186 +-504 +-548 +-292 +20 +161 +156 +184 +279 +307 +245 +213 +261 +386 +515 +584 +551 +479 +464 +539 +639 +672 +605 +456 +232 +-93 +-556 +-1215 +-1858 +-2191 +-2333 +-2518 +-2633 +-2393 +-1732 +-884 +-211 +136 +288 +467 +767 +1067 +1231 +1360 +1588 +1777 +1759 +1518 +1132 +788 +591 +419 +164 +-123 +-289 +-346 +-493 +-806 +-1122 +-1305 +-1347 +-1411 +-1522 +-1664 +-1775 +-1725 +-1406 +-908 +-337 +228 +705 +1054 +1282 +1317 +1099 +825 +696 +764 +919 +996 +923 +764 +550 +310 +117 +-18 +-96 +-64 +8 +45 +14 +-58 +-88 +-18 +135 +326 +533 +599 +491 +238 +-174 +-559 +-664 +-406 +-36 +192 +228 +243 +318 +343 +245 +141 +120 +194 +352 +508 +582 +576 +569 +613 +671 +675 +582 +419 +197 +-96 +-488 +-1062 +-1658 +-2006 +-2172 +-2409 +-2620 +-2521 +-1966 +-1119 +-341 +155 +395 +586 +846 +1117 +1258 +1328 +1501 +1650 +1625 +1426 +1118 +845 +697 +561 +306 +-25 +-254 +-372 +-539 +-839 +-1142 +-1276 +-1259 +-1251 +-1348 +-1537 +-1732 +-1790 +-1567 +-1110 +-549 +50 +597 +1023 +1320 +1405 +1198 +860 +645 +641 +776 +883 +849 +730 +560 +367 +198 +49 +-87 +-129 +-98 +-73 +-77 +-98 +-96 +9 +188 +408 +614 +643 +455 +117 +-297 +-647 +-709 +-399 +27 +300 +341 +305 +308 +261 +117 +-12 +-20 +104 +315 +530 +649 +656 +626 +615 +605 +552 +457 +338 +206 +-5 +-322 +-836 +-1459 +-1886 +-2134 +-2416 +-2701 +-2678 +-2160 +-1269 +-364 +244 +534 +674 +851 +1064 +1193 +1263 +1410 +1584 +1625 +1512 +1286 +1047 +868 +675 +349 +-55 +-355 +-493 +-615 +-844 +-1083 +-1191 +-1160 +-1138 +-1252 +-1484 +-1746 +-1882 +-1715 +-1259 +-637 +47 +654 +1099 +1369 +1430 +1204 +825 +562 +525 +665 +819 +869 +837 +726 +539 +305 +67 +-166 +-263 +-228 +-151 +-83 +-56 +-23 +88 +270 +456 +602 +586 +363 +56 +-301 +-592 +-628 +-326 +105 +366 +369 +260 +197 +148 +34 +-59 +-24 +130 +378 +618 +740 +714 +614 +517 +469 +441 +416 +387 +316 +154 +-164 +-683 +-1343 +-1866 +-2180 +-2501 +-2809 +-2794 +-2252 +-1289 +-303 +341 +593 +667 +774 +961 +1105 +1179 +1329 +1551 +1676 +1648 +1449 +1158 +893 +628 +279 +-131 +-416 +-515 +-567 +-720 +-934 +-1061 +-1065 +-1093 +-1253 +-1539 +-1855 +-2031 +-1874 +-1369 +-678 +47 +669 +1094 +1326 +1353 +1134 +758 +479 +448 +619 +844 +973 +979 +853 +607 +291 +-20 +-261 +-337 +-240 +-84 +23 +61 +69 +129 +253 +369 +464 +450 +280 +39 +-236 +-476 +-525 +-298 +50 +262 +242 +124 +84 +88 +37 +-22 +18 +194 +451 +677 +759 +685 +521 +398 +377 +418 +479 +512 +483 +296 +-54 +-613 +-1334 +-1937 +-2283 +-2561 +-2814 +-2776 +-2240 +-1294 +-317 +320 +536 +560 +630 +829 +1021 +1159 +1366 +1660 +1826 +1785 +1558 +1203 +875 +580 +243 +-134 +-384 +-432 +-433 +-565 +-821 +-1031 +-1117 +-1181 +-1370 +-1661 +-1949 +-2077 +-1871 +-1322 +-623 +69 +642 +1028 +1242 +1298 +1138 +802 +532 +504 +693 +952 +1090 +1051 +855 +525 +155 +-154 +-341 +-340 +-170 +18 +125 +133 +84 +81 +138 +228 +332 +390 +317 +181 +-4 +-253 +-403 +-316 +-65 +118 +127 +49 +50 +101 +82 +45 +95 +263 +487 +657 +694 +586 +435 +365 +421 +542 +634 +660 +592 +368 +-16 +-601 +-1348 +-1995 +-2336 +-2559 +-2781 +-2791 +-2333 +-1448 +-495 +155 +396 +428 +544 +811 +1099 +1282 +1469 +1717 +1879 +1839 +1589 +1194 +810 +503 +223 +-76 +-280 +-318 +-330 +-497 +-817 +-1095 +-1231 +-1286 +-1437 +-1669 +-1902 +-2004 +-1816 +-1321 +-673 +-30 +511 +892 +1135 +1257 +1177 +896 +626 +575 +739 +969 +1072 +998 +783 +465 +143 +-93 +-221 +-218 +-83 +52 +109 +90 +21 +4 +67 +175 +323 +461 +470 +356 +135 +-216 +-520 +-552 +-307 +-33 +93 +106 +145 +218 +222 +157 +150 +238 +376 +516 +569 +534 +473 +478 +579 +696 +755 +706 +564 +300 +-85 +-607 +-1284 +-1894 +-2235 +-2446 +-2673 +-2746 +-2397 +-1632 +-733 +-68 +245 +386 +576 +893 +1190 +1341 +1473 +1701 +1861 +1804 +1536 +1136 +793 +594 +411 +160 +-114 +-257 +-356 +-552 +-884 +-1186 +-1323 +-1352 +-1424 +-1576 +-1755 +-1875 +-1785 +-1420 +-866 +-265 +300 +754 +1072 +1280 +1284 +1048 +766 +642 +712 +865 +932 +858 +681 +451 +203 +24 +-83 +-122 +-55 +26 +43 +9 +-45 +-57 +41 +210 +437 +645 +674 +502 +173 +-286 +-663 +-715 +-422 +-49 +160 +192 +221 +283 +266 +153 +59 +61 +166 +329 +483 +554 +565 +593 +663 +724 +700 +591 +426 +209 +-84 +-507 +-1115 +-1724 +-2092 +-2289 +-2559 +-2755 +-2584 +-1941 +-1045 +-259 +221 +470 +679 +955 +1223 +1356 +1459 +1628 +1750 +1678 +1444 +1130 +872 +736 +579 +295 +-49 +-277 +-400 +-583 +-895 +-1200 +-1326 +-1290 +-1272 +-1366 +-1572 +-1787 +-1838 +-1562 +-1039 +-425 +200 +714 +1095 +1348 +1386 +1147 +791 +581 +579 +718 +811 +770 +662 +510 +332 +173 +19 +-111 +-139 +-98 +-61 +-54 +-73 +-61 +52 +250 +498 +718 +729 +499 +113 +-356 +-727 +-754 +-404 +34 +272 +285 +252 +266 +208 +47 +-95 +-98 +52 +300 +545 +673 +697 +667 +659 +647 +598 +512 +413 +283 +59 +-313 +-889 +-1535 +-1961 +-2209 +-2521 +-2816 +-2747 +-2131 +-1156 +-240 +328 +556 +688 +891 +1132 +1253 +1311 +1459 +1629 +1676 +1569 +1337 +1077 +874 +639 +288 +-115 +-383 +-513 +-652 +-905 +-1153 +-1241 +-1176 +-1161 +-1308 +-1577 +-1864 +-1968 +-1727 +-1195 +-532 +158 +757 +1187 +1439 +1454 +1163 +740 +474 +460 +624 +783 +839 +806 +678 +463 +209 +-55 +-263 +-312 +-222 +-106 +-31 +-5 +34 +178 +387 +592 +731 +673 +395 +34 +-354 +-643 +-633 +-278 +147 +372 +333 +215 +155 +74 +-79 +-184 +-120 +100 +402 +667 +781 +733 +614 +518 +478 +461 +460 +457 +405 +223 +-116 +-681 +-1370 +-1886 +-2217 +-2594 +-2940 +-2881 +-2232 +-1187 +-185 +426 +636 +688 +803 +984 +1097 +1162 +1352 +1611 +1749 +1698 +1472 +1173 +917 +649 +270 +-175 +-477 +-582 +-645 +-808 +-1018 +-1121 +-1107 +-1141 +-1321 +-1613 +-1914 +-2042 +-1815 +-1258 +-542 +194 +804 +1205 +1409 +1402 +1126 +712 +424 +395 +584 +815 +939 +926 +768 +479 +134 +-174 +-389 +-394 +-244 +-72 +44 +100 +145 +250 +408 +535 +630 +578 +364 +94 +-226 +-489 +-515 +-245 +118 +285 +194 +41 +-9 +-19 +-92 +-150 +-75 +139 +432 +676 +750 +649 +482 +381 +389 +458 +534 +571 +533 +343 +-16 +-596 +-1334 +-1925 +-2292 +-2636 +-2914 +-2835 +-2192 +-1160 +-172 +410 +568 +559 +640 +854 +1042 +1162 +1376 +1676 +1848 +1821 +1582 +1222 +876 +544 +167 +-228 +-450 +-465 +-454 +-621 +-903 +-1100 +-1149 +-1188 +-1367 +-1663 +-1960 +-2079 +-1818 +-1209 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a5_880_000.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a5_880_000.samples new file mode 100644 index 00000000..f965cd0e --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_a5_880_000.samples @@ -0,0 +1,4096 @@ +1610 +1927 +2025 +1868 +1595 +1323 +1067 +929 +954 +1053 +1078 +971 +787 +595 +452 +407 +427 +473 +551 +531 +284 +-149 +-635 +-1144 +-1616 +-1920 +-1968 +-1803 +-1570 +-1309 +-1073 +-951 +-915 +-877 +-822 +-712 +-558 +-451 +-441 +-498 +-582 +-670 +-741 +-717 +-603 +-398 +-116 +239 +671 +1135 +1558 +1892 +2032 +1906 +1631 +1353 +1094 +932 +940 +1038 +1080 +993 +821 +632 +478 +411 +419 +452 +530 +544 +343 +-60 +-543 +-1057 +-1550 +-1896 +-1988 +-1845 +-1615 +-1357 +-1101 +-953 +-907 +-874 +-831 +-738 +-586 +-460 +-430 +-481 +-572 +-669 +-750 +-743 +-636 +-438 +-159 +187 +605 +1070 +1501 +1850 +2023 +1933 +1671 +1396 +1136 +951 +932 +1020 +1081 +1012 +849 +658 +495 +408 +407 +437 +515 +560 +405 +30 +-444 +-950 +-1463 +-1855 +-2002 +-1894 +-1671 +-1413 +-1144 +-966 +-907 +-873 +-835 +-756 +-608 +-470 +-423 +-466 +-556 +-654 +-742 +-756 +-660 +-474 +-205 +130 +534 +990 +1431 +1799 +2012 +1966 +1719 +1439 +1177 +975 +926 +1005 +1080 +1038 +882 +685 +507 +396 +384 +412 +491 +566 +465 +121 +-349 +-860 +-1384 +-1814 +-2009 +-1931 +-1711 +-1453 +-1178 +-982 +-913 +-888 +-851 +-777 +-635 +-483 +-420 +-452 +-539 +-633 +-728 +-761 +-682 +-511 +-251 +75 +464 +910 +1353 +1734 +1985 +1988 +1767 +1487 +1222 +997 +922 +989 +1081 +1061 +919 +720 +531 +401 +373 +397 +471 +565 +510 +203 +-261 +-773 +-1309 +-1767 +-2011 +-1966 +-1752 +-1493 +-1217 +-998 +-915 +-891 +-859 +-799 +-666 +-506 +-421 +-442 +-524 +-623 +-720 +-763 +-693 +-530 +-284 +23 +397 +833 +1280 +1677 +1963 +2015 +1821 +1539 +1266 +1027 +922 +974 +1077 +1079 +950 +751 +553 +407 +361 +387 +460 +569 +555 +282 +-173 +-684 +-1229 +-1715 +-2010 +-2010 +-1803 +-1538 +-1254 +-1014 +-911 +-886 +-862 +-812 +-691 +-529 +-429 +-435 +-509 +-607 +-701 +-752 +-697 +-551 +-318 +-27 +326 +747 +1191 +1603 +1928 +2032 +1877 +1594 +1317 +1064 +925 +960 +1070 +1098 +990 +795 +586 +419 +353 +376 +443 +558 +575 +341 +-106 +-618 +-1162 +-1661 +-1984 +-2022 +-1828 +-1565 +-1282 +-1029 +-907 +-888 +-873 +-839 +-735 +-571 +-450 +-438 +-504 +-598 +-683 +-742 +-704 +-579 +-368 +-94 +245 +658 +1114 +1540 +1894 +2049 +1925 +1647 +1361 +1093 +924 +934 +1044 +1100 +1011 +824 +607 +428 +351 +370 +438 +556 +600 +406 +-22 +-534 +-1075 +-1591 +-1946 +-2035 +-1861 +-1604 +-1325 +-1062 +-924 +-899 +-884 +-852 +-755 +-596 +-460 +-427 +-481 +-570 +-657 +-729 +-712 +-607 +-423 +-165 +160 +564 +1028 +1473 +1851 +2053 +1964 +1689 +1394 +1121 +929 +922 +1033 +1109 +1038 +853 +633 +446 +351 +361 +421 +532 +605 +454 +56 +-449 +-980 +-1502 +-1888 +-2027 +-1898 +-1652 +-1381 +-1111 +-943 +-905 +-891 +-857 +-776 +-622 +-474 +-422 +-460 +-542 +-628 +-709 +-715 +-629 +-465 +-219 +98 +498 +964 +1419 +1805 +2048 +2006 +1740 +1435 +1146 +932 +894 +1004 +1106 +1066 +897 +677 +481 +368 +370 +421 +517 +598 +484 +117 +-376 +-893 +-1422 +-1842 +-2023 +-1930 +-1690 +-1418 +-1142 +-953 +-906 +-894 +-869 +-804 +-660 +-503 +-430 +-455 +-530 +-616 +-700 +-724 +-647 +-495 +-261 +49 +434 +891 +1353 +1753 +2022 +2025 +1787 +1476 +1196 +965 +900 +993 +1104 +1086 +930 +716 +513 +381 +363 +402 +483 +579 +516 +192 +-281 +-788 +-1323 +-1778 +-2014 +-1965 +-1741 +-1472 +-1193 +-977 +-909 +-900 +-877 +-827 +-691 +-523 +-432 +-438 +-505 +-589 +-678 +-725 +-675 +-539 +-312 +-10 +373 +825 +1290 +1696 +1990 +2040 +1825 +1518 +1232 +981 +884 +961 +1089 +1105 +973 +765 +557 +405 +362 +386 +451 +559 +541 +267 +-188 +-696 +-1235 +-1718 +-2002 +-1991 +-1782 +-1519 +-1234 +-999 +-909 +-901 +-889 +-847 +-724 +-548 +-428 +-412 +-471 +-560 +-662 +-737 +-707 +-586 +-368 +-75 +291 +735 +1208 +1634 +1963 +2057 +1872 +1566 +1280 +1027 +906 +969 +1095 +1127 +1008 +797 +576 +403 +342 +362 +428 +543 +568 +340 +-95 +-593 +-1127 +-1631 +-1962 +-2008 +-1826 +-1570 +-1293 +-1044 +-931 +-912 +-889 +-848 +-737 +-567 +-441 +-419 +-477 +-568 +-670 +-748 +-725 +-607 +-398 +-109 +249 +682 +1151 +1575 +1912 +2050 +1907 +1608 +1318 +1057 +904 +936 +1067 +1130 +1042 +848 +631 +447 +358 +359 +406 +518 +573 +399 +-8 +-503 +-1037 +-1563 +-1941 +-2039 +-1878 +-1619 +-1330 +-1062 +-921 +-901 +-896 +-871 +-790 +-626 +-473 +-429 +-470 +-560 +-659 +-745 +-734 +-622 +-424 +-146 +199 +616 +1074 +1500 +1854 +2038 +1943 +1661 +1370 +1105 +922 +922 +1038 +1120 +1058 +872 +652 +457 +346 +343 +390 +503 +590 +469 +90 +-405 +-949 +-1497 +-1912 +-2060 +-1926 +-1675 +-1391 +-1109 +-934 +-898 +-888 +-869 +-795 +-632 +-468 +-406 +-448 +-541 +-643 +-735 +-741 +-638 +-451 +-187 +133 +521 +968 +1401 +1777 +2011 +1975 +1719 +1426 +1152 +942 +909 +1015 +1113 +1075 +910 +692 +487 +353 +336 +372 +475 +586 +514 +169 +-314 +-845 +-1399 +-1842 +-2043 +-1945 +-1704 +-1428 +-1139 +-944 +-895 +-888 +-874 +-817 +-672 +-504 +-424 +-447 +-529 +-624 +-713 +-733 +-649 +-479 +-233 +71 +445 +882 +1325 +1718 +1993 +2008 +1777 +1481 +1202 +965 +897 +987 +1104 +1092 +945 +727 +513 +365 +338 +380 +478 +599 +556 +246 +-235 +-765 +-1324 +-1795 +-2036 +-1973 +-1734 +-1460 +-1169 +-952 +-889 +-887 +-878 +-832 +-701 +-531 +-434 +-446 +-521 +-614 +-696 +-733 +-664 +-513 +-285 +5 +362 +793 +1249 +1663 +1971 +2035 +1830 +1528 +1245 +991 +890 +968 +1095 +1114 +984 +767 +545 +379 +338 +377 +468 +596 +591 +313 +-160 +-687 +-1244 +-1737 +-2023 +-2007 +-1782 +-1513 +-1228 +-990 +-903 +-901 +-887 +-844 +-721 +-543 +-428 +-424 +-499 +-591 +-683 +-734 +-687 +-559 +-349 +-76 +273 +703 +1175 +1610 +1956 +2072 +1903 +1597 +1301 +1031 +894 +949 +1078 +1118 +1002 +790 +565 +390 +333 +374 +458 +588 +609 +368 +-91 +-613 +-1161 +-1667 +-1992 +-2025 +-1820 +-1560 +-1278 +-1028 +-918 +-907 +-889 +-850 +-745 +-575 +-449 +-431 +-492 +-581 +-669 +-734 +-705 +-594 +-401 +-136 +204 +629 +1104 +1551 +1914 +2073 +1942 +1639 +1341 +1064 +904 +935 +1064 +1132 +1041 +837 +609 +422 +345 +374 +443 +559 +603 +406 +-25 +-528 +-1062 +-1574 +-1939 +-2023 +-1857 +-1603 +-1324 +-1063 +-926 +-908 +-893 +-866 +-777 +-612 +-472 +-432 +-476 +-559 +-643 +-721 +-714 +-622 +-443 +-183 +152 +569 +1042 +1491 +1867 +2067 +1973 +1683 +1377 +1101 +916 +920 +1046 +1130 +1062 +872 +648 +456 +359 +372 +423 +528 +600 +455 +61 +-429 +-952 +-1476 +-1878 +-2025 +-1901 +-1659 +-1386 +-1115 +-944 +-911 +-901 +-876 +-802 +-643 +-486 +-427 +-456 +-535 +-619 +-701 +-716 +-638 +-477 +-225 +98 +499 +961 +1414 +1802 +2041 +1997 +1723 +1415 +1139 +932 +904 +1021 +1124 +1083 +915 +698 +502 +382 +370 +401 +490 +581 +488 +137 +-338 +-852 +-1386 +-1822 +-2019 +-1933 +-1703 +-1432 +-1157 +-967 +-920 +-913 +-890 +-826 +-676 +-506 +-423 +-439 +-514 +-606 +-698 +-732 +-664 +-513 +-274 +41 +430 +885 +1342 +1741 +2009 +2020 +1779 +1467 +1188 +956 +893 +992 +1106 +1093 +942 +725 +523 +385 +359 +391 +469 +573 +524 +217 +-245 +-751 +-1289 +-1759 +-2013 +-1975 +-1752 +-1487 +-1208 +-990 +-918 +-901 +-878 +-827 +-697 +-531 +-431 +-438 +-509 +-603 +-698 +-747 +-690 +-546 +-313 +-6 +371 +815 +1272 +1672 +1963 +2023 +1814 +1508 +1230 +990 +897 +975 +1097 +1110 +977 +766 +558 +399 +353 +373 +440 +555 +554 +298 +-145 +-650 +-1194 +-1690 +-1993 +-2002 +-1806 +-1543 +-1258 +-1013 +-912 +-898 +-883 +-848 +-732 +-558 +-433 +-418 +-483 +-578 +-679 +-744 +-702 +-566 +-342 +-50 +308 +733 +1185 +1598 +1917 +2026 +1859 +1557 +1280 +1029 +908 +958 +1082 +1120 +1014 +813 +599 +424 +351 +364 +424 +546 +584 +373 +-57 +-559 +-1105 +-1622 +-1964 +-2024 +-1841 +-1577 +-1294 +-1035 +-914 +-900 +-889 +-859 +-756 +-585 +-448 +-421 +-477 +-571 +-666 +-741 +-711 +-587 +-375 +-94 +246 +654 +1099 +1517 +1862 +2031 +1914 +1625 +1342 +1078 +916 +937 +1059 +1123 +1039 +848 +630 +443 +350 +355 +409 +531 +602 +435 +26 +-478 +-1023 +-1559 +-1939 +-2039 +-1877 +-1613 +-1327 +-1058 +-915 +-898 +-891 +-868 +-784 +-617 +-469 +-427 +-472 +-565 +-660 +-733 +-711 +-593 +-399 +-138 +179 +568 +1014 +1448 +1817 +2030 +1960 +1683 +1392 +1123 +932 +919 +1035 +1116 +1056 +876 +652 +453 +341 +343 +398 +518 +612 +486 +102 +-397 +-937 +-1477 +-1888 +-2041 +-1912 +-1657 +-1378 +-1101 +-930 +-900 +-898 +-882 +-813 +-656 +-498 +-433 +-467 +-554 +-641 +-720 +-718 +-616 +-438 +-185 +123 +498 +936 +1374 +1763 +2009 +1991 +1736 +1436 +1161 +942 +902 +1008 +1110 +1081 +920 +701 +497 +365 +354 +402 +509 +615 +524 +168 +-321 +-852 +-1395 +-1832 +-2027 +-1937 +-1693 +-1417 +-1136 +-946 +-902 +-904 +-892 +-832 +-688 +-521 +-444 +-464 +-541 +-625 +-700 +-715 +-634 +-482 +-249 +47 +416 +854 +1309 +1711 +1997 +2030 +1796 +1493 +1207 +964 +892 +984 +1101 +1093 +944 +726 +519 +380 +356 +400 +495 +607 +552 +229 +-257 +-782 +-1325 +-1783 +-2025 +-1975 +-1737 +-1466 +-1183 +-971 +-906 +-906 +-890 +-842 +-711 +-541 +-442 +-448 +-516 +-599 +-682 +-720 +-660 +-525 +-308 +-25 +337 +776 +1243 +1663 +1981 +2058 +1855 +1546 +1251 +999 +895 +970 +1094 +1109 +972 +750 +535 +380 +346 +386 +471 +586 +569 +288 +-178 +-690 +-1230 +-1706 +-1999 +-1992 +-1772 +-1509 +-1233 +-1006 +-918 +-914 +-894 +-851 +-732 +-561 +-447 +-439 +-498 +-582 +-667 +-725 +-689 +-572 +-366 +-84 +271 +707 +1182 +1613 +1955 +2069 +1894 +1582 +1285 +1028 +902 +957 +1087 +1125 +1005 +793 +575 +408 +357 +392 +462 +570 +580 +340 +-101 +-596 +-1121 +-1612 +-1944 +-2004 +-1820 +-1566 +-1294 +-1047 +-930 +-915 +-897 +-864 +-761 +-595 +-467 +-439 +-485 +-563 +-649 +-718 +-702 +-598 +-404 +-126 +226 +654 +1119 +1551 +1905 +2055 +1920 +1619 +1323 +1056 +903 +935 +1063 +1128 +1040 +845 +632 +455 +377 +389 +433 +534 +573 +389 +-17 +-500 +-1026 +-1543 +-1921 +-2030 +-1868 +-1612 +-1337 +-1074 +-933 +-908 +-896 +-876 +-790 +-626 +-476 +-426 +-461 +-543 +-636 +-723 +-727 +-633 +-448 +-178 +160 +575 +1036 +1479 +1846 +2041 +1950 +1665 +1370 +1104 +926 +925 +1043 +1121 +1057 +874 +660 +474 +369 +369 +407 +508 +585 +454 +80 +-399 +-922 +-1454 +-1874 +-2037 +-1914 +-1671 +-1395 +-1117 +-944 +-907 +-894 +-875 +-798 +-638 +-479 +-417 +-449 +-533 +-631 +-723 +-742 +-655 +-481 +-221 +106 +502 +954 +1396 +1780 +2013 +1975 +1717 +1421 +1148 +944 +914 +1019 +1115 +1079 +911 +696 +501 +375 +356 +389 +480 +581 +501 +168 +-302 +-817 +-1357 +-1810 +-2021 +-1939 +-1705 +-1439 +-1161 +-966 +-916 +-911 +-894 +-835 +-689 +-518 +-427 +-440 +-517 +-613 +-708 +-738 +-658 +-495 +-249 +62 +438 +875 +1320 +1708 +1974 +1988 +1757 +1465 +1192 +972 +914 +1002 +1114 +1099 +951 +740 +541 +394 +358 +381 +464 +579 +541 +241 +-219 +-733 +-1285 +-1760 +-2015 +-1969 +-1744 +-1476 +-1190 +-975 +-905 +-898 +-886 +-843 +-715 +-539 +-437 +-440 +-513 +-609 +-707 +-750 +-677 +-523 +-283 +14 +372 +795 +1238 +1637 +1940 +2007 +1812 +1523 +1248 +1009 +912 +980 +1097 +1113 +982 +776 +564 +399 +346 +368 +451 +576 +580 +318 +-138 +-654 +-1212 +-1709 +-2004 +-2001 +-1787 +-1520 +-1234 +-995 +-903 +-899 +-891 +-859 +-742 +-566 +-446 +-437 +-505 +-603 +-698 +-744 +-685 +-539 +-315 +-32 +310 +721 +1167 +1572 +1899 +2016 +1859 +1572 +1293 +1038 +907 +961 +1090 +1132 +1025 +820 +601 +420 +347 +366 +435 +560 +593 +368 +-73 +-584 +-1132 +-1642 +-1974 +-2018 +-1819 +-1554 +-1270 +-1020 +-910 +-904 +-901 +-874 +-773 +-600 +-464 +-436 +-491 +-581 +-668 +-725 +-687 +-564 +-363 +-97 +228 +631 +1083 +1511 +1866 +2032 +1914 +1631 +1344 +1077 +917 +938 +1063 +1125 +1041 +846 +625 +438 +354 +373 +439 +565 +619 +430 +8 +-499 +-1042 +-1563 +-1932 +-2025 +-1858 +-1605 +-1329 +-1071 +-934 +-917 +-911 +-888 +-801 +-636 +-484 +-439 +-482 +-563 +-644 +-712 +-691 +-586 +-404 +-152 +160 +551 +999 +1436 +1812 +2023 +1950 +1677 +1381 +1106 +918 +918 +1037 +1125 +1068 +887 +668 +478 +373 +375 +429 +535 +606 +463 +70 +-421 +-948 +-1473 +-1872 +-2016 +-1885 +-1638 +-1374 +-1115 +-956 +-929 +-918 +-892 +-817 +-662 +-501 +-434 +-461 +-536 +-620 +-694 +-696 +-609 +-449 +-212 +94 +478 +928 +1375 +1762 +2009 +1984 +1732 +1432 +1150 +933 +897 +1005 +1111 +1079 +912 +696 +504 +388 +383 +426 +519 +602 +503 +146 +-337 +-852 +-1382 +-1810 +-2006 +-1917 +-1680 +-1416 +-1147 +-961 +-918 +-912 +-892 +-832 +-687 +-520 +-438 +-452 +-524 +-609 +-688 +-713 +-642 +-495 +-262 +39 +418 +864 +1317 +1715 +1988 +2007 +1775 +1472 +1191 +964 +901 +998 +1113 +1101 +952 +737 +536 +402 +380 +414 +492 +584 +525 +212 +-247 +-751 +-1280 +-1737 +-1983 +-1938 +-1719 +-1463 +-1197 +-992 +-928 +-922 +-901 +-851 +-719 +-545 +-445 +-442 +-506 +-593 +-679 +-724 +-667 +-530 +-309 +-15 +355 +795 +1253 +1663 +1966 +2025 +1818 +1514 +1232 +994 +901 +979 +1098 +1109 +978 +770 +562 +410 +367 +392 +460 +567 +547 +276 +-171 +-666 +-1196 +-1673 +-1962 +-1966 +-1767 +-1529 +-1260 +-1030 +-937 +-925 +-905 +-858 +-738 +-566 +-449 +-435 +-494 +-582 +-673 +-732 +-692 +-566 +-350 +-59 +302 +729 +1184 +1596 +1919 +2022 +1851 +1554 +1272 +1023 +904 +962 +1084 +1119 +1010 +812 +603 +436 +370 +380 +434 +540 +558 +338 +-85 +-570 +-1097 +-1599 +-1935 +-1986 +-1813 +-1575 +-1308 +-1066 +-950 +-932 +-913 +-875 +-770 +-601 +-464 +-433 +-479 +-566 +-657 +-727 +-701 +-584 +-379 +-101 +247 +660 +1106 +1518 +1852 +2000 +1876 +1597 +1323 +1069 +918 +946 +1067 +1129 +1045 +858 +648 +468 +375 +370 +408 +514 +566 +395 +-3 +-484 +-1010 +-1526 +-1896 +-2001 +-1848 +-1615 +-1349 +-1087 +-945 +-924 +-906 +-876 +-793 +-629 +-481 +-432 +-472 +-557 +-652 +-732 +-716 +-602 +-405 +-134 +197 +592 +1030 +1445 +1793 +1984 +1907 +1645 +1369 +1110 +933 +932 +1044 +1124 +1065 +892 +682 +494 +384 +373 +407 +505 +580 +452 +80 +-398 +-919 +-1451 +-1860 +-2015 +-1889 +-1650 +-1386 +-1114 +-944 +-911 +-903 +-885 +-818 +-660 +-496 +-429 +-457 +-543 +-637 +-721 +-722 +-621 +-439 +-181 +135 +511 +941 +1363 +1730 +1967 +1941 +1701 +1425 +1164 +962 +924 +1024 +1118 +1080 +920 +710 +511 +379 +359 +393 +494 +594 +508 +160 +-319 +-844 +-1384 +-1820 +-2018 +-1924 +-1694 +-1429 +-1153 +-959 +-913 +-905 +-886 +-827 +-677 +-509 +-426 +-447 +-530 +-626 +-715 +-732 +-642 +-477 +-236 +63 +428 +857 +1293 +1685 +1960 +1982 +1763 +1477 +1209 +984 +917 +1003 +1109 +1092 +943 +727 +520 +375 +346 +382 +480 +598 +550 +233 +-245 +-766 +-1310 +-1766 +-2002 +-1951 +-1735 +-1474 +-1203 +-993 +-927 +-919 +-897 +-840 +-702 +-532 +-439 +-454 +-531 +-624 +-705 +-730 +-655 +-507 +-281 +7 +359 +785 +1233 +1641 +1946 +2023 +1837 +1535 +1255 +1003 +903 +975 +1095 +1108 +981 +774 +564 +404 +361 +394 +480 +595 +571 +285 +-183 +-698 +-1236 +-1711 +-1986 +-1981 +-1782 +-1525 +-1253 +-1021 +-930 +-918 +-900 +-854 +-734 +-560 +-447 +-443 +-511 +-604 +-685 +-726 +-665 +-533 +-325 +-53 +294 +715 +1171 +1590 +1914 +2039 +1886 +1590 +1306 +1045 +913 +958 +1075 +1110 +1001 +800 +591 +426 +367 +393 +464 +575 +580 +339 +-106 +-606 +-1134 +-1625 +-1945 +-1984 +-1813 +-1564 +-1293 +-1051 +-934 +-919 +-901 +-865 +-762 +-595 +-470 +-446 +-495 +-576 +-655 +-710 +-672 +-555 +-363 +-97 +236 +646 +1092 +1510 +1852 +2015 +1907 +1624 +1339 +1074 +914 +931 +1052 +1114 +1032 +847 +640 +464 +386 +398 +449 +550 +582 +387 +-30 +-521 +-1039 +-1544 +-1899 +-1997 +-1849 +-1602 +-1336 +-1084 +-946 +-928 +-918 +-892 +-805 +-640 +-494 +-441 +-471 +-546 +-630 +-702 +-691 +-592 +-414 +-157 +166 +568 +1018 +1447 +1808 +2013 +1942 +1666 +1374 +1105 +924 +920 +1035 +1114 +1054 +880 +674 +494 +397 +400 +441 +535 +588 +433 +43 +-439 +-950 +-1467 +-1858 +-1997 +-1881 +-1648 +-1386 +-1128 +-971 +-941 +-922 +-888 +-804 +-642 +-484 +-423 +-451 +-528 +-615 +-703 +-716 +-638 +-475 +-223 +99 +493 +943 +1386 +1763 +1996 +1971 +1716 +1415 +1147 +947 +920 +1027 +1119 +1073 +909 +700 +512 +400 +389 +421 +507 +583 +479 +131 +-337 +-843 +-1368 +-1794 +-1990 +-1912 +-1703 +-1452 +-1188 +-998 +-938 +-919 +-885 +-817 +-669 +-504 +-425 +-440 +-515 +-605 +-697 +-727 +-656 +-502 +-255 +60 +446 +893 +1335 +1720 +1970 +1979 +1748 +1448 +1178 +960 +908 +1007 +1115 +1100 +953 +744 +549 +410 +379 +401 +473 +564 +503 +194 +-264 +-767 +-1294 +-1743 +-1984 +-1937 +-1729 +-1483 +-1213 +-1004 +-932 +-919 +-893 +-835 +-702 +-529 +-429 +-432 +-502 +-597 +-691 +-735 +-673 +-524 +-288 +22 +397 +832 +1272 +1659 +1939 +1988 +1787 +1497 +1228 +998 +913 +986 +1097 +1103 +973 +770 +573 +423 +373 +392 +459 +563 +542 +272 +-173 +-674 +-1208 +-1690 +-1979 +-1982 +-1797 +-1543 +-1266 +-1029 +-927 +-906 +-879 +-837 +-720 +-549 +-435 +-430 +-501 +-599 +-698 +-752 +-697 +-557 +-326 +-28 +330 +751 +1193 +1591 +1902 +2002 +1837 +1553 +1281 +1037 +914 +962 +1075 +1106 +998 +803 +603 +438 +371 +382 +438 +549 +566 +344 +-86 +-582 +-1119 +-1623 +-1956 +-2003 +-1828 +-1578 +-1298 +-1051 +-930 +-911 +-891 +-855 +-750 +-579 +-449 +-426 +-484 +-581 +-675 +-743 +-707 +-579 +-368 +-83 +260 +667 +1107 +1517 +1851 +2013 +1902 +1625 +1350 +1096 +940 +957 +1065 +1113 +1020 +831 +621 +442 +361 +369 +426 +540 +589 +406 +-6 +-502 +-1037 +-1555 +-1920 +-2010 +-1864 +-1622 +-1349 +-1092 +-949 +-919 +-900 +-868 +-774 +-609 +-471 +-436 +-487 +-579 +-671 +-737 +-708 +-593 +-394 +-125 +202 +596 +1031 +1451 +1803 +2001 +1939 +1676 +1388 +1124 +938 +926 +1038 +1111 +1049 +876 +667 +483 +379 +380 +428 +535 +601 +451 +60 +-434 +-968 +-1500 +-1892 +-2033 +-1908 +-1661 +-1386 +-1117 +-956 +-923 +-911 +-879 +-798 +-641 +-489 +-433 +-471 +-558 +-647 +-718 +-710 +-609 +-430 +-181 +126 +506 +946 +1383 +1759 +2005 +1983 +1741 +1452 +1180 +973 +932 +1028 +1109 +1061 +894 +682 +489 +374 +369 +420 +522 +606 +493 +126 +-363 +-883 +-1411 +-1827 +-2005 +-1919 +-1693 +-1434 +-1171 +-989 +-937 +-918 +-884 +-809 +-661 +-500 +-429 +-453 +-535 +-624 +-699 +-705 +-618 +-460 +-228 +64 +434 +868 +1310 +1702 +1970 +2000 +1782 +1489 +1217 +990 +923 +1003 +1103 +1084 +935 +724 +524 +392 +370 +414 +503 +592 +515 +185 +-291 +-798 +-1319 +-1753 +-1982 +-1941 +-1728 +-1477 +-1213 +-1014 +-948 +-933 +-900 +-836 +-698 +-533 +-444 +-451 +-518 +-598 +-677 +-705 +-636 +-497 +-273 +19 +381 +808 +1254 +1647 +1946 +2019 +1827 +1529 +1244 +1004 +904 +969 +1077 +1084 +955 +757 +563 +426 +392 +419 +484 +569 +523 +233 +-222 +-717 +-1234 +-1691 +-1958 +-1962 +-1769 +-1520 +-1253 +-1034 +-945 +-928 +-899 +-843 +-722 +-553 +-447 +-439 +-497 +-580 +-664 +-711 +-664 +-540 +-330 +-45 +311 +737 +1189 +1597 +1914 +2028 +1871 +1579 +1297 +1042 +913 +952 +1062 +1089 +979 +788 +591 +438 +387 +407 +461 +552 +540 +293 +-140 +-625 +-1139 +-1614 +-1921 +-1963 +-1806 +-1569 +-1309 +-1070 +-954 +-925 +-890 +-845 +-739 +-577 +-457 +-436 +-488 +-572 +-658 +-722 +-693 +-578 +-374 +-89 +262 +681 +1128 +1540 +1871 +2009 +1881 +1601 +1322 +1070 +920 +943 +1052 +1099 +1008 +828 +636 +476 +404 +409 +445 +527 +547 +348 +-58 +-533 +-1045 +-1539 +-1890 +-1977 +-1832 +-1604 +-1344 +-1094 +-956 +-922 +-893 +-851 +-759 +-605 +-475 +-438 +-482 +-566 +-656 +-732 +-718 +-610 +-415 +-138 +207 +619 +1068 +1487 +1831 +2003 +1910 +1642 +1364 +1110 +941 +938 +1041 +1104 +1036 +868 +673 +502 +405 +398 +427 +507 +553 +398 +15 +-459 +-968 +-1475 +-1858 +-1992 +-1873 +-1652 +-1397 +-1135 +-967 +-922 +-891 +-852 +-769 +-617 +-473 +-423 +-462 +-552 +-650 +-736 +-741 +-645 +-460 +-193 +142 +543 +992 +1424 +1785 +2000 +1956 +1711 +1428 +1169 +969 +929 +1015 +1090 +1042 +883 +687 +512 +402 +389 +420 +501 +571 +457 +104 +-368 +-875 +-1396 +-1809 +-1998 +-1912 +-1700 +-1452 +-1186 +-994 +-928 +-896 +-854 +-782 +-643 +-490 +-425 +-456 +-542 +-642 +-732 +-750 +-659 +-483 +-225 +96 +478 +912 +1344 +1715 +1962 +1966 +1747 +1470 +1211 +1001 +942 +1015 +1100 +1071 +922 +726 +540 +408 +379 +400 +470 +556 +491 +175 +-286 +-789 +-1314 +-1759 +-1989 +-1944 +-1750 +-1503 +-1233 +-1019 +-935 +-902 +-861 +-802 +-671 +-513 +-435 +-454 +-536 +-634 +-720 +-747 +-670 +-508 +-265 +42 +414 +840 +1274 +1655 +1933 +1986 +1801 +1527 +1264 +1033 +933 +985 +1077 +1073 +944 +752 +562 +421 +380 +403 +471 +568 +532 +250 +-206 +-714 +-1249 +-1720 +-1996 +-1986 +-1794 +-1549 +-1273 +-1036 +-929 +-897 +-861 +-817 +-701 +-542 +-444 +-451 +-524 +-620 +-708 +-747 +-681 +-532 +-304 +-12 +338 +755 +1196 +1596 +1905 +2007 +1854 +1585 +1318 +1071 +940 +971 +1069 +1087 +976 +785 +585 +430 +376 +398 +460 +560 +559 +311 +-131 +-632 +-1164 +-1650 +-1960 +-1994 +-1813 +-1574 +-1307 +-1062 +-947 +-915 +-877 +-829 +-720 +-562 +-450 +-441 +-504 +-593 +-678 +-727 +-676 +-545 +-338 +-66 +267 +670 +1112 +1524 +1858 +2007 +1893 +1629 +1357 +1100 +942 +953 +1053 +1092 +999 +814 +613 +448 +375 +392 +450 +549 +572 +363 +-64 +-561 +-1080 +-1572 +-1912 +-1992 +-1834 +-1593 +-1328 +-1083 +-947 +-915 +-884 +-844 +-751 +-598 +-472 +-441 +-491 +-577 +-661 +-719 +-689 +-572 +-382 +-122 +201 +595 +1039 +1465 +1822 +2010 +1935 +1676 +1396 +1130 +946 +933 +1028 +1088 +1017 +846 +646 +478 +391 +403 +448 +537 +575 +401 +0 +-488 +-996 +-1497 +-1868 +-1993 +-1864 +-1634 +-1374 +-1121 +-967 +-923 +-894 +-854 +-771 +-621 +-483 +-438 +-475 +-553 +-634 +-704 +-698 +-604 +-434 +-187 +128 +518 +964 +1404 +1779 +2005 +1967 +1722 +1440 +1170 +969 +931 +1017 +1091 +1040 +878 +681 +508 +405 +403 +439 +516 +571 +442 +74 +-407 +-910 +-1416 +-1818 +-1990 +-1901 +-1685 +-1431 +-1172 +-988 +-924 +-891 +-847 +-776 +-633 +-483 +-424 +-457 +-537 +-627 +-709 +-726 +-646 +-486 +-243 +69 +458 +909 +1357 +1743 +1998 +1998 +1771 +1481 +1206 +985 +917 +993 +1081 +1053 +905 +711 +533 +419 +404 +432 +497 +561 +468 +137 +-325 +-817 +-1331 +-1758 +-1977 +-1928 +-1720 +-1472 +-1207 +-1005 +-928 +-895 +-853 +-790 +-660 +-510 +-434 +-452 +-527 +-617 +-706 +-743 +-680 +-535 +-299 +11 +394 +842 +1295 +1692 +1972 +2015 +1814 +1525 +1251 +1016 +921 +983 +1079 +1068 +933 +740 +555 +426 +395 +418 +476 +554 +503 +215 +-229 +-719 +-1233 +-1693 +-1964 +-1964 +-1776 +-1535 +-1269 +-1044 +-942 +-905 +-864 +-805 +-684 +-527 +-430 +-435 +-506 +-601 +-695 +-746 +-699 +-565 +-339 +-36 +338 +778 +1232 +1634 +1936 +2021 +1851 +1568 +1298 +1055 +933 +971 +1069 +1083 +969 +783 +594 +447 +394 +406 +453 +537 +519 +278 +-148 +-630 +-1147 +-1629 +-1940 +-1983 +-1814 +-1578 +-1315 +-1074 +-948 +-903 +-862 +-815 +-712 +-560 +-445 +-431 +-494 +-588 +-685 +-751 +-716 +-588 +-368 +-74 +284 +702 +1149 +1559 +1881 +2014 +1888 +1620 +1350 +1100 +949 +961 +1055 +1088 +994 +813 +624 +464 +388 +392 +430 +516 +540 +345 +-58 +-537 +-1052 +-1552 +-1906 +-1999 +-1852 +-1617 +-1354 +-1103 +-960 +-917 +-877 +-834 +-743 +-588 +-461 +-434 +-487 +-580 +-674 +-745 +-720 +-601 +-392 +-107 +234 +639 +1076 +1484 +1820 +1996 +1916 +1666 +1396 +1141 +965 +949 +1037 +1090 +1017 +849 +657 +489 +394 +385 +415 +498 +547 +397 +21 +-449 +-958 +-1469 +-1860 +-2002 +-1890 +-1663 +-1400 +-1137 +-969 +-917 +-884 +-845 +-763 +-613 +-471 +-431 +-476 +-569 +-661 +-737 +-725 +-613 +-422 +-156 +167 +551 +985 +1409 +1766 +1984 +1952 +1720 +1453 +1195 +991 +942 +1012 +1077 +1023 +869 +677 +501 +391 +377 +408 +491 +565 +457 +105 +-365 +-877 +-1404 +-1819 +-2004 +-1920 +-1701 +-1446 +-1179 +-989 +-920 +-882 +-843 +-777 +-636 +-493 +-435 +-470 +-559 +-652 +-730 +-733 +-634 +-456 +-204 +103 +475 +899 +1329 +1703 +1961 +1980 +1773 +1501 +1236 +1010 +933 +991 +1065 +1035 +891 +700 +521 +404 +382 +410 +486 +569 +489 +163 +-304 +-810 +-1336 +-1778 +-2001 +-1950 +-1738 +-1483 +-1213 +-1005 +-920 +-887 +-849 +-790 +-660 +-511 +-436 +-460 +-543 +-635 +-720 +-737 +-657 +-498 +-263 +30 +392 +816 +1260 +1663 +1958 +2023 +1841 +1566 +1293 +1050 +940 +978 +1058 +1045 +912 +719 +534 +406 +382 +415 +486 +574 +525 +231 +-226 +-731 +-1252 +-1714 +-1982 +-1969 +-1773 +-1526 +-1261 +-1033 +-932 +-894 +-855 +-802 +-682 +-533 +-444 +-456 +-531 +-619 +-698 +-733 +-673 +-533 +-316 +-31 +322 +745 +1196 +1614 +1935 +2038 +1884 +1605 +1326 +1074 +941 +964 +1053 +1069 +959 +772 +584 +440 +395 +423 +483 +570 +547 +287 +-161 +-655 +-1170 +-1646 +-1947 +-1982 +-1807 +-1565 +-1299 +-1063 +-943 +-906 +-869 +-822 +-714 +-558 +-450 +-442 +-506 +-594 +-678 +-735 +-697 +-573 +-370 +-96 +249 +668 +1126 +1554 +1902 +2048 +1927 +1653 +1372 +1108 +950 +949 +1038 +1069 +974 +796 +610 +462 +403 +423 +470 +552 +555 +336 +-85 +-572 +-1078 +-1569 +-1915 +-1996 +-1849 +-1615 +-1356 +-1105 +-966 +-919 +-877 +-827 +-728 +-575 +-454 +-433 +-486 +-574 +-661 +-734 +-721 +-618 +-430 +-159 +181 +598 +1059 +1495 +1854 +2040 +1963 +1703 +1420 +1153 +966 +940 +1022 +1074 +996 +827 +638 +477 +398 +410 +450 +525 +555 +382 +-9 +-483 +-983 +-1477 +-1856 +-1994 +-1883 +-1664 +-1414 +-1162 +-996 +-936 +-891 +-841 +-752 +-601 +-465 +-425 +-469 +-555 +-647 +-726 +-731 +-643 +-466 +-205 +127 +535 +990 +1427 +1802 +2021 +1983 +1742 +1458 +1194 +991 +944 +1019 +1080 +1023 +862 +672 +506 +413 +411 +437 +503 +547 +416 +65 +-391 +-880 +-1381 +-1790 +-1985 +-1916 +-1709 +-1464 +-1203 +-1010 +-934 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b3_246_942.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b3_246_942.samples new file mode 100644 index 00000000..7ecdfb89 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b3_246_942.samples @@ -0,0 +1,4096 @@ +416 +353 +264 +150 +45 +-22 +-48 +-41 +-26 +-11 +-11 +-35 +-105 +-227 +-419 +-695 +-1052 +-1472 +-1900 +-2294 +-2619 +-2852 +-2976 +-2954 +-2773 +-2402 +-1822 +-1085 +-325 +289 +703 +945 +1103 +1254 +1374 +1420 +1409 +1402 +1422 +1447 +1413 +1316 +1212 +1151 +1117 +1074 +994 +826 +605 +392 +269 +250 +269 +264 +212 +142 +100 +146 +249 +325 +332 +300 +241 +186 +170 +185 +207 +198 +104 +-62 +-262 +-471 +-653 +-787 +-892 +-994 +-1076 +-1140 +-1217 +-1345 +-1530 +-1732 +-1924 +-2118 +-2293 +-2370 +-2315 +-2064 +-1630 +-1099 +-552 +-60 +366 +758 +1111 +1393 +1596 +1752 +1879 +1909 +1800 +1626 +1452 +1299 +1196 +1149 +1139 +1120 +1087 +1037 +973 +884 +792 +731 +667 +534 +359 +213 +148 +191 +313 +458 +587 +676 +736 +795 +843 +869 +842 +741 +551 +247 +-125 +-496 +-802 +-984 +-1050 +-1050 +-1009 +-938 +-846 +-776 +-740 +-743 +-756 +-736 +-684 +-626 +-572 +-483 +-327 +-116 +66 +152 +139 +93 +70 +103 +178 +266 +341 +393 +423 +418 +394 +359 +302 +245 +178 +90 +12 +-31 +-32 +14 +103 +211 +323 +384 +376 +329 +261 +169 +67 +-8 +-58 +-65 +-56 +-46 +-40 +-63 +-128 +-245 +-441 +-730 +-1106 +-1546 +-1985 +-2373 +-2678 +-2888 +-2978 +-2920 +-2704 +-2290 +-1673 +-915 +-175 +394 +756 +964 +1121 +1286 +1417 +1462 +1446 +1433 +1442 +1442 +1383 +1278 +1185 +1142 +1122 +1086 +994 +811 +582 +372 +264 +248 +252 +226 +164 +106 +100 +176 +289 +351 +340 +300 +238 +196 +179 +183 +191 +158 +62 +-92 +-276 +-477 +-666 +-819 +-953 +-1060 +-1125 +-1164 +-1223 +-1360 +-1554 +-1764 +-1986 +-2170 +-2312 +-2375 +-2300 +-2020 +-1557 +-999 +-434 +61 +483 +859 +1189 +1438 +1617 +1766 +1883 +1891 +1774 +1607 +1436 +1294 +1204 +1171 +1159 +1126 +1069 +1004 +936 +861 +790 +739 +665 +510 +329 +190 +146 +202 +326 +469 +584 +668 +729 +782 +828 +845 +810 +714 +515 +208 +-171 +-554 +-853 +-1015 +-1052 +-1025 +-969 +-901 +-823 +-768 +-738 +-735 +-728 +-693 +-639 +-594 +-548 +-457 +-277 +-64 +100 +154 +113 +63 +56 +119 +213 +302 +359 +389 +401 +388 +363 +333 +280 +223 +153 +67 +2 +-25 +-12 +37 +119 +228 +338 +401 +393 +343 +262 +149 +36 +-37 +-68 +-60 +-43 +-27 +-23 +-50 +-126 +-264 +-488 +-804 +-1201 +-1642 +-2069 +-2440 +-2731 +-2922 +-2981 +-2903 +-2667 +-2238 +-1604 +-841 +-112 +439 +788 +994 +1161 +1336 +1458 +1484 +1452 +1421 +1415 +1405 +1350 +1263 +1191 +1153 +1127 +1077 +966 +776 +543 +344 +247 +235 +237 +209 +152 +101 +108 +189 +294 +341 +328 +290 +235 +192 +172 +179 +191 +168 +70 +-87 +-293 +-525 +-727 +-875 +-985 +-1063 +-1106 +-1145 +-1222 +-1392 +-1616 +-1828 +-2025 +-2198 +-2334 +-2379 +-2271 +-1946 +-1443 +-868 +-313 +151 +543 +900 +1213 +1454 +1642 +1796 +1914 +1914 +1778 +1594 +1419 +1282 +1194 +1153 +1127 +1090 +1039 +992 +936 +860 +781 +729 +643 +489 +315 +193 +165 +236 +370 +510 +627 +697 +744 +782 +823 +842 +819 +720 +508 +171 +-238 +-623 +-906 +-1037 +-1058 +-1038 +-1001 +-938 +-857 +-784 +-733 +-719 +-715 +-692 +-651 +-610 +-544 +-419 +-224 +-17 +126 +156 +121 +88 +100 +161 +243 +310 +356 +388 +406 +405 +390 +351 +284 +219 +141 +57 +-3 +-28 +-18 +37 +132 +259 +374 +420 +392 +320 +228 +116 +29 +-25 +-42 +-27 +-9 +2 +-3 +-50 +-150 +-312 +-559 +-889 +-1288 +-1720 +-2125 +-2472 +-2742 +-2911 +-2960 +-2873 +-2621 +-2156 +-1488 +-715 +-12 +495 +811 +1005 +1178 +1342 +1436 +1432 +1391 +1383 +1409 +1421 +1362 +1261 +1181 +1136 +1113 +1071 +957 +752 +512 +323 +249 +253 +269 +240 +174 +120 +118 +192 +283 +321 +311 +274 +216 +173 +159 +183 +205 +177 +54 +-144 +-382 +-616 +-788 +-894 +-973 +-1046 +-1107 +-1169 +-1271 +-1448 +-1667 +-1867 +-2059 +-2230 +-2355 +-2372 +-2215 +-1840 +-1317 +-747 +-221 +210 +582 +935 +1244 +1482 +1656 +1803 +1909 +1878 +1733 +1552 +1377 +1239 +1159 +1132 +1120 +1095 +1045 +985 +907 +814 +741 +695 +610 +459 +294 +185 +174 +264 +408 +544 +645 +694 +727 +769 +826 +857 +828 +703 +440 +69 +-344 +-697 +-928 +-1021 +-1046 +-1039 +-1004 +-926 +-822 +-747 +-717 +-729 +-736 +-705 +-647 +-585 +-511 +-380 +-184 +14 +145 +169 +134 +102 +115 +172 +251 +322 +377 +422 +437 +428 +398 +346 +281 +220 +150 +63 +1 +-20 +-2 +68 +171 +291 +382 +397 +351 +283 +198 +99 +22 +-27 +-38 +-29 +-19 +-14 +-30 +-83 +-187 +-354 +-612 +-952 +-1360 +-1787 +-2192 +-2539 +-2799 +-2960 +-2982 +-2856 +-2554 +-2043 +-1341 +-565 +113 +591 +883 +1057 +1219 +1377 +1466 +1471 +1446 +1442 +1459 +1443 +1364 +1270 +1196 +1153 +1122 +1065 +932 +717 +487 +316 +255 +258 +254 +210 +135 +80 +104 +203 +302 +330 +309 +258 +193 +161 +157 +173 +178 +111 +-37 +-231 +-447 +-648 +-791 +-900 +-1002 +-1090 +-1157 +-1233 +-1341 +-1508 +-1701 +-1892 +-2076 +-2235 +-2334 +-2316 +-2120 +-1719 +-1199 +-642 +-136 +297 +692 +1060 +1354 +1560 +1724 +1870 +1948 +1886 +1716 +1522 +1350 +1230 +1171 +1156 +1143 +1106 +1046 +979 +895 +802 +742 +702 +604 +438 +275 +189 +201 +298 +429 +547 +633 +688 +749 +813 +866 +867 +794 +638 +373 +12 +-382 +-728 +-966 +-1067 +-1081 +-1046 +-978 +-887 +-800 +-750 +-742 +-754 +-742 +-691 +-629 +-577 +-507 +-369 +-167 +27 +145 +160 +128 +105 +126 +196 +279 +352 +407 +435 +429 +394 +364 +320 +275 +229 +156 +74 +14 +-6 +20 +85 +172 +277 +348 +353 +315 +261 +190 +96 +17 +-33 +-48 +-36 +-27 +-27 +-46 +-105 +-214 +-393 +-662 +-1011 +-1434 +-1875 +-2271 +-2589 +-2821 +-2935 +-2921 +-2760 +-2432 +-1902 +-1201 +-453 +181 +617 +878 +1057 +1236 +1395 +1479 +1473 +1452 +1453 +1457 +1419 +1314 +1210 +1154 +1128 +1107 +1046 +895 +675 +450 +303 +258 +251 +233 +170 +99 +66 +116 +230 +319 +327 +301 +246 +197 +170 +169 +176 +156 +82 +-57 +-231 +-433 +-629 +-790 +-924 +-1044 +-1132 +-1173 +-1219 +-1325 +-1508 +-1718 +-1924 +-2109 +-2259 +-2352 +-2317 +-2092 +-1660 +-1116 +-543 +-24 +406 +784 +1122 +1388 +1581 +1736 +1880 +1933 +1849 +1678 +1492 +1340 +1227 +1177 +1157 +1128 +1073 +1002 +937 +862 +780 +726 +680 +565 +398 +249 +175 +207 +312 +449 +569 +653 +710 +762 +812 +849 +842 +772 +614 +333 +-34 +-431 +-778 +-993 +-1066 +-1065 +-1020 +-955 +-867 +-798 +-756 +-746 +-749 +-727 +-685 +-631 +-590 +-513 +-357 +-144 +49 +139 +127 +82 +69 +113 +196 +290 +359 +400 +416 +406 +381 +358 +321 +271 +215 +134 +48 +2 +-2 +30 +100 +195 +303 +383 +392 +355 +291 +191 +81 +-3 +-48 +-50 +-31 +-14 +-11 +-32 +-96 +-219 +-421 +-720 +-1096 +-1523 +-1943 +-2313 +-2615 +-2827 +-2930 +-2898 +-2718 +-2378 +-1829 +-1094 +-333 +282 +695 +932 +1100 +1282 +1434 +1496 +1475 +1436 +1427 +1429 +1392 +1306 +1229 +1183 +1149 +1107 +1026 +856 +631 +412 +277 +242 +233 +211 +157 +102 +85 +146 +254 +321 +318 +296 +251 +203 +176 +173 +196 +200 +132 +-18 +-228 +-477 +-695 +-849 +-962 +-1049 +-1112 +-1152 +-1214 +-1333 +-1527 +-1743 +-1950 +-2138 +-2278 +-2349 +-2281 +-2029 +-1592 +-1035 +-462 +35 +435 +795 +1126 +1385 +1582 +1748 +1893 +1930 +1820 +1638 +1456 +1311 +1205 +1146 +1119 +1088 +1043 +993 +931 +841 +751 +696 +649 +530 +363 +218 +158 +202 +318 +458 +571 +645 +695 +744 +798 +840 +836 +765 +591 +288 +-115 +-523 +-850 +-1023 +-1060 +-1042 +-1006 +-952 +-871 +-790 +-724 +-702 +-709 +-698 +-655 +-608 +-551 +-460 +-293 +-84 +85 +156 +142 +106 +99 +147 +230 +310 +362 +395 +411 +409 +397 +378 +328 +264 +192 +108 +35 +-2 +-5 +27 +101 +213 +341 +415 +400 +324 +230 +118 +21 +-40 +-60 +-44 +-22 +-17 +-26 +-61 +-145 +-285 +-505 +-809 +-1185 +-1598 +-1997 +-2342 +-2621 +-2822 +-2918 +-2886 +-2701 +-2332 +-1753 +-999 +-245 +350 +741 +966 +1135 +1306 +1440 +1476 +1447 +1431 +1445 +1462 +1413 +1308 +1218 +1171 +1139 +1100 +1009 +827 +596 +387 +273 +246 +247 +220 +156 +92 +67 +125 +232 +302 +310 +294 +243 +188 +158 +164 +190 +185 +91 +-92 +-316 +-550 +-740 +-861 +-952 +-1032 +-1092 +-1140 +-1221 +-1367 +-1568 +-1775 +-1978 +-2152 +-2294 +-2349 +-2254 +-1966 +-1480 +-911 +-363 +88 +466 +829 +1169 +1433 +1622 +1773 +1898 +1916 +1802 +1626 +1438 +1284 +1179 +1142 +1127 +1101 +1051 +995 +932 +850 +770 +724 +662 +523 +360 +223 +178 +237 +364 +501 +604 +663 +703 +756 +822 +870 +856 +758 +543 +208 +-195 +-575 +-860 +-1005 +-1047 +-1047 +-1019 +-948 +-847 +-766 +-721 +-728 +-738 +-718 +-659 +-602 +-541 +-440 +-267 +-63 +90 +142 +117 +88 +94 +147 +225 +298 +355 +404 +428 +418 +383 +337 +279 +227 +175 +97 +21 +-14 +-12 +44 +139 +254 +356 +394 +360 +301 +227 +128 +38 +-22 +-39 +-27 +-17 +-16 +-29 +-70 +-155 +-295 +-520 +-828 +-1210 +-1628 +-2034 +-2394 +-2690 +-2893 +-2975 +-2923 +-2697 +-2263 +-1621 +-847 +-111 +439 +789 +987 +1150 +1325 +1451 +1484 +1458 +1447 +1465 +1471 +1413 +1303 +1217 +1170 +1138 +1096 +1001 +808 +571 +365 +266 +260 +263 +230 +156 +82 +74 +160 +280 +337 +325 +281 +212 +165 +153 +166 +182 +148 +29 +-150 +-357 +-574 +-742 +-866 +-973 +-1072 +-1142 +-1197 +-1270 +-1419 +-1615 +-1820 +-2039 +-2224 +-2356 +-2388 +-2262 +-1922 +-1421 +-851 +-301 +168 +576 +953 +1268 +1496 +1661 +1806 +1913 +1891 +1742 +1550 +1371 +1247 +1176 +1153 +1136 +1094 +1030 +964 +892 +804 +730 +697 +635 +495 +333 +212 +182 +251 +371 +498 +600 +665 +727 +791 +843 +862 +815 +702 +483 +144 +-255 +-633 +-914 +-1050 +-1081 +-1063 +-1014 +-935 +-841 +-774 +-745 +-754 +-754 +-720 +-655 +-597 +-535 +-424 +-233 +-17 +140 +188 +159 +119 +118 +171 +246 +320 +374 +408 +410 +393 +369 +332 +284 +238 +175 +94 +27 +2 +22 +76 +158 +255 +343 +377 +354 +311 +250 +163 +77 +11 +-20 +-14 +-7 +0 +-10 +-56 +-151 +-308 +-548 +-869 +-1259 +-1683 +-2084 +-2433 +-2704 +-2896 +-2965 +-2876 +-2616 +-2154 +-1498 +-733 +-29 +483 +800 +998 +1170 +1342 +1453 +1471 +1449 +1434 +1432 +1415 +1337 +1238 +1182 +1163 +1140 +1086 +960 +751 +525 +340 +259 +237 +221 +165 +98 +62 +97 +204 +308 +330 +307 +263 +211 +181 +172 +182 +181 +135 +13 +-155 +-358 +-572 +-752 +-889 +-1008 +-1099 +-1148 +-1189 +-1271 +-1434 +-1638 +-1845 +-2062 +-2242 +-2365 +-2376 +-2209 +-1831 +-1303 +-719 +-176 +271 +645 +987 +1273 +1489 +1652 +1797 +1890 +1854 +1708 +1532 +1376 +1247 +1175 +1139 +1103 +1055 +993 +937 +873 +792 +734 +701 +626 +479 +319 +211 +196 +274 +404 +530 +627 +692 +742 +798 +850 +867 +829 +707 +466 +115 +-295 +-669 +-940 +-1057 +-1074 +-1044 +-987 +-917 +-841 +-785 +-748 +-733 +-713 +-682 +-636 +-598 +-541 +-409 +-205 +5 +138 +165 +133 +112 +131 +194 +279 +347 +390 +408 +400 +378 +357 +334 +291 +243 +167 +75 +12 +-8 +11 +70 +154 +259 +353 +391 +368 +314 +224 +103 +4 +-55 +-64 +-46 +-30 +-31 +-48 +-97 +-201 +-362 +-620 +-962 +-1371 +-1799 +-2187 +-2504 +-2748 +-2908 +-2931 +-2814 +-2526 +-2043 +-1366 +-605 +67 +555 +860 +1055 +1238 +1406 +1492 +1486 +1440 +1413 +1420 +1411 +1345 +1253 +1189 +1155 +1121 +1061 +928 +717 +483 +304 +239 +235 +234 +204 +147 +110 +137 +219 +301 +315 +299 +259 +206 +173 +157 +166 +170 +133 +17 +-166 +-400 +-642 +-830 +-960 +-1048 +-1110 +-1150 +-1205 +-1312 +-1499 +-1725 +-1930 +-2124 +-2283 +-2387 +-2375 +-2177 +-1766 +-1218 +-629 +-100 +329 +691 +1030 +1319 +1544 +1713 +1852 +1930 +1871 +1716 +1537 +1373 +1245 +1166 +1132 +1103 +1058 +998 +934 +858 +778 +721 +682 +596 +439 +279 +182 +181 +276 +408 +532 +621 +675 +734 +791 +850 +867 +812 +668 +396 +19 +-392 +-747 +-969 +-1050 +-1049 +-1022 +-978 +-901 +-814 +-743 +-707 +-707 +-709 +-683 +-637 +-582 +-501 +-362 +-161 +24 +133 +144 +110 +95 +126 +199 +281 +344 +382 +403 +411 +408 +394 +344 +276 +209 +132 +63 +22 +12 +29 +87 +184 +306 +400 +410 +354 +272 +176 +76 +4 +-41 +-51 +-40 +-32 +-30 +-46 +-109 +-223 +-402 +-662 +-1002 +-1403 +-1814 +-2204 +-2529 +-2774 +-2916 +-2940 +-2825 +-2521 +-1995 +-1278 +-505 +157 +617 +901 +1090 +1267 +1422 +1487 +1465 +1425 +1422 +1442 +1429 +1357 +1264 +1197 +1155 +1119 +1053 +912 +699 +477 +317 +262 +259 +249 +198 +132 +90 +117 +212 +298 +324 +311 +270 +218 +187 +188 +208 +204 +131 +-36 +-255 +-486 +-690 +-828 +-924 +-1011 +-1089 +-1155 +-1237 +-1366 +-1558 +-1769 +-1973 +-2158 +-2308 +-2386 +-2333 +-2091 +-1646 +-1097 +-529 +-36 +373 +742 +1090 +1378 +1584 +1735 +1859 +1905 +1831 +1676 +1495 +1337 +1215 +1148 +1119 +1089 +1047 +989 +928 +847 +756 +699 +660 +565 +419 +279 +200 +209 +297 +422 +531 +608 +657 +709 +776 +832 +840 +776 +607 +318 +-61 +-457 +-788 +-991 +-1070 +-1080 +-1047 +-987 +-894 +-799 +-738 +-714 +-714 +-699 +-660 +-612 +-562 +-478 +-325 +-124 +55 +149 +152 +126 +118 +143 +201 +268 +327 +372 +400 +405 +386 +357 +307 +254 +200 +128 +45 +-4 +-9 +29 +108 +205 +305 +364 +355 +308 +251 +175 +83 +10 +-38 +-47 +-38 +-32 +-37 +-67 +-135 +-253 +-435 +-706 +-1055 +-1463 +-1891 +-2282 +-2596 +-2824 +-2937 +-2913 +-2746 +-2389 +-1823 +-1104 +-354 +259 +683 +940 +1111 +1279 +1415 +1471 +1463 +1443 +1445 +1446 +1403 +1306 +1208 +1154 +1127 +1098 +1028 +869 +656 +450 +319 +282 +273 +248 +188 +120 +92 +135 +235 +310 +325 +301 +253 +202 +180 +177 +187 +168 +74 +-92 +-298 +-514 +-702 +-838 +-953 +-1055 +-1140 +-1207 +-1280 +-1410 +-1601 +-1807 +-2008 +-2185 +-2311 +-2355 +-2262 +-1988 +-1539 +-999 +-450 +36 +449 +829 +1165 +1428 +1614 +1758 +1870 +1900 +1810 +1649 +1468 +1307 +1201 +1148 +1129 +1093 +1031 +959 +886 +813 +754 +718 +677 +566 +400 +254 +183 +214 +320 +443 +542 +615 +680 +753 +827 +873 +847 +744 +546 +243 +-130 +-501 +-804 +-985 +-1046 +-1047 +-1004 +-935 +-837 +-762 +-723 +-723 +-728 +-697 +-636 +-571 +-516 +-435 +-285 +-85 +81 +168 +162 +125 +111 +144 +215 +295 +355 +388 +390 +375 +348 +326 +285 +238 +179 +99 +28 +-11 +-3 +38 +111 +205 +299 +355 +349 +312 +254 +162 +64 +-12 +-55 +-52 +-39 +-24 +-28 +-54 +-128 +-258 +-467 +-767 +-1143 +-1573 +-1996 +-2382 +-2683 +-2886 +-2965 +-2903 +-2693 +-2288 +-1685 +-952 +-222 +355 +739 +980 +1163 +1337 +1472 +1512 +1485 +1458 +1455 +1447 +1399 +1302 +1221 +1177 +1148 +1111 +1018 +835 +602 +393 +272 +239 +234 +206 +153 +105 +101 +170 +269 +317 +310 +280 +230 +187 +167 +167 +166 +142 +48 +-111 +-305 +-525 +-728 +-883 +-1002 +-1099 +-1161 +-1211 +-1294 +-1444 +-1652 +-1861 +-2052 +-2210 +-2321 +-2353 +-2249 +-1950 +-1472 +-905 +-346 +144 +549 +912 +1223 +1465 +1642 +1780 +1885 +1885 +1772 +1601 +1427 +1286 +1195 +1153 +1122 +1073 +1015 +955 +895 +827 +760 +718 +657 +529 +368 +241 +191 +234 +342 +464 +573 +657 +721 +788 +846 +865 +827 +712 +500 +183 +-208 +-595 +-894 +-1050 +-1085 +-1059 +-1006 +-936 +-858 +-796 +-751 +-727 +-708 +-680 +-638 +-596 +-547 +-442 +-266 +-60 +98 +157 +137 +114 +119 +167 +241 +312 +359 +381 +385 +372 +356 +339 +293 +238 +165 +73 +5 +-18 +4 +61 +143 +242 +342 +397 +395 +348 +273 +163 +58 +-17 +-52 +-45 +-29 +-19 +-27 +-63 +-155 +-306 +-537 +-850 +-1229 +-1644 +-2055 +-2411 +-2686 +-2873 +-2940 +-2881 +-2670 +-2262 +-1653 +-905 +-179 +394 +774 +1012 +1195 +1362 +1471 +1485 +1438 +1403 +1402 +1407 +1369 +1292 +1228 +1184 +1151 +1101 +998 +814 +590 +387 +274 +238 +229 +209 +163 +117 +113 +174 +267 +320 +326 +306 +256 +212 +190 +193 +208 +180 +67 +-118 +-349 +-582 +-772 +-905 +-1003 +-1082 +-1136 +-1189 +-1282 +-1447 +-1662 +-1872 +-2069 +-2229 +-2340 +-2354 +-2213 +-1870 +-1366 +-789 +-244 +206 +580 +926 +1233 +1479 +1658 +1791 +1881 +1862 +1747 +1586 +1422 +1276 +1172 +1115 +1078 +1038 +981 +924 +865 +796 +733 +695 +633 +506 +356 +239 +204 +253 +358 +473 +572 +649 +711 +773 +835 +868 +840 +737 +511 +166 +-241 +-620 +-899 +-1033 +-1070 +-1062 +-1026 +-957 +-862 +-782 +-724 +-712 +-706 +-689 +-647 +-599 +-532 +-415 +-232 +-34 +97 +140 +123 +114 +136 +196 +265 +322 +360 +384 +394 +393 +381 +347 +288 +227 +155 +78 +20 +1 +17 +70 +159 +266 +360 +391 +353 +285 +197 +94 +11 +-35 +-46 +-29 +-15 +-12 +-30 +-79 +-175 +-333 +-578 +-905 +-1296 +-1711 +-2096 +-2426 +-2681 +-2869 +-2934 +-2851 +-2603 +-2153 +-1519 +-775 +-75 +461 +816 +1040 +1221 +1382 +1482 +1487 +1448 +1427 +1428 +1432 +1381 +1293 +1215 +1157 +1113 +1056 +944 +757 +539 +353 +262 +247 +250 +214 +149 +89 +86 +159 +258 +312 +315 +287 +241 +212 +211 +226 +225 +165 +17 +-188 +-413 +-623 +-780 +-889 +-981 +-1068 +-1135 +-1199 +-1302 +-1462 +-1671 +-1891 +-2090 +-2253 +-2355 +-2349 +-2180 +-1815 +-1309 +-746 +-215 +245 +645 +1009 +1319 +1545 +1702 +1825 +1897 +1861 +1730 +1564 +1401 +1267 +1186 +1147 +1117 +1075 +1014 +942 +865 +783 +724 +688 +613 +479 +328 +219 +192 +252 +366 +481 +580 +652 +722 +791 +850 +862 +808 +665 +415 +72 +-311 +-655 +-905 +-1024 +-1058 +-1037 +-988 +-910 +-824 +-758 +-728 +-725 +-724 +-693 +-638 +-575 +-496 +-377 +-205 +-34 +86 +125 +117 +109 +125 +173 +239 +306 +365 +408 +426 +411 +382 +334 +273 +218 +152 +80 +30 +18 +42 +103 +189 +283 +356 +368 +328 +268 +198 +117 +45 +-9 +-38 +-43 +-42 +-47 +-68 +-119 +-221 +-389 +-640 +-974 +-1369 +-1790 +-2187 +-2524 +-2779 +-2929 +-2945 +-2831 +-2549 +-2069 +-1408 +-659 +22 +538 +879 +1097 +1275 +1433 +1518 +1516 +1479 +1455 +1450 +1426 +1361 +1274 +1213 +1175 +1127 +1056 +920 +716 +496 +325 +246 +229 +214 +171 +108 +70 +94 +183 +276 +314 +309 +278 +237 +212 +206 +207 +193 +123 +-11 +-191 +-389 +-582 +-743 +-871 +-986 +-1083 +-1151 +-1216 +-1321 +-1498 +-1707 +-1914 +-2095 +-2239 +-2344 +-2329 +-2150 +-1771 +-1253 +-685 +-154 +297 +698 +1063 +1359 +1568 +1711 +1820 +1880 +1831 +1696 +1528 +1374 +1258 +1188 +1158 +1122 +1061 +982 +907 +842 +777 +727 +687 +601 +456 +312 +221 +214 +282 +387 +493 +587 +669 +748 +820 +866 +859 +787 +635 +368 +11 +-379 +-723 +-961 +-1070 +-1090 +-1065 +-1003 +-910 +-816 +-753 +-725 +-726 +-709 +-666 +-603 +-546 +-477 +-355 +-175 +9 +131 +168 +157 +141 +159 +210 +280 +344 +390 +410 +401 +380 +353 +323 +280 +229 +158 +78 +22 +12 +40 +99 +184 +282 +358 +382 +358 +310 +236 +135 +48 +-15 +-40 +-35 +-29 +-29 +-50 +-108 +-215 +-396 +-663 +-1010 +-1417 +-1847 +-2253 +-2595 +-2840 +-2969 +-2963 +-2817 +-2512 +-2009 +-1332 +-586 +76 +568 +887 +1103 +1293 +1460 +1549 +1538 +1488 +1451 +1442 +1423 +1366 +1290 +1229 +1183 +1139 +1069 +927 +709 +480 +310 +241 +233 +224 +178 +113 +71 +95 +183 +268 +292 +279 +247 +210 +190 +191 +197 +184 +121 +-24 +-219 +-450 +-678 +-854 +-982 +-1075 +-1140 +-1184 +-1251 +-1378 +-1568 +-1782 +-1978 +-2155 +-2302 +-2385 +-2353 +-2139 +-1725 +-1187 +-613 +-87 +358 +751 +1106 +1390 +1588 +1729 +1849 +1905 +1846 +1704 +1535 +1378 +1259 +1193 +1159 +1124 +1070 +1003 +940 +873 +802 +748 +702 +600 +446 +298 +210 +212 +293 +412 +524 +623 +703 +780 +849 +893 +878 +790 +615 +335 +-29 +-418 +-754 +-971 +-1055 +-1057 +-1029 +-982 +-908 +-838 +-780 +-744 +-726 +-704 +-666 +-619 +-570 +-491 +-342 +-138 +48 +156 +165 +134 +118 +140 +202 +277 +339 +382 +404 +407 +394 +382 +345 +287 +216 +121 +39 +-5 +-2 +34 +105 +196 +302 +381 +398 +357 +287 +185 +76 +-4 +-45 +-42 +-18 +10 +24 +18 +-42 +-166 +-373 +-675 +-1057 +-1495 +-1933 +-2333 +-2655 +-2890 +-3018 +-3005 +-2842 +-2505 +-1972 +-1270 +-513 +145 +626 +939 +1150 +1329 +1467 +1515 +1480 +1425 +1401 +1404 +1392 +1336 +1264 +1213 +1171 +1122 +1040 +876 +649 +419 +261 +208 +202 +203 +163 +103 +67 +94 +178 +258 +288 +285 +252 +211 +188 +191 +212 +213 +138 +-23 +-240 +-478 +-680 +-824 +-923 +-1001 +-1071 +-1130 +-1212 +-1346 +-1543 +-1761 +-1972 +-2159 +-2308 +-2389 +-2339 +-2099 +-1661 +-1103 +-521 +-2 +435 +823 +1181 +1467 +1676 +1814 +1907 +1922 +1824 +1660 +1476 +1313 +1190 +1125 +1090 +1055 +1004 +940 +874 +799 +722 +667 +614 +507 +357 +220 +150 +169 +266 +399 +533 +645 +736 +816 +884 +926 +916 +838 +655 +348 +-45 +-442 +-763 +-954 +-1023 +-1039 +-1018 +-967 +-877 +-780 +-705 +-674 +-674 +-665 +-635 +-583 +-526 +-442 +-299 +-110 +53 +137 +138 +112 +111 +147 +210 +276 +323 +358 +381 +388 +375 +338 +275 +205 +136 +64 +-6 +-48 +-54 +-23 +56 +172 +290 +360 +354 +297 +229 +154 +84 +38 +12 +23 +43 +64 +74 +53 +-11 +-135 +-339 +-636 +-1018 +-1461 +-1906 +-2308 +-2642 +-2886 +-3011 +-2992 +-2811 +-2444 +-1885 +-1160 +-406 +230 +685 +976 +1173 +1334 +1452 +1475 +1429 +1372 +1346 +1343 +1313 +1234 +1150 +1086 +1033 +329 +746 +962 +1079 +1179 +1231 +1177 +1043 +914 +841 +795 +714 +583 +467 +409 +394 +393 +343 +187 +-34 +-240 +-327 +-279 +-190 +-140 +-162 +-216 +-215 +-109 +57 +178 +217 +218 +197 +197 +236 +300 +373 +412 +357 +224 +61 +-103 +-225 +-278 +-298 +-308 +-305 +-297 +-333 +-475 +-725 +-1009 +-1287 +-1540 +-1751 +-1879 +-1856 +-1599 +-1127 +-544 +58 +586 +1021 +1405 +1732 +1950 +2069 +2124 +2151 +2079 +1860 +1570 +1283 +1035 +858 +761 +708 +654 +575 +500 +430 +363 +327 +329 +322 +218 +58 +-63 +-67 +59 +276 +498 +691 +848 +999 +1152 +1291 +1369 +1341 +1224 +987 +625 +182 +-252 +-586 +-744 +-747 +-671 +-563 +-439 +-307 +-214 +-172 +-183 +-217 +-238 +-244 +-263 +-286 +-269 +-154 +20 +145 +148 +49 +-77 +-159 +-159 +-102 +-27 +38 +87 +106 +94 +60 +20 +-49 +-121 +-219 +-341 +-451 +-511 +-506 +-442 +-335 +-201 +-62 +30 +59 +60 +46 +-5 +-54 +-81 +-59 +21 +124 +228 +311 +345 +312 +208 +-20 +-380 +-876 +-1455 +-2044 +-2566 +-2986 +-3276 +-3423 +-3396 +-3165 +-2703 +-1992 +-1118 +-260 +388 +777 +972 +1092 +1205 +1251 +1177 +1029 +893 +806 +749 +664 +546 +467 +437 +433 +422 +345 +164 +-74 +-281 +-358 +-319 +-243 +-208 +-224 +-240 +-204 +-70 +102 +209 +240 +243 +227 +221 +248 +308 +379 +419 +370 +241 +77 +-103 +-243 +-315 +-345 +-351 +-328 +-310 +-358 +-520 +-782 +-1064 +-1339 +-1586 +-1812 +-1949 +-1923 +-1631 +-1108 +-465 +174 +708 +1139 +1508 +1815 +2010 +2116 +2185 +2216 +2122 +1875 +1568 +1276 +1036 +875 +782 +714 +641 +563 +500 +456 +411 +366 +360 +328 +210 +62 +-39 +-22 +110 +326 +548 +750 +921 +1079 +1230 +1351 +1413 +1383 +1264 +1014 +625 +155 +-295 +-625 +-762 +-743 +-659 +-554 +-440 +-320 +-222 +-164 +-165 +-189 +-219 +-243 +-276 +-299 +-253 +-110 +70 +176 +151 +29 +-92 +-148 +-130 +-63 +0 +41 +71 +81 +74 +57 +21 +-56 +-154 +-276 +-409 +-510 +-542 +-525 +-463 +-356 +-215 +-54 +59 +90 +74 +25 +-59 +-122 +-131 +-85 +9 +112 +206 +282 +315 +272 +145 +-114 +-510 +-1020 +-1591 +-2148 +-2638 +-3020 +-3300 +-3423 +-3388 +-3161 +-2687 +-1956 +-1061 +-220 +408 +782 +967 +1096 +1212 +1234 +1122 +943 +802 +732 +697 +631 +535 +466 +433 +422 +402 +305 +94 +-157 +-358 +-411 +-347 +-256 +-208 +-220 +-241 +-204 +-72 +86 +178 +205 +205 +187 +188 +225 +302 +401 +454 +404 +254 +47 +-160 +-296 +-341 +-339 +-314 +-278 +-270 +-328 +-505 +-764 +-1032 +-1306 +-1553 +-1771 +-1892 +-1825 +-1491 +-926 +-272 +348 +833 +1212 +1557 +1852 +2058 +2189 +2255 +2258 +2121 +1859 +1560 +1277 +1039 +863 +768 +701 +647 +591 +548 +494 +423 +373 +367 +344 +231 +88 +-7 +4 +138 +362 +603 +821 +994 +1139 +1268 +1377 +1435 +1417 +1304 +1029 +598 +98 +-345 +-638 +-721 +-676 +-603 +-523 +-414 +-291 +-187 +-139 +-159 +-202 +-235 +-244 +-270 +-277 +-223 +-67 +108 +194 +145 +7 +-110 +-147 +-115 +-54 +-8 +28 +63 +91 +95 +69 +-2 +-112 +-223 +-343 +-460 +-557 +-600 +-594 +-527 +-398 +-223 +-53 +28 +11 +-38 +-98 +-159 +-182 +-158 +-89 +6 +101 +188 +251 +270 +222 +85 +-173 +-561 +-1063 +-1619 +-2159 +-2631 +-3021 +-3303 +-3454 +-3447 +-3216 +-2719 +-1942 +-1019 +-167 +442 +785 +944 +1050 +1137 +1139 +1016 +851 +735 +695 +674 +605 +498 +426 +403 +393 +377 +271 +51 +-209 +-400 +-432 +-345 +-238 +-202 +-234 +-270 +-234 +-83 +100 +207 +234 +225 +196 +193 +243 +332 +432 +461 +361 +179 +-23 +-189 +-272 +-274 +-257 +-240 +-223 +-230 +-306 +-493 +-744 +-999 +-1245 +-1476 +-1680 +-1779 +-1686 +-1315 +-753 +-125 +446 +892 +1271 +1629 +1934 +2122 +2214 +2266 +2273 +2136 +1874 +1562 +1261 +1012 +844 +756 +703 +645 +582 +518 +449 +375 +341 +368 +351 +234 +75 +-30 +-11 +141 +389 +641 +852 +1007 +1149 +1303 +1444 +1521 +1495 +1331 +1004 +548 +60 +-354 +-620 +-702 +-681 +-611 +-514 +-382 +-238 +-146 +-125 +-152 +-194 +-209 +-213 +-240 +-261 +-199 +-32 +146 +232 +179 +48 +-62 +-112 +-91 +-37 +8 +51 +85 +96 +66 +18 +-56 +-147 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b4_493_883.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b4_493_883.samples new file mode 100644 index 00000000..7d9285f9 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b4_493_883.samples @@ -0,0 +1,4096 @@ +-919 +-719 +-470 +-184 +137 +453 +705 +841 +877 +866 +816 +676 +388 +10 +-290 +-499 +-747 +-1030 +-1155 +-974 +-545 +-63 +355 +636 +798 +891 +930 +940 +932 +958 +969 +854 +549 +104 +-368 +-830 +-1229 +-1463 +-1518 +-1478 +-1395 +-1295 +-1136 +-863 +-494 +-84 +350 +833 +1339 +1740 +1896 +1815 +1623 +1410 +1182 +864 +476 +76 +-290 +-630 +-992 +-1377 +-1723 +-1889 +-1833 +-1636 +-1414 +-1140 +-734 +-170 +451 +973 +1342 +1584 +1735 +1779 +1659 +1368 +971 +574 +200 +-201 +-615 +-944 +-1102 +-1150 +-1157 +-1140 +-1077 +-947 +-758 +-522 +-241 +80 +403 +673 +835 +880 +860 +809 +692 +441 +83 +-221 +-429 +-663 +-957 +-1139 +-1029 +-647 +-174 +259 +561 +736 +848 +908 +938 +942 +957 +966 +874 +606 +184 +-275 +-726 +-1135 +-1409 +-1508 +-1493 +-1423 +-1324 +-1177 +-924 +-568 +-165 +261 +733 +1239 +1677 +1890 +1852 +1675 +1457 +1233 +944 +577 +181 +-190 +-539 +-904 +-1294 +-1670 +-1888 +-1875 +-1702 +-1479 +-1218 +-832 +-291 +328 +869 +1261 +1531 +1700 +1772 +1689 +1435 +1066 +680 +315 +-78 +-510 +-885 +-1097 +-1164 +-1170 +-1147 +-1084 +-967 +-794 +-576 +-304 +12 +345 +634 +815 +872 +858 +826 +740 +537 +193 +-152 +-398 +-633 +-927 +-1147 +-1101 +-759 +-279 +174 +515 +724 +854 +925 +961 +960 +959 +968 +900 +668 +278 +-170 +-615 +-1044 +-1369 +-1518 +-1528 +-1470 +-1374 +-1229 +-992 +-648 +-254 +167 +632 +1147 +1619 +1890 +1885 +1710 +1494 +1284 +1028 +680 +280 +-117 +-484 +-856 +-1247 +-1630 +-1884 +-1909 +-1748 +-1516 +-1267 +-920 +-416 +193 +762 +1193 +1489 +1679 +1779 +1734 +1519 +1169 +779 +402 +9 +-429 +-837 +-1083 +-1166 +-1169 +-1146 +-1099 +-1011 +-860 +-647 +-378 +-60 +283 +583 +780 +861 +869 +859 +802 +628 +291 +-83 +-354 +-574 +-848 +-1101 +-1123 +-839 +-379 +81 +449 +678 +812 +893 +939 +952 +948 +968 +931 +753 +405 +-35 +-488 +-943 +-1317 +-1514 +-1541 +-1478 +-1377 +-1245 +-1037 +-722 +-332 +85 +539 +1044 +1533 +1850 +1902 +1756 +1549 +1346 +1110 +775 +372 +-39 +-416 +-788 +-1165 +-1540 +-1822 +-1891 +-1761 +-1541 +-1308 +-993 +-534 +56 +640 +1103 +1432 +1650 +1781 +1779 +1603 +1272 +871 +486 +91 +-348 +-773 +-1048 +-1147 +-1153 +-1140 +-1114 +-1042 +-900 +-689 +-425 +-112 +217 +515 +738 +847 +871 +863 +816 +663 +350 +-33 +-324 +-535 +-795 +-1069 +-1152 +-927 +-487 +-11 +392 +652 +810 +904 +949 +957 +946 +960 +950 +818 +499 +58 +-413 +-884 +-1286 +-1511 +-1557 +-1499 +-1407 +-1296 +-1115 +-816 +-436 +-24 +418 +909 +1410 +1781 +1896 +1790 +1595 +1395 +1169 +851 +452 +34 +-347 +-712 +-1079 +-1460 +-1778 +-1906 +-1824 +-1621 +-1394 +-1102 +-669 +-92 +512 +1014 +1374 +1620 +1773 +1805 +1658 +1346 +943 +537 +145 +-276 +-702 +-1006 +-1132 +-1155 +-1150 +-1135 +-1075 +-944 +-745 +-493 +-201 +124 +447 +703 +848 +895 +882 +833 +702 +419 +40 +-275 +-486 +-729 +-1013 +-1154 +-1002 +-593 +-116 +309 +606 +779 +883 +928 +949 +943 +964 +975 +869 +582 +153 +-315 +-780 +-1190 +-1456 +-1535 +-1495 +-1409 +-1304 +-1148 +-885 +-526 +-120 +312 +791 +1299 +1714 +1897 +1830 +1649 +1448 +1226 +923 +529 +112 +-265 +-611 +-963 +-1334 +-1679 +-1857 +-1819 +-1635 +-1420 +-1162 +-766 +-214 +399 +928 +1312 +1571 +1734 +1787 +1677 +1395 +1006 +608 +231 +-168 +-594 +-934 +-1099 +-1141 +-1147 +-1138 +-1086 +-968 +-784 +-545 +-265 +55 +386 +666 +841 +897 +886 +844 +732 +489 +130 +-195 +-416 +-645 +-936 +-1139 +-1061 +-700 +-227 +212 +528 +716 +836 +902 +941 +949 +967 +989 +914 +668 +261 +-204 +-668 +-1097 +-1397 +-1520 +-1510 +-1444 +-1349 +-1210 +-968 +-617 +-218 +207 +682 +1202 +1655 +1895 +1870 +1695 +1478 +1257 +973 +603 +200 +-177 +-525 +-883 +-1267 +-1638 +-1867 +-1869 +-1701 +-1481 +-1225 +-854 +-326 +286 +833 +1231 +1509 +1689 +1769 +1700 +1459 +1092 +696 +322 +-64 +-487 +-858 +-1077 +-1158 +-1172 +-1158 +-1104 +-992 +-814 +-589 +-321 +-12 +314 +606 +805 +877 +865 +826 +741 +551 +227 +-116 +-364 +-588 +-883 +-1119 +-1099 +-784 +-324 +124 +473 +690 +831 +910 +949 +954 +955 +970 +919 +711 +335 +-112 +-560 +-987 +-1320 +-1481 +-1505 +-1454 +-1367 +-1242 +-1022 +-695 +-306 +111 +569 +1076 +1548 +1835 +1852 +1696 +1496 +1294 +1050 +717 +326 +-62 +-421 +-783 +-1159 +-1537 +-1803 +-1852 +-1709 +-1491 +-1251 +-925 +-442 +149 +709 +1136 +1433 +1625 +1730 +1699 +1501 +1161 +776 +407 +32 +-376 +-779 +-1033 +-1132 +-1147 +-1133 +-1083 +-989 +-840 +-637 +-387 +-85 +247 +549 +755 +848 +851 +831 +779 +621 +308 +-64 +-336 +-555 +-818 +-1066 +-1107 +-849 +-409 +44 +419 +654 +801 +888 +929 +945 +941 +956 +926 +758 +422 +-5 +-448 +-888 +-1260 +-1471 +-1521 +-1478 +-1389 +-1271 +-1075 +-772 +-391 +25 +472 +968 +1453 +1783 +1850 +1719 +1525 +1331 +1111 +799 +411 +13 +-351 +-715 +-1095 +-1480 +-1776 +-1864 +-1750 +-1532 +-1301 +-1002 +-563 +2 +571 +1025 +1349 +1565 +1692 +1704 +1559 +1254 +872 +492 +112 +-309 +-733 +-1022 +-1141 +-1159 +-1142 +-1108 +-1029 +-893 +-698 +-448 +-143 +189 +495 +723 +839 +863 +852 +807 +666 +369 +-11 +-308 +-520 +-759 +-1021 +-1118 +-925 +-513 +-52 +346 +612 +774 +879 +934 +955 +947 +953 +934 +806 +515 +94 +-356 +-810 +-1219 +-1470 +-1537 +-1496 +-1408 +-1293 +-1118 +-837 +-471 +-68 +365 +847 +1334 +1708 +1838 +1749 +1563 +1385 +1179 +880 +500 +95 +-284 +-647 +-1016 +-1396 +-1713 +-1846 +-1770 +-1572 +-1351 +-1074 +-666 +-114 +471 +957 +1307 +1547 +1696 +1734 +1611 +1325 +937 +549 +167 +-245 +-662 +-972 +-1106 +-1132 +-1125 +-1106 +-1047 +-925 +-737 +-494 +-209 +103 +409 +657 +802 +851 +851 +815 +701 +453 +90 +-223 +-437 +-665 +-937 +-1090 +-972 +-607 +-154 +256 +548 +723 +833 +889 +916 +913 +925 +936 +850 +594 +195 +-257 +-719 +-1138 +-1414 +-1505 +-1478 +-1401 +-1299 +-1152 +-905 +-562 +-172 +252 +722 +1222 +1640 +1833 +1784 +1617 +1426 +1220 +935 +563 +158 +-218 +-563 +-918 +-1281 +-1617 +-1802 +-1777 +-1606 +-1394 +-1139 +-764 +-247 +340 +851 +1233 +1497 +1666 +1733 +1645 +1389 +1016 +626 +248 +-142 +-555 +-896 +-1066 +-1123 +-1129 +-1120 +-1071 +-956 +-777 +-543 +-273 +34 +350 +623 +798 +864 +861 +817 +715 +488 +143 +-184 +-402 +-611 +-881 +-1075 +-1024 +-690 +-243 +186 +511 +700 +820 +880 +917 +922 +934 +950 +881 +656 +272 +-176 +-630 +-1056 +-1359 +-1482 +-1472 +-1403 +-1312 +-1181 +-956 +-629 +-245 +169 +627 +1123 +1566 +1808 +1803 +1644 +1444 +1238 +972 +615 +222 +-148 +-484 +-824 +-1186 +-1550 +-1784 +-1799 +-1642 +-1431 +-1191 +-846 +-347 +241 +779 +1182 +1453 +1628 +1714 +1657 +1433 +1073 +679 +314 +-55 +-455 +-820 +-1033 +-1117 +-1133 +-1127 +-1080 +-975 +-808 +-594 +-338 +-35 +283 +575 +774 +858 +856 +819 +734 +550 +239 +-96 +-332 +-537 +-807 +-1047 +-1055 +-778 +-345 +94 +440 +654 +789 +865 +907 +922 +928 +944 +901 +708 +349 +-92 +-537 +-967 +-1300 +-1460 +-1482 +-1432 +-1353 +-1230 +-1026 +-707 +-325 +85 +534 +1032 +1502 +1800 +1838 +1692 +1491 +1283 +1039 +712 +335 +-40 +-391 +-752 +-1131 +-1512 +-1787 +-1849 +-1721 +-1508 +-1273 +-946 +-472 +112 +674 +1103 +1405 +1608 +1723 +1709 +1517 +1179 +791 +422 +54 +-353 +-754 +-1025 +-1144 +-1172 +-1165 +-1116 +-1020 +-867 +-661 +-409 +-104 +229 +540 +759 +860 +868 +841 +785 +636 +334 +-31 +-311 +-533 +-794 +-1053 +-1115 +-877 +-444 +17 +403 +650 +795 +884 +930 +949 +946 +957 +929 +769 +445 +21 +-425 +-874 +-1256 +-1476 +-1533 +-1497 +-1414 +-1296 +-1100 +-797 +-415 +-1 +446 +946 +1441 +1788 +1872 +1749 +1548 +1351 +1130 +819 +436 +40 +-328 +-697 +-1080 +-1471 +-1782 +-1885 +-1774 +-1556 +-1320 +-1016 +-576 +-7 +572 +1041 +1376 +1595 +1724 +1733 +1572 +1257 +870 +495 +127 +-282 +-705 +-1005 +-1137 +-1162 +-1147 +-1112 +-1034 +-901 +-708 +-461 +-162 +167 +479 +711 +834 +863 +853 +817 +696 +419 +41 +-270 +-491 +-738 +-1009 +-1126 +-954 +-546 +-81 +325 +604 +767 +869 +924 +944 +937 +947 +940 +832 +559 +146 +-306 +-773 +-1197 +-1462 +-1547 +-1515 +-1435 +-1324 +-1155 +-875 +-504 +-93 +343 +829 +1329 +1714 +1860 +1781 +1597 +1400 +1189 +892 +518 +120 +-251 +-618 +-1000 +-1390 +-1722 +-1865 +-1799 +-1597 +-1372 +-1097 +-694 +-148 +449 +948 +1313 +1564 +1722 +1767 +1645 +1356 +964 +568 +186 +-227 +-659 +-990 +-1139 +-1167 +-1151 +-1126 +-1062 +-938 +-750 +-508 +-220 +98 +412 +672 +828 +883 +886 +853 +741 +487 +112 +-222 +-452 +-686 +-960 +-1123 +-1011 +-645 +-186 +236 +543 +730 +844 +896 +919 +922 +936 +954 +883 +640 +239 +-223 +-695 +-1127 +-1421 +-1527 +-1504 +-1426 +-1323 +-1173 +-923 +-577 +-188 +238 +710 +1218 +1649 +1855 +1815 +1640 +1448 +1240 +960 +589 +184 +-195 +-550 +-911 +-1281 +-1623 +-1818 +-1799 +-1630 +-1420 +-1172 +-805 +-285 +311 +835 +1227 +1501 +1677 +1756 +1683 +1432 +1058 +659 +276 +-121 +-540 +-890 +-1078 +-1133 +-1140 +-1131 +-1082 +-976 +-802 +-573 +-302 +7 +328 +609 +796 +875 +879 +847 +751 +531 +181 +-163 +-395 +-607 +-877 +-1082 +-1039 +-716 +-259 +177 +515 +717 +839 +902 +931 +934 +937 +954 +897 +683 +304 +-154 +-617 +-1054 +-1366 +-1504 +-1503 +-1439 +-1349 +-1216 +-992 +-666 +-280 +135 +593 +1100 +1564 +1830 +1840 +1691 +1489 +1282 +1014 +655 +259 +-116 +-461 +-812 +-1179 +-1543 +-1782 +-1813 +-1668 +-1459 +-1220 +-882 +-392 +194 +746 +1165 +1452 +1640 +1729 +1677 +1450 +1092 +694 +322 +-52 +-458 +-829 +-1049 +-1128 +-1138 +-1127 +-1080 +-981 +-816 +-601 +-348 +-49 +268 +562 +770 +862 +867 +836 +756 +574 +256 +-89 +-338 +-542 +-809 +-1051 +-1081 +-819 +-387 +59 +426 +648 +789 +870 +917 +932 +940 +957 +921 +749 +400 +-43 +-501 +-939 +-1286 +-1464 +-1498 +-1460 +-1382 +-1266 +-1064 +-754 +-381 +27 +482 +993 +1481 +1800 +1852 +1713 +1513 +1308 +1064 +729 +348 +-27 +-371 +-721 +-1093 +-1475 +-1762 +-1836 +-1715 +-1504 +-1271 +-955 +-495 +80 +642 +1080 +1387 +1597 +1716 +1704 +1521 +1189 +798 +424 +56 +-349 +-746 +-1017 +-1134 +-1168 +-1165 +-1127 +-1032 +-874 +-663 +-409 +-113 +210 +524 +760 +876 +892 +859 +790 +638 +350 +-4 +-283 +-504 +-765 +-1031 +-1109 +-899 +-481 +-19 +374 +633 +792 +884 +929 +944 +935 +941 +915 +773 +467 +51 +-395 +-839 +-1220 +-1444 +-1508 +-1477 +-1401 +-1285 +-1099 +-810 +-451 +-49 +392 +888 +1389 +1755 +1856 +1738 +1540 +1343 +1127 +824 +456 +74 +-285 +-641 +-1021 +-1406 +-1717 +-1832 +-1739 +-1531 +-1297 +-1007 +-584 +-39 +529 +990 +1321 +1545 +1675 +1690 +1542 +1239 +865 +492 +134 +-257 +-667 +-972 +-1111 +-1144 +-1132 +-1089 +-1008 +-877 +-693 +-460 +-182 +135 +444 +683 +811 +838 +823 +786 +671 +418 +63 +-241 +-460 +-700 +-964 +-1090 +-942 +-559 +-104 +303 +581 +745 +847 +901 +924 +921 +926 +918 +807 +549 +165 +-273 +-724 +-1140 +-1412 +-1505 +-1485 +-1415 +-1309 +-1141 +-874 +-527 +-138 +281 +758 +1260 +1653 +1808 +1730 +1553 +1368 +1174 +899 +544 +159 +-203 +-560 +-932 +-1308 +-1637 +-1787 +-1727 +-1539 +-1318 +-1061 +-682 +-175 +388 +876 +1237 +1485 +1639 +1691 +1586 +1323 +958 +583 +213 +-184 +-604 +-932 +-1091 +-1132 +-1122 +-1096 +-1038 +-927 +-752 +-528 +-247 +70 +383 +640 +797 +853 +856 +825 +723 +493 +138 +-186 +-415 +-640 +-906 +-1075 +-980 +-638 +-194 +220 +526 +709 +828 +890 +914 +906 +905 +907 +837 +626 +261 +-172 +-631 +-1067 +-1372 +-1493 +-1483 +-1411 +-1307 +-1157 +-915 +-583 +-210 +195 +653 +1148 +1572 +1789 +1767 +1607 +1423 +1234 +970 +616 +222 +-153 +-505 +-863 +-1230 +-1572 +-1758 +-1741 +-1573 +-1366 +-1127 +-778 +-292 +280 +791 +1173 +1439 +1609 +1685 +1614 +1380 +1033 +647 +273 +-117 +-526 +-874 +-1063 +-1118 +-1122 +-1107 +-1061 +-963 +-800 +-577 +-308 +0 +318 +602 +791 +870 +882 +852 +759 +551 +208 +-138 +-382 +-594 +-853 +-1060 +-1041 +-751 +-321 +103 +439 +654 +789 +866 +900 +912 +918 +942 +901 +712 +364 +-76 +-536 +-982 +-1314 +-1468 +-1476 +-1418 +-1331 +-1203 +-989 +-681 +-319 +77 +519 +1019 +1488 +1769 +1795 +1655 +1468 +1276 +1024 +682 +287 +-95 +-443 +-790 +-1151 +-1502 +-1738 +-1773 +-1640 +-1435 +-1204 +-877 +-402 +172 +714 +1126 +1413 +1601 +1694 +1659 +1451 +1108 +711 +330 +-44 +-446 +-810 +-1030 +-1117 +-1138 +-1136 +-1097 +-993 +-825 +-609 +-352 +-60 +257 +546 +764 +867 +877 +846 +766 +585 +270 +-78 +-332 +-529 +-776 +-1011 +-1054 +-818 +-404 +33 +401 +632 +769 +847 +890 +914 +921 +941 +916 +754 +430 +2 +-451 +-892 +-1250 +-1436 +-1471 +-1428 +-1354 +-1240 +-1045 +-748 +-388 +1 +436 +936 +1429 +1760 +1829 +1705 +1513 +1319 +1084 +757 +378 +5 +-338 +-688 +-1061 +-1440 +-1726 +-1809 +-1703 +-1497 +-1268 +-959 +-504 +61 +621 +1057 +1360 +1561 +1684 +1689 +1521 +1196 +800 +424 +59 +-331 +-717 +-985 +-1110 +-1148 +-1152 +-1115 +-1018 +-860 +-651 +-413 +-126 +192 +501 +743 +866 +885 +856 +781 +626 +340 +-14 +-291 +-499 +-743 +-1009 +-1104 +-913 +-510 +-55 +340 +603 +766 +865 +916 +943 +948 +961 +941 +805 +503 +83 +-367 +-815 +-1206 +-1440 +-1511 +-1491 +-1422 +-1310 +-1124 +-833 +-475 +-84 +351 +850 +1362 +1743 +1864 +1750 +1551 +1352 +1136 +840 +478 +99 +-260 +-619 +-1002 +-1398 +-1720 +-1847 +-1766 +-1568 +-1337 +-1046 +-622 +-70 +504 +971 +1310 +1542 +1681 +1709 +1568 +1269 +882 +507 +143 +-247 +-651 +-961 +-1116 +-1166 +-1166 +-1133 +-1051 +-914 +-723 +-490 +-210 +109 +437 +699 +842 +881 +864 +820 +703 +454 +98 +-214 +-443 +-689 +-965 +-1110 +-978 +-599 +-144 +268 +559 +734 +841 +893 +923 +926 +935 +929 +828 +574 +190 +-242 +-693 +-1110 +-1396 +-1510 +-1505 +-1438 +-1328 +-1161 +-901 +-562 +-176 +257 +754 +1279 +1690 +1853 +1780 +1594 +1408 +1215 +946 +585 +191 +-183 +-552 +-931 +-1322 +-1669 +-1851 +-1808 +-1616 +-1387 +-1116 +-720 +-189 +395 +898 +1269 +1524 +1687 +1745 +1641 +1370 +992 +605 +232 +-162 +-589 +-941 +-1118 +-1172 +-1168 +-1139 +-1071 +-948 +-772 +-546 +-272 +49 +380 +655 +822 +881 +878 +852 +760 +531 +172 +-173 +-421 +-654 +-928 +-1111 +-1035 +-686 +-227 +204 +524 +713 +831 +896 +929 +928 +923 +922 +854 +644 +284 +-151 +-613 +-1062 +-1391 +-1533 +-1526 +-1456 +-1349 +-1202 +-963 +-626 +-242 +184 +664 +1180 +1618 +1835 +1798 +1627 +1441 +1250 +989 +634 +234 +-151 +-507 +-879 +-1262 +-1620 +-1825 +-1816 +-1643 +-1420 +-1173 +-817 +-318 +264 +794 +1193 +1477 +1661 +1752 +1692 +1453 +1083 +680 +302 +-94 +-526 +-903 +-1112 +-1170 +-1162 +-1140 +-1094 +-997 +-832 +-603 +-322 +-7 +316 +603 +801 +887 +894 +860 +769 +564 +216 +-145 +-398 +-613 +-872 +-1084 +-1059 +-765 +-324 +117 +469 +690 +824 +894 +928 +933 +931 +946 +910 +736 +388 +-53 +-529 +-991 +-1342 +-1500 +-1505 +-1447 +-1357 +-1227 +-1011 +-693 +-325 +80 +535 +1041 +1522 +1818 +1847 +1700 +1509 +1316 +1065 +716 +314 +-78 +-431 +-788 +-1152 +-1518 +-1772 +-1819 +-1683 +-1467 +-1229 +-901 +-428 +150 +702 +1135 +1440 +1638 +1739 +1705 +1499 +1151 +747 +359 +-26 +-436 +-816 +-1048 +-1126 +-1138 +-1131 +-1097 +-1011 +-853 +-632 +-366 +-65 +254 +553 +771 +883 +908 +880 +796 +612 +290 +-70 +-337 +-548 +-805 +-1049 +-1100 +-864 +-436 +19 +404 +655 +806 +883 +920 +931 +932 +957 +942 +792 +467 +28 +-444 +-904 +-1273 +-1470 +-1509 +-1467 +-1389 +-1272 +-1077 +-781 +-417 +-11 +435 +949 +1450 +1789 +1859 +1730 +1536 +1338 +1099 +764 +374 +-14 +-362 +-713 +-1081 +-1460 +-1753 +-1843 +-1734 +-1525 +-1297 +-997 +-548 +21 +601 +1072 +1399 +1620 +1741 +1741 +1566 +1233 +825 +429 +53 +-345 +-733 +-1008 +-1136 +-1177 +-1182 +-1150 +-1059 +-899 +-688 +-440 +-147 +173 +487 +734 +874 +905 +884 +821 +668 +377 +14 +-276 +-492 +-737 +-1012 +-1124 +-948 +-549 +-85 +325 +598 +755 +848 +893 +916 +927 +954 +949 +822 +534 +116 +-339 +-798 +-1196 +-1434 +-1503 +-1476 +-1411 +-1313 +-1136 +-854 +-494 +-94 +345 +846 +1362 +1745 +1880 +1785 +1587 +1384 +1153 +846 +470 +89 +-263 +-621 +-998 +-1389 +-1711 +-1847 +-1774 +-1579 +-1354 +-1071 +-651 +-93 +498 +985 +1336 +1578 +1725 +1758 +1620 +1314 +919 +536 +172 +-219 +-632 +-955 +-1123 +-1180 +-1188 +-1157 +-1074 +-933 +-737 +-495 +-205 +120 +453 +726 +885 +934 +912 +852 +717 +453 +89 +-233 +-459 +-700 +-987 +-1152 +-1027 +-648 +-177 +252 +562 +744 +854 +909 +938 +944 +956 +955 +859 +608 +218 +-224 +-681 +-1102 +-1389 +-1502 +-1498 +-1446 +-1350 +-1190 +-921 +-570 +-175 +260 +752 +1286 +1718 +1900 +1824 +1625 +1418 +1204 +922 +564 +180 +-187 +-550 +-941 +-1345 +-1702 +-1881 +-1840 +-1647 +-1409 +-1133 +-739 +-208 +377 +885 +1262 +1523 +1686 +1744 +1641 +1373 +1000 +617 +253 +-138 +-566 +-931 +-1123 +-1178 +-1168 +-1129 +-1060 +-943 +-768 +-539 +-266 +49 +377 +659 +834 +898 +895 +856 +754 +525 +165 +-180 +-429 +-664 +-943 +-1142 +-1085 +-748 +-285 +158 +498 +700 +823 +889 +930 +939 +946 +954 +889 +687 +336 +-97 +-555 +-1004 +-1340 +-1496 +-1516 +-1462 +-1367 +-1218 +-980 +-652 +-270 +150 +630 +1161 +1618 +1856 +1829 +1654 +1460 +1264 +1007 +657 +271 +-105 +-476 +-869 +-1272 +-1641 +-1857 +-1853 +-1684 +-1459 +-1209 +-855 +-356 +229 +764 +1171 +1465 +1669 +1770 +1720 +1495 +1132 +734 +355 +-46 +-486 +-879 +-1102 +-1174 +-1169 +-1147 +-1094 +-991 +-828 +-604 +-334 +-16 +308 +598 +793 +880 +895 +871 +780 +570 +216 +-155 +-410 +-623 +-884 +-1110 +-1101 +-807 +-358 +95 +456 +675 +812 +890 +926 +935 +927 +938 +903 +742 +416 +-14 +-485 +-961 +-1333 +-1515 +-1536 +-1478 +-1379 +-1245 +-1032 +-716 +-342 +68 +532 +1052 +1541 +1834 +1862 +1719 +1522 +1327 +1076 +730 +335 +-57 +-426 +-807 +-1198 +-1563 +-1806 +-1840 +-1704 +-1494 +-1262 +-944 +-473 +108 +671 +1112 +1430 +1644 +1761 +1737 +1539 +1192 +787 +399 +5 +-419 +-809 +-1043 +-1124 +-1131 +-1120 +-1089 +-1005 +-850 +-631 +-368 +-70 +243 +542 +764 +882 +907 +878 +797 +608 +278 +-98 +-370 +-571 +-823 +-1067 +-1120 +-882 +-448 +13 +410 +672 +830 +912 +948 +955 +945 +959 +950 +814 +504 +71 +-409 +-891 +-1280 +-1489 +-1536 +-1495 +-1415 +-1294 +-1093 +-789 +-423 +-15 +441 +966 +1487 +1841 +1919 +1788 +1588 +1384 +1146 +810 +412 +12 +-353 +-723 +-1111 +-1495 +-1792 +-1886 +-1781 +-1576 +-1348 +-1044 +-588 +-5 +579 +1056 +1396 +1623 +1761 +1768 +1607 +1278 +865 +462 +78 +-326 +-725 +-1002 +-1120 +-1158 +-1166 +-1143 +-1062 +-908 +-695 +-443 +-153 +171 +490 +749 +893 +924 +898 +827 +666 +366 +-11 +-306 +-519 +-757 +-1026 +-1149 +-981 +-578 +-108 +317 +606 +767 +858 +897 +923 +930 +954 +960 +848 +565 +146 +-321 +-792 +-1208 +-1460 +-1531 +-1499 +-1428 +-1320 +-1142 +-864 +-507 +-110 +333 +838 +1372 +1778 +1920 +1816 +1616 +1405 +1169 +849 +461 +73 +-285 +-639 +-1019 +-1414 +-1756 +-1905 +-1838 +-1638 +-1411 +-1122 +-694 +-128 +474 +977 +1340 +1588 +1737 +1773 +1639 +1329 +923 +524 +158 +-226 +-632 +-947 +-1109 +-1163 +-1173 +-1153 +-1078 +-940 +-739 +-495 +-207 +116 +436 +706 +869 +916 +898 +839 +708 +447 +81 +-240 +-464 +-702 +-988 +-1158 +-1040 +-666 +-187 +256 +573 +759 +865 +917 +943 +942 +952 +953 +864 +623 +236 +-211 +-680 +-1115 +-1407 +-1514 +-1506 +-1444 +-1345 +-1181 +-915 +-568 +-181 +251 +751 +1284 +1732 +1928 +1856 +1657 +1441 +1218 +927 +564 +183 +-181 +-538 +-929 +-1335 +-1689 +-1881 +-1847 +-1658 +-1424 +-1144 +-749 +-214 +377 +892 +1278 +1545 +1709 +1770 +1672 +1401 +1020 +626 +261 +-120 +-543 +-903 +-1106 +-1174 +-1182 +-1154 +-1081 +-954 +-768 +-537 +-266 +50 +382 +670 +856 +921 +908 +862 +761 +538 +181 +-172 +-425 +-660 +-938 +-1138 +-1088 +-760 +-300 +151 +499 +711 +839 +902 +935 +937 +935 +944 +887 +688 +338 +-98 +-567 +-1026 +-1371 +-1524 +-1537 +-1479 +-1376 +-1225 +-983 +-654 +-272 +153 +642 +1179 +1648 +1886 +1845 +1657 +1452 +1250 +988 +642 +254 +-121 +-487 +-874 +-1278 +-1656 +-1876 +-1870 +-1690 +-1450 +-1194 +-838 +-342 +242 +782 +1192 +1478 +1660 +1751 +1693 +1461 +1101 +705 +327 +-62 +-491 +-883 +-1114 +-1194 +-1184 +-1145 +-1083 +-974 +-813 +-595 +-331 +-16 +316 +607 +805 +885 +890 +860 +778 +575 +226 +-146 +-415 +-630 +-890 +-1108 +-1109 +-823 +-371 +92 +471 +702 +837 +909 +940 +942 +933 +942 +905 +750 +433 +3 +-472 +-954 +-1335 +-1521 +-1544 +-1491 +-1398 +-1261 +-1045 +-731 +-360 +50 +520 +1048 +1538 +1829 +1855 +1704 +1514 +1326 +1083 +746 +356 +-29 +-399 +-782 +-1180 +-1560 +-1809 +-1843 +-1692 +-1473 +-1241 +-923 +-463 +109 +667 +1103 +1417 +1624 +1737 +1716 +1519 +1178 +781 +404 +22 +-398 +-799 +-1050 +-1144 +-1152 +-1127 +-1088 +-1002 +-855 +-647 +-390 +-84 +239 +540 +762 +872 +903 +891 +824 +646 +317 +-66 +-347 +-553 +-796 +-1035 +-1087 +-858 +-434 +24 +415 +661 +804 +879 +907 +923 +916 +932 +925 +799 +505 +83 +-391 +-880 +-1281 +-1490 +-1524 +-1472 +-1388 +-1268 +-1076 +-786 +-429 +-35 +414 +927 +1435 +1784 +1863 +1735 +1544 +1359 +1129 +807 +418 +26 +-335 +-701 +-1077 +-1453 +-1740 +-1833 +-1733 +-1529 +-1307 +-1014 +-579 +-20 +552 +1023 +1366 +1593 +1720 +1722 +1556 +1232 +839 +455 +79 +-314 +-706 +-980 +-1093 +-1122 +-1126 +-1106 +-1036 +-899 +-697 +-448 +-160 +150 +456 +701 +845 +895 +887 +828 +676 +386 +9 +-285 +-496 +-730 +-984 +-1096 +-929 +-535 +-76 +333 +613 +771 +858 +898 +917 +919 +934 +938 +834 +567 +160 +-310 +-791 +-1206 +-1450 +-1517 +-1485 +-1412 +-1309 +-1136 +-865 +-518 +-126 +306 +813 +1334 +1730 +1869 +1774 +1584 +1381 +1158 +849 +472 +92 +-257 +-606 +-977 +-1360 +-1686 +-1829 +-1768 +-1581 +-1362 +-1084 +-671 +-130 +453 +949 +1311 +1556 +1695 +1721 +1586 +1290 +900 +515 +152 +-231 +-627 +-933 +-1088 +-1144 +-1153 +-1131 +-1060 +-923 +-723 +-481 +-199 +115 +433 +696 +855 +908 +894 +834 +696 +430 +63 +-250 +-466 +-689 +-955 +-1113 +-999 +-632 +-163 +271 +584 +762 +864 +911 +931 +930 +932 +927 +844 +612 +228 +-220 +-688 +-1114 +-1396 +-1495 +-1483 +-1423 +-1330 +-1176 +-923 +-587 +-209 +211 +701 +1226 +1658 +1849 +1786 +1598 +1394 +1178 +896 +547 +179 +-167 +-511 +-885 +-1274 +-1621 +-1802 +-1774 +-1596 +-1377 +-1113 +-728 +-214 +360 +861 +1238 +1499 +1659 +1707 +1601 +1332 +955 +575 +221 +-142 +-539 +-879 +-1067 +-1133 +-1139 +-1118 +-1050 +-922 +-742 +-519 +-255 +51 +370 +651 +830 +892 +882 +838 +737 +518 +176 +-156 +-387 +-608 +-881 +-1080 +-1028 +-705 +-252 +190 +529 +724 +836 +887 +911 +911 +908 +913 +856 +661 +315 +-109 +-564 +-1009 +-1335 +-1475 +-1480 +-1425 +-1338 +-1195 +-963 +-643 +-273 +137 +605 +1125 +1580 +1821 +1793 +1612 +1410 +1207 +960 +632 +272 +-83 +-436 +-812 +-1204 +-1564 +-1782 +-1789 +-1626 +-1403 +-1159 +-818 +-339 +225 +742 +1145 +1428 +1607 +1688 +1627 +1397 +1047 +673 +317 +-50 +-457 +-832 +-1058 +-1139 +-1146 +-1122 +-1063 +-954 +-793 +-582 +-325 +-25 +295 +580 +774 +859 +864 +834 +760 +577 +249 +-109 +-369 +-584 +-838 +-1058 +-1063 +-783 +-347 +102 +471 +693 +821 +883 +911 +910 +900 +904 +859 +701 +391 +-21 +-481 +-940 +-1306 +-1492 +-1520 +-1473 +-1382 +-1244 +-1024 +-716 +-351 +47 +497 +1005 +1482 +1765 +1789 +1640 +1447 +1258 +1025 +710 +345 +-15 +-374 +-750 +-1140 +-1513 +-1758 +-1792 +-1649 +-1435 +-1210 +-898 +-452 +94 +624 +1044 +1353 +1559 +1664 +1640 +1449 +1127 +750 +386 +18 +-390 +-777 +-1028 +-1115 +-1118 +-1094 +-1054 +-972 +-829 +-627 +-379 +-85 +229 +518 +736 +847 +874 +863 +805 +637 +323 +-41 +-317 +-525 +-763 +-992 +-1047 +-831 +-426 +20 +404 +647 +786 +861 +888 +899 +893 +901 +886 +764 +489 +88 +-363 +-833 +-1227 +-1443 +-1490 +-1444 +-1358 +-1232 +-1039 +-753 +-409 +-30 +402 +896 +1389 +1721 +1797 +1670 +1483 +1304 +1089 +787 +422 +48 +-311 +-675 +-1052 +-1414 +-1682 +-1760 +-1650 +-1449 +-1229 +-944 +-534 +-5 +540 +989 +1319 +1546 +1675 +1679 +1514 +1200 +813 +441 +75 +-321 +-709 +-978 +-1079 +-1094 +-1087 +-1061 +-998 +-868 +-672 +-426 +-140 +162 +458 +695 +839 +886 +877 +809 +654 +368 +10 +-269 +-463 +-682 +-927 +-1036 +-886 +-515 +-82 +312 +582 +737 +817 +852 +871 +869 +877 +878 +786 +534 +148 +-300 +-767 +-1176 +-1415 +-1475 +-1438 +-1359 +-1250 +-1086 +-826 +-495 +-124 +295 +777 +1277 +1655 +1790 +1700 +1519 +1333 +1118 +821 +459 +90 +-254 +-602 +-968 +-1338 +-1643 +-1773 +-1708 +-1521 +-1313 +-1051 +-663 +-146 +413 +892 +1253 +1503 +1652 +1685 +1558 +1269 +891 +508 +144 +-231 +-615 +-907 +-1043 +-1080 +-1086 +-1074 +-1018 +-899 +-708 +-469 +-198 +101 +401 +658 +822 +881 +866 +798 +659 +400 +52 +-241 +-441 +-647 +-900 +-1055 +-954 +-606 +-161 +259 +563 +737 +833 +873 +892 +889 +896 +905 +823 +590 +212 +-236 +-696 +-1119 +-1391 +-1478 +-1455 +-1387 +-1289 +-1136 +-888 +-561 +-186 +228 +709 +1223 +1639 +1825 +1767 +1591 +1395 +1180 +893 +539 +174 +-165 +-501 +-876 +-1264 +-1612 +-1792 +-1758 +-1578 +-1355 +-1104 +-733 +-221 +354 +858 +1235 +1493 +1654 +1712 +1615 +1348 +975 +592 +237 +-124 +-519 +-855 +-1033 +-1099 +-1109 +-1097 +-1038 +-917 +-735 +-505 +-240 +62 +369 +648 +835 +909 +901 +843 +719 +492 +154 +-166 +-394 +-614 +-888 +-1091 +-1044 +-731 +-284 +153 +482 +673 +787 +843 +871 +880 +888 +898 +836 +638 +292 +-137 +-592 +-1028 +-1342 +-1472 +-1485 +-1441 +-1355 +-1211 +-972 +-645 +-270 +141 +613 +1136 +1601 +1848 +1819 +1644 +1442 +1234 +967 +618 +252 +-101 +-451 +-836 +-1246 +-1623 +-1844 +-1844 +-1675 +-1454 +-1206 +-847 +-346 +237 +772 +1187 +1480 +1669 +1763 +1710 +1480 +1116 +728 +365 +-8 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b5_987_767.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b5_987_767.samples new file mode 100644 index 00000000..9bd5d1d2 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_b5_987_767.samples @@ -0,0 +1,4096 @@ +139 +422 +827 +1233 +1565 +1777 +1729 +1331 +652 +-179 +-984 +-1543 +-1793 +-1830 +-1709 +-1437 +-968 +-367 +228 +756 +1105 +1141 +881 +365 +-280 +-887 +-1342 +-1560 +-1567 +-1425 +-1089 +-569 +25 +608 +1053 +1278 +1293 +1082 +658 +197 +-141 +-299 +-271 +-133 +26 +242 +586 +996 +1378 +1661 +1784 +1591 +1063 +311 +-533 +-1259 +-1682 +-1833 +-1793 +-1602 +-1244 +-712 +-119 +432 +892 +1120 +1033 +678 +109 +-522 +-1063 +-1422 +-1560 +-1522 +-1317 +-909 +-354 +241 +792 +1168 +1310 +1244 +940 +479 +56 +-224 +-316 +-234 +-80 +100 +362 +747 +1152 +1491 +1718 +1731 +1401 +771 +-37 +-857 +-1463 +-1762 +-1813 +-1704 +-1463 +-1046 +-484 +97 +610 +990 +1100 +919 +491 +-110 +-721 +-1204 +-1488 +-1566 +-1478 +-1195 +-709 +-118 +483 +987 +1260 +1316 +1156 +763 +296 +-77 +-285 +-305 +-173 +-1 +210 +523 +925 +1302 +1594 +1756 +1636 +1170 +455 +-374 +-1125 +-1596 +-1769 +-1747 +-1586 +-1282 +-813 +-254 +286 +764 +1055 +1055 +782 +277 +-345 +-929 +-1355 +-1568 +-1585 +-1423 +-1041 +-486 +138 +734 +1159 +1344 +1311 +1034 +583 +136 +-181 +-325 +-280 +-120 +75 +336 +696 +1103 +1449 +1703 +1769 +1499 +908 +117 +-713 +-1368 +-1707 +-1781 +-1696 +-1487 +-1127 +-625 +-63 +475 +907 +1093 +982 +610 +48 +-570 +-1109 +-1470 +-1617 +-1553 +-1294 +-820 +-222 +395 +930 +1251 +1342 +1208 +844 +371 +-36 +-281 +-333 +-217 +-38 +170 +465 +850 +1236 +1559 +1756 +1701 +1289 +597 +-230 +-1006 +-1525 +-1742 +-1756 +-1632 +-1379 +-972 +-430 +138 +657 +1018 +1096 +880 +409 +-204 +-813 +-1293 +-1571 +-1623 +-1476 +-1116 +-563 +57 +651 +1093 +1306 +1305 +1072 +642 +181 +-161 +-316 +-283 +-131 +57 +286 +616 +1002 +1361 +1641 +1760 +1568 +1049 +299 +-524 +-1212 +-1615 +-1756 +-1734 +-1584 +-1291 +-821 +-247 +334 +839 +1127 +1094 +763 +204 +-445 +-1035 +-1455 +-1638 +-1604 +-1370 +-920 +-325 +293 +849 +1211 +1332 +1241 +928 +468 +43 +-235 +-324 +-231 +-62 +138 +400 +762 +1148 +1484 +1712 +1713 +1385 +757 +-38 +-826 +-1404 +-1688 +-1751 +-1673 +-1472 +-1102 +-568 +20 +580 +1006 +1151 +984 +535 +-88 +-736 +-1263 +-1571 +-1648 +-1517 +-1181 +-658 +-52 +538 +1018 +1274 +1310 +1133 +745 +286 +-81 +-280 +-291 +-161 +20 +225 +517 +894 +1268 +1578 +1745 +1633 +1181 +482 +-322 +-1040 +-1519 +-1729 +-1753 +-1646 +-1386 +-932 +-348 +249 +778 +1102 +1113 +836 +310 +-342 +-957 +-1407 +-1616 +-1601 +-1388 +-981 +-426 +166 +720 +1116 +1280 +1243 +980 +548 +119 +-170 +-284 +-225 +-76 +97 +333 +670 +1060 +1416 +1672 +1745 +1491 +928 +172 +-633 +-1281 +-1657 +-1796 +-1764 +-1588 +-1225 +-688 +-76 +520 +987 +1182 +1058 +654 +42 +-619 +-1180 +-1528 +-1640 +-1539 +-1253 +-787 +-206 +383 +901 +1214 +1308 +1184 +836 +382 +-3 +-229 +-273 +-168 +-13 +167 +438 +811 +1198 +1524 +1727 +1688 +1305 +650 +-149 +-921 +-1475 +-1738 +-1794 +-1690 +-1433 +-996 +-422 +175 +715 +1071 +1126 +875 +375 +-260 +-869 +-1331 +-1571 +-1588 +-1423 +-1075 +-562 +25 +599 +1050 +1276 +1287 +1072 +669 +226 +-107 +-279 +-270 +-140 +26 +244 +570 +970 +1345 +1644 +1771 +1597 +1096 +365 +-460 +-1183 +-1629 +-1810 +-1794 +-1623 +-1290 +-784 +-192 +393 +869 +1112 +1043 +691 +131 +-499 +-1051 +-1424 +-1576 +-1533 +-1315 +-910 +-359 +234 +781 +1163 +1316 +1250 +955 +513 +94 +-187 +-294 +-234 +-90 +94 +354 +722 +1120 +1476 +1721 +1744 +1431 +815 +24 +-786 +-1407 +-1732 +-1809 +-1712 +-1477 +-1074 +-519 +64 +597 +984 +1095 +905 +461 +-134 +-739 +-1221 +-1503 +-1577 +-1477 +-1201 +-727 +-141 +461 +976 +1275 +1346 +1189 +810 +345 +-37 +-255 +-288 +-181 +-23 +182 +490 +888 +1284 +1603 +1774 +1669 +1217 +511 +-313 +-1074 +-1576 +-1790 +-1786 +-1623 +-1318 +-847 +-292 +259 +740 +1032 +1031 +750 +249 +-358 +-923 +-1335 +-1539 +-1552 +-1388 +-1027 +-498 +99 +681 +1117 +1312 +1291 +1039 +609 +169 +-149 +-295 +-257 +-109 +77 +323 +676 +1079 +1433 +1699 +1779 +1527 +955 +178 +-645 +-1311 +-1679 +-1787 +-1720 +-1521 +-1159 +-645 +-83 +443 +866 +1064 +964 +604 +41 +-570 +-1105 +-1464 +-1617 +-1574 +-1328 +-866 +-271 +347 +899 +1246 +1359 +1244 +893 +422 +14 +-241 +-305 +-207 +-36 +172 +459 +844 +1233 +1550 +1746 +1695 +1304 +634 +-178 +-961 +-1509 +-1747 +-1762 +-1631 +-1370 +-954 +-431 +106 +602 +951 +1032 +840 +402 +-189 +-789 +-1272 +-1559 +-1621 +-1488 +-1146 +-622 +-11 +585 +1052 +1290 +1311 +1105 +705 +254 +-95 +-282 +-274 +-131 +53 +283 +605 +997 +1355 +1636 +1755 +1582 +1077 +339 +-492 +-1202 +-1618 +-1758 +-1721 +-1560 +-1258 +-795 +-246 +305 +783 +1051 +1024 +723 +195 +-436 +-1014 +-1431 +-1626 +-1598 +-1374 +-939 +-354 +260 +814 +1184 +1322 +1259 +961 +513 +87 +-198 +-295 +-207 +-39 +157 +419 +775 +1154 +1479 +1710 +1724 +1409 +800 +11 +-778 +-1374 +-1679 +-1759 +-1686 +-1490 +-1132 +-617 +-47 +502 +932 +1100 +961 +550 +-51 +-689 +-1225 +-1548 +-1640 +-1527 +-1218 +-702 +-94 +505 +995 +1262 +1311 +1158 +789 +328 +-47 +-256 +-262 +-124 +57 +263 +556 +930 +1294 +1589 +1743 +1633 +1184 +488 +-310 +-1039 +-1511 +-1713 +-1733 +-1626 +-1392 +-965 +-406 +176 +703 +1044 +1080 +816 +306 +-333 +-949 +-1403 +-1628 +-1625 +-1432 +-1030 +-462 +148 +717 +1120 +1293 +1269 +1040 +618 +180 +-128 +-266 +-211 +-55 +125 +350 +690 +1078 +1429 +1685 +1765 +1522 +951 +195 +-609 +-1267 +-1637 +-1773 +-1748 +-1594 +-1264 +-740 +-148 +428 +896 +1107 +1001 +620 +28 +-627 +-1189 +-1547 +-1662 +-1564 +-1279 +-799 +-207 +391 +909 +1222 +1317 +1220 +903 +460 +68 +-177 +-239 +-136 +27 +206 +465 +829 +1216 +1533 +1735 +1706 +1327 +682 +-106 +-889 +-1453 +-1720 +-1789 +-1722 +-1507 +-1079 +-497 +102 +632 +1003 +1079 +859 +387 +-247 +-876 +-1350 +-1590 +-1603 +-1431 +-1087 +-561 +21 +591 +1041 +1263 +1298 +1118 +734 +293 +-45 +-213 +-195 +-59 +101 +298 +613 +1005 +1354 +1617 +1743 +1579 +1092 +384 +-420 +-1140 +-1593 +-1776 +-1792 +-1661 +-1358 +-859 +-264 +305 +783 +1038 +986 +665 +125 +-514 +-1081 +-1457 +-1602 +-1547 +-1331 +-913 +-354 +233 +770 +1140 +1306 +1285 +1018 +584 +171 +-111 +-224 +-171 +-29 +132 +383 +760 +1147 +1472 +1705 +1743 +1455 +871 +105 +-712 +-1356 +-1704 +-1819 +-1773 +-1577 +-1179 +-622 +-42 +479 +867 +998 +843 +433 +-154 +-755 +-1245 +-1532 +-1588 +-1481 +-1188 +-718 +-147 +429 +929 +1227 +1322 +1213 +874 +426 +53 +-160 +-194 +-95 +46 +221 +519 +913 +1282 +1572 +1739 +1653 +1247 +576 +-233 +-996 +-1511 +-1755 +-1792 +-1675 +-1413 +-951 +-382 +171 +636 +932 +948 +701 +221 +-376 +-944 +-1356 +-1545 +-1546 +-1397 +-1041 +-519 +71 +644 +1077 +1292 +1314 +1118 +709 +264 +-53 +-197 +-159 +-21 +136 +362 +719 +1124 +1461 +1694 +1769 +1539 +979 +223 +-594 +-1271 +-1652 +-1773 +-1729 +-1557 +-1214 +-703 +-151 +352 +767 +953 +856 +519 +-19 +-618 +-1135 +-1460 +-1579 +-1536 +-1315 +-877 +-297 +312 +862 +1210 +1335 +1277 +972 +523 +123 +-123 +-196 +-105 +44 +211 +487 +881 +1273 +1569 +1751 +1719 +1349 +707 +-75 +-869 +-1436 +-1708 +-1767 +-1678 +-1463 +-1058 +-532 +-2 +478 +823 +918 +743 +332 +-242 +-830 +-1290 +-1544 +-1603 +-1496 +-1190 +-670 +-48 +566 +1057 +1300 +1348 +1183 +801 +351 +2 +-189 +-191 +-61 +95 +300 +633 +1050 +1411 +1669 +1782 +1612 +1120 +408 +-416 +-1150 +-1583 +-1743 +-1736 +-1616 +-1343 +-886 +-347 +172 +617 +888 +891 +630 +136 +-471 +-1034 +-1431 +-1609 +-1596 +-1411 +-1004 +-416 +216 +798 +1188 +1340 +1305 +1044 +621 +198 +-87 +-205 +-142 +15 +192 +455 +829 +1207 +1503 +1705 +1724 +1429 +843 +86 +-725 +-1351 +-1662 +-1742 +-1682 +-1519 +-1182 +-681 +-140 +369 +781 +948 +842 +478 +-89 +-708 +-1238 +-1558 +-1652 +-1569 +-1284 +-771 +-141 +473 +984 +1268 +1347 +1239 +892 +439 +60 +-157 +-174 +-46 +120 +303 +595 +981 +1326 +1585 +1735 +1647 +1224 +559 +-241 +-996 +-1485 +-1690 +-1716 +-1640 +-1427 +-1013 +-480 +63 +548 +884 +937 +722 +259 +-350 +-953 +-1409 +-1631 +-1625 +-1449 +-1067 +-493 +119 +685 +1100 +1283 +1293 +1092 +688 +253 +-51 +-181 +-124 +39 +205 +418 +750 +1130 +1444 +1660 +1725 +1506 +977 +248 +-562 +-1235 +-1618 +-1755 +-1748 +-1629 +-1332 +-834 +-264 +279 +745 +977 +906 +573 +21 +-608 +-1170 +-1532 +-1655 +-1583 +-1324 +-851 +-251 +342 +862 +1182 +1287 +1225 +940 +513 +124 +-112 +-155 +-45 +115 +273 +520 +886 +1247 +1525 +1706 +1683 +1333 +710 +-62 +-840 +-1400 +-1674 +-1761 +-1724 +-1541 +-1141 +-585 +-10 +515 +897 +985 +786 +339 +-271 +-884 +-1364 +-1612 +-1649 +-1492 +-1143 +-601 +-4 +569 +1020 +1237 +1293 +1154 +795 +353 +21 +-146 +-133 +8 +161 +348 +652 +1040 +1374 +1617 +1746 +1603 +1140 +453 +-338 +-1064 +-1533 +-1738 +-1781 +-1687 +-1415 +-934 +-350 +205 +689 +967 +939 +648 +118 +-512 +-1077 +-1458 +-1615 +-1562 +-1356 +-949 +-384 +201 +745 +1115 +1281 +1277 +1043 +633 +224 +-48 +-153 +-84 +60 +205 +431 +789 +1173 +1485 +1698 +1728 +1445 +875 +138 +-653 +-1290 +-1647 +-1787 +-1763 +-1589 +-1228 +-683 +-109 +409 +806 +945 +800 +411 +-163 +-767 +-1252 +-1532 +-1585 +-1475 +-1201 +-728 +-160 +412 +909 +1199 +1294 +1215 +914 +484 +113 +-104 +-148 +-48 +88 +247 +526 +914 +1284 +1568 +1745 +1688 +1296 +642 +-149 +-937 +-1486 +-1743 +-1805 +-1720 +-1486 +-1034 +-460 +97 +575 +894 +925 +685 +211 +-395 +-966 +-1377 +-1565 +-1553 +-1401 +-1060 +-536 +46 +620 +1051 +1256 +1296 +1126 +747 +314 +1 +-151 +-124 +9 +153 +364 +706 +1099 +1430 +1665 +1753 +1557 +1048 +327 +-495 +-1197 +-1614 +-1774 +-1765 +-1618 +-1288 +-775 +-211 +305 +717 +919 +846 +523 +1 +-603 +-1127 +-1457 +-1575 +-1522 +-1316 +-902 +-338 +262 +807 +1167 +1323 +1289 +1020 +589 +197 +-59 +-141 +-69 +68 +229 +490 +866 +1246 +1546 +1735 +1727 +1386 +760 +-25 +-819 +-1418 +-1711 +-1780 +-1697 +-1482 +-1076 +-544 +-7 +470 +817 +906 +724 +316 +-255 +-833 +-1283 +-1528 +-1576 +-1465 +-1170 +-671 +-77 +517 +1007 +1269 +1342 +1202 +841 +394 +41 +-152 +-164 +-40 +115 +313 +639 +1040 +1391 +1640 +1769 +1635 +1167 +461 +-366 +-1117 +-1589 +-1774 +-1778 +-1652 +-1368 +-899 +-348 +172 +622 +894 +891 +635 +146 +-451 +-1014 +-1418 +-1604 +-1606 +-1429 +-1037 +-466 +156 +738 +1152 +1328 +1320 +1080 +657 +235 +-54 +-180 +-126 +27 +196 +438 +805 +1196 +1506 +1704 +1730 +1445 +862 +113 +-692 +-1324 +-1649 +-1741 +-1686 +-1518 +-1181 +-691 +-163 +336 +739 +909 +807 +459 +-86 +-687 +-1199 +-1523 +-1632 +-1560 +-1296 +-810 +-198 +424 +949 +1258 +1360 +1262 +943 +499 +114 +-124 +-183 +-77 +86 +279 +569 +952 +1312 +1589 +1751 +1678 +1276 +617 +-172 +-934 +-1458 +-1691 +-1734 +-1646 +-1429 +-1035 +-521 +12 +501 +843 +916 +724 +280 +-315 +-900 +-1361 +-1611 +-1633 +-1475 +-1114 +-558 +58 +655 +1098 +1316 +1333 +1140 +763 +329 +-1 +-160 +-133 +14 +176 +391 +714 +1093 +1424 +1661 +1746 +1543 +1027 +304 +-486 +-1160 +-1552 +-1708 +-1709 +-1592 +-1320 +-867 +-333 +199 +660 +915 +872 +557 +33 +-572 +-1119 +-1493 +-1644 +-1591 +-1351 +-896 +-304 +300 +840 +1199 +1325 +1268 +988 +569 +183 +-71 +-150 +-66 +85 +254 +497 +839 +1199 +1500 +1700 +1703 +1369 +762 +3 +-759 +-1329 +-1630 +-1723 +-1688 +-1523 +-1177 +-673 +-120 +406 +799 +931 +772 +364 +-217 +-823 +-1309 +-1579 +-1627 +-1493 +-1166 +-646 +-50 +524 +992 +1239 +1299 +1157 +808 +382 +52 +-118 +-120 +1 +159 +352 +644 +1011 +1348 +1606 +1734 +1604 +1148 +471 +-307 +-1012 +-1484 +-1698 +-1742 +-1659 +-1408 +-969 +-417 +143 +627 +917 +915 +637 +131 +-484 +-1052 +-1453 +-1627 +-1588 +-1367 +-957 +-406 +183 +731 +1125 +1301 +1289 +1058 +660 +255 +-24 +-137 +-74 +69 +228 +444 +771 +1144 +1466 +1694 +1738 +1475 +916 +183 +-598 +-1236 +-1604 +-1749 +-1741 +-1588 +-1253 +-746 +-177 +352 +768 +934 +811 +430 +-141 +-755 +-1252 +-1552 +-1625 +-1511 +-1222 +-752 +-180 +403 +906 +1214 +1324 +1229 +918 +502 +142 +-75 +-134 +-52 +87 +263 +534 +906 +1277 +1572 +1746 +1674 +1285 +657 +-109 +-860 +-1410 +-1697 +-1786 +-1720 +-1487 +-1061 +-509 +50 +534 +850 +888 +657 +192 +-401 +-970 +-1391 +-1600 +-1598 +-1427 +-1076 +-558 +25 +593 +1039 +1285 +1330 +1157 +791 +376 +53 +-118 +-117 +-7 +139 +350 +670 +1057 +1405 +1663 +1761 +1567 +1064 +352 +-444 +-1140 +-1578 +-1766 +-1773 +-1623 +-1306 +-817 +-256 +268 +689 +890 +808 +470 +-54 +-639 +-1149 +-1480 +-1603 +-1528 +-1290 +-866 +-316 +264 +802 +1171 +1328 +1280 +1015 +613 +225 +-41 +-146 +-91 +47 +227 +484 +835 +1212 +1533 +1744 +1737 +1412 +813 +51 +-735 +-1345 +-1684 +-1796 +-1730 +-1515 +-1126 +-604 +-57 +432 +778 +881 +704 +295 +-262 +-830 +-1284 +-1544 +-1595 +-1471 +-1168 +-684 +-97 +495 +997 +1291 +1363 +1219 +873 +439 +85 +-123 +-159 +-62 +98 +314 +621 +1002 +1373 +1652 +1788 +1650 +1191 +504 +-292 +-1018 +-1515 +-1742 +-1769 +-1644 +-1367 +-929 +-402 +123 +565 +834 +828 +566 +99 +-474 +-1006 +-1400 +-1592 +-1591 +-1409 +-1030 +-490 +116 +699 +1136 +1349 +1348 +1118 +722 +303 +-4 +-154 +-136 +-12 +167 +417 +765 +1156 +1490 +1721 +1765 +1504 +941 +188 +-612 +-1265 +-1646 +-1780 +-1731 +-1547 +-1206 +-726 +-200 +291 +679 +848 +744 +401 +-118 +-688 +-1174 +-1491 +-1609 +-1536 +-1277 +-818 +-233 +376 +906 +1236 +1346 +1245 +936 +518 +155 +-79 +-147 +-64 +94 +297 +579 +936 +1296 +1587 +1749 +1675 +1276 +633 +-148 +-897 +-1434 +-1693 +-1740 +-1641 +-1411 +-1026 +-530 +-9 +461 +783 +850 +651 +224 +-338 +-897 +-1341 +-1587 +-1624 +-1467 +-1108 +-573 +37 +622 +1071 +1305 +1330 +1142 +772 +354 +31 +-139 +-131 +3 +185 +416 +725 +1078 +1411 +1665 +1757 +1563 +1064 +356 +-431 +-1110 +-1533 +-1707 +-1713 +-1586 +-1312 +-882 +-359 +166 +607 +855 +826 +534 +33 +-556 +-1097 +-1488 +-1664 +-1622 +-1376 +-917 +-316 +311 +861 +1222 +1361 +1291 +1013 +599 +203 +-68 +-173 +-109 +46 +248 +512 +852 +1214 +1524 +1727 +1718 +1393 +799 +48 +-710 +-1285 +-1605 +-1717 +-1680 +-1518 +-1188 +-705 +-162 +350 +742 +886 +741 +350 +-204 +-789 +-1281 +-1585 +-1659 +-1531 +-1191 +-667 +-56 +538 +1023 +1296 +1349 +1197 +845 +417 +63 +-137 +-157 +-38 +134 +346 +633 +993 +1346 +1629 +1758 +1620 +1169 +489 +-288 +-988 +-1460 +-1682 +-1725 +-1640 +-1409 +-997 +-462 +84 +561 +861 +879 +622 +139 +-460 +-1024 +-1442 +-1631 +-1610 +-1389 +-965 +-407 +182 +723 +1120 +1306 +1291 +1064 +677 +274 +-18 +-148 +-110 +35 +214 +445 +758 +1118 +1456 +1698 +1756 +1511 +955 +227 +-550 +-1191 +-1585 +-1749 +-1746 +-1608 +-1292 +-811 +-243 +306 +745 +937 +823 +453 +-108 +-721 +-1237 +-1558 +-1649 +-1530 +-1229 +-755 +-180 +403 +908 +1224 +1323 +1223 +911 +497 +134 +-86 +-132 +-39 +116 +301 +563 +918 +1283 +1581 +1750 +1679 +1291 +648 +-119 +-853 +-1395 +-1682 +-1773 +-1710 +-1488 +-1077 +-535 +33 +542 +873 +919 +678 +209 +-391 +-965 +-1399 +-1624 +-1628 +-1433 +-1061 +-539 +41 +595 +1033 +1270 +1305 +1124 +762 +356 +46 +-121 +-114 +11 +175 +390 +697 +1066 +1411 +1671 +1764 +1575 +1073 +363 +-425 +-1116 +-1567 +-1785 +-1797 +-1651 +-1337 +-851 +-278 +272 +712 +921 +839 +495 +-42 +-642 +-1159 +-1500 +-1633 +-1552 +-1299 +-866 +-312 +268 +794 +1157 +1309 +1252 +985 +587 +209 +-49 +-150 +-95 +44 +226 +484 +841 +1221 +1545 +1754 +1744 +1424 +836 +80 +-700 +-1325 +-1691 +-1822 +-1772 +-1555 +-1159 +-623 +-53 +457 +818 +916 +731 +312 +-257 +-833 +-1306 +-1585 +-1634 +-1495 +-1169 +-676 +-98 +480 +970 +1261 +1344 +1208 +871 +444 +83 +-130 +-171 +-72 +89 +301 +602 +979 +1348 +1631 +1776 +1664 +1231 +554 +-237 +-970 +-1486 +-1738 +-1783 +-1665 +-1388 +-947 +-416 +113 +566 +837 +837 +576 +110 +-458 +-995 +-1385 +-1573 +-1562 +-1383 +-1013 +-485 +101 +665 +1102 +1327 +1336 +1123 +733 +310 +-12 +-166 +-158 +-38 +135 +379 +722 +1112 +1464 +1710 +1774 +1540 +1001 +258 +-538 +-1208 +-1617 +-1776 +-1746 +-1573 +-1238 +-755 +-218 +287 +686 +865 +766 +426 +-95 +-662 +-1153 +-1466 +-1580 +-1504 +-1250 +-808 +-246 +347 +881 +1227 +1351 +1257 +947 +516 +129 +-117 +-193 +-114 +41 +243 +527 +902 +1290 +1605 +1785 +1733 +1349 +704 +-79 +-847 +-1413 +-1702 +-1768 +-1680 +-1447 +-1057 +-552 +-19 +462 +803 +881 +698 +281 +-286 +-853 +-1301 +-1558 +-1610 +-1472 +-1134 +-621 +-23 +573 +1047 +1304 +1345 +1159 +779 +345 +7 +-176 +-187 +-65 +119 +358 +683 +1065 +1417 +1676 +1779 +1593 +1089 +377 +-409 +-1099 +-1535 +-1714 +-1709 +-1565 +-1287 +-855 +-337 +182 +622 +863 +833 +554 +61 +-522 +-1056 +-1434 +-1608 +-1578 +-1355 +-930 +-358 +251 +806 +1186 +1340 +1275 +992 +567 +161 +-121 +-228 +-164 +-4 +202 +477 +839 +1212 +1533 +1747 +1751 +1444 +848 +78 +-702 +-1304 +-1636 +-1746 +-1692 +-1504 +-1168 +-687 +-153 +367 +771 +928 +800 +418 +-141 +-731 +-1230 +-1549 +-1639 +-1524 +-1211 +-707 +-107 +492 +988 +1276 +1343 +1191 +837 +401 +33 +-184 +-219 +-104 +75 +302 +602 +971 +1331 +1618 +1766 +1658 +1231 +557 +-226 +-946 +-1441 +-1674 +-1727 +-1635 +-1402 +-1004 +-484 +60 +553 +873 +920 +686 +219 +-370 +-933 +-1370 +-1605 +-1621 +-1426 +-1021 +-465 +134 +687 +1105 +1298 +1283 +1055 +662 +248 +-56 +-197 +-165 +-24 +162 +403 +727 +1096 +1435 +1682 +1746 +1517 +984 +259 +-514 +-1155 +-1548 +-1711 +-1710 +-1576 +-1271 +-802 +-247 +297 +737 +944 +861 +519 +-17 +-627 +-1161 +-1513 +-1633 +-1544 +-1264 +-793 +-220 +353 +859 +1187 +1294 +1201 +900 +475 +95 +-140 +-196 +-99 +63 +256 +509 +852 +1216 +1524 +1716 +1680 +1321 +697 +-63 +-802 +-1353 +-1649 +-1738 +-1685 +-1485 +-1096 +-562 +10 +530 +896 +977 +768 +316 +-285 +-884 +-1354 +-1606 +-1627 +-1450 +-1082 +-561 +18 +576 +1018 +1256 +1289 +1109 +734 +307 +-20 +-193 +-188 +-60 +119 +339 +642 +1016 +1376 +1653 +1772 +1596 +1100 +399 +-384 +-1075 +-1529 +-1743 +-1776 +-1657 +-1362 +-881 +-302 +266 +737 +985 +934 +611 +78 +-540 +-1092 +-1474 +-1626 +-1568 +-1329 +-908 +-356 +227 +763 +1141 +1308 +1269 +1004 +590 +185 +-94 +-203 +-152 +-12 +166 +416 +768 +1157 +1502 +1740 +1767 +1476 +891 +130 +-654 +-1283 +-1649 +-1796 +-1762 +-1566 +-1188 +-659 +-79 +460 +857 +993 +839 +429 +-153 +-756 +-1250 +-1545 +-1605 +-1473 +-1170 +-696 +-129 +442 +933 +1239 +1329 +1198 +858 +420 +43 +-184 +-230 +-131 +32 +245 +549 +935 +1316 +1628 +1791 +1692 +1277 +607 +-187 +-937 +-1473 +-1748 +-1810 +-1693 +-1422 +-970 +-408 +152 +631 +926 +940 +681 +201 +-392 +-948 +-1370 +-1579 +-1580 +-1405 +-1035 +-515 +66 +628 +1072 +1297 +1305 +1087 +691 +261 +-55 +-213 +-204 +-85 +88 +333 +678 +1076 +1434 +1702 +1778 +1557 +1025 +285 +-518 +-1198 +-1616 +-1789 +-1763 +-1590 +-1243 +-744 +-185 +341 +754 +940 +841 +497 +-27 +-610 +-1120 +-1457 +-1581 +-1517 +-1277 +-840 +-285 +306 +840 +1203 +1336 +1254 +946 +505 +103 +-161 +-246 +-175 +-19 +188 +473 +851 +1240 +1564 +1758 +1722 +1362 +726 +-61 +-837 +-1411 +-1711 +-1781 +-1686 +-1448 +-1038 +-517 +21 +510 +854 +934 +752 +333 +-233 +-797 +-1251 +-1516 +-1580 +-1460 +-1139 +-642 +-54 +533 +1016 +1284 +1335 +1158 +774 +331 +-26 +-229 +-249 +-125 +62 +303 +633 +1025 +1392 +1668 +1787 +1624 +1137 +423 +-386 +-1106 +-1571 +-1763 +-1758 +-1605 +-1308 +-848 +-311 +216 +667 +928 +913 +642 +154 +-438 +-986 +-1388 +-1587 +-1577 +-1382 +-975 +-409 +202 +767 +1166 +1341 +1297 +1023 +594 +171 +-131 +-261 +-214 +-59 +145 +416 +778 +1162 +1495 +1723 +1745 +1453 +870 +112 +-673 +-1291 +-1630 +-1734 +-1680 +-1492 +-1153 +-675 +-143 +364 +768 +937 +828 +464 +-81 +-673 +-1177 +-1502 +-1615 +-1523 +-1241 +-754 +-158 +443 +951 +1252 +1332 +1189 +834 +392 +14 +-211 +-247 +-134 +50 +278 +585 +953 +1311 +1597 +1753 +1645 +1219 +543 +-248 +-982 +-1480 +-1698 +-1731 +-1618 +-1377 +-981 +-459 +87 +581 +910 +961 +735 +270 +-326 +-909 +-1362 +-1604 +-1623 +-1445 +-1062 +-506 +105 +677 +1101 +1301 +1285 +1049 +647 +218 +-97 +-238 +-204 +-50 +153 +406 +738 +1107 +1445 +1683 +1746 +1507 +963 +229 +-550 +-1189 +-1568 +-1712 +-1692 +-1543 +-1252 +-791 +-239 +307 +760 +980 +907 +570 +30 +-581 +-1117 +-1485 +-1623 +-1552 +-1280 +-807 +-227 +365 +883 +1218 +1322 +1211 +889 +449 +51 +-200 +-271 +-175 +6 +231 +516 +879 +1253 +1570 +1765 +1724 +1357 +716 +-63 +-822 +-1380 +-1677 +-1756 +-1681 +-1472 +-1084 +-550 +22 +548 +929 +1026 +833 +376 +-235 +-850 +-1336 +-1605 +-1636 +-1470 +-1109 +-578 +14 +578 +1027 +1266 +1292 +1109 +731 +297 +-47 +-224 +-221 +-91 +92 +318 +626 +1002 +1364 +1637 +1754 +1595 +1116 +418 +-364 +-1059 +-1525 +-1735 +-1769 +-1649 +-1359 +-890 +-316 +257 +749 +1019 +980 +664 +127 +-502 +-1073 +-1479 +-1650 +-1600 +-1352 +-911 +-348 +236 +777 +1153 +1308 +1254 +975 +554 +140 +-144 +-260 +-204 +-46 +152 +413 +767 +1159 +1496 +1724 +1749 +1457 +875 +124 +-662 +-1292 +-1660 +-1796 +-1758 +-1562 +-1183 +-658 +-73 +476 +885 +1023 +871 +462 +-126 +-740 +-1239 +-1536 +-1600 +-1464 +-1157 +-680 +-119 +442 +920 +1207 +1288 +1156 +807 +374 +11 +-203 +-240 +-131 +35 +242 +532 +909 +1284 +1592 +1760 +1676 +1262 +602 +-181 +-926 +-1453 +-1722 +-1787 +-1688 +-1420 +-973 +-404 +176 +674 +977 +993 +727 +233 +-375 +-943 +-1367 +-1575 +-1568 +-1386 +-1020 +-495 +90 +651 +1083 +1296 +1296 +1074 +676 +247 +-78 +-238 +-223 +-102 +72 +313 +653 +1047 +1405 +1671 +1752 +1539 +1021 +295 +-499 +-1174 +-1598 +-1778 +-1759 +-1580 +-1238 +-735 +-164 +376 +801 +993 +894 +542 +1 +-590 +-1100 +-1436 +-1558 +-1488 +-1255 +-836 +-292 +290 +816 +1172 +1301 +1216 +912 +477 +82 +-178 +-260 +-190 +-37 +160 +443 +816 +1214 +1551 +1757 +1724 +1366 +731 +-62 +-843 +-1425 +-1733 +-1811 +-1704 +-1448 +-1022 +-472 +88 +581 +917 +987 +783 +345 +-229 +-805 +-1255 +-1509 +-1563 +-1441 +-1127 +-639 +-66 +512 +985 +1250 +1295 +1118 +743 +310 +-40 +-234 +-250 +-137 +37 +265 +591 +983 +1354 +1636 +1758 +1602 +1119 +407 +-394 +-1112 +-1573 +-1767 +-1755 +-1586 +-1269 +-797 +-251 +279 +721 +967 +931 +637 +135 +-455 +-993 +-1378 +-1561 +-1545 +-1350 +-952 +-402 +197 +760 +1159 +1323 +1272 +995 +558 +127 +-175 +-303 +-257 +-101 +107 +389 +760 +1165 +1511 +1739 +1763 +1463 +861 +87 +-710 +-1342 +-1696 +-1795 +-1709 +-1489 +-1106 +-598 +-43 +473 +865 +1013 +879 +503 +-54 +-650 +-1158 +-1487 +-1601 +-1515 +-1235 +-759 +-169 +433 +950 +1252 +1326 +1184 +820 +365 +-27 +-262 +-310 +-200 +-13 +221 +534 +927 +1304 +1598 +1759 +1654 +1225 +543 +-254 +-989 +-1488 +-1709 +-1730 +-1595 +-1327 +-907 +-379 +159 +636 +945 +986 +756 +293 +-298 +-872 +-1309 +-1547 +-1570 +-1401 +-1034 +-499 +103 +673 +1102 +1300 +1283 +1040 +617 +174 +-160 +-321 +-292 +-145 +56 +314 +662 +1063 +1423 +1691 +1771 +1541 +1001 +267 +-529 +-1189 +-1583 +-1730 +-1700 +-1533 +-1216 +-742 +-186 +361 +813 +1035 +969 +630 +86 +-533 +-1084 +-1470 +-1626 +-1564 +-1301 +-833 +-245 +360 +888 +1225 +1334 +1221 +883 +423 +6 +-263 +-344 +-257 +-78 +149 +440 +813 +1203 +1534 +1737 +1706 +1351 +720 +-49 +-803 +-1359 +-1647 +-1729 +-1652 +-1441 +-1059 +-534 +37 +570 +952 +1065 +884 +449 +-157 +-775 +-1282 +-1578 +-1635 +-1489 +-1138 +-613 +-13 +566 +1031 +1276 +1299 +1102 +707 +252 +-113 +-309 +-311 +-178 +16 +254 +575 +964 +1332 +1617 +1743 +1590 +1114 +412 +-372 +-1060 +-1516 +-1724 +-1743 +-1612 +-1331 +-870 +-300 +273 +766 +1056 +1041 +744 +213 +-421 +-1001 +-1419 +-1602 +-1566 +-1337 +-910 +-352 +232 +768 +1142 +1290 +1227 +940 +500 +72 +-227 +-342 +-279 +-115 +94 +364 +724 +1123 +1477 +1722 +1753 +1463 +880 +120 +-664 +-1286 +-1648 +-1777 +-1736 +-1540 +-1163 +-625 +-22 +538 +962 +1115 +965 +546 +-61 +-700 +-1230 +-1548 +-1629 +-1508 +-1187 +-689 +-106 +475 +962 +1247 +1312 +1164 +798 +337 +-54 +-287 +-331 +-226 +-49 +173 +479 +869 +1262 +1586 +1767 +1686 +1273 +604 +-178 +-922 +-1453 +-1720 +-1778 +-1671 +-1404 +-949 +-369 +222 +737 +1054 +1071 +806 +295 +-335 +-932 +-1376 +-1589 +-1577 +-1372 +-989 +-455 +126 +679 +1097 +1288 +1270 +1029 +613 +167 +-169 +-330 +-308 +-164 +28 +277 +623 +1028 +1393 +1658 +1745 +1525 +998 +271 +-517 +-1185 +-1593 +-1758 +-1735 +-1556 +-1206 +-690 +-106 +449 +881 +1071 +962 +591 +29 +-586 +-1108 +-1455 +-1571 +-1484 +-1225 +-787 +-240 +327 +844 +1185 +1303 +1203 +883 +438 +27 +-250 +-342 +-272 +-113 +98 +385 +770 +1178 +1519 +1736 +1711 +1367 +742 +-37 +-809 +-1392 +-1708 +-1797 +-1694 +-1444 +-1018 +-461 +113 +624 +976 +1051 +842 +392 +-201 +-789 +-1247 +-1504 +-1543 +-1405 +-1088 +-596 +-31 +535 +1005 +1267 +1308 +1121 +734 +278 +-95 +-310 +-345 +-239 +-61 +185 +526 +935 +1329 +1637 +1781 +1638 +1169 +463 +-341 +-1069 +-1554 +-1774 +-1776 +-1601 +-1277 +-793 +-220 +329 +786 +1038 +997 +690 +172 +-428 +-974 +-1365 +-1536 +-1509 +-1310 +-920 +-388 +195 +745 +1143 +1308 +1259 +982 +548 +109 +-206 +-351 +-312 +-167 +32 +309 +679 +1091 +1450 +1696 +1739 +1464 +895 +139 +-653 +-1289 +-1648 +-1754 +-1679 +-1454 +-1075 +-562 +-7 +508 +897 +1040 +893 +507 +-54 +-652 +-1150 +-1471 +-1578 +-1491 +-1213 +-741 +-163 +437 +957 +1270 +1347 +1200 +830 +361 +-51 +-313 +-390 +-295 +-110 +128 +453 +858 +1260 +1582 +1765 +1682 +1262 +587 +-215 +-973 +-1498 +-1737 +-1754 +-1612 +-1324 +-884 +-346 +199 +684 +998 +1030 +792 +316 +-282 +-859 +-1303 +-1542 +-1572 +-1415 +-1045 +-508 +92 +668 +1102 +1307 +1296 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c4_261_626.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c4_261_626.samples new file mode 100644 index 00000000..9a48ade4 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c4_261_626.samples @@ -0,0 +1,4096 @@ +-791 +-82 +415 +714 +877 +989 +1063 +1075 +1030 +968 +952 +1002 +1099 +1190 +1245 +1298 +1382 +1474 +1508 +1434 +1235 +985 +786 +661 +568 +450 +317 +239 +245 +298 +321 +292 +215 +68 +-121 +-317 +-494 +-662 +-822 +-938 +-1001 +-972 +-872 +-767 +-714 +-712 +-709 +-717 +-773 +-941 +-1212 +-1492 +-1700 +-1836 +-1928 +-1982 +-1959 +-1757 +-1342 +-758 +-151 +345 +730 +1059 +1341 +1526 +1634 +1705 +1773 +1791 +1722 +1622 +1546 +1516 +1524 +1552 +1569 +1575 +1549 +1464 +1303 +1069 +833 +645 +489 +320 +119 +-72 +-189 +-234 +-233 +-224 +-224 +-238 +-235 +-200 +-178 +-232 +-376 +-584 +-798 +-980 +-1101 +-1170 +-1204 +-1173 +-1073 +-927 +-771 +-635 +-551 +-534 +-545 +-543 +-497 +-402 +-281 +-164 +-53 +63 +184 +285 +338 +355 +393 +495 +654 +827 +965 +1041 +1041 +992 +919 +840 +750 +665 +598 +557 +526 +483 +423 +358 +298 +239 +162 +49 +-105 +-280 +-446 +-568 +-628 +-669 +-727 +-774 +-791 +-766 +-748 +-821 +-1017 +-1315 +-1640 +-1995 +-2381 +-2721 +-2905 +-2843 +-2470 +-1811 +-1009 +-249 +320 +679 +878 +995 +1073 +1099 +1069 +1009 +977 +995 +1069 +1152 +1211 +1260 +1344 +1460 +1539 +1505 +1329 +1066 +822 +655 +545 +435 +307 +221 +222 +299 +350 +334 +246 +92 +-101 +-300 +-460 +-603 +-749 +-876 +-967 +-988 +-926 +-825 +-750 +-722 +-703 +-696 +-724 +-859 +-1110 +-1404 +-1640 +-1801 +-1916 +-1996 +-2004 +-1864 +-1515 +-955 +-337 +202 +618 +965 +1271 +1494 +1621 +1705 +1788 +1823 +1783 +1688 +1595 +1546 +1538 +1551 +1566 +1564 +1536 +1466 +1328 +1120 +888 +693 +541 +378 +178 +-34 +-189 +-257 +-259 +-231 +-210 +-229 +-258 +-249 +-210 +-214 +-309 +-487 +-716 +-932 +-1094 +-1189 +-1228 +-1209 +-1122 +-987 +-833 +-680 +-559 +-506 +-510 +-525 +-502 +-416 +-301 +-187 +-83 +20 +138 +250 +318 +339 +361 +440 +591 +775 +935 +1031 +1053 +1020 +956 +872 +774 +672 +588 +548 +536 +516 +467 +394 +323 +261 +195 +90 +-58 +-232 +-405 +-533 +-603 +-639 +-684 +-738 +-766 +-751 +-722 +-753 +-904 +-1187 +-1521 +-1886 +-2272 +-2646 +-2885 +-2896 +-2613 +-2032 +-1261 +-480 +136 +556 +794 +940 +1034 +1080 +1059 +1004 +958 +970 +1039 +1132 +1211 +1265 +1336 +1423 +1491 +1478 +1339 +1105 +865 +688 +564 +450 +326 +226 +206 +260 +319 +324 +275 +175 +16 +-185 +-389 +-570 +-741 +-880 +-963 +-973 +-907 +-804 +-719 +-687 +-677 +-677 +-704 +-811 +-1039 +-1333 +-1587 +-1761 +-1882 +-1971 +-2007 +-1918 +-1632 +-1126 +-515 +51 +503 +873 +1189 +1433 +1578 +1664 +1734 +1769 +1737 +1636 +1550 +1509 +1508 +1539 +1566 +1580 +1566 +1513 +1399 +1200 +961 +744 +583 +431 +254 +55 +-110 +-198 +-228 +-228 +-211 +-208 +-214 +-195 +-164 +-171 +-267 +-439 +-649 +-843 +-1003 +-1112 +-1185 +-1208 +-1151 +-1017 +-859 +-710 +-589 +-533 +-527 +-532 +-513 +-444 +-337 +-221 +-108 +-2 +114 +220 +294 +330 +356 +430 +570 +748 +904 +1014 +1053 +1031 +972 +896 +810 +720 +643 +588 +553 +518 +473 +411 +346 +284 +218 +121 +-10 +-176 +-353 +-502 +-598 +-650 +-703 +-759 +-790 +-787 +-762 +-788 +-919 +-1165 +-1473 +-1810 +-2176 +-2548 +-2818 +-2909 +-2707 +-2161 +-1401 +-608 +44 +501 +774 +942 +1051 +1101 +1084 +1030 +984 +991 +1051 +1131 +1194 +1238 +1302 +1403 +1499 +1512 +1388 +1152 +895 +703 +584 +482 +360 +255 +228 +286 +363 +376 +315 +185 +1 +-202 +-383 +-532 +-685 +-836 +-943 +-988 +-949 +-857 +-765 +-720 +-696 +-676 +-689 +-773 +-984 +-1272 +-1539 +-1730 +-1875 +-1985 +-2048 +-1995 +-1741 +-1265 +-666 +-85 +391 +779 +1123 +1385 +1561 +1669 +1752 +1800 +1790 +1711 +1618 +1562 +1539 +1549 +1569 +1584 +1579 +1547 +1455 +1281 +1043 +818 +643 +487 +297 +72 +-127 +-238 +-262 +-241 +-212 +-212 +-237 +-235 +-197 +-180 +-240 +-392 +-605 +-832 +-1024 +-1157 +-1228 +-1251 +-1208 +-1082 +-917 +-742 +-597 +-520 +-512 +-533 +-530 +-465 +-361 +-249 +-139 +-30 +95 +224 +314 +343 +346 +394 +517 +695 +871 +999 +1060 +1056 +1014 +941 +847 +737 +638 +578 +553 +536 +495 +430 +358 +291 +230 +148 +29 +-123 +-294 +-442 +-547 +-613 +-673 +-744 +-788 +-787 +-744 +-730 +-823 +-1044 +-1356 +-1687 +-2058 +-2461 +-2791 +-2940 +-2820 +-2388 +-1690 +-889 +-178 +341 +668 +863 +991 +1075 +1097 +1055 +999 +980 +1027 +1119 +1208 +1265 +1318 +1396 +1478 +1517 +1456 +1275 +1035 +823 +674 +557 +427 +297 +223 +235 +291 +318 +293 +218 +81 +-110 +-313 +-495 +-665 +-822 +-930 +-980 +-962 +-880 +-783 +-726 +-713 +-702 +-710 +-762 +-923 +-1192 +-1475 +-1687 +-1835 +-1941 +-2010 +-1993 +-1811 +-1414 +-838 +-233 +278 +684 +1025 +1312 +1512 +1629 +1713 +1773 +1776 +1714 +1633 +1561 +1530 +1535 +1558 +1570 +1564 +1526 +1446 +1285 +1060 +832 +647 +500 +338 +148 +-46 +-179 +-240 +-250 +-234 +-224 +-233 +-225 +-190 +-162 +-208 +-342 +-535 +-741 +-924 +-1073 +-1173 +-1228 +-1212 +-1108 +-953 +-792 +-647 +-558 +-523 +-524 +-523 +-484 +-401 +-293 +-182 +-73 +41 +155 +253 +312 +340 +388 +491 +647 +818 +949 +1027 +1044 +1011 +953 +875 +788 +696 +621 +571 +532 +488 +428 +355 +290 +232 +161 +55 +-92 +-262 +-427 +-552 +-623 +-673 +-731 +-782 +-795 +-770 +-747 +-800 +-970 +-1247 +-1565 +-1921 +-2328 +-2690 +-2902 +-2861 +-2502 +-1854 +-1049 +-298 +269 +634 +842 +977 +1058 +1082 +1049 +990 +960 +992 +1070 +1157 +1211 +1270 +1353 +1455 +1525 +1486 +1317 +1059 +822 +661 +555 +444 +321 +245 +257 +327 +376 +349 +254 +99 +-95 +-282 +-434 +-576 +-727 +-860 +-944 +-960 +-900 +-805 +-732 +-702 +-687 +-686 +-721 +-856 +-1107 +-1390 +-1622 +-1786 +-1913 +-1999 +-2008 +-1866 +-1515 +-975 +-374 +164 +601 +959 +1257 +1470 +1602 +1688 +1762 +1789 +1745 +1653 +1579 +1536 +1530 +1545 +1563 +1566 +1546 +1483 +1348 +1145 +912 +713 +550 +382 +177 +-38 +-198 +-265 +-264 +-231 +-207 +-224 +-250 +-238 +-201 +-203 +-300 +-485 +-710 +-920 +-1076 +-1170 +-1222 +-1218 +-1136 +-992 +-824 +-663 +-552 +-512 +-525 +-542 +-512 +-431 +-317 +-204 +-93 +27 +154 +265 +323 +335 +350 +426 +579 +757 +912 +1008 +1030 +1005 +947 +866 +770 +670 +591 +549 +537 +518 +469 +402 +329 +262 +198 +101 +-41 +-209 +-377 +-509 +-591 +-641 +-698 +-750 +-771 +-754 +-723 +-763 +-920 +-1195 +-1534 +-1894 +-2277 +-2643 +-2890 +-2914 +-2643 +-2066 +-1286 +-503 +121 +541 +787 +945 +1051 +1100 +1080 +1023 +980 +1003 +1087 +1187 +1257 +1297 +1351 +1430 +1492 +1484 +1359 +1132 +892 +715 +595 +479 +347 +239 +209 +253 +310 +318 +278 +178 +8 +-204 +-401 +-575 +-738 +-873 +-957 +-974 +-919 +-822 +-748 +-719 +-712 +-705 +-720 +-813 +-1034 +-1320 +-1569 +-1743 +-1869 +-1964 +-2002 +-1919 +-1633 +-1142 +-542 +27 +493 +864 +1175 +1415 +1568 +1665 +1748 +1786 +1752 +1678 +1594 +1549 +1544 +1559 +1577 +1583 +1570 +1523 +1412 +1217 +972 +758 +594 +449 +269 +56 +-118 +-219 +-250 +-241 +-223 +-219 +-223 +-207 +-175 +-180 +-270 +-443 +-660 +-875 +-1052 +-1169 +-1236 +-1250 +-1189 +-1061 +-903 +-738 +-609 +-546 +-544 +-555 +-532 +-464 +-359 +-251 +-143 +-27 +103 +226 +310 +348 +369 +434 +569 +731 +882 +994 +1042 +1037 +993 +921 +834 +743 +659 +596 +556 +519 +462 +398 +330 +269 +206 +119 +-9 +-174 +-347 +-497 +-593 +-644 +-696 +-755 +-790 +-780 +-739 +-743 +-857 +-1103 +-1418 +-1757 +-2128 +-2512 +-2808 +-2906 +-2725 +-2224 +-1490 +-690 +-15 +456 +741 +903 +1014 +1076 +1079 +1030 +977 +972 +1029 +1120 +1194 +1240 +1305 +1409 +1508 +1533 +1427 +1191 +928 +724 +601 +498 +372 +257 +210 +250 +321 +340 +281 +165 +-6 +-196 +-366 +-504 +-656 +-812 +-936 +-996 +-974 +-881 +-776 +-717 +-702 +-688 +-685 +-746 +-938 +-1231 +-1517 +-1718 +-1856 +-1956 +-2013 +-1973 +-1741 +-1287 +-701 +-115 +366 +746 +1081 +1357 +1544 +1647 +1726 +1779 +1790 +1731 +1635 +1569 +1542 +1548 +1568 +1585 +1582 +1549 +1458 +1281 +1044 +819 +645 +494 +312 +87 +-113 +-224 +-245 +-213 +-186 +-193 +-229 +-241 +-204 +-166 +-206 +-353 +-575 +-803 +-996 +-1122 +-1188 +-1210 +-1168 +-1051 +-901 +-737 +-598 +-514 +-497 +-516 +-516 +-466 +-373 +-259 +-155 +-54 +63 +179 +266 +299 +305 +345 +465 +642 +825 +958 +1026 +1027 +981 +912 +823 +718 +622 +554 +525 +517 +485 +431 +360 +288 +235 +164 +54 +-102 +-282 +-443 +-555 +-613 +-652 +-709 +-751 +-756 +-727 +-710 +-799 +-1014 +-1315 +-1644 +-2012 +-2414 +-2769 +-2954 +-2875 +-2466 +-1774 +-953 +-210 +338 +683 +873 +1000 +1076 +1096 +1055 +993 +969 +1013 +1105 +1200 +1259 +1307 +1383 +1470 +1518 +1461 +1279 +1032 +805 +652 +537 +413 +278 +192 +203 +273 +328 +319 +247 +108 +-91 +-301 +-483 +-656 +-809 +-918 +-971 +-959 +-887 +-803 +-745 +-723 +-715 +-714 +-757 +-908 +-1170 +-1446 +-1660 +-1803 +-1909 +-1980 +-1982 +-1827 +-1450 +-884 +-277 +245 +653 +997 +1294 +1504 +1622 +1705 +1766 +1781 +1723 +1643 +1579 +1547 +1548 +1561 +1563 +1553 +1520 +1444 +1303 +1084 +856 +672 +538 +387 +186 +-15 +-161 +-234 +-251 +-238 +-227 +-231 +-229 +-195 +-161 +-195 +-313 +-492 +-698 +-886 +-1036 +-1145 +-1206 +-1204 +-1116 +-974 +-810 +-654 +-543 +-498 +-498 +-501 +-476 +-403 +-301 +-194 +-96 +15 +136 +242 +304 +327 +359 +450 +600 +765 +906 +986 +1004 +974 +909 +833 +744 +655 +586 +543 +521 +483 +433 +366 +299 +233 +153 +43 +-93 +-254 +-411 +-536 +-614 +-666 +-728 +-783 +-797 +-774 +-748 +-796 +-970 +-1252 +-1571 +-1918 +-2287 +-2626 +-2841 +-2814 +-2474 +-1842 +-1062 +-315 +259 +631 +844 +980 +1069 +1109 +1082 +1029 +991 +1010 +1079 +1165 +1235 +1284 +1362 +1464 +1532 +1500 +1338 +1084 +837 +672 +568 +471 +353 +269 +265 +316 +350 +323 +243 +111 +-74 +-264 +-431 +-590 +-751 +-897 +-988 +-1010 +-947 +-841 +-755 +-720 +-716 +-712 +-740 +-858 +-1101 +-1395 +-1641 +-1812 +-1937 +-2026 +-2043 +-1911 +-1562 +-1015 +-401 +142 +564 +927 +1255 +1487 +1618 +1697 +1765 +1797 +1751 +1657 +1568 +1529 +1528 +1544 +1568 +1577 +1565 +1515 +1395 +1188 +952 +747 +584 +420 +213 +1 +-156 +-219 +-217 +-195 +-182 +-204 +-224 +-205 +-161 +-166 +-273 +-467 +-691 +-903 +-1063 +-1161 +-1211 +-1213 +-1132 +-990 +-832 +-681 +-569 +-516 +-517 +-526 +-504 +-425 +-313 +-198 +-95 +7 +122 +230 +295 +311 +333 +417 +572 +754 +910 +1012 +1040 +1014 +952 +872 +779 +681 +605 +559 +533 +498 +440 +369 +297 +238 +172 +73 +-64 +-230 +-397 +-534 +-623 +-672 +-719 +-770 +-794 +-779 +-749 +-782 +-929 +-1198 +-1522 +-1862 +-2225 +-2576 +-2816 +-2836 +-2578 +-2027 +-1280 +-517 +99 +522 +784 +948 +1050 +1090 +1080 +1028 +987 +1006 +1083 +1187 +1253 +1290 +1339 +1426 +1506 +1516 +1409 +1185 +939 +747 +621 +503 +372 +267 +237 +282 +338 +348 +301 +192 +12 +-202 +-394 +-566 +-726 +-861 +-947 +-973 +-932 +-840 +-763 +-732 +-737 +-740 +-758 +-850 +-1064 +-1353 +-1609 +-1789 +-1920 +-2013 +-2057 +-1985 +-1701 +-1203 +-593 +-25 +434 +808 +1145 +1410 +1569 +1661 +1727 +1760 +1729 +1648 +1559 +1507 +1505 +1532 +1557 +1571 +1564 +1518 +1415 +1231 +1000 +791 +624 +470 +285 +73 +-102 +-209 +-243 +-226 +-195 +-178 +-186 +-176 +-142 +-144 +-231 +-399 +-610 +-820 +-989 +-1104 +-1173 +-1194 +-1138 +-1006 +-849 +-694 +-577 +-511 +-501 +-509 +-499 +-448 +-347 +-229 +-113 +-3 +111 +222 +302 +339 +358 +420 +544 +710 +862 +978 +1025 +1016 +976 +910 +831 +723 +622 +544 +497 +462 +423 +371 +309 +249 +191 +108 +-13 +-171 +-343 +-490 +-591 +-651 +-705 +-763 +-795 +-786 +-753 +-765 +-886 +-1130 +-1446 +-1785 +-2156 +-2528 +-2811 +-2893 +-2703 +-2209 +-1488 +-703 +-34 +434 +724 +900 +1021 +1085 +1088 +1049 +1005 +1006 +1064 +1158 +1232 +1278 +1340 +1435 +1530 +1550 +1432 +1203 +949 +756 +640 +547 +430 +314 +269 +294 +349 +355 +300 +204 +48 +-138 +-309 +-458 +-620 +-787 +-914 +-977 +-948 +-850 +-749 +-705 +-698 +-690 +-698 +-766 +-963 +-1258 +-1544 +-1750 +-1898 +-2012 +-2077 +-2033 +-1791 +-1333 +-743 +-164 +321 +708 +1044 +1329 +1512 +1620 +1706 +1768 +1767 +1685 +1581 +1507 +1479 +1485 +1517 +1544 +1542 +1516 +1426 +1263 +1032 +811 +631 +480 +295 +74 +-114 +-218 +-237 +-217 +-198 +-203 +-219 +-210 +-158 +-122 +-174 +-327 +-542 +-771 +-963 +-1089 +-1156 +-1184 +-1149 +-1038 +-892 +-732 +-593 +-510 +-497 +-517 +-513 +-457 +-352 +-240 +-136 +-33 +81 +197 +280 +316 +324 +370 +497 +679 +863 +994 +1051 +1043 +996 +922 +825 +720 +628 +565 +541 +519 +475 +407 +327 +259 +195 +112 +-9 +-166 +-336 +-480 +-581 +-633 +-679 +-741 +-776 +-772 +-736 +-730 +-827 +-1046 +-1360 +-1699 +-2058 +-2429 +-2737 +-2878 +-2770 +-2365 +-1705 +-925 +-215 +316 +656 +865 +997 +1080 +1102 +1061 +1004 +985 +1040 +1140 +1229 +1275 +1316 +1393 +1501 +1557 +1501 +1318 +1068 +843 +688 +574 +450 +319 +251 +265 +330 +376 +359 +278 +119 +-95 +-315 +-497 +-655 +-798 +-916 +-980 +-963 +-880 +-780 +-723 +-717 +-708 +-700 +-741 +-894 +-1164 +-1444 +-1661 +-1811 +-1926 +-2014 +-2038 +-1891 +-1504 +-943 +-344 +178 +592 +942 +1234 +1441 +1570 +1675 +1746 +1751 +1690 +1596 +1524 +1491 +1491 +1506 +1526 +1533 +1513 +1446 +1299 +1078 +844 +665 +527 +371 +167 +-48 +-195 +-260 +-254 +-223 +-194 +-186 +-185 +-159 +-145 +-191 +-321 +-505 +-711 +-906 +-1058 +-1154 +-1197 +-1171 +-1066 +-917 +-758 +-614 +-512 +-480 +-491 +-497 +-461 +-377 +-269 +-163 +-61 +56 +180 +285 +345 +365 +396 +483 +629 +789 +929 +1014 +1035 +1014 +956 +879 +778 +672 +592 +540 +513 +477 +422 +349 +275 +210 +143 +45 +-91 +-266 +-436 +-566 +-640 +-682 +-744 +-796 +-815 +-796 +-772 +-827 +-998 +-1279 +-1608 +-1958 +-2334 +-2678 +-2887 +-2854 +-2526 +-1910 +-1126 +-366 +218 +593 +821 +966 +1066 +1112 +1088 +1026 +987 +1013 +1097 +1189 +1253 +1304 +1379 +1489 +1565 +1533 +1364 +1111 +870 +714 +618 +512 +381 +285 +277 +335 +380 +353 +275 +147 +-26 +-212 +-382 +-547 +-719 +-875 +-980 +-1005 +-935 +-822 +-738 +-719 +-721 +-715 +-735 +-850 +-1096 +-1394 +-1644 +-1811 +-1933 +-2022 +-2051 +-1949 +-1623 +-1085 +-473 +70 +509 +870 +1190 +1427 +1558 +1659 +1742 +1773 +1737 +1637 +1544 +1492 +1481 +1497 +1519 +1529 +1517 +1469 +1357 +1159 +924 +716 +561 +406 +212 +10 +-138 +-202 +-203 +-186 +-185 +-208 +-222 +-195 +-137 +-139 +-252 +-448 +-679 +-884 +-1037 +-1132 +-1183 +-1186 +-1119 +-990 +-830 +-676 +-564 +-519 +-525 +-532 +-500 +-415 +-300 +-190 +-97 +8 +129 +241 +304 +315 +331 +414 +571 +759 +924 +1025 +1055 +1029 +967 +880 +779 +680 +605 +557 +529 +485 +423 +353 +285 +230 +171 +77 +-62 +-231 +-395 +-523 +-604 +-657 +-724 +-781 +-796 +-775 +-745 +-775 +-926 +-1193 +-1513 +-1849 +-2216 +-2575 +-2826 +-2861 +-2604 +-2049 +-1294 +-518 +103 +527 +782 +943 +1052 +1100 +1086 +1031 +994 +1011 +1088 +1179 +1239 +1272 +1320 +1412 +1502 +1508 +1395 +1176 +932 +747 +632 +523 +391 +284 +257 +310 +371 +377 +319 +203 +15 +-203 +-399 +-560 +-710 +-842 +-939 +-979 +-939 +-847 +-763 +-733 +-728 +-716 +-722 +-808 +-1026 +-1320 +-1573 +-1750 +-1879 +-1979 +-2032 +-1963 +-1701 +-1212 +-600 +-24 +437 +810 +1138 +1392 +1547 +1635 +1725 +1784 +1760 +1674 +1577 +1521 +1507 +1519 +1537 +1546 +1532 +1485 +1387 +1206 +976 +765 +601 +456 +275 +63 +-119 +-225 +-250 +-226 +-191 +-170 +-177 +-167 +-140 +-147 +-240 +-413 +-624 +-835 +-1016 +-1145 +-1215 +-1222 +-1151 +-1022 +-866 +-713 +-580 +-504 +-496 +-516 +-517 +-465 +-361 +-243 +-130 +-22 +97 +217 +301 +338 +349 +399 +516 +679 +839 +952 +1007 +1002 +956 +884 +797 +696 +603 +540 +510 +480 +437 +381 +315 +249 +185 +101 +-21 +-179 +-353 +-503 +-602 +-656 +-700 +-752 +-785 +-782 +-751 +-748 +-857 +-1086 +-1398 +-1735 +-2101 +-2476 +-2770 +-2878 +-2712 +-2241 +-1530 +-739 +-53 +435 +732 +912 +1026 +1096 +1113 +1071 +1016 +1002 +1051 +1143 +1227 +1278 +1338 +1433 +1530 +1559 +1463 +1245 +986 +772 +644 +543 +422 +302 +245 +272 +333 +348 +298 +202 +50 +-134 +-314 +-484 +-660 +-832 +-960 +-1018 +-990 +-887 +-773 +-712 +-700 +-695 +-711 +-782 +-970 +-1256 +-1535 +-1741 +-1882 +-1981 +-2038 +-2007 +-1793 +-1363 +-774 +-183 +311 +706 +1049 +1328 +1520 +1647 +1730 +1790 +1796 +1727 +1626 +1549 +1514 +1519 +1545 +1562 +1561 +1530 +1444 +1282 +1054 +837 +656 +495 +317 +102 +-78 +-186 +-218 +-213 +-201 +-211 +-232 +-228 +-180 +-149 +-206 +-359 +-573 +-796 +-979 +-1104 +-1182 +-1215 +-1184 +-1075 +-921 +-763 +-628 +-545 +-525 +-540 +-537 +-483 +-388 +-273 +-166 +-62 +51 +167 +260 +305 +320 +372 +496 +674 +854 +987 +1048 +1041 +989 +913 +822 +723 +630 +565 +538 +517 +471 +408 +337 +274 +212 +133 +17 +-133 +-303 +-466 +-589 +-657 +-709 +-766 +-801 +-792 +-748 +-721 +-794 +-997 +-1296 +-1622 +-1969 +-2344 +-2669 +-2841 +-2781 +-2390 +-1722 +-930 +-201 +344 +684 +876 +1001 +1074 +1092 +1052 +993 +968 +1011 +1099 +1186 +1240 +1291 +1364 +1468 +1528 +1482 +1303 +1048 +813 +656 +551 +436 +312 +235 +244 +313 +362 +336 +250 +95 +-117 +-326 +-500 +-647 +-789 +-906 +-973 +-975 +-906 +-803 +-736 +-719 +-708 +-703 +-741 +-886 +-1149 +-1436 +-1656 +-1812 +-1928 +-2004 +-2008 +-1850 +-1472 +-911 +-300 +227 +629 +969 +1280 +1493 +1615 +1695 +1755 +1776 +1724 +1634 +1557 +1524 +1538 +1563 +1583 +1584 +1556 +1482 +1337 +1124 +898 +708 +560 +404 +200 +-13 +-169 +-241 +-244 +-211 +-179 +-187 +-212 +-207 +-187 +-214 +-326 +-518 +-740 +-946 +-1098 +-1192 +-1235 +-1212 +-1111 +-960 +-798 +-649 +-548 +-512 +-523 +-538 +-513 +-432 +-315 +-199 +-88 +24 +148 +264 +333 +355 +376 +458 +602 +778 +927 +1020 +1046 +1020 +965 +886 +789 +684 +598 +547 +525 +499 +451 +380 +311 +250 +183 +82 +-62 +-238 +-411 +-547 +-621 +-660 +-711 +-760 +-784 +-765 +-740 +-785 +-956 +-1239 +-1561 +-1901 +-2292 +-2655 +-2888 +-2884 +-2567 +-1946 +-1140 +-373 +214 +597 +823 +971 +1071 +1107 +1068 +995 +954 +977 +1056 +1143 +1201 +1241 +1313 +1418 +1496 +1476 +1322 +1073 +830 +661 +547 +434 +311 +219 +206 +266 +326 +323 +264 +153 +-13 +-193 +-366 +-534 +-715 +-876 +-970 +-975 +-898 +-793 +-712 +-687 +-668 +-652 +-677 +-800 +-1052 +-1354 +-1606 +-1777 +-1897 +-1982 +-2013 +-1901 +-1577 +-1057 +-459 +84 +526 +895 +1212 +1452 +1602 +1695 +1766 +1794 +1754 +1653 +1570 +1526 +1518 +1542 +1569 +1585 +1575 +1524 +1400 +1198 +960 +745 +574 +409 +209 +1 +-151 +-221 +-234 +-230 +-229 +-246 +-261 +-234 +-186 +-192 +-297 +-492 +-717 +-924 +-1071 +-1159 +-1216 +-1223 +-1161 +-1030 +-871 +-716 +-599 +-545 +-545 +-541 +-506 +-420 +-300 +-185 +-80 +27 +146 +254 +322 +345 +375 +464 +621 +802 +968 +1072 +1104 +1078 +1006 +917 +814 +708 +625 +579 +558 +523 +472 +401 +332 +275 +212 +118 +-25 +-204 +-379 +-519 +-603 +-651 +-709 +-768 +-799 +-788 +-747 +-773 +-921 +-1183 +-1505 +-1840 +-2219 +-2594 +-2868 +-2927 +-2697 +-2152 +-1393 +-599 +55 +496 +760 +914 +1015 +1065 +1041 +980 +936 +945 +1014 +1098 +1166 +1208 +1272 +1376 +1479 +1496 +1381 +1157 +904 +714 +590 +480 +355 +251 +221 +279 +354 +372 +319 +200 +15 +-196 +-380 +-535 +-680 +-821 +-916 +-951 +-908 +-812 +-724 +-679 +-665 +-656 +-669 +-756 +-972 +-1264 +-1525 +-1709 +-1840 +-1948 +-2004 +-1952 +-1707 +-1220 +-612 +-28 +441 +816 +1153 +1417 +1584 +1671 +1743 +1807 +1794 +1710 +1614 +1558 +1541 +1551 +1564 +1569 +1556 +1509 +1408 +1224 +987 +762 +594 +447 +262 +44 +-147 +-258 +-286 +-264 +-227 +-219 +-246 +-259 +-235 +-227 +-290 +-440 +-655 +-881 +-1072 +-1196 +-1260 +-1266 +-1204 +-1080 +-923 +-762 +-623 +-542 +-527 +-550 +-546 +-490 +-378 +-248 +-133 +-19 +106 +232 +327 +369 +388 +444 +567 +744 +921 +1051 +1114 +1109 +1060 +982 +886 +780 +679 +607 +572 +551 +513 +454 +382 +311 +240 +153 +27 +-137 +-319 +-486 +-596 +-646 +-693 +-753 +-797 +-804 +-763 +-750 +-849 +-1083 +-1405 +-1754 +-2135 +-2515 +-2808 +-2910 +-2751 +-2298 +-1598 +-809 +-107 +396 +699 +868 +979 +1047 +1055 +1004 +942 +917 +963 +1057 +1151 +1213 +1264 +1350 +1437 +1475 +1404 +1213 +955 +745 +613 +517 +407 +290 +231 +252 +322 +349 +319 +236 +99 +-80 +-262 +-432 +-606 +-774 +-893 +-939 +-908 +-805 +-694 +-631 +-625 +-630 +-643 +-710 +-890 +-1180 +-1476 +-1702 +-1851 +-1953 +-2004 +-1974 +-1773 +-1350 +-764 +-167 +322 +707 +1040 +1328 +1533 +1650 +1725 +1784 +1787 +1720 +1619 +1540 +1498 +1497 +1519 +1544 +1549 +1514 +1429 +1268 +1046 +821 +630 +469 +289 +86 +-97 +-218 +-267 +-276 +-268 +-269 +-285 +-285 +-251 +-221 +-273 +-430 +-653 +-877 +-1055 +-1177 +-1251 +-1282 +-1250 +-1131 +-969 +-809 +-666 +-565 +-531 +-530 +-522 +-476 +-379 +-256 +-137 +-34 +79 +199 +306 +367 +399 +457 +576 +744 +914 +1041 +1104 +1100 +1056 +984 +906 +812 +721 +645 +596 +567 +529 +471 +394 +324 +254 +174 +63 +-97 +-276 +-449 +-583 +-659 +-706 +-756 +-792 +-802 +-777 +-764 +-842 +-1047 +-1346 +-1666 +-2017 +-2392 +-2729 +-2919 +-2860 +-2487 +-1826 +-1025 +-286 +270 +619 +823 +957 +1038 +1049 +999 +929 +905 +942 +1027 +1108 +1160 +1202 +1287 +1412 +1485 +1446 +1268 +1013 +782 +630 +534 +432 +324 +255 +272 +350 +411 +403 +322 +167 +-40 +-236 +-392 +-530 +-676 +-805 +-888 +-900 +-836 +-744 +-692 +-676 +-665 +-663 +-704 +-853 +-1119 +-1409 +-1636 +-1795 +-1914 +-1991 +-1996 +-1836 +-1454 +-896 +-292 +230 +643 +993 +1297 +1509 +1628 +1707 +1773 +1796 +1742 +1643 +1563 +1521 +1517 +1530 +1538 +1529 +1497 +1426 +1288 +1078 +852 +664 +521 +359 +154 +-53 +-201 +-261 +-263 +-238 +-221 +-240 +-266 +-259 +-236 +-259 +-364 +-545 +-767 +-976 +-1131 +-1223 +-1264 +-1247 +-1155 +-1013 +-853 +-700 +-589 +-542 +-546 +-551 +-517 +-425 +-301 +-183 +-74 +47 +187 +316 +392 +411 +430 +504 +650 +831 +990 +1086 +1113 +1086 +1021 +935 +824 +719 +631 +588 +573 +545 +497 +426 +353 +283 +208 +97 +-59 +-243 +-419 +-549 +-613 +-654 +-709 +-768 +-804 +-790 +-761 +-805 +-984 +-1277 +-1611 +-1960 +-2334 +-2680 +-2893 +-2881 +-2577 +-1978 +-1204 +-446 +144 +527 +756 +905 +1005 +1042 +1012 +948 +905 +929 +1014 +1117 +1194 +1233 +1290 +1382 +1456 +1440 +1300 +1064 +826 +672 +575 +479 +361 +271 +253 +306 +352 +344 +285 +175 +11 +-176 +-350 +-517 +-685 +-833 +-916 +-924 +-845 +-729 +-643 +-626 +-638 +-643 +-671 +-785 +-1036 +-1341 +-1594 +-1770 +-1894 +-1979 +-2002 +-1889 +-1561 +-1024 +-409 +140 +560 +907 +1217 +1447 +1598 +1689 +1766 +1803 +1764 +1670 +1579 +1524 +1504 +1515 +1537 +1545 +1532 +1472 +1348 +1147 +909 +692 +522 +367 +179 +-16 +-164 +-242 +-271 +-272 +-269 +-283 +-298 +-273 +-234 +-247 +-359 +-549 +-763 +-957 +-1102 +-1199 +-1257 +-1264 +-1190 +-1055 +-894 +-736 +-616 +-552 +-543 +-544 +-517 +-436 +-310 +-183 +-69 +43 +174 +293 +374 +409 +448 +535 +678 +851 +1002 +1101 +1127 +1097 +1031 +950 +860 +770 +682 +630 +598 +564 +506 +436 +358 +283 +204 +92 +-58 +-242 +-426 +-580 +-670 +-715 +-760 +-797 +-812 +-794 +-757 +-790 +-944 +-1223 +-1557 +-1906 +-2281 +-2646 +-2899 +-2933 +-2677 +-2119 +-1353 +-558 +89 +529 +787 +940 +1034 +1075 +1051 +984 +929 +930 +997 +1086 +1162 +1207 +1260 +1362 +1458 +1476 +1364 +1129 +868 +666 +546 +456 +350 +265 +248 +310 +388 +401 +343 +214 +31 +-168 +-343 +-485 +-628 +-763 +-862 +-908 +-876 +-782 +-692 +-655 +-650 +-645 +-660 +-750 +-963 +-1257 +-1529 +-1727 +-1866 +-1970 +-2018 +-1951 +-1678 +-1189 +-582 +-4 +459 +834 +1162 +1432 +1617 +1712 +1779 +1821 +1801 +1711 +1608 +1537 +1507 +1513 +1527 +1537 +1529 +1489 +1392 +1218 +998 +793 +618 +458 +257 +31 +-171 +-281 +-310 +-291 +-260 +-257 +-276 +-285 +-259 +-246 +-307 +-469 +-693 +-928 +-1121 +-1244 +-1302 +-1306 +-1238 +-1104 +-945 +-779 +-639 +-553 +-526 +-530 +-513 +-446 +-327 +-194 +-75 +37 +155 +282 +379 +428 +449 +498 +612 +782 +954 +1080 +1133 +1115 +1061 +980 +887 +779 +674 +603 +571 +554 +518 +458 +384 +310 +239 +151 +18 +-155 +-345 +-517 +-630 +-692 +-742 +-795 +-832 +-831 +-790 +-779 +-879 +-1119 +-1443 +-1799 +-2176 +-2553 +-2841 +-2934 +-2763 +-2285 +-1574 +-790 +-106 +387 +691 +869 +985 +1052 +1048 +990 +922 +900 +946 +1033 +1117 +1179 +1244 +1333 +1429 +1455 +1372 +1177 +939 +742 +612 +505 +382 +272 +226 +264 +327 +352 +322 +236 +102 +-70 +-253 +-426 +-601 +-765 +-875 +-917 +-876 +-776 +-680 +-635 +-628 +-623 +-639 +-717 +-905 +-1190 +-1473 +-1684 +-1834 +-1937 +-1998 +-1969 +-1759 +-1329 +-750 +-164 +330 +726 +1073 +1365 +1568 +1676 +1751 +1803 +1799 +1721 +1612 +1528 +1491 +1498 +1527 +1544 +1539 +1503 +1417 +1264 +1043 +817 +631 +474 +301 +108 +-74 +-200 +-257 +-271 +-265 +-262 +-274 +-262 +-221 +-208 +-277 +-439 +-654 +-867 +-1043 +-1166 +-1244 +-1278 +-1241 +-1120 +-962 +-799 +-660 +-571 +-535 +-536 +-524 +-469 +-365 +-240 +-120 +-7 +109 +229 +328 +384 +413 +471 +590 +763 +935 +1058 +1122 +1120 +1079 +1015 +938 +844 +747 +670 +619 +578 +528 +457 +384 +315 +253 +173 +51 +-100 +-274 +-439 +-572 +-654 +-714 +-774 +-809 +-809 +-777 +-768 +-855 +-1069 +-1379 +-1719 +-2086 +-2470 +-2802 +-2963 +-2869 +-2469 +-1797 +-1003 +-278 +263 +611 +821 +962 +1039 +1050 +997 +932 +906 +942 +1018 +1094 +1150 +1208 +1301 +1411 +1474 +1422 +1234 +975 +749 +598 +492 +387 +278 +219 +245 +326 +382 +371 +291 +140 +-61 +-253 +-401 +-538 +-691 +-824 +-904 +-905 +-824 +-718 +-654 +-626 +-601 +-598 +-651 +-809 +-1084 +-1377 +-1616 +-1791 +-1925 +-2006 +-2004 +-1830 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c5_523_251.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c5_523_251.samples new file mode 100644 index 00000000..bceaae75 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c5_523_251.samples @@ -0,0 +1,4096 @@ +613 +725 +793 +611 +181 +-369 +-912 +-1361 +-1718 +-2012 +-2205 +-2172 +-1817 +-1251 +-633 +-27 +561 +1120 +1529 +1625 +1446 +1208 +1013 +887 +855 +902 +973 +1019 +952 +650 +108 +-476 +-900 +-1109 +-1188 +-1245 +-1262 +-1183 +-962 +-638 +-341 +-187 +-125 +-33 +92 +163 +106 +-5 +13 +243 +573 +835 +975 +1030 +1019 +919 +704 +403 +146 +22 +-34 +-140 +-348 +-614 +-835 +-946 +-1018 +-1190 +-1418 +-1517 +-1490 +-1458 +-1361 +-974 +-252 +619 +1400 +1890 +2020 +1848 +1543 +1258 +994 +746 +609 +658 +770 +708 +378 +-134 +-695 +-1203 +-1588 +-1885 +-2114 +-2194 +-1987 +-1505 +-898 +-270 +341 +924 +1405 +1630 +1552 +1324 +1108 +940 +836 +833 +905 +1001 +1037 +857 +395 +-217 +-746 +-1052 +-1186 +-1264 +-1308 +-1257 +-1059 +-735 +-387 +-174 +-109 +-60 +29 +106 +75 +-35 +-61 +134 +496 +827 +997 +1044 +1018 +933 +758 +483 +199 +33 +-13 +-55 +-199 +-455 +-735 +-928 +-1022 +-1151 +-1369 +-1520 +-1513 +-1466 +-1403 +-1134 +-536 +286 +1098 +1704 +1982 +1929 +1675 +1379 +1101 +833 +640 +625 +745 +765 +528 +69 +-475 +-1005 +-1439 +-1778 +-2050 +-2212 +-2120 +-1716 +-1130 +-504 +111 +708 +1245 +1583 +1597 +1386 +1152 +971 +858 +840 +907 +1006 +1078 +991 +610 +-3 +-615 +-1022 +-1189 +-1244 +-1270 +-1249 +-1117 +-846 +-503 +-237 +-148 +-133 +-74 +29 +92 +46 +-8 +92 +371 +693 +900 +975 +974 +923 +809 +602 +338 +138 +50 +-7 +-140 +-380 +-668 +-897 +-1013 +-1098 +-1272 +-1448 +-1488 +-1450 +-1432 +-1306 +-855 +-100 +757 +1482 +1910 +1984 +1793 +1501 +1220 +937 +695 +598 +686 +776 +653 +274 +-259 +-812 +-1292 +-1658 +-1948 +-2159 +-2174 +-1881 +-1345 +-733 +-128 +458 +1019 +1460 +1623 +1487 +1248 +1048 +907 +857 +901 +976 +1030 +994 +737 +226 +-372 +-840 +-1086 +-1179 +-1233 +-1255 +-1189 +-990 +-683 +-376 +-204 +-145 +-72 +47 +138 +111 +13 +6 +200 +516 +786 +937 +1005 +1014 +943 +758 +469 +189 +32 +-35 +-131 +-325 +-586 +-815 +-935 +-996 +-1142 +-1376 +-1509 +-1505 +-1476 +-1398 +-1074 +-409 +446 +1254 +1815 +2013 +1897 +1606 +1308 +1033 +783 +629 +656 +777 +754 +468 +-26 +-586 +-1113 +-1521 +-1836 +-2079 +-2203 +-2063 +-1620 +-1020 +-385 +241 +842 +1352 +1623 +1581 +1360 +1137 +962 +850 +831 +898 +990 +1046 +924 +518 +-79 +-645 +-1003 +-1163 +-1252 +-1310 +-1289 +-1126 +-816 +-458 +-205 +-121 +-80 +7 +98 +94 +-19 +-87 +48 +385 +744 +964 +1045 +1033 +957 +794 +529 +235 +37 +-33 +-72 +-188 +-410 +-667 +-862 +-972 +-1095 +-1317 +-1505 +-1541 +-1501 +-1452 +-1226 +-675 +127 +964 +1612 +1941 +1939 +1709 +1417 +1145 +881 +676 +637 +755 +811 +614 +177 +-368 +-901 +-1350 +-1705 +-2000 +-2204 +-2171 +-1818 +-1248 +-616 +3 +610 +1169 +1559 +1635 +1440 +1190 +990 +863 +836 +904 +1012 +1087 +1033 +714 +140 +-487 +-954 +-1180 +-1259 +-1293 +-1278 +-1156 +-900 +-560 +-270 +-143 +-123 +-78 +6 +64 +29 +-35 +40 +303 +640 +875 +974 +985 +933 +822 +617 +348 +130 +35 +-5 +-106 +-319 +-598 +-843 +-989 +-1084 +-1251 +-1443 +-1502 +-1453 +-1414 +-1313 +-932 +-230 +615 +1365 +1835 +1962 +1810 +1540 +1279 +1010 +753 +616 +674 +788 +720 +383 +-136 +-699 +-1195 +-1586 +-1902 +-2137 +-2205 +-1970 +-1458 +-835 +-210 +386 +952 +1410 +1612 +1518 +1289 +1083 +932 +862 +893 +980 +1059 +1052 +829 +340 +-270 +-773 +-1051 +-1160 +-1218 +-1248 +-1199 +-1022 +-730 +-425 +-242 +-183 +-123 +-10 +94 +97 +8 +-17 +144 +453 +736 +897 +964 +978 +925 +774 +514 +237 +60 +-14 +-91 +-266 +-525 +-783 +-939 +-1007 +-1122 +-1337 +-1496 +-1509 +-1483 +-1431 +-1160 +-557 +274 +1100 +1712 +1980 +1935 +1683 +1385 +1106 +839 +656 +645 +761 +772 +531 +70 +-478 +-1014 +-1452 +-1785 +-2045 +-2187 +-2084 +-1682 +-1108 +-488 +132 +738 +1282 +1616 +1628 +1415 +1184 +1012 +893 +858 +900 +976 +1040 +962 +608 +34 +-553 +-952 +-1138 +-1230 +-1295 +-1297 +-1169 +-889 +-533 +-249 +-133 +-92 +-19 +74 +96 +7 +-83 +3 +291 +645 +902 +1017 +1036 +974 +831 +581 +283 +62 +-35 +-81 +-187 +-389 +-638 +-842 +-954 +-1065 +-1271 +-1473 +-1525 +-1484 +-1445 +-1275 +-794 +-33 +809 +1502 +1898 +1954 +1759 +1473 +1201 +929 +700 +620 +723 +821 +690 +297 +-243 +-795 +-1265 +-1632 +-1931 +-2158 +-2187 +-1895 +-1353 +-724 +-100 +502 +1067 +1501 +1650 +1511 +1269 +1056 +904 +847 +894 +988 +1079 +1066 +808 +275 +-361 +-868 +-1144 +-1252 +-1301 +-1299 +-1195 +-958 +-623 +-313 +-159 +-126 +-91 +-16 +42 +15 +-56 +-11 +237 +585 +855 +976 +998 +957 +855 +664 +391 +145 +29 +1 +-71 +-261 +-538 +-800 +-962 +-1060 +-1221 +-1439 +-1539 +-1499 +-1445 +-1357 +-1030 +-383 +445 +1235 +1781 +1979 +1872 +1601 +1324 +1061 +805 +644 +666 +776 +743 +456 +-29 +-587 +-1107 +-1517 +-1838 +-2088 +-2196 +-2029 +-1564 +-957 +-320 +292 +869 +1358 +1611 +1558 +1338 +1123 +961 +869 +876 +964 +1052 +1076 +901 +449 +-169 +-717 +-1038 +-1162 +-1219 +-1254 +-1221 +-1062 +-780 +-460 +-249 +-192 +-150 +-52 +68 +102 +31 +-14 +112 +403 +704 +881 +950 +958 +913 +789 +557 +280 +89 +11 +-56 +-205 +-455 +-728 +-917 +-1006 +-1113 +-1316 +-1493 +-1520 +-1481 +-1435 +-1215 +-678 +111 +946 +1611 +1958 +1965 +1737 +1436 +1153 +885 +677 +634 +743 +792 +604 +179 +-360 +-897 +-1357 +-1714 +-1996 +-2175 +-2130 +-1772 +-1213 +-595 +25 +631 +1189 +1572 +1641 +1453 +1218 +1034 +911 +872 +909 +978 +1028 +968 +670 +130 +-459 +-892 +-1103 +-1193 +-1257 +-1272 +-1189 +-954 +-615 +-313 +-163 +-117 +-50 +49 +104 +45 +-53 +-12 +231 +578 +857 +1002 +1045 +1001 +873 +645 +349 +110 +-7 +-63 +-164 +-357 +-603 +-818 +-945 +-1050 +-1247 +-1468 +-1547 +-1511 +-1469 +-1341 +-925 +-192 +671 +1425 +1879 +1981 +1809 +1523 +1250 +982 +736 +613 +681 +803 +727 +379 +-147 +-711 +-1202 +-1573 +-1868 +-2106 +-2185 +-1963 +-1455 +-831 +-194 +415 +986 +1441 +1642 +1541 +1302 +1079 +909 +827 +858 +958 +1060 +1074 +873 +393 +-229 +-759 +-1077 +-1218 +-1286 +-1302 +-1223 +-1006 +-683 +-358 +-171 +-127 +-96 +-23 +38 +12 +-74 +-65 +147 +497 +806 +968 +1012 +982 +890 +713 +447 +187 +42 +2 +-58 +-223 +-485 +-758 +-941 +-1049 +-1192 +-1410 +-1545 +-1521 +-1465 +-1383 +-1105 +-504 +316 +1123 +1712 +1961 +1897 +1642 +1363 +1105 +849 +663 +646 +754 +758 +516 +58 +-487 +-1013 +-1442 +-1771 +-2036 +-2183 +-2073 +-1657 +-1065 +-427 +207 +805 +1322 +1619 +1600 +1378 +1146 +976 +868 +863 +944 +1046 +1095 +968 +565 +-51 +-642 +-1012 +-1158 +-1205 +-1234 +-1211 +-1071 +-802 +-479 +-246 +-181 +-166 +-95 +16 +75 +26 +-23 +84 +365 +679 +881 +958 +963 +917 +803 +585 +312 +105 +14 +-42 +-172 +-401 +-681 +-897 +-1011 +-1107 +-1290 +-1477 +-1526 +-1494 +-1466 +-1307 +-823 +-49 +805 +1510 +1911 +1968 +1782 +1499 +1215 +932 +697 +619 +716 +799 +657 +262 +-267 +-807 +-1280 +-1652 +-1958 +-2169 +-2167 +-1856 +-1306 +-685 +-66 +536 +1105 +1525 +1644 +1483 +1245 +1053 +924 +878 +917 +993 +1053 +1009 +735 +213 +-385 +-844 +-1080 +-1176 +-1236 +-1254 +-1180 +-967 +-655 +-352 +-192 +-139 +-74 +27 +94 +54 +-48 +-41 +168 +502 +792 +948 +1016 +1002 +897 +684 +391 +137 +13 +-33 +-121 +-306 +-562 +-794 +-931 +-1030 +-1215 +-1464 +-1595 +-1575 +-1533 +-1427 +-1058 +-357 +510 +1304 +1826 +1989 +1864 +1581 +1293 +1027 +778 +635 +678 +801 +762 +454 +-52 +-613 +-1126 +-1533 +-1845 +-2092 +-2194 +-2018 +-1552 +-942 +-301 +328 +922 +1417 +1661 +1584 +1345 +1119 +953 +857 +862 +943 +1044 +1086 +924 +484 +-132 +-688 +-1034 +-1189 +-1267 +-1303 +-1246 +-1047 +-726 +-385 +-171 +-113 +-86 +-19 +50 +27 +-75 +-110 +64 +415 +761 +960 +1019 +996 +912 +745 +482 +204 +29 +-18 +-54 +-187 +-434 +-718 +-929 +-1051 +-1187 +-1402 +-1560 +-1556 +-1493 +-1430 +-1190 +-630 +167 +990 +1615 +1921 +1912 +1689 +1407 +1142 +879 +677 +639 +749 +793 +592 +156 +-384 +-921 +-1376 +-1732 +-2015 +-2184 +-2113 +-1731 +-1158 +-534 +84 +685 +1231 +1592 +1634 +1421 +1177 +1001 +896 +877 +944 +1044 +1118 +1047 +690 +90 +-544 +-982 +-1166 +-1219 +-1242 +-1223 +-1100 +-847 +-523 +-268 +-183 +-178 +-128 +-28 +41 +10 +-46 +44 +317 +648 +878 +963 +962 +909 +802 +605 +339 +121 +18 +-37 +-151 +-373 +-651 +-886 +-1018 +-1106 +-1279 +-1467 +-1523 +-1489 +-1473 +-1359 +-939 +-205 +653 +1398 +1860 +1979 +1829 +1555 +1277 +992 +739 +624 +701 +811 +718 +354 +-176 +-737 +-1222 +-1599 +-1905 +-2133 +-2181 +-1919 +-1397 +-781 +-167 +431 +1007 +1473 +1671 +1554 +1307 +1097 +952 +897 +939 +1021 +1085 +1062 +819 +312 +-302 +-795 +-1061 +-1161 +-1215 +-1239 +-1179 +-992 +-698 +-395 +-228 +-173 +-110 +2 +94 +74 +-21 +-45 +131 +445 +730 +897 +970 +981 +918 +743 +466 +186 +28 +-27 +-103 +-280 +-543 +-786 +-932 +-1013 +-1159 +-1398 +-1552 +-1552 +-1510 +-1437 +-1141 +-506 +341 +1167 +1759 +1990 +1898 +1622 +1329 +1066 +811 +642 +654 +785 +796 +539 +63 +-503 +-1038 +-1461 +-1784 +-2034 +-2165 +-2044 +-1620 +-1034 +-407 +213 +811 +1331 +1633 +1613 +1392 +1165 +989 +873 +856 +930 +1029 +1093 +984 +592 +-13 +-596 +-971 +-1142 +-1231 +-1289 +-1268 +-1107 +-808 +-462 +-217 +-145 +-119 +-49 +39 +51 +-44 +-117 +4 +325 +688 +927 +1015 +1009 +938 +786 +531 +237 +34 +-37 +-61 +-168 +-389 +-663 +-883 +-1008 +-1135 +-1345 +-1534 +-1560 +-1509 +-1458 +-1263 +-755 +18 +860 +1541 +1908 +1943 +1741 +1457 +1185 +923 +703 +642 +752 +828 +667 +251 +-292 +-838 +-1304 +-1663 +-1956 +-2156 +-2148 +-1826 +-1268 +-639 +-11 +592 +1154 +1563 +1665 +1481 +1226 +1025 +901 +872 +937 +1039 +1120 +1079 +779 +207 +-434 +-919 +-1154 +-1226 +-1254 +-1238 +-1132 +-899 +-577 +-293 +-171 +-161 +-131 +-45 +20 +2 +-56 +4 +253 +586 +838 +947 +964 +921 +818 +630 +369 +146 +47 +8 +-87 +-296 +-578 +-835 +-994 +-1095 +-1262 +-1466 +-1542 +-1498 +-1460 +-1371 +-1018 +-339 +516 +1306 +1823 +1984 +1854 +1580 +1303 +1039 +787 +641 +682 +801 +749 +432 +-70 +-631 +-1133 +-1525 +-1835 +-2075 +-2174 +-1983 +-1498 +-883 +-253 +354 +931 +1411 +1646 +1565 +1323 +1107 +954 +886 +920 +1012 +1088 +1079 +866 +386 +-231 +-753 +-1044 +-1146 +-1192 +-1219 +-1179 +-1011 +-729 +-427 +-245 +-198 +-157 +-60 +44 +57 +-18 +-54 +95 +397 +694 +870 +949 +965 +920 +776 +516 +233 +46 +-23 +-89 +-249 +-500 +-761 +-932 +-1012 +-1128 +-1343 +-1507 +-1524 +-1495 +-1453 +-1219 +-641 +189 +1036 +1677 +1978 +1945 +1695 +1405 +1131 +862 +666 +639 +759 +802 +596 +154 +-394 +-938 +-1386 +-1724 +-2002 +-2157 +-2080 +-1701 +-1135 +-516 +110 +720 +1274 +1622 +1643 +1432 +1197 +1019 +901 +869 +923 +1012 +1077 +999 +655 +80 +-515 +-926 +-1115 +-1202 +-1270 +-1276 +-1158 +-890 +-551 +-274 +-165 +-136 +-68 +27 +59 +-21 +-108 +-27 +263 +628 +890 +1006 +1022 +968 +835 +594 +294 +62 +-35 +-69 +-155 +-349 +-611 +-839 +-980 +-1104 +-1313 +-1530 +-1596 +-1558 +-1517 +-1352 +-873 +-98 +767 +1490 +1901 +1974 +1800 +1520 +1247 +972 +731 +632 +721 +823 +707 +329 +-201 +-747 +-1222 +-1598 +-1906 +-2137 +-2174 +-1900 +-1363 +-730 +-97 +518 +1093 +1540 +1687 +1525 +1262 +1042 +894 +839 +893 +1001 +1099 +1091 +840 +312 +-325 +-844 +-1129 +-1239 +-1282 +-1272 +-1167 +-933 +-613 +-315 +-172 +-153 +-132 +-62 +-6 +-34 +-105 +-67 +170 +524 +814 +952 +982 +940 +840 +653 +393 +155 +40 +9 +-62 +-245 +-521 +-793 +-969 +-1081 +-1239 +-1458 +-1562 +-1520 +-1466 +-1388 +-1088 +-451 +381 +1183 +1741 +1958 +1874 +1618 +1345 +1085 +830 +662 +676 +800 +791 +518 +36 +-522 +-1054 +-1477 +-1800 +-2055 +-2173 +-2025 +-1576 +-974 +-338 +278 +860 +1357 +1625 +1576 +1342 +1125 +966 +882 +899 +994 +1097 +1127 +955 +495 +-135 +-706 +-1040 +-1162 +-1211 +-1238 +-1202 +-1047 +-776 +-470 +-267 +-215 +-185 +-95 +19 +61 +-1 +-42 +82 +373 +681 +875 +947 +952 +910 +788 +558 +280 +78 +-12 +-71 +-213 +-450 +-721 +-919 +-1020 +-1128 +-1327 +-1510 +-1549 +-1517 +-1484 +-1280 +-750 +51 +905 +1581 +1948 +1972 +1761 +1466 +1181 +906 +691 +637 +743 +804 +630 +222 +-309 +-850 +-1317 +-1683 +-1971 +-2151 +-2111 +-1766 +-1215 +-600 +21 +627 +1189 +1581 +1657 +1462 +1221 +1037 +923 +887 +931 +1011 +1065 +1009 +703 +155 +-448 +-894 +-1114 +-1207 +-1268 +-1277 +-1174 +-930 +-596 +-304 +-165 +-130 +-74 +14 +59 +-2 +-100 +-62 +177 +523 +814 +974 +1028 +990 +861 +629 +329 +83 +-33 +-75 +-159 +-336 +-573 +-789 +-930 +-1048 +-1251 +-1483 +-1586 +-1560 +-1522 +-1394 +-978 +-251 +616 +1376 +1851 +1978 +1833 +1557 +1276 +1004 +756 +632 +698 +818 +757 +427 +-85 +-643 +-1147 +-1544 +-1862 +-2102 +-2174 +-1953 +-1457 +-840 +-206 +412 +996 +1465 +1672 +1563 +1312 +1088 +926 +852 +889 +991 +1085 +1099 +898 +421 +-202 +-746 +-1077 +-1225 +-1295 +-1304 +-1213 +-989 +-668 +-354 +-176 +-137 +-120 +-64 +-16 +-40 +-111 +-92 +128 +480 +793 +958 +1005 +976 +878 +694 +423 +165 +24 +-7 +-52 +-202 +-454 +-728 +-925 +-1052 +-1208 +-1434 +-1579 +-1567 +-1504 +-1411 +-1122 +-523 +287 +1088 +1683 +1946 +1902 +1666 +1387 +1123 +871 +693 +683 +793 +808 +573 +117 +-431 +-969 +-1415 +-1764 +-2036 +-2175 +-2070 +-1667 +-1072 +-432 +198 +792 +1304 +1608 +1594 +1373 +1142 +978 +880 +881 +970 +1073 +1122 +996 +592 +-22 +-621 +-1009 +-1168 +-1225 +-1248 +-1213 +-1060 +-797 +-484 +-255 +-193 +-186 +-128 +-34 +11 +-33 +-74 +39 +315 +633 +843 +930 +937 +893 +782 +570 +311 +109 +16 +-37 +-159 +-376 +-645 +-867 +-1003 +-1126 +-1319 +-1515 +-1571 +-1539 +-1497 +-1321 +-837 +-67 +787 +1497 +1901 +1971 +1798 +1520 +1246 +968 +731 +638 +720 +803 +675 +300 +-217 +-755 +-1233 +-1614 +-1921 +-2136 +-2142 +-1836 +-1296 +-674 +-51 +555 +1116 +1534 +1660 +1502 +1260 +1063 +937 +894 +935 +1014 +1064 +1017 +752 +244 +-349 +-818 +-1068 +-1171 +-1228 +-1246 +-1166 +-953 +-642 +-347 +-192 +-148 +-101 +-22 +27 +-11 +-94 +-74 +140 +470 +761 +934 +1009 +1000 +901 +693 +399 +133 +-7 +-64 +-141 +-303 +-538 +-762 +-917 +-1037 +-1230 +-1476 +-1599 +-1580 +-1531 +-1418 +-1049 +-362 +490 +1272 +1795 +1970 +1863 +1611 +1334 +1067 +808 +651 +672 +784 +760 +477 +-1 +-552 +-1070 +-1489 +-1826 +-2076 +-2175 +-2004 +-1547 +-937 +-291 +337 +925 +1408 +1648 +1587 +1357 +1132 +959 +857 +864 +950 +1049 +1078 +923 +502 +-91 +-642 +-1004 +-1179 +-1272 +-1311 +-1251 +-1050 +-740 +-409 +-197 +-144 +-125 +-79 +-31 +-45 +-120 +-129 +48 +388 +730 +934 +1006 +987 +901 +726 +469 +198 +26 +-26 +-58 +-172 +-388 +-657 +-875 +-1029 +-1195 +-1427 +-1609 +-1626 +-1562 +-1463 +-1191 +-626 +164 +970 +1594 +1906 +1913 +1715 +1435 +1170 +912 +718 +669 +759 +792 +599 +188 +-336 +-865 +-1334 +-1708 +-1997 +-2163 +-2093 +-1727 +-1160 +-527 +103 +702 +1235 +1578 +1619 +1423 +1188 +1012 +906 +891 +964 +1062 +1119 +1029 +685 +110 +-500 +-942 +-1160 +-1242 +-1273 +-1241 +-1099 +-839 +-521 +-265 +-174 +-174 +-147 +-77 +-29 +-48 +-77 +21 +282 +606 +843 +949 +962 +909 +793 +590 +338 +129 +25 +-31 +-137 +-335 +-593 +-828 +-989 +-1120 +-1309 +-1506 +-1572 +-1534 +-1487 +-1341 +-911 +-186 +647 +1372 +1818 +1945 +1818 +1562 +1296 +1023 +777 +653 +703 +792 +703 +371 +-124 +-666 +-1164 +-1565 +-1877 +-2104 +-2150 +-1899 +-1393 +-777 +-147 +457 +1019 +1456 +1638 +1531 +1305 +1107 +970 +917 +948 +1025 +1079 +1040 +793 +311 +-277 +-769 +-1057 +-1188 +-1253 +-1266 +-1185 +-983 +-684 +-388 +-219 +-167 +-127 +-51 +12 +-3 +-69 +-62 +123 +431 +719 +900 +980 +981 +902 +721 +446 +172 +9 +-59 +-130 +-281 +-507 +-735 +-901 +-1022 +-1198 +-1441 +-1602 +-1611 +-1564 +-1458 +-1132 +-497 +329 +1128 +1711 +1958 +1903 +1661 +1379 +1110 +854 +680 +670 +768 +767 +530 +82 +-459 +-995 +-1438 +-1780 +-2035 +-2155 +-2027 +-1612 +-1025 +-386 +242 +833 +1339 +1624 +1611 +1401 +1179 +1013 +904 +882 +945 +1037 +1083 +963 +578 +0 +-575 +-967 +-1166 +-1266 +-1316 +-1276 +-1097 +-797 +-456 +-212 +-133 +-116 +-74 +-18 +-20 +-97 +-135 +2 +312 +660 +898 +998 +1003 +934 +777 +529 +246 +44 +-33 +-63 +-153 +-347 +-604 +-841 +-1011 +-1183 +-1415 +-1613 +-1655 +-1590 +-1496 +-1251 +-717 +52 +860 +1513 +1879 +1928 +1750 +1478 +1206 +940 +726 +654 +738 +794 +640 +253 +-265 +-802 +-1274 +-1651 +-1950 +-2143 +-2117 +-1788 +-1236 +-605 +24 +623 +1163 +1548 +1641 +1469 +1225 +1032 +912 +883 +946 +1042 +1117 +1071 +777 +232 +-391 +-881 +-1141 +-1238 +-1270 +-1242 +-1110 +-862 +-546 +-274 +-161 +-156 +-145 +-96 +-53 +-68 +-93 +-11 +236 +562 +822 +951 +985 +944 +834 +637 +380 +156 +41 +-8 +-96 +-285 +-545 +-799 +-984 +-1124 +-1313 +-1521 +-1605 +-1560 +-1492 +-1358 +-972 +-294 +525 +1275 +1772 +1939 +1838 +1593 +1329 +1064 +812 +664 +684 +775 +721 +426 +-59 +-606 +-1114 +-1524 +-1844 +-2078 +-2148 +-1943 +-1468 +-859 +-225 +383 +947 +1403 +1622 +1542 +1315 +1110 +963 +893 +923 +1012 +1085 +1070 +855 +394 +-202 +-721 +-1032 +-1169 +-1231 +-1251 +-1184 +-994 +-711 +-416 +-237 +-184 +-147 +-73 +2 +5 +-58 +-65 +96 +395 +693 +881 +969 +986 +931 +770 +508 +223 +33 +-48 +-113 +-251 +-475 +-714 +-893 +-1009 +-1157 +-1384 +-1567 +-1601 +-1563 +-1481 +-1201 +-617 +190 +1008 +1632 +1936 +1925 +1706 +1419 +1140 +879 +689 +657 +756 +783 +579 +158 +-369 +-903 +-1360 +-1720 +-1997 +-2145 +-2065 +-1709 +-1147 +-515 +132 +751 +1288 +1622 +1642 +1438 +1206 +1030 +920 +885 +942 +1025 +1076 +990 +650 +95 +-488 +-909 +-1125 +-1230 +-1291 +-1272 +-1130 +-858 +-522 +-250 +-136 +-107 +-62 +-4 +5 +-65 +-125 +-28 +250 +603 +874 +1008 +1032 +966 +818 +570 +281 +57 +-41 +-76 +-155 +-322 +-549 +-765 +-930 +-1092 +-1319 +-1541 +-1618 +-1581 +-1514 +-1330 +-853 +-99 +742 +1444 +1852 +1938 +1780 +1517 +1249 +976 +745 +648 +721 +809 +701 +344 +-163 +-702 +-1188 +-1585 +-1901 +-2136 +-2173 +-1903 +-1374 +-735 +-87 +539 +1107 +1526 +1665 +1510 +1254 +1043 +902 +855 +908 +1015 +1104 +1087 +841 +331 +-293 +-813 +-1118 +-1244 +-1293 +-1281 +-1162 +-921 +-602 +-307 +-154 +-133 +-120 +-75 +-41 +-63 +-106 +-43 +195 +529 +806 +950 +990 +955 +845 +649 +388 +152 +33 +-4 +-73 +-239 +-489 +-748 +-942 +-1086 +-1274 +-1500 +-1609 +-1573 +-1503 +-1395 +-1064 +-424 +398 +1180 +1724 +1937 +1863 +1627 +1361 +1096 +841 +669 +665 +762 +745 +489 +33 +-507 +-1035 +-1470 +-1810 +-2076 +-2188 +-2031 +-1584 +-981 +-336 +296 +880 +1362 +1611 +1560 +1331 +1115 +959 +876 +894 +993 +1094 +1109 +933 +497 +-109 +-665 +-1013 +-1170 +-1234 +-1256 +-1198 +-1018 +-736 +-433 +-233 +-183 +-163 +-98 +-13 +14 +-42 +-62 +74 +359 +669 +868 +956 +972 +929 +800 +565 +292 +88 +-2 +-63 +-194 +-416 +-676 +-878 +-1007 +-1141 +-1354 +-1543 +-1588 +-1556 +-1495 +-1265 +-721 +72 +905 +1565 +1914 +1954 +1760 +1472 +1186 +903 +685 +624 +719 +781 +621 +228 +-289 +-830 +-1314 +-1698 +-2001 +-2184 +-2142 +-1796 +-1240 +-608 +32 +644 +1197 +1578 +1648 +1453 +1212 +1030 +911 +873 +920 +1003 +1063 +1005 +700 +167 +-424 +-877 +-1112 +-1214 +-1270 +-1265 +-1142 +-888 +-559 +-278 +-150 +-122 +-81 +-13 +22 +-32 +-106 +-46 +201 +548 +837 +997 +1041 +994 +862 +634 +347 +107 +-15 +-61 +-137 +-297 +-522 +-745 +-913 +-1064 +-1284 +-1519 +-1619 +-1582 +-1523 +-1371 +-939 +-210 +641 +1377 +1837 +1964 +1825 +1553 +1275 +1001 +753 +626 +680 +792 +733 +413 +-86 +-637 +-1151 +-1565 +-1891 +-2131 +-2199 +-1972 +-1470 +-837 +-187 +437 +1006 +1458 +1649 +1531 +1277 +1058 +905 +835 +872 +978 +1082 +1094 +891 +413 +-210 +-757 +-1090 +-1237 +-1294 +-1289 +-1181 +-950 +-635 +-329 +-159 +-127 +-118 +-76 +-36 +-59 +-116 +-81 +139 +480 +789 +958 +1009 +985 +890 +705 +442 +188 +50 +16 +-29 +-171 +-414 +-682 +-894 +-1045 +-1219 +-1452 +-1597 +-1576 +-1505 +-1400 +-1105 +-510 +291 +1080 +1664 +1927 +1883 +1655 +1378 +1113 +857 +675 +654 +752 +759 +532 +96 +-434 +-968 +-1421 +-1780 +-2055 +-2189 +-2075 +-1666 +-1077 +-440 +192 +785 +1295 +1594 +1582 +1357 +1124 +965 +874 +879 +965 +1072 +1116 +982 +572 +-39 +-637 +-1027 +-1187 +-1240 +-1252 +-1201 +-1036 +-765 +-458 +-243 +-186 +-183 +-135 +-53 +-9 +-42 +-62 +63 +339 +653 +866 +955 +966 +924 +807 +591 +326 +120 +27 +-28 +-142 +-348 +-612 +-842 +-994 +-1133 +-1335 +-1531 +-1587 +-1555 +-1507 +-1318 +-823 +-54 +795 +1498 +1896 +1969 +1803 +1526 +1242 +959 +720 +629 +705 +781 +652 +274 +-246 +-788 +-1275 +-1664 +-1974 +-2178 +-2169 +-1859 +-1317 +-689 +-55 +556 +1117 +1531 +1651 +1482 +1234 +1039 +912 +871 +922 +1007 +1061 +1011 +733 +215 +-378 +-846 +-1094 +-1191 +-1237 +-1230 +-1127 +-905 +-601 +-316 +-170 +-138 +-104 +-37 +5 +-29 +-95 +-53 +168 +497 +786 +959 +1031 +1012 +903 +687 +400 +151 +21 +-24 +-98 +-254 +-480 +-702 +-868 +-1013 +-1217 +-1472 +-1605 +-1591 +-1537 +-1414 +-1038 +-337 +520 +1300 +1809 +1973 +1856 +1588 +1313 +1043 +789 +647 +681 +797 +770 +479 +-8 +-565 +-1089 +-1514 +-1845 +-2099 +-2201 +-2021 +-1555 +-937 +-283 +354 +944 +1420 +1645 +1561 +1316 +1092 +931 +843 +865 +967 +1072 +1103 +930 +485 +-130 +-691 +-1048 +-1212 +-1282 +-1296 +-1217 +-1003 +-688 +-367 +-167 +-125 +-119 +-84 +-46 +-67 +-133 +-120 +79 +423 +760 +963 +1037 +1019 +924 +739 +469 +200 +39 +-3 +-33 +-151 +-372 +-642 +-866 +-1026 +-1203 +-1439 +-1609 +-1610 +-1539 +-1448 +-1179 +-603 +196 +1002 +1616 +1912 +1900 +1692 +1415 +1142 +876 +682 +647 +750 +788 +585 +160 +-371 +-903 +-1368 +-1734 +-2032 +-2202 +-2122 +-1741 +-1163 +-528 +108 +713 +1241 +1569 +1587 +1365 +1118 +946 +849 +852 +944 +1065 +1135 +1037 +669 +76 +-546 +-983 +-1182 +-1243 +-1262 +-1216 +-1063 +-797 +-486 +-251 +-178 +-185 +-156 +-89 +-43 +-59 +-76 +38 +311 +631 +860 +966 +983 +936 +817 +607 +350 +144 +47 +-4 +-113 +-320 +-588 +-832 +-993 +-1125 +-1316 +-1511 +-1566 +-1517 +-1464 +-1315 +-882 +-159 +673 +1389 +1818 +1924 +1797 +1543 +1271 +992 +741 +625 +689 +789 +697 +350 +-156 +-701 +-1194 +-1586 +-1907 +-2133 +-2165 +-1903 +-1386 +-764 +-125 +484 +1049 +1484 +1636 +1493 +1244 +1041 +906 +860 +906 +1004 +1076 +1044 +788 +290 +-307 +-794 +-1070 +-1178 +-1226 +-1230 +-1135 +-926 +-635 +-358 +-209 +-173 +-129 +-45 +21 +4 +-57 +-34 +163 +476 +764 +942 +1016 +1021 +938 +749 +471 +201 +47 +-13 +-82 +-236 +-468 +-701 +-874 +-1003 +-1187 +-1438 +-1597 +-1602 +-1558 +-1457 +-1126 +-468 +378 +1186 +1765 +2000 +1928 +1674 +1379 +1099 +831 +656 +658 +768 +770 +519 +62 +-486 +-1025 +-1472 +-1821 +-2086 +-2204 +-2061 +-1629 +-1034 +-387 +257 +859 +1370 +1642 +1597 +1352 +1115 +945 +843 +838 +917 +1022 +1072 +941 +540 +-55 +-629 +-1008 +-1183 +-1264 +-1296 +-1239 +-1047 +-743 +-412 +-187 +-127 +-119 +-79 +-27 +-35 +-111 +-136 +16 +340 +689 +924 +1022 +1021 +940 +771 +512 +237 +54 +-4 +-30 +-127 +-327 +-586 +-821 +-998 +-1176 +-1416 +-1611 +-1644 +-1581 +-1491 +-1240 +-687 +107 +941 +1594 +1926 +1944 +1743 +1455 +1173 +899 +685 +622 +715 +778 +619 +221 +-301 +-844 +-1323 +-1707 +-2011 +-2195 +-2150 +-1802 +-1240 +-604 +37 +647 +1194 +1567 +1628 +1424 +1162 +967 +849 +836 +914 +1033 +1111 +1046 +725 +157 +-470 +-947 +-1180 +-1254 +-1268 +-1218 +-1063 +-799 +-490 +-242 +-152 +-165 +-156 +-106 +-67 +-80 +-99 +8 +276 +606 +859 +979 +1007 +956 +830 +623 +364 +161 +69 +33 +-57 +-252 +-515 +-763 +-945 +-1092 +-1288 +-1502 +-1580 +-1537 +-1476 +-1344 +-954 +-257 +584 +1339 +1820 +1963 +1848 +1592 +1320 +1045 +791 +654 +690 +797 +742 +430 +-67 +-622 +-1138 +-1557 +-1886 +-2123 +-2187 +-1967 +-1481 +-868 +-219 +404 +978 +1428 +1619 +1509 +1265 +1057 +918 +862 +905 +1007 +1086 +1066 +838 +353 +-261 +-776 +-1071 +-1183 +-1228 +-1227 +-1136 +-932 +-646 +-364 +-209 +-178 +-152 +-75 +-3 +-3 +-60 +-52 +126 +427 +718 +896 +976 +990 +926 +759 +497 +224 +53 +-15 +-76 +-218 +-442 +-682 +-864 +-995 +-1153 +-1385 +-1559 +-1577 +-1540 +-1468 +-1186 +-575 +254 +1079 +1692 +1971 +1940 +1703 +1407 +1121 +848 +660 +642 +751 +776 +560 +128 +-408 +-945 +-1406 +-1767 +-2050 +-2201 +-2100 +-1703 +-1117 +-479 +165 +774 +1297 +1602 +1589 +1362 +1123 +954 +850 +836 +910 +1017 +1073 +969 +604 +27 +-562 +-967 +-1161 +-1245 +-1285 +-1248 +-1081 +-796 +-469 +-224 +-142 +-134 +-94 +-36 +-26 +-88 +-128 +-6 +294 +647 +904 +1029 +1047 +-1439 +-1685 +-1621 +-1486 +-1426 +-1222 +-642 +217 +1079 +1712 +1968 +1916 +1691 +1445 +1220 +915 +626 +548 +707 +797 +571 +97 +-441 +-957 +-1377 +-1711 +-2034 +-2253 +-2164 +-1693 +-1054 +-454 +109 +671 +1261 +1667 +1645 +1326 +1067 +968 +919 +903 +916 +947 +995 +964 +650 +42 +-608 +-1021 +-1155 +-1198 +-1257 +-1258 +-1099 +-783 +-413 +-150 +-129 +-178 +-123 +-7 +27 +-81 +-192 +-74 +275 +658 +876 +949 +987 +998 +913 +647 +286 +26 +-28 +2 +-74 +-304 +-583 +-783 +-867 +-987 +-1312 +-1665 +-1720 +-1563 +-1470 +-1346 +-901 +-102 +801 +1541 +1935 +1963 +1773 +1512 +1294 +1029 +714 +542 +642 +808 +722 +319 +-219 +-760 +-1223 +-1584 +-1905 +-2181 +-2246 +-1917 +-1304 +-663 +-72 +489 +1072 +1575 +1716 +1461 +1144 +976 +897 +861 +883 +955 +1040 +1085 +886 +348 +-353 +-901 +-1152 +-1220 +-1268 +-1288 +-1169 +-878 +-495 +-167 +-71 +-147 +-158 +-67 +-2 +-66 +-180 +-130 +186 +601 +887 +969 +973 +972 +927 +736 +403 +94 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c6_1046_50.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c6_1046_50.samples new file mode 100644 index 00000000..7a59f17f --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_c6_1046_50.samples @@ -0,0 +1,4096 @@ +-1220 +-1107 +-898 +-788 +-774 +-705 +-565 +-415 +-274 +-91 +213 +627 +1013 +1320 +1563 +1712 +1745 +1658 +1517 +1385 +1295 +1138 +886 +686 +630 +594 +448 +264 +170 +146 +83 +-107 +-438 +-809 +-1117 +-1362 +-1572 +-1635 +-1519 +-1345 +-1209 +-1181 +-1214 +-1135 +-938 +-814 +-794 +-729 +-585 +-425 +-279 +-111 +169 +572 +968 +1276 +1531 +1697 +1745 +1670 +1534 +1402 +1309 +1167 +928 +708 +638 +613 +474 +278 +165 +153 +111 +-51 +-360 +-731 +-1056 +-1310 +-1548 +-1663 +-1572 +-1384 +-1217 +-1165 +-1195 +-1135 +-938 +-796 +-782 +-744 +-608 +-448 +-297 +-146 +110 +505 +913 +1231 +1496 +1680 +1765 +1712 +1559 +1419 +1322 +1204 +969 +730 +643 +633 +519 +319 +174 +146 +113 +-31 +-320 +-681 +-999 +-1252 +-1486 +-1627 +-1572 +-1397 +-1227 +-1169 +-1203 +-1175 +-980 +-804 +-772 +-745 +-622 +-463 +-316 +-174 +52 +426 +839 +1172 +1445 +1652 +1753 +1716 +1580 +1436 +1342 +1237 +1017 +767 +648 +647 +546 +343 +190 +155 +138 +14 +-262 +-631 +-976 +-1238 +-1475 +-1633 +-1593 +-1421 +-1235 +-1155 +-1194 +-1197 +-1026 +-841 +-798 +-782 +-665 +-495 +-346 +-208 +3 +362 +797 +1142 +1415 +1632 +1750 +1731 +1600 +1440 +1334 +1253 +1048 +783 +633 +634 +565 +371 +192 +147 +146 +56 +-193 +-560 +-920 +-1186 +-1421 +-1615 +-1625 +-1469 +-1268 +-1159 +-1178 +-1197 +-1037 +-833 +-773 +-788 +-699 +-541 +-384 +-244 +-59 +279 +711 +1082 +1366 +1598 +1734 +1739 +1612 +1448 +1340 +1267 +1086 +817 +636 +626 +587 +407 +220 +150 +152 +77 +-150 +-510 +-869 +-1141 +-1370 +-1583 +-1624 +-1482 +-1286 +-1161 +-1177 +-1221 +-1098 +-863 +-766 +-780 +-711 +-558 +-403 +-266 +-97 +213 +640 +1027 +1324 +1558 +1709 +1734 +1637 +1490 +1371 +1300 +1138 +869 +661 +636 +613 +448 +253 +169 +175 +115 +-91 +-438 +-809 +-1106 +-1346 +-1571 +-1646 +-1515 +-1314 +-1169 +-1158 +-1208 +-1119 +-900 +-781 +-790 +-733 +-583 +-423 +-288 +-135 +145 +567 +971 +1277 +1536 +1703 +1756 +1674 +1520 +1383 +1307 +1167 +911 +681 +632 +630 +484 +279 +171 +178 +147 +-24 +-357 +-743 +-1060 +-1302 +-1542 +-1661 +-1569 +-1369 +-1204 +-1158 +-1204 +-1143 +-917 +-771 +-782 +-758 +-617 +-452 +-307 +-167 +90 +501 +922 +1236 +1485 +1671 +1745 +1687 +1534 +1390 +1314 +1203 +960 +709 +630 +647 +530 +320 +182 +167 +144 +-7 +-318 +-701 +-1015 +-1250 +-1488 +-1641 +-1580 +-1390 +-1210 +-1164 +-1220 +-1189 +-978 +-787 +-773 +-758 +-627 +-462 +-321 +-197 +23 +413 +846 +1178 +1440 +1647 +1745 +1709 +1569 +1419 +1330 +1233 +1003 +732 +622 +639 +545 +342 +189 +172 +176 +47 +-242 +-633 +-977 +-1228 +-1462 +-1637 +-1606 +-1416 +-1219 +-1139 +-1187 +-1185 +-1001 +-809 +-786 +-792 +-676 +-506 +-354 +-224 +-16 +347 +785 +1137 +1405 +1616 +1731 +1704 +1576 +1433 +1340 +1258 +1047 +781 +638 +645 +572 +371 +191 +147 +151 +63 +-186 +-550 +-901 +-1170 +-1406 +-1606 +-1613 +-1457 +-1273 +-1167 +-1190 +-1209 +-1040 +-818 +-759 +-779 +-690 +-526 +-376 +-245 +-61 +277 +716 +1083 +1368 +1599 +1734 +1733 +1608 +1444 +1335 +1260 +1074 +806 +635 +644 +608 +432 +244 +175 +172 +86 +-152 +-519 +-885 +-1152 +-1378 +-1584 +-1617 +-1468 +-1263 +-1147 +-1172 +-1219 +-1091 +-868 +-781 +-792 +-717 +-562 +-401 +-267 +-98 +218 +652 +1034 +1324 +1557 +1707 +1736 +1633 +1479 +1361 +1286 +1126 +869 +668 +643 +615 +448 +257 +179 +178 +117 +-85 +-431 +-803 +-1107 +-1355 +-1580 +-1645 +-1515 +-1317 +-1169 +-1151 +-1202 +-1115 +-901 +-795 +-802 +-738 +-590 +-432 +-298 +-140 +148 +566 +969 +1274 +1523 +1695 +1743 +1660 +1509 +1378 +1302 +1157 +905 +691 +650 +643 +499 +296 +182 +170 +123 +-55 +-379 +-750 +-1067 +-1316 +-1546 +-1646 +-1550 +-1364 +-1212 +-1180 +-1220 +-1144 +-925 +-789 +-791 +-753 +-620 +-464 +-321 +-166 +101 +511 +922 +1238 +1498 +1686 +1753 +1692 +1549 +1409 +1326 +1194 +948 +709 +634 +631 +512 +317 +188 +171 +138 +-18 +-323 +-706 +-1029 +-1280 +-1512 +-1642 +-1574 +-1388 +-1221 +-1167 +-1213 +-1176 +-978 +-814 +-791 +-762 +-638 +-481 +-340 +-197 +41 +433 +856 +1195 +1465 +1663 +1756 +1713 +1577 +1436 +1348 +1228 +1002 +754 +650 +641 +540 +348 +200 +169 +141 +11 +-268 +-636 +-982 +-1254 +-1494 +-1648 +-1605 +-1432 +-1249 +-1174 +-1203 +-1182 +-1006 +-832 +-799 +-785 +-674 +-516 +-366 +-225 +1 +370 +795 +1142 +1418 +1636 +1752 +1729 +1604 +1460 +1362 +1263 +1057 +805 +670 +659 +577 +389 +215 +155 +129 +25 +-215 +-576 +-925 +-1208 +-1453 +-1625 +-1616 +-1458 +-1279 +-1189 +-1209 +-1213 +-1059 +-861 +-796 +-786 +-696 +-545 +-392 +-245 +-40 +304 +732 +1102 +1387 +1610 +1739 +1747 +1644 +1495 +1379 +1278 +1091 +836 +674 +648 +593 +429 +258 +181 +153 +61 +-166 +-511 +-876 +-1171 +-1415 +-1597 +-1616 +-1483 +-1302 +-1192 +-1198 +-1221 +-1096 +-896 +-809 +-792 +-707 +-558 +-405 +-264 +-73 +246 +668 +1052 +1352 +1586 +1732 +1755 +1657 +1513 +1394 +1303 +1135 +891 +705 +653 +596 +437 +259 +169 +150 +75 +-120 +-445 +-816 +-1137 +-1400 +-1605 +-1649 +-1524 +-1340 +-1207 +-1191 +-1211 +-1115 +-931 +-822 +-802 +-727 +-591 +-439 +-292 +-112 +188 +595 +989 +1304 +1563 +1721 +1751 +1667 +1531 +1407 +1307 +1151 +921 +723 +659 +620 +475 +292 +183 +148 +78 +-98 +-400 +-764 +-1093 +-1365 +-1578 +-1645 +-1538 +-1365 +-1238 +-1210 +-1225 +-1146 +-961 +-829 +-793 +-731 +-606 +-464 +-319 +-143 +134 +533 +942 +1274 +1540 +1717 +1766 +1698 +1564 +1429 +1326 +1181 +953 +741 +654 +616 +493 +319 +201 +166 +113 +-47 +-338 +-703 +-1050 +-1330 +-1547 +-1638 +-1557 +-1385 +-1244 +-1194 +-1211 +-1163 +-996 +-855 +-804 +-745 +-622 +-475 +-335 +-171 +87 +468 +882 +1226 +1502 +1691 +1762 +1715 +1594 +1460 +1354 +1218 +1004 +780 +664 +618 +506 +338 +206 +161 +118 +-11 +-277 +-637 +-998 +-1296 +-1531 +-1653 +-1604 +-1448 +-1293 +-1211 +-1204 +-1161 +-1003 +-849 +-792 +-751 +-646 +-506 +-362 +-204 +30 +391 +812 +1178 +1473 +1682 +1775 +1746 +1624 +1482 +1364 +1237 +1040 +814 +679 +632 +539 +379 +229 +154 +99 +-22 +-258 +-597 +-951 +-1253 +-1496 +-1633 +-1601 +-1458 +-1306 +-1220 +-1217 +-1192 +-1054 +-887 +-807 +-761 +-665 +-532 +-386 +-227 +-2 +335 +743 +1116 +1415 +1640 +1763 +1759 +1662 +1525 +1402 +1276 +1080 +851 +693 +631 +545 +393 +247 +169 +122 +19 +-198 +-525 +-891 +-1217 +-1475 +-1633 +-1621 +-1483 +-1326 +-1225 +-1202 +-1187 +-1083 +-927 +-840 +-790 +-692 +-550 +-401 +-245 +-31 +287 +689 +1071 +1386 +1622 +1752 +1758 +1672 +1545 +1419 +1298 +1116 +893 +720 +649 +573 +430 +274 +184 +140 +51 +-141 +-452 +-818 +-1156 +-1425 +-1602 +-1632 +-1524 +-1370 +-1257 +-1216 +-1195 +-1090 +-932 +-829 +-782 +-701 +-575 +-431 +-277 +-78 +223 +622 +1018 +1347 +1602 +1746 +1769 +1687 +1555 +1428 +1305 +1139 +921 +737 +652 +588 +461 +312 +207 +150 +62 +-118 +-413 +-779 +-1122 +-1399 +-1587 +-1630 +-1529 +-1380 +-1267 +-1225 +-1216 +-1130 +-967 +-839 +-778 +-706 +-592 +-460 +-319 +-137 +145 +532 +938 +1286 +1557 +1724 +1774 +1711 +1588 +1451 +1325 +1168 +953 +754 +642 +574 +462 +320 +215 +165 +95 +-60 +-340 +-705 +-1069 +-1367 +-1572 +-1635 +-1549 +-1392 +-1261 +-1207 +-1198 +-1142 +-999 +-875 +-811 +-742 +-628 +-491 +-345 +-165 +102 +477 +887 +1246 +1529 +1707 +1763 +1711 +1594 +1461 +1340 +1200 +1003 +805 +684 +616 +502 +344 +222 +160 +101 +-31 +-283 +-629 +-990 +-1298 +-1526 +-1626 +-1573 +-1433 +-1301 +-1228 +-1211 +-1153 +-1009 +-871 +-802 +-744 +-640 +-515 +-376 +-204 +47 +404 +812 +1179 +1480 +1685 +1769 +1738 +1628 +1495 +1372 +1230 +1038 +834 +699 +631 +530 +384 +254 +180 +116 +-11 +-250 +-588 +-951 +-1266 +-1505 +-1620 +-1577 +-1438 +-1301 +-1226 +-1218 +-1185 +-1062 +-916 +-829 +-762 +-658 +-530 +-388 +-224 +8 +346 +750 +1122 +1430 +1654 +1765 +1755 +1656 +1523 +1394 +1258 +1074 +864 +707 +629 +538 +400 +272 +193 +137 +31 +-185 +-515 +-891 +-1231 +-1493 +-1641 +-1624 +-1493 +-1341 +-1237 +-1205 +-1178 +-1072 +-930 +-844 +-788 +-695 +-566 +-422 +-258 +-37 +283 +682 +1070 +1393 +1632 +1760 +1762 +1673 +1540 +1409 +1276 +1096 +891 +731 +654 +573 +437 +289 +195 +135 +43 +-147 +-455 +-825 +-1173 +-1448 +-1616 +-1631 +-1519 +-1373 +-1267 +-1218 +-1191 +-1089 +-936 +-839 +-782 +-703 +-583 +-445 +-289 +-84 +213 +607 +997 +1330 +1587 +1733 +1763 +1688 +1564 +1432 +1303 +1137 +931 +756 +667 +593 +464 +317 +208 +149 +60 +-119 +-411 +-772 +-1117 +-1396 +-1577 +-1611 +-1508 +-1363 +-1247 +-1210 +-1202 +-1125 +-980 +-865 +-802 +-723 +-604 +-468 +-318 +-125 +162 +550 +952 +1294 +1560 +1723 +1769 +1705 +1580 +1442 +1321 +1168 +961 +774 +670 +600 +477 +330 +223 +168 +95 +-61 +-337 +-697 +-1059 +-1359 +-1570 +-1637 +-1548 +-1401 +-1277 +-1218 +-1205 +-1142 +-1005 +-884 +-823 +-756 +-645 +-506 +-354 +-169 +103 +476 +885 +1246 +1531 +1712 +1771 +1716 +1596 +1465 +1339 +1189 +986 +790 +678 +615 +510 +368 +248 +183 +115 +-24 +-280 +-633 +-998 +-1313 +-1542 +-1639 +-1580 +-1439 +-1312 +-1246 +-1224 +-1164 +-1017 +-879 +-809 +-749 +-653 +-527 +-384 +-207 +49 +408 +820 +1189 +1485 +1682 +1755 +1724 +1618 +1489 +1370 +1230 +1036 +833 +702 +636 +539 +398 +271 +197 +133 +3 +-243 +-590 +-966 +-1288 +-1527 +-1632 +-1579 +-1437 +-1300 +-1226 +-1212 +-1183 +-1058 +-913 +-829 +-767 +-668 +-546 +-412 +-249 +-15 +331 +740 +1119 +1436 +1654 +1757 +1746 +1651 +1525 +1400 +1262 +1077 +869 +718 +640 +543 +403 +269 +196 +144 +36 +-180 +-510 +-886 +-1223 +-1481 +-1621 +-1602 +-1470 +-1325 +-1231 +-1203 +-1171 +-1059 +-915 +-830 +-783 +-701 +-584 +-449 +-289 +-64 +267 +676 +1067 +1389 +1625 +1745 +1745 +1654 +1530 +1407 +1275 +1095 +883 +725 +652 +571 +436 +296 +202 +142 +42 +-152 +-459 +-817 +-1161 +-1433 +-1599 +-1607 +-1491 +-1347 +-1249 +-1220 +-1197 +-1091 +-932 +-828 +-774 +-701 +-587 +-458 +-309 +-102 +208 +606 +1000 +1330 +1586 +1733 +1754 +1677 +1550 +1416 +1285 +1113 +905 +738 +652 +582 +458 +317 +219 +161 +76 +-105 +-404 +-776 +-1135 +-1421 +-1600 +-1626 +-1513 +-1355 +-1238 +-1196 +-1186 +-1108 +-962 +-857 +-804 +-727 +-608 +-472 +-321 +-124 +164 +553 +953 +1294 +1557 +1713 +1750 +1682 +1560 +1437 +1319 +1158 +951 +768 +669 +601 +479 +330 +219 +164 +96 +-61 +-336 +-695 +-1058 +-1364 +-1577 +-1637 +-1544 +-1388 +-1253 +-1191 +-1173 +-1103 +-964 +-856 +-803 +-740 +-635 +-504 +-355 +-165 +110 +484 +889 +1237 +1515 +1695 +1753 +1700 +1581 +1452 +1329 +1175 +977 +787 +680 +617 +503 +354 +233 +165 +91 +-50 +-305 +-650 +-1006 +-1311 +-1531 +-1607 +-1532 +-1385 +-1262 +-1210 +-1198 +-1147 +-1008 +-872 +-802 +-743 +-645 +-522 +-383 +-209 +47 +408 +815 +1182 +1480 +1678 +1752 +1711 +1601 +1469 +1339 +1190 +986 +782 +657 +594 +503 +370 +260 +202 +144 +14 +-235 +-588 +-969 +-1296 +-1533 +-1633 +-1568 +-1413 +-1268 +-1187 +-1169 +-1127 +-1006 +-879 +-809 +-754 +-659 +-538 +-405 +-244 +-6 +340 +750 +1128 +1434 +1648 +1739 +1713 +1605 +1471 +1345 +1207 +1027 +824 +688 +623 +535 +391 +256 +184 +135 +33 +-183 +-513 +-888 +-1219 +-1473 +-1605 +-1578 +-1441 +-1302 +-1210 +-1182 +-1146 +-1024 +-878 +-798 +-751 +-671 +-559 +-427 +-270 +-47 +282 +692 +1077 +1395 +1622 +1732 +1730 +1637 +1504 +1372 +1237 +1057 +851 +697 +628 +549 +420 +286 +203 +148 +40 +-165 +-484 +-852 +-1189 +-1449 +-1598 +-1588 +-1455 +-1299 +-1200 +-1171 +-1154 +-1057 +-908 +-815 +-767 +-689 +-580 +-450 +-301 +-93 +223 +625 +1022 +1355 +1605 +1738 +1748 +1658 +1523 +1384 +1261 +1094 +879 +709 +625 +551 +425 +288 +201 +157 +78 +-100 +-400 +-769 +-1122 +-1409 +-1588 +-1609 +-1496 +-1335 +-1216 +-1170 +-1153 +-1067 +-923 +-822 +-777 +-711 +-600 +-471 +-324 +-131 +159 +546 +946 +1288 +1551 +1702 +1738 +1671 +1544 +1410 +1285 +1120 +912 +736 +643 +575 +449 +301 +199 +148 +80 +-76 +-351 +-712 +-1068 +-1362 +-1565 +-1616 +-1517 +-1360 +-1236 +-1175 +-1156 +-1086 +-938 +-826 +-778 +-719 +-615 +-487 +-341 +-156 +119 +498 +902 +1254 +1533 +1701 +1747 +1680 +1549 +1411 +1284 +1134 +931 +743 +643 +587 +484 +344 +234 +182 +117 +-36 +-307 +-665 +-1027 +-1328 +-1539 +-1604 +-1514 +-1359 +-1226 +-1165 +-1157 +-1099 +-958 +-831 +-772 +-717 +-621 +-503 +-369 +-197 +59 +426 +836 +1201 +1492 +1681 +1743 +1694 +1575 +1436 +1307 +1159 +959 +758 +635 +574 +479 +346 +240 +192 +146 +20 +-229 +-585 +-965 +-1289 +-1528 +-1626 +-1558 +-1400 +-1247 +-1160 +-1138 +-1091 +-966 +-836 +-773 +-727 +-641 +-524 +-394 +-236 +-2 +341 +747 +1119 +1425 +1639 +1733 +1704 +1594 +1457 +1328 +1188 +991 +787 +653 +588 +497 +360 +238 +177 +135 +33 +-185 +-517 +-892 +-1224 +-1471 +-1595 +-1554 +-1414 +-1264 +-1174 +-1154 +-1119 +-996 +-851 +-781 +-746 +-673 +-567 +-442 +-286 +-63 +267 +684 +1073 +1394 +1618 +1724 +1711 +1608 +1472 +1342 +1212 +1028 +821 +666 +600 +524 +400 +276 +208 +163 +63 +-145 +-469 +-838 +-1172 +-1427 +-1571 +-1553 +-1426 +-1277 +-1178 +-1158 +-1142 +-1037 +-886 +-797 +-749 +-674 +-567 +-445 +-303 +-100 +215 +621 +1014 +1340 +1585 +1712 +1721 +1628 +1500 +1372 +1245 +1068 +855 +689 +612 +541 +418 +290 +216 +177 +98 +-86 +-394 +-768 +-1121 +-1404 +-1586 +-1598 +-1472 +-1306 +-1191 +-1153 +-1136 +-1050 +-907 +-810 +-768 +-702 +-596 +-468 +-321 +-125 +176 +565 +960 +1296 +1554 +1697 +1721 +1647 +1520 +1388 +1262 +1094 +881 +704 +622 +560 +446 +309 +213 +165 +92 +-70 +-352 +-714 +-1073 +-1366 +-1564 +-1609 +-1504 +-1347 +-1224 +-1171 +-1151 +-1066 +-914 +-800 +-756 +-705 +-614 +-498 +-364 +-181 +99 +485 +895 +1247 +1521 +1695 +1744 +1680 +1553 +1412 +1282 +1117 +900 +708 +610 +555 +453 +321 +224 +183 +123 +-25 +-302 +-665 +-1033 +-1339 +-1551 +-1614 +-1519 +-1354 +-1214 +-1155 +-1153 +-1097 +-963 +-841 +-781 +-724 +-627 +-508 +-379 +-211 +49 +419 +832 +1187 +1478 +1674 +1745 +1696 +1571 +1430 +1303 +1150 +944 +744 +629 +574 +473 +331 +222 +178 +135 +14 +-231 +-579 +-953 +-1279 +-1522 +-1626 +-1554 +-1389 +-1231 +-1152 +-1139 +-1096 +-973 +-846 +-787 +-742 +-653 +-534 +-398 +-235 +4 +357 +770 +1142 +1446 +1656 +1743 +1708 +1591 +1452 +1325 +1188 +993 +787 +664 +611 +522 +380 +254 +190 +140 +33 +-191 +-525 +-896 +-1225 +-1474 +-1595 +-1547 +-1401 +-1257 +-1176 +-1164 +-1137 +-1015 +-871 +-793 +-750 +-666 +-551 +-428 +-277 +-54 +281 +696 +1083 +1403 +1635 +1743 +1730 +1625 +1486 +1354 +1215 +1020 +800 +654 +601 +532 +406 +284 +225 +190 +93 +-129 +-471 +-859 +-1206 +-1472 +-1624 +-1598 +-1449 +-1283 +-1183 +-1163 +-1152 +-1052 +-903 +-814 +-767 +-688 +-574 +-452 +-311 +-104 +218 +636 +1032 +1356 +1598 +1728 +1732 +1636 +1498 +1370 +1245 +1068 +848 +680 +616 +552 +417 +277 +208 +183 +108 +-84 +-404 +-785 +-1136 +-1416 +-1606 +-1622 +-1494 +-1323 +-1205 +-1179 +-1168 +-1067 +-899 +-799 +-768 +-709 +-602 +-476 +-340 +-148 +159 +570 +975 +1310 +1561 +1713 +1745 +1661 +1530 +1399 +1281 +1114 +884 +697 +625 +578 +457 +308 +215 +176 +104 +-71 +-372 +-743 +-1089 +-1371 +-1574 +-1619 +-1504 +-1336 +-1216 +-1186 +-1193 +-1111 +-936 +-815 +-777 +-724 +-618 +-494 +-360 +-185 +101 +503 +923 +1271 +1543 +1706 +1751 +1687 +1559 +1429 +1314 +1155 +927 +723 +635 +593 +480 +331 +232 +201 +150 +-8 +-306 +-685 +-1055 +-1352 +-1574 +-1651 +-1554 +-1377 +-1230 +-1177 +-1190 +-1131 +-961 +-827 +-790 +-744 +-634 +-505 +-372 +-208 +52 +444 +869 +1222 +1508 +1693 +1763 +1719 +1594 +1458 +1342 +1193 +972 +755 +652 +613 +502 +334 +212 +175 +141 +12 +-257 +-618 +-981 +-1289 +-1541 +-1662 +-1597 +-1425 +-1260 +-1180 +-1188 +-1144 +-982 +-833 +-793 +-765 +-666 +-532 +-393 +-239 +-3 +369 +800 +1164 +1458 +1667 +1758 +1718 +1600 +1464 +1355 +1227 +1013 +780 +657 +633 +538 +365 +220 +167 +132 +14 +-237 +-590 +-949 +-1245 +-1494 +-1643 +-1600 +-1430 +-1254 +-1179 +-1196 +-1177 +-1018 +-843 +-787 +-770 +-682 +-546 +-411 +-272 +-56 +300 +735 +1114 +1418 +1648 +1768 +1751 +1635 +1499 +1385 +1268 +1061 +810 +657 +619 +539 +373 +224 +173 +159 +69 +-160 +-506 +-879 +-1196 +-1452 +-1632 +-1622 +-1464 +-1279 +-1173 +-1178 +-1186 +-1055 +-875 +-807 +-790 +-705 +-559 +-416 +-277 +-79 +249 +678 +1066 +1377 +1621 +1757 +1762 +1652 +1513 +1396 +1286 +1098 +845 +674 +642 +579 +409 +242 +174 +163 +95 +-108 +-447 +-825 +-1152 +-1417 +-1617 +-1646 +-1511 +-1325 +-1199 +-1189 +-1206 +-1080 +-877 +-788 +-781 +-717 +-582 +-442 +-304 +-119 +195 +628 +1027 +1342 +1596 +1750 +1771 +1663 +1516 +1402 +1313 +1146 +892 +698 +652 +610 +450 +265 +175 +164 +99 +-98 +-427 +-799 +-1109 +-1366 +-1586 +-1643 +-1520 +-1333 +-1203 +-1197 +-1239 +-1144 +-925 +-800 +-787 +-731 +-595 +-443 +-312 +-152 +130 +551 +965 +1289 +1555 +1731 +1782 +1700 +1560 +1423 +1337 +1184 +927 +696 +623 +596 +457 +277 +180 +179 +139 +-24 +-348 +-738 +-1084 +-1351 +-1582 +-1677 +-1573 +-1379 +-1212 +-1178 +-1224 +-1161 +-947 +-800 +-790 +-758 +-628 +-473 +-334 +-181 +81 +493 +922 +1263 +1538 +1731 +1798 +1724 +1577 +1434 +1342 +1208 +959 +714 +630 +626 +501 +300 +166 +156 +135 +-5 +-303 +-681 +-1023 +-1289 +-1528 +-1664 +-1595 +-1412 +-1226 +-1164 +-1215 +-1176 +-959 +-785 +-771 +-767 +-654 +-495 +-350 +-206 +27 +419 +863 +1214 +1498 +1704 +1799 +1749 +1610 +1469 +1374 +1254 +1015 +751 +633 +629 +527 +332 +188 +165 +149 +20 +-261 +-635 +-983 +-1252 +-1497 +-1651 +-1604 +-1424 +-1234 +-1157 +-1211 +-1207 +-1014 +-812 +-775 +-772 +-665 +-509 +-362 +-231 +-23 +350 +795 +1155 +1441 +1667 +1787 +1762 +1624 +1473 +1376 +1283 +1062 +789 +642 +636 +546 +341 +174 +138 +148 +59 +-190 +-562 +-918 +-1197 +-1451 +-1642 +-1631 +-1461 +-1259 +-1155 +-1192 +-1217 +-1048 +-839 +-794 +-803 +-705 +-534 +-380 +-254 +-65 +280 +725 +1100 +1394 +1637 +1775 +1767 +1631 +1476 +1376 +1300 +1098 +814 +643 +644 +589 +394 +199 +134 +146 +77 +-153 +-514 +-880 +-1161 +-1404 +-1618 +-1646 +-1495 +-1289 +-1162 +-1188 +-1238 +-1089 +-852 +-774 +-795 +-730 +-569 +-407 +-283 +-117 +204 +657 +1054 +1357 +1606 +1766 +1787 +1664 +1497 +1379 +1305 +1126 +846 +648 +632 +608 +436 +235 +163 +173 +120 +-94 +-455 +-840 +-1144 +-1383 +-1604 +-1654 +-1517 +-1310 +-1159 +-1167 +-1234 +-1135 +-897 +-786 +-801 +-742 +-589 +-426 +-296 +-145 +145 +580 +991 +1303 +1566 +1740 +1785 +1681 +1523 +1403 +1335 +1184 +906 +674 +632 +620 +454 +245 +155 +182 +157 +-24 +-370 +-761 +-1077 +-1330 +-1575 +-1677 +-1556 +-1348 +-1180 +-1162 +-1230 +-1159 +-927 +-788 +-806 +-774 +-629 +-459 +-324 +-181 +85 +511 +939 +1266 +1533 +1725 +1784 +1699 +1536 +1394 +1332 +1206 +943 +695 +639 +650 +506 +292 +167 +167 +146 +-8 +-325 +-707 +-1028 +-1279 +-1524 +-1654 +-1569 +-1368 +-1206 +-1170 +-1241 +-1203 +-966 +-792 +-792 +-777 +-646 +-484 +-349 +-213 +21 +426 +874 +1218 +1496 +1705 +1792 +1726 +1571 +1417 +1336 +1227 +975 +709 +615 +640 +534 +331 +198 +202 +196 +56 +-256 +-652 +-1002 +-1265 +-1506 +-1663 +-1598 +-1401 +-1205 +-1139 +-1206 +-1211 +-1007 +-817 +-801 +-801 +-681 +-517 +-374 +-246 +-23 +367 +823 +1178 +1459 +1676 +1780 +1742 +1595 +1434 +1348 +1262 +1043 +766 +632 +648 +558 +342 +173 +156 +177 +89 +-181 +-568 +-927 +-1190 +-1442 +-1640 +-1629 +-1445 +-1240 +-1143 +-1198 +-1232 +-1051 +-830 +-787 +-807 +-708 +-543 +-393 +-268 +-75 +282 +740 +1115 +1405 +1640 +1775 +1759 +1629 +1463 +1358 +1274 +1070 +795 +639 +661 +608 +411 +227 +172 +178 +97 +-148 +-519 +-885 +-1163 +-1407 +-1615 +-1631 +-1463 +-1259 +-1145 +-1180 +-1228 +-1084 +-856 +-790 +-815 +-739 +-584 +-426 +-298 +-116 +221 +671 +1062 +1356 +1603 +1761 +1771 +1650 +1487 +1378 +1303 +1114 +835 +644 +636 +601 +427 +240 +182 +203 +147 +-70 +-438 +-827 +-1131 +-1383 +-1607 +-1654 +-1503 +-1293 +-1154 +-1161 +-1231 +-1124 +-901 +-801 +-818 +-760 +-603 +-444 +-317 +-157 +149 +588 +999 +1306 +1555 +1726 +1776 +1680 +1523 +1398 +1323 +1162 +889 +679 +651 +635 +466 +261 +173 +190 +156 +-27 +-368 +-756 +-1078 +-1336 +-1582 +-1676 +-1553 +-1349 +-1195 +-1181 +-1242 +-1161 +-935 +-805 +-813 +-770 +-625 +-472 +-338 +-190 +85 +509 +932 +1261 +1533 +1720 +1778 +1702 +1553 +1417 +1337 +1193 +940 +704 +648 +649 +511 +312 +197 +197 +164 +1 +-319 +-711 +-1045 +-1308 +-1553 +-1667 +-1572 +-1371 +-1205 +-1171 +-1231 +-1185 +-971 +-812 +-804 +-779 +-662 +-514 +-377 +-232 +28 +436 +875 +1220 +1499 +1698 +1779 +1720 +1578 +1440 +1359 +1236 +994 +742 +648 +649 +535 +338 +205 +194 +180 +48 +-251 +-643 +-1001 +-1278 +-1526 +-1666 +-1602 +-1412 +-1230 +-1168 +-1222 +-1214 +-1026 +-846 +-819 +-803 +-686 +-529 +-381 +-246 +-24 +357 +803 +1171 +1457 +1667 +1764 +1723 +1604 +1468 +1383 +1272 +1047 +793 +670 +665 +561 +360 +198 +164 +160 +60 +-195 +-563 +-929 +-1218 +-1471 +-1650 +-1624 +-1456 +-1276 +-1188 +-1223 +-1221 +-1046 +-849 +-798 +-803 +-711 +-559 +-408 +-268 +-61 +297 +745 +1128 +1425 +1649 +1770 +1752 +1638 +1495 +1393 +1291 +1086 +818 +663 +656 +588 +414 +243 +186 +175 +80 +-159 +-520 +-886 +-1182 +-1436 +-1624 +-1629 +-1474 +-1286 +-1180 +-1207 +-1230 +-1086 +-878 +-800 +-798 +-717 +-571 +-423 +-288 +-94 +242 +677 +1070 +1373 +1615 +1753 +1759 +1648 +1508 +1409 +1318 +1130 +866 +681 +646 +592 +422 +251 +182 +179 +106 +-107 +-450 +-831 +-1149 +-1418 +-1617 +-1640 +-1504 +-1317 +-1194 +-1193 +-1225 +-1116 +-913 +-809 +-800 +-730 +-583 +-430 +-293 +-118 +187 +609 +1013 +1329 +1580 +1734 +1763 +1675 +1535 +1419 +1326 +1154 +901 +700 +651 +608 +455 +273 +177 +162 +105 +-74 +-390 +-763 +-1098 +-1369 +-1584 +-1641 +-1531 +-1354 +-1221 +-1201 +-1223 +-1126 +-920 +-803 +-788 +-733 +-604 +-462 +-331 +-166 +119 +535 +953 +1286 +1554 +1728 +1773 +1694 +1550 +1431 +1343 +1189 +942 +722 +646 +614 +479 +299 +191 +170 +121 +-47 +-351 +-723 +-1054 +-1326 +-1552 +-1637 +-1541 +-1365 +-1220 +-1186 +-1224 +-1164 +-972 +-826 +-792 +-742 +-621 +-478 +-344 +-189 +76 +475 +899 +1242 +1521 +1708 +1772 +1708 +1577 +1446 +1342 +1207 +982 +755 +654 +620 +501 +331 +214 +185 +146 +9 +-268 +-643 +-1009 +-1311 +-1545 +-1652 +-1580 +-1404 +-1241 +-1178 +-1201 +-1167 +-1004 +-849 +-805 +-767 +-659 +-516 +-367 +-207 +43 +420 +848 +1213 +1508 +1711 +1786 +1728 +1598 +1460 +1351 +1220 +1005 +774 +652 +620 +521 +353 +215 +165 +135 +24 +-222 +-582 +-959 +-1274 +-1520 +-1657 +-1607 +-1449 +-1291 +-1209 +-1213 +-1186 +-1026 +-856 +-791 +-757 +-663 +-529 +-386 +-234 +-14 +336 +761 +1144 +1452 +1674 +1778 +1750 +1639 +1500 +1381 +1255 +1049 +813 +659 +611 +527 +372 +233 +176 +143 +38 +-192 +-538 +-919 +-1240 +-1503 +-1660 +-1629 +-1472 +-1300 +-1205 +-1200 +-1191 +-1065 +-895 +-808 +-765 +-673 +-542 +-405 +-261 +-55 +280 +702 +1094 +1413 +1648 +1767 +1753 +1649 +1509 +1385 +1264 +1080 +850 +681 +618 +539 +391 +247 +180 +154 +74 +-128 +-458 +-843 +-1189 +-1472 +-1648 +-1642 +-1496 +-1321 +-1210 +-1184 +-1183 +-1076 +-908 +-813 +-777 +-701 +-576 +-436 +-287 +-92 +217 +623 +1024 +1360 +1619 +1759 +1767 +1671 +1526 +1394 +1272 +1094 +866 +689 +623 +566 +429 +276 +182 +144 +73 +-101 +-407 +-786 +-1140 +-1426 +-1617 +-1642 +-1514 +-1346 +-1226 +-1193 +-1191 +-1099 +-924 +-806 +-766 +-703 +-590 +-460 +-318 +-134 +152 +554 +969 +1322 +1589 +1744 +1774 +1691 +1555 +1418 +1296 +1125 +900 +705 +616 +563 +448 +306 +218 +184 +124 +-41 +-339 +-723 +-1100 +-1401 +-1606 +-1651 +-1536 +-1360 +-1225 +-1175 +-1179 +-1118 +-960 +-833 +-776 +-711 +-604 +-479 +-347 +-177 +90 +474 +895 +1255 +1541 +1719 +1777 +1715 +1582 +1444 +1318 +1164 +956 +753 +642 +581 +460 +309 +200 +165 +121 +-8 +-266 +-631 +-1010 +-1333 +-1567 +-1653 +-1570 +-1405 +-1256 +-1186 +-1175 +-1124 +-980 +-843 +-782 +-733 +-634 +-510 +-377 +-211 +40 +408 +829 +1205 +1503 +1698 +1773 +1724 +1599 +1460 +1333 +1187 +983 +772 +650 +596 +505 +365 +243 +183 +130 +8 +-236 +-588 +-969 +-1299 +-1538 +-1643 +-1574 +-1415 +-1268 +-1193 +-1187 +-1147 +-1014 +-864 +-787 +-741 +-655 +-542 +-414 +-254 +-15 +339 +759 +1146 +1458 +1683 +1779 +1746 +1631 +1488 +1359 +1217 +1016 +799 +653 +594 +508 +377 +257 +198 +161 +60 +-165 +-512 +-900 +-1248 +-1512 +-1647 +-1605 +-1446 +-1284 +-1190 +-1174 +-1159 +-1044 +-896 +-810 +-760 +-675 +-558 +-433 +-284 +-69 +264 +683 +1080 +1404 +1643 +1762 +1754 +1654 +1514 +1382 +1247 +1060 +846 +686 +618 +535 +396 +258 +185 +153 +70 +-122 +-445 +-826 +-1182 +-1459 +-1624 +-1618 +-1482 +-1318 +-1207 +-1173 +-1155 +-1053 +-905 +-820 +-779 +-703 +-590 +-462 +-311 +-103 +220 +632 +1032 +1368 +1624 +190 +171 +24 +-278 +-659 +-1003 +-1271 +-1516 +-1644 +-1570 +-1380 +-1202 +-1146 +-1206 +-1187 +-995 +-832 +-823 +-808 +-683 +-519 +-366 +-224 +10 +400 +846 +1192 +1463 +1669 +1758 +1708 +1568 +1421 +1338 +1235 +1009 +763 +659 +668 +563 +357 +201 +165 +143 +22 +-246 +-609 +-955 +-1228 +-1474 +-1633 +-1596 +-1427 +-1251 +-1176 +-1217 +-1216 +-1030 +-839 +-804 +-800 +-701 +-546 +-399 +-262 +-46 +318 +764 +1129 +1419 +1647 +1759 +1733 +1605 +1460 +1361 +1256 +1042 +785 +643 +639 +563 +384 +230 +180 +164 +60 +-189 +-555 +-918 +-1208 +-1446 +-1614 +-1591 +-1431 +-1248 +-1155 +-1193 +-1216 +-1066 +-867 +-808 +-797 +-711 +-564 +-417 +-286 +-89 +251 +696 +1076 +1373 +1608 +1741 +1735 +1624 +1480 +1375 +1283 +1090 +833 +665 +647 +581 +405 +233 +173 +165 +89 +-129 +-470 +-838 +-1145 +-1399 +-1592 +-1608 +-1469 +-1286 +-1164 +-1168 +-1195 +-1075 +-876 +-795 +-798 +-726 +-585 +-435 +-297 +-118 +195 +622 +1019 +1323 +1567 +1719 +1744 +1647 +1507 +1395 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d4_293_665.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d4_293_665.samples new file mode 100644 index 00000000..923c7664 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d4_293_665.samples @@ -0,0 +1,4096 @@ +800 +569 +392 +254 +126 +1 +-58 +-30 +14 +18 +-5 +-8 +28 +58 +49 +-31 +-157 +-305 +-470 +-675 +-948 +-1285 +-1659 +-1948 +-2036 +-1919 +-1607 +-1042 +-226 +694 +1417 +1658 +1371 +814 +275 +-153 +-519 +-775 +-817 +-593 +-195 +183 +394 +420 +339 +200 +-18 +-318 +-581 +-671 +-565 +-336 +-51 +257 +502 +609 +552 +379 +190 +98 +172 +337 +455 +471 +493 +627 +823 +897 +770 +452 +109 +-196 +-510 +-854 +-1159 +-1351 +-1439 +-1458 +-1449 +-1406 +-1262 +-932 +-383 +267 +856 +1330 +1691 +1987 +2157 +2120 +1896 +1621 +1418 +1262 +1108 +955 +869 +852 +784 +547 +121 +-405 +-921 +-1303 +-1500 +-1515 +-1328 +-940 +-426 +57 +416 +624 +684 +640 +577 +567 +648 +841 +1132 +1523 +1989 +2396 +2596 +2490 +2072 +1426 +626 +-234 +-1002 +-1547 +-1839 +-1898 +-1804 +-1644 +-1505 +-1424 +-1406 +-1463 +-1556 +-1632 +-1621 +-1495 +-1247 +-880 +-402 +143 +636 +977 +1114 +1061 +878 +638 +442 +295 +151 +25 +-45 +-31 +5 +-1 +-46 +-70 +-42 +-11 +-12 +-47 +-121 +-245 +-399 +-615 +-910 +-1268 +-1649 +-1963 +-2091 +-2014 +-1719 +-1183 +-396 +531 +1300 +1632 +1432 +911 +385 +-40 +-383 +-638 +-720 +-548 +-202 +158 +366 +384 +297 +162 +-20 +-275 +-535 +-667 +-617 +-439 +-193 +84 +324 +464 +467 +339 +171 +72 +116 +272 +408 +440 +430 +523 +700 +846 +789 +530 +201 +-115 +-430 +-773 +-1102 +-1339 +-1461 +-1506 +-1497 +-1444 +-1312 +-1005 +-490 +146 +759 +1253 +1630 +1933 +2150 +2191 +2029 +1782 +1569 +1407 +1233 +1058 +931 +875 +808 +603 +231 +-264 +-780 +-1199 +-1457 +-1552 +-1459 +-1141 +-670 +-166 +231 +475 +567 +546 +487 +453 +513 +667 +920 +1298 +1768 +2233 +2522 +2506 +2167 +1568 +778 +-96 +-893 +-1468 +-1762 +-1811 +-1703 +-1532 +-1372 +-1275 +-1249 +-1305 +-1416 +-1515 +-1514 +-1384 +-1132 +-755 +-286 +249 +749 +1078 +1197 +1129 +943 +700 +491 +337 +200 +61 +-36 +-63 +-56 +-89 +-170 +-227 +-219 +-167 +-128 +-119 +-178 +-288 +-447 +-657 +-932 +-1247 +-1593 +-1895 +-2031 +-1956 +-1679 +-1193 +-476 +409 +1227 +1682 +1615 +1169 +638 +191 +-180 +-469 +-618 +-532 +-231 +119 +358 +415 +348 +235 +90 +-121 +-386 +-584 +-616 +-511 +-294 +-21 +247 +425 +454 +345 +161 +16 +1 +119 +256 +306 +300 +379 +569 +751 +770 +553 +223 +-106 +-415 +-743 +-1066 +-1305 +-1428 +-1438 +-1408 +-1348 +-1237 +-991 +-532 +93 +728 +1268 +1685 +2032 +2291 +2385 +2252 +1974 +1698 +1489 +1318 +1131 +984 +920 +863 +702 +366 +-133 +-671 +-1156 +-1515 +-1696 +-1680 +-1416 +-946 +-412 +35 +305 +411 +382 +289 +229 +247 +383 +626 +987 +1471 +1986 +2359 +2440 +2173 +1622 +891 +59 +-723 +-1306 +-1634 +-1707 +-1610 +-1433 +-1257 +-1147 +-1117 +-1168 +-1255 +-1335 +-1329 +-1206 +-973 +-647 +-239 +240 +703 +1050 +1215 +1199 +1016 +755 +511 +332 +190 +33 +-110 +-192 +-218 +-239 +-306 +-363 +-356 +-307 +-266 +-275 +-329 +-449 +-595 +-766 +-980 +-1237 +-1533 +-1808 +-1970 +-1928 +-1701 +-1283 +-638 +202 +1046 +1609 +1687 +1343 +853 +411 +26 +-302 +-503 +-473 +-224 +127 +390 +486 +462 +368 +221 +-25 +-346 +-611 +-689 +-587 +-372 +-111 +141 +318 +367 +262 +63 +-132 +-200 +-109 +44 +135 +166 +244 +437 +641 +691 +520 +206 +-114 +-406 +-698 +-996 +-1222 +-1325 +-1336 +-1303 +-1244 +-1146 +-916 +-499 +97 +739 +1304 +1774 +2145 +2422 +2543 +2437 +2153 +1857 +1637 +1456 +1268 +1104 +1024 +964 +811 +488 +4 +-566 +-1109 +-1524 +-1749 +-1770 +-1551 +-1127 +-623 +-192 +75 +204 +194 +124 +62 +72 +181 +416 +772 +1234 +1746 +2148 +2282 +2102 +1652 +1012 +264 +-492 +-1100 +-1466 +-1584 +-1520 +-1354 +-1167 +-1011 +-936 +-923 +-976 +-1046 +-1065 +-985 +-798 +-526 +-183 +240 +693 +1072 +1286 +1308 +1154 +886 +608 +384 +188 +-7 +-187 +-295 +-318 +-324 +-379 +-448 +-461 +-433 +-413 +-423 +-479 +-568 +-671 +-811 +-990 +-1230 +-1520 +-1818 +-2016 +-2010 +-1796 +-1392 +-779 +54 +941 +1615 +1838 +1567 +1088 +626 +240 +-97 +-331 +-364 +-161 +183 +476 +606 +572 +452 +275 +27 +-286 +-574 +-684 +-623 +-453 +-222 +8 +193 +239 +150 +-38 +-227 +-309 +-229 +-67 +47 +75 +122 +281 +474 +561 +431 +155 +-128 +-363 +-608 +-894 +-1145 +-1278 +-1304 +-1262 +-1196 +-1094 +-879 +-474 +128 +792 +1385 +1842 +2192 +2458 +2597 +2520 +2277 +1999 +1780 +1606 +1414 +1229 +1105 +1031 +887 +566 +67 +-524 +-1078 +-1500 +-1736 +-1781 +-1628 +-1281 +-825 +-409 +-123 +33 +62 +9 +-60 +-67 +33 +245 +574 +1000 +1492 +1922 +2143 +2075 +1721 +1157 +448 +-300 +-939 +-1353 +-1524 +-1501 +-1340 +-1128 +-942 +-811 +-767 +-798 +-867 +-920 +-890 +-755 +-526 +-187 +252 +737 +1140 +1370 +1398 +1246 +980 +670 +404 +187 +-19 +-201 +-321 +-353 +-356 +-422 +-515 +-577 +-568 +-536 +-523 +-538 +-607 +-700 +-836 +-1006 +-1241 +-1527 +-1816 +-2034 +-2039 +-1830 +-1438 +-847 +-48 +842 +1569 +1851 +1645 +1191 +736 +367 +51 +-193 +-258 +-97 +227 +530 +673 +643 +514 +344 +110 +-194 +-486 +-632 +-604 +-485 +-313 +-123 +52 +147 +118 +-29 +-231 +-347 +-313 +-168 +-43 +-15 +11 +139 +341 +485 +438 +227 +-42 +-294 +-543 +-832 +-1094 +-1260 +-1310 +-1271 +-1184 +-1070 +-865 +-488 +85 +745 +1348 +1832 +2193 +2467 +2628 +2600 +2387 +2104 +1862 +1661 +1450 +1245 +1105 +1020 +874 +590 +134 +-419 +-949 +-1381 +-1662 +-1792 +-1729 +-1453 +-1026 +-575 +-250 +-64 +-16 +-54 +-120 +-141 +-74 +110 +411 +823 +1330 +1810 +2105 +2094 +1794 +1253 +559 +-208 +-883 +-1345 +-1535 +-1503 +-1329 +-1105 +-903 +-771 +-724 +-753 +-843 +-912 +-895 +-764 +-516 +-174 +247 +709 +1113 +1353 +1390 +1249 +980 +660 +386 +182 +-1 +-179 +-319 +-388 +-418 +-489 +-602 +-678 +-683 +-638 +-594 +-575 +-608 +-698 +-830 +-997 +-1223 +-1497 +-1789 +-2011 +-2052 +-1884 +-1529 +-979 +-211 +677 +1440 +1822 +1716 +1299 +839 +452 +117 +-159 +-276 +-178 +112 +430 +609 +619 +530 +397 +207 +-75 +-394 +-605 +-643 +-552 +-383 +-169 +45 +180 +179 +36 +-170 +-312 +-320 +-213 +-105 +-68 +-42 +96 +320 +496 +497 +292 +1 +-260 +-510 +-804 +-1085 +-1254 +-1299 +-1237 +-1147 +-1036 +-863 +-540 +-19 +608 +1211 +1704 +2088 +2411 +2647 +2692 +2521 +2228 +1956 +1739 +1530 +1321 +1159 +1060 +941 +693 +290 +-244 +-794 +-1277 +-1637 +-1810 +-1793 +-1526 +-1084 +-607 +-246 +-37 +28 +-23 +-115 +-178 +-143 +20 +318 +743 +1258 +1767 +2110 +2161 +1889 +1364 +670 +-87 +-773 +-1261 +-1481 +-1471 +-1306 +-1074 +-864 +-725 +-679 +-710 +-794 +-874 +-877 +-762 +-539 +-225 +166 +593 +997 +1262 +1350 +1274 +1052 +766 +484 +260 +61 +-141 +-313 +-426 +-469 +-518 +-601 +-651 +-635 +-582 +-543 +-538 +-573 +-659 +-778 +-939 +-1154 +-1414 +-1698 +-1949 +-2056 +-1956 +-1666 +-1176 +-462 +427 +1256 +1767 +1789 +1436 +986 +576 +219 +-86 +-268 +-220 +38 +359 +593 +658 +602 +473 +277 +-21 +-368 +-618 +-695 +-614 +-437 +-201 +32 +192 +208 +73 +-137 +-311 +-359 +-258 +-121 +-43 +0 +113 +328 +509 +534 +345 +53 +-220 +-481 +-747 +-1000 +-1165 +-1215 +-1189 +-1123 +-1032 +-894 +-619 +-167 +424 +1029 +1568 +2013 +2355 +2598 +2662 +2504 +2222 +1943 +1724 +1528 +1324 +1164 +1070 +987 +779 +417 +-94 +-671 +-1191 +-1590 +-1807 +-1804 +-1564 +-1141 +-669 +-294 +-62 +29 +3 +-78 +-142 +-121 +17 +287 +679 +1159 +1655 +2019 +2126 +1933 +1475 +844 +119 +-573 +-1099 +-1403 +-1478 +-1380 +-1180 +-963 +-810 +-735 +-741 +-794 +-849 +-843 +-754 +-574 +-310 +40 +467 +897 +1231 +1373 +1325 +1121 +825 +525 +276 +59 +-148 +-327 +-425 +-450 +-479 +-541 +-606 +-626 +-604 +-589 +-602 +-642 +-719 +-809 +-940 +-1114 +-1358 +-1648 +-1908 +-2052 +-1992 +-1740 +-1289 +-626 +213 +1069 +1671 +1817 +1537 +1070 +625 +240 +-74 +-266 +-257 +-26 +296 +569 +678 +625 +469 +250 +-34 +-360 +-611 +-700 +-640 +-471 +-242 +-7 +155 +177 +63 +-137 +-314 +-370 +-297 +-161 +-55 +-6 +89 +274 +455 +511 +384 +133 +-123 +-364 +-621 +-887 +-1096 +-1204 +-1223 +-1189 +-1125 +-1000 +-749 +-318 +281 +915 +1488 +1942 +2279 +2522 +2606 +2498 +2242 +1953 +1719 +1532 +1347 +1189 +1082 +994 +827 +491 +-4 +-578 +-1120 +-1531 +-1754 +-1780 +-1605 +-1254 +-820 +-429 +-148 +0 +18 +-39 +-110 +-100 +13 +244 +580 +1021 +1508 +1912 +2103 +1998 +1620 +1038 +340 +-379 +-972 +-1347 +-1481 +-1418 +-1225 +-1004 +-816 +-714 +-696 +-756 +-830 +-873 +-837 +-694 +-447 +-79 +369 +844 +1214 +1399 +1383 +1194 +908 +593 +315 +98 +-100 +-257 +-353 +-392 +-418 +-491 +-583 +-639 +-649 +-645 +-645 +-653 +-690 +-763 +-872 +-1046 +-1275 +-1548 +-1818 +-1997 +-1990 +-1778 +-1360 +-729 +88 +932 +1561 +1770 +1552 +1111 +650 +253 +-66 +-266 +-277 +-90 +206 +479 +611 +584 +453 +260 +11 +-280 +-527 +-644 +-613 +-470 +-259 +-37 +141 +206 +141 +-23 +-201 +-298 +-260 +-138 +-23 +44 +121 +270 +451 +551 +486 +278 +14 +-263 +-549 +-836 +-1078 +-1216 +-1262 +-1234 +-1151 +-1009 +-765 +-363 +196 +813 +1392 +1858 +2198 +2437 +2551 +2504 +2304 +2038 +1793 +1580 +1386 +1216 +1099 +1002 +831 +525 +76 +-453 +-974 +-1402 +-1678 +-1778 +-1667 +-1356 +-926 +-495 +-169 +13 +73 +28 +-46 +-73 +-4 +187 +493 +920 +1413 +1863 +2120 +2091 +1772 +1216 +511 +-229 +-856 +-1269 +-1433 +-1387 +-1211 +-991 +-793 +-682 +-668 +-732 +-834 +-903 +-887 +-748 +-495 +-136 +295 +742 +1109 +1304 +1313 +1149 +878 +582 +326 +124 +-44 +-189 +-298 +-364 +-423 +-511 +-612 +-672 +-681 +-653 +-622 +-607 +-632 +-704 +-831 +-1011 +-1249 +-1521 +-1794 +-1994 +-2022 +-1849 +-1465 +-869 +-87 +749 +1418 +1713 +1595 +1204 +747 +336 +-1 +-228 +-298 +-167 +93 +365 +541 +570 +477 +295 +58 +-226 +-497 +-673 +-712 +-623 +-426 +-167 +68 +188 +166 +27 +-137 +-233 +-217 +-118 +-18 +52 +125 +274 +462 +583 +557 +372 +97 +-198 +-499 +-799 +-1047 +-1200 +-1254 +-1235 +-1168 +-1050 +-836 +-481 +22 +611 +1183 +1672 +2053 +2331 +2492 +2489 +2321 +2060 +1801 +1582 +1387 +1227 +1115 +1025 +890 +632 +231 +-287 +-831 +-1313 +-1663 +-1804 +-1728 +-1430 +-997 +-551 +-188 +26 +95 +38 +-54 +-107 +-64 +108 +411 +839 +1344 +1829 +2137 +2164 +1872 +1329 +630 +-106 +-746 +-1189 +-1392 +-1393 +-1241 +-1028 +-836 +-719 +-690 +-740 +-824 +-887 +-878 +-761 +-534 +-206 +190 +612 +983 +1219 +1287 +1188 +962 +686 +415 +192 +-1 +-172 +-304 +-396 +-459 +-532 +-608 +-651 +-644 +-610 +-584 +-582 +-614 +-689 +-801 +-963 +-1176 +-1433 +-1693 +-1903 +-1982 +-1870 +-1555 +-1024 +-293 +539 +1272 +1689 +1682 +1356 +901 +463 +89 +-182 +-305 +-241 +-15 +268 +488 +561 +501 +343 +117 +-163 +-452 +-658 +-724 +-634 +-428 +-158 +91 +225 +211 +72 +-108 +-230 +-238 +-144 +-30 +60 +154 +296 +487 +635 +629 +446 +163 +-146 +-441 +-725 +-972 +-1144 +-1220 +-1222 +-1173 +-1077 +-907 +-602 +-140 +446 +1042 +1569 +1982 +2279 +2459 +2493 +2365 +2118 +1854 +1621 +1427 +1263 +1151 +1070 +954 +720 +330 +-189 +-763 +-1279 +-1652 +-1830 +-1778 +-1499 +-1073 +-612 +-239 +-15 +66 +31 +-59 +-124 +-103 +49 +335 +747 +1240 +1726 +2069 +2155 +1943 +1458 +794 +60 +-611 +-1113 +-1387 +-1452 +-1365 +-1183 +-982 +-829 +-757 +-764 +-824 +-880 +-881 +-792 +-610 +-323 +50 +476 +890 +1186 +1307 +1251 +1053 +775 +496 +252 +41 +-144 +-293 +-387 +-436 +-485 +-556 +-616 +-642 +-646 +-643 +-654 +-687 +-745 +-824 +-943 +-1125 +-1360 +-1638 +-1888 +-2025 +-1973 +-1710 +-1218 +-505 +349 +1151 +1674 +1771 +1488 +1026 +550 +142 +-165 +-318 +-282 +-67 +236 +486 +597 +559 +401 +169 +-118 +-416 +-640 +-721 +-650 +-458 +-198 +59 +219 +239 +126 +-45 +-171 +-192 +-116 +-6 +84 +163 +294 +478 +632 +650 +500 +235 +-53 +-328 +-612 +-888 +-1099 +-1220 +-1250 +-1209 +-1125 +-968 +-678 +-224 +373 +999 +1559 +1996 +2315 +2520 +2566 +2444 +2204 +1943 +1719 +1523 +1348 +1221 +1126 +1020 +804 +429 +-89 +-659 +-1185 +-1578 +-1768 +-1757 +-1540 +-1158 +-720 +-334 +-73 +46 +40 +-32 +-96 +-89 +38 +288 +658 +1134 +1627 +2019 +2182 +2042 +1622 +1003 +275 +-443 +-1018 +-1374 +-1499 +-1430 +-1243 +-1022 +-842 +-749 +-748 +-811 +-890 +-930 +-886 +-736 +-465 +-84 +384 +838 +1181 +1335 +1293 +1098 +814 +520 +259 +39 +-145 +-288 +-370 +-403 +-452 +-541 +-645 +-711 +-731 +-733 +-734 +-736 +-755 +-811 +-912 +-1077 +-1311 +-1601 +-1892 +-2079 +-2075 +-1851 +-1395 +-705 +156 +1009 +1605 +1776 +1543 +1100 +638 +230 +-102 +-303 +-310 +-120 +171 +429 +544 +514 +383 +188 +-65 +-358 +-597 +-706 +-661 +-499 +-274 +-32 +147 +210 +147 +-1 +-138 +-192 +-134 +-16 +79 +142 +235 +395 +574 +644 +539 +299 +22 +-258 +-544 +-829 +-1067 +-1201 +-1230 +-1193 +-1101 +-955 +-702 +-285 +280 +895 +1452 +1895 +2222 +2449 +2546 +2465 +2245 +1983 +1755 +1558 +1376 +1226 +1127 +1032 +848 +514 +32 +-516 +-1039 +-1444 +-1705 +-1775 +-1622 +-1275 +-817 +-392 +-88 +80 +117 +54 +-32 +-64 +7 +205 +539 +998 +1518 +1967 +2203 +2131 +1768 +1171 +435 +-320 +-947 +-1345 +-1491 +-1432 +-1240 +-1008 +-815 +-706 +-698 +-774 +-896 +-976 +-958 +-815 +-546 +-172 +267 +719 +1082 +1272 +1273 +1103 +833 +535 +282 +74 +-108 +-264 +-374 +-415 +-455 +-536 +-641 +-713 +-720 +-689 +-651 +-638 +-680 +-759 +-884 +-1061 +-1294 +-1580 +-1869 +-2069 +-2067 +-1849 +-1432 +-804 +-1 +839 +1480 +1718 +1529 +1095 +644 +242 +-92 +-324 +-372 +-203 +97 +379 +519 +512 +413 +254 +26 +-276 +-564 +-713 +-710 +-577 +-363 +-106 +121 +236 +215 +78 +-96 +-189 +-153 +-45 +49 +87 +158 +330 +544 +661 +583 +354 +70 +-194 +-466 +-765 +-1020 +-1173 +-1201 +-1153 +-1074 +-958 +-752 +-389 +149 +748 +1296 +1751 +2111 +2393 +2550 +2507 +2296 +2026 +1789 +1595 +1398 +1217 +1085 +1006 +876 +607 +183 +-344 +-881 +-1332 +-1633 +-1754 +-1650 +-1323 +-868 +-423 +-99 +84 +127 +57 +-28 +-69 +-6 +172 +479 +920 +1434 +1910 +2179 +2149 +1821 +1255 +552 +-184 +-816 +-1232 +-1405 +-1364 +-1204 +-995 +-819 +-720 +-704 +-770 +-876 +-952 +-928 +-784 +-548 +-230 +160 +581 +945 +1160 +1206 +1087 +854 +581 +339 +151 +-29 +-199 +-328 +-401 +-444 +-531 +-637 +-693 +-673 +-629 +-610 +-608 +-656 +-739 +-860 +-1015 +-1217 +-1478 +-1757 +-1965 +-1991 +-1823 +-1479 +-944 +-203 +638 +1350 +1676 +1550 +1153 +725 +343 +-19 +-310 +-434 +-308 +-5 +297 +470 +486 +422 +304 +105 +-205 +-528 +-712 +-723 +-584 +-368 +-115 +114 +253 +263 +128 +-61 +-185 +-175 +-47 +74 +124 +178 +335 +564 +711 +662 +424 +134 +-119 +-378 +-660 +-929 +-1098 +-1140 +-1110 +-1035 +-945 +-777 +-451 +50 +655 +1216 +1681 +2035 +2310 +2481 +2455 +2237 +1944 +1718 +1554 +1391 +1225 +1112 +1051 +945 +702 +286 +-253 +-816 +-1283 +-1594 +-1719 +-1628 +-1318 +-858 +-418 +-86 +84 +125 +51 +-45 +-87 +-41 +133 +420 +827 +1324 +1798 +2085 +2071 +1788 +1294 +648 +-56 +-701 +-1151 +-1359 +-1356 +-1227 +-1041 +-872 +-772 +-727 +-759 +-851 +-934 +-937 +-834 +-634 +-358 +-9 +392 +776 +1050 +1143 +1065 +833 +548 +301 +115 +-60 +-243 +-395 +-459 +-472 +-522 +-626 +-699 +-696 +-662 +-637 +-647 +-688 +-759 +-845 +-970 +-1133 +-1369 +-1654 +-1897 +-1969 +-1823 +-1515 +-1058 +-387 +440 +1214 +1650 +1569 +1164 +702 +320 +-31 +-335 +-481 +-382 +-74 +271 +470 +489 +396 +271 +92 +-206 +-538 +-746 +-740 +-590 +-368 +-127 +93 +240 +270 +167 +-14 +-173 +-196 +-57 +109 +192 +201 +315 +540 +716 +695 +474 +176 +-56 +-249 +-502 +-785 +-994 +-1073 +-1041 +-964 +-893 +-768 +-496 +-25 +595 +1180 +1626 +1946 +2206 +2408 +2437 +2247 +1948 +1716 +1589 +1473 +1303 +1153 +1073 +999 +789 +394 +-142 +-691 +-1147 +-1440 +-1567 +-1534 +-1297 +-881 +-434 +-108 +88 +155 +110 +25 +-14 +26 +179 +425 +781 +1241 +1718 +2048 +2097 +1870 +1422 +834 +135 +-556 +-1079 +-1345 +-1387 +-1281 +-1112 +-941 +-812 +-741 +-742 +-819 +-929 +-971 +-896 +-716 +-436 +-83 +330 +750 +1033 +1143 +1063 +838 +548 +279 +96 +-70 +-247 +-390 +-447 +-446 +-481 +-596 +-705 +-746 +-715 +-680 +-677 +-696 +-740 +-806 +-907 +-1075 +-1323 +-1623 +-1902 +-2005 +-1901 +-1630 +-1206 +-569 +249 +1056 +1557 +1539 +1131 +668 +303 +-27 +-329 +-514 +-446 +-140 +211 +424 +443 +349 +243 +101 +-160 +-494 +-714 +-729 +-585 +-387 +-190 +8 +173 +241 +175 +-8 +-173 +-212 +-86 +98 +174 +176 +248 +463 +675 +714 +525 +240 +11 +-188 +-441 +-752 +-996 +-1102 +-1090 +-1026 +-954 +-831 +-569 +-106 +500 +1098 +1577 +1917 +2184 +2412 +2474 +2316 +2037 +1804 +1663 +1537 +1344 +1173 +1094 +1037 +864 +497 +-6 +-553 +-1024 +-1367 +-1573 +-1613 +-1423 +-1023 +-548 +-153 +90 +189 +180 +101 +30 +25 +135 +358 +688 +1144 +1661 +2068 +2204 +2032 +1617 +1018 +288 +-462 +-1057 +-1366 +-1420 +-1307 +-1123 +-940 +-787 +-714 +-722 +-817 +-949 +-1028 +-983 +-798 +-504 +-132 +284 +712 +1038 +1174 +1114 +912 +623 +353 +159 +-4 +-165 +-329 +-414 +-432 +-459 +-583 +-727 +-793 +-770 +-716 +-691 +-699 +-750 +-817 +-916 +-1079 +-1308 +-1593 +-1894 +-2042 +-1969 +-1696 +-1289 +-692 +102 +933 +1511 +1599 +1245 +765 +396 +79 +-236 +-475 +-487 +-232 +123 +379 +440 +371 +287 +166 +-55 +-391 +-670 +-739 +-638 +-454 +-252 +-26 +173 +278 +237 +54 +-138 +-221 +-126 +62 +151 +155 +202 +423 +694 +794 +639 +333 +59 +-153 +-421 +-747 +-1007 +-1116 +-1091 +-1003 +-908 +-805 +-590 +-169 +419 +1020 +1504 +1860 +2158 +2426 +2561 +2460 +2178 +1896 +1721 +1580 +1383 +1195 +1097 +1056 +934 +630 +157 +-406 +-921 +-1318 +-1573 +-1658 +-1517 +-1124 +-624 +-192 +92 +232 +220 +118 +9 +-21 +56 +264 +590 +1040 +1577 +2037 +2234 +2100 +1696 +1100 +371 +-385 +-992 +-1363 +-1456 +-1376 +-1205 +-1002 +-856 +-765 +-766 +-841 +-947 +-1022 +-984 +-806 +-530 +-200 +196 +619 +957 +1120 +1112 +941 +671 +389 +166 +-4 +-180 +-369 +-489 +-516 +-526 +-623 +-749 +-800 +-757 +-703 +-691 +-715 +-781 +-857 +-952 +-1096 +-1293 +-1571 +-1878 +-2066 +-2026 +-1800 +-1434 +-893 +-134 +736 +1426 +1641 +1360 +897 +507 +180 +-164 +-471 +-568 +-349 +24 +345 +455 +413 +337 +240 +39 +-310 +-658 +-804 +-726 +-550 +-328 +-91 +136 +269 +256 +111 +-110 +-246 +-186 +-5 +129 +123 +158 +357 +640 +804 +686 +378 +89 +-130 +-349 +-646 +-921 +-1057 +-1057 +-979 +-893 +-800 +-622 +-255 +311 +935 +1454 +1844 +2151 +2428 +2600 +2527 +2239 +1918 +1718 +1607 +1446 +1254 +1132 +1117 +1039 +763 +288 +-299 +-846 +-1281 +-1537 +-1631 +-1505 +-1140 +-649 +-194 +98 +234 +231 +132 +27 +-19 +52 +223 +529 +982 +1507 +1986 +2204 +2092 +1739 +1208 +539 +-200 +-851 +-1268 +-1414 +-1368 +-1211 +-1038 +-880 +-766 +-717 +-743 +-849 +-931 +-924 +-800 +-582 +-309 +38 +450 +831 +1070 +1114 +989 +735 +453 +234 +74 +-115 +-332 +-484 +-529 +-518 +-567 +-686 +-764 +-743 +-700 +-705 +-718 +-764 +-835 +-899 +-1005 +-1177 +-1438 +-1762 +-2025 +-2046 +-1863 +-1550 +-1091 +-383 +509 +1294 +1636 +1420 +952 +561 +247 +-98 +-425 +-552 +-367 +19 +366 +512 +466 +380 +286 +110 +-244 +-610 +-779 +-703 +-524 +-333 +-135 +55 +192 +203 +72 +-164 +-319 +-285 +-67 +113 +132 +118 +280 +572 +756 +660 +364 +71 +-111 +-286 +-549 +-839 +-1026 +-1044 +-985 +-905 +-833 +-713 +-395 +157 +796 +1344 +1753 +2053 +2336 +2544 +2518 +2245 +1921 +1735 +1640 +1487 +1270 +1128 +1107 +1056 +812 +365 +-203 +-747 +-1171 +-1436 +-1548 +-1506 +-1219 +-756 +-327 +-29 +128 +169 +107 +9 +-37 +5 +166 +422 +797 +1297 +1784 +2071 +2049 +1759 +1288 +672 +-42 +-720 +-1182 +-1383 +-1386 +-1242 +-1064 +-871 +-729 +-665 +-683 +-790 +-901 +-927 +-836 +-652 +-383 +-44 +381 +767 +1021 +1094 +983 +744 +446 +216 +49 +-110 +-285 +-420 +-456 +-430 +-471 +-604 +-711 +-724 +-701 +-682 +-676 +-672 +-720 +-786 +-880 +-1044 +-1281 +-1604 +-1900 +-2001 +-1867 +-1583 +-1159 +-506 +330 +1146 +1581 +1451 +993 +558 +251 +-54 +-348 +-505 +-383 +-12 +356 +536 +506 +404 +315 +174 +-133 +-501 +-697 +-667 +-511 +-332 +-158 +18 +154 +207 +125 +-86 +-264 +-288 +-124 +73 +128 +108 +192 +436 +668 +682 +454 +164 +-34 +-203 +-454 +-741 +-955 +-1003 +-948 +-862 +-765 +-667 +-412 +54 +680 +1246 +1633 +1890 +2118 +2331 +2381 +2196 +1894 +1698 +1597 +1478 +1278 +1111 +1052 +1013 +841 +465 +-41 +-584 +-1000 +-1289 +-1447 +-1461 +-1262 +-848 +-411 +-72 +127 +211 +170 +75 +6 +11 +103 +296 +598 +1032 +1517 +1867 +1921 +1714 +1305 +741 +68 +-605 +-1088 +-1310 +-1313 +-1176 +-997 +-821 +-677 +-618 +-632 +-746 +-871 +-934 +-865 +-677 +-421 +-105 +253 +621 +884 +980 +893 +688 +419 +177 +28 +-98 +-252 +-387 +-440 +-419 +-458 +-578 +-691 +-712 +-667 +-621 +-595 +-605 +-666 +-746 +-849 +-976 +-1167 +-1454 +-1757 +-1878 +-1762 +-1486 +-1127 +-605 +130 +902 +1399 +1372 +971 +562 +306 +69 +-205 +-409 +-367 +-55 +314 +501 +487 +382 +303 +207 +-26 +-381 +-644 +-669 +-543 +-385 +-230 +-56 +119 +220 +181 +11 +-184 +-263 +-144 +49 +122 +74 +100 +331 +602 +687 +521 +229 +25 +-122 +-341 +-624 +-839 +-910 +-855 +-752 +-670 +-587 +-390 +18 +580 +1102 +1466 +1703 +1931 +2168 +2275 +2135 +1842 +1620 +1523 +1437 +1241 +1054 +982 +956 +846 +548 +94 +-400 +-814 +-1120 +-1283 +-1338 +-1185 +-818 +-389 +-47 +150 +226 +195 +101 +-2 +-21 +57 +227 +507 +913 +1386 +1743 +1840 +1647 +1268 +760 +156 +-478 +-965 +-1203 +-1231 +-1108 +-938 +-772 +-643 +-589 +-591 +-681 +-789 +-839 +-762 +-590 +-367 +-103 +186 +500 +738 +849 +826 +666 +426 +189 +51 +-52 +-199 +-368 +-467 +-465 +-472 +-563 +-665 +-686 +-614 +-542 +-536 +-557 +-646 +-719 +-807 +-927 +-1094 +-1340 +-1610 +-1740 +-1657 +-1446 +-1147 +-717 +-72 +661 +1212 +1269 +933 +532 +271 +58 +-210 +-432 +-436 +-164 +193 +425 +448 +363 +312 +238 +28 +-328 +-626 +-692 +-583 +-404 +-242 +-75 +98 +186 +166 +5 +-223 +-315 +-222 +-30 +66 +34 +63 +262 +540 +659 +513 +227 +16 +-129 +-326 +-592 +-819 +-897 +-856 +-756 +-683 +-619 +-457 +-89 +435 +971 +1363 +1639 +1861 +2086 +2206 +2089 +1815 +1573 +1475 +1401 +1245 +1065 +997 +994 +922 +650 +212 +-293 +-735 +-1064 +-1258 +-1310 +-1173 +-826 +-402 +-75 +122 +199 +165 +77 +-16 +-38 +46 +228 +491 +866 +1308 +1675 +1796 +1642 +1292 +827 +262 +-326 +-816 +-1089 +-1149 +-1063 +-925 +-788 +-655 +-595 +-583 +-642 +-734 +-788 +-744 +-606 +-402 +-161 +108 +426 +703 +844 +843 +708 +480 +247 +87 +-31 +-183 +-343 +-440 +-434 +-421 +-478 +-585 +-619 +-573 +-526 +-530 +-570 +-633 +-698 +-760 +-860 +-1015 +-1237 +-1497 +-1684 +-1657 +-1486 +-1208 +-816 +-203 +539 +1131 +1286 +1005 +591 +287 +59 +-201 +-428 +-465 +-240 +128 +397 +463 +400 +332 +244 +57 +-267 +-575 +-668 +-572 +-404 +-247 +-92 +60 +150 +145 +4 +-197 +-304 +-241 +-41 +82 +62 +62 +217 +453 +597 +491 +245 +25 +-95 +-259 +-510 +-734 +-850 +-843 +-772 +-701 +-644 +-505 +-173 +337 +865 +1281 +1580 +1791 +1988 +2102 +2023 +1774 +1535 +1427 +1365 +1239 +1080 +1004 +995 +941 +708 +307 +-185 +-630 +-947 +-1138 +-1200 +-1113 +-819 +-431 +-104 +95 +176 +170 +89 +-2 +-28 +19 +176 +418 +746 +1149 +1516 +1678 +1587 +1302 +881 +366 +-212 +-705 +-1013 +-1129 +-1080 +-940 +-779 +-645 +-558 +-515 +-547 +-644 +-727 +-733 +-635 +-458 +-233 +48 +364 +643 +809 +825 +706 +482 +247 +77 +-40 +-160 +-299 +-385 +-394 +-370 +-412 +-519 +-594 +-606 +-586 +-579 +-592 +-613 +-650 +-683 +-761 +-899 +-1116 +-1390 +-1584 +-1605 +-1461 +-1226 +-875 +-313 +397 +1009 +1236 +1024 +621 +306 +89 +-139 +-350 +-424 +-247 +67 +341 +439 +386 +305 +236 +81 +-187 +-466 +-584 +-518 +-386 +-248 +-125 +14 +117 +135 +19 +-161 +-284 +-242 +-84 +38 +45 +23 +134 +350 +507 +468 +270 +75 +-63 +-214 +-432 +-646 +-768 +-781 +-712 +-640 +-566 +-443 +-166 +285 +780 +1183 +1441 +1632 +1800 +1919 +1889 +1683 +1463 +1340 +1291 +1187 +1043 +939 +915 +876 +686 +356 +-65 +-473 +-801 +-1019 +-1112 +-1070 +-836 +-480 +-152 +68 +186 +208 +137 +43 +-19 +-9 +88 +272 +546 +912 +1270 +1487 +1481 +1272 +905 +423 +-120 +-606 +-940 +-1062 +-1021 +-879 +-708 +-561 +-451 +-427 +-457 +-546 +-644 +-672 +-607 +-455 +-251 +7 +296 +555 +715 +736 +635 +443 +229 +63 +-49 +-152 +-270 +-361 +-379 +-362 +-398 +-495 +-557 +-561 +-526 +-489 +-477 +-483 +-529 +-581 +-669 +-807 +-1006 +-1248 +-1447 +-1492 +-1367 +-1150 +-834 +-355 +261 +818 +1088 +967 +632 +325 +108 +-94 +-278 +-364 +-257 +-4 +258 +403 +401 +338 +269 +147 +-69 +-322 +-473 +-480 +-407 +-295 +-165 +-15 +98 +120 +40 +-118 +-246 +-253 +-151 +-44 +-20 +-29 +53 +241 +403 +421 +292 +110 +-36 +-184 +-375 +-564 +-681 +-704 +-654 +-578 +-496 +-381 +-160 +201 +626 +1003 +1264 +1448 +1597 +1723 +1731 +1585 +1387 +1244 +1170 +1084 +959 +863 +820 +788 +664 +417 +59 +-312 +-635 +-867 +-979 +-960 +-779 +-481 +-170 +47 +171 +184 +108 +0 +-79 +-96 +-25 +141 +387 +718 +1058 +1299 +1331 +1162 +842 +419 +-65 +-514 +-821 +-942 +-910 +-782 +-619 +-487 +-406 +-377 +-407 +-480 +-555 +-579 +-527 +-411 +-246 +-40 +208 +443 +591 +627 +560 +408 +238 +90 +-14 +-115 +-231 +-322 +-365 +-359 +-386 +-462 +-519 +-514 +-466 +-429 +-416 +-432 +-468 +-522 +-595 +-702 +-856 +-1044 +-1219 +-1287 +-1235 +-1070 +-804 +-397 +122 +624 +920 +901 +660 +378 +158 +-33 +-202 +-303 +-244 +-38 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d5_587_330.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d5_587_330.samples new file mode 100644 index 00000000..1866ea9e --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_d5_587_330.samples @@ -0,0 +1,4096 @@ +678 +156 +-278 +-511 +-501 +-353 +-225 +-198 +-232 +-186 +26 +359 +690 +935 +1029 +934 +707 +366 +-50 +-501 +-929 +-1312 +-1645 +-1932 +-2124 +-2112 +-1823 +-1249 +-500 +295 +998 +1527 +1826 +1957 +2023 +1989 +1802 +1419 +833 +147 +-486 +-936 +-1141 +-1146 +-1028 +-809 +-482 +-81 +299 +596 +772 +805 +750 +665 +489 +174 +-256 +-680 +-1046 +-1323 +-1486 +-1487 +-1326 +-1116 +-904 +-668 +-384 +-53 +322 +699 +1050 +1363 +1548 +1509 +1246 +798 +273 +-186 +-456 +-497 +-375 +-239 +-197 +-225 +-206 +-34 +282 +617 +882 +1004 +945 +755 +456 +81 +-353 +-796 +-1215 +-1585 +-1892 +-2118 +-2157 +-1927 +-1412 +-696 +85 +811 +1391 +1760 +1940 +2039 +2039 +1890 +1551 +1002 +324 +-345 +-852 +-1113 +-1159 +-1069 +-884 +-591 +-203 +206 +558 +775 +833 +767 +664 +512 +245 +-141 +-557 +-931 +-1243 +-1456 +-1505 +-1378 +-1162 +-939 +-712 +-443 +-131 +221 +590 +945 +1282 +1515 +1546 +1350 +949 +422 +-79 +-406 +-506 +-406 +-253 +-188 +-212 +-228 +-103 +190 +541 +837 +1004 +988 +813 +517 +151 +-268 +-695 +-1098 +-1474 +-1804 +-2074 +-2177 +-2028 +-1579 +-891 +-97 +666 +1289 +1705 +1899 +1998 +2035 +1937 +1662 +1167 +499 +-199 +-761 +-1077 +-1152 +-1073 +-903 +-646 +-294 +98 +457 +721 +835 +817 +731 +596 +337 +-56 +-496 +-882 +-1197 +-1426 +-1515 +-1430 +-1237 +-1017 +-790 +-526 +-214 +141 +521 +881 +1220 +1479 +1564 +1424 +1082 +590 +75 +-315 +-502 +-463 +-321 +-219 +-206 +-233 +-162 +72 +409 +728 +952 +1006 +872 +612 +259 +-162 +-606 +-1029 +-1415 +-1741 +-2007 +-2149 +-2072 +-1708 +-1083 +-313 +469 +1138 +1614 +1866 +1987 +2051 +1982 +1744 +1298 +676 +-13 +-616 +-1010 +-1165 +-1133 +-983 +-731 +-378 +22 +388 +662 +795 +790 +717 +615 +408 +62 +-364 +-774 +-1115 +-1370 +-1503 +-1462 +-1282 +-1055 +-832 +-586 +-292 +36 +410 +785 +1137 +1433 +1560 +1460 +1158 +694 +185 +-230 +-457 +-463 +-340 +-233 +-216 +-248 +-203 +6 +336 +658 +899 +984 +893 +684 +363 +-36 +-481 +-909 +-1313 +-1661 +-1947 +-2135 +-2108 +-1805 +-1228 +-486 +289 +980 +1504 +1813 +1959 +2040 +2010 +1819 +1431 +846 +163 +-472 +-915 +-1113 +-1113 +-1001 +-796 +-491 +-113 +273 +595 +788 +818 +742 +626 +437 +134 +-268 +-667 +-1012 +-1288 +-1462 +-1468 +-1314 +-1093 +-872 +-635 +-352 +-36 +319 +680 +1031 +1346 +1530 +1510 +1270 +840 +314 +-160 +-451 +-504 +-379 +-234 +-186 +-212 +-200 +-35 +278 +614 +883 +998 +928 +719 +406 +33 +-391 +-812 +-1210 +-1570 +-1878 +-2110 +-2151 +-1931 +-1415 +-691 +109 +841 +1415 +1774 +1944 +2037 +2039 +1892 +1556 +1012 +329 +-349 +-857 +-1109 +-1141 +-1034 +-838 +-556 +-190 +193 +523 +743 +815 +773 +684 +531 +242 +-170 +-597 +-956 +-1242 +-1440 +-1497 +-1392 +-1193 +-967 +-727 +-440 +-115 +249 +624 +979 +1305 +1521 +1543 +1346 +957 +445 +-49 +-388 +-513 +-434 +-297 +-224 +-228 +-232 +-108 +171 +509 +798 +972 +973 +817 +539 +171 +-269 +-726 +-1150 +-1525 +-1829 +-2069 +-2156 +-2009 +-1576 +-908 +-120 +647 +1282 +1711 +1922 +2028 +2054 +1943 +1652 +1160 +511 +-168 +-723 +-1061 +-1172 +-1125 +-962 +-681 +-299 +112 +465 +707 +806 +782 +707 +586 +348 +-26 +-454 +-845 +-1181 +-1429 +-1531 +-1443 +-1239 +-1007 +-777 +-516 +-211 +133 +508 +879 +1226 +1490 +1576 +1430 +1084 +591 +84 +-301 +-483 +-453 +-327 +-243 +-238 +-258 +-173 +75 +415 +721 +927 +965 +846 +612 +279 +-125 +-566 +-995 +-1394 +-1727 +-1999 +-2146 +-2064 +-1695 +-1070 +-306 +464 +1117 +1591 +1855 +1993 +2062 +1992 +1747 +1297 +669 +-18 +-616 +-1002 +-1145 +-1117 +-983 +-752 +-417 +-18 +367 +664 +816 +813 +732 +610 +399 +64 +-347 +-731 +-1060 +-1323 +-1473 +-1449 +-1284 +-1071 +-848 +-594 +-294 +36 +405 +770 +1118 +1416 +1567 +1493 +1196 +723 +186 +-258 +-503 +-512 +-375 +-252 +-220 +-243 +-195 +11 +341 +677 +927 +1020 +930 +699 +362 +-40 +-478 +-899 +-1285 +-1628 +-1920 +-2117 +-2116 +-1833 +-1268 +-518 +278 +986 +1519 +1829 +1960 +2026 +1990 +1807 +1431 +855 +175 +-473 +-937 +-1154 +-1165 +-1043 +-827 +-515 +-133 +246 +564 +760 +813 +766 +674 +500 +190 +-229 +-643 +-1001 +-1287 +-1470 +-1487 +-1337 +-1118 +-892 +-649 +-356 +-24 +351 +724 +1059 +1351 +1519 +1490 +1249 +830 +309 +-164 +-469 +-547 +-435 +-296 +-229 +-234 +-210 +-45 +247 +585 +862 +1010 +977 +789 +487 +98 +-352 +-796 +-1204 +-1561 +-1856 +-2066 +-2108 +-1909 +-1422 +-726 +67 +808 +1400 +1773 +1949 +2051 +2052 +1899 +1555 +1007 +338 +-331 +-845 +-1122 +-1187 +-1108 +-923 +-623 +-231 +177 +520 +743 +816 +772 +698 +566 +308 +-80 +-510 +-896 +-1224 +-1445 +-1506 +-1390 +-1175 +-944 +-712 +-434 +-121 +239 +620 +980 +1303 +1522 +1542 +1336 +945 +435 +-51 +-394 +-526 +-455 +-322 +-248 +-250 +-252 +-124 +160 +507 +798 +976 +975 +825 +566 +218 +-198 +-645 +-1074 +-1464 +-1789 +-2038 +-2138 +-1997 +-1568 +-903 +-125 +624 +1242 +1664 +1886 +2006 +2048 +1941 +1657 +1162 +511 +-171 +-730 +-1072 +-1182 +-1131 +-975 +-715 +-355 +55 +429 +705 +832 +821 +748 +617 +368 +-3 +-427 +-810 +-1130 +-1365 +-1476 +-1419 +-1240 +-1023 +-792 +-524 +-220 +118 +486 +840 +1171 +1439 +1543 +1430 +1109 +622 +101 +-312 +-521 +-501 +-368 +-272 +-266 +-280 +-192 +55 +399 +723 +947 +1002 +885 +644 +297 +-113 +-549 +-960 +-1341 +-1675 +-1949 +-2106 +-2045 +-1700 +-1101 +-349 +423 +1092 +1572 +1833 +1955 +2012 +1956 +1725 +1291 +677 +-7 +-620 +-1022 +-1175 +-1146 +-996 +-753 +-420 +-32 +335 +626 +787 +807 +753 +651 +450 +111 +-310 +-705 +-1044 +-1302 +-1442 +-1415 +-1261 +-1064 +-852 +-611 +-313 +26 +399 +757 +1088 +1373 +1513 +1436 +1153 +709 +204 +-221 +-467 +-496 +-378 +-269 +-232 +-246 +-196 +9 +330 +657 +901 +1002 +930 +727 +413 +19 +-434 +-879 +-1293 +-1648 +-1927 +-2098 +-2081 +-1805 +-1263 +-544 +233 +936 +1479 +1797 +1942 +2022 +1993 +1804 +1424 +853 +179 +-461 +-915 +-1130 +-1149 +-1042 +-837 +-526 +-130 +267 +595 +782 +816 +754 +662 +503 +209 +-194 +-611 +-983 +-1280 +-1461 +-1474 +-1327 +-1107 +-881 +-643 +-363 +-53 +303 +664 +1009 +1317 +1499 +1472 +1225 +798 +284 +-172 +-460 +-519 +-400 +-264 +-207 +-223 +-207 +-40 +271 +616 +885 +1017 +968 +774 +477 +102 +-330 +-766 +-1178 +-1555 +-1873 +-2106 +-2156 +-1939 +-1433 +-722 +66 +795 +1371 +1732 +1906 +2001 +2016 +1875 +1542 +1005 +339 +-325 +-833 +-1098 +-1143 +-1055 +-872 +-594 +-226 +171 +519 +759 +847 +806 +717 +557 +274 +-122 +-544 +-913 +-1214 +-1421 +-1486 +-1383 +-1176 +-947 +-713 +-438 +-125 +226 +594 +939 +1251 +1475 +1511 +1334 +961 +458 +-37 +-393 +-530 +-455 +-307 +-219 +-221 +-230 +-114 +159 +507 +812 +1002 +1009 +847 +563 +188 +-242 +-681 +-1085 +-1452 +-1764 +-2019 +-2135 +-2010 +-1588 +-922 +-133 +629 +1250 +1666 +1876 +1982 +2022 +1927 +1653 +1174 +538 +-145 +-716 +-1065 +-1167 +-1105 +-930 +-664 +-310 +83 +434 +697 +814 +812 +748 +626 +386 +1 +-447 +-851 +-1179 +-1402 +-1496 +-1422 +-1241 +-1030 +-805 +-543 +-232 +118 +501 +863 +1201 +1469 +1564 +1439 +1110 +639 +134 +-266 +-470 +-462 +-344 +-256 +-253 +-274 +-201 +32 +368 +685 +912 +984 +882 +648 +314 +-94 +-542 +-972 +-1370 +-1706 +-1973 +-2113 +-2036 +-1688 +-1087 +-338 +428 +1099 +1588 +1852 +1978 +2033 +1968 +1741 +1314 +705 +22 +-584 +-979 +-1138 +-1119 +-996 +-778 +-455 +-53 +336 +640 +797 +798 +715 +605 +417 +89 +-322 +-724 +-1069 +-1340 +-1490 +-1468 +-1300 +-1075 +-844 +-588 +-295 +31 +396 +765 +1120 +1426 +1575 +1503 +1210 +738 +207 +-232 +-476 +-498 +-371 +-259 +-232 +-259 +-216 +-9 +323 +656 +904 +1002 +915 +695 +379 +-5 +-442 +-878 +-1287 +-1647 +-1941 +-2126 +-2117 +-1834 +-1273 +-534 +251 +951 +1483 +1796 +1949 +2038 +2017 +1843 +1465 +884 +201 +-452 +-920 +-1136 +-1143 +-1036 +-841 +-545 +-162 +236 +569 +773 +824 +763 +664 +485 +172 +-239 +-645 +-988 +-1267 +-1445 +-1471 +-1341 +-1129 +-901 +-656 +-369 +-51 +305 +672 +1018 +1332 +1528 +1518 +1288 +875 +356 +-126 +-441 +-527 +-414 +-268 +-205 +-225 +-224 +-74 +230 +578 +863 +1009 +964 +766 +461 +74 +-360 +-793 +-1198 +-1554 +-1850 +-2071 +-2126 +-1927 +-1439 +-731 +63 +803 +1389 +1753 +1919 +2005 +2013 +1885 +1576 +1056 +395 +-280 +-815 +-1108 +-1159 +-1076 +-886 +-602 +-234 +157 +489 +720 +799 +766 +694 +560 +295 +-105 +-545 +-936 +-1245 +-1450 +-1508 +-1394 +-1181 +-957 +-731 +-457 +-143 +214 +593 +946 +1267 +1504 +1552 +1375 +997 +496 +7 +-342 +-476 +-412 +-282 +-219 +-237 +-255 +-150 +110 +442 +741 +934 +951 +813 +554 +203 +-214 +-656 +-1074 +-1462 +-1788 +-2039 +-2136 +-1990 +-1558 +-896 +-127 +618 +1236 +1660 +1877 +1992 +2038 +1942 +1672 +1196 +563 +-109 +-684 +-1029 +-1143 +-1109 +-962 +-707 +-350 +59 +434 +704 +816 +784 +690 +566 +344 +-11 +-430 +-820 +-1153 +-1396 +-1503 +-1433 +-1240 +-1014 +-783 +-525 +-227 +104 +474 +839 +1189 +1479 +1586 +1458 +1116 +622 +102 +-300 +-491 +-450 +-303 +-209 +-216 +-261 +-202 +39 +387 +711 +928 +979 +849 +602 +274 +-119 +-545 +-953 +-1343 +-1683 +-1966 +-2121 +-2051 +-1689 +-1066 +-305 +463 +1115 +1583 +1827 +1941 +2004 +1952 +1739 +1320 +710 +22 +-592 +-995 +-1147 +-1114 +-976 +-745 +-421 +-30 +347 +641 +803 +812 +737 +622 +412 +65 +-362 +-752 +-1080 +-1327 +-1467 +-1440 +-1269 +-1044 +-812 +-565 +-272 +50 +408 +755 +1085 +1377 +1525 +1463 +1188 +734 +208 +-245 +-505 +-523 +-377 +-235 +-193 +-225 +-200 +-9 +316 +656 +917 +1025 +945 +720 +391 +-12 +-460 +-890 +-1292 +-1635 +-1916 +-2113 +-2119 +-1850 +-1286 +-533 +277 +997 +1530 +1824 +1946 +2009 +1984 +1804 +1429 +861 +180 +-469 +-939 +-1156 +-1160 +-1039 +-817 +-502 +-113 +270 +584 +770 +801 +746 +661 +506 +199 +-224 +-653 +-1019 +-1304 +-1482 +-1495 +-1343 +-1119 +-887 +-652 +-376 +-56 +311 +697 +1054 +1372 +1559 +1532 +1284 +852 +321 +-155 +-457 +-532 +-427 +-297 +-250 +-277 +-268 +-107 +204 +558 +853 +1014 +983 +806 +512 +135 +-300 +-751 +-1176 +-1565 +-1883 +-2109 +-2153 +-1936 +-1430 +-709 +88 +822 +1395 +1750 +1914 +2005 +2021 +1884 +1557 +1019 +358 +-307 +-827 +-1106 +-1169 +-1099 +-924 +-640 +-255 +164 +532 +777 +850 +792 +689 +547 +294 +-86 +-509 +-888 +-1207 +-1434 +-1507 +-1404 +-1193 +-968 +-733 +-459 +-160 +184 +552 +914 +1267 +1530 +1594 +1413 +1014 +478 +-45 +-411 +-551 +-471 +-313 +-231 +-244 +-266 +-157 +124 +479 +795 +991 +997 +835 +553 +199 +-212 +-643 +-1046 +-1428 +-1757 +-2026 +-2146 +-2017 +-1589 +-910 +-117 +645 +1262 +1674 +1867 +1964 +2012 +1927 +1667 +1183 +531 +-162 +-740 +-1074 +-1169 +-1104 +-946 +-701 +-355 +44 +422 +705 +836 +826 +747 +629 +390 +13 +-419 +-804 +-1120 +-1361 +-1481 +-1426 +-1248 +-1030 +-808 +-549 +-249 +87 +452 +808 +1144 +1419 +1530 +1416 +1094 +609 +84 +-327 +-530 +-492 +-336 +-221 +-200 +-232 +-169 +57 +394 +715 +953 +1029 +913 +674 +331 +-89 +-544 +-975 +-1366 +-1697 +-1965 +-2119 +-2066 +-1722 +-1105 +-333 +455 +1113 +1577 +1815 +1926 +1988 +1932 +1718 +1303 +704 +28 +-579 +-989 +-1159 +-1135 +-997 +-754 +-414 +-18 +357 +643 +794 +797 +734 +642 +458 +124 +-308 +-731 +-1085 +-1354 +-1504 +-1469 +-1290 +-1061 +-838 +-594 +-308 +20 +389 +755 +1097 +1391 +1540 +1465 +1171 +707 +182 +-257 +-504 +-511 +-361 +-231 +-202 +-241 +-210 +-14 +318 +651 +899 +998 +927 +738 +436 +49 +-406 +-853 +-1267 +-1619 +-1913 +-2115 +-2120 +-1838 +-1267 +-521 +265 +957 +1477 +1776 +1909 +1982 +1967 +1796 +1433 +870 +193 +-452 +-919 +-1134 +-1142 +-1035 +-836 +-536 +-149 +255 +598 +808 +852 +782 +672 +499 +201 +-203 +-605 +-966 +-1271 +-1475 +-1511 +-1365 +-1137 +-899 +-658 +-383 +-71 +286 +658 +1006 +1331 +1536 +1527 +1285 +851 +318 +-171 +-478 +-543 +-408 +-249 +-194 +-226 +-238 +-92 +217 +575 +870 +1024 +989 +796 +487 +113 +-311 +-743 +-1151 +-1521 +-1843 +-2090 +-2154 +-1951 +-1445 +-727 +68 +802 +1373 +1724 +1878 +1962 +1982 +1859 +1550 +1022 +354 +-324 +-851 +-1125 +-1166 +-1066 +-876 +-596 +-229 +167 +517 +762 +852 +817 +727 +583 +311 +-93 +-528 +-913 +-1225 +-1444 +-1512 +-1412 +-1210 +-983 +-746 +-468 +-158 +193 +563 +912 +1237 +1473 +1528 +1365 +999 +496 +-8 +-374 +-522 +-446 +-289 +-202 +-215 +-238 +-136 +130 +477 +776 +968 +991 +841 +574 +209 +-217 +-667 +-1093 +-1479 +-1801 +-2042 +-2133 +-1994 +-1569 +-905 +-125 +636 +1259 +1680 +1874 +1965 +1997 +1905 +1638 +1164 +533 +-142 +-707 +-1052 +-1161 +-1110 +-953 +-687 +-327 +75 +438 +698 +814 +792 +718 +610 +386 +24 +-405 +-804 +-1141 +-1392 +-1507 +-1439 +-1250 +-1028 +-803 +-549 +-249 +96 +483 +859 +1206 +1482 +1576 +1440 +1099 +609 +93 +-307 +-502 +-472 +-335 +-234 +-225 +-256 +-186 +53 +390 +710 +935 +998 +887 +654 +328 +-74 +-524 +-972 +-1389 +-1736 +-2009 +-2148 +-2066 +-1697 +-1073 +-314 +454 +1105 +1572 +1826 +1953 +2017 +1957 +1732 +1306 +706 +34 +-566 +-971 +-1136 +-1120 +-998 +-779 +-465 +-73 +317 +638 +813 +822 +741 +626 +436 +117 +-295 +-694 +-1049 +-1332 +-1496 +-1479 +-1309 +-1084 +-850 +-595 +-301 +26 +394 +756 +1097 +1392 +1542 +1473 +1189 +731 +205 +-236 +-483 +-498 +-364 +-241 +-219 +-248 +-214 +-12 +321 +667 +929 +1029 +938 +711 +383 +-15 +-451 +-877 +-1277 +-1626 +-1924 +-2117 +-2119 +-1842 +-1273 +-526 +263 +955 +1473 +1776 +1912 +1991 +1982 +1816 +1451 +881 +199 +-462 +-935 +-1154 +-1154 +-1032 +-822 +-521 +-144 +248 +580 +790 +844 +786 +683 +511 +200 +-221 +-642 +-998 +-1274 +-1450 +-1473 +-1345 +-1145 +-920 +-677 +-385 +-63 +296 +668 +1019 +1335 +1531 +1522 +1297 +895 +376 +-106 +-431 +-534 +-440 +-310 +-252 +-261 +-242 +-86 +208 +544 +826 +990 +981 +811 +522 +143 +-304 +-756 +-1180 +-1553 +-1861 +-2086 +-2133 +-1926 +-1431 +-731 +49 +780 +1367 +1742 +1917 +2009 +2012 +1869 +1543 +1019 +371 +-282 +-792 +-1079 +-1153 +-1090 +-916 +-632 +-251 +155 +500 +727 +807 +773 +698 +571 +316 +-56 +-465 +-833 +-1156 +-1398 +-1494 +-1413 +-1214 +-978 +-730 +-456 +-150 +201 +583 +951 +1287 +1522 +1558 +1365 +979 +477 +-12 +-366 +-513 +-459 +-336 +-263 +-269 +-269 +-145 +135 +483 +782 +975 +983 +835 +578 +234 +-183 +-643 +-1086 +-1487 +-1814 +-2056 +-2138 +-1986 +-1553 +-885 +-111 +635 +1242 +1653 +1860 +1967 +2012 +1921 +1648 +1166 +531 +-135 +-697 +-1045 +-1161 +-1119 +-970 +-718 +-368 +39 +420 +711 +847 +828 +734 +603 +374 +29 +-375 +-748 +-1079 +-1343 +-1484 +-1445 +-1270 +-1051 +-812 +-543 +-233 +108 +479 +840 +1177 +1452 +1558 +1435 +1106 +615 +90 +-332 +-539 +-521 +-384 +-275 +-256 +-264 +-178 +69 +411 +729 +955 +1017 +907 +663 +315 +-93 +-538 +-961 +-1360 +-1702 +-1985 +-2145 +-2073 +-1714 +-1090 +-324 +454 +1117 +1588 +1840 +1959 +2015 +1952 +1727 +1300 +691 +10 +-608 +-1023 +-1186 +-1160 +-1015 +-775 +-443 +-52 +322 +626 +803 +835 +778 +679 +482 +143 +-277 +-678 +-1025 +-1301 +-1469 +-1466 +-1323 +-1111 +-874 +-604 +-294 +48 +420 +778 +1113 +1395 +1536 +1470 +1190 +746 +231 +-217 +-491 +-541 +-437 +-327 +-290 +-293 +-236 +-24 +304 +638 +897 +1017 +962 +769 +461 +61 +-402 +-866 +-1290 +-1649 +-1925 +-2096 +-2071 +-1787 +-1233 +-504 +274 +964 +1489 +1799 +1938 +2009 +1976 +1786 +1404 +832 +167 +-462 +-918 +-1152 +-1188 +-1091 +-882 +-559 +-157 +249 +579 +778 +838 +790 +703 +545 +246 +-155 +-565 +-928 +-1237 +-1453 +-1499 +-1375 +-1156 +-909 +-650 +-360 +-42 +321 +694 +1046 +1353 +1525 +1491 +1246 +831 +337 +-116 +-421 +-521 +-450 +-340 +-291 +-294 +-255 +-69 +247 +582 +842 +978 +946 +775 +504 +146 +-279 +-727 +-1156 +-1544 +-1854 +-2064 +-2092 +-1865 +-1358 +-658 +112 +818 +1375 +1726 +1897 +1994 +1999 +1853 +1513 +968 +307 +-344 +-852 +-1137 +-1207 +-1130 +-947 +-654 +-271 +141 +508 +771 +877 +845 +747 +585 +313 +-75 +-483 +-854 +-1171 +-1398 +-1488 +-1397 +-1207 +-981 +-733 +-450 +-129 +230 +599 +943 +1252 +1471 +1512 +1340 +974 +476 +-29 +-404 +-552 +-492 +-354 +-274 +-275 +-270 +-136 +155 +506 +811 +997 +1004 +854 +582 +220 +-196 +-636 +-1054 +-1439 +-1766 +-2018 +-2116 +-1964 +-1526 +-860 +-91 +648 +1251 +1666 +1880 +1982 +2002 +1886 +1595 +1106 +471 +-197 +-753 +-1104 +-1217 +-1157 +-984 +-713 +-356 +45 +412 +692 +831 +836 +775 +658 +427 +57 +-373 +-765 +-1093 +-1343 +-1473 +-1423 +-1255 +-1038 +-801 +-528 +-209 +140 +518 +871 +1192 +1434 +1511 +1379 +1049 +580 +78 +-324 +-534 +-534 +-414 +-318 +-293 +-278 +-166 +94 +426 +733 +951 +1020 +925 +701 +371 +-39 +-499 +-948 +-1369 +-1717 +-1988 +-2124 +-2027 +-1653 +-1032 +-286 +465 +1113 +1583 +1835 +1958 +2000 +1921 +1671 +1226 +622 +-41 +-628 +-1027 +-1196 +-1185 +-1051 +-806 +-454 +-32 +371 +689 +858 +872 +791 +673 +476 +150 +-252 +-645 +-997 +-1289 +-1472 +-1479 +-1330 +-1110 +-866 +-597 +-293 +36 +401 +764 +1107 +1398 +1537 +1459 +1163 +709 +188 +-249 +-500 +-534 +-419 +-312 +-280 +-290 +-225 +-2 +337 +671 +915 +1015 +941 +737 +437 +58 +-380 +-822 +-1253 +-1637 +-1944 +-2126 +-2100 +-1797 +-1219 +-477 +295 +966 +1470 +1763 +1902 +1974 +1944 +1755 +1367 +790 +126 +-497 +-949 +-1165 +-1176 +-1066 +-856 +-551 +-159 +250 +603 +835 +900 +848 +737 +554 +244 +-161 +-561 +-918 +-1219 +-1434 +-1496 +-1385 +-1181 +-944 +-681 +-381 +-54 +306 +668 +1005 +1303 +1480 +1452 +1219 +818 +320 +-141 +-457 +-552 +-463 +-333 +-265 +-260 +-213 +-30 +282 +608 +871 +1014 +983 +808 +507 +122 +-323 +-776 +-1200 +-1576 +-1883 +-2097 +-2130 +-1903 +-1387 +-680 +97 +813 +1379 +1733 +1896 +1976 +1965 +1812 +1475 +943 +291 +-359 +-875 +-1160 +-1214 +-1123 +-918 +-616 +-227 +181 +537 +786 +878 +848 +765 +619 +346 +-58 +-481 +-854 +-1174 +-1406 +-1498 +-1409 +-1217 +-988 +-739 +-451 +-127 +227 +603 +953 +1264 +1470 +1481 +1287 +921 +444 +-34 +-386 +-539 +-493 +-369 +-293 +-283 +-251 +-94 +198 +530 +813 +994 +1017 +894 +641 +282 +-155 +-628 +-1077 +-1489 +-1822 +-2065 +-2133 +-1957 +-1502 +-838 +-89 +639 +1241 +1665 +1875 +1969 +1989 +1863 +1573 +1086 +452 +-202 +-749 +-1079 +-1186 +-1136 +-986 +-731 +-360 +68 +465 +754 +881 +857 +767 +646 +417 +58 +-354 +-730 +-1060 +-1336 +-1487 +-1448 +-1268 +-1037 +-792 +-516 +-201 +146 +518 +876 +1203 +1454 +1524 +1366 +1019 +546 +52 +-338 +-535 +-527 +-405 +-309 +-285 +-270 +-155 +119 +464 +764 +971 +1024 +916 +682 +355 +-41 +-493 +-940 +-1364 +-1720 +-2002 +-2148 +-2055 +-1671 +-1031 +-277 +476 +1116 +1590 +1840 +1952 +2001 +1917 +1673 +1226 +614 +-57 +-657 +-1054 +-1212 +-1176 +-1035 +-799 +-463 +-58 +345 +673 +861 +886 +814 +708 +504 +155 +-263 +-644 +-968 +-1248 +-1437 +-1472 +-1338 +-1121 +-881 +-605 +-293 +47 +408 +764 +1089 +1363 +1491 +1400 +1127 +706 +210 +-232 +-513 +-565 +-452 +-332 +-281 +-276 +-196 +48 +386 +695 +928 +1032 +957 +757 +442 +32 +-432 +-888 +-1306 +-1660 +-1944 +-2120 +-2082 +-1767 +-1181 +-456 +297 +968 +1492 +1788 +1914 +1975 +1920 +1711 +1319 +753 +101 +-519 +-976 +-1203 +-1209 +-1092 +-865 +-533 +-125 +281 +619 +838 +890 +837 +752 +590 +275 +-153 +-565 +-910 +-1211 +-1436 +-1499 +-1365 +-1155 +-920 +-661 +-356 +-18 +350 +728 +1057 +1341 +1489 +1421 +1169 +766 +278 +-173 +-486 +-584 +-500 +-371 +-310 +-302 +-240 +-19 +311 +631 +884 +1030 +1017 +866 +590 +209 +-256 +-737 +-1190 +-1585 +-1901 +-2122 +-2132 +-1873 +-1335 +-638 +105 +794 +1365 +1748 +1923 +2007 +1988 +1806 +1450 +905 +255 +-392 +-898 +-1174 +-1224 +-1149 +-971 +-671 +-266 +175 +563 +826 +914 +867 +781 +648 +375 +-33 +-444 +-789 +-1104 +-1369 +-1498 +-1414 +-1209 +-971 +-720 +-430 +-110 +243 +607 +938 +1241 +1447 +1452 +1245 +882 +408 +-63 +-415 +-576 +-528 +-399 +-328 +-316 +-278 +-99 +221 +555 +825 +999 +1017 +883 +618 +264 +-163 +-618 +-1049 +-1457 +-1785 +-2032 +-2115 +-1946 +-1479 +-802 +-56 +658 +1256 +1678 +1874 +1967 +1985 +1837 +1515 +1002 +374 +-277 +-829 +-1157 +-1240 +-1157 +-981 +-712 +-342 +78 +471 +773 +911 +891 +817 +709 +465 +69 +-364 +-723 +-1031 +-1291 +-1452 +-1434 +-1261 +-1038 +-791 +-496 +-174 +174 +533 +866 +1169 +1397 +1446 +1280 +967 +535 +48 +-360 +-592 +-584 +-452 +-340 +-308 +-286 +-148 +145 +489 +763 +967 +1033 +945 +729 +397 +-34 +-514 +-964 +-1377 +-1719 +-1994 +-2118 +-2002 +-1601 +-960 +-224 +502 +1139 +1623 +1867 +1958 +1972 +1855 +1579 +1124 +522 +-136 +-728 +-1123 +-1268 +-1221 +-1069 +-810 +-445 +-10 +394 +714 +885 +897 +833 +754 +564 +199 +-242 +-619 +-934 +-1227 +-1438 +-1458 +-1299 +-1072 +-829 +-560 +-249 +95 +478 +833 +1134 +1374 +1452 +1312 +1015 +601 +129 +-287 +-553 +-600 +-497 +-383 +-343 +-325 +-208 +64 +419 +711 +939 +1059 +1006 +825 +513 +113 +-361 +-833 +-1279 +-1657 +-1943 +-2122 +-2059 +-1712 +-1110 +-393 +333 +985 +1511 +1823 +1949 +2006 +1919 +1666 +1239 +655 +4 +-610 +-1065 +-1271 +-1260 +-1135 +-912 +-582 +-155 +274 +645 +870 +915 +848 +775 +631 +315 +-121 +-520 +-848 +-1144 +-1391 +-1473 +-1348 +-1138 +-893 +-627 +-320 +10 +368 +726 +1049 +1330 +1467 +1372 +1104 +710 +224 +-238 +-563 +-668 +-564 +-420 +-358 +-339 +-253 +-2 +354 +667 +906 +1044 +1025 +865 +583 +202 +-251 +-708 +-1137 +-1523 +-1844 +-2077 +-2096 +-1834 +-1285 +-581 +152 +826 +1395 +1767 +1916 +1975 +1936 +1735 +1362 +811 +160 +-492 +-1004 +-1262 +-1279 +-1175 +-984 +-684 +-279 +165 +560 +844 +948 +919 +857 +742 +448 +1 +-427 +-765 +-1065 +-1336 +-1474 +-1401 +-1196 +-956 +-697 +-392 +-58 +301 +662 +974 +1245 +1409 +1380 +1163 +809 +355 +-113 +-479 +-650 +-595 +-457 +-368 +-335 +-278 +-78 +253 +589 +857 +1041 +1075 +950 +693 +320 +-133 +-611 +-1052 +-1453 +-1775 +-2014 +-2080 +-1891 +-1414 +-754 +-27 +671 +1276 +1716 +1910 +1991 +1973 +1805 +1466 +946 +318 +-339 +-891 +-1234 +-1324 +-1241 +-1057 +-756 +-355 +92 +497 +806 +938 +916 +853 +764 +530 +123 +-311 +-666 +-974 +-1256 +-1434 +-1404 +-1220 +-995 +-753 +-481 +-175 +162 +529 +866 +1167 +1386 +1411 +1235 +909 +476 +4 +-384 +-599 +-596 +-477 +-378 +-349 +-320 +-157 +155 +502 +767 +972 +1040 +953 +746 +415 +1 +-462 +-916 +-1340 +-1694 +-1978 +-2109 +-1986 +-1571 +-933 +-202 +511 +1137 +1616 +1862 +1965 +1991 +1853 +1545 +1060 +447 +-198 +-776 +-1159 +-1297 +-1245 +-1087 +-825 +-459 +-19 +404 +743 +924 +923 +845 +752 +555 +190 +-239 +-600 +-907 +-1193 +-1407 +-1431 +-1284 +-1074 +-847 +-571 +-257 +76 +438 +780 +1103 +1373 +1473 +1339 +1023 +594 +95 +-350 +-634 +-683 +-554 +-409 +-352 +-327 +-198 +85 +451 +750 +978 +1078 +1010 +820 +500 +94 +-383 +-839 +-1264 +-1635 +-1942 +-2133 +-2085 +-1743 +-1133 +-402 +336 +997 +1530 +1837 +1947 +1988 +1903 +1647 +1231 +650 +-11 +-638 +-1087 +-1282 +-1259 +-1119 +-896 +-563 +-140 +293 +656 +882 +936 +886 +817 +666 +334 +-112 +-510 +-829 +-1136 +-1392 +-1472 +-1351 +-1141 +-906 +-645 +-326 +18 +389 +740 +1050 +1320 +1448 +1360 +1088 +697 +213 +-242 +-563 +-670 +-575 +-435 +-344 +-308 +-216 +33 +384 +699 +940 +1101 +1078 +910 +616 +220 +-253 +-738 +-1186 +-1574 +-1881 +-2094 +-2108 +-1843 +-1300 +-600 +138 +831 +1415 +1798 +1957 +2019 +1971 +1752 +1372 +819 +175 +-476 +-995 +-1276 +-1306 +-1194 +-984 +-665 +-241 +213 +608 +870 +950 +905 +844 +738 +443 +1 +-426 +-768 +-1081 +-1354 +-1494 +-1415 +-1202 +-962 +-708 +-413 +-90 +272 +652 +991 +1281 +1454 +1410 +1172 +801 +346 +-118 +-474 +-626 +-565 +-427 +-342 +-323 +-262 +-63 +274 +602 +851 +1024 +1035 +914 +669 +316 +-128 +-598 +-1056 +-1476 +-1817 +-2069 +-2130 +-1935 +-1445 +-770 +-28 +680 +1290 +1719 +1916 +2008 +2002 +1833 +1483 +952 +317 +-339 +-892 +-1224 +-1300 +-1214 +-1039 +-757 +-366 +75 +482 +796 +935 +906 +829 +724 +482 +74 +-357 +-704 +-1006 +-1280 +-1459 +-1427 +-1244 +-1012 +-766 +-479 +-162 +174 +535 +866 +1166 +1395 +1432 +1265 +955 +517 +19 +-389 +-616 +-607 +-472 +-368 +-345 +-325 +-162 +155 +506 +774 +979 +1040 +946 +724 +384 +-43 +-515 +-953 +-1361 +-1697 +-1984 +-2132 +-2015 +-1595 +-937 +-208 +508 +1141 +1630 +1884 +1980 +2000 +1872 +1587 +1115 +498 +-178 +-781 +-1175 +-1296 +-1226 +-1066 +-804 +-444 +-12 +401 +732 +901 +903 +833 +754 +558 +174 +-275 +-631 +-921 +-1189 +-1405 +-1431 +-1275 +-1060 +-828 +-563 +-254 +92 +473 +829 +1132 +1378 +1456 +1319 +1027 +615 +136 +-306 +-587 +-639 +-516 +-397 +-346 +-316 +-184 +104 +451 +728 +944 +1056 +1007 +825 +512 +98 +-387 +-854 +-1300 +-1670 +-1970 +-2125 +-2049 +-1696 +-1094 +-383 +347 +1010 +1556 +1858 +1967 +2007 +1914 +1662 +1230 +645 +-8 +-623 +-1059 +-1260 +-1244 +-1121 +-893 +-552 +-124 +305 +658 +868 +901 +838 +778 +637 +308 +-129 +-520 +-846 +-1144 +-1392 +-1470 +-1335 +-1117 +-879 +-618 +-309 +23 +389 +748 +1061 +1335 +1471 +1378 +1099 +706 +226 +-224 +-542 +-641 +-545 +-417 +-353 +-340 +-249 +3 +360 +666 +895 +1034 +1006 +852 +580 +200 +-261 +-732 +-1180 +-1574 +-1885 +-2103 +-2105 +-1829 +-1260 +-548 +189 +859 +1417 +1773 +1927 +1999 +1953 +1736 +1344 +788 +140 +-495 +-992 +-1247 +-1255 +-1157 +-961 +-661 +-262 +176 +565 +838 +922 +872 +801 +680 +388 +-43 +-450 +-775 +-1068 +-1333 +-1470 +-1388 +-1182 +-946 +-685 +-381 +-62 +295 +656 +981 +1266 +1438 +1406 +1181 +820 +353 +-130 +-503 +-668 +-605 +-458 +-370 +-346 +-288 +-77 +269 +607 +862 +1031 +1039 +914 +653 +285 +-167 +-655 +-1093 +-1487 +-1805 +-2050 +-2116 +-1912 +-1408 +-719 +16 +712 +1306 +1719 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e4_329_628.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e4_329_628.samples new file mode 100644 index 00000000..67e420e6 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e4_329_628.samples @@ -0,0 +1,4096 @@ +-214 +-134 +-42 +139 +381 +603 +731 +730 +602 +354 +-14 +-482 +-971 +-1400 +-1750 +-2007 +-2173 +-2293 +-2361 +-2196 +-1572 +-496 +756 +1744 +2182 +2103 +1739 +1213 +537 +-161 +-623 +-597 +-166 +338 +604 +596 +528 +609 +838 +990 +887 +518 +68 +-273 +-416 +-329 +-62 +298 +560 +649 +638 +669 +752 +772 +638 +338 +-38 +-375 +-678 +-971 +-1254 +-1500 +-1635 +-1643 +-1599 +-1538 +-1318 +-814 +-87 +629 +1119 +1310 +1281 +1186 +1138 +1159 +1199 +1240 +1371 +1564 +1661 +1549 +1255 +972 +792 +642 +408 +91 +-270 +-579 +-743 +-708 +-500 +-176 +186 +489 +609 +495 +249 +-18 +-219 +-296 +-222 +-51 +126 +246 +332 +446 +629 +843 +995 +986 +767 +412 +44 +-266 +-536 +-849 +-1172 +-1365 +-1321 +-1123 +-938 +-873 +-877 +-865 +-823 +-813 +-880 +-965 +-933 +-733 +-466 +-271 +-199 +-170 +-90 +83 +305 +503 +611 +595 +454 +174 +-236 +-727 +-1197 +-1573 +-1850 +-2018 +-2098 +-2133 +-2042 +-1640 +-771 +418 +1525 +2171 +2265 +2012 +1611 +1114 +518 +-27 +-267 +-76 +358 +708 +776 +648 +588 +729 +972 +1073 +876 +450 +-14 +-358 +-495 +-410 +-149 +137 +302 +338 +373 +472 +548 +475 +196 +-220 +-625 +-948 +-1212 +-1443 +-1651 +-1779 +-1757 +-1649 +-1568 +-1458 +-1166 +-606 +121 +789 +1213 +1387 +1401 +1386 +1415 +1465 +1486 +1524 +1635 +1761 +1761 +1572 +1311 +1124 +988 +795 +477 +64 +-359 +-669 +-778 +-674 +-422 +-97 +231 +448 +451 +244 +-62 +-361 +-562 +-604 +-477 +-260 +-54 +100 +233 +394 +581 +734 +784 +660 +376 +47 +-228 +-428 +-614 +-853 +-1067 +-1140 +-1048 +-897 +-818 +-814 +-812 +-754 +-688 +-677 +-723 +-749 +-651 +-455 +-279 +-210 +-216 +-194 +-69 +148 +377 +541 +590 +504 +286 +-68 +-522 +-991 +-1386 +-1665 +-1842 +-1912 +-1906 +-1839 +-1585 +-987 +-49 +998 +1820 +2203 +2199 +1997 +1697 +1250 +710 +290 +197 +441 +766 +928 +873 +774 +826 +1036 +1209 +1137 +760 +221 +-279 +-600 +-689 +-564 +-314 +-98 +-2 +9 +36 +66 +25 +-176 +-520 +-900 +-1217 +-1444 +-1613 +-1750 +-1840 +-1846 +-1756 +-1637 +-1550 +-1371 +-947 +-279 +471 +1097 +1459 +1578 +1566 +1530 +1546 +1576 +1614 +1700 +1843 +1947 +1905 +1736 +1540 +1365 +1134 +786 +346 +-97 +-452 +-643 +-647 +-497 +-249 +29 +247 +297 +125 +-193 +-526 +-779 +-880 +-805 +-603 +-366 +-190 +-67 +43 +192 +368 +498 +514 +377 +140 +-88 +-247 +-365 +-527 +-754 +-934 +-965 +-860 +-727 +-650 +-610 +-550 +-470 +-423 +-460 +-550 +-593 +-533 +-411 +-308 +-270 +-245 +-156 +11 +216 +390 +466 +416 +245 +-29 +-386 +-776 +-1124 +-1383 +-1558 +-1648 +-1653 +-1600 +-1463 +-1120 +-475 +420 +1336 +1990 +2263 +2242 +2048 +1701 +1222 +716 +416 +455 +737 +1018 +1119 +1070 +1042 +1129 +1250 +1220 +918 +406 +-135 +-540 +-738 +-722 +-549 +-348 +-249 +-270 +-346 +-392 +-446 +-576 +-818 +-1126 +-1398 +-1593 +-1730 +-1836 +-1934 +-1999 +-1965 +-1851 +-1736 +-1576 +-1244 +-645 +126 +862 +1370 +1597 +1641 +1609 +1620 +1678 +1739 +1821 +1958 +2117 +2185 +2081 +1850 +1595 +1337 +1024 +653 +254 +-112 +-377 +-498 +-467 +-326 +-142 +19 +86 +-14 +-261 +-552 +-806 +-954 +-965 +-843 +-651 +-477 +-355 +-261 +-133 +46 +227 +350 +354 +231 +62 +-87 +-203 +-339 +-538 +-742 +-844 +-773 +-607 +-468 +-391 +-351 +-301 +-274 +-308 +-408 +-519 +-534 +-442 +-309 +-217 +-180 +-148 +-67 +65 +193 +263 +249 +144 +-35 +-281 +-579 +-888 +-1149 +-1340 +-1464 +-1510 +-1490 +-1430 +-1246 +-786 +-10 +944 +1788 +2302 +2445 +2323 +2046 +1631 +1132 +726 +594 +775 +1080 +1282 +1288 +1203 +1158 +1193 +1187 +992 +585 +79 +-367 +-659 +-772 +-737 +-618 +-531 +-548 +-647 +-726 +-772 +-828 +-958 +-1172 +-1416 +-1620 +-1774 +-1899 +-2011 +-2097 +-2101 +-2005 +-1850 +-1666 +-1387 +-901 +-222 +496 +1084 +1437 +1586 +1625 +1667 +1755 +1851 +1946 +2062 +2215 +2320 +2269 +2058 +1782 +1525 +1271 +970 +612 +236 +-104 +-349 +-454 +-436 +-339 +-211 +-109 +-104 +-245 +-479 +-732 +-940 +-1056 +-1042 +-926 +-763 +-625 +-506 +-367 +-175 +51 +246 +353 +319 +183 +16 +-133 +-264 +-416 +-589 +-701 +-669 +-511 +-339 +-242 +-215 +-205 +-189 +-209 +-288 +-399 +-459 +-404 +-277 +-163 +-131 +-146 +-142 +-78 +30 +135 +193 +177 +78 +-104 +-365 +-688 +-1008 +-1265 +-1450 +-1544 +-1552 +-1491 +-1349 +-1011 +-380 +496 +1414 +2083 +2366 +2339 +2141 +1837 +1438 +1033 +792 +834 +1089 +1347 +1435 +1337 +1207 +1159 +1175 +1112 +861 +435 +-44 +-447 +-710 +-818 +-803 +-734 +-716 +-778 +-857 +-892 +-902 +-965 +-1135 +-1391 +-1663 +-1877 +-2034 +-2142 +-2211 +-2226 +-2137 +-1947 +-1716 +-1460 +-1100 +-577 +64 +687 +1167 +1451 +1600 +1690 +1786 +1899 +1988 +2070 +2183 +2292 +2315 +2184 +1939 +1702 +1489 +1250 +936 +554 +153 +-195 +-413 +-478 +-431 +-313 +-180 +-100 +-144 +-327 +-588 +-850 +-1057 +-1148 +-1109 +-968 +-791 +-633 +-475 +-292 +-71 +147 +304 +340 +233 +54 +-113 +-225 +-308 +-415 +-527 +-567 +-484 +-331 +-219 +-186 +-198 +-201 +-194 +-212 +-273 +-335 +-325 +-237 +-137 +-100 +-129 +-161 +-145 +-55 +62 +158 +189 +138 +1 +-227 +-537 +-875 +-1169 +-1386 +-1517 +-1562 +-1526 +-1422 +-1193 +-724 +23 +914 +1689 +2143 +2262 +2171 +1977 +1681 +1288 +932 +793 +924 +1180 +1345 +1320 +1191 +1112 +1147 +1195 +1084 +748 +260 +-232 +-618 +-830 +-878 +-809 +-733 +-726 +-773 +-812 +-821 +-867 +-1015 +-1272 +-1565 +-1811 +-1976 +-2082 +-2149 +-2181 +-2137 +-1999 +-1811 +-1623 +-1392 +-1003 +-420 +259 +874 +1310 +1557 +1671 +1747 +1833 +1912 +1969 +2033 +2138 +2232 +2217 +2077 +1880 +1690 +1470 +1162 +761 +321 +-79 +-371 +-494 +-467 +-344 +-172 +-29 +8 +-122 +-388 +-695 +-965 +-1127 +-1141 +-1016 +-820 +-631 +-468 +-311 +-128 +70 +239 +324 +282 +144 +-9 +-120 +-190 +-273 +-408 +-530 +-555 +-470 +-347 +-273 +-249 +-229 +-183 +-150 +-171 +-243 +-307 +-295 +-226 +-168 +-162 +-179 +-160 +-67 +75 +213 +293 +272 +148 +-76 +-382 +-736 +-1068 +-1319 +-1495 +-1582 +-1578 +-1514 +-1385 +-1089 +-533 +274 +1155 +1852 +2211 +2290 +2198 +1963 +1576 +1125 +788 +718 +899 +1131 +1240 +1194 +1126 +1144 +1227 +1220 +984 +520 +-28 +-503 +-801 +-907 +-837 +-686 +-590 +-595 +-660 +-715 +-768 +-877 +-1090 +-1369 +-1641 +-1817 +-1923 +-1996 +-2056 +-2092 +-2052 +-1924 +-1775 +-1610 +-1323 +-833 +-154 +566 +1137 +1475 +1607 +1630 +1655 +1715 +1786 +1857 +1976 +2125 +2223 +2186 +2010 +1785 +1546 +1244 +863 +439 +33 +-292 +-469 +-480 +-372 +-195 +-28 +68 +20 +-192 +-484 +-766 +-972 +-1042 +-960 +-777 +-577 +-420 +-298 +-162 +17 +215 +372 +417 +332 +176 +28 +-78 +-186 +-354 +-562 +-700 +-677 +-535 +-382 +-294 +-246 +-198 +-148 +-154 +-242 +-364 +-425 +-377 +-269 +-180 +-141 +-106 +-28 +113 +267 +371 +379 +281 +90 +-179 +-508 +-867 +-1180 +-1425 +-1589 +-1670 +-1679 +-1637 +-1493 +-1115 +-409 +531 +1447 +2072 +2324 +2293 +2067 +1682 +1161 +664 +411 +504 +804 +1073 +1157 +1112 +1081 +1142 +1199 +1086 +735 +228 +-265 +-611 +-754 +-720 +-573 +-429 +-375 +-426 +-497 +-545 +-599 +-723 +-937 +-1199 +-1431 +-1607 +-1752 +-1879 +-1999 +-2049 +-1999 +-1885 +-1749 +-1536 +-1126 +-497 +232 +867 +1269 +1439 +1464 +1468 +1516 +1598 +1676 +1781 +1942 +2103 +2143 +1983 +1716 +1448 +1189 +891 +538 +167 +-166 +-398 +-485 +-433 +-287 +-103 +62 +136 +55 +-159 +-421 +-648 +-779 +-787 +-669 +-487 +-330 +-217 +-104 +55 +260 +463 +588 +566 +413 +209 +11 +-162 +-363 +-610 +-822 +-871 +-747 +-555 +-415 +-355 +-329 +-295 +-286 +-345 +-460 +-549 +-500 +-339 +-160 +-55 +-21 +13 +103 +241 +375 +447 +429 +322 +123 +-165 +-538 +-938 +-1298 +-1579 +-1770 +-1868 +-1896 +-1859 +-1623 +-1051 +-132 +931 +1793 +2223 +2237 +2005 +1625 +1119 +569 +173 +122 +397 +769 +997 +1007 +929 +924 +1006 +1051 +897 +521 +51 +-355 +-595 +-644 +-526 +-326 +-173 +-141 +-178 +-194 +-179 +-200 +-338 +-595 +-910 +-1199 +-1435 +-1636 +-1810 +-1940 +-1972 +-1885 +-1747 +-1571 +-1281 +-796 +-152 +492 +973 +1226 +1298 +1301 +1326 +1397 +1477 +1548 +1663 +1822 +1905 +1823 +1582 +1317 +1103 +886 +608 +263 +-103 +-421 +-601 +-610 +-463 +-227 +47 +266 +346 +246 +29 +-226 +-451 +-576 +-557 +-407 +-209 +-42 +92 +246 +452 +673 +830 +841 +675 +391 +100 +-145 +-356 +-583 +-825 +-972 +-940 +-777 +-622 +-558 +-560 +-555 +-521 +-511 +-560 +-622 +-605 +-458 +-252 +-101 +-56 +-48 +5 +147 +351 +538 +639 +625 +489 +222 +-173 +-653 +-1124 +-1527 +-1833 +-2017 +-2089 +-2071 +-1927 +-1506 +-715 +336 +1332 +1947 +2090 +1909 +1571 +1134 +599 +95 +-159 +-42 +311 +632 +740 +674 +635 +743 +936 +1005 +817 +416 +-32 +-377 +-533 +-488 +-278 +-34 +130 +190 +231 +300 +343 +263 +11 +-356 +-738 +-1048 +-1291 +-1488 +-1655 +-1758 +-1754 +-1665 +-1560 +-1419 +-1129 +-632 +-11 +573 +975 +1168 +1221 +1209 +1223 +1256 +1286 +1340 +1461 +1589 +1606 +1463 +1240 +1059 +898 +671 +332 +-78 +-465 +-718 +-770 +-628 +-339 +11 +345 +564 +582 +401 +120 +-172 +-382 +-439 +-323 +-103 +125 +303 +450 +615 +789 +939 +981 +850 +560 +226 +-64 +-284 +-490 +-738 +-981 +-1098 +-1051 +-924 +-841 +-823 +-818 +-769 +-700 +-674 +-694 +-709 +-621 +-444 +-260 +-150 +-104 +-26 +139 +383 +643 +828 +882 +778 +519 +114 +-397 +-929 +-1386 +-1733 +-1983 +-2149 +-2203 +-2161 +-1932 +-1363 +-447 +616 +1476 +1898 +1900 +1658 +1298 +795 +182 +-324 +-486 +-259 +125 +395 +459 +455 +576 +843 +1072 +1050 +716 +220 +-230 +-490 +-503 +-297 +41 +357 +534 +609 +667 +711 +673 +473 +130 +-264 +-596 +-836 +-1027 +-1216 +-1395 +-1518 +-1535 +-1512 +-1501 +-1392 +-1042 +-435 +271 +861 +1190 +1266 +1189 +1092 +1043 +1037 +1045 +1116 +1264 +1395 +1409 +1272 +1083 +904 +668 +329 +-89 +-489 +-779 +-888 +-777 +-490 +-104 +296 +617 +742 +632 +360 +54 +-185 +-288 +-212 +11 +272 +472 +595 +697 +825 +966 +1054 +1005 +785 +460 +137 +-124 +-347 +-622 +-951 +-1220 +-1304 +-1212 +-1075 +-997 +-961 +-909 +-812 +-745 +-756 +-824 +-844 +-734 +-529 +-322 +-186 +-77 +80 +324 +607 +844 +951 +891 +677 +323 +-128 +-633 +-1105 +-1498 +-1814 +-2039 +-2173 +-2230 +-2195 +-1918 +-1240 +-209 +884 +1687 +2008 +1933 +1607 +1098 +426 +-266 +-707 +-697 +-328 +106 +360 +432 +513 +723 +999 +1101 +890 +424 +-74 +-413 +-498 +-335 +17 +418 +700 +816 +846 +874 +880 +777 +521 +166 +-186 +-463 +-700 +-930 +-1185 +-1416 +-1538 +-1572 +-1575 +-1534 +-1287 +-744 +0 +702 +1131 +1248 +1144 +990 +905 +901 +931 +1001 +1158 +1369 +1486 +1405 +1167 +905 +660 +372 +28 +-334 +-640 +-824 +-824 +-629 +-291 +104 +462 +681 +692 +514 +247 +10 +-137 +-147 +-10 +211 +420 +538 +616 +717 +876 +1037 +1115 +1036 +778 +440 +100 +-213 +-542 +-921 +-1277 +-1470 +-1423 +-1232 +-1064 +-985 +-947 +-890 +-832 +-844 +-928 +-1016 +-968 +-751 +-460 +-220 +-73 +50 +225 +467 +701 +854 +875 +759 +525 +178 +-261 +-753 +-1223 +-1621 +-1935 +-2154 +-2288 +-2356 +-2244 +-1747 +-800 +407 +1491 +2119 +2212 +1933 +1446 +796 +50 +-554 +-749 +-484 +6 +403 +558 +570 +638 +825 +987 +938 +621 +167 +-211 +-405 +-366 +-141 +203 +515 +671 +698 +707 +753 +758 +641 +379 +28 +-317 +-621 +-905 +-1183 +-1438 +-1611 +-1664 +-1645 +-1585 +-1420 +-1002 +-345 +367 +908 +1156 +1166 +1070 +997 +1001 +1050 +1119 +1239 +1426 +1579 +1557 +1336 +1035 +781 +562 +295 +-32 +-371 +-659 +-814 +-780 +-562 +-230 +144 +468 +638 +593 +383 +128 +-99 +-230 +-212 +-64 +143 +317 +442 +570 +734 +929 +1084 +1112 +944 +623 +237 +-129 +-458 +-792 +-1130 +-1375 +-1420 +-1295 +-1100 +-990 +-958 +-936 +-900 +-881 +-925 +-987 +-966 +-792 +-518 +-263 +-114 +-34 +60 +231 +450 +660 +793 +810 +698 +451 +72 +-416 +-923 +-1367 +-1736 +-1999 +-2155 +-2237 +-2185 +-1872 +-1142 +-41 +1131 +1982 +2291 +2141 +1745 +1227 +619 +2 +-393 +-379 +-21 +407 +640 +644 +599 +686 +898 +1046 +936 +554 +81 +-305 +-495 +-457 +-226 +86 +322 +429 +474 +547 +631 +609 +395 +16 +-416 +-784 +-1079 +-1325 +-1552 +-1727 +-1790 +-1726 +-1620 +-1481 +-1224 +-748 +-99 +549 +1023 +1239 +1281 +1245 +1234 +1267 +1310 +1359 +1462 +1601 +1657 +1546 +1306 +1082 +907 +698 +384 +-21 +-429 +-730 +-843 +-744 +-482 +-133 +231 +512 +605 +471 +189 +-131 +-393 +-516 +-458 +-261 +-25 +174 +330 +495 +696 +877 +967 +885 +615 +253 +-92 +-370 +-607 +-859 +-1117 +-1269 +-1240 +-1097 +-974 +-935 +-941 +-915 +-854 +-812 +-806 +-806 +-735 +-559 +-360 +-219 +-158 +-104 +20 +237 +493 +705 +817 +786 +603 +265 +-190 +-700 +-1165 +-1531 +-1797 +-1941 +-1987 +-1950 +-1755 +-1267 +-411 +648 +1605 +2158 +2266 +2081 +1753 +1302 +726 +186 +-86 +38 +382 +668 +750 +703 +728 +903 +1107 +1120 +837 +344 +-166 +-531 +-668 +-584 +-333 +-56 +122 +200 +243 +295 +287 +130 +-190 +-592 +-950 +-1220 +-1425 +-1596 +-1755 +-1847 +-1830 +-1746 +-1657 +-1519 +-1179 +-584 +152 +822 +1274 +1473 +1491 +1445 +1420 +1431 +1466 +1537 +1670 +1804 +1833 +1714 +1517 +1322 +1088 +749 +308 +-154 +-541 +-765 +-780 +-599 +-298 +45 +336 +486 +407 +146 +-196 +-501 +-692 +-705 +-546 +-292 +-56 +109 +244 +392 +555 +675 +700 +574 +327 +44 +-200 +-399 +-602 +-853 +-1086 +-1186 +-1128 +-997 +-903 +-861 +-814 +-735 +-655 +-633 +-664 +-691 +-636 +-501 +-350 +-253 +-183 +-73 +114 +357 +586 +729 +738 +609 +350 +-12 +-437 +-862 +-1222 +-1509 +-1699 +-1781 +-1771 +-1672 +-1391 +-805 +85 +1092 +1913 +2354 +2418 +2232 +1870 +1344 +732 +250 +111 +304 +624 +839 +887 +892 +976 +1124 +1175 +968 +502 +-65 +-531 +-795 +-823 +-657 +-387 +-168 +-79 +-84 +-104 +-137 +-248 +-477 +-792 +-1109 +-1349 +-1520 +-1663 +-1801 +-1930 +-1972 +-1917 +-1814 +-1677 +-1413 +-902 +-183 +577 +1171 +1483 +1559 +1523 +1495 +1511 +1565 +1637 +1763 +1946 +2084 +2074 +1892 +1629 +1346 +1012 +606 +175 +-218 +-502 +-625 +-574 +-389 +-135 +113 +273 +270 +83 +-215 +-513 +-732 +-821 +-744 +-551 +-336 +-176 +-63 +57 +214 +396 +524 +533 +404 +183 +-36 +-228 +-420 +-656 +-923 +-1109 +-1116 +-972 +-796 +-686 +-626 +-569 +-515 +-505 +-567 +-658 +-689 +-603 +-434 +-269 +-151 +-58 +64 +232 +412 +547 +590 +529 +364 +116 +-202 +-564 +-905 +-1197 +-1422 +-1564 +-1619 +-1599 +-1463 +-1077 +-368 +596 +1563 +2252 +2535 +2473 +2191 +1745 +1171 +622 +316 +362 +654 +961 +1109 +1110 +1090 +1131 +1168 +1047 +697 +192 +-302 +-664 +-818 +-789 +-632 +-453 +-366 +-388 +-446 +-487 +-538 +-654 +-864 +-1133 +-1394 +-1597 +-1767 +-1915 +-2055 +-2144 +-2129 +-2015 +-1838 +-1578 +-1135 +-479 +268 +925 +1350 +1535 +1574 +1573 +1607 +1674 +1755 +1862 +2021 +2188 +2240 +2106 +1839 +1545 +1255 +928 +547 +159 +-190 +-439 +-544 +-497 +-339 +-133 +47 +136 +67 +-141 +-406 +-650 +-818 +-868 +-789 +-634 +-475 +-342 +-205 +-28 +180 +376 +482 +454 +301 +83 +-133 +-336 +-546 +-778 +-970 +-1021 +-914 +-733 +-596 +-543 +-520 +-491 +-471 +-502 +-570 +-616 +-558 +-409 +-241 +-129 +-80 +-29 +70 +219 +366 +468 +491 +426 +274 +36 +-292 +-663 +-1005 +-1279 +-1473 +-1567 +-1562 +-1464 +-1186 +-631 +223 +1201 +2014 +2440 +2475 +2256 +1902 +1448 +947 +558 +449 +634 +935 +1145 +1172 +1094 +1049 +1070 +1048 +865 +479 +3 +-429 +-719 +-841 +-822 +-703 +-607 +-584 +-618 +-639 +-633 +-677 +-825 +-1077 +-1371 +-1623 +-1822 +-1981 +-2118 +-2213 +-2214 +-2080 +-1866 +-1622 +-1289 +-804 +-163 +494 +1037 +1378 +1541 +1617 +1679 +1760 +1849 +1939 +2046 +2174 +2251 +2186 +1985 +1732 +1492 +1229 +889 +491 +81 +-267 +-488 +-549 +-471 +-305 +-109 +50 +99 +-9 +-236 +-512 +-765 +-927 +-952 +-843 +-660 +-479 +-315 +-139 +70 +281 +432 +467 +357 +149 +-75 +-270 +-431 +-594 +-755 +-851 +-823 +-698 +-571 +-512 +-502 +-496 +-469 +-457 +-485 +-525 +-518 +-422 +-275 +-162 +-120 +-112 +-66 +50 +208 +359 +447 +458 +369 +178 +-122 +-496 +-867 +-1177 +-1405 +-1536 +-1564 +-1504 +-1321 +-920 +-235 +661 +1535 +2142 +2391 +2339 +2123 +1797 +1357 +896 +596 +587 +797 +1024 +1112 +1059 +994 +1014 +1082 +1033 +775 +325 +-177 +-599 +-858 +-934 +-858 +-714 +-615 +-593 +-602 +-601 +-621 +-723 +-949 +-1252 +-1554 +-1784 +-1942 +-2048 +-2121 +-2140 +-2061 +-1900 +-1716 +-1504 +-1173 +-652 +3 +651 +1157 +1457 +1600 +1659 +1705 +1767 +1825 +1890 +1996 +2116 +2163 +2075 +1890 +1684 +1459 +1158 +763 +321 +-92 +-405 +-557 +-537 +-391 +-178 +29 +147 +103 +-109 +-406 +-697 +-914 +-1003 +-943 +-776 +-576 +-389 +-215 +-33 +161 +328 +416 +388 +240 +39 +-145 +-290 +-419 +-573 +-729 +-803 +-757 +-644 +-552 +-515 +-486 +-431 +-369 +-351 +-383 +-430 +-421 +-335 +-230 +-163 +-141 +-102 +0 +165 +342 +481 +528 +460 +287 +13 +-325 +-688 +-1008 +-1258 +-1431 +-1505 +-1487 +-1383 +-1145 +-679 +52 +912 +1677 +2156 +2306 +2243 +2017 +1642 +1160 +720 +505 +576 +800 +991 +1048 +1034 +1054 +1131 +1154 +995 +609 +85 +-411 +-771 +-931 +-906 +-753 +-594 +-517 +-528 +-564 +-610 +-692 +-874 +-1139 +-1433 +-1675 +-1825 +-1929 +-2008 +-2075 +-2092 +-2016 +-1877 +-1718 +-1475 +-1051 +-417 +300 +938 +1362 +1569 +1626 +1634 +1666 +1722 +1781 +1873 +2008 +2126 +2148 +2033 +1829 +1590 +1296 +916 +483 +66 +-274 +-475 +-520 +-428 +-257 +-67 +73 +86 +-58 +-320 +-606 +-848 +-978 +-970 +-832 +-629 +-446 +-305 +-175 +-22 +149 +293 +357 +309 +172 +12 +-126 +-251 +-406 +-600 +-764 +-806 +-716 +-576 +-471 +-410 +-355 +-289 +-251 +-286 +-370 +-436 +-415 +-318 +-201 +-123 +-68 +11 +140 +303 +442 +506 +467 +333 +119 +-161 +-483 +-806 +-1086 +-1304 +-1441 +-1483 +-1447 +-1310 +-1005 +-439 +379 +1252 +1947 +2309 +2366 +2216 +1899 +1440 +927 +558 +480 +660 +921 +1085 +1113 +1095 +1112 +1145 +1057 +767 +298 +-210 +-617 +-849 +-891 +-796 +-642 +-544 +-543 +-597 +-644 +-697 +-803 +-995 +-1240 +-1476 +-1660 +-1802 +-1925 +-2042 +-2124 +-2113 +-1997 +-1826 +-1596 +-1232 +-679 +5 +659 +1148 +1409 +1509 +1530 +1559 +1626 +1703 +1801 +1941 +2104 +2192 +2124 +1916 +1651 +1366 +1044 +674 +291 +-58 +-318 +-457 +-462 +-367 +-218 +-76 +0 +-44 +-225 +-473 +-716 +-892 +-971 +-929 +-792 +-631 +-485 +-347 +-180 +22 +226 +374 +412 +334 +177 +5 +-153 +-318 +-500 +-673 +-749 +-684 +-527 +-380 +-296 +-261 +-237 +-229 +-261 +-342 +-427 +-435 +-349 +-216 +-109 +-59 +-26 +37 +143 +256 +332 +347 +288 +166 +-24 +-284 +-589 +-896 +-1157 +-1366 +-1486 +-1510 +-1453 +-1247 +-804 +-83 +803 +1625 +2171 +2354 +2257 +1991 +1600 +1136 +735 +546 +634 +882 +1107 +1190 +1160 +1119 +1110 +1072 +901 +557 +105 +-321 +-632 +-785 +-802 +-718 +-626 +-603 +-648 +-703 +-739 +-787 +-898 +-1094 +-1334 +-1566 +-1751 +-1902 +-2028 +-2125 +-2149 +-2065 +-1892 +-1668 +-1365 +-917 +-326 +312 +857 +1229 +1424 +1511 +1563 +1631 +1725 +1814 +1915 +2046 +2147 +2135 +1985 +1746 +1498 +1237 +921 +557 +183 +-151 +-394 +-505 +-485 +-374 +-221 +-85 +-35 +-121 +-318 +-560 +-785 +-944 +-998 +-940 +-799 +-635 +-477 +-304 +-101 +123 +317 +425 +404 +274 +94 +-79 +-222 +-359 +-496 +-595 +-592 +-488 +-345 +-255 +-219 +-209 +-200 +-205 +-250 +-312 +-344 +-302 +-210 +-114 +-70 +-62 +-43 +22 +130 +241 +312 +316 +244 +82 +-166 +-490 +-834 +-1144 +-1389 +-1539 +-1582 +-1528 +-1363 +-1017 +-428 +371 +1217 +1879 +2214 +2245 +2084 +1813 +1450 +1045 +743 +666 +808 +1014 +1142 +1144 +1093 +1073 +1089 +1040 +820 +434 +-27 +-436 +-720 +-845 +-833 +-744 +-671 +-661 +-690 +-710 +-732 +-813 +-986 +-1235 +-1502 +-1721 +-1880 +-1988 +-2066 +-2103 +-2056 +-1910 +-1712 +-1479 +-1166 +-706 +-122 +474 +967 +1299 +1488 +1593 +1666 +1744 +1809 +1872 +1960 +2063 +2119 +2055 +1885 +1675 +1451 +1179 +828 +423 +24 +-308 +-508 +-558 +-488 +-344 +-188 +-86 +-97 +-247 +-492 +-756 +-979 +-1103 +-1089 +-961 +-767 +-571 +-386 +-192 +15 +209 +343 +370 +283 +130 +-24 +-137 +-227 +-322 +-429 +-488 +-450 +-354 +-260 +-211 +-192 +-174 +-145 +-141 +-174 +-223 +-244 +-209 +-149 +-115 +-116 +-116 +-77 +25 +153 +263 +314 +274 +143 +-85 +-388 +-732 +-1057 +-1317 +-1498 +-1584 +-1562 +-1442 +-1200 +-766 +-111 +686 +1438 +1965 +2197 +2189 +2032 +1749 +1356 +967 +728 +728 +895 +1075 +1155 +1147 +1143 +1178 +1191 +1057 +725 +251 +-231 +-610 +-828 +-887 +-815 +-703 +-632 +-628 +-661 +-704 +-783 +-934 +-1161 +-1422 +-1652 +-1810 +-1912 +-1983 +-2030 +-2035 +-1964 +-1819 +-1639 +-1396 +-1018 +-471 +166 +766 +1220 +1488 +1616 +1668 +1704 +1748 +1795 +1869 +1987 +2107 +2153 +2079 +1901 +1670 +1392 +1037 +622 +199 +-170 +-426 +-534 +-503 +-381 +-223 +-94 +-57 +-160 +-390 +-668 +-925 +-1096 +-1137 +-1047 +-870 +-675 +-492 +-318 +-132 +61 +223 +314 +304 +207 +82 +-32 +-120 +-215 +-336 +-454 +-493 +-433 +-318 +-220 +-165 +-123 +-82 +-55 +-76 +-148 +-230 +-261 +-232 +-177 +-141 +-121 +-81 +2 +118 +228 +285 +264 +154 +-35 +-289 +-595 +-908 +-1187 +-1406 +-1548 +-1593 +-1547 +-1403 +-1114 +-611 +105 +914 +1626 +2076 +2238 +2177 +1950 +1591 +1158 +791 +645 +733 +945 +1125 +1203 +1225 +1247 +1263 +1190 +939 +507 +8 +-434 +-730 +-854 +-831 +-717 +-617 +-594 +-647 +-719 +-795 +-908 +-1085 +-1316 +-1549 +-1726 +-1846 +-1928 +-1999 +-2055 +-2045 +-1953 +-1792 +-1571 +-1251 +-771 +-146 +503 +1036 +1378 +1543 +1604 +1630 +1684 +1746 +1823 +1942 +2095 +2211 +2207 +2061 +1825 +1549 +1224 +844 +440 +62 +-238 +-416 +-463 +-401 +-281 +-159 +-88 +-124 +-284 +-526 +-775 +-971 +-1076 +-1066 +-952 +-787 +-623 +-467 +-301 +-102 +102 +269 +352 +326 +225 +99 +-27 +-148 +-289 +-439 +-531 +-504 +-378 +-230 +-126 +-72 +-44 +-28 +-53 +-134 +-241 +-312 +-299 +-222 +-144 +-102 +-82 +-44 +31 +120 +191 +205 +152 +28 +-157 +-406 +-702 +-1005 +-1279 +-1488 +-1614 +-1646 +-1579 +-1387 +-992 +-342 +502 +1350 +1979 +2278 +2278 +2088 +1753 +1313 +889 +626 +630 +839 +1091 +1240 +1266 +1242 +1222 +1186 +1025 +697 +243 +-210 +-565 +-765 +-819 +-761 +-669 +-630 +-669 +-738 +-794 +-856 +-962 +-1140 +-1366 +-1589 +-1763 +-1898 +-2012 +-2107 +-2150 +-2104 +-1962 +-1747 +-1450 +-1031 +-463 +175 +752 +1168 +1405 +1517 +1577 +1648 +1743 +1843 +1958 +2097 +2230 +2272 +2158 +1925 +1650 +1363 +1041 +677 +304 +-37 +-292 +-428 +-437 +-356 +-231 +-116 +-64 +-129 +-307 +-543 +-772 +-949 +-1027 +-987 +-861 +-698 +-537 +-369 +-169 +61 +281 +429 +462 +374 +212 +43 +-112 +-261 +-421 +-548 +-571 +-469 +-307 +-175 +-112 +-94 +-88 +-100 +-153 +-239 +-315 +-314 +-236 +-129 +-58 +-46 +-40 +3 +85 +182 +246 +244 +169 +8 +-224 +-528 +-875 +-1199 +-1472 +-1671 +-1764 +-1758 +-1648 +-1362 +-823 +-31 +876 +1654 +2119 +2237 +2112 +1841 +1466 +1037 +684 +556 +677 +923 +1118 +1172 +1136 +1107 +1119 +1096 +922 +572 +118 +-305 +-619 +-781 +-792 +-699 +-610 +-586 +-618 +-650 +-669 +-716 +-854 +-1087 +-1363 +-1611 +-1800 +-1942 +-2048 +-2122 +-2118 +-2006 +-1820 +-1594 +-1290 +-850 +-272 +342 +867 +1227 +1423 +1524 +1595 +1674 +1754 +1830 +1932 +2059 +2149 +2117 +1954 +1731 +1507 +1253 +932 +547 +147 +-200 +-428 +-506 +-446 +-295 +-104 +56 +110 +12 +-210 +-488 +-744 +-912 +-946 +-842 +-659 +-462 +-280 +-91 +127 +349 +513 +573 +492 +312 +105 +-67 +-202 +-336 +-475 +-570 +-557 +-449 +-333 +-273 +-259 +-255 +-236 +-233 +-269 +-324 +-347 +-291 +-194 +-116 +-101 +-114 +-86 +16 +165 +302 +377 +362 +243 +11 +-323 +-729 +-1141 +-1489 +-1742 +-1886 +-1907 +-1827 +-1639 +-1247 +-579 +307 +1195 +1845 +2127 +2105 +1927 +1633 +1216 +758 +440 +405 +607 +859 +988 +976 +950 +1006 +1114 +1113 +891 +458 +-45 +-476 +-738 +-809 +-717 +-543 +-406 +-356 +-351 +-342 +-355 +-456 +-689 +-1014 +-1339 +-1584 +-1753 +-1870 +-1962 +-2009 +-1970 +-1846 +-1694 +-1523 +-1230 +-751 +-126 +511 +1013 +1318 +1453 +1496 +1522 +1574 +1629 +1694 +1805 +1940 +2001 +1939 +1769 +1564 +1345 +1056 +672 +245 +-152 +-445 +-572 +-523 +-344 +-96 +159 +320 +314 +123 +-177 +-477 +-707 +-802 +-726 +-527 +-302 +-108 +48 +213 +404 +581 +684 +655 +488 +261 +60 +-88 +-229 +-411 +-618 +-745 +-731 +-620 +-516 +-470 +-449 +-405 +-348 +-339 +-387 +-463 +-474 +-396 +-276 +-185 +-146 +-103 +0 +173 +359 +492 +521 +422 +203 +-125 +-527 +-953 +-1334 +-1637 +-1848 +-1948 +-1963 +-1912 +-1730 +-1287 +-529 +440 +1339 +1913 +2105 +2024 +1773 +1351 +795 +278 +32 +142 +456 +736 +850 +857 +914 +1072 +1204 +1125 +767 +231 +-280 +-627 +-742 +-633 +-386 +-137 +-3 +14 +-2 +-18 +-75 +-256 +-559 +-903 +-1183 +-1371 +-1516 +-1642 +-1780 +-1870 +-1847 +-1769 +-1679 +-1502 +-1125 +-505 +226 +862 +1244 +1369 +1339 +1282 +1278 +1319 +1373 +1471 +1644 +1819 +1887 +1775 +1558 +1324 +1056 +710 +308 +-85 +-395 +-558 +-543 +-364 +-92 +205 +442 +541 +438 +185 +-109 +-367 +-507 +-484 +-313 +-81 +109 +225 +317 +449 +616 +760 +811 +718 +505 +263 +52 +-137 +-375 +-682 +-955 +-1053 +-961 +-798 +-678 +-619 +-569 +-496 +-455 +-500 +-612 +-701 +-657 +-496 +-310 +-188 +-111 +-21 +137 +339 +517 +601 +551 +373 +90 +-276 +-698 +-1123 +-1490 +-1771 +-1958 +-2054 +-2083 +-2050 +-1818 +-1230 +-292 +783 +1639 +2068 +2083 +1832 +1405 +800 +158 +-285 +-307 +33 +461 +722 +766 +765 +863 +1048 +1122 +938 +509 +19 +-349 +-510 +-446 +-224 +67 +274 +335 +318 +303 +298 +221 +16 +-287 +-606 +-875 +-1105 +-1316 +-1533 +-1720 +-1813 +-1795 +-1731 +-1634 +-1364 +-836 +-128 +552 +1002 +1178 +1158 +1079 +1043 +1092 +1159 +1253 +1418 +1631 +1770 +1697 +1450 +1160 +916 +670 +376 +43 +-268 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e5_659_255.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e5_659_255.samples new file mode 100644 index 00000000..cdba7782 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_e5_659_255.samples @@ -0,0 +1,4096 @@ +419 +342 +322 +349 +392 +422 +473 +584 +806 +1151 +1550 +1923 +2164 +2246 +2210 +2119 +1989 +1796 +1515 +1143 +730 +348 +47 +-139 +-185 +-128 +-44 +-10 +-45 +-108 +-161 +-198 +-253 +-386 +-613 +-913 +-1248 +-1564 +-1790 +-1840 +-1745 +-1638 +-1598 +-1605 +-1573 +-1457 +-1281 +-1092 +-964 +-954 +-1000 +-988 +-867 +-684 +-539 +-450 +-385 +-299 +-174 +-7 +213 +464 +687 +791 +756 +631 +503 +398 +312 +291 +313 +351 +380 +432 +550 +788 +1154 +1581 +1960 +2204 +2288 +2235 +2137 +1996 +1789 +1497 +1110 +684 +291 +-16 +-203 +-238 +-160 +-58 +-14 +-42 +-96 +-146 +-178 +-240 +-382 +-625 +-934 +-1270 +-1588 +-1807 +-1844 +-1746 +-1650 +-1614 +-1618 +-1574 +-1440 +-1248 +-1049 +-922 +-913 +-960 +-944 +-809 +-627 +-493 +-420 +-365 +-289 +-165 +7 +236 +495 +717 +807 +750 +606 +465 +349 +260 +237 +263 +302 +323 +375 +495 +749 +1139 +1593 +1992 +2236 +2297 +2230 +2126 +1975 +1770 +1470 +1070 +633 +227 +-86 +-261 +-270 +-169 +-53 +-5 +-37 +-92 +-140 +-166 +-222 +-361 +-601 +-915 +-1262 +-1591 +-1809 +-1843 +-1733 +-1620 +-1581 +-1582 +-1528 +-1391 +-1195 +-989 +-863 +-862 +-912 +-890 +-751 +-571 +-447 +-382 +-336 +-254 +-123 +62 +302 +569 +779 +842 +751 +577 +416 +278 +176 +148 +170 +200 +214 +266 +399 +688 +1120 +1606 +2022 +2254 +2301 +2233 +2134 +1987 +1775 +1453 +1023 +556 +133 +-177 +-328 +-307 +-176 +-42 +10 +-16 +-68 +-106 +-125 +-176 +-317 +-566 +-893 +-1251 +-1596 +-1819 +-1834 +-1700 +-1581 +-1542 +-1539 +-1479 +-1325 +-1108 +-891 +-772 +-789 +-855 +-833 +-687 +-507 +-391 +-340 +-302 +-228 +-101 +79 +318 +577 +773 +814 +696 +501 +325 +174 +63 +34 +57 +77 +79 +125 +270 +589 +1066 +1598 +2033 +2272 +2313 +2234 +2129 +1979 +1752 +1397 +933 +439 +12 +-286 +-410 +-354 +-194 +-33 +33 +18 +-22 +-43 +-43 +-89 +-236 +-503 +-852 +-1234 +-1590 +-1803 +-1788 +-1633 +-1502 +-1458 +-1462 +-1395 +-1228 +-995 +-770 +-658 +-696 +-777 +-758 +-610 +-434 +-332 +-292 +-260 +-191 +-65 +119 +359 +620 +811 +824 +666 +435 +230 +54 +-81 +-130 +-121 +-107 +-109 +-53 +119 +483 +1009 +1574 +2021 +2259 +2302 +2239 +2143 +1986 +1741 +1357 +866 +355 +-78 +-366 +-474 +-391 +-203 +-26 +51 +52 +35 +36 +59 +26 +-127 +-410 +-790 +-1206 +-1588 +-1794 +-1753 +-1574 +-1428 +-1387 +-1381 +-1289 +-1094 +-840 +-606 +-513 +-578 +-682 +-667 +-515 +-345 +-258 +-241 +-231 +-180 +-65 +112 +353 +620 +802 +790 +606 +349 +122 +-85 +-233 +-291 +-298 +-302 +-314 +-254 +-58 +345 +914 +1523 +2005 +2259 +2297 +2234 +2133 +1971 +1703 +1286 +764 +234 +-201 +-482 +-565 +-453 +-234 +-33 +67 +85 +90 +117 +162 +141 +-18 +-321 +-717 +-1152 +-1538 +-1728 +-1656 +-1447 +-1299 +-1262 +-1260 +-1163 +-954 +-692 +-465 +-392 +-488 +-609 +-592 +-426 +-256 +-183 +-179 +-177 +-126 +-14 +168 +415 +676 +832 +782 +551 +245 +-24 +-267 +-440 +-513 +-524 +-543 +-554 +-477 +-250 +203 +817 +1472 +1986 +2263 +2315 +2256 +2147 +1961 +1664 +1213 +665 +113 +-334 +-608 +-669 +-514 +-245 +0 +130 +174 +199 +247 +303 +273 +97 +-237 +-668 +-1126 +-1512 +-1677 +-1563 +-1329 +-1179 +-1144 +-1134 +-1021 +-804 +-537 +-313 +-260 +-380 +-510 +-489 +-319 +-161 +-109 +-130 +-151 +-116 +-13 +163 +412 +678 +827 +746 +470 +125 +-182 +-454 +-641 +-715 +-731 +-749 +-752 +-659 +-403 +89 +753 +1446 +1976 +2258 +2297 +2224 +2103 +1915 +1612 +1152 +594 +33 +-421 +-698 +-737 +-549 +-241 +33 +182 +239 +278 +349 +423 +400 +207 +-150 +-604 +-1076 +-1466 +-1617 +-1480 +-1235 +-1083 +-1051 +-1035 +-910 +-674 +-395 +-176 +-140 +-282 +-419 +-399 +-231 +-81 +-44 +-74 +-108 +-81 +16 +193 +446 +715 +842 +713 +378 +-13 +-353 +-652 +-850 +-923 +-943 +-966 +-967 +-868 +-585 +-47 +671 +1407 +1975 +2265 +2295 +2211 +2085 +1884 +1579 +1106 +523 +-66 +-534 +-801 +-801 +-558 +-209 +84 +236 +303 +351 +436 +514 +486 +284 +-82 +-541 +-1018 +-1404 +-1542 +-1395 +-1146 +-997 +-978 +-962 +-826 +-578 +-278 +-43 +-13 +-164 +-307 +-282 +-111 +28 +46 +-9 +-68 +-64 +20 +197 +456 +707 +794 +617 +246 +-161 +-510 +-818 +-1011 +-1089 +-1101 +-1126 +-1129 +-1021 +-718 +-136 +632 +1419 +1994 +2268 +2278 +2187 +2062 +1869 +1553 +1047 +430 +-175 +-638 +-871 +-818 +-522 +-139 +164 +321 +389 +443 +524 +594 +549 +335 +-39 +-509 +-998 +-1389 +-1506 +-1321 +-1048 +-891 +-868 +-848 +-705 +-444 +-130 +98 +98 +-92 +-258 +-231 +-65 +55 +45 +-35 +-102 +-89 +15 +213 +484 +730 +786 +579 +192 +-225 +-590 +-912 +-1118 +-1204 +-1229 +-1273 +-1284 +-1172 +-837 +-210 +602 +1403 +1973 +2237 +2257 +2189 +2088 +1900 +1558 +1024 +367 +-261 +-720 +-926 +-841 +-523 +-128 +186 +351 +437 +511 +610 +692 +651 +422 +25 +-466 +-983 +-1386 +-1499 +-1292 +-1009 +-855 +-841 +-820 +-659 +-377 +-51 +168 +142 +-65 +-226 +-187 +-7 +108 +89 +2 +-66 +-54 +45 +238 +492 +714 +743 +505 +90 +-338 +-704 +-1023 +-1224 +-1308 +-1332 +-1366 +-1349 +-1204 +-821 +-149 +684 +1476 +2024 +2265 +2257 +2182 +2067 +1859 +1496 +935 +283 +-316 +-737 +-910 +-797 +-471 +-85 +206 +349 +425 +501 +611 +704 +667 +430 +22 +-486 +-1011 +-1395 +-1472 +-1246 +-970 +-832 +-818 +-784 +-604 +-315 +2 +198 +141 +-91 +-258 +-210 +-31 +79 +55 +-29 +-84 +-53 +61 +258 +510 +730 +743 +490 +72 +-355 +-723 +-1041 +-1232 +-1310 +-1335 +-1375 +-1353 +-1193 +-787 +-98 +735 +1517 +2046 +2270 +2264 +2192 +2067 +1834 +1443 +865 +223 +-358 +-756 +-907 +-776 +-436 +-52 +232 +376 +455 +536 +659 +739 +676 +406 +-34 +-555 +-1071 +-1430 +-1482 +-1245 +-980 +-862 +-863 +-821 +-635 +-343 +-28 +147 +73 +-152 +-291 +-211 +-23 +82 +59 +-31 +-87 +-55 +59 +264 +533 +752 +756 +494 +69 +-349 +-714 +-1026 +-1214 +-1286 +-1316 +-1347 +-1304 +-1117 +-688 +11 +850 +1623 +2133 +2340 +2328 +2245 +2101 +1855 +1445 +868 +231 +-337 +-726 +-879 +-749 +-418 +-40 +234 +370 +446 +528 +641 +703 +607 +313 +-135 +-652 +-1159 +-1492 +-1505 +-1253 +-998 +-899 +-906 +-860 +-679 +-396 +-105 +49 +-38 +-252 +-357 +-250 +-49 +54 +30 +-52 +-95 +-67 +51 +260 +532 +752 +752 +488 +71 +-336 +-689 +-985 +-1147 +-1206 +-1225 +-1248 +-1202 +-1014 +-576 +130 +958 +1706 +2190 +2379 +2348 +2266 +2117 +1859 +1451 +887 +256 +-310 +-700 +-847 +-708 +-374 +-7 +239 +350 +415 +495 +603 +651 +535 +225 +-224 +-736 +-1224 +-1538 +-1545 +-1310 +-1084 +-1007 +-1020 +-962 +-765 +-481 +-194 +-52 +-141 +-343 +-425 +-301 +-93 +10 +-4 +-61 +-92 +-42 +95 +331 +614 +818 +784 +488 +61 +-336 +-675 +-945 +-1072 +-1096 +-1094 +-1104 +-1044 +-845 +-394 +308 +1116 +1831 +2276 +2428 +2379 +2273 +2111 +1867 +1463 +902 +275 +-284 +-661 +-787 +-632 +-299 +41 +256 +344 +386 +442 +525 +543 +407 +91 +-351 +-844 +-1315 +-1614 +-1607 +-1370 +-1159 +-1087 +-1095 +-1030 +-828 +-543 +-257 +-118 +-207 +-397 +-469 +-344 +-149 +-56 +-82 +-154 +-178 +-111 +52 +309 +612 +818 +779 +500 +107 +-242 +-545 +-779 +-883 +-904 +-905 +-925 +-873 +-680 +-240 +447 +1234 +1924 +2337 +2459 +2406 +2304 +2156 +1914 +1508 +932 +292 +-269 +-642 +-761 +-609 +-291 +26 +215 +285 +314 +359 +425 +424 +280 +-28 +-453 +-940 +-1403 +-1679 +-1654 +-1414 +-1219 +-1166 +-1183 +-1126 +-938 +-665 +-389 +-265 +-358 +-527 +-558 +-399 +-187 +-92 +-109 +-158 +-159 +-75 +103 +359 +640 +822 +769 +494 +127 +-199 +-479 +-686 +-765 +-760 +-751 +-758 +-695 +-485 +-22 +658 +1416 +2048 +2405 +2493 +2417 +2310 +2151 +1894 +1464 +884 +266 +-259 +-596 +-684 +-517 +-219 +63 +215 +254 +257 +276 +319 +307 +151 +-157 +-587 +-1068 +-1515 +-1760 +-1711 +-1478 +-1302 +-1262 +-1279 +-1206 +-1003 +-723 +-457 +-356 +-461 +-617 +-623 +-453 +-252 +-163 +-171 +-200 +-176 +-70 +117 +380 +657 +825 +765 +506 +174 +-114 +-370 +-552 +-615 +-603 +-594 +-601 +-532 +-312 +163 +835 +1556 +2128 +2448 +2512 +2441 +2335 +2166 +1887 +1448 +873 +277 +-215 +-523 +-597 +-440 +-170 +65 +174 +182 +165 +176 +211 +190 +35 +-279 +-699 +-1177 +-1604 +-1824 +-1753 +-1531 +-1382 +-1362 +-1380 +-1288 +-1073 +-790 +-536 +-447 +-549 +-682 +-666 +-485 +-289 +-198 +-196 +-208 +-170 +-57 +135 +395 +665 +827 +768 +522 +218 +-45 +-276 +-427 +-465 +-447 +-432 +-425 +-337 +-106 +362 +1005 +1675 +2196 +2461 +2497 +2429 +2326 +2148 +1867 +1425 +870 +309 +-155 +-450 +-525 +-394 +-161 +34 +108 +101 +77 +91 +126 +97 +-73 +-395 +-816 +-1277 +-1677 +-1863 +-1779 +-1565 +-1433 +-1424 +-1440 +-1343 +-1126 +-858 +-633 +-564 +-660 +-765 +-715 +-513 +-311 +-217 +-202 +-207 +-162 +-51 +136 +392 +661 +817 +767 +543 +265 +27 +-178 +-314 +-344 +-317 +-305 +-285 +-191 +51 +516 +1127 +1765 +2247 +2489 +2518 +2439 +2321 +2132 +1835 +1399 +868 +329 +-120 +-411 +-488 +-367 +-157 +10 +66 +44 +20 +27 +52 +5 +-178 +-506 +-919 +-1362 +-1740 +-1901 +-1802 +-1599 +-1491 +-1490 +-1499 +-1396 +-1182 +-924 +-706 +-651 +-747 +-839 +-768 +-554 +-356 +-260 +-235 +-221 +-161 +-37 +160 +424 +698 +850 +795 +570 +300 +72 +-122 +-236 +-248 +-214 +-193 +-165 +-54 +195 +647 +1233 +1849 +2313 +2544 +2553 +2454 +2316 +2114 +1813 +1379 +856 +326 +-108 +-392 +-463 +-344 +-142 +11 +50 +22 +-12 +-8 +4 +-63 +-271 +-608 +-1018 +-1443 +-1793 +-1933 +-1826 +-1642 +-1546 +-1548 +-1547 +-1435 +-1222 +-969 +-764 +-709 +-790 +-849 +-758 +-538 +-342 +-251 +-229 +-214 +-152 +-23 +184 +460 +737 +879 +806 +577 +320 +104 +-74 +-165 +-164 +-119 +-93 +-55 +56 +302 +753 +1341 +1925 +2346 +2539 +2521 +2416 +2272 +2072 +1795 +1374 +857 +334 +-101 +-378 +-442 +-320 +-131 +-1 +22 +-13 +-54 +-58 +-64 +-147 +-361 +-692 +-1084 +-1486 +-1811 +-1925 +-1821 +-1658 +-1576 +-1589 +-1579 +-1465 +-1261 +-1012 +-807 +-750 +-828 +-875 +-771 +-545 +-347 +-249 +-222 +-198 +-123 +19 +237 +508 +765 +884 +791 +558 +311 +112 +-52 +-123 +-103 +-52 +-24 +16 +132 +384 +836 +1407 +1978 +2382 +2544 +2509 +2397 +2255 +2062 +1770 +1329 +804 +284 +-135 +-387 +-427 +-296 +-110 +10 +23 +-26 +-76 +-93 +-109 +-202 +-418 +-743 +-1129 +-1533 +-1852 +-1966 +-1854 +-1685 +-1601 +-1604 +-1592 +-1476 +-1264 +-1004 +-804 +-756 +-830 +-863 +-747 +-522 +-336 +-254 +-230 +-203 +-116 +32 +252 +521 +765 +865 +763 +538 +304 +118 +-35 +-91 +-62 +-5 +22 +59 +168 +434 +892 +1461 +2006 +2361 +2502 +2460 +2353 +2224 +2030 +1724 +1279 +757 +250 +-146 +-371 +-395 +-264 +-97 +3 +-4 +-56 +-106 +-126 +-139 +-232 +-442 +-759 +-1147 +-1545 +-1858 +-1948 +-1817 +-1644 +-1565 +-1571 +-1556 +-1429 +-1215 +-971 +-789 +-761 +-844 +-869 +-741 +-516 +-338 +-258 +-230 +-188 +-94 +65 +291 +556 +787 +870 +760 +538 +313 +135 +-7 +-60 +-34 +10 +23 +52 +171 +451 +926 +1495 +2014 +2342 +2467 +2423 +2326 +2200 +1994 +1670 +1211 +688 +195 +-177 +-376 +-382 +-246 +-81 +10 +-4 +-65 +-113 +-126 +-146 +-243 +-464 +-789 +-1171 +-1568 +-1856 +-1918 +-1773 +-1612 +-1549 +-1568 +-1544 +-1408 +-1189 +-940 +-771 +-750 +-830 +-848 +-714 +-491 +-324 +-250 +-223 +-182 +-87 +69 +293 +555 +781 +855 +739 +520 +311 +137 +-1 +-51 +-32 +5 +14 +59 +199 +499 +974 +1522 +2011 +2328 +2439 +2392 +2303 +2163 +1949 +1616 +1153 +642 +174 +-176 +-357 +-354 +-221 +-71 +1 +-23 +-80 +-121 +-125 +-140 +-245 +-478 +-816 +-1204 +-1587 +-1846 +-1888 +-1742 +-1593 +-1544 +-1556 +-1521 +-1371 +-1159 +-921 +-764 +-767 +-852 +-861 +-710 +-488 +-330 +-257 +-226 +-180 +-82 +70 +292 +548 +767 +828 +707 +499 +299 +136 +7 +-33 +-8 +25 +43 +102 +249 +553 +1018 +1554 +2031 +2331 +2421 +2367 +2266 +2117 +1898 +1557 +1102 +612 +162 +-174 +-349 +-345 +-215 +-77 +-10 +-28 +-74 +-106 +-100 +-123 +-248 +-497 +-837 +-1221 +-1596 +-1844 +-1878 +-1731 +-1591 +-1551 +-1566 +-1523 +-1373 +-1163 +-935 +-796 +-803 +-878 +-866 +-705 +-490 +-336 +-266 +-230 +-172 +-72 +84 +310 +567 +778 +834 +712 +502 +308 +147 +22 +-15 +13 +55 +85 +148 +294 +600 +1057 +1582 +2048 +2328 +2406 +2340 +2229 +2072 +1847 +1518 +1080 +603 +167 +-159 +-330 +-317 +-188 +-53 +5 +-15 +-64 +-99 +-109 +-148 +-289 +-546 +-887 +-1260 +-1618 +-1847 +-1858 +-1714 +-1584 +-1546 +-1557 +-1517 +-1366 +-1152 +-934 +-807 +-821 +-888 +-863 +-703 +-490 +-349 +-285 +-249 +-191 +-79 +84 +311 +567 +769 +807 +677 +475 +295 +139 +31 +16 +62 +114 +148 +218 +364 +665 +1113 +1628 +2069 +2325 +2376 +2298 +2184 +2026 +1809 +1485 +1052 +580 +153 +-167 +-327 +-308 +-182 +-48 +4 +-22 +-72 +-114 +-129 +-185 +-330 +-585 +-915 +-1271 +-1606 +-1812 +-1816 +-1678 +-1560 +-1534 +-1560 +-1514 +-1371 +-1165 +-954 +-842 +-857 +-909 +-872 +-701 +-495 +-365 +-310 +-279 +-216 +-99 +77 +312 +570 +759 +792 +667 +476 +308 +168 +73 +68 +116 +164 +194 +258 +409 +716 +1169 +1672 +2086 +2306 +2335 +2253 +2140 +1988 +1773 +1447 +1016 +555 +138 +-162 +-306 +-278 +-151 +-37 +1 +-32 +-90 +-134 +-156 +-214 +-363 +-613 +-932 +-1285 +-1608 +-1806 +-1804 +-1670 +-1573 +-1560 +-1579 +-1527 +-1378 +-1168 +-966 +-860 +-876 +-924 +-870 +-687 +-487 +-361 +-307 +-273 +-200 +-77 +103 +339 +581 +751 +760 +627 +443 +290 +168 +96 +104 +160 +205 +231 +304 +465 +789 +1239 +1723 +2106 +2298 +2318 +2235 +2124 +1970 +1744 +1408 +977 +521 +122 +-159 +-281 +-239 +-117 +-11 +12 +-36 +-105 +-153 +-183 +-246 +-393 +-644 +-961 +-1306 +-1619 +-1797 +-1774 +-1648 +-1567 +-1557 +-1571 +-1515 +-1364 +-1156 +-965 +-871 +-904 +-948 +-884 +-707 +-511 +-390 +-339 +-294 +-216 +-82 +108 +344 +584 +742 +745 +619 +449 +311 +200 +142 +159 +209 +251 +280 +360 +530 +855 +1294 +1749 +2098 +2274 +2283 +2204 +2110 +1953 +1717 +1377 +947 +505 +122 +-139 +-245 +-203 +-90 +1 +6 +-53 +-125 +-172 +-200 +-265 +-418 +-673 +-991 +-1335 +-1640 +-1797 +-1770 +-1652 +-1576 +-1580 +-1597 +-1531 +-1375 +-1167 +-980 +-903 +-934 +-968 +-884 +-694 +-497 +-379 +-322 +-276 +-198 +-66 +114 +343 +573 +721 +719 +597 +438 +314 +210 +160 +180 +235 +281 +319 +411 +595 +929 +1358 +1798 +2120 +2281 +2284 +2207 +2093 +1922 +1679 +1327 +907 +484 +125 +-121 +-213 +-174 +-73 +-4 +-16 +-82 +-155 +-199 +-223 +-291 +-452 +-712 +-1031 +-1368 +-1655 +-1797 +-1757 +-1635 +-1570 +-1578 +-1581 +-1502 +-1342 +-1143 +-974 +-914 +-954 +-983 +-895 +-699 +-513 +-402 +-346 +-300 +-213 +-79 +111 +345 +575 +719 +713 +595 +449 +333 +235 +195 +220 +276 +317 +360 +455 +645 +975 +1396 +1820 +2132 +2272 +2265 +2188 +2068 +1894 +1644 +1295 +883 +473 +128 +-106 +-196 +-158 +-72 +-16 +-35 +-99 +-161 +-200 +-226 +-304 +-477 +-740 +-1059 +-1388 +-1660 +-1783 +-1734 +-1623 +-1579 +-1593 +-1598 +-1521 +-1365 +-1178 +-1020 +-962 +-997 +-1008 +-899 +-698 +-507 +-393 +-333 +-277 +-188 +-50 +141 +374 +596 +723 +710 +589 +446 +332 +238 +201 +231 +290 +334 +385 +488 +687 +1018 +1431 +1842 +2129 +2258 +2251 +2166 +2047 +1863 +1606 +1264 +859 +460 +126 +-99 +-184 +-147 +-63 +-14 +-40 +-106 +-170 +-209 +-247 +-341 +-524 +-795 +-1105 +-1419 +-1674 +-1785 +-1727 +-1621 +-1572 +-1580 +-1576 +-1489 +-1334 +-1150 +-999 +-949 +-980 +-980 +-869 +-674 +-501 +-405 +-350 +-296 +-206 +-65 +129 +364 +591 +717 +698 +578 +441 +333 +243 +220 +257 +325 +378 +434 +537 +734 +1056 +1465 +1867 +2146 +2263 +2230 +2136 +2008 +1827 +1578 +1237 +831 +433 +102 +-117 +-194 +-155 +-70 +-26 +-52 +-110 +-173 +-211 +-253 +-353 +-541 +-809 +-1117 +-1425 +-1668 +-1760 +-1699 +-1599 +-1563 +-1586 +-1582 +-1493 +-1337 +-1147 +-999 +-954 +-985 +-983 +-867 +-672 +-505 +-406 +-353 +-297 +-198 +-46 +162 +408 +629 +739 +705 +579 +445 +338 +251 +231 +279 +344 +393 +445 +551 +756 +1092 +1496 +1879 +2136 +2225 +2194 +2110 +1981 +1799 +1544 +1196 +791 +398 +80 +-125 +-187 +-139 +-55 +-17 +-45 +-109 +-174 +-220 +-271 +-377 +-571 +-836 +-1138 +-1443 +-1671 +-1754 +-1691 +-1595 +-1564 +-1577 +-1560 +-1464 +-1305 +-1118 +-986 +-955 +-988 +-974 +-843 +-644 +-482 +-390 +-337 +-273 +-168 +-13 +194 +428 +634 +721 +669 +541 +412 +313 +237 +229 +282 +348 +391 +450 +559 +778 +1123 +1531 +1903 +2143 +2222 +2174 +2075 +1944 +1763 +1503 +1151 +750 +363 +54 +-132 +-177 +-116 +-33 +2 +-34 +-102 +-173 +-224 +-278 +-390 +-582 +-846 +-1147 +-1447 +-1669 +-1745 +-1672 +-1582 +-1554 +-1569 +-1552 +-1451 +-1287 +-1107 +-975 +-948 +-983 +-959 +-828 +-637 +-487 +-408 +-356 +-290 +-178 +-15 +197 +433 +628 +709 +659 +534 +417 +323 +253 +255 +303 +361 +398 +455 +573 +797 +1144 +1542 +1903 +2131 +2198 +2147 +2057 +1929 +1745 +1478 +1117 +712 +339 +50 +-123 +-154 +-94 +-17 +6 +-41 +-116 +-188 +-234 +-284 +-389 +-582 +-850 +-1153 +-1455 +-1670 +-1727 +-1648 +-1566 +-1551 +-1577 +-1559 +-1453 +-1295 +-1117 +-996 +-978 +-1002 +-964 +-816 +-619 +-467 +-382 +-324 +-259 +-147 +13 +219 +446 +633 +697 +637 +514 +400 +307 +245 +253 +303 +363 +399 +466 +598 +842 +1199 +1591 +1936 +2150 +2203 +2147 +2055 +1916 +1722 +1440 +1070 +677 +313 +40 +-114 +-135 +-74 +-8 +4 +-51 +-128 +-199 +-238 +-290 +-411 +-618 +-891 +-1197 +-1490 +-1681 +-1712 +-1637 +-1564 +-1556 +-1578 +-1545 +-1434 +-1267 +-1095 +-989 +-984 +-1015 +-971 +-817 +-620 +-475 +-394 +-341 +-271 +-155 +7 +214 +440 +622 +683 +623 +504 +401 +322 +270 +282 +336 +390 +428 +501 +638 +881 +1230 +1612 +1940 +2126 +2176 +2135 +2040 +1901 +1697 +1410 +1049 +666 +314 +50 +-100 +-121 +-64 +-7 +-4 +-60 +-131 +-193 +-230 +-288 +-417 +-631 +-909 +-1216 +-1503 +-1689 +-1715 +-1632 +-1565 +-1570 +-1592 +-1557 +-1441 +-1276 +-1115 +-1016 +-1017 +-1043 +-982 +-817 +-619 +-476 +-394 +-335 +-257 +-136 +29 +239 +465 +639 +687 +620 +505 +403 +319 +269 +281 +337 +395 +442 +518 +657 +912 +1268 +1657 +1978 +2157 +2196 +2129 +2023 +1872 +1666 +1381 +1027 +647 +303 +43 +-101 +-116 +-61 +-7 +-12 +-66 +-135 +-194 +-234 +-301 +-438 +-660 +-936 +-1235 +-1507 +-1681 +-1695 +-1609 +-1551 +-1556 +-1577 +-1539 +-1433 +-1281 +-1126 +-1035 +-1037 +-1051 +-979 +-810 +-619 +-483 +-409 +-353 +-272 +-147 +27 +238 +462 +630 +677 +613 +498 +400 +316 +270 +295 +359 +424 +473 +553 +700 +957 +1310 +1689 +1993 +2164 +2180 +2104 +1997 +1845 +1641 +1359 +1008 +634 +296 +39 +-94 +-106 +-48 +3 +-4 +-60 +-130 +-192 +-240 +-315 +-461 +-685 +-957 +-1248 +-1516 +-1673 +-1678 +-1597 +-1554 +-1570 +-1595 +-1552 +-1434 +-1277 +-1122 +-1045 +-1048 +-1051 +-972 +-796 +-611 +-487 +-416 +-358 +-274 +-144 +34 +249 +473 +636 +669 +596 +486 +391 +308 +275 +309 +385 +452 +502 +587 +735 +998 +1354 +1723 +2012 +2160 +2162 +2084 +1970 +1817 +1615 +1332 +980 +607 +271 +26 +-97 +-97 +-40 +5 +-9 +-70 +-146 +-212 +-265 +-348 +-494 +-718 +-985 +-1275 +-1531 +-1678 +-1681 +-1603 +-1564 +-1576 +-1592 +-1545 +-1428 +-1268 +-1123 +-1048 +-1054 +-1055 +-968 +-795 +-613 +-494 +-421 +-361 +-264 +-128 +59 +280 +499 +646 +663 +583 +469 +379 +310 +290 +336 +411 +472 +524 +608 +767 +1044 +1404 +1771 +2050 +2181 +2174 +2095 +1980 +1830 +1615 +1311 +950 +571 +242 +11 +-95 +-84 +-23 +13 +-10 +-77 +-154 +-218 +-275 +-366 +-521 +-746 +-1017 +-1306 +-1554 +-1688 +-1672 +-1598 +-1566 +-1583 +-1600 +-1546 +-1424 +-1264 +-1123 +-1060 +-1074 +-1070 +-967 +-785 +-606 +-492 +-424 +-355 +-259 +-114 +75 +293 +501 +631 +641 +562 +461 +383 +323 +312 +363 +436 +494 +544 +636 +806 +1095 +1452 +1803 +2051 +2162 +2157 +2082 +1980 +1822 +1594 +1291 +923 +554 +240 +23 +-70 +-60 +-11 +12 +-24 +-98 +-181 +-246 +-304 +-392 +-547 +-773 +-1039 +-1325 +-1569 +-1690 +-1666 +-1595 +-1570 +-1597 +-1610 +-1546 +-1421 +-1265 +-1128 +-1072 +-1085 +-1075 +-970 +-787 +-613 +-500 +-427 +-354 +-248 +-104 +84 +303 +509 +636 +642 +566 +470 +395 +339 +334 +386 +456 +510 +564 +666 +845 +1138 +1496 +1832 +2070 +2172 +2152 +2081 +1971 +1799 +1570 +1257 +894 +533 +229 +21 +-65 +-52 +-7 +8 +-41 +-122 +-201 +-259 +-309 +-399 +-561 +-797 +-1071 +-1358 +-1589 +-1694 +-1663 +-1590 +-1566 +-1595 +-1606 +-1541 +-1414 +-1258 +-1130 +-1082 +-1097 +-1083 +-967 +-776 +-606 +-488 +-410 +-335 +-227 +-85 +107 +325 +530 +648 +643 +564 +472 +406 +354 +353 +406 +473 +528 +590 +697 +881 +1169 +1509 +1834 +2060 +2153 +2132 +2066 +1952 +1778 +1540 +1223 +862 +504 +207 +7 +-77 +-67 +-26 +-21 +-70 +-144 +-214 +-265 +-313 +-408 +-579 +-816 +-1092 +-1375 +-1598 +-1692 +-1655 +-1584 +-1573 +-1600 +-1601 +-1531 +-1400 +-1248 +-1128 +-1085 +-1101 +-1078 +-944 +-750 +-575 +-464 +-390 +-314 +-210 +-65 +128 +343 +539 +642 +631 +556 +473 +407 +355 +355 +410 +483 +542 +610 +720 +910 +1205 +1550 +1876 +2089 +2175 +2143 +2048 +1920 +1738 +1493 +1176 +820 +470 +181 +-11 +-84 +-70 +-30 +-23 +-74 +-147 +-216 +-270 +-328 +-432 +-612 +-850 +-1124 +-1398 +-1610 +-1692 +-1645 +-1584 +-1576 +-1604 +-1606 +-1530 +-1399 +-1246 +-1126 +-1088 +-1096 +-1054 +-914 +-715 +-547 +-445 +-374 +-298 +-187 +-33 +162 +376 +566 +664 +647 +566 +478 +406 +348 +351 +407 +484 +547 +621 +738 +935 +1234 +1580 +1901 +2106 +2174 +2124 +2029 +1892 +1709 +1467 +1144 +785 +443 +163 +-21 +-88 +-71 +-30 +-27 +-77 +-151 +-224 +-281 +-346 +-461 +-644 +-887 +-1155 +-1424 +-1623 +-1695 +-1646 +-1583 +-1575 +-1606 +-1598 +-1517 +-1387 +-1233 +-1124 +-1093 +-1099 +-1052 +-903 +-704 +-541 +-436 +-364 +-285 +-171 +-15 +183 +400 +588 +677 +655 +566 +476 +402 +352 +366 +433 +511 +571 +644 +757 +956 +1258 +1605 +1915 +2104 +2150 +2096 +2003 +1869 +1687 +1442 +1117 +757 +410 +132 +-42 +-98 +-71 +-29 +-30 +-85 +-160 +-233 +-292 +-360 +-478 +-668 +-911 +-1177 +-1439 +-1631 +-1690 +-1635 +-1579 +-1579 +-1608 +-1593 +-1508 +-1371 +-1223 +-1121 +-1092 +-1097 +-1039 +-882 +-681 +-524 +-427 +-356 +-273 +-153 +7 +212 +432 +612 +690 +653 +556 +465 +396 +353 +375 +444 +516 +571 +640 +753 +965 +1274 +1623 +1927 +2104 +2141 +2079 +1978 +1844 +1667 +1414 +1084 +717 +374 +106 +-55 +-99 +-65 +-25 +-29 +-89 +-169 +-245 +-306 +-375 +-497 +-688 +-930 +-1198 +-1457 +-1639 +-1689 +-1626 +-1574 +-1578 +-1606 +-1590 +-1496 +-1356 +-1205 +-1105 +-1085 +-1086 +-1015 +-855 +-662 +-514 +-419 +-348 +-257 +-130 +36 +239 +451 +622 +685 +641 +541 +456 +392 +358 +386 +456 +524 +574 +645 +769 +993 +1308 +1660 +1949 +2108 +2137 +2071 +1972 +1837 +1648 +1383 +1046 +677 +342 +84 +-64 +-96 +-59 +-21 +-34 +-102 +-189 +-270 +-330 +-402 +-525 +-715 +-958 +-1229 +-1486 +-1656 +-1688 +-1622 +-1579 +-1586 +-1615 +-1593 +-1494 +-1352 +-1204 +-1111 +-1093 +-1090 +-1011 +-844 +-647 +-497 +-400 +-318 +-224 +-95 +73 +270 +477 +637 +689 +641 +551 +474 +412 +379 +410 +474 +536 +583 +659 +794 +1029 +1348 +1685 +1956 +2102 +2122 +2062 +1967 +1825 +1624 +1347 +1004 +644 +317 +70 +-63 +-87 +-51 +-22 +-48 +-122 +-211 +-288 +-342 +-415 +-541 +-741 +-990 +-1262 +-1516 +-1677 +-1701 +-1632 +-1582 +-1585 +-1604 +-1565 +-1466 +-1324 +-1178 +-1093 +-1080 +-1080 +-1004 +-832 +-641 +-501 +-404 +-326 +-229 +-96 +71 +275 +485 +643 +692 +640 +556 +483 +423 +395 +425 +488 +544 +592 +677 +818 +1055 +1371 +1698 +1968 +2108 +2123 +2059 +1955 +1804 +1600 +1317 +970 +613 +294 +57 +-72 +-97 +-65 +-44 +-77 +-148 +-228 +-291 +-337 +-410 +-543 +-750 +-1001 +-1276 +-1522 +-1668 +-1680 +-1608 +-1570 +-1584 +-1605 +-1567 +-1463 +-1318 +-1179 +-1099 +-1085 +-1074 +-977 +-793 +-600 +-463 +-376 +-297 +-201 +-72 +97 +295 +499 +643 +677 +622 +539 +471 +415 +391 +424 +489 +551 +609 +698 +843 +1087 +1400 +1727 +1978 +2100 +2107 +2027 +1913 +1754 +1545 +1264 +932 +589 +283 +57 +-65 +-82 +-53 +-38 +-74 +-150 +-228 +-291 +-344 +-427 +-572 +-785 +-1037 +-1297 +-1527 +-1661 +-1659 +-1591 +-1555 +-1567 +-1589 +-1543 +-1431 +-1288 +-1155 +-1081 +-1077 +-1065 +-961 +-779 +-593 +-464 +-379 +-301 +-201 +-69 +104 +309 +511 +651 +680 +620 +536 +469 +413 +389 +428 +494 +557 +616 +706 +857 +1102 +1418 +1735 +1970 +2083 +2074 +1989 +1874 +1717 +1510 +1236 +906 +566 +266 +41 +-75 +-93 +-65 +-52 +-93 +-164 +-241 +-303 +-355 +-442 +-591 +-807 +-1054 +-1306 +-1528 +-1645 +-1638 +-1578 +-1546 +-1560 +-1570 +-1516 +-1406 +-1270 +-1143 +-1082 +-1076 +-1055 +-949 +-766 +-589 +-464 +-377 +-300 +-201 +-61 +117 +325 +528 +657 +675 +606 +519 +453 +398 +388 +431 +503 +566 +623 +716 +867 +1117 +1429 +1738 +1974 +2083 +2061 +1978 +1867 +1713 +1514 +1232 +892 +546 +243 +24 +-83 +-91 +-61 +-53 +-97 +-169 +-243 +-302 +-356 +-445 +-595 +-806 +-1049 +-1300 +-1517 +-1627 +-1620 +-1566 +-1548 +-1568 +-1576 +-1522 +-1411 +-1264 +-1138 +-1078 +-1072 +-1048 +-933 +-749 +-573 +-453 +-374 +-301 +-197 +-56 +128 +338 +531 +652 +659 +589 +505 +441 +394 +392 +446 +521 +578 +634 +727 +888 +1152 +1471 +1777 +1996 +2079 +2049 +1962 +1848 +1700 +1497 +1206 +861 +514 +220 +18 +-74 +-72 +-42 +-37 +-83 +-159 +-236 +-302 +-364 +-459 +-613 +-823 +-1069 +-1327 +-1540 +-1646 +-1621 +-1561 +-1545 +-1565 +-1573 +-1517 +-1403 +-1256 +-1137 +-1082 +-1085 +-1056 +-929 +-738 +-563 +-446 +-368 +-290 +-180 +-33 +152 +355 +542 +650 +649 +581 +502 +442 +395 +398 +451 +522 +576 +630 +725 +898 +1167 +1491 +1797 +1997 +2078 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f3_174_614.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f3_174_614.samples new file mode 100644 index 00000000..1731a22c --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f3_174_614.samples @@ -0,0 +1,4096 @@ +1128 +998 +794 +606 +448 +288 +132 +33 +34 +140 +303 +471 +585 +596 +474 +267 +32 +-171 +-273 +-262 +-181 +-99 +-79 +-136 +-249 +-400 +-566 +-686 +-741 +-744 +-711 +-653 +-594 +-585 +-667 +-816 +-988 +-1138 +-1219 +-1207 +-1133 +-1057 +-1011 +-1019 +-1072 +-1167 +-1295 +-1426 +-1518 +-1563 +-1554 +-1490 +-1418 +-1363 +-1294 +-1186 +-1050 +-875 +-675 +-462 +-247 +-19 +202 +396 +534 +633 +732 +858 +1013 +1172 +1311 +1414 +1494 +1544 +1539 +1465 +1316 +1140 +990 +855 +691 +476 +266 +111 +19 +-38 +-103 +-172 +-228 +-255 +-265 +-303 +-415 +-583 +-750 +-880 +-977 +-1074 +-1134 +-1143 +-1108 +-1065 +-1038 +-1015 +-1002 +-984 +-969 +-974 +-1022 +-1087 +-1111 +-1076 +-987 +-866 +-732 +-612 +-562 +-628 +-795 +-1033 +-1287 +-1498 +-1621 +-1553 +-1224 +-687 +-104 +362 +648 +800 +982 +1327 +1799 +2270 +2627 +2859 +3018 +3126 +3145 +3045 +2858 +2688 +2623 +2634 +2618 +2515 +2332 +2136 +2004 +1888 +1646 +1221 +719 +282 +-11 +-165 +-223 +-227 +-190 +-139 +-128 +-180 +-299 +-456 +-581 +-640 +-673 +-740 +-810 +-801 +-690 +-517 +-393 +-396 +-494 +-593 +-607 +-501 +-356 +-271 +-245 +-216 +-156 +-94 +-38 +5 +35 +93 +189 +280 +327 +312 +254 +191 +121 +1 +-188 +-376 +-498 +-509 +-429 +-336 +-295 +-327 +-417 +-530 +-590 +-567 +-465 +-303 +-128 +-39 +-88 +-233 +-403 +-522 +-541 +-486 +-416 +-378 +-411 +-525 +-703 +-915 +-1115 +-1259 +-1298 +-1177 +-926 +-681 +-538 +-492 +-469 +-387 +-203 +53 +318 +579 +852 +1167 +1507 +1769 +1857 +1785 +1656 +1526 +1434 +1364 +1302 +1255 +1217 +1200 +1179 +1094 +925 +730 +562 +403 +246 +134 +112 +197 +354 +511 +645 +698 +631 +462 +222 +-26 +-190 +-229 +-160 +-59 +-3 +-42 +-163 +-325 +-503 +-660 +-751 +-774 +-751 +-701 +-643 +-616 +-667 +-797 +-971 +-1143 +-1262 +-1298 +-1245 +-1148 +-1059 +-1026 +-1049 +-1128 +-1241 +-1363 +-1469 +-1532 +-1553 +-1513 +-1437 +-1355 +-1272 +-1172 +-1052 +-902 +-712 +-503 +-292 +-86 +122 +327 +491 +617 +714 +821 +952 +1100 +1245 +1360 +1444 +1495 +1505 +1456 +1341 +1180 +1025 +899 +756 +559 +334 +136 +16 +-54 +-110 +-172 +-227 +-259 +-263 +-266 +-334 +-478 +-650 +-798 +-914 +-1013 +-1097 +-1138 +-1126 +-1089 +-1045 +-1012 +-985 +-970 +-962 +-979 +-1035 +-1108 +-1159 +-1144 +-1062 +-936 +-787 +-647 +-549 +-554 +-683 +-912 +-1191 +-1443 +-1605 +-1605 +-1369 +-881 +-289 +244 +616 +804 +939 +1185 +1598 +2082 +2506 +2804 +2997 +3130 +3175 +3109 +2931 +2713 +2591 +2573 +2575 +2524 +2383 +2204 +2061 +1960 +1796 +1447 +953 +463 +89 +-126 +-209 +-214 +-174 +-110 +-75 +-104 +-196 +-339 +-489 +-590 +-652 +-725 +-802 +-819 +-736 +-571 +-428 +-394 +-467 +-580 +-639 +-590 +-457 +-337 +-282 +-253 +-203 +-147 +-82 +-29 +6 +48 +124 +216 +281 +299 +255 +189 +132 +43 +-122 +-321 +-483 +-559 +-513 +-409 +-326 +-315 +-381 +-498 +-600 +-612 +-522 +-365 +-193 +-84 +-88 +-194 +-354 +-500 +-570 +-549 +-476 +-406 +-391 +-461 +-625 +-841 +-1051 +-1216 +-1297 +-1240 +-1021 +-742 +-536 +-434 +-407 +-362 +-224 +6 +269 +527 +775 +1048 +1390 +1711 +1903 +1915 +1791 +1634 +1488 +1380 +1302 +1250 +1215 +1193 +1177 +1125 +985 +793 +612 +440 +262 +104 +37 +96 +257 +448 +607 +696 +682 +543 +326 +73 +-149 +-246 +-212 +-99 +16 +42 +-38 +-186 +-386 +-578 +-714 +-776 +-782 +-742 +-672 +-612 +-611 +-711 +-888 +-1093 +-1262 +-1345 +-1323 +-1240 +-1157 +-1103 +-1097 +-1144 +-1239 +-1362 +-1470 +-1548 +-1581 +-1558 +-1497 +-1419 +-1332 +-1216 +-1081 +-923 +-738 +-536 +-333 +-125 +83 +283 +458 +595 +701 +814 +942 +1090 +1238 +1366 +1462 +1528 +1552 +1518 +1409 +1240 +1071 +940 +817 +643 +426 +219 +82 +7 +-49 +-116 +-194 +-248 +-262 +-260 +-291 +-396 +-555 +-710 +-838 +-950 +-1057 +-1136 +-1163 +-1138 +-1093 +-1053 +-1011 +-977 +-935 +-921 +-961 +-1054 +-1151 +-1195 +-1161 +-1051 +-908 +-747 +-614 +-557 +-624 +-811 +-1084 +-1379 +-1618 +-1718 +-1586 +-1182 +-591 +0 +447 +698 +836 +1025 +1375 +1835 +2278 +2622 +2862 +3045 +3161 +3167 +3037 +2833 +2662 +2600 +2591 +2548 +2428 +2265 +2118 +2014 +1899 +1626 +1177 +666 +233 +-59 +-209 +-263 +-246 +-176 +-109 +-102 +-172 +-303 +-463 +-589 +-660 +-724 +-817 +-877 +-834 +-677 +-483 +-381 +-416 +-529 +-616 +-608 +-491 +-362 +-289 +-263 +-214 +-140 +-75 +-20 +13 +43 +108 +210 +292 +321 +283 +207 +141 +68 +-56 +-242 +-409 +-506 +-501 +-419 +-335 +-302 +-341 +-446 +-566 +-626 +-584 +-450 +-267 +-102 +-47 +-123 +-279 +-446 +-556 +-572 +-514 +-436 +-389 +-417 +-534 +-724 +-954 +-1159 +-1286 +-1297 +-1138 +-865 +-620 +-466 +-404 +-362 +-263 +-71 +177 +443 +709 +980 +1283 +1611 +1853 +1934 +1901 +1794 +1657 +1513 +1380 +1288 +1237 +1221 +1214 +1177 +1065 +879 +690 +528 +353 +167 +26 +-6 +96 +266 +446 +591 +645 +569 +375 +115 +-137 +-295 +-307 +-208 +-79 +-9 +-37 +-144 +-296 +-477 +-634 +-723 +-756 +-738 +-680 +-601 +-561 +-611 +-745 +-931 +-1115 +-1245 +-1283 +-1227 +-1145 +-1078 +-1058 +-1101 +-1181 +-1301 +-1423 +-1530 +-1589 +-1602 +-1558 +-1476 +-1397 +-1314 +-1208 +-1072 +-905 +-697 +-479 +-256 +-30 +191 +391 +538 +644 +735 +846 +996 +1167 +1323 +1438 +1517 +1564 +1562 +1490 +1349 +1168 +1010 +876 +718 +507 +285 +120 +34 +-13 +-73 +-159 +-238 +-277 +-280 +-289 +-369 +-512 +-665 +-788 +-875 +-958 +-1035 +-1085 +-1099 +-1078 +-1049 +-1021 +-993 +-967 +-944 +-948 +-998 +-1076 +-1141 +-1153 +-1092 +-981 +-833 +-684 +-580 +-596 +-750 +-992 +-1274 +-1527 +-1691 +-1693 +-1437 +-928 +-321 +210 +565 +749 +921 +1225 +1669 +2149 +2537 +2806 +2999 +3140 +3196 +3127 +2960 +2786 +2702 +2697 +2684 +2594 +2419 +2229 +2092 +1998 +1794 +1397 +889 +418 +72 +-134 +-234 +-269 +-242 +-181 +-146 +-181 +-290 +-454 +-600 +-672 +-715 +-795 +-881 +-897 +-789 +-599 +-437 +-397 +-480 +-589 +-625 +-543 +-388 +-270 +-224 +-186 +-128 +-62 +-1 +41 +68 +122 +220 +322 +384 +387 +324 +248 +177 +63 +-116 +-315 +-458 +-501 +-442 +-355 +-303 +-323 +-406 +-522 +-612 +-615 +-525 +-366 +-185 +-74 +-96 +-226 +-407 +-558 +-610 +-562 +-473 +-406 +-397 +-469 +-619 +-820 +-1028 +-1186 +-1244 +-1151 +-909 +-657 +-499 +-441 +-412 +-330 +-151 +92 +344 +592 +845 +1144 +1482 +1764 +1883 +1846 +1739 +1631 +1529 +1427 +1315 +1229 +1187 +1178 +1177 +1096 +914 +710 +548 +404 +242 +79 +-3 +40 +194 +372 +519 +596 +558 +417 +213 +-21 +-222 +-309 +-270 +-155 +-56 +-51 +-138 +-285 +-461 +-613 +-706 +-745 +-734 +-698 +-629 +-569 +-584 +-693 +-862 +-1037 +-1173 +-1227 +-1192 +-1115 +-1041 +-1009 +-1029 +-1089 +-1194 +-1329 +-1449 +-1522 +-1542 +-1515 +-1454 +-1396 +-1335 +-1247 +-1142 +-1007 +-832 +-628 +-414 +-192 +23 +225 +387 +508 +603 +709 +842 +998 +1160 +1296 +1403 +1476 +1499 +1465 +1360 +1204 +1053 +927 +796 +614 +399 +211 +96 +42 +9 +-43 +-106 +-158 +-181 +-194 +-254 +-381 +-550 +-699 +-814 +-911 +-989 +-1042 +-1048 +-1033 +-1029 +-1032 +-1025 +-1001 +-974 +-973 +-1016 +-1096 +-1170 +-1187 +-1138 +-1047 +-939 +-812 +-699 +-656 +-735 +-935 +-1201 +-1461 +-1656 +-1709 +-1530 +-1101 +-519 +40 +460 +711 +882 +1135 +1552 +2046 +2488 +2802 +3005 +3157 +3234 +3199 +3052 +2856 +2727 +2715 +2735 +2683 +2530 +2312 +2123 +2010 +1873 +1566 +1093 +580 +167 +-95 +-219 +-258 +-249 +-209 +-173 +-191 +-273 +-409 +-556 +-648 +-683 +-732 +-816 +-872 +-823 +-666 +-485 +-400 +-452 +-560 +-632 +-592 +-450 +-303 +-226 +-204 +-163 +-106 +-44 +18 +61 +100 +176 +276 +355 +384 +350 +275 +200 +115 +-36 +-235 +-408 +-500 +-485 +-392 +-308 +-294 +-359 +-490 +-618 +-669 +-604 +-450 +-266 +-127 +-113 +-219 +-384 +-537 +-620 +-607 +-540 +-467 +-437 +-483 +-609 +-801 +-1009 +-1181 +-1278 +-1250 +-1054 +-774 +-554 +-458 +-441 +-406 +-269 +-29 +255 +529 +798 +1080 +1404 +1724 +1908 +1918 +1811 +1676 +1577 +1493 +1411 +1318 +1235 +1183 +1153 +1104 +968 +760 +559 +391 +229 +81 +-20 +-8 +110 +277 +447 +560 +576 +470 +281 +57 +-149 +-257 +-244 +-150 +-49 +-11 +-72 +-199 +-367 +-550 +-671 +-710 +-703 +-672 +-632 +-584 +-577 +-647 +-797 +-991 +-1168 +-1273 +-1262 +-1169 +-1067 +-1013 +-1023 +-1089 +-1193 +-1314 +-1433 +-1516 +-1558 +-1550 +-1499 +-1424 +-1349 +-1267 +-1165 +-1038 +-880 +-693 +-486 +-275 +-52 +170 +364 +510 +619 +711 +824 +970 +1127 +1269 +1377 +1462 +1513 +1510 +1438 +1298 +1137 +995 +864 +699 +484 +270 +121 +43 +0 +-53 +-113 +-154 +-167 +-161 +-188 +-293 +-461 +-636 +-772 +-877 +-967 +-1037 +-1064 +-1045 +-1018 +-1002 +-995 +-981 +-970 +-968 +-997 +-1067 +-1141 +-1177 +-1140 +-1035 +-900 +-757 +-627 +-562 +-612 +-788 +-1045 +-1322 +-1550 +-1669 +-1605 +-1279 +-731 +-140 +334 +613 +755 +921 +1247 +1736 +2240 +2646 +2916 +3096 +3211 +3233 +3120 +2921 +2746 +2688 +2719 +2725 +2636 +2455 +2252 +2098 +1976 +1733 +1294 +754 +278 +-43 +-204 +-258 +-257 +-220 +-177 +-174 +-242 +-367 +-528 +-659 +-717 +-741 +-795 +-858 +-847 +-730 +-545 +-407 +-404 +-507 +-620 +-644 +-538 +-370 +-248 +-198 +-167 +-118 +-64 +-9 +36 +70 +132 +235 +337 +400 +398 +334 +263 +191 +69 +-121 +-322 +-452 +-479 +-414 +-330 +-291 +-320 +-409 +-533 +-629 +-633 +-545 +-382 +-204 +-107 +-153 +-315 +-505 +-640 +-655 +-580 +-483 +-424 +-440 +-542 +-715 +-926 +-1128 +-1268 +-1303 +-1164 +-885 +-613 +-456 +-413 +-401 +-323 +-134 +122 +385 +645 +918 +1231 +1584 +1870 +1966 +1891 +1745 +1599 +1482 +1387 +1306 +1247 +1205 +1177 +1141 +1033 +844 +630 +443 +262 +72 +-72 +-111 +-14 +168 +350 +485 +539 +481 +322 +101 +-139 +-300 +-318 +-209 +-53 +43 +23 +-98 +-263 +-437 +-580 +-662 +-679 +-648 +-587 +-511 +-472 +-519 +-660 +-848 +-1037 +-1177 +-1222 +-1166 +-1070 +-986 +-952 +-993 +-1087 +-1224 +-1367 +-1474 +-1535 +-1561 +-1528 +-1458 +-1384 +-1303 +-1207 +-1099 +-968 +-789 +-579 +-363 +-147 +61 +256 +418 +550 +668 +787 +923 +1076 +1224 +1346 +1439 +1499 +1518 +1475 +1366 +1210 +1056 +922 +775 +575 +351 +167 +53 +-6 +-57 +-122 +-186 +-221 +-224 +-229 +-287 +-420 +-576 +-715 +-828 +-933 +-1026 +-1072 +-1057 +-1006 +-958 +-925 +-912 +-892 +-869 +-874 +-927 +-1016 +-1100 +-1130 +-1084 +-972 +-831 +-690 +-597 +-606 +-751 +-1004 +-1299 +-1579 +-1768 +-1788 +-1553 +-1058 +-447 +101 +475 +662 +798 +1064 +1510 +2023 +2475 +2786 +3001 +3163 +3245 +3202 +3036 +2838 +2712 +2697 +2699 +2648 +2508 +2327 +2168 +2061 +1882 +1507 +991 +485 +91 +-157 +-268 +-296 +-264 +-202 +-165 +-214 +-333 +-498 +-658 +-755 +-806 +-870 +-944 +-946 +-839 +-647 +-470 +-417 +-487 +-596 +-641 +-566 +-405 +-264 +-200 +-162 +-91 +-14 +53 +108 +136 +178 +261 +358 +429 +444 +402 +331 +259 +153 +-31 +-240 +-410 +-484 +-451 +-370 +-312 +-322 +-408 +-538 +-660 +-700 +-636 +-502 +-335 +-213 +-210 +-318 +-488 +-642 +-713 +-677 +-589 +-504 +-475 +-530 +-671 +-861 +-1046 +-1192 +-1252 +-1180 +-949 +-652 +-428 +-313 +-265 +-211 +-79 +140 +391 +645 +911 +1190 +1517 +1830 +1997 +1993 +1873 +1713 +1554 +1415 +1302 +1228 +1174 +1141 +1113 +1042 +886 +680 +493 +314 +133 +-35 +-117 +-66 +89 +272 +426 +517 +509 +399 +204 +-35 +-252 +-351 +-300 +-159 +-21 +18 +-55 +-197 +-380 +-551 +-663 +-715 +-717 +-668 +-585 +-498 +-476 +-567 +-746 +-953 +-1124 +-1208 +-1186 +-1101 +-1021 +-975 +-977 +-1032 +-1129 +-1262 +-1402 +-1504 +-1558 +-1553 +-1496 +-1429 +-1367 +-1286 +-1172 +-1032 +-851 +-644 +-436 +-233 +-35 +157 +330 +470 +586 +711 +857 +1018 +1177 +1313 +1415 +1492 +1528 +1499 +1405 +1255 +1111 +993 +872 +703 +483 +282 +148 +78 +18 +-50 +-121 +-167 +-180 +-176 +-227 +-347 +-507 +-655 +-766 +-872 +-972 +-1047 +-1075 +-1053 +-1015 +-986 +-970 +-955 +-931 +-918 +-945 +-1028 +-1121 +-1176 +-1165 +-1081 +-944 +-794 +-664 +-612 +-692 +-900 +-1191 +-1487 +-1715 +-1803 +-1663 +-1260 +-684 +-96 +366 +650 +819 +1024 +1382 +1851 +2307 +2673 +2933 +3130 +3260 +3270 +3148 +2959 +2812 +2772 +2765 +2716 +2589 +2402 +2227 +2110 +1981 +1696 +1228 +705 +250 +-67 +-247 +-326 +-320 +-272 +-220 +-225 +-306 +-450 +-612 +-739 +-817 +-890 +-978 +-1029 +-968 +-797 +-597 +-473 +-485 +-581 +-665 +-652 +-528 +-376 +-281 +-225 +-152 +-61 +25 +95 +147 +192 +264 +361 +442 +483 +458 +393 +319 +226 +78 +-125 +-316 +-431 +-445 +-387 +-325 +-323 +-392 +-520 +-660 +-729 +-692 +-567 +-399 +-257 +-217 +-298 +-449 +-599 +-690 +-683 +-610 +-526 +-469 +-470 +-553 +-714 +-913 +-1086 +-1185 +-1160 +-978 +-703 +-475 +-346 +-286 +-222 +-98 +98 +330 +570 +811 +1068 +1363 +1676 +1897 +1946 +1878 +1760 +1620 +1467 +1317 +1199 +1129 +1093 +1072 +1023 +893 +701 +523 +376 +212 +31 +-106 +-134 +-20 +161 +342 +484 +538 +481 +326 +111 +-116 +-265 +-282 +-184 +-48 +36 +21 +-82 +-234 +-406 +-548 +-626 +-648 +-636 +-582 +-509 +-471 +-512 +-645 +-825 +-1013 +-1149 +-1186 +-1144 +-1071 +-1014 +-1007 +-1045 +-1140 +-1274 +-1401 +-1503 +-1560 +-1576 +-1538 +-1480 +-1422 +-1348 +-1244 +-1110 +-936 +-734 +-523 +-314 +-100 +113 +309 +458 +559 +648 +756 +910 +1084 +1242 +1359 +1444 +1490 +1484 +1413 +1269 +1097 +941 +819 +677 +495 +302 +145 +59 +13 +-24 +-76 +-128 +-161 +-175 +-203 +-291 +-437 +-590 +-713 +-807 +-891 +-969 +-1020 +-1029 +-1016 +-1001 +-984 +-964 +-944 +-934 +-951 +-1001 +-1067 +-1117 +-1128 +-1089 +-997 +-865 +-720 +-622 +-642 +-801 +-1057 +-1343 +-1591 +-1749 +-1735 +-1468 +-958 +-365 +150 +506 +710 +898 +1215 +1670 +2154 +2546 +2812 +3006 +3148 +3208 +3142 +2977 +2801 +2723 +2726 +2718 +2634 +2462 +2259 +2106 +2002 +1798 +1399 +892 +434 +96 +-113 +-219 +-257 +-237 +-184 +-158 +-202 +-320 +-483 +-622 +-694 +-738 +-815 +-909 +-935 +-834 +-645 +-481 +-437 +-514 +-621 +-660 +-573 +-414 +-285 +-234 +-193 +-120 +-38 +48 +114 +156 +216 +316 +425 +494 +500 +441 +357 +283 +163 +-25 +-231 +-391 +-455 +-414 +-340 +-303 +-344 +-459 +-603 +-713 +-720 +-625 +-475 +-310 +-223 +-257 +-388 +-557 +-686 +-727 +-678 +-599 +-531 +-509 +-572 +-712 +-901 +-1086 +-1211 +-1233 +-1104 +-837 +-561 +-391 +-314 +-266 +-172 +12 +254 +503 +749 +1000 +1289 +1611 +1876 +1977 +1928 +1819 +1703 +1582 +1443 +1296 +1179 +1109 +1069 +1033 +930 +738 +530 +371 +232 +81 +-70 +-149 +-91 +65 +255 +417 +506 +480 +346 +164 +-44 +-210 +-256 +-188 +-62 +39 +38 +-61 +-206 +-372 +-512 +-593 +-625 +-625 +-594 +-541 +-498 +-523 +-636 +-805 +-986 +-1126 +-1194 +-1175 +-1114 +-1051 +-1020 +-1046 +-1119 +-1239 +-1375 +-1487 +-1549 +-1576 +-1553 +-1496 +-1433 +-1367 +-1275 +-1156 +-1012 +-827 +-618 +-397 +-179 +36 +231 +386 +501 +593 +694 +825 +984 +1149 +1281 +1377 +1441 +1466 +1438 +1338 +1182 +1023 +891 +754 +582 +383 +207 +97 +40 +0 +-41 +-87 +-118 +-127 +-144 +-215 +-346 +-505 +-642 +-748 +-850 +-944 +-1005 +-1013 +-990 +-969 +-958 +-953 +-943 +-939 +-953 +-1000 +-1082 +-1149 +-1166 +-1128 +-1049 +-943 +-832 +-747 +-742 +-849 +-1049 +-1290 +-1517 +-1684 +-1723 +-1549 +-1117 +-532 +33 +456 +702 +881 +1165 +1615 +2127 +2563 +2847 +3019 +3144 +3222 +3196 +3057 +2871 +2743 +2729 +2743 +2692 +2536 +2316 +2122 +1991 +1829 +1506 +1038 +554 +174 +-68 +-188 +-243 +-259 +-225 +-187 +-209 +-311 +-467 +-615 +-700 +-727 +-762 +-850 +-909 +-866 +-708 +-519 +-434 +-484 +-593 +-658 +-603 +-445 +-291 +-218 +-199 +-157 +-92 +-18 +57 +92 +121 +190 +285 +375 +407 +373 +299 +215 +121 +-34 +-229 +-395 +-478 +-453 +-375 +-315 +-306 +-356 +-461 +-563 +-604 +-558 +-437 +-276 +-141 +-124 +-232 +-399 +-548 +-617 +-588 +-513 +-446 +-426 +-490 +-627 +-819 +-1019 +-1173 +-1240 +-1177 +-970 +-704 +-506 +-412 +-387 +-339 +-198 +38 +308 +568 +826 +1105 +1423 +1722 +1879 +1875 +1774 +1646 +1538 +1448 +1357 +1277 +1209 +1160 +1119 +1048 +905 +704 +519 +354 +191 +53 +-30 +-11 +110 +258 +388 +472 +467 +363 +185 +-35 +-227 +-319 +-276 +-163 +-62 +-41 +-117 +-241 +-382 +-519 +-616 +-653 +-651 +-611 +-548 +-494 +-482 +-562 +-715 +-899 +-1065 +-1158 +-1153 +-1086 +-1007 +-963 +-980 +-1054 +-1171 +-1307 +-1430 +-1520 +-1569 +-1574 +-1534 +-1466 +-1398 +-1306 +-1199 +-1068 +-902 +-706 +-497 +-289 +-79 +130 +322 +480 +609 +729 +859 +1008 +1163 +1297 +1400 +1473 +1511 +1500 +1424 +1290 +1139 +1012 +884 +716 +503 +288 +138 +56 +7 +-52 +-115 +-158 +-169 +-165 +-203 +-317 +-483 +-649 +-785 +-902 +-1008 +-1079 +-1089 +-1051 +-1003 +-977 +-966 +-963 +-950 +-948 +-986 +-1071 +-1161 +-1198 +-1157 +-1057 +-939 +-821 +-724 +-685 +-751 +-930 +-1176 +-1442 +-1658 +-1743 +-1630 +-1258 +-698 +-119 +337 +614 +772 +972 +1335 +1824 +2308 +2684 +2937 +3112 +3220 +3227 +3105 +2907 +2736 +2675 +2697 +2701 +2611 +2434 +2232 +2078 +1940 +1684 +1245 +726 +276 +-39 +-205 +-266 +-263 +-229 +-190 +-195 +-269 +-393 +-548 +-674 +-750 +-808 +-873 +-915 +-872 +-736 +-566 +-451 +-448 +-528 +-601 +-603 +-501 +-363 +-271 +-222 +-171 +-93 +-20 +42 +86 +117 +171 +259 +346 +392 +372 +303 +225 +144 +15 +-178 +-373 +-514 +-545 +-479 +-385 +-337 +-370 +-467 +-587 +-650 +-616 +-504 +-345 +-198 +-134 +-186 +-324 +-474 +-580 +-591 +-530 +-449 +-391 +-407 +-512 +-685 +-891 +-1087 +-1214 +-1222 +-1062 +-791 +-539 +-403 +-366 +-348 +-267 +-76 +174 +431 +674 +933 +1244 +1576 +1831 +1901 +1829 +1707 +1567 +1445 +1341 +1260 +1200 +1165 +1160 +1133 +1031 +850 +657 +483 +311 +146 +26 +18 +117 +281 +441 +563 +609 +536 +367 +139 +-111 +-277 +-299 +-209 +-78 +-7 +-51 +-176 +-342 +-517 +-661 +-744 +-767 +-748 +-679 +-586 +-531 +-574 +-721 +-910 +-1081 +-1195 +-1217 +-1161 +-1076 +-1008 +-981 +-1006 +-1083 +-1204 +-1341 +-1449 +-1519 +-1535 +-1498 +-1436 +-1379 +-1314 +-1223 +-1107 +-955 +-758 +-546 +-341 +-143 +47 +225 +376 +505 +625 +754 +896 +1056 +1215 +1350 +1447 +1497 +1489 +1434 +1316 +1175 +1056 +942 +795 +598 +394 +237 +150 +95 +29 +-49 +-123 +-160 +-164 +-169 +-247 +-405 +-590 +-754 +-882 +-992 +-1083 +-1125 +-1119 +-1085 +-1054 +-1032 +-1016 +-1003 +-991 +-1004 +-1066 +-1159 +-1231 +-1240 +-1161 +-1031 +-873 +-722 +-638 +-658 +-797 +-1017 +-1268 +-1496 +-1645 +-1632 +-1374 +-880 +-275 +261 +627 +833 +994 +1275 +1710 +2183 +2580 +2853 +3040 +3179 +3243 +3173 +2985 +2774 +2645 +2621 +2620 +2557 +2415 +2226 +2073 +1961 +1772 +1404 +912 +434 +68 +-160 +-272 +-293 +-248 +-170 +-125 +-156 +-272 +-432 +-588 +-681 +-727 +-791 +-871 +-885 +-791 +-611 +-447 +-398 +-471 +-588 +-642 +-578 +-438 +-324 +-274 +-243 +-175 +-89 +-16 +34 +55 +84 +160 +260 +333 +341 +297 +226 +161 +72 +-85 +-274 +-428 +-492 +-463 +-382 +-311 +-302 +-358 +-464 +-556 +-577 +-499 +-355 +-188 +-75 +-89 +-203 +-368 +-507 +-564 +-535 +-463 +-400 +-395 +-476 +-644 +-854 +-1056 +-1205 +-1268 +-1194 +-975 +-710 +-515 +-427 +-394 +-339 +-196 +33 +290 +542 +800 +1081 +1407 +1708 +1871 +1878 +1783 +1650 +1514 +1388 +1290 +1233 +1204 +1190 +1167 +1092 +939 +745 +576 +410 +228 +63 +-18 +35 +188 +364 +508 +586 +572 +451 +247 +1 +-222 +-334 +-299 +-178 +-53 +-12 +-83 +-226 +-409 +-585 +-699 +-742 +-736 +-690 +-619 +-554 +-549 +-632 +-793 +-974 +-1128 +-1209 +-1191 +-1126 +-1054 +-1009 +-1014 +-1064 +-1157 +-1285 +-1409 +-1500 +-1547 +-1532 +-1480 +-1420 +-1356 +-1266 +-1150 +-995 +-804 +-594 +-383 +-178 +18 +199 +353 +475 +586 +708 +857 +1023 +1179 +1309 +1401 +1467 +1490 +1453 +1352 +1195 +1039 +916 +799 +643 +443 +252 +124 +58 +15 +-40 +-103 +-145 +-160 +-163 +-210 +-333 +-501 +-657 +-781 +-890 +-997 +-1085 +-1125 +-1118 +-1087 +-1056 +-1039 +-1024 +-1019 +-1020 +-1045 +-1110 +-1178 +-1211 +-1182 +-1096 +-967 +-818 +-686 +-639 +-723 +-928 +-1194 +-1457 +-1654 +-1729 +-1588 +-1186 +-607 +-20 +434 +714 +897 +1134 +1522 +2002 +2450 +2777 +2991 +3144 +3243 +3235 +3114 +2924 +2768 +2713 +2701 +2646 +2508 +2306 +2114 +1988 +1850 +1565 +1102 +596 +175 +-107 +-247 +-291 +-273 +-208 +-146 +-138 +-192 +-308 +-437 +-541 +-602 +-675 +-775 +-828 +-772 +-609 +-421 +-323 +-361 +-474 +-565 +-559 +-454 +-331 +-277 +-265 +-227 +-159 +-89 +-32 +0 +30 +88 +175 +245 +267 +232 +165 +112 +48 +-78 +-259 +-435 +-537 +-529 +-442 +-349 +-310 +-338 +-421 +-519 +-557 +-494 +-359 +-192 +-58 +-27 +-117 +-280 +-438 +-533 +-533 +-470 +-408 +-384 +-433 +-565 +-755 +-961 +-1137 +-1247 +-1240 +-1082 +-836 +-632 +-521 +-476 +-417 +-288 +-80 +168 +427 +693 +989 +1323 +1650 +1869 +1916 +1856 +1763 +1659 +1540 +1408 +1298 +1240 +1216 +1206 +1153 +1015 +814 +635 +495 +343 +173 +35 +15 +125 +302 +456 +565 +586 +495 +326 +102 +-132 +-282 +-299 +-215 +-99 +-46 +-93 +-210 +-363 +-517 +-640 +-712 +-739 +-734 +-685 +-609 +-570 +-612 +-750 +-930 +-1099 +-1209 +-1219 +-1162 +-1091 +-1045 +-1043 +-1089 +-1170 +-1284 +-1399 +-1492 +-1564 +-1588 +-1562 +-1503 +-1436 +-1358 +-1250 +-1121 +-951 +-737 +-510 +-284 +-72 +124 +309 +459 +584 +698 +827 +984 +1154 +1313 +1430 +1512 +1552 +1544 +1472 +1334 +1167 +1013 +871 +706 +505 +295 +134 +39 +-16 +-72 +-132 +-185 +-215 +-228 +-267 +-375 +-544 +-720 +-860 +-966 +-1051 +-1116 +-1138 +-1113 +-1082 +-1060 +-1034 +-1004 +-968 +-942 +-948 +-993 +-1050 +-1070 +-1037 +-954 +-844 +-726 +-606 +-534 +-573 +-737 +-990 +-1265 +-1504 +-1640 +-1599 +-1314 +-810 +-247 +231 +558 +747 +947 +1290 +1757 +2232 +2599 +2831 +2984 +3096 +3122 +3044 +2880 +2714 +2643 +2643 +2627 +2532 +2360 +2166 +2022 +1905 +1682 +1281 +790 +350 +20 +-167 +-248 +-253 +-206 +-135 +-97 +-137 +-242 +-388 +-514 +-579 +-621 +-704 +-784 +-789 +-681 +-494 +-344 +-322 +-416 +-538 +-584 +-512 +-384 +-287 +-260 +-233 +-175 +-117 +-53 +-8 +20 +62 +135 +218 +264 +263 +213 +137 +62 +-46 +-220 +-398 +-532 +-574 +-515 +-424 +-361 +-369 +-442 +-544 +-612 +-575 +-452 +-285 +-122 +-46 +-86 +-207 +-353 +-456 +-464 +-406 +-329 +-290 +-324 +-441 +-628 +-841 +-1042 +-1182 +-1228 +-1128 +-899 +-676 +-553 +-520 +-507 +-430 +-242 +19 +287 +559 +829 +1138 +1478 +1744 +1847 +1799 +1707 +1620 +1540 +1461 +1370 +1294 +1247 +1228 +1204 +1114 +933 +737 +581 +430 +278 +149 +101 +170 +319 +484 +612 +660 +590 +420 +199 +-26 +-204 +-258 +-215 +-126 +-64 +-103 +-216 +-374 +-547 +-693 +-773 +-803 +-797 +-768 +-714 +-671 +-696 +-806 +-972 +-1143 +-1268 +-1303 +-1246 +-1160 +-1092 +-1069 +-1090 +-1153 +-1252 +-1368 +-1468 +-1532 +-1556 +-1528 +-1462 +-1388 +-1315 +-1216 +-1091 +-937 +-747 +-533 +-310 +-88 +129 +326 +481 +594 +699 +821 +969 +1130 +1277 +1391 +1477 +1535 +1547 +1493 +1366 +1193 +1033 +907 +760 +559 +330 +133 +10 +-55 +-105 +-163 +-217 +-248 +-253 +-264 +-339 +-498 +-681 +-846 +-966 +-1070 +-1146 +-1182 +-1156 +-1094 +-1037 +-1004 +-987 +-981 +-981 +-982 +-1015 +-1068 +-1114 +-1100 +-1023 +-894 +-751 +-621 +-543 +-571 +-717 +-948 +-1211 +-1445 +-1599 +-1615 +-1400 +-940 +-377 +136 +494 +702 +875 +1168 +1623 +2123 +2548 +2843 +3025 +3143 +3178 +3096 +2917 +2722 +2622 +2624 +2643 +2590 +2449 +2255 +2081 +1952 +1759 +1402 +918 +454 +111 +-91 +-171 +-185 +-145 +-73 +-23 +-36 +-126 +-278 +-431 +-521 +-557 +-602 +-677 +-713 +-661 +-523 +-373 +-322 +-380 +-495 +-572 +-554 +-450 +-353 +-311 +-288 +-240 +-180 +-126 +-80 +-54 +-20 +50 +139 +198 +211 +167 +100 +35 +-56 +-210 +-395 +-541 +-601 +-558 +-463 +-378 +-353 +-384 +-463 +-539 +-545 +-461 +-308 +-129 +-4 +3 +-100 +-254 +-390 +-440 +-404 +-331 +-275 +-283 +-371 +-547 +-770 +-997 +-1170 +-1247 +-1186 +-973 +-721 +-547 +-479 +-470 +-433 +-309 +-92 +162 +425 +707 +1020 +1369 +1684 +1841 +1822 +1715 +1586 +1474 +1390 +1322 +1272 +1243 +1225 +1212 +1148 +997 +798 +622 +467 +304 +175 +129 +196 +353 +520 +643 +715 +686 +553 +343 +85 +-145 +-254 +-222 +-102 +-2 +-5 +-125 +-315 +-526 +-710 +-831 +-868 +-853 +-807 +-741 +-687 +-701 +-805 +-969 +-1148 +-1304 +-1387 +-1376 +-1293 +-1196 +-1123 +-1112 +-1164 +-1260 +-1378 +-1470 +-1529 +-1556 +-1555 +-1511 +-1445 +-1363 +-1246 +-1102 +-944 +-763 +-564 +-352 +-133 +89 +297 +468 +596 +702 +815 +954 +1114 +1270 +1398 +1493 +1559 +1583 +1545 +1434 +1263 +1086 +937 +801 +621 +401 +183 +24 +-66 +-120 +-168 +-220 +-251 +-263 +-271 +-323 +-448 +-616 +-773 +-901 +-1013 +-1115 +-1179 +-1177 +-1123 +-1058 +-1013 +-990 +-976 +-963 +-961 +-987 +-1059 +-1134 +-1154 +-1102 +-979 +-822 +-661 +-540 +-508 +-606 +-821 +-1096 +-1363 +-1558 +-1626 +-1484 +-1088 +-522 +38 +467 +718 +862 +1067 +1429 +1900 +2356 +2700 +2926 +3079 +3157 +3125 +2980 +2769 +2600 +2538 +2533 +2507 +2413 +2266 +2118 +2008 +1866 +1568 +1116 +631 +233 +-28 +-157 +-190 +-153 +-65 +21 +41 +-32 +-173 +-340 +-466 +-531 +-590 +-673 +-728 +-691 +-553 +-388 +-307 +-348 +-467 +-572 +-583 +-501 +-388 +-324 +-306 +-271 +-210 +-152 +-98 +-70 +-53 +-3 +77 +149 +186 +169 +113 +52 +-12 +-131 +-305 +-471 +-566 +-557 +-470 +-374 +-324 +-342 +-413 +-493 +-521 +-455 +-328 +-173 +-31 +15 +-48 +-178 +-328 +-426 +-441 +-400 +-342 +-320 +-378 +-526 +-739 +-963 +-1157 +-1278 +-1280 +-1129 +-877 +-652 +-531 +-497 +-481 +-394 +-199 +57 +333 +614 +905 +1240 +1584 +1820 +1883 +1809 +1676 +1544 +1442 +1353 +1285 +1242 +1222 +1214 +1180 +1075 +899 +719 +550 +369 +195 +85 +96 +230 +418 +587 +697 +715 +617 +424 +177 +-80 +-248 +-271 +-183 +-54 +11 +-41 +-176 +-366 +-573 +-735 +-828 +-856 +-827 +-752 +-665 +-626 +-686 +-842 +-1035 +-1213 +-1331 +-1354 +-1306 +-1234 +-1162 +-1119 +-1121 +-1186 +-1302 +-1428 +-1526 +-1578 +-1579 +-1535 +-1470 +-1404 +-1306 +-1174 +-1013 +-822 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f4_349_228.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f4_349_228.samples new file mode 100644 index 00000000..4fe707da --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f4_349_228.samples @@ -0,0 +1,4096 @@ +569 +459 +254 +-5 +-213 +-245 +-61 +254 +599 +922 +1217 +1388 +1351 +1079 +569 +-166 +-1069 +-1996 +-2830 +-3426 +-3556 +-3015 +-1774 +-88 +1565 +2760 +3265 +3143 +2613 +1869 +1046 +303 +-201 +-423 +-495 +-602 +-797 +-977 +-1007 +-885 +-726 +-640 +-619 +-575 +-442 +-235 +9 +266 +520 +728 +872 +952 +986 +945 +815 +662 +548 +447 +278 +7 +-369 +-835 +-1311 +-1671 +-1815 +-1676 +-1224 +-539 +158 +614 +730 +605 +383 +139 +-86 +-177 +-47 +267 +606 +818 +841 +760 +692 +619 +462 +221 +-26 +-193 +-250 +-229 +-154 +-46 +56 +105 +37 +-136 +-309 +-429 +-502 +-544 +-527 +-421 +-272 +-160 +-80 +69 +328 +612 +799 +834 +777 +720 +653 +470 +112 +-366 +-809 +-1097 +-1210 +-1181 +-1029 +-736 +-351 +47 +368 +560 +602 +503 +311 +63 +-163 +-262 +-153 +130 +478 +833 +1157 +1392 +1422 +1224 +792 +106 +-789 +-1758 +-2648 +-3327 +-3585 +-3202 +-2107 +-493 +1207 +2545 +3216 +3209 +2727 +1993 +1176 +420 +-126 +-383 +-455 +-529 +-685 +-869 +-949 +-893 +-763 +-665 +-630 +-583 +-462 +-263 +-17 +243 +505 +722 +863 +943 +985 +977 +873 +719 +587 +480 +325 +75 +-288 +-761 +-1264 +-1666 +-1854 +-1763 +-1366 +-708 +20 +559 +755 +668 +434 +161 +-92 +-230 +-141 +151 +507 +765 +832 +758 +675 +595 +442 +202 +-55 +-233 +-297 +-264 +-176 +-56 +68 +148 +103 +-69 +-265 +-408 +-491 +-532 +-518 +-417 +-252 +-113 +-31 +77 +293 +556 +759 +828 +787 +735 +692 +574 +277 +-176 +-656 +-1021 +-1207 +-1236 +-1129 +-886 +-536 +-136 +229 +482 +587 +543 +384 +153 +-87 +-235 +-189 +46 +375 +738 +1090 +1369 +1463 +1317 +950 +340 +-515 +-1504 +-2459 +-3229 +-3612 +-3379 +-2428 +-902 +820 +2286 +3143 +3292 +2897 +2181 +1337 +544 +-48 +-356 +-444 +-487 +-611 +-785 +-896 +-885 +-793 +-711 +-679 +-642 +-532 +-338 +-87 +182 +458 +696 +847 +913 +937 +931 +866 +739 +622 +527 +406 +203 +-115 +-565 +-1091 +-1557 +-1831 +-1825 +-1500 +-897 +-173 +426 +710 +688 +476 +180 +-124 +-333 +-316 +-59 +307 +618 +760 +751 +693 +626 +495 +259 +-11 +-208 +-293 +-265 +-170 +-35 +106 +207 +202 +48 +-164 +-335 +-446 +-511 +-533 +-467 +-315 +-161 +-58 +42 +224 +469 +686 +779 +754 +688 +642 +564 +339 +-50 +-511 +-894 +-1115 +-1176 +-1094 +-890 +-580 +-215 +137 +415 +556 +544 +402 +177 +-59 +-221 +-213 +-23 +276 +618 +976 +1296 +1468 +1411 +1114 +585 +-193 +-1157 +-2146 +-3009 +-3546 +-3512 +-2736 +-1304 +432 +2005 +3042 +3362 +3075 +2408 +1550 +687 +-3 +-396 +-517 +-537 +-608 +-751 +-858 +-846 +-750 +-670 +-652 +-651 +-572 +-383 +-124 +157 +449 +715 +895 +975 +984 +954 +868 +727 +589 +492 +388 +220 +-42 +-435 +-939 +-1443 +-1794 +-1878 +-1635 +-1087 +-370 +281 +656 +710 +552 +285 +-22 +-279 +-342 +-145 +213 +560 +747 +754 +691 +633 +526 +304 +13 +-231 +-349 +-338 +-249 +-120 +24 +144 +184 +78 +-124 +-310 +-429 +-492 +-511 +-461 +-326 +-170 +-62 +33 +201 +442 +667 +786 +770 +696 +636 +560 +361 +-2 +-453 +-857 +-1112 +-1208 +-1159 +-974 +-673 +-308 +54 +354 +538 +572 +460 +258 +16 +-172 +-199 +-33 +256 +582 +923 +1243 +1449 +1450 +1216 +747 +30 +-899 +-1897 +-2811 +-3470 +-3624 +-3052 +-1756 +-40 +1635 +2842 +3359 +3223 +2652 +1838 +935 +151 +-338 +-507 +-513 +-546 +-671 +-800 +-819 +-737 +-651 +-638 +-669 +-638 +-479 +-211 +93 +405 +692 +909 +1026 +1057 +1026 +927 +768 +607 +503 +419 +273 +42 +-303 +-771 +-1281 +-1681 +-1854 +-1725 +-1261 +-565 +128 +585 +713 +598 +357 +63 +-219 +-360 +-249 +74 +443 +697 +768 +728 +678 +594 +405 +121 +-156 +-325 +-359 +-286 +-153 +5 +144 +214 +146 +-38 +-241 +-391 +-493 +-544 +-525 +-410 +-247 +-124 +-30 +124 +370 +622 +774 +778 +701 +627 +562 +397 +74 +-361 +-779 +-1059 +-1181 +-1168 +-1035 +-777 +-431 +-66 +247 +458 +523 +457 +291 +73 +-123 +-182 +-52 +218 +540 +857 +1155 +1359 +1382 +1201 +800 +163 +-688 +-1636 +-2552 +-3280 +-3590 +-3240 +-2140 +-504 +1226 +2590 +3296 +3315 +2836 +2062 +1168 +327 +-274 +-543 +-584 +-592 +-672 +-790 +-825 +-753 +-647 +-596 +-621 +-624 +-517 +-282 +22 +348 +656 +898 +1047 +1105 +1091 +996 +824 +628 +483 +390 +264 +61 +-240 +-658 +-1144 +-1570 +-1807 +-1771 +-1402 +-765 +-50 +486 +698 +640 +436 +171 +-106 +-288 +-253 +10 +367 +651 +762 +735 +681 +617 +467 +219 +-57 +-264 +-344 +-303 +-179 +-18 +131 +215 +172 +1 +-198 +-360 +-474 +-545 +-544 +-444 +-277 +-134 +-43 +85 +306 +569 +751 +786 +710 +624 +557 +427 +144 +-272 +-701 +-1022 +-1179 +-1182 +-1067 +-830 +-494 +-129 +207 +449 +550 +499 +341 +125 +-87 +-193 +-115 +134 +458 +790 +1101 +1335 +1393 +1241 +887 +302 +-506 +-1440 +-2357 +-3130 +-3554 +-3382 +-2484 +-973 +758 +2252 +3150 +3345 +2993 +2295 +1432 +563 +-130 +-508 +-614 +-629 +-684 +-776 +-811 +-738 +-616 +-539 +-545 +-579 +-536 +-372 +-113 +192 +523 +807 +997 +1083 +1098 +1048 +907 +704 +520 +394 +268 +88 +-180 +-563 +-1020 +-1444 +-1713 +-1736 +-1458 +-903 +-216 +356 +635 +641 +476 +239 +-23 +-221 +-238 +-41 +282 +576 +728 +739 +702 +653 +536 +311 +43 +-178 +-301 +-310 +-229 +-86 +77 +193 +190 +48 +-146 +-303 +-417 +-502 +-540 +-480 +-337 +-186 +-87 +15 +213 +483 +714 +810 +774 +686 +613 +504 +252 +-149 +-601 +-961 +-1160 +-1199 +-1100 +-887 +-572 +-212 +138 +412 +543 +516 +353 +121 +-111 +-243 +-191 +43 +374 +729 +1063 +1330 +1422 +1281 +935 +380 +-388 +-1309 +-2229 +-3020 +-3511 +-3461 +-2711 +-1325 +376 +1944 +2991 +3348 +3114 +2493 +1660 +787 +54 +-409 +-595 +-644 +-710 +-809 +-867 +-816 +-693 +-594 +-580 +-609 +-581 +-454 +-228 +62 +397 +723 +969 +1102 +1137 +1102 +978 +787 +590 +444 +306 +124 +-125 +-478 +-915 +-1351 +-1654 +-1738 +-1539 +-1054 +-408 +189 +535 +600 +484 +276 +40 +-162 +-205 +-39 +259 +550 +720 +745 +709 +678 +590 +399 +143 +-91 +-231 +-273 +-227 +-110 +37 +168 +204 +96 +-101 +-280 +-407 +-502 +-553 +-529 +-406 +-247 +-127 +-12 +173 +442 +704 +853 +860 +780 +695 +579 +346 +-39 +-495 +-895 +-1141 +-1213 +-1131 +-926 +-615 +-257 +92 +377 +535 +537 +390 +157 +-96 +-266 +-258 +-54 +276 +641 +1003 +1311 +1477 +1396 +1075 +533 +-223 +-1131 +-2056 +-2861 +-3415 +-3490 +-2911 +-1669 +-22 +1579 +2747 +3251 +3142 +2629 +1860 +994 +218 +-301 +-536 +-613 +-689 +-820 +-918 +-890 +-757 +-620 +-563 +-571 +-556 +-452 +-262 +-15 +277 +581 +835 +991 +1059 +1054 +969 +802 +606 +455 +314 +140 +-96 +-413 +-826 +-1263 +-1593 +-1717 +-1560 +-1129 +-501 +116 +511 +616 +514 +318 +84 +-137 +-222 +-99 +186 +490 +683 +726 +691 +660 +590 +419 +164 +-86 +-255 +-318 +-293 +-203 +-60 +90 +179 +134 +-24 +-194 +-324 +-416 +-476 +-481 +-390 +-240 +-118 +-13 +153 +405 +671 +848 +889 +826 +744 +638 +424 +63 +-396 +-823 +-1104 +-1211 +-1159 +-973 +-682 +-329 +21 +322 +513 +560 +454 +240 +-12 +-219 +-262 +-103 +212 +576 +944 +1282 +1497 +1489 +1221 +707 +-28 +-921 +-1847 +-2681 +-3291 +-3486 +-3070 +-1965 +-392 +1234 +2501 +3151 +3172 +2739 +2041 +1218 +424 +-159 +-451 +-555 +-645 +-785 +-913 +-928 +-806 +-657 +-574 +-573 +-564 +-475 +-302 +-82 +170 +448 +705 +905 +1027 +1070 +1031 +898 +713 +544 +383 +190 +-67 +-398 +-806 +-1240 +-1582 +-1735 +-1623 +-1234 +-628 +14 +469 +624 +536 +334 +90 +-141 +-263 +-182 +85 +412 +649 +718 +674 +620 +552 +407 +178 +-68 +-237 +-296 +-269 +-185 +-57 +76 +167 +137 +-7 +-187 +-334 +-432 +-494 +-499 +-422 +-286 +-161 +-64 +80 +317 +584 +777 +844 +810 +752 +682 +513 +181 +-267 +-712 +-1033 +-1190 +-1197 +-1062 +-793 +-435 +-55 +269 +491 +567 +493 +308 +58 +-176 +-276 +-161 +132 +508 +899 +1262 +1528 +1580 +1372 +906 +196 +-706 +-1683 +-2581 +-3258 +-3546 +-3248 +-2265 +-740 +940 +2335 +3140 +3277 +2911 +2240 +1425 +622 +-11 +-369 +-499 +-576 +-708 +-871 +-944 +-871 +-725 +-621 +-589 +-574 +-492 +-311 +-72 +184 +451 +697 +886 +1004 +1059 +1045 +937 +764 +600 +465 +297 +50 +-280 +-687 +-1139 +-1517 +-1718 +-1671 +-1347 +-775 +-112 +406 +619 +554 +348 +102 +-128 +-276 +-238 +6 +340 +621 +738 +705 +632 +560 +430 +213 +-32 +-220 +-300 +-280 +-196 +-72 +59 +158 +157 +19 +-169 +-330 +-444 +-520 +-540 +-474 +-337 +-202 +-106 +12 +227 +502 +725 +826 +813 +759 +706 +583 +299 +-146 +-622 +-1001 +-1216 +-1268 +-1175 +-942 +-592 +-186 +178 +442 +564 +529 +373 +140 +-107 +-265 +-237 +-4 +348 +739 +1121 +1435 +1569 +1455 +1091 +462 +-417 +-1430 +-2396 +-3163 +-3565 +-3404 +-2556 +-1109 +589 +2098 +3056 +3322 +3028 +2373 +1560 +738 +70 +-331 +-485 +-539 +-647 +-804 +-909 +-881 +-760 +-650 +-607 +-594 +-521 +-356 +-118 +146 +420 +672 +857 +974 +1038 +1047 +980 +833 +677 +554 +414 +193 +-121 +-541 +-1020 +-1455 +-1720 +-1733 +-1469 +-938 +-268 +313 +614 +612 +419 +155 +-113 +-306 +-312 +-101 +239 +564 +747 +764 +709 +645 +530 +317 +63 +-152 +-271 +-284 +-224 +-108 +32 +147 +180 +69 +-121 +-290 +-406 +-489 +-525 +-484 +-352 +-200 +-101 +-12 +159 +414 +651 +777 +779 +725 +677 +590 +365 +-33 +-513 +-919 +-1164 +-1234 +-1165 +-970 +-655 +-272 +111 +412 +566 +552 +406 +174 +-80 +-267 +-294 +-120 +203 +588 +989 +1336 +1532 +1487 +1192 +653 +-147 +-1128 +-2121 +-2970 +-3513 +-3514 +-2819 +-1485 +191 +1778 +2883 +3304 +3111 +2511 +1702 +861 +153 +-293 +-471 +-515 +-591 +-734 +-858 +-873 +-786 +-684 +-629 +-606 +-527 +-359 +-116 +144 +413 +668 +861 +965 +999 +997 +935 +800 +645 +530 +415 +237 +-42 +-431 +-916 +-1384 +-1706 +-1789 +-1580 +-1089 +-419 +220 +617 +696 +548 +284 +-10 +-253 +-328 +-160 +174 +517 +732 +781 +737 +672 +565 +350 +69 +-176 +-317 +-333 +-264 +-139 +14 +152 +214 +133 +-56 +-248 +-383 +-468 +-510 +-480 +-358 +-197 +-75 +15 +161 +393 +634 +780 +791 +725 +660 +580 +392 +37 +-425 +-856 +-1140 +-1252 +-1211 +-1040 +-755 +-386 +0 +331 +536 +578 +469 +256 +9 +-197 +-257 +-132 +151 +506 +885 +1241 +1468 +1471 +1231 +759 +42 +-883 +-1883 +-2785 +-3427 +-3604 +-3092 +-1880 +-225 +1438 +2697 +3298 +3245 +2727 +1935 +1051 +268 +-245 +-452 +-486 +-517 +-630 +-766 +-810 +-752 +-666 +-632 +-644 +-608 +-466 +-222 +62 +350 +620 +831 +960 +1008 +999 +931 +801 +648 +532 +427 +276 +41 +-309 +-766 +-1259 +-1645 +-1811 +-1681 +-1247 +-588 +88 +562 +717 +613 +371 +67 +-215 +-364 +-266 +44 +419 +691 +793 +770 +717 +634 +453 +175 +-100 +-282 +-333 +-275 +-154 +9 +161 +249 +198 +15 +-194 +-354 +-460 +-517 +-511 +-410 +-248 +-101 +5 +143 +355 +580 +733 +756 +700 +633 +573 +440 +151 +-265 +-698 +-1019 +-1181 +-1196 +-1079 +-843 +-516 +-145 +193 +441 +539 +484 +314 +77 +-142 +-242 +-156 +88 +404 +756 +1107 +1375 +1447 +1277 +870 +227 +-633 +-1608 +-2544 +-3294 +-3643 +-3344 +-2292 +-681 +1057 +2478 +3275 +3381 +2959 +2206 +1304 +440 +-193 +-492 +-546 +-555 +-635 +-756 +-810 +-756 +-665 +-625 +-653 +-662 +-565 +-342 +-60 +239 +536 +783 +942 +1002 +996 +936 +811 +652 +530 +442 +329 +131 +-171 +-600 +-1100 +-1540 +-1791 +-1764 +-1419 +-812 +-107 +446 +696 +669 +471 +187 +-111 +-325 +-320 +-79 +274 +585 +726 +737 +711 +669 +543 +298 +11 +-221 +-327 +-307 +-200 +-39 +126 +238 +232 +88 +-116 +-290 +-416 +-500 +-522 +-448 +-296 +-144 +-36 +95 +309 +559 +748 +798 +745 +668 +608 +495 +237 +-162 +-600 +-942 +-1135 +-1180 +-1098 +-888 +-579 +-221 +116 +366 +493 +469 +324 +107 +-119 +-256 +-210 +20 +340 +688 +1031 +1313 +1429 +1313 +971 +391 +-415 +-1358 +-2305 +-3108 +-3576 +-3465 +-2621 +-1140 +612 +2156 +3133 +3407 +3106 +2439 +1574 +686 +-40 +-451 +-576 +-585 +-635 +-743 +-815 +-779 +-677 +-605 +-620 +-664 +-623 +-453 +-181 +132 +453 +733 +921 +1008 +1023 +975 +845 +660 +502 +413 +325 +169 +-86 +-473 +-954 +-1419 +-1732 +-1801 +-1559 +-1025 +-336 +279 +616 +662 +520 +286 +11 +-224 +-283 +-111 +213 +540 +724 +753 +713 +670 +569 +356 +80 +-170 +-314 +-328 +-245 +-96 +71 +199 +228 +114 +-75 +-249 +-379 +-463 +-502 +-446 +-303 +-140 +-27 +86 +279 +537 +769 +868 +835 +742 +664 +558 +317 +-84 +-546 +-932 +-1157 +-1215 +-1142 +-954 +-654 +-295 +63 +352 +507 +500 +360 +144 +-90 +-249 +-244 +-47 +272 +633 +988 +1304 +1467 +1398 +1110 +584 +-173 +-1093 +-2035 +-2874 +-3446 +-3510 +-2894 +-1591 +119 +1746 +2890 +3345 +3195 +2635 +1830 +950 +174 +-331 +-532 +-567 +-604 +-706 +-798 +-798 +-705 +-613 +-603 +-645 +-643 +-525 +-299 +4 +336 +643 +868 +982 +1014 +986 +883 +705 +533 +422 +329 +188 +-45 +-397 +-858 +-1335 +-1690 +-1819 +-1655 +-1187 +-520 +140 +561 +672 +565 +339 +65 +-195 +-315 +-204 +82 +409 +634 +705 +690 +662 +593 +415 +151 +-106 +-290 +-360 +-316 +-183 +-4 +159 +240 +168 +-1 +-178 +-316 +-429 +-505 +-497 +-378 +-212 +-87 +21 +194 +456 +721 +867 +863 +769 +676 +581 +385 +29 +-425 +-846 +-1121 +-1222 +-1176 +-1017 +-751 +-410 +-45 +277 +482 +532 +424 +223 +-8 +-188 +-226 +-81 +201 +540 +896 +1223 +1425 +1415 +1178 +722 +43 +-835 +-1781 +-2658 +-3326 +-3548 +-3104 +-1953 +-318 +1376 +2693 +3357 +3366 +2892 +2133 +1248 +412 +-188 +-493 +-596 +-657 +-758 +-848 +-842 +-727 +-600 +-548 +-568 +-577 +-497 +-316 +-64 +243 +568 +837 +996 +1054 +1045 +963 +799 +603 +445 +324 +194 +-4 +-297 +-711 +-1174 +-1555 +-1750 +-1675 +-1299 +-689 +-25 +456 +643 +594 +405 +155 +-104 +-268 +-224 +-1 +294 +526 +618 +630 +639 +618 +500 +275 +22 +-173 +-274 +-280 +-202 +-57 +100 +205 +176 +31 +-143 +-276 +-378 +-459 +-488 +-422 +-289 +-164 +-62 +93 +343 +619 +817 +866 +805 +716 +621 +446 +117 +-333 +-786 +-1108 +-1251 +-1235 +-1091 +-835 +-497 +-137 +196 +438 +526 +460 +274 +37 +-171 +-243 +-130 +136 +473 +831 +1170 +1408 +1436 +1224 +796 +160 +-665 +-1582 +-2458 +-3161 +-3509 +-3249 +-2257 +-705 +1006 +2435 +3259 +3414 +3051 +2345 +1464 +587 +-97 +-475 +-619 +-701 +-816 +-923 +-917 +-779 +-611 +-515 +-518 +-544 +-496 +-351 +-131 +143 +447 +738 +953 +1074 +1114 +1067 +927 +724 +537 +379 +202 +-16 +-306 +-686 +-1124 +-1508 +-1725 +-1697 +-1376 +-811 +-158 +353 +580 +559 +406 +187 +-50 +-215 +-192 +23 +318 +555 +646 +633 +607 +587 +495 +293 +47 +-144 +-246 +-257 +-206 +-98 +40 +153 +158 +34 +-140 +-277 +-367 +-425 +-444 +-395 +-276 +-160 +-77 +45 +262 +540 +767 +864 +838 +762 +682 +526 +217 +-231 +-708 +-1073 +-1260 +-1277 +-1144 +-886 +-546 +-176 +164 +416 +529 +482 +302 +55 +-181 +-297 +-211 +58 +418 +787 +1148 +1430 +1523 +1366 +955 +320 +-513 +-1440 +-2335 +-3071 +-3481 +-3337 +-2488 +-1047 +631 +2099 +3029 +3299 +3033 +2437 +1635 +786 +85 +-331 +-502 +-589 +-719 +-874 +-936 +-852 +-682 +-553 +-514 +-516 +-461 +-311 +-104 +139 +404 +671 +883 +1010 +1067 +1040 +931 +751 +577 +432 +265 +43 +-248 +-617 +-1043 +-1432 +-1676 +-1701 +-1442 +-918 +-262 +291 +565 +565 +410 +192 +-40 +-210 +-215 +-15 +292 +556 +676 +656 +608 +575 +490 +310 +74 +-122 +-230 +-239 +-184 +-77 +48 +156 +173 +57 +-128 +-284 +-390 +-458 +-482 +-436 +-315 +-191 +-114 +-21 +166 +431 +668 +793 +793 +736 +685 +577 +318 +-100 +-574 +-967 +-1197 +-1255 +-1179 +-970 +-655 +-291 +58 +330 +482 +481 +350 +137 +-102 +-260 +-242 +-27 +310 +676 +1045 +1353 +1502 +1416 +1081 +503 +-308 +-1254 +-2182 +-2963 +-3445 +-3425 +-2727 +-1391 +270 +1815 +2870 +3259 +3071 +2507 +1738 +904 +182 +-288 +-475 +-539 +-644 +-811 +-936 +-911 +-761 +-610 +-543 +-531 +-485 +-343 +-126 +118 +375 +626 +831 +959 +1031 +1043 +970 +807 +628 +488 +341 +128 +-161 +-544 +-982 +-1400 +-1675 +-1729 +-1507 +-1016 +-360 +248 +591 +642 +487 +259 +14 +-186 +-240 +-87 +212 +511 +684 +702 +646 +606 +533 +370 +142 +-76 +-209 +-242 +-195 +-96 +27 +135 +174 +85 +-88 +-246 +-355 +-426 +-470 +-438 +-328 +-188 +-97 +-27 +125 +368 +621 +774 +794 +740 +682 +596 +388 +11 +-453 +-876 +-1141 +-1233 +-1179 +-998 +-699 +-331 +36 +340 +527 +555 +439 +236 +-11 +-205 +-256 +-104 +198 +558 +924 +1259 +1466 +1444 +1181 +672 +-94 +-1037 +-1997 +-2844 +-3416 +-3513 +-2952 +-1733 +-95 +1528 +2721 +3248 +3150 +2629 +1881 +1062 +320 +-192 +-428 +-499 +-583 +-732 +-881 +-913 +-811 +-669 +-584 +-560 +-520 +-397 +-187 +60 +325 +581 +784 +907 +974 +999 +949 +816 +654 +515 +395 +219 +-42 +-406 +-859 +-1310 +-1636 +-1739 +-1578 +-1137 +-503 +137 +555 +660 +529 +291 +26 +-205 +-297 +-167 +135 +467 +690 +744 +695 +635 +553 +386 +145 +-84 +-226 +-264 +-219 +-120 +11 +129 +187 +120 +-50 +-226 +-351 +-435 +-476 +-456 +-348 +-201 +-94 +-31 +90 +316 +565 +733 +766 +715 +664 +607 +456 +131 +-318 +-755 +-1064 +-1199 +-1179 +-1034 +-777 +-431 +-57 +279 +512 +584 +492 +292 +42 +-174 +-266 +-168 +96 +435 +804 +1157 +1415 +1462 +1262 +824 +134 +-774 +-1761 +-2651 +-3300 +-3516 +-3114 +-2038 +-466 +1188 +2508 +3192 +3210 +2747 +2001 +1162 +393 +-148 +-410 +-478 +-536 +-663 +-807 +-871 +-805 +-689 +-612 +-592 +-559 +-446 +-238 +16 +286 +550 +765 +899 +959 +973 +932 +815 +658 +527 +418 +273 +42 +-293 +-738 +-1217 +-1601 +-1767 +-1659 +-1269 +-656 +5 +497 +682 +604 +382 +104 +-154 +-290 +-208 +69 +400 +653 +745 +712 +657 +581 +425 +183 +-59 +-221 +-273 +-233 +-132 +6 +137 +215 +169 +-6 +-206 +-345 +-434 +-480 +-483 +-397 +-244 +-107 +-22 +85 +276 +514 +701 +766 +733 +673 +621 +501 +226 +-190 +-636 +-973 +-1149 +-1166 +-1051 +-817 +-493 +-131 +212 +467 +567 +506 +325 +89 +-125 +-232 +-170 +55 +373 +724 +1075 +1350 +1441 +1292 +916 +312 +-518 +-1477 +-2399 +-3135 +-3498 +-3260 +-2324 +-838 +822 +2227 +3058 +3213 +2844 +2157 +1325 +519 +-87 +-394 +-473 +-506 +-614 +-773 +-873 +-844 +-749 +-673 +-655 +-627 +-521 +-309 +-40 +244 +530 +772 +927 +983 +972 +914 +796 +641 +506 +404 +281 +90 +-195 +-594 +-1070 +-1504 +-1757 +-1737 +-1405 +-822 +-145 +393 +644 +619 +433 +172 +-110 +-311 +-305 +-63 +288 +593 +740 +740 +686 +622 +486 +250 +-17 +-219 +-308 +-291 +-196 +-56 +97 +207 +207 +67 +-142 +-311 +-425 +-489 +-505 +-444 +-303 +-155 +-51 +61 +247 +485 +678 +764 +741 +679 +627 +529 +296 +-87 +-533 +-900 +-1113 +-1169 +-1086 +-875 +-564 +-206 +136 +405 +549 +536 +395 +179 +-41 +-176 +-140 +71 +371 +701 +1028 +1308 +1427 +1315 +980 +423 +-350 +-1273 +-2198 +-2987 +-3458 +-3390 +-2620 +-1219 +470 +1997 +3001 +3314 +3054 +2422 +1584 +719 +10 +-397 +-529 +-547 +-609 +-735 +-832 +-816 +-723 +-647 +-638 +-648 +-576 +-385 +-121 +169 +470 +744 +936 +1025 +1033 +974 +852 +682 +532 +436 +330 +159 +-97 +-460 +-922 +-1376 +-1690 +-1770 +-1543 +-1020 +-338 +270 +607 +648 +490 +237 +-53 +-295 +-358 +-175 +167 +514 +721 +763 +728 +679 +573 +355 +75 +-171 +-307 +-311 +-225 +-84 +72 +190 +211 +99 +-101 +-297 +-440 +-542 +-578 +-523 +-376 +-201 +-83 +29 +216 +464 +685 +783 +753 +669 +598 +511 +313 +-38 +-467 +-851 +-1091 +-1169 +-1116 +-935 +-647 +-304 +35 +318 +493 +515 +408 +217 +-2 +-160 +-165 +10 +310 +640 +965 +1246 +1393 +1335 +1065 +571 +-153 +-1046 +-1973 +-2804 +-3390 +-3487 +-2908 +-1640 +49 +1685 +2855 +3349 +3217 +2650 +1831 +927 +121 +-405 +-602 +-621 +-639 +-733 +-827 +-832 +-735 +-632 +-613 +-648 +-638 +-497 +-231 +97 +444 +765 +1001 +1127 +1158 +1098 +952 +742 +535 +396 +285 +136 +-83 +-394 +-816 +-1267 +-1623 +-1774 +-1634 +-1184 +-527 +115 +524 +633 +530 +320 +63 +-181 +-290 +-175 +115 +449 +683 +753 +726 +689 +609 +430 +166 +-100 +-286 +-346 +-295 +-166 +4 +150 +216 +139 +-40 +-231 +-385 +-498 +-565 +-544 +-415 +-244 +-114 +-12 +156 +409 +664 +812 +814 +728 +639 +550 +370 +37 +-399 +-809 +-1079 +-1177 +-1133 +-968 +-699 +-361 +-15 +279 +470 +508 +411 +227 +8 +-164 +-201 +-54 +236 +576 +920 +1229 +1425 +1410 +1177 +733 +55 +-807 +-1738 +-2599 +-3256 +-3496 +-3090 +-1988 +-391 +1273 +2570 +3225 +3226 +2751 +1989 +1109 +280 +-317 +-596 +-653 +-663 +-725 +-796 +-790 +-688 +-565 +-515 +-543 +-565 +-491 +-292 +-12 +317 +651 +921 +1085 +1142 +1124 +1016 +820 +588 +406 +270 +126 +-67 +-350 +-739 +-1178 +-1546 +-1726 +-1638 +-1254 +-642 +11 +476 +642 +577 +381 +126 +-122 +-267 +-211 +30 +347 +597 +704 +693 +664 +599 +449 +209 +-45 +-231 +-319 +-300 +-202 +-42 +113 +207 +167 +8 +-170 +-318 +-434 +-522 +-541 +-454 +-305 +-172 +-83 +53 +287 +556 +748 +794 +733 +644 +569 +425 +127 +-301 +-743 +-1052 +-1180 +-1146 +-987 +-733 +-408 +-58 +257 +475 +539 +452 +262 +37 +-152 +-220 +-113 +151 +492 +846 +1172 +1388 +1398 +1180 +767 +142 +-682 +-1598 +-2457 +-3142 +-3463 +-3187 +-2228 +-731 +925 +2317 +3122 +3279 +2918 +2220 +1357 +495 +-165 +-530 +-653 +-695 +-773 +-853 +-856 +-750 +-604 +-523 +-527 +-553 +-505 +-344 +-97 +214 +549 +848 +1050 +1137 +1142 +1066 +894 +671 +475 +320 +161 +-33 +-297 +-656 +-1078 +-1455 +-1662 +-1618 +-1295 +-738 +-108 +378 +584 +554 +389 +164 +-64 +-215 +-180 +40 +341 +589 +701 +703 +677 +637 +512 +284 +20 +-181 +-291 +-295 +-216 +-73 +91 +201 +188 +38 +-155 +-314 +-427 +-515 +-549 +-495 +-352 +-208 +-109 +17 +235 +514 +739 +839 +811 +728 +642 +498 +220 +-191 +-640 +-985 +-1169 +-1180 +-1055 +-819 +-500 +-158 +168 +412 +521 +472 +296 +68 +-137 +-228 +-146 +100 +435 +784 +1118 +1374 +1444 +1272 +876 +279 +-510 +-1411 +-2281 +-2996 +-3399 +-3268 +-2441 +-1031 +609 +2050 +2960 +3209 +2928 +2296 +1474 +628 +-54 +-446 +-588 +-635 +-722 +-833 +-873 +-790 +-643 +-546 +-541 +-570 +-529 +-377 +-151 +130 +446 +752 +986 +1110 +1137 +1077 +930 +718 +516 +350 +181 +-19 +-269 +-604 +-1008 +-1394 +-1626 +-1622 +-1341 +-808 +-178 +338 +587 +585 +437 +221 +-21 +-199 +-208 +-16 +286 +559 +700 +714 +678 +639 +530 +312 +44 +-176 +-299 +-311 +-246 +-120 +29 +154 +179 +67 +-116 +-275 +-382 +-460 +-497 +-460 +-337 +-199 +-96 +17 +210 +460 +684 +804 +800 +736 +663 +534 +281 +-113 +-564 +-937 +-1150 +-1195 +-1098 +-874 +-558 +-211 +117 +380 +521 +514 +373 +165 +-53 +-187 +-150 +69 +393 +737 +1063 +1331 +1428 +1302 +945 +370 +-404 +-1298 +-2174 +-2912 +-3364 +-3340 +-2658 +-1343 +282 +1792 +2818 +3194 +3012 +2457 +1689 +856 +135 +-316 +-503 +-571 +-666 +-812 +-910 +-877 +-740 +-616 +-573 +-586 +-565 +-441 +-235 +15 +301 +595 +850 +1025 +1113 +1114 +1017 +830 +630 +457 +287 +74 +-189 +-525 +-923 +-1308 +-1568 +-1618 +-1400 +-927 +-320 +224 +521 +561 +429 +231 +4 +-186 +-236 +-75 +221 +516 +684 +702 +652 +614 +537 +370 +138 +-74 +-203 +-239 +-200 +-116 +-9 +91 +125 +41 +-118 +-272 +-374 +-444 +-476 +-443 +-338 +-209 +-124 +-39 +130 +385 +638 +796 +832 +799 +751 +659 +426 +36 +-430 +-834 +-1081 +-1168 +-1110 +-931 +-637 +-278 +70 +348 +499 +498 +365 +152 +-82 +-249 +-255 +-61 +276 +655 +1021 +1330 +1489 +1420 +1123 +592 +-169 +-1081 +-1980 +-2760 +-3285 +-3354 +-2803 +-1609 +-19 +1540 +2665 +3145 +3030 +2511 +1778 +969 +233 +-273 +-505 +-578 +-657 +-793 +-922 +-935 +-824 +-680 +-592 +-565 +-529 +-423 +-226 +21 +297 +572 +799 +952 +1030 +1039 +975 +821 +639 +484 +335 +134 +-131 +-467 +-881 +-1289 +-1575 +-1654 +-1477 +-1036 +-429 +159 +531 +614 +486 +259 +9 +-204 +-278 +-138 +156 +476 +685 +729 +680 +615 +519 +334 +91 +-132 +-268 +-302 +-250 +-144 +-11 +108 +151 +78 +-90 +-257 +-371 +-452 +-493 +-476 +-375 +-222 +-113 +-30 +116 +351 +606 +778 +827 +786 +728 +653 +466 +121 +-339 +-775 +-1071 +-1193 +-1153 +-983 +-700 +-343 +22 +327 +516 +546 +429 +222 +-19 +-221 +-282 +-140 +165 +542 +922 +1265 +1492 +1495 +1269 +810 +99 +-815 +-1783 +-2644 +-3266 +-3447 +-3004 +-1898 +-332 +1282 +2533 +3136 +3100 +2615 +1880 +1064 +310 +-229 +-483 +-541 +-579 +-689 +-824 +-884 +-822 +-699 +-611 +-588 +-561 +-461 +-267 +-11 +282 +584 +828 +973 +1038 +1043 +984 +834 +639 +472 +327 +164 +-72 +-383 +-791 +-1228 +-1563 +-1691 +-1547 +-1127 +-514 +112 +545 +674 +564 +323 +37 +-221 +-340 +-236 +50 +387 +626 +710 +671 +614 +534 +368 +125 +-115 +-276 +-328 +-289 +-191 +-50 +89 +180 +148 +-1 +-187 +-336 +-440 +-506 +-509 +-412 +-255 +-125 +-43 +72 +278 +526 +714 +774 +736 +674 +616 +483 +195 +-240 +-698 +-1037 +-1196 +-1181 +-1033 +-772 +-433 +-70 +259 +494 +581 +502 +311 +75 +-137 +-233 +-149 +108 +459 +828 +1179 +1444 +1508 +1334 +925 +275 +-607 +-1593 +-2511 +-3209 +-3514 +-3221 +-2214 +-673 +1018 +2415 +3199 +3291 +2870 +2133 +1271 +451 +-158 +-465 +-533 +-550 +-642 +-779 +-868 +-838 +-736 +-655 +-636 +-621 +-536 +-348 +-89 +216 +536 +815 +998 +1084 +1097 +1046 +917 +726 +554 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f5_698_456.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f5_698_456.samples new file mode 100644 index 00000000..d4dd13fe --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_f5_698_456.samples @@ -0,0 +1,4096 @@ +2393 +1940 +1296 +438 +-552 +-1315 +-1615 +-1479 +-1090 +-595 +-73 +567 +1145 +1458 +1468 +1398 +1164 +543 +-294 +-1098 +-1544 +-1584 +-1336 +-921 +-430 +42 +273 +258 +3 +-307 +-480 +-482 +-413 +-232 +180 +620 +1018 +1220 +1090 +563 +-209 +-821 +-955 +-621 +-159 +176 +283 +381 +464 +403 +157 +-94 +-276 +-568 +-1018 +-1570 +-1919 +-1795 +-1090 +-46 +1013 +1909 +2432 +2444 +2033 +1412 +575 +-429 +-1256 +-1632 +-1553 +-1176 +-658 +-102 +551 +1151 +1478 +1468 +1365 +1151 +585 +-218 +-999 +-1457 +-1510 +-1291 +-906 +-458 +-31 +193 +188 +-28 +-307 +-456 +-433 +-350 +-192 +189 +606 +975 +1177 +1077 +599 +-130 +-740 +-917 +-615 +-168 +162 +251 +314 +395 +358 +147 +-79 +-238 +-497 +-931 +-1499 +-1899 +-1841 +-1183 +-131 +958 +1886 +2442 +2478 +2077 +1451 +628 +-367 +-1201 +-1601 +-1532 +-1183 +-687 +-168 +452 +1067 +1436 +1478 +1406 +1246 +718 +-77 +-909 +-1444 +-1573 +-1402 +-1026 +-563 +-68 +236 +288 +86 +-240 +-448 +-480 +-415 +-276 +97 +528 +932 +1189 +1148 +721 +-20 +-693 +-962 +-713 +-261 +114 +257 +340 +435 +421 +221 +-32 +-208 +-472 +-899 +-1461 +-1871 +-1849 +-1248 +-236 +837 +1767 +2367 +2471 +2125 +1528 +741 +-237 +-1116 +-1594 +-1598 +-1292 +-791 +-240 +413 +1063 +1455 +1496 +1384 +1211 +708 +-70 +-890 +-1430 +-1549 +-1368 +-989 +-544 +-90 +186 +224 +35 +-273 +-467 +-479 +-385 +-241 +118 +541 +924 +1174 +1130 +709 +-18 +-693 +-982 +-747 +-286 +111 +262 +319 +405 +392 +210 +-33 +-187 +-417 +-815 +-1390 +-1854 +-1914 +-1379 +-371 +736 +1712 +2358 +2503 +2174 +1579 +807 +-160 +-1060 +-1577 +-1596 +-1286 +-786 +-256 +342 +966 +1374 +1470 +1401 +1298 +856 +93 +-758 +-1381 +-1574 +-1452 +-1105 +-662 +-173 +176 +284 +159 +-132 +-360 +-436 +-398 +-303 +17 +452 +853 +1139 +1152 +796 +107 +-592 +-945 +-773 +-336 +64 +240 +316 +419 +433 +277 +19 +-149 +-392 +-782 +-1341 +-1819 +-1891 +-1395 +-426 +650 +1604 +2263 +2461 +2196 +1641 +912 +-35 +-957 +-1521 +-1600 +-1341 +-885 +-368 +245 +921 +1395 +1526 +1431 +1284 +843 +92 +-747 +-1376 +-1572 +-1440 +-1083 +-630 +-145 +190 +263 +100 +-218 +-456 +-508 +-427 +-306 +18 +467 +877 +1171 +1190 +841 +140 +-580 +-969 +-814 +-355 +73 +268 +320 +402 +407 +255 +-8 +-176 +-378 +-726 +-1259 +-1768 +-1926 +-1510 +-579 +517 +1530 +2258 +2524 +2286 +1725 +986 +23 +-935 +-1547 +-1651 +-1381 +-899 +-367 +216 +852 +1312 +1456 +1385 +1294 +935 +243 +-586 +-1267 +-1536 +-1470 +-1164 +-740 +-259 +124 +264 +170 +-121 +-369 +-457 +-412 +-330 +-60 +364 +768 +1095 +1183 +918 +267 +-463 +-908 +-830 +-400 +35 +251 +301 +387 +420 +303 +56 +-110 +-320 +-683 +-1225 +-1754 +-1944 +-1561 +-645 +454 +1465 +2220 +2510 +2297 +1754 +1041 +122 +-832 +-1468 +-1629 +-1410 +-983 +-475 +97 +770 +1297 +1509 +1458 +1366 +1018 +301 +-575 +-1303 +-1611 +-1536 +-1194 +-733 +-225 +170 +295 +180 +-134 +-418 +-525 +-476 +-377 +-100 +354 +800 +1168 +1266 +999 +323 +-453 +-945 +-892 +-447 +24 +283 +333 +410 +429 +301 +37 +-140 +-316 +-620 +-1111 +-1648 +-1903 +-1627 +-786 +286 +1325 +2141 +2508 +2357 +1837 +1137 +207 +-779 +-1474 +-1678 +-1464 +-1012 +-481 +76 +716 +1225 +1436 +1385 +1312 +1036 +381 +-460 +-1207 +-1562 +-1533 +-1242 +-824 +-357 +51 +214 +164 +-86 +-331 +-430 +-398 +-335 +-127 +289 +714 +1081 +1213 +999 +393 +-363 +-877 +-885 +-475 +-18 +259 +317 +383 +420 +317 +75 +-93 +-235 +-527 +-1037 +-1626 +-1953 +-1726 +-893 +216 +1268 +2089 +2480 +2351 +1855 +1188 +309 +-674 +-1399 +-1641 +-1461 +-1048 +-557 +-54 +570 +1128 +1425 +1445 +1390 +1122 +459 +-401 +-1181 +-1577 +-1580 +-1305 +-867 +-357 +112 +323 +273 +-18 +-337 +-499 +-481 +-405 +-195 +229 +687 +1109 +1310 +1143 +521 +-290 +-884 +-956 +-544 +-41 +287 +362 +421 +445 +342 +81 +-109 +-241 +-497 +-947 +-1521 +-1876 +-1745 +-1007 +59 +1128 +1992 +2446 +2394 +1927 +1273 +414 +-583 +-1361 +-1672 +-1524 +-1110 +-583 +-53 +561 +1107 +1386 +1374 +1312 +1109 +522 +-295 +-1084 +-1512 +-1550 +-1301 +-893 +-423 +18 +235 +211 +-37 +-322 +-464 +-431 +-348 +-165 +232 +665 +1062 +1262 +1121 +552 +-241 +-845 +-947 +-544 +-37 +305 +364 +385 +406 +322 +100 +-74 +-174 +-405 +-865 +-1485 +-1918 +-1853 +-1142 +-43 +1072 +1982 +2471 +2432 +1972 +1309 +471 +-518 +-1309 +-1634 +-1499 +-1113 +-624 +-152 +412 +966 +1314 +1386 +1377 +1231 +666 +-177 +-1035 +-1557 +-1649 +-1425 +-1002 +-492 +18 +305 +325 +83 +-255 +-469 +-499 +-445 +-296 +110 +583 +1037 +1313 +1230 +702 +-127 +-812 +-995 +-625 +-90 +305 +399 +422 +446 +365 +138 +-74 +-192 +-414 +-839 +-1420 +-1858 +-1840 +-1213 +-175 +921 +1846 +2397 +2424 +2014 +1387 +584 +-404 +-1255 +-1665 +-1597 +-1233 +-721 +-198 +397 +974 +1332 +1391 +1339 +1199 +670 +-135 +-983 +-1520 +-1621 +-1409 +-987 +-498 +-8 +259 +262 +13 +-320 +-509 +-506 +-407 +-247 +146 +607 +1040 +1302 +1218 +703 +-110 +-793 +-989 +-618 +-72 +339 +435 +417 +407 +325 +115 +-83 +-159 +-336 +-722 +-1330 +-1837 +-1917 +-1354 +-297 +848 +1834 +2426 +2482 +2069 +1425 +626 +-354 +-1225 +-1667 +-1600 +-1225 +-708 +-214 +323 +864 +1228 +1345 +1351 +1276 +810 +1 +-884 +-1498 +-1671 +-1510 +-1115 +-616 +-83 +266 +340 +150 +-178 +-399 +-453 +-396 +-280 +62 +516 +968 +1294 +1296 +853 +40 +-712 +-1015 +-718 +-166 +287 +432 +436 +446 +380 +186 +-22 +-119 +-301 +-677 +-1272 +-1794 +-1902 +-1388 +-379 +738 +1716 +2339 +2463 +2112 +1510 +753 +-206 +-1103 +-1611 +-1618 +-1302 +-816 +-324 +231 +825 +1246 +1388 +1369 +1277 +823 +32 +-860 +-1496 +-1670 +-1494 +-1082 +-578 +-61 +271 +313 +106 +-244 +-481 +-525 +-444 +-308 +48 +530 +996 +1322 +1315 +862 +46 +-717 +-1038 +-740 +-161 +325 +484 +450 +420 +336 +150 +-54 +-120 +-240 +-571 +-1160 +-1743 +-1957 +-1537 +-562 +583 +1626 +2322 +2502 +2182 +1570 +803 +-175 +-1104 +-1646 +-1660 +-1320 +-818 +-332 +180 +729 +1131 +1285 +1297 +1276 +913 +176 +-702 +-1394 +-1655 +-1554 +-1201 +-729 +-207 +176 +295 +160 +-150 +-388 +-463 +-419 +-337 +-40 +421 +891 +1270 +1339 +971 +191 +-603 +-1003 +-789 +-242 +251 +451 +434 +425 +362 +196 +-5 +-80 +-214 +-553 +-1149 +-1745 +-1967 +-1563 +-595 +541 +1559 +2256 +2467 +2185 +1611 +885 +-54 +-981 +-1562 +-1637 +-1359 +-905 +-439 +74 +675 +1142 +1351 +1356 +1315 +961 +224 +-666 +-1401 +-1696 +-1598 +-1212 +-692 +-130 +273 +365 +193 +-162 +-442 +-532 +-470 +-366 +-55 +436 +933 +1334 +1410 +1026 +220 +-615 +-1047 +-853 +-283 +258 +497 +487 +465 +386 +199 +-33 +-117 +-200 +-465 +-1000 +-1607 +-1913 +-1636 +-756 +364 +1427 +2203 +2494 +2277 +1720 +995 +45 +-936 +-1585 +-1709 +-1426 +-930 +-417 +88 +654 +1095 +1287 +1288 +1274 +993 +315 +-540 +-1278 +-1604 +-1554 +-1243 +-791 +-278 +139 +292 +196 +-100 +-359 +-457 +-414 +-338 +-92 +352 +813 +1211 +1331 +1048 +333 +-481 +-966 +-859 +-337 +182 +449 +446 +439 +392 +245 +25 +-65 +-154 +-431 +-972 +-1613 +-1970 +-1720 +-849 +291 +1370 +2177 +2496 +2278 +1720 +1006 +97 +-862 +-1514 +-1669 +-1419 +-980 +-515 +-40 +543 +1051 +1324 +1365 +1359 +1091 +404 +-491 +-1291 +-1669 +-1644 +-1320 +-829 +-274 +184 +360 +261 +-69 +-382 +-520 +-492 +-414 +-175 +289 +793 +1237 +1415 +1160 +433 +-440 +-1004 +-957 +-432 +141 +468 +501 +497 +447 +284 +19 +-121 +-201 +-432 +-905 +-1514 +-1899 +-1738 +-954 +144 +1234 +2090 +2482 +2333 +1821 +1142 +253 +-743 +-1487 +-1727 +-1525 +-1068 +-532 +-14 +575 +1062 +1302 +1300 +1282 +1068 +450 +-393 +-1182 +-1576 +-1579 +-1288 +-846 +-342 +92 +272 +210 +-71 +-357 +-475 +-436 +-357 +-161 +264 +727 +1146 +1330 +1124 +473 +-366 +-936 +-931 +-439 +112 +436 +454 +435 +397 +267 +34 +-84 +-147 +-361 +-846 +-1501 +-1946 +-1847 +-1062 +75 +1206 +2082 +2497 +2370 +1850 +1171 +304 +-687 +-1434 +-1693 +-1501 +-1068 +-576 +-110 +447 +966 +1282 +1355 +1372 +1199 +585 +-285 +-1135 +-1613 +-1667 +-1411 +-954 +-416 +96 +349 +322 +32 +-309 +-490 +-489 +-426 +-241 +175 +661 +1118 +1370 +1229 +603 +-273 +-933 +-1014 +-557 +17 +397 +453 +449 +429 +319 +85 +-84 +-175 +-391 +-828 +-1434 +-1860 +-1792 +-1089 +-18 +1072 +1959 +2431 +2379 +1915 +1279 +447 +-550 +-1357 +-1704 +-1580 +-1181 +-657 +-143 +458 +1007 +1329 +1366 +1331 +1160 +587 +-239 +-1067 +-1544 +-1597 +-1345 +-910 +-414 +46 +271 +237 +-33 +-353 +-511 +-477 +-378 +-198 +205 +666 +1088 +1321 +1187 +607 +-228 +-875 +-993 +-562 +6 +396 +454 +429 +399 +292 +82 +-79 +-118 +-292 +-707 +-1350 +-1855 +-1877 +-1237 +-153 +982 +1922 +2441 +2431 +1989 +1332 +501 +-495 +-1327 +-1692 +-1560 +-1144 +-632 +-160 +375 +900 +1245 +1342 +1349 +1245 +730 +-94 +-957 +-1512 +-1633 +-1439 +-1034 +-535 +-25 +284 +332 +112 +-222 +-437 +-480 +-437 +-313 +60 +536 +999 +1298 +1254 +744 +-88 +-798 +-1016 +-657 +-101 +319 +421 +416 +418 +350 +147 +-51 +-148 +-342 +-744 +-1345 +-1831 +-1876 +-1280 +-239 +870 +1802 +2370 +2431 +2031 +1409 +627 +-340 +-1199 +-1644 +-1593 +-1247 +-754 +-248 +348 +945 +1331 +1418 +1372 +1242 +736 +-76 +-945 +-1522 +-1652 +-1448 +-1011 +-493 +8 +281 +282 +42 +-292 +-490 +-514 +-425 +-288 +85 +565 +1018 +1312 +1255 +751 +-74 +-791 +-1032 +-688 +-130 +306 +430 +421 +426 +349 +142 +-71 +-153 +-304 +-654 +-1250 +-1792 +-1921 +-1414 +-396 +746 +1759 +2406 +2521 +2147 +1512 +717 +-280 +-1185 +-1674 +-1634 +-1261 +-745 +-245 +299 +858 +1233 +1353 +1338 +1276 +843 +72 +-796 +-1413 +-1598 +-1465 +-1100 +-636 +-136 +206 +297 +143 +-174 +-403 +-470 +-430 +-328 +-3 +448 +890 +1218 +1235 +835 +63 +-676 +-1003 +-750 +-231 +216 +380 +390 +412 +364 +195 +-17 +-113 +-285 +-649 +-1246 +-1790 +-1929 +-1430 +-424 +691 +1681 +2325 +2467 +2133 +1534 +793 +-161 +-1065 +-1589 +-1610 +-1298 +-833 +-345 +211 +828 +1282 +1449 +1425 +1333 +900 +118 +-761 +-1424 +-1644 +-1497 +-1105 +-608 +-88 +263 +329 +142 +-212 +-478 +-551 +-481 +-358 +-23 +450 +909 +1245 +1265 +866 +89 +-680 +-1048 +-825 +-290 +190 +389 +405 +432 +380 +194 +-49 +-150 +-282 +-591 +-1137 +-1702 +-1914 +-1516 +-578 +539 +1566 +2290 +2514 +2237 +1655 +908 +-58 +-1010 +-1598 +-1664 +-1348 +-846 +-331 +213 +809 +1237 +1387 +1353 +1291 +939 +229 +-616 +-1302 +-1568 +-1485 +-1162 +-723 +-233 +136 +248 +131 +-163 +-393 +-466 +-413 +-339 +-67 +372 +801 +1151 +1224 +906 +195 +-570 +-987 +-840 +-355 +113 +328 +352 +399 +393 +246 +14 +-105 +-241 +-559 +-1117 +-1697 +-1947 +-1591 +-659 +478 +1515 +2252 +2500 +2240 +1664 +941 +17 +-910 +-1513 +-1618 +-1358 +-918 +-439 +87 +710 +1208 +1421 +1411 +1362 +1020 +307 +-576 +-1327 +-1643 +-1570 +-1212 +-720 +-183 +226 +348 +212 +-129 +-427 +-546 +-512 +-430 +-156 +317 +796 +1189 +1308 +1005 +271 +-543 +-1028 +-926 +-427 +72 +337 +377 +432 +432 +288 +24 +-133 +-272 +-552 +-1050 +-1611 +-1890 +-1617 +-761 +332 +1375 +2169 +2508 +2328 +1798 +1090 +161 +-827 +-1505 +-1679 +-1444 +-973 +-441 +107 +734 +1224 +1431 +1392 +1332 +1040 +367 +-485 +-1221 +-1540 +-1478 +-1168 +-744 +-282 +104 +257 +179 +-103 +-372 +-480 +-441 +-361 +-135 +293 +720 +1084 +1213 +976 +324 +-459 +-956 +-895 +-430 +60 +322 +347 +390 +404 +296 +49 +-98 +-222 +-499 +-1017 +-1620 +-1949 +-1710 +-852 +271 +1346 +2164 +2530 +2357 +1815 +1112 +211 +-754 +-1441 +-1631 +-1411 +-983 +-500 +-1 +608 +1138 +1424 +1451 +1414 +1153 +475 +-404 +-1199 +-1585 +-1570 +-1282 +-838 +-329 +128 +336 +281 +-29 +-361 +-542 +-537 +-464 +-240 +202 +671 +1089 +1281 +1096 +460 +-365 +-945 +-971 +-534 +-32 +276 +329 +383 +416 +318 +57 +-130 +-264 +-520 +-987 +-1552 +-1886 +-1709 +-936 +137 +1190 +2036 +2467 +2377 +1896 +1230 +359 +-637 +-1400 +-1679 +-1511 +-1087 +-563 +-22 +609 +1158 +1440 +1436 +1375 +1131 +489 +-362 +-1148 +-1538 +-1519 +-1225 +-807 +-347 +62 +236 +186 +-85 +-374 +-515 +-481 +-389 +-196 +216 +658 +1050 +1230 +1056 +463 +-339 +-920 +-975 +-551 +-40 +278 +326 +356 +392 +320 +91 +-82 +-190 +-426 +-884 +-1498 +-1910 +-1820 +-1090 +10 +1133 +2035 +2508 +2440 +1942 +1264 +405 +-578 +-1348 +-1638 +-1469 +-1059 +-563 +-65 +521 +1067 +1390 +1441 +1416 +1242 +647 +-206 +-1054 +-1541 +-1600 +-1360 +-936 +-447 +32 +286 +297 +55 +-263 +-456 +-488 +-441 +-285 +113 +570 +1000 +1243 +1139 +598 +-218 +-865 +-1011 +-638 +-129 +231 +313 +365 +418 +369 +151 +-58 +-188 +-428 +-864 +-1456 +-1862 +-1801 +-1113 +-51 +1034 +1927 +2430 +2425 +1987 +1354 +546 +-437 +-1253 +-1625 +-1524 +-1153 +-661 +-146 +474 +1076 +1439 +1491 +1421 +1226 +645 +-197 +-1039 +-1532 +-1584 +-1330 +-900 +-416 +37 +270 +256 +7 +-321 +-507 +-513 +-428 +-263 +138 +596 +1005 +1233 +1126 +596 +-216 +-874 +-1048 +-675 +-144 +246 +346 +371 +404 +344 +128 +-79 +-178 +-372 +-768 +-1370 +-1854 +-1881 +-1263 +-210 +908 +1864 +2442 +2492 +2078 +1427 +607 +-399 +-1253 +-1657 +-1552 +-1158 +-657 +-167 +399 +969 +1334 +1421 +1391 +1267 +761 +-44 +-891 +-1438 +-1557 +-1370 +-1002 +-549 +-83 +209 +272 +91 +-214 +-428 +-477 +-432 +-312 +41 +486 +905 +1186 +1165 +730 +-42 +-738 +-1007 +-724 +-233 +167 +295 +332 +391 +357 +167 +-51 +-168 +-378 +-771 +-1353 +-1824 +-1862 +-1272 +-248 +843 +1777 +2356 +2442 +2072 +1467 +697 +-272 +-1143 +-1602 +-1572 +-1236 +-763 +-270 +323 +953 +1376 +1498 +1448 +1306 +795 +-13 +-872 +-1462 +-1597 +-1399 +-997 +-518 +-36 +255 +284 +77 +-257 +-481 +-529 +-466 +-336 +26 +502 +939 +1227 +1202 +753 +-31 +-751 +-1048 +-767 +-250 +180 +332 +372 +434 +407 +211 +-40 +-167 +-346 +-692 +-1254 +-1765 +-1889 +-1398 +-419 +690 +1686 +2354 +2511 +2176 +1572 +788 +-207 +-1122 +-1638 +-1634 +-1289 +-781 +-264 +316 +927 +1338 +1456 +1406 +1308 +866 +104 +-746 +-1369 +-1551 +-1409 +-1053 +-620 +-153 +168 +255 +116 +-184 +-412 +-481 +-433 +-338 +-23 +424 +853 +1158 +1184 +822 +101 +-613 +-961 +-762 +-298 +112 +277 +307 +387 +386 +230 +-6 +-128 +-307 +-663 +-1240 +-1786 +-1936 +-1456 +-469 +645 +1630 +2296 +2486 +2180 +1589 +842 +-116 +-1028 +-1572 +-1614 +-1313 +-856 +-369 +198 +851 +1334 +1507 +1465 +1363 +935 +161 +-727 +-1405 +-1632 +-1499 +-1128 +-649 +-136 +232 +331 +180 +-168 +-448 +-544 +-501 +-391 +-79 +392 +841 +1187 +1247 +906 +161 +-603 +-1013 +-853 +-379 +69 +280 +327 +407 +416 +253 +-15 +-158 +-318 +-620 +-1144 +-1680 +-1892 +-1511 +-600 +487 +1487 +2218 +2484 +2242 +1691 +961 +-1 +-972 +-1590 +-1694 +-1403 +-910 +-377 +205 +840 +1303 +1460 +1394 +1300 +933 +210 +-641 +-1318 +-1552 +-1440 +-1107 +-683 +-223 +129 +250 +148 +-147 +-393 +-477 +-426 +-344 +-89 +337 +749 +1085 +1185 +922 +258 +-486 +-924 +-822 +-377 +54 +269 +307 +394 +432 +302 +49 +-106 +-266 +-582 +-1127 +-1698 +-1950 +-1604 +-685 +435 +1475 +2229 +2510 +2282 +1719 +1003 +77 +-887 +-1524 +-1657 +-1401 +-951 +-460 +78 +721 +1245 +1480 +1472 +1415 +1073 +342 +-546 +-1287 +-1593 +-1517 +-1188 +-748 +-251 +159 +329 +249 +-58 +-357 +-500 +-478 +-400 +-151 +290 +736 +1113 +1247 +1016 +358 +-431 +-941 +-909 +-480 +-26 +233 +299 +402 +467 +363 +86 +-109 +-279 +-573 +-1066 +-1613 +-1873 +-1595 +-748 +325 +1339 +2116 +2461 +2300 +1783 +1104 +193 +-796 +-1507 +-1711 +-1492 +-1044 +-507 +59 +722 +1256 +1497 +1454 +1356 +1047 +353 +-504 +-1235 +-1538 +-1455 +-1143 +-723 +-279 +91 +244 +179 +-93 +-365 +-487 +-452 +-369 +-133 +294 +717 +1063 +1192 +977 +365 +-391 +-893 +-882 +-475 +-29 +229 +282 +372 +444 +364 +103 +-89 +-248 +-530 +-1022 +-1608 +-1928 +-1713 +-892 +210 +1277 +2102 +2486 +2356 +1840 +1150 +252 +-748 +-1477 +-1704 +-1490 +-1058 +-544 +-21 +604 +1150 +1445 +1456 +1406 +1150 +486 +-382 +-1166 +-1546 +-1531 +-1252 +-839 +-366 +70 +289 +274 +11 +-297 +-476 +-486 +-420 +-224 +197 +635 +1028 +1219 +1086 +527 +-246 +-827 +-918 +-549 +-99 +197 +270 +367 +459 +414 +164 +-65 +-254 +-548 +-1015 +-1570 +-1885 +-1703 +-934 +120 +1161 +1996 +2444 +2383 +1906 +1245 +377 +-614 +-1391 +-1693 +-1546 +-1155 +-646 +-82 +609 +1220 +1531 +1518 +1403 +1135 +493 +-352 +-1136 +-1530 +-1507 +-1223 +-803 +-347 +68 +256 +224 +-33 +-337 +-491 +-472 +-368 +-166 +245 +672 +1034 +1210 +1076 +538 +-232 +-824 +-941 +-581 +-122 +197 +282 +368 +452 +412 +164 +-67 +-233 +-495 +-936 +-1509 +-1885 +-1782 +-1062 +-2 +1071 +1968 +2468 +2436 +1976 +1293 +423 +-585 +-1382 +-1708 +-1557 +-1161 +-652 +-123 +513 +1106 +1443 +1476 +1402 +1199 +599 +-232 +-1044 +-1491 +-1517 +-1282 +-902 +-468 +-32 +218 +261 +65 +-237 +-424 +-450 +-388 +-226 +151 +577 +944 +1162 +1090 +626 +-102 +-725 +-917 +-628 +-194 +136 +243 +338 +458 +448 +229 +-20 +-201 +-475 +-913 +-1486 +-1873 +-1798 +-1117 +-85 +973 +1867 +2394 +2424 +1998 +1344 +514 +-477 +-1307 +-1694 +-1611 +-1261 +-774 +-238 +435 +1096 +1486 +1541 +1434 +1211 +627 +-201 +-1012 +-1501 +-1549 +-1305 +-894 +-429 +17 +263 +273 +49 +-279 +-482 +-508 +-431 +-266 +129 +583 +978 +1211 +1139 +678 +-73 +-722 +-950 +-671 +-220 +133 +259 +352 +469 +462 +241 +-25 +-197 +-438 +-836 +-1403 +-1839 +-1843 +-1241 +-231 +857 +1802 +2399 +2481 +2103 +1453 +623 +-390 +-1266 +-1708 +-1652 +-1291 +-784 +-236 +411 +1044 +1418 +1467 +1378 +1226 +714 +-61 +-881 +-1419 +-1519 +-1329 +-965 +-543 +-105 +167 +236 +87 +-195 +-388 +-434 +-388 +-269 +81 +508 +896 +1157 +1147 +751 +33 +-627 +-915 +-688 +-267 +88 +225 +310 +437 +457 +277 +28 +-134 +-382 +-800 +-1388 +-1853 +-1876 +-1281 +-264 +813 +1740 +2348 +2469 +2114 +1494 +704 +-288 +-1173 +-1653 +-1640 +-1331 +-862 +-347 +291 +972 +1421 +1531 +1448 +1302 +797 +-9 +-869 +-1457 +-1590 +-1400 +-1011 +-543 +-62 +252 +311 +127 +-206 +-446 +-510 +-449 +-324 +19 +477 +899 +1200 +1211 +827 +77 +-636 +-965 +-761 +-317 +70 +234 +317 +461 +500 +320 +30 +-154 +-389 +-764 +-1316 +-1798 +-1884 +-1376 +-408 +674 +1644 +2319 +2504 +2201 +1611 +820 +-182 +-1121 +-1668 +-1702 +-1386 +-888 +-351 +276 +943 +1391 +1502 +1422 +1288 +835 +75 +-770 +-1381 +-1538 +-1365 +-1007 +-593 +-157 +139 +225 +105 +-175 +-382 +-442 +-386 +-287 +20 +446 +839 +1133 +1161 +833 +141 +-556 +-910 +-748 +-328 +42 +200 +268 +402 +463 +318 +49 +-122 +-340 +-702 +-1264 +-1782 +-1925 +-1452 +-479 +621 +1599 +2280 +2490 +2203 +1613 +855 +-116 +-1057 +-1625 +-1684 +-1395 +-934 +-432 +161 +846 +1349 +1533 +1477 +1359 +927 +157 +-714 +-1375 +-1589 +-1462 +-1108 +-656 +-166 +201 +326 +206 +-117 +-388 +-496 +-463 +-371 +-79 +375 +809 +1150 +1231 +937 +243 +-505 +-934 +-826 +-403 +-7 +194 +273 +424 +506 +379 +82 +-127 +-353 +-698 +-1230 +-1739 +-1916 +-1520 +-599 +481 +1478 +2215 +2504 +2277 +1718 +980 +10 +-983 +-1628 +-1748 +-1481 +-1002 +-454 +160 +853 +1358 +1525 +1445 +1321 +924 +180 +-666 +-1324 +-1533 +-1394 +-1049 +-634 +-201 +131 +244 +149 +-146 +-403 +-496 +-433 +-330 +-52 +388 +795 +1110 +1194 +941 +292 +-441 +-890 +-811 +-402 +-1 +203 +256 +393 +479 +377 +91 +-95 +-285 +-613 +-1151 +-1710 +-1946 +-1602 +-692 +417 +1447 +2204 +2506 +2292 +1731 +1006 +67 +-911 +-1574 +-1712 +-1458 +-1005 +-484 +85 +759 +1282 +1504 +1462 +1372 +1034 +312 +-555 +-1273 +-1551 +-1462 +-1148 +-733 +-272 +124 +306 +255 +-36 +-335 +-477 +-461 +-389 +-143 +290 +712 +1067 +1210 +1027 +416 +-345 +-866 +-868 +-490 +-80 +164 +237 +380 +498 +432 +149 +-74 +-290 +-611 +-1123 +-1667 +-1914 +-1613 +-745 +332 +1347 +2123 +2478 +2321 +1793 +1105 +201 +-804 +-1525 +-1749 +-1543 +-1113 +-580 +20 +724 +1289 +1526 +1467 +1352 +1026 +333 +-521 +-1258 +-1551 +-1444 +-1108 +-678 +-232 +134 +272 +202 +-82 +-375 +-509 +-474 +-383 +-146 +291 +711 +1052 +1186 +1000 +418 +-330 +-854 +-876 +-488 +-61 +200 +261 +383 +489 +426 +150 +-74 +-257 +-549 +-1033 +-1610 +-1918 +-1699 +-885 +201 +1252 +2077 +2478 +2358 +1840 +1143 +247 +-759 +-1505 +-1746 +-1540 +-1109 +-589 +-38 +640 +1211 +1483 +1458 +1369 +1106 +448 +-386 +-1149 +-1504 +-1473 +-1204 +-813 +-372 +45 +256 +253 +6 +-293 +-450 +-444 +-381 +-187 +213 +620 +981 +1177 +1078 +561 +-192 +-777 +-890 +-562 +-150 +125 +203 +336 +473 +463 +213 +-22 +-218 +-515 +-990 +-1563 +-1890 +-1708 +-931 +125 +1156 +1985 +2423 +2349 +1877 +1218 +360 +-633 +-1409 +-1712 +-1568 +-1191 +-690 +-125 +583 +1221 +1534 +1512 +1393 +1127 +487 +-359 +-1160 +-1546 +-1503 +-1196 +-772 +-319 +96 +287 +262 +1 +-317 +-491 +-480 +-396 +-205 +208 +640 +1006 +1199 +1092 +575 +-194 +-812 +-962 +-630 +-193 +123 +219 +351 +496 +483 +225 +-32 +-200 +-456 +-878 +-1463 +-1859 +-1769 +-1063 +-17 +1032 +1909 +2411 +2403 +1953 +1289 +439 +-574 +-1397 +-1747 +-1609 +-1208 +-687 +-136 +527 +1134 +1450 +1449 +1358 +1163 +588 +-227 +-1029 +-1466 +-1464 +-1197 +-816 +-412 +-12 +212 +244 +41 +-259 +-440 +-459 +-401 +-256 +117 +522 +888 +1117 +1078 +646 +-75 +-695 +-898 +-619 +-212 +98 +195 +316 +474 +496 +270 +18 +-155 +-422 +-864 +-1462 +-1876 +-1808 +-1116 +-73 +973 +1855 +2380 +2398 +1970 +1328 +517 +-474 +-1305 +-1691 +-1600 +-1252 +-771 +-246 +426 +1083 +1463 +1498 +1402 +1212 +638 +-179 +-1009 +-1489 +-1514 +-1246 +-829 +-385 +49 +282 +294 +67 +-274 +-485 +-521 +-448 +-304 +77 +526 +927 +1190 +1165 +735 +-21 +-694 +-953 +-701 +-273 +72 +196 +320 +493 +527 +302 +9 +-168 +-401 +-793 +-1356 +-1793 +-1807 +-1196 +-190 +850 +1749 +2334 +2411 +2013 +1395 +594 +-397 +-1263 +-1700 +-1638 +-1287 +-779 +-237 +426 +1082 +1450 +1460 +1342 +1182 +678 +-103 +-913 +-1416 +-1457 +-1221 +-847 +-450 +-44 +208 +258 +92 +-219 +-422 +-464 +-396 +-276 +72 +488 +849 +1102 +1103 +745 +44 +-620 +-912 +-697 +-287 +55 +175 +280 +451 +518 +328 +51 +-111 +-345 +-731 +-1326 +-1805 +-1859 +-1283 +-280 +777 +1686 +2290 +2412 +2049 +1441 +673 +-313 +-1203 +-1672 +-1640 +-1310 +-839 +-335 +290 +967 +1406 +1492 +1405 +1275 +786 +-10 +-858 +-1424 +-1526 +-1307 +-925 +-495 +-41 +265 +337 +169 +-176 +-441 +-520 +-474 +-366 +-33 +416 +822 +1121 +1179 +853 +140 +-572 +-937 +-764 +-350 +23 +182 +284 +465 +550 +376 +62 +-126 +-355 +-714 +-1260 +-1739 +-1836 +-1330 +-373 +668 +1586 +2222 +2391 +2086 +1513 +769 +-209 +-1132 +-1674 +-1697 +-1386 +-903 +-362 +281 +975 +1416 +1495 +1365 +1227 +784 +24 +-803 +-1364 +-1455 +-1246 +-882 +-485 +-78 +200 +268 +125 +-191 +-433 +-496 +-426 +-324 +-18 +409 +785 +1074 +1126 +832 +161 +-533 +-902 +-748 +-331 +33 +185 +251 +415 +508 +367 +77 +-96 +-299 +-634 +-1193 +-1721 +-1884 +-1438 +-482 +590 +1549 +2220 +2432 +2142 +1555 +823 +-136 +-1072 +-1639 +-1680 +-1380 +-916 +-414 +173 +858 +1337 +1482 +1405 +1312 +909 +151 +-712 +-1357 +-1524 +-1359 +-998 +-588 +-140 +210 +341 +239 +-95 +-381 +-494 +-460 +-381 +-105 +326 +730 +1057 +1174 +952 +302 +-439 +-900 +-824 +-435 +-56 +136 +215 +408 +545 +444 +133 +-68 +-291 +-630 +-1167 +-1694 +-1873 +-1473 +-563 +487 +1453 +2157 +2426 +2190 +1624 +917 +-20 +-984 +-1613 +-1723 +-1472 +-1034 +-501 +123 +863 +1392 +1548 +1431 +1290 +897 +159 +-702 +-1359 +-1532 +-1344 +-964 +-541 +-110 +207 +301 +180 +-149 +-428 +-525 +-464 +-359 +-87 +350 +747 +1068 +1172 +946 +304 +-445 +-909 +-849 +-443 +-39 +171 +241 +409 +538 +449 +142 +-61 +-253 +-550 +-1073 +-1651 +-1909 +-1588 +-700 +378 +1385 +2144 +2464 +2261 +1699 +982 +47 +-934 +-1590 +-1720 +-1452 +-1012 +-502 +77 +778 +1308 +1503 +1424 +1323 +1003 +293 +-569 +-1280 +-1521 +-1394 +-1061 +-669 +-243 +131 +300 +257 +-39 +-340 +-486 +-464 +-402 +-170 +247 +646 +999 +1168 +1030 +450 +-304 +-836 +-854 +-487 +-100 +117 +194 +370 +532 +482 +182 +-40 +-240 +-543 +-1053 +-1626 +-1901 +-1605 +-741 +320 +1319 +2083 +2439 +2276 +1745 +1056 +153 +-834 +-1538 +-1725 +-1515 +-1111 +-606 +-20 +728 +1336 +1585 +1501 +1374 +1043 +325 +-551 +-1303 +-1571 +-1436 +-1065 +-629 +-189 +179 +317 +243 +-73 +-391 +-534 +-505 +-410 +-180 +259 +682 +1040 +1201 +1045 +459 +-325 +-885 +-933 +-552 +-131 +131 +207 +380 +542 +499 +191 +-46 +-224 +-497 +-965 +-1558 +-1893 +-1696 +-888 +192 +1223 +2053 +2469 +2361 +1844 +1147 +234 +-803 +-1565 +-1807 +-1587 +-1152 +-622 +-41 +677 +1268 +1518 +1451 +1351 +1092 +442 +-409 +-1171 +-1493 +-1400 +-1096 +-718 +-313 +70 +268 +257 +2 +-312 +-479 +-477 +-421 +-239 +169 +583 +944 +1144 +1062 +543 +-212 +-791 +-896 +-546 +-138 +126 +191 +351 +530 +525 +245 +4 +-178 +-467 +-952 +-1566 +-1927 +-1746 +-935 +133 +1159 +1980 +2417 +2359 +1877 +1208 +324 +-698 +-1468 +-1743 +-1560 +-1173 +-693 +-152 +566 +1221 +1547 +1521 +1418 +1174 +516 +-352 +-1156 +-1532 +-1465 +-1154 +-746 +-299 +118 +324 +303 +13 +-343 +-538 +-541 +-471 +-292 +135 +574 +967 +1202 +1130 +614 +-183 +-819 +-965 +-614 +-183 +112 +185 +335 +524 +539 +251 +-23 +-186 +-428 +-853 +-1441 +-1842 +-1744 +-1019 +20 +1050 +1914 +2416 +2402 +1950 +1300 +445 +-588 +-1417 +-1764 +-1615 +-1230 +-715 +-157 +553 +1209 +1520 +1475 +1355 +1162 +573 +-256 +-1059 +-1481 +-1435 +-1149 +-778 +-389 +5 +224 +252 +33 +-294 +-476 +-477 +-419 +-279 +102 +517 +891 +1126 +1097 +644 +-111 +-745 +-940 +-613 +-190 +105 +163 +284 +483 +534 +286 +16 +-133 +-376 +-799 +-1417 +-1869 +-1819 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g3_195_998.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g3_195_998.samples new file mode 100644 index 00000000..70969f87 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g3_195_998.samples @@ -0,0 +1,4096 @@ +-1059 +-905 +-692 +-454 +-216 +13 +232 +458 +700 +988 +1325 +1686 +2025 +2273 +2407 +2445 +2400 +2297 +2118 +1889 +1651 +1416 +1197 +980 +781 +598 +453 +350 +264 +145 +-36 +-268 +-530 +-797 +-1071 +-1335 +-1572 +-1752 +-1852 +-1845 +-1739 +-1576 +-1391 +-1210 +-1058 +-959 +-935 +-959 +-990 +-1006 +-1000 +-967 +-898 +-797 +-666 +-512 +-331 +-143 +0 +82 +121 +139 +129 +97 +55 +21 +-4 +-26 +-58 +-104 +-163 +-224 +-252 +-236 +-172 +-96 +-39 +-18 +-37 +-90 +-161 +-240 +-317 +-374 +-393 +-372 +-322 +-254 +-184 +-124 +-80 +-47 +-21 +-2 +12 +25 +44 +74 +128 +199 +278 +349 +389 +384 +331 +240 +127 +23 +-46 +-77 +-57 +-5 +68 +152 +238 +319 +364 +345 +243 +60 +-175 +-408 +-600 +-719 +-763 +-748 +-694 +-633 +-586 +-603 +-721 +-921 +-1183 +-1469 +-1762 +-2054 +-2326 +-2545 +-2643 +-2567 +-2249 +-1722 +-1113 +-588 +-202 +95 +392 +730 +1067 +1350 +1548 +1686 +1811 +1950 +2094 +2216 +2334 +2474 +2644 +2776 +2799 +2702 +2522 +2307 +2036 +1685 +1243 +773 +392 +143 +-13 +-115 +-173 +-198 +-220 +-298 +-495 +-778 +-1034 +-1172 +-1159 +-1033 +-882 +-739 +-586 +-410 +-243 +-122 +-42 +25 +85 +133 +162 +195 +251 +330 +432 +533 +603 +644 +681 +730 +756 +737 +681 +597 +476 +321 +164 +26 +-106 +-234 +-349 +-464 +-580 +-681 +-773 +-853 +-919 +-972 +-1028 +-1080 +-1111 +-1103 +-1040 +-915 +-746 +-542 +-319 +-92 +143 +368 +596 +859 +1184 +1560 +1935 +2224 +2386 +2438 +2411 +2328 +2180 +1972 +1729 +1493 +1265 +1050 +852 +668 +515 +407 +322 +220 +60 +-159 +-414 +-691 +-980 +-1276 +-1548 +-1765 +-1889 +-1903 +-1808 +-1647 +-1461 +-1271 +-1101 +-989 +-959 +-992 +-1038 +-1063 +-1063 +-1031 +-969 +-870 +-738 +-586 +-410 +-221 +-64 +37 +93 +122 +126 +99 +58 +20 +3 +-14 +-36 +-86 +-152 +-217 +-254 +-241 +-182 +-100 +-24 +29 +36 +-7 +-84 +-178 +-277 +-342 +-369 +-360 +-323 +-269 +-199 +-134 +-86 +-62 +-49 +-36 +-27 +-18 +0 +31 +81 +156 +243 +328 +378 +383 +339 +260 +162 +72 +5 +-27 +-17 +29 +91 +158 +232 +303 +350 +345 +264 +101 +-119 +-357 +-562 +-702 +-765 +-765 +-728 +-676 +-629 +-632 +-712 +-891 +-1146 +-1433 +-1726 +-2008 +-2264 +-2471 +-2603 +-2588 +-2356 +-1879 +-1263 +-678 +-244 +55 +315 +619 +958 +1268 +1497 +1638 +1754 +1894 +2060 +2204 +2325 +2447 +2591 +2733 +2797 +2728 +2567 +2355 +2093 +1773 +1374 +914 +503 +218 +36 +-81 +-153 +-189 +-204 +-253 +-406 +-666 +-945 +-1135 +-1173 +-1079 +-931 +-786 +-637 +-472 +-301 +-166 +-73 +-1 +63 +117 +151 +183 +232 +305 +397 +499 +582 +634 +679 +734 +777 +779 +743 +678 +569 +413 +235 +72 +-62 +-187 +-292 +-400 +-515 +-615 +-704 +-785 +-869 +-939 +-1001 +-1058 +-1089 +-1093 +-1053 +-948 +-789 +-585 +-368 +-147 +76 +301 +538 +794 +1096 +1441 +1798 +2110 +2315 +2407 +2403 +2331 +2193 +1995 +1763 +1524 +1298 +1082 +882 +701 +545 +422 +325 +226 +79 +-124 +-363 +-623 +-895 +-1175 +-1438 +-1658 +-1809 +-1866 +-1819 +-1690 +-1509 +-1314 +-1127 +-987 +-926 +-938 +-990 +-1029 +-1046 +-1040 +-992 +-899 +-765 +-614 +-443 +-255 +-86 +29 +87 +109 +104 +83 +50 +19 +-5 +-22 +-40 +-63 +-103 +-163 +-218 +-241 +-217 +-149 +-68 +-9 +7 +-24 +-87 +-169 +-254 +-335 +-390 +-405 +-383 +-331 +-256 +-184 +-121 +-75 +-45 +-28 +-23 +-23 +-18 +6 +56 +128 +215 +303 +371 +405 +393 +326 +221 +103 +10 +-34 +-33 +3 +57 +117 +192 +275 +339 +358 +303 +169 +-34 +-257 +-465 +-625 +-716 +-741 +-709 +-658 +-611 +-608 +-679 +-836 +-1066 +-1340 +-1629 +-1912 +-2180 +-2412 +-2569 +-2602 +-2458 +-2071 +-1494 +-898 +-418 +-81 +189 +491 +837 +1171 +1432 +1605 +1735 +1865 +2022 +2173 +2297 +2411 +2545 +2695 +2783 +2758 +2616 +2420 +2184 +1893 +1518 +1063 +614 +279 +72 +-54 +-132 +-177 +-204 +-247 +-368 +-598 +-875 +-1090 +-1164 +-1099 +-955 +-804 +-661 +-504 +-335 +-183 +-77 +-5 +58 +113 +156 +191 +241 +308 +394 +496 +586 +638 +672 +713 +752 +756 +719 +653 +559 +422 +260 +104 +-38 +-177 +-309 +-429 +-546 +-650 +-733 +-807 +-884 +-952 +-1012 +-1071 +-1118 +-1136 +-1107 +-1017 +-855 +-648 +-418 +-191 +35 +263 +496 +746 +1039 +1384 +1749 +2083 +2317 +2434 +2449 +2396 +2278 +2093 +1861 +1621 +1394 +1179 +973 +775 +600 +458 +362 +270 +141 +-54 +-298 +-557 +-825 +-1098 +-1361 +-1594 +-1763 +-1848 +-1829 +-1720 +-1564 +-1393 +-1221 +-1072 +-983 +-967 +-989 +-1017 +-1032 +-1026 +-994 +-923 +-814 +-679 +-519 +-334 +-155 +-20 +55 +95 +112 +104 +73 +29 +-5 +-27 +-47 +-73 +-117 +-175 +-227 +-244 +-216 +-150 +-82 +-29 +-3 +-13 +-59 +-135 +-226 +-309 +-359 +-368 +-346 +-304 +-247 +-185 +-123 +-74 +-42 +-21 +-11 +-12 +-11 +2 +32 +89 +172 +264 +345 +391 +389 +339 +252 +140 +37 +-39 +-66 +-39 +18 +92 +170 +251 +328 +371 +348 +237 +47 +-189 +-419 +-609 +-722 +-772 +-761 +-710 +-651 +-614 +-646 +-770 +-977 +-1249 +-1542 +-1840 +-2129 +-2377 +-2560 +-2641 +-2548 +-2223 +-1696 +-1080 +-549 +-158 +136 +428 +755 +1095 +1382 +1581 +1715 +1830 +1970 +2116 +2252 +2373 +2513 +2676 +2789 +2802 +2688 +2502 +2278 +1998 +1637 +1192 +726 +352 +110 +-41 +-136 +-191 +-213 +-234 +-315 +-514 +-796 +-1048 +-1172 +-1148 +-1021 +-871 +-725 +-566 +-388 +-225 +-108 +-29 +30 +90 +136 +165 +199 +261 +353 +463 +563 +626 +660 +697 +744 +762 +736 +674 +582 +460 +309 +158 +26 +-99 +-216 +-324 +-439 +-560 +-665 +-753 +-832 +-897 +-956 +-1017 +-1069 +-1095 +-1083 +-1017 +-886 +-704 +-493 +-270 +-47 +174 +389 +615 +876 +1191 +1552 +1906 +2185 +2341 +2397 +2377 +2295 +2143 +1928 +1678 +1436 +1211 +996 +803 +620 +474 +374 +299 +201 +43 +-181 +-434 +-709 +-998 +-1291 +-1551 +-1746 +-1857 +-1865 +-1769 +-1605 +-1422 +-1231 +-1062 +-957 +-933 +-963 +-1003 +-1024 +-1022 +-992 +-928 +-823 +-686 +-528 +-352 +-173 +-25 +65 +112 +134 +126 +95 +52 +20 +-5 +-28 +-59 +-108 +-167 +-227 +-265 +-255 +-201 +-123 +-49 +-1 +-4 +-54 +-131 +-218 +-302 +-356 +-377 +-360 +-317 +-253 +-175 +-106 +-59 +-36 +-22 +-10 +1 +7 +18 +42 +93 +170 +259 +335 +373 +369 +322 +241 +138 +34 +-39 +-71 +-58 +-7 +64 +146 +230 +311 +361 +349 +258 +86 +-137 +-365 +-555 +-683 +-741 +-735 +-688 +-627 +-580 +-586 +-679 +-869 +-1129 +-1423 +-1721 +-2005 +-2269 +-2480 +-2607 +-2583 +-2334 +-1858 +-1252 +-689 +-269 +23 +290 +602 +945 +1258 +1485 +1630 +1753 +1899 +2059 +2207 +2320 +2443 +2602 +2742 +2803 +2738 +2585 +2374 +2112 +1789 +1376 +906 +494 +210 +38 +-71 +-139 +-175 +-197 +-259 +-421 +-687 +-964 +-1142 +-1167 +-1066 +-917 +-773 +-629 +-469 +-301 +-171 +-86 +-20 +38 +88 +123 +162 +220 +304 +405 +511 +584 +625 +656 +706 +748 +748 +711 +645 +535 +381 +213 +60 +-72 +-202 +-324 +-441 +-558 +-659 +-748 +-833 +-913 +-979 +-1032 +-1081 +-1112 +-1120 +-1075 +-961 +-785 +-577 +-357 +-133 +102 +347 +595 +860 +1157 +1496 +1859 +2173 +2373 +2444 +2428 +2352 +2219 +2028 +1794 +1551 +1314 +1091 +883 +702 +542 +417 +319 +219 +73 +-128 +-366 +-632 +-913 +-1195 +-1461 +-1681 +-1830 +-1887 +-1833 +-1689 +-1497 +-1295 +-1116 +-990 +-934 +-949 +-995 +-1034 +-1048 +-1031 +-975 +-877 +-747 +-599 +-432 +-240 +-70 +43 +97 +116 +113 +91 +55 +21 +0 +-14 +-30 +-61 +-117 +-193 +-255 +-275 +-240 +-164 +-84 +-27 +-11 +-39 +-102 +-183 +-274 +-352 +-399 +-404 +-370 +-304 +-224 +-153 +-93 +-54 +-28 +-12 +-14 +-19 +-14 +14 +68 +145 +234 +322 +390 +420 +389 +311 +198 +84 +5 +-32 +-27 +8 +62 +127 +199 +276 +337 +351 +292 +152 +-49 +-276 +-486 +-643 +-723 +-739 +-707 +-659 +-617 +-609 +-683 +-837 +-1062 +-1332 +-1612 +-1889 +-2157 +-2383 +-2544 +-2590 +-2444 +-2041 +-1461 +-876 +-412 +-91 +179 +485 +829 +1155 +1401 +1562 +1690 +1831 +1996 +2148 +2272 +2383 +2530 +2687 +2782 +2755 +2622 +2426 +2183 +1890 +1511 +1048 +601 +272 +71 +-58 +-136 +-174 +-191 +-226 +-354 +-603 +-895 +-1113 +-1181 +-1105 +-955 +-804 +-661 +-500 +-330 +-183 +-83 +-12 +50 +106 +147 +181 +229 +299 +388 +492 +584 +644 +679 +721 +761 +762 +728 +665 +571 +431 +260 +98 +-46 +-177 +-293 +-396 +-506 +-615 +-708 +-788 +-862 +-923 +-987 +-1059 +-1119 +-1143 +-1107 +-1000 +-824 +-614 +-387 +-162 +54 +268 +477 +704 +985 +1323 +1697 +2040 +2279 +2392 +2416 +2381 +2268 +2090 +1853 +1614 +1385 +1161 +943 +745 +574 +447 +363 +275 +145 +-48 +-286 +-537 +-795 +-1070 +-1337 +-1571 +-1747 +-1835 +-1821 +-1715 +-1559 +-1379 +-1193 +-1034 +-938 +-929 +-961 +-995 +-1011 +-1005 +-974 +-910 +-803 +-662 +-492 +-299 +-115 +18 +92 +128 +135 +113 +67 +20 +-8 +-27 +-42 +-70 +-123 +-189 +-248 +-270 +-245 +-184 +-116 +-61 +-35 +-52 +-108 +-186 +-273 +-350 +-391 +-400 +-380 +-334 +-268 +-191 +-118 +-68 +-36 +-18 +-5 +3 +9 +27 +59 +125 +215 +313 +384 +409 +391 +334 +245 +135 +32 +-37 +-56 +-17 +52 +127 +194 +263 +329 +358 +320 +192 +-12 +-253 +-481 +-661 +-768 +-803 +-782 +-730 +-670 +-639 +-681 +-815 +-1037 +-1299 +-1583 +-1871 +-2148 +-2389 +-2557 +-2625 +-2520 +-2165 +-1602 +-987 +-473 +-116 +156 +435 +763 +1094 +1372 +1566 +1696 +1825 +1978 +2131 +2264 +2378 +2514 +2667 +2778 +2779 +2668 +2485 +2256 +1979 +1624 +1178 +712 +349 +113 +-36 +-130 +-176 +-190 +-207 +-297 +-513 +-800 +-1051 +-1166 +-1131 +-1000 +-847 +-703 +-548 +-386 +-238 +-132 +-51 +25 +92 +141 +173 +213 +281 +370 +474 +566 +621 +648 +689 +735 +759 +741 +693 +616 +490 +330 +166 +23 +-107 +-234 +-353 +-481 +-602 +-699 +-778 +-848 +-908 +-959 +-1022 +-1080 +-1112 +-1105 +-1033 +-895 +-700 +-470 +-230 +6 +230 +447 +672 +944 +1276 +1647 +2005 +2278 +2417 +2451 +2415 +2309 +2137 +1909 +1669 +1440 +1225 +1014 +811 +626 +475 +370 +284 +166 +-16 +-248 +-497 +-761 +-1037 +-1311 +-1557 +-1739 +-1842 +-1845 +-1748 +-1587 +-1400 +-1210 +-1045 +-945 +-920 +-949 +-981 +-995 +-993 +-971 +-912 +-810 +-676 +-523 +-345 +-161 +-5 +88 +131 +144 +124 +75 +25 +-11 +-34 +-51 +-79 +-123 +-181 +-243 +-277 +-261 +-205 +-128 +-67 +-33 +-49 +-115 +-202 +-293 +-369 +-417 +-423 +-399 +-352 +-284 +-208 +-144 +-101 +-79 +-63 +-53 +-37 +-22 +2 +46 +108 +192 +283 +356 +393 +390 +341 +256 +148 +44 +-32 +-64 +-47 +-3 +57 +120 +191 +268 +315 +311 +216 +44 +-180 +-408 +-603 +-729 +-776 +-767 +-718 +-661 +-620 +-636 +-737 +-924 +-1175 +-1460 +-1757 +-2044 +-2312 +-2523 +-2630 +-2589 +-2310 +-1795 +-1169 +-604 +-209 +62 +324 +645 +998 +1311 +1536 +1684 +1811 +1960 +2113 +2244 +2344 +2463 +2619 +2761 +2806 +2723 +2556 +2341 +2083 +1760 +1333 +852 +443 +175 +17 +-81 +-133 +-158 +-177 +-246 +-435 +-723 +-1005 +-1169 +-1166 +-1037 +-876 +-733 +-592 +-433 +-273 +-158 +-80 +-23 +35 +91 +128 +169 +229 +313 +418 +524 +596 +633 +660 +704 +742 +740 +707 +639 +526 +366 +201 +60 +-64 +-187 +-300 +-414 +-531 +-631 +-719 +-805 +-880 +-938 +-994 +-1051 +-1090 +-1089 +-1034 +-904 +-719 +-509 +-288 +-67 +160 +389 +615 +861 +1156 +1509 +1876 +2180 +2363 +2422 +2403 +2315 +2171 +1966 +1726 +1490 +1264 +1049 +845 +659 +498 +380 +300 +204 +54 +-153 +-399 +-657 +-934 +-1221 +-1483 +-1697 +-1838 +-1880 +-1807 +-1649 +-1453 +-1249 +-1067 +-944 +-907 +-942 +-998 +-1033 +-1041 +-1017 +-953 +-848 +-710 +-553 +-376 +-186 +-31 +63 +104 +121 +120 +96 +60 +26 +7 +-6 +-23 +-57 +-122 +-199 +-264 +-281 +-236 +-159 +-81 +-30 +-15 +-48 +-120 +-210 +-308 +-386 +-415 +-400 +-356 +-294 +-227 +-162 +-105 +-70 +-53 +-51 +-55 +-50 +-31 +8 +71 +146 +236 +316 +373 +383 +336 +249 +140 +39 +-28 +-55 +-37 +10 +71 +142 +216 +288 +336 +334 +257 +106 +-104 +-333 +-537 +-687 +-762 +-760 +-713 +-650 +-602 +-603 +-691 +-869 +-1114 +-1393 +-1678 +-1959 +-2226 +-2452 +-2605 +-2628 +-2427 +-1959 +-1332 +-729 +-281 +19 +272 +571 +912 +1230 +1465 +1617 +1739 +1885 +2050 +2197 +2304 +2420 +2574 +2729 +2800 +2743 +2590 +2380 +2140 +1832 +1438 +965 +532 +235 +54 +-64 +-135 +-170 +-180 +-216 +-368 +-640 +-947 +-1152 +-1192 +-1090 +-934 +-787 +-648 +-491 +-325 +-193 +-110 +-47 +14 +71 +114 +152 +206 +282 +382 +494 +584 +628 +663 +707 +751 +753 +720 +661 +556 +405 +225 +63 +-75 +-205 +-324 +-436 +-550 +-650 +-727 +-802 +-880 +-949 +-1013 +-1077 +-1120 +-1127 +-1077 +-957 +-776 +-554 +-318 +-91 +127 +344 +566 +815 +1117 +1469 +1836 +2149 +2351 +2431 +2426 +2366 +2222 +2019 +1778 +1552 +1346 +1138 +930 +730 +551 +422 +332 +237 +89 +-125 +-365 +-612 +-865 +-1130 +-1392 +-1616 +-1775 +-1850 +-1819 +-1697 +-1527 +-1336 +-1143 +-988 +-915 +-918 +-960 +-995 +-1008 +-1002 +-968 +-890 +-772 +-622 +-445 +-246 +-65 +58 +116 +136 +137 +112 +64 +17 +-14 +-30 +-39 +-65 +-116 +-179 +-240 +-262 +-235 +-172 +-98 +-39 +-15 +-36 +-102 +-189 +-279 +-357 +-398 +-403 +-380 +-334 +-270 +-196 +-128 +-82 +-52 +-38 +-25 +-16 +-12 +10 +54 +124 +210 +294 +360 +391 +381 +324 +227 +116 +21 +-29 +-23 +22 +84 +144 +207 +276 +344 +372 +326 +187 +-27 +-267 +-486 +-648 +-743 +-765 +-737 +-679 +-622 +-603 +-666 +-828 +-1062 +-1335 +-1619 +-1903 +-2185 +-2431 +-2611 +-2663 +-2516 +-2127 +-1531 +-910 +-410 +-76 +177 +452 +780 +1124 +1407 +1598 +1723 +1851 +2006 +2157 +2283 +2396 +2535 +2691 +2792 +2781 +2648 +2448 +2215 +1940 +1572 +1118 +659 +314 +104 +-24 +-99 +-139 +-152 +-184 +-306 +-553 +-862 +-1103 +-1192 +-1123 +-964 +-801 +-656 +-503 +-342 +-212 +-131 +-70 +-15 +41 +82 +108 +153 +222 +317 +428 +520 +577 +610 +653 +700 +711 +679 +622 +533 +400 +240 +86 +-44 +-165 +-281 +-386 +-496 +-601 +-684 +-756 +-831 +-891 +-944 +-1006 +-1061 +-1089 +-1074 +-990 +-831 +-613 +-374 +-134 +87 +292 +495 +715 +988 +1324 +1705 +2055 +2301 +2414 +2422 +2370 +2259 +2072 +1838 +1598 +1373 +1160 +950 +748 +567 +425 +328 +246 +124 +-62 +-301 +-553 +-814 +-1089 +-1352 +-1578 +-1742 +-1826 +-1811 +-1702 +-1532 +-1343 +-1161 +-1010 +-927 +-914 +-943 +-968 +-976 +-970 +-936 +-861 +-747 +-613 +-459 +-279 +-99 +38 +110 +139 +142 +124 +84 +43 +17 +2 +-10 +-34 +-80 +-150 +-223 +-264 +-243 +-177 +-95 +-33 +-11 +-40 +-112 +-193 +-281 +-363 +-414 +-428 +-402 +-351 +-282 +-215 +-171 +-140 +-117 +-91 +-61 +-41 +-27 +-8 +31 +105 +203 +307 +380 +412 +400 +345 +262 +158 +58 +-1 +-20 +5 +57 +115 +178 +247 +321 +367 +348 +244 +54 +-185 +-424 +-612 +-730 +-773 +-760 +-727 +-680 +-656 +-689 +-815 +-1025 +-1280 +-1561 +-1842 +-2122 +-2390 +-2617 +-2739 +-2668 +-2334 +-1743 +-1076 +-521 +-154 +98 +368 +705 +1070 +1387 +1602 +1746 +1881 +2036 +2185 +2302 +2402 +2525 +2686 +2815 +2834 +2722 +2548 +2343 +2090 +1745 +1288 +783 +381 +137 +-10 +-103 +-155 +-174 +-186 +-259 +-470 +-788 +-1076 +-1219 +-1182 +-1028 +-862 +-726 +-588 +-431 +-285 +-186 +-127 +-71 +-8 +49 +92 +137 +203 +290 +403 +514 +578 +602 +624 +673 +709 +704 +669 +596 +469 +303 +146 +21 +-91 +-212 +-322 +-437 +-548 +-637 +-713 +-794 +-867 +-927 +-988 +-1040 +-1068 +-1061 +-997 +-858 +-664 +-443 +-216 +4 +220 +427 +633 +873 +1186 +1561 +1945 +2246 +2407 +2444 +2398 +2297 +2137 +1924 +1684 +1449 +1229 +1011 +804 +614 +450 +344 +268 +177 +19 +-196 +-440 +-688 +-959 +-1238 +-1505 +-1719 +-1849 +-1868 +-1771 +-1600 +-1398 +-1188 +-1000 +-882 +-862 +-909 +-966 +-998 +-996 +-961 +-886 +-774 +-638 +-489 +-314 +-121 +32 +113 +140 +145 +130 +98 +56 +21 +8 +-3 +-17 +-59 +-147 +-249 +-321 +-328 +-265 +-171 +-91 +-39 +-31 +-74 +-158 +-260 +-362 +-439 +-460 +-436 +-383 +-318 +-246 +-175 +-124 +-96 +-88 +-89 +-82 +-64 +-36 +5 +60 +143 +240 +328 +384 +381 +321 +220 +107 +13 +-41 +-56 +-29 +20 +77 +137 +206 +277 +335 +340 +265 +106 +-120 +-365 +-570 +-702 +-764 +-758 +-719 +-668 +-624 +-631 +-723 +-903 +-1151 +-1426 +-1707 +-1983 +-2255 +-2491 +-2648 +-2654 +-2414 +-1905 +-1244 +-638 +-211 +59 +293 +593 +950 +1277 +1514 +1666 +1790 +1946 +2122 +2270 +2380 +2486 +2645 +2795 +2858 +2788 +2619 +2418 +2176 +1860 +1436 +935 +494 +205 +34 +-66 +-124 +-151 +-162 +-218 +-396 +-704 +-1021 +-1217 +-1237 +-1110 +-938 +-787 +-652 +-499 +-343 +-224 +-149 +-87 +-19 +44 +89 +130 +191 +277 +379 +487 +561 +595 +627 +680 +727 +739 +722 +669 +569 +412 +231 +71 +-66 +-188 +-295 +-399 +-510 +-600 +-672 +-750 +-828 +-897 +-961 +-1028 +-1073 +-1084 +-1042 +-922 +-746 +-535 +-315 +-105 +106 +315 +530 +776 +1083 +1455 +1841 +2166 +2354 +2423 +2407 +2330 +2181 +1967 +1732 +1507 +1306 +1100 +897 +705 +540 +420 +332 +230 +72 +-143 +-383 +-626 +-886 +-1156 +-1419 +-1634 +-1781 +-1839 +-1793 +-1661 +-1475 +-1274 +-1070 +-917 +-854 +-872 +-920 +-955 +-965 +-957 +-921 +-840 +-714 +-563 +-387 +-191 +-23 +85 +130 +143 +137 +105 +53 +4 +-20 +-28 +-41 +-72 +-134 +-210 +-280 +-309 +-281 +-215 +-135 +-78 +-62 +-98 +-170 +-257 +-339 +-412 +-450 +-451 +-421 +-362 +-283 +-212 +-158 +-121 +-96 +-73 +-55 +-43 +-32 +-3 +51 +133 +225 +312 +374 +397 +372 +301 +191 +67 +-31 +-73 +-55 +-4 +58 +114 +175 +255 +328 +358 +309 +166 +-50 +-292 +-509 +-666 +-748 +-761 +-721 +-652 +-591 +-581 +-653 +-824 +-1063 +-1334 +-1611 +-1888 +-2159 +-2399 +-2564 +-2610 +-2466 +-2049 +-1433 +-809 +-333 +-35 +192 +462 +805 +1153 +1430 +1601 +1716 +1847 +2010 +2171 +2303 +2411 +2553 +2709 +2802 +2776 +2641 +2454 +2229 +1955 +1582 +1100 +624 +278 +71 +-45 +-115 +-148 +-158 +-191 +-317 +-576 +-892 +-1133 +-1215 +-1134 +-974 +-823 +-690 +-545 +-386 +-251 +-158 +-86 +-15 +50 +97 +129 +177 +252 +348 +464 +555 +599 +628 +674 +732 +760 +746 +696 +603 +462 +294 +142 +14 +-108 +-228 +-342 +-467 +-579 +-666 +-741 +-812 +-878 +-939 +-1011 +-1073 +-1104 +-1091 +-1004 +-843 +-630 +-393 +-157 +63 +270 +472 +694 +973 +1326 +1714 +2069 +2314 +2424 +2428 +2366 +2246 +2062 +1828 +1593 +1374 +1163 +954 +759 +586 +453 +360 +281 +156 +-38 +-279 +-536 +-796 +-1068 +-1331 +-1562 +-1729 +-1814 +-1797 +-1687 +-1522 +-1334 +-1150 +-1001 +-921 +-916 +-949 +-976 +-992 +-989 +-952 +-873 +-756 +-619 +-463 +-282 +-101 +33 +105 +133 +132 +104 +63 +22 +-7 +-30 +-49 +-76 +-117 +-185 +-249 +-281 +-260 +-200 +-127 +-71 +-49 +-74 +-138 +-224 +-318 +-396 +-443 +-443 +-413 +-356 +-284 +-211 +-155 +-114 +-90 +-70 +-54 +-42 +-29 +-9 +30 +98 +187 +277 +347 +387 +381 +329 +245 +131 +31 +-35 +-52 +-23 +26 +89 +155 +229 +301 +342 +317 +203 +9 +-234 +-473 +-660 +-771 +-807 +-788 +-740 +-684 +-649 +-674 +-798 +-1007 +-1277 +-1568 +-1849 +-2123 +-2375 +-2566 +-2646 +-2548 +-2177 +-1583 +-947 +-440 +-106 +142 +419 +759 +1103 +1379 +1562 +1689 +1827 +1984 +2139 +2247 +2348 +2484 +2647 +2770 +2771 +2657 +2467 +2253 +1997 +1650 +1198 +726 +360 +132 +-11 +-106 +-158 +-167 +-176 +-259 +-481 +-784 +-1043 +-1163 +-1124 +-989 +-844 +-715 +-572 +-404 +-252 +-149 +-80 +-13 +54 +105 +137 +173 +234 +321 +428 +527 +584 +612 +644 +692 +721 +706 +660 +573 +445 +292 +142 +12 +-114 +-236 +-353 +-466 +-577 +-671 +-760 +-845 +-909 +-964 +-1018 +-1069 +-1092 +-1073 +-996 +-851 +-660 +-440 +-211 +21 +248 +467 +686 +940 +1256 +1622 +1978 +2247 +2385 +2419 +2382 +2295 +2141 +1921 +1684 +1456 +1245 +1038 +834 +644 +486 +379 +296 +193 +29 +-191 +-435 +-688 +-957 +-1231 +-1482 +-1680 +-1797 +-1810 +-1719 +-1565 +-1383 +-1192 +-1026 +-924 +-909 +-953 +-1005 +-1030 +-1026 +-991 +-917 +-812 +-678 +-527 +-353 +-166 +-25 +58 +91 +99 +89 +52 +9 +-25 +-37 +-44 +-57 +-97 +-162 +-232 +-274 +-259 +-203 +-127 +-66 +-30 +-36 +-86 +-169 +-265 +-355 +-411 +-423 +-393 +-340 +-275 +-199 +-135 +-92 +-73 +-67 +-62 +-49 +-32 +-4 +37 +99 +183 +280 +362 +407 +401 +342 +248 +138 +42 +-21 +-45 +-26 +20 +80 +151 +223 +295 +337 +323 +227 +47 +-183 +-420 +-616 +-747 +-799 +-789 +-751 +-695 +-656 +-673 +-778 +-973 +-1230 +-1513 +-1806 +-2096 +-2366 +-2574 +-2691 +-2640 +-2353 +-1831 +-1189 +-617 +-200 +99 +381 +704 +1051 +1355 +1575 +1717 +1842 +1990 +2149 +2282 +2391 +2517 +2671 +2810 +2845 +2758 +2574 +2352 +2084 +1744 +1309 +830 +426 +158 +-5 +-108 +-170 +-201 +-222 +-290 +-473 +-748 +-1015 +-1168 +-1171 +-1055 +-903 +-764 +-618 +-452 +-291 +-174 +-98 +-33 +31 +88 +124 +160 +218 +302 +406 +506 +575 +614 +647 +688 +715 +708 +672 +611 +506 +347 +180 +38 +-87 +-206 +-321 +-435 +-548 +-639 +-717 +-798 +-877 +-947 +-1008 +-1057 +-1081 +-1069 +-1007 +-883 +-710 +-502 +-290 +-78 +140 +356 +584 +848 +1164 +1523 +1884 +2184 +2366 +2442 +2426 +2342 +2186 +1976 +1737 +1509 +1294 +1079 +875 +686 +538 +433 +352 +245 +77 +-143 +-389 +-647 +-925 +-1210 +-1473 +-1685 +-1816 +-1850 +-1784 +-1642 +-1462 +-1259 +-1073 +-949 +-909 +-933 +-980 +-1012 +-1020 +-1002 +-943 +-836 +-694 +-535 +-363 +-179 +-22 +82 +130 +146 +142 +112 +72 +33 +9 +-10 +-27 +-58 +-110 +-177 +-233 +-246 +-207 +-136 +-67 +-20 +-12 +-52 +-120 +-201 +-286 +-357 +-400 +-406 +-380 +-328 +-262 +-201 +-152 +-120 +-98 +-92 +-91 +-96 +-88 +-60 +-2 +86 +180 +268 +328 +353 +329 +258 +150 +37 +-43 +-70 +-49 +9 +78 +152 +233 +315 +377 +379 +295 +128 +-99 +-337 +-545 +-691 +-762 +-761 +-715 +-654 +-607 +-612 +-698 +-878 +-1124 +-1411 +-1711 +-1998 +-2260 +-2468 +-2596 +-2600 +-2401 +-1957 +-1348 +-747 +-282 +40 +307 +617 +964 +1297 +1542 +1692 +1805 +1939 +2101 +2243 +2358 +2475 +2625 +2772 +2851 +2806 +2657 +2442 +2188 +1876 +1474 +995 +555 +243 +48 +-77 +-158 +-195 +-215 +-260 +-408 +-670 +-964 +-1169 +-1216 +-1127 +-977 +-834 +-692 +-534 +-366 +-232 +-142 +-73 +-12 +52 +96 +138 +192 +269 +369 +484 +580 +638 +684 +733 +774 +777 +744 +685 +591 +451 +291 +144 +11 +-122 +-253 +-379 +-503 +-610 +-695 +-775 +-858 +-927 +-992 +-1056 +-1107 +-1132 +-1111 +-1020 +-853 +-643 +-415 +-189 +31 +261 +498 +757 +1058 +1410 +1777 +2102 +2323 +2424 +2442 +2392 +2279 +2095 +1861 +1627 +1395 +1175 +964 +766 +594 +463 +375 +291 +157 +-44 +-299 +-574 +-855 +-1148 +-1428 +-1663 +-1828 +-1894 +-1853 +-1721 +-1540 +-1358 +-1178 +-1039 +-964 +-962 +-997 +-1029 +-1048 +-1036 +-992 +-909 +-793 +-650 +-480 +-283 +-90 +47 +115 +146 +153 +139 +101 +52 +10 +-20 +-46 +-76 +-126 +-191 +-248 +-267 +-235 +-163 +-89 +-43 +-39 +-82 +-154 +-241 +-327 +-400 +-439 +-442 +-411 +-353 +-284 +-215 +-159 +-115 +-85 +-59 +-43 +-33 +-27 +-12 +27 +92 +180 +271 +345 +380 +365 +299 +197 +78 +-16 +-76 +-88 +-55 +-1 +71 +147 +229 +298 +325 +282 +154 +-52 +-290 +-515 +-678 +-768 +-789 +-753 +-687 +-612 +-569 +-606 +-744 +-968 +-1242 +-1533 +-1817 +-2092 +-2330 +-2503 +-2556 +-2419 +-2040 +-1464 +-869 +-386 +-44 +228 +522 +855 +1189 +1450 +1622 +1736 +1857 +2001 +2154 +2282 +2406 +2563 +2732 +2822 +2802 +2677 +2487 +2268 +1989 +1623 +1160 +705 +359 +145 +7 +-83 +-137 +-166 +-205 +-321 +-554 +-849 +-1084 +-1180 +-1125 +-992 +-850 +-715 +-563 +-395 +-247 +-149 +-81 +-18 +41 +91 +123 +173 +248 +350 +473 +576 +635 +672 +718 +769 +791 +769 +713 +626 +498 +343 +199 +69 +-59 +-182 +-298 +-424 +-549 +-658 +-758 +-849 +-918 +-975 +-1037 +-1089 +-1117 +-1105 +-1030 +-891 +-708 +-494 +-273 +-44 +192 +426 +671 +953 +1290 +1661 +2008 +2259 +2384 +2416 +2388 +2304 +2147 +1923 +1688 +1466 +1253 +1048 +854 +671 +525 +428 +346 +227 +41 +-201 +-469 +-753 +-1048 +-1342 +-1602 +-1793 +-1895 +-1887 +-1784 +-1622 +-1440 +-1259 +-1100 +-1016 +-1011 +-1048 +-1082 +-1095 +-1081 +-1035 +-952 +-828 +-677 +-503 +-306 +-112 +32 +118 +163 +181 +175 +141 +96 +57 +33 +10 +-25 +-85 +-169 +-251 +-300 +-295 +-244 +-183 +-129 +-105 +-129 +-199 +-297 +-396 +-481 +-531 +-544 +-527 +-486 +-420 +-341 +-268 +-214 +-183 +-162 +-139 +-110 +-80 +-43 +3 +72 +166 +266 +347 +384 +368 +308 +219 +121 +27 +-39 +-61 +-46 +0 +61 +127 +197 +258 +289 +255 +142 +-39 +-264 +-484 +-661 +-763 +-788 +-753 +-685 +-606 +-552 +-562 +-665 +-858 +-1111 +-1389 +-1670 +-1939 +-2176 +-2356 +-2440 +-2367 +-2063 +-1547 +-948 +-435 +-69 +200 +466 +776 +1088 +1344 +1515 +1625 +1732 +1869 +2013 +-498 +-442 +-401 +-364 +-329 +-297 +-262 +-211 +-143 +-52 +58 +162 +246 +287 +279 +230 +144 +48 +-31 +-72 +-57 +-7 +63 +139 +216 +293 +352 +359 +293 +141 +-76 +-308 +-514 +-657 +-727 +-721 +-664 +-581 +-499 +-460 +-504 +-645 +-861 +-1131 +-1415 +-1695 +-1954 +-2169 +-2307 +-2311 +-2121 +-1711 +-1145 +-579 +-142 +168 +430 +720 +1035 +1327 +1544 +1671 +1754 +1844 +1951 +2056 +2143 +2244 +2383 +2523 +2606 +2570 +2441 +2259 +2042 +1762 +1396 +954 +537 +245 +69 +-37 +-93 +-101 +-82 +-86 +-184 +-401 +-663 +-847 +-893 +-802 +-653 +-504 +-361 +-206 +-45 +82 +156 +199 +235 +260 +273 +278 +298 +355 +441 +545 +629 +671 +703 +749 +795 +803 +778 +725 +642 +521 +386 +264 +158 +62 +-33 +-125 +-230 +-332 +-423 +-514 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g4_391_995.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g4_391_995.samples new file mode 100644 index 00000000..76b22b73 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g4_391_995.samples @@ -0,0 +1,4096 @@ +-837 +-677 +-630 +-635 +-609 +-497 +-330 +-194 +-111 +-18 +131 +307 +446 +546 +657 +789 +867 +777 +520 +216 +15 +-25 +30 +106 +181 +222 +230 +190 +117 +69 +59 +62 +26 +-70 +-221 +-387 +-519 +-605 +-662 +-730 +-857 +-1044 +-1253 +-1434 +-1533 +-1523 +-1385 +-1086 +-576 +104 +810 +1396 +1766 +1952 +2036 +2054 +1968 +1791 +1592 +1418 +1255 +1027 +719 +392 +107 +-135 +-399 +-694 +-953 +-1094 +-1119 +-1125 +-1188 +-1277 +-1322 +-1320 +-1309 +-1315 +-1321 +-1277 +-1149 +-974 +-809 +-684 +-554 +-334 +31 +540 +1111 +1642 +1996 +2137 +2097 +1939 +1731 +1553 +1450 +1409 +1349 +1189 +925 +597 +243 +-110 +-470 +-844 +-1188 +-1424 +-1518 +-1485 +-1364 +-1193 +-988 +-788 +-666 +-633 +-617 +-544 +-396 +-237 +-127 +-45 +74 +245 +408 +523 +622 +753 +882 +895 +712 +399 +119 +-8 +4 +80 +153 +207 +239 +230 +184 +125 +82 +59 +29 +-35 +-140 +-276 +-414 +-527 +-620 +-711 +-829 +-990 +-1182 +-1376 +-1524 +-1586 +-1529 +-1319 +-913 +-303 +412 +1082 +1575 +1864 +2009 +2075 +2051 +1903 +1699 +1498 +1334 +1154 +904 +588 +277 +28 +-204 +-482 +-791 +-1033 +-1138 +-1146 +-1167 +-1231 +-1289 +-1298 +-1281 +-1277 +-1297 +-1292 +-1218 +-1074 +-913 +-779 +-664 +-501 +-203 +250 +814 +1384 +1828 +2074 +2114 +2003 +1814 +1617 +1467 +1384 +1340 +1246 +1048 +762 +428 +84 +-267 +-637 +-1007 +-1321 +-1509 +-1558 +-1489 +-1345 +-1140 +-904 +-707 +-614 +-596 +-570 +-474 +-314 +-167 +-70 +21 +160 +337 +499 +618 +732 +858 +932 +854 +609 +311 +91 +19 +53 +123 +198 +258 +275 +230 +140 +70 +51 +58 +43 +-35 +-178 +-349 +-503 +-608 +-685 +-776 +-915 +-1107 +-1316 +-1495 +-1591 +-1585 +-1464 +-1182 +-687 +-6 +719 +1333 +1732 +1938 +2032 +2054 +1978 +1799 +1601 +1436 +1273 +1062 +769 +448 +173 +-69 +-329 +-642 +-928 +-1092 +-1116 +-1102 +-1149 +-1238 +-1296 +-1301 +-1284 +-1288 +-1297 +-1267 +-1162 +-997 +-832 +-706 +-587 +-382 +-28 +474 +1046 +1566 +1924 +2083 +2066 +1922 +1721 +1538 +1414 +1356 +1303 +1164 +914 +587 +232 +-122 +-474 +-844 +-1191 +-1447 +-1569 +-1547 +-1427 +-1243 +-1019 +-805 +-669 +-631 +-616 +-551 +-410 +-248 +-126 +-34 +91 +266 +443 +575 +679 +816 +949 +979 +822 +525 +235 +72 +52 +105 +169 +226 +262 +261 +217 +157 +111 +90 +56 +-16 +-140 +-302 +-455 +-570 +-650 +-726 +-837 +-990 +-1178 +-1367 +-1514 +-1588 +-1561 +-1398 +-1034 +-446 +276 +971 +1497 +1815 +1976 +2048 +2041 +1911 +1715 +1528 +1372 +1191 +944 +626 +317 +67 +-161 +-431 +-730 +-970 +-1090 +-1112 +-1141 +-1221 +-1290 +-1301 +-1276 +-1257 +-1271 +-1276 +-1215 +-1077 +-910 +-773 +-672 +-540 +-277 +148 +705 +1291 +1766 +2042 +2114 +2035 +1850 +1648 +1486 +1386 +1319 +1216 +1022 +740 +411 +67 +-283 +-646 +-1010 +-1320 +-1515 +-1578 +-1519 +-1383 +-1187 +-954 +-752 +-636 +-597 +-562 +-468 +-315 +-170 +-66 +29 +168 +347 +513 +638 +754 +886 +967 +904 +667 +355 +123 +41 +71 +144 +221 +284 +312 +282 +201 +116 +68 +49 +24 +-40 +-164 +-330 +-484 +-602 +-683 +-760 +-879 +-1052 +-1264 +-1465 +-1611 +-1657 +-1566 +-1299 +-814 +-141 +587 +1218 +1648 +1891 +2017 +2061 +1996 +1824 +1623 +1458 +1312 +1124 +845 +515 +227 +-14 +-268 +-580 +-882 +-1084 +-1141 +-1122 +-1149 +-1226 +-1278 +-1285 +-1269 +-1270 +-1295 +-1287 +-1208 +-1058 +-889 +-745 +-610 +-405 +-62 +423 +985 +1517 +1897 +2088 +2094 +1957 +1748 +1539 +1395 +1329 +1275 +1145 +916 +609 +269 +-79 +-431 +-793 +-1146 +-1415 +-1561 +-1572 +-1457 +-1284 +-1058 +-835 +-677 +-616 +-593 +-535 +-404 +-244 +-115 +-15 +107 +275 +440 +563 +658 +782 +921 +973 +845 +559 +259 +89 +69 +129 +199 +255 +287 +279 +225 +148 +93 +73 +56 +2 +-105 +-264 +-424 +-545 +-627 +-702 +-816 +-983 +-1193 +-1405 +-1574 +-1653 +-1624 +-1467 +-1117 +-543 +182 +898 +1457 +1795 +1967 +2055 +2074 +1985 +1805 +1612 +1443 +1264 +1024 +712 +387 +118 +-122 +-388 +-682 +-927 +-1054 +-1080 +-1105 +-1192 +-1282 +-1313 +-1306 +-1294 +-1313 +-1330 +-1287 +-1163 +-997 +-854 +-745 +-617 +-377 +26 +567 +1155 +1651 +1960 +2057 +1983 +1807 +1609 +1452 +1367 +1328 +1251 +1081 +821 +505 +167 +-172 +-522 +-881 +-1199 +-1411 +-1485 +-1439 +-1308 +-1115 +-886 +-680 +-562 +-526 +-498 +-418 +-278 +-137 +-39 +43 +165 +327 +479 +597 +705 +838 +942 +898 +665 +328 +48 +-63 +-37 +40 +117 +180 +211 +199 +142 +73 +26 +4 +-22 +-78 +-174 +-319 +-468 +-586 +-675 +-753 +-859 +-1020 +-1225 +-1436 +-1591 +-1638 +-1554 +-1303 +-845 +-186 +551 +1211 +1683 +1948 +2088 +2149 +2101 +1942 +1738 +1554 +1399 +1205 +940 +615 +316 +69 +-178 +-483 +-796 +-1027 +-1116 +-1134 +-1171 +-1248 +-1315 +-1334 +-1336 +-1346 +-1378 +-1382 +-1312 +-1178 +-1032 +-916 +-812 +-624 +-301 +175 +743 +1292 +1703 +1916 +1935 +1829 +1641 +1460 +1345 +1299 +1279 +1189 +1000 +734 +431 +120 +-197 +-541 +-881 +-1150 +-1298 +-1307 +-1208 +-1041 +-823 +-591 +-427 +-368 +-372 +-351 +-254 +-115 +-3 +62 +137 +263 +412 +530 +613 +700 +794 +819 +684 +391 +71 +-135 +-184 +-132 +-56 +13 +55 +52 +4 +-68 +-115 +-118 +-102 +-118 +-196 +-329 +-479 +-597 +-659 +-705 +-771 +-895 +-1081 +-1287 +-1462 +-1545 +-1519 +-1359 +-1023 +-468 +255 +992 +1592 +1974 +2163 +2245 +2249 +2140 +1953 +1751 +1584 +1409 +1172 +855 +513 +227 +-26 +-311 +-630 +-907 +-1051 +-1084 +-1128 +-1232 +-1356 +-1429 +-1446 +-1446 +-1471 +-1497 +-1477 +-1378 +-1233 +-1089 +-972 +-846 +-623 +-253 +260 +839 +1350 +1695 +1839 +1806 +1666 +1490 +1360 +1302 +1301 +1283 +1169 +957 +686 +398 +107 +-204 +-537 +-838 +-1035 +-1094 +-1032 +-893 +-708 +-497 +-307 +-208 +-199 +-208 +-164 +-49 +76 +145 +176 +236 +342 +445 +518 +576 +663 +734 +683 +447 +99 +-202 +-353 +-359 +-300 +-240 +-183 +-153 +-162 +-204 +-248 +-260 +-248 +-248 +-289 +-371 +-481 +-583 +-654 +-699 +-750 +-829 +-952 +-1111 +-1276 +-1397 +-1431 +-1355 +-1116 +-668 +-9 +744 +1424 +1907 +2178 +2317 +2370 +2330 +2180 +1973 +1783 +1605 +1390 +1095 +735 +408 +141 +-117 +-425 +-754 +-1011 +-1133 +-1177 +-1247 +-1359 +-1450 +-1489 +-1502 +-1538 +-1591 +-1609 +-1545 +-1404 +-1257 +-1147 +-1068 +-928 +-638 +-189 +373 +938 +1376 +1631 +1703 +1636 +1499 +1362 +1285 +1272 +1298 +1273 +1143 +929 +667 +394 +116 +-184 +-486 +-728 +-854 +-849 +-754 +-601 +-409 +-201 +-43 +11 +-8 +-16 +39 +141 +217 +240 +258 +320 +412 +479 +516 +570 +638 +639 +477 +153 +-205 +-452 +-534 +-516 +-460 +-398 +-345 +-332 +-377 +-449 +-493 +-469 +-416 +-376 +-395 +-486 +-600 +-686 +-725 +-724 +-741 +-804 +-926 +-1081 +-1213 +-1277 +-1242 +-1092 +-778 +-263 +421 +1140 +1739 +2130 +2353 +2449 +2442 +2333 +2131 +1923 +1740 +1555 +1303 +973 +624 +325 +59 +-243 +-597 +-923 +-1114 +-1172 +-1202 +-1300 +-1443 +-1550 +-1605 +-1634 +-1674 +-1723 +-1717 +-1628 +-1473 +-1325 +-1221 +-1115 +-920 +-566 +-78 +488 +1005 +1371 +1560 +1576 +1480 +1341 +1235 +1205 +1250 +1298 +1259 +1113 +891 +640 +388 +123 +-159 +-429 +-617 +-681 +-618 +-471 +-290 +-85 +89 +174 +165 +127 +136 +210 +293 +329 +329 +349 +408 +455 +459 +454 +488 +533 +473 +237 +-132 +-471 +-658 +-694 +-648 +-595 +-553 +-532 +-544 +-581 +-615 +-606 +-554 +-506 +-499 +-540 +-618 +-684 +-709 +-698 +-687 +-716 +-796 +-918 +-1051 +-1143 +-1156 +-1068 +-849 +-448 +158 +873 +1545 +2040 +2322 +2450 +2492 +2454 +2311 +2107 +1898 +1712 +1499 +1211 +853 +500 +205 +-77 +-398 +-740 +-1016 +-1164 +-1226 +-1304 +-1442 +-1570 +-1639 +-1666 +-1693 +-1744 +-1782 +-1746 +-1629 +-1471 +-1341 +-1250 +-1126 +-881 +-469 +78 +661 +1139 +1426 +1524 +1474 +1361 +1249 +1188 +1210 +1273 +1299 +1223 +1053 +828 +591 +348 +96 +-166 +-385 +-506 +-511 +-412 +-266 +-90 +104 +252 +303 +277 +250 +279 +352 +404 +394 +364 +375 +417 +441 +439 +442 +471 +461 +303 +-25 +-412 +-696 +-810 +-801 +-752 +-700 +-662 +-647 +-671 +-719 +-753 +-738 +-678 +-614 +-584 +-611 +-678 +-725 +-734 +-713 +-689 +-711 +-791 +-906 +-1019 +-1069 +-1034 +-893 +-600 +-116 +550 +1261 +1869 +2260 +2455 +2533 +2542 +2444 +2245 +2023 +1823 +1635 +1390 +1062 +690 +360 +76 +-219 +-565 +-908 +-1148 +-1250 +-1291 +-1368 +-1495 +-1606 +-1677 +-1730 +-1778 +-1834 +-1835 +-1749 +-1610 +-1463 +-1350 +-1231 +-1039 +-712 +-246 +309 +839 +1234 +1446 +1486 +1412 +1296 +1212 +1191 +1242 +1303 +1290 +1174 +984 +758 +524 +284 +29 +-223 +-410 +-480 +-437 +-308 +-133 +73 +261 +362 +354 +306 +289 +348 +424 +443 +409 +386 +420 +464 +470 +443 +436 +448 +381 +152 +-210 +-570 +-793 +-858 +-823 +-767 +-719 +-699 +-716 +-758 +-798 +-783 +-714 +-642 +-612 +-636 +-698 +-752 +-761 +-727 +-684 +-674 +-723 +-819 +-924 +-990 +-986 +-907 +-720 +-368 +200 +908 +1587 +2096 +2373 +2483 +2519 +2491 +2349 +2136 +1918 +1725 +1519 +1242 +893 +529 +218 +-70 +-391 +-736 +-1016 +-1172 +-1237 +-1309 +-1446 +-1593 +-1688 +-1734 +-1764 +-1804 +-1831 +-1794 +-1676 +-1524 +-1387 +-1286 +-1165 +-933 +-550 +-23 +553 +1052 +1378 +1509 +1484 +1369 +1252 +1195 +1217 +1287 +1311 +1231 +1067 +856 +633 +405 +159 +-99 +-324 +-453 +-463 +-375 +-230 +-55 +131 +272 +319 +291 +267 +300 +385 +446 +440 +408 +405 +437 +457 +444 +438 +468 +469 +331 +19 +-368 +-666 +-806 +-812 +-777 +-741 +-711 +-697 +-701 +-728 +-745 +-737 +-690 +-641 +-618 +-637 +-690 +-733 +-746 +-731 +-711 +-720 +-781 +-882 +-983 +-1034 +-1000 +-863 +-591 +-132 +512 +1218 +1827 +2236 +2438 +2517 +2531 +2451 +2261 +2029 +1816 +1618 +1379 +1055 +685 +352 +69 +-216 +-554 +-896 +-1148 +-1263 +-1321 +-1409 +-1531 +-1634 +-1686 +-1717 +-1761 +-1803 +-1803 +-1719 +-1565 +-1417 +-1304 +-1209 +-1035 +-721 +-255 +309 +854 +1269 +1498 +1553 +1485 +1359 +1252 +1220 +1255 +1306 +1285 +1160 +965 +738 +505 +263 +-6 +-275 +-476 +-562 +-535 +-425 +-258 +-52 +150 +275 +281 +232 +208 +262 +348 +387 +375 +365 +405 +467 +492 +483 +488 +510 +464 +263 +-83 +-446 +-683 +-762 +-738 +-684 +-632 +-606 +-617 +-665 +-713 +-709 +-647 +-572 +-528 +-547 +-618 +-694 +-739 +-732 +-708 +-699 +-737 +-832 +-953 +-1055 +-1086 +-1010 +-813 +-454 +96 +792 +1482 +2021 +2338 +2473 +2512 +2483 +2345 +2127 +1908 +1707 +1502 +1224 +869 +508 +199 +-82 +-402 +-762 +-1064 +-1227 +-1264 +-1308 +-1428 +-1571 +-1661 +-1691 +-1702 +-1735 +-1761 +-1721 +-1596 +-1421 +-1273 +-1167 +-1047 +-823 +-444 +73 +643 +1143 +1481 +1632 +1623 +1512 +1370 +1267 +1252 +1301 +1329 +1251 +1061 +816 +557 +303 +40 +-251 +-522 +-691 +-723 +-638 +-489 +-309 +-114 +50 +123 +101 +69 +92 +186 +283 +317 +317 +344 +411 +467 +479 +488 +546 +596 +520 +248 +-137 +-463 +-626 +-642 +-596 +-545 +-508 +-491 +-506 +-544 +-565 +-547 +-503 +-475 +-490 +-547 +-625 +-685 +-709 +-707 +-706 +-741 +-825 +-941 +-1056 +-1132 +-1132 +-1030 +-788 +-351 +291 +1017 +1667 +2108 +2335 +2427 +2451 +2386 +2204 +1970 +1765 +1577 +1346 +1026 +646 +304 +29 +-238 +-560 +-904 +-1162 +-1278 +-1311 +-1387 +-1515 +-1611 +-1642 +-1633 +-1642 +-1679 +-1680 +-1595 +-1431 +-1257 +-1127 +-1029 +-877 +-576 +-107 +476 +1053 +1491 +1734 +1793 +1712 +1568 +1415 +1321 +1310 +1334 +1293 +1134 +899 +629 +359 +87 +-213 +-521 +-767 +-894 +-894 +-801 +-660 +-473 +-260 +-99 +-51 +-77 +-89 +-17 +108 +201 +225 +237 +306 +410 +489 +526 +574 +646 +661 +503 +178 +-186 +-417 +-476 +-438 +-378 +-328 +-286 +-275 +-311 +-374 +-421 +-410 +-366 +-340 +-360 +-453 +-568 +-663 +-704 +-705 +-711 +-767 +-880 +-1024 +-1150 +-1209 +-1171 +-1019 +-701 +-170 +514 +1207 +1753 +2082 +2237 +2303 +2299 +2184 +1975 +1755 +1582 +1407 +1157 +805 +438 +142 +-110 +-404 +-761 +-1082 +-1254 +-1274 +-1268 +-1346 +-1468 +-1541 +-1551 +-1544 +-1562 +-1585 +-1545 +-1414 +-1232 +-1068 +-950 +-829 +-604 +-221 +297 +873 +1390 +1735 +1885 +1878 +1747 +1567 +1419 +1351 +1351 +1341 +1236 +1016 +731 +423 +117 +-201 +-531 +-839 +-1047 +-1127 +-1083 +-963 +-792 +-574 +-373 +-271 +-275 +-298 +-251 +-117 +31 +109 +143 +214 +340 +460 +517 +547 +622 +718 +702 +488 +134 +-182 +-328 +-316 +-245 +-183 +-137 +-116 +-129 +-182 +-236 +-244 +-210 +-186 +-215 +-304 +-434 +-544 +-601 +-626 +-641 +-698 +-820 +-978 +-1137 +-1250 +-1283 +-1223 +-1037 +-651 +-39 +682 +1340 +1796 +2029 +2129 +2173 +2142 +1996 +1780 +1580 +1415 +1226 +944 +583 +243 +-23 +-268 +-565 +-886 +-1132 +-1222 +-1222 +-1257 +-1364 +-1459 +-1480 +-1462 +-1459 +-1476 +-1469 +-1384 +-1218 +-1039 +-901 +-799 +-646 +-356 +88 +648 +1230 +1705 +1974 +2028 +1921 +1726 +1532 +1404 +1365 +1360 +1292 +1108 +834 +516 +197 +-123 +-463 +-810 +-1101 +-1261 +-1291 +-1210 +-1074 +-898 +-680 +-502 +-430 +-432 +-417 +-319 +-157 +-27 +29 +76 +187 +347 +474 +552 +630 +746 +822 +729 +448 +104 +-129 +-183 +-129 +-63 +-3 +43 +71 +55 +-4 +-60 +-83 +-75 +-83 +-121 +-214 +-352 +-482 +-582 +-644 +-706 +-790 +-935 +-1124 +-1303 +-1407 +-1394 +-1270 +-997 +-517 +146 +861 +1458 +1832 +2011 +2101 +2129 +2036 +1835 +1607 +1429 +1283 +1073 +756 +395 +99 +-127 +-374 +-691 +-1008 +-1207 +-1236 +-1213 +-1249 +-1338 +-1383 +-1379 +-1365 +-1366 +-1377 +-1334 +-1213 +-1035 +-870 +-748 +-633 +-420 +-65 +440 +1016 +1543 +1915 +2074 +2050 +1895 +1685 +1499 +1392 +1355 +1327 +1192 +946 +636 +308 +-12 +-349 +-717 +-1068 +-1316 +-1418 +-1397 +-1293 +-1137 +-925 +-696 +-554 +-534 +-557 +-520 +-380 +-201 +-90 +-35 +53 +217 +396 +520 +592 +683 +802 +838 +688 +386 +85 +-65 +-56 +28 +109 +169 +197 +184 +126 +54 +18 +27 +34 +-3 +-103 +-259 +-419 +-535 +-594 +-641 +-719 +-872 +-1076 +-1282 +-1434 +-1486 +-1442 +-1277 +-923 +-334 +400 +1097 +1606 +1880 +2003 +2073 +2061 +1919 +1707 +1511 +1350 +1166 +906 +563 +235 +-25 +-254 +-539 +-855 +-1095 +-1177 +-1149 +-1163 +-1262 +-1364 +-1385 +-1345 +-1317 +-1323 +-1328 +-1261 +-1107 +-918 +-765 +-654 +-514 +-252 +164 +701 +1276 +1756 +2051 +2138 +2051 +1856 +1640 +1481 +1405 +1378 +1304 +1108 +809 +470 +131 +-201 +-562 +-940 +-1264 +-1448 +-1483 +-1410 +-1287 +-1120 +-908 +-717 +-619 +-609 +-594 +-498 +-326 +-172 +-87 +-18 +112 +288 +436 +528 +617 +754 +878 +846 +605 +266 +17 +-51 +9 +95 +166 +215 +242 +233 +187 +139 +114 +105 +69 +-3 +-120 +-264 +-404 +-513 +-593 +-668 +-778 +-938 +-1137 +-1334 +-1472 +-1512 +-1430 +-1194 +-736 +-75 +655 +1280 +1686 +1890 +1981 +2024 +1965 +1795 +1600 +1431 +1288 +1089 +788 +433 +134 +-90 +-320 +-624 +-937 +-1138 +-1180 +-1162 +-1207 +-1295 +-1344 +-1330 +-1302 +-1311 +-1337 +-1316 +-1209 +-1032 +-867 +-752 +-654 +-465 +-108 +402 +1002 +1559 +1952 +2135 +2123 +1971 +1759 +1557 +1425 +1383 +1355 +1225 +974 +654 +310 +-23 +-360 +-722 +-1083 +-1348 +-1477 +-1470 +-1381 +-1249 +-1053 +-824 +-650 +-590 +-596 +-568 +-442 +-264 +-131 +-64 +15 +168 +353 +495 +583 +677 +793 +840 +715 +429 +131 +-26 +-29 +53 +145 +225 +280 +279 +219 +132 +86 +96 +114 +90 +-6 +-169 +-351 +-501 +-592 +-653 +-733 +-870 +-1066 +-1280 +-1450 +-1529 +-1505 +-1363 +-1040 +-489 +220 +922 +1462 +1780 +1932 +2007 +2019 +1909 +1720 +1534 +1384 +1215 +964 +624 +294 +42 +-183 +-469 +-808 +-1081 +-1183 +-1142 +-1120 +-1204 +-1313 +-1354 +-1334 +-1308 +-1324 +-1343 +-1300 +-1157 +-967 +-808 +-692 +-565 +-310 +108 +653 +1242 +1737 +2050 +2161 +2099 +1910 +1679 +1486 +1379 +1356 +1307 +1136 +843 +495 +146 +-184 +-528 +-895 +-1232 +-1450 +-1512 +-1449 +-1319 +-1146 +-930 +-736 +-635 +-629 +-623 +-533 +-358 +-180 +-78 +-8 +112 +285 +440 +540 +625 +751 +874 +865 +662 +340 +76 +-17 +26 +118 +188 +239 +257 +237 +185 +130 +114 +113 +92 +22 +-107 +-270 +-413 +-513 +-584 +-664 +-787 +-962 +-1160 +-1347 +-1477 +-1526 +-1475 +-1269 +-831 +-168 +570 +1213 +1634 +1849 +1960 +2019 +1985 +1819 +1613 +1446 +1304 +1114 +821 +462 +153 +-79 +-301 +-584 +-882 +-1082 +-1130 +-1113 +-1154 +-1265 +-1335 +-1330 +-1309 +-1314 +-1346 +-1334 +-1225 +-1045 +-865 +-737 +-638 +-469 +-149 +335 +915 +1480 +1899 +2118 +2137 +2002 +1792 +1594 +1460 +1399 +1359 +1232 +988 +665 +321 +-20 +-364 +-741 +-1115 +-1400 +-1540 +-1538 +-1441 +-1295 +-1102 +-876 +-698 +-625 +-618 +-579 +-454 +-277 +-136 +-50 +45 +205 +389 +530 +625 +734 +883 +949 +825 +525 +203 +20 +8 +78 +147 +206 +254 +271 +232 +154 +86 +67 +75 +56 +-17 +-161 +-331 +-476 +-583 +-660 +-746 +-885 +-1076 +-1290 +-1475 +-1574 +-1565 +-1433 +-1118 +-576 +130 +843 +1416 +1764 +1938 +2026 +2041 +1938 +1746 +1551 +1403 +1247 +1011 +687 +356 +102 +-117 +-382 +-713 +-1003 +-1145 +-1144 +-1130 +-1193 +-1283 +-1327 +-1330 +-1320 +-1334 +-1344 +-1292 +-1161 +-991 +-833 +-714 +-580 +-340 +54 +587 +1178 +1692 +2035 +2169 +2119 +1946 +1719 +1530 +1415 +1364 +1285 +1109 +836 +502 +160 +-179 +-535 +-909 +-1247 +-1468 +-1551 +-1508 +-1390 +-1220 +-998 +-784 +-661 +-632 +-618 +-529 +-358 +-186 +-79 +-5 +120 +303 +479 +593 +679 +802 +929 +938 +749 +429 +151 +35 +67 +150 +224 +275 +293 +269 +206 +138 +109 +111 +96 +29 +-105 +-281 +-443 +-553 +-628 +-705 +-828 +-1007 +-1215 +-1411 +-1548 +-1592 +-1531 +-1326 +-911 +-277 +458 +1120 +1582 +1825 +1944 +2005 +1984 +1852 +1671 +1493 +1336 +1150 +877 +536 +221 +-24 +-258 +-541 +-837 +-1049 +-1108 +-1098 +-1134 +-1232 +-1310 +-1317 +-1303 +-1305 +-1334 +-1333 +-1247 +-1094 +-918 +-776 +-663 +-494 +-199 +256 +830 +1412 +1871 +2115 +2146 +2011 +1792 +1581 +1429 +1369 +1334 +1225 +988 +662 +310 +-36 +-377 +-736 +-1098 +-1397 +-1556 +-1572 +-1482 +-1333 +-1136 +-915 +-737 +-660 +-638 +-588 +-452 +-268 +-117 +-31 +60 +212 +398 +545 +643 +745 +880 +961 +871 +603 +282 +79 +44 +111 +190 +251 +293 +299 +270 +205 +144 +103 +79 +38 +-42 +-165 +-323 +-468 +-583 +-675 +-768 +-900 +-1082 +-1293 +-1489 +-1613 +-1624 +-1502 +-1193 +-668 +27 +740 +1320 +1690 +1885 +1988 +2019 +1942 +1771 +1593 +1439 +1286 +1065 +753 +423 +151 +-68 +-317 +-621 +-911 +-1083 +-1116 +-1110 +-1156 +-1227 +-1259 +-1257 +-1255 +-1282 +-1307 +-1275 +-1158 +-998 +-853 +-740 +-610 +-370 +23 +551 +1141 +1658 +2002 +2134 +2081 +1906 +1687 +1502 +1385 +1337 +1269 +1099 +827 +498 +154 +-187 +-542 +-916 +-1263 +-1508 +-1604 +-1573 +-1453 +-1267 +-1033 +-804 +-654 +-605 +-587 +-513 +-355 +-181 +-57 +30 +151 +328 +501 +626 +721 +837 +948 +956 +786 +480 +200 +64 +77 +153 +229 +289 +315 +290 +219 +137 +90 +81 +71 +15 +-102 +-269 +-434 +-564 +-647 +-720 +-828 +-990 +-1200 +-1412 +-1575 +-1641 +-1595 +-1403 +-1014 +-406 +318 +996 +1497 +1789 +1932 +1998 +1976 +1854 +1681 +1518 +1371 +1183 +915 +588 +289 +47 +-192 +-480 +-789 +-1013 +-1088 +-1069 +-1088 +-1168 +-1245 +-1267 +-1256 +-1263 +-1289 +-1295 +-1227 +-1085 +-923 +-786 +-678 +-519 +-230 +215 +782 +1365 +1829 +2088 +2129 +2005 +1785 +1564 +1404 +1328 +1297 +1201 +987 +682 +332 +-22 +-372 +-739 +-1113 +-1423 +-1599 +-1624 +-1527 +-1365 +-1157 +-928 +-739 +-645 +-612 +-562 +-443 +-268 +-108 +3 +110 +262 +440 +587 +686 +799 +939 +1030 +954 +692 +365 +136 +70 +119 +201 +271 +313 +316 +269 +195 +129 +96 +79 +34 +-57 +-196 +-348 +-482 +-578 +-668 +-774 +-921 +-1110 +-1317 +-1506 +-1631 +-1659 +-1554 +-1266 +-748 +-47 +688 +1298 +1699 +1906 +2010 +2047 +1978 +1812 +1629 +1470 +1306 +1084 +774 +439 +164 +-62 +-301 +-591 +-861 +-1031 +-1076 +-1081 +-1138 +-1216 +-1254 +-1248 +-1237 +-1258 +-1285 +-1254 +-1142 +-972 +-814 +-705 +-601 +-404 +-43 +463 +1045 +1573 +1932 +2088 +2056 +1893 +1679 +1491 +1375 +1319 +1252 +1100 +836 +509 +155 +-190 +-537 +-902 +-1248 +-1499 +-1611 +-1590 +-1475 +-1300 +-1073 +-842 +-685 +-624 +-599 +-526 +-369 +-189 +-54 +35 +146 +310 +488 +635 +756 +889 +1010 +1020 +848 +537 +240 +84 +74 +138 +212 +276 +312 +295 +226 +137 +81 +66 +58 +15 +-91 +-256 +-424 +-566 +-663 +-741 +-846 +-1000 +-1200 +-1408 +-1579 +-1659 +-1628 +-1454 +-1083 +-491 +219 +907 +1430 +1747 +1918 +1999 +1998 +1880 +1705 +1539 +1396 +1226 +978 +662 +360 +119 +-115 +-411 +-741 +-996 +-1095 +-1072 +-1066 +-1142 +-1228 +-1263 +-1256 +-1248 +-1268 +-1286 +-1242 +-1120 +-961 +-811 +-692 +-538 +-266 +162 +713 +1292 +1766 +2041 +2105 +2004 +1804 +1589 +1421 +1331 +1289 +1195 +1003 +715 +372 +19 +-331 +-690 +-1050 +-1364 +-1558 +-1608 +-1524 +-1367 +-1158 +-919 +-725 +-623 +-595 +-562 +-458 +-289 +-129 +-17 +86 +239 +421 +577 +681 +780 +911 +1005 +953 +715 +394 +152 +70 +112 +194 +265 +313 +321 +289 +218 +151 +119 +102 +64 +-26 +-169 +-334 +-477 +-588 +-670 +-765 +-908 +-1100 +-1315 +-1506 +-1636 +-1672 +-1588 +-1335 +-854 +-171 +565 +1199 +1626 +1859 +1975 +2024 +1980 +1831 +1650 +1488 +1334 +1125 +838 +503 +218 +-15 +-256 +-542 +-823 +-1006 +-1061 +-1064 +-1112 +-1207 +-1261 +-1265 +-1253 +-1262 +-1293 +-1283 +-1191 +-1037 +-872 +-742 +-629 +-437 +-103 +387 +967 +1514 +1906 +2085 +2066 +1909 +1691 +1494 +1366 +1307 +1250 +1117 +874 +553 +201 +-152 +-504 +-864 +-1212 +-1470 +-1596 +-1593 +-1482 +-1310 +-1089 +-864 +-699 +-622 +-583 +-516 +-381 +-214 +-76 +29 +152 +318 +491 +630 +735 +858 +989 +1026 +876 +572 +258 +82 +64 +134 +214 +277 +316 +317 +265 +180 +107 +70 +48 +3 +-88 +-232 +-395 +-536 +-641 +-730 +-834 +-992 +-1197 +-1412 +-1591 +-1684 +-1658 +-1485 +-1114 +-523 +199 +893 +1430 +1756 +1925 +2019 +2030 +1927 +1743 +1557 +1400 +1230 +995 +691 +383 +134 +-89 +-357 +-669 +-940 +-1075 +-1089 +-1090 +-1144 +-1211 +-1237 +-1234 +-1237 +-1260 +-1283 +-1249 +-1139 +-989 +-837 +-704 +-536 +-264 +149 +680 +1241 +1717 +2010 +2091 +2000 +1810 +1597 +1432 +1336 +1280 +1184 +997 +723 +396 +48 +-304 +-667 +-1033 +-1348 +-1550 +-1626 +-1573 +-1428 +-1220 +-973 +-754 +-634 +-597 +-569 +-479 +-318 +-148 +-25 +80 +225 +412 +588 +713 +815 +926 +1012 +966 +746 +433 +177 +72 +97 +176 +252 +309 +321 +287 +215 +142 +102 +85 +52 +-28 +-154 +-324 +-486 +-610 +-704 +-793 +-918 +-1102 +-1320 +-1525 +-1659 +-1684 +-1587 +-1341 +-894 +-248 +474 +1124 +1583 +1831 +1955 +2014 +1989 +1860 +1685 +1509 +1347 +1142 +866 +549 +257 +17 +-231 +-522 +-806 +-996 +-1049 +-1050 +-1099 +-1190 +-1255 +-1261 +-1249 +-1258 +-1289 +-1292 +-1218 +-1067 +-902 +-763 +-634 +-436 +-108 +362 +921 +1463 +1873 +2079 +2087 +1941 +1718 +1501 +1358 +1294 +1250 +1120 +878 +559 +210 +-136 +-478 +-836 +-1187 +-1465 +-1606 +-1608 +-1506 +-1344 +-1134 +-907 +-731 +-642 +-596 +-522 +-385 +-209 +-69 +31 +146 +312 +495 +639 +743 +854 +981 +1034 +917 +642 +337 +148 +107 +162 +234 +296 +337 +334 +287 +208 +132 +80 +35 +-26 +-118 +-243 +-386 +-517 +-625 +-724 +-838 +-991 +-1185 +-1394 +-1580 +-1683 +-1679 +-1528 +-1184 +-617 +95 +795 +1356 +1713 +1911 +2019 +2048 +1962 +1790 +1602 +1437 +1260 +1030 +731 +424 +169 +-63 +-324 +-621 +-878 +-1024 +-1061 +-1084 +-1149 +-1215 +-1233 +-1216 +-1209 +-1241 +-1278 +-1261 +-1157 +-1003 +-857 +-734 +-580 +-306 +114 +651 +1214 +1681 +1971 +2066 +1997 +1823 +1610 +1430 +1322 +1265 +1184 +1007 +735 +403 +65 +-275 +-630 +-1008 +-1344 +-1560 +-1636 +-1589 +-1465 +-1278 +-1043 +-808 +-649 +-583 +-545 +-463 +-318 +-157 +-37 +68 +214 +398 +571 +696 +803 +918 +1008 +975 +770 +474 +227 +119 +132 +197 +270 +328 +357 +328 +250 +151 +84 +53 +27 +-29 +-146 +-305 +-466 +-592 +-683 +-781 +-917 +-1099 +-1313 +-1522 +-1668 +-1712 +-1635 +-1395 +-955 +-325 +387 +1044 +1531 +1829 +1984 +2045 +2006 +1865 +1684 +1517 +1359 +1160 +892 +574 +293 +56 +-182 +-472 +-761 +-963 +-1033 +-1031 +-1073 +-1155 +-1218 +-1230 +-1218 +-1221 +-1253 +-1267 +-1216 +-1091 +-934 +-791 +-652 +-448 +-117 +346 +892 +1417 +1806 +2008 +2031 +1917 +1724 +1522 +1363 +1273 +1215 +1107 +898 +605 +263 +-94 +-448 +-817 +-1175 +-1456 +-1606 +-1616 +-1519 +-1357 +-1146 +-912 +-717 +-610 +-564 +-506 +-388 +-227 +-84 +28 +148 +320 +508 +659 +762 +863 +976 +1034 +937 +682 +378 +173 +116 +158 +229 +288 +327 +329 +282 +203 +135 +93 +57 +-2 +-103 +-243 +-387 +-507 +-595 +-684 +-812 +-986 +-1194 +-1407 +-1580 +-1689 +-1702 +-1574 +-1258 +-713 +-14 +694 +1270 +1653 +1876 +2002 +2044 +1967 +1798 +1608 +1441 +1268 +1040 +743 +431 +168 +-57 +-299 +-579 +-831 +-985 +-1039 +-1071 +-1146 +-1224 +-1250 +-1237 +-1218 +-1231 +-1259 +-1241 +-1151 +-1002 +-846 +-708 +-553 +-311 +73 +576 +1131 +1615 +1929 +2046 +1988 +1820 +1608 +1427 +1304 +1236 +1151 +985 +730 +412 +75 +-272 +-627 +-992 +-1322 +-1548 +-1642 +-1605 +-1481 +-1297 +-1065 +-837 +-672 +-584 +-526 +-439 +-302 +-153 +-30 +74 +217 +399 +576 +712 +822 +941 +1035 +1017 +833 +538 +274 +140 +134 +187 +250 +301 +328 +317 +251 +159 +85 +41 +11 +-35 +-127 +-270 +-430 +-566 +-669 +-764 +-890 +-1068 +-1288 +-1501 +-1659 +-1720 +-1661 +-1445 +-1023 +-395 +331 +1001 +1500 +1805 +1975 +2051 +2026 +1885 +1695 +1524 +1374 +1193 +934 +623 +336 +105 +-127 +-408 +-716 +-952 +-1053 +-1065 +-1087 +-1163 +-1230 +-1247 +-1233 +-1220 +-1237 +-1253 +-1214 +-1110 +-967 +-821 +-671 +-461 +-138 +311 +845 +1373 +1784 +2007 +2046 +1940 +1747 +1539 +1372 +1267 +1201 +1098 +909 +628 +292 +-72 +-439 +-809 +-1160 +-1442 +-1611 +-1648 +-1567 +-1400 +-1172 +-916 +-710 +-602 +-563 +-512 +-401 +-244 +-105 +-1 +117 +290 +486 +645 +754 +853 +970 +1029 +941 +694 +392 +182 +117 +155 +227 +288 +322 +320 +282 +207 +136 +91 +57 +8 +-75 +-202 +-360 +-499 +-604 +-693 +-800 +-960 +-1169 +-1395 +-1592 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g5_783_991.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g5_783_991.samples new file mode 100644 index 00000000..a3ef3c6b --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/melodica_g5_783_991.samples @@ -0,0 +1,4096 @@ +-409 +-238 +-46 +8 +-111 +-309 +-459 +-495 +-469 +-336 +-142 +73 +241 +378 +493 +677 +1097 +1709 +2278 +2616 +2651 +2385 +1893 +1297 +723 +330 +177 +181 +159 +49 +-47 +-3 +236 +546 +746 +688 +445 +112 +-244 +-599 +-844 +-848 +-703 +-720 +-1074 +-1585 +-2008 +-2127 +-1973 +-1657 +-1256 +-908 +-663 +-548 +-538 +-549 +-465 +-281 +-65 +53 +-36 +-230 +-424 +-490 +-489 +-391 +-208 +7 +199 +348 +481 +630 +974 +1535 +2125 +2521 +2640 +2456 +2029 +1469 +887 +440 +222 +195 +182 +74 +-51 +-68 +124 +440 +710 +739 +547 +236 +-120 +-492 +-805 +-887 +-761 +-699 +-957 +-1444 +-1901 +-2092 +-1991 +-1718 +-1349 +-1003 +-755 +-608 +-563 +-557 +-485 +-315 +-104 +50 +-3 +-192 +-405 +-506 +-519 +-449 +-273 +-56 +158 +320 +460 +582 +851 +1359 +1960 +2414 +2606 +2514 +2163 +1649 +1073 +564 +264 +171 +155 +67 +-58 +-103 +51 +360 +670 +774 +624 +333 +-18 +-389 +-744 +-902 +-820 +-700 +-860 +-1302 +-1780 +-2059 +-2033 +-1818 +-1488 +-1132 +-846 +-652 +-563 +-535 +-486 +-350 +-163 +7 +2 +-156 +-367 +-497 +-517 +-474 +-317 +-107 +117 +278 +417 +525 +736 +1184 +1791 +2311 +2592 +2597 +2302 +1824 +1242 +680 +298 +144 +134 +85 +-19 +-79 +25 +298 +611 +774 +668 +404 +59 +-310 +-680 +-898 +-854 +-698 +-757 +-1142 +-1652 +-2028 +-2092 +-1925 +-1613 +-1228 +-900 +-654 +-529 +-502 +-492 +-398 +-234 +-48 +12 +-109 +-304 +-462 +-496 +-478 +-356 +-161 +62 +234 +370 +479 +647 +1039 +1638 +2228 +2585 +2654 +2429 +1972 +1392 +797 +352 +160 +150 +142 +49 +-42 +-10 +217 +529 +746 +704 +473 +146 +-204 +-569 +-841 +-859 +-711 +-692 +-1020 +-1535 +-1977 +-2130 +-2002 +-1715 +-1328 +-961 +-683 +-532 +-508 +-524 +-469 +-318 +-112 +22 +-49 +-229 +-415 +-483 +-483 +-393 +-214 +3 +194 +336 +459 +594 +920 +1480 +2097 +2519 +2663 +2505 +2089 +1530 +933 +456 +218 +186 +195 +102 +-20 +-47 +126 +426 +694 +729 +540 +242 +-104 +-466 +-784 +-880 +-767 +-685 +-928 +-1420 +-1904 +-2133 +-2048 +-1782 +-1402 +-1027 +-735 +-571 +-532 +-554 +-517 +-360 +-140 +44 +18 +-158 +-375 +-490 +-512 +-453 +-289 +-75 +139 +298 +436 +558 +821 +1326 +1937 +2413 +2623 +2545 +2195 +1681 +1104 +587 +278 +184 +183 +103 +-31 +-99 +28 +326 +637 +759 +624 +350 +6 +-352 +-703 +-885 +-821 +-705 +-850 +-1289 +-1780 +-2074 +-2046 +-1816 +-1477 +-1122 +-840 +-650 +-566 +-551 +-506 +-368 +-170 +22 +34 +-124 +-343 +-493 +-525 +-487 +-336 +-131 +93 +254 +397 +517 +723 +1164 +1762 +2288 +2573 +2582 +2317 +1852 +1290 +731 +342 +177 +152 +95 +-27 +-107 +-23 +254 +580 +769 +687 +432 +96 +-262 +-631 +-876 +-866 +-720 +-761 +-1127 +-1625 +-1994 +-2059 +-1893 +-1605 +-1256 +-944 +-709 +-569 +-521 +-490 +-392 +-229 +-42 +18 +-103 +-302 +-468 +-505 +-487 +-366 +-172 +54 +231 +371 +492 +643 +1013 +1583 +2154 +2524 +2619 +2429 +1999 +1441 +851 +392 +171 +137 +117 +14 +-80 +-47 +190 +521 +758 +729 +497 +170 +-179 +-543 +-834 +-885 +-745 +-702 +-991 +-1477 +-1913 +-2084 +-1985 +-1734 +-1376 +-1020 +-734 +-555 +-497 +-493 +-439 +-303 +-124 +-2 +-65 +-234 +-410 +-476 +-476 +-394 +-221 +-8 +183 +323 +441 +567 +874 +1416 +2026 +2464 +2633 +2510 +2127 +1589 +991 +481 +204 +147 +155 +86 +-18 +-36 +138 +434 +699 +739 +551 +253 +-83 +-438 +-764 +-881 +-775 +-673 +-887 +-1360 +-1847 +-2105 +-2059 +-1823 +-1461 +-1078 +-770 +-576 +-513 +-527 +-506 +-384 +-195 +-16 +-19 +-167 +-357 +-467 +-480 +-435 +-285 +-83 +123 +277 +413 +537 +787 +1268 +1879 +2377 +2616 +2564 +2237 +1733 +1148 +613 +280 +179 +190 +135 +12 +-57 +50 +322 +622 +749 +620 +359 +32 +-317 +-669 +-864 +-818 +-702 +-827 +-1255 +-1757 +-2081 +-2082 +-1867 +-1531 +-1153 +-851 +-644 +-556 +-551 +-536 +-418 +-230 +-30 +20 +-107 +-309 +-461 +-498 +-486 +-360 +-163 +65 +244 +397 +524 +709 +1121 +1706 +2244 +2556 +2584 +2331 +1879 +1325 +774 +379 +213 +198 +151 +25 +-74 +-23 +227 +541 +742 +682 +453 +139 +-205 +-579 +-847 +-872 +-748 +-778 +-1129 +-1613 +-1990 +-2072 +-1913 +-1627 +-1268 +-951 +-715 +-587 +-552 +-529 +-430 +-257 +-56 +33 +-75 +-269 +-447 +-502 +-496 +-393 +-206 +22 +212 +361 +489 +632 +979 +1529 +2099 +2475 +2588 +2421 +2021 +1491 +921 +458 +216 +164 +141 +37 +-61 +-40 +177 +486 +728 +732 +530 +227 +-119 +-495 +-816 +-899 +-775 +-715 +-979 +-1448 +-1885 +-2073 +-1988 +-1743 +-1396 +-1056 +-776 +-590 +-514 +-491 +-430 +-287 +-105 +20 +-45 +-226 +-418 +-495 +-493 +-411 +-232 +-19 +178 +314 +435 +551 +832 +1353 +1957 +2411 +2601 +2513 +2171 +1659 +1071 +543 +230 +138 +141 +73 +-19 +-36 +127 +420 +689 +756 +581 +291 +-56 +-414 +-758 +-903 +-805 +-685 +-858 +-1313 +-1795 +-2069 +-2042 +-1835 +-1506 +-1137 +-826 +-604 +-500 +-481 +-450 +-344 +-182 +-22 +-31 +-181 +-372 +-475 +-483 +-433 +-286 +-90 +116 +266 +408 +526 +753 +1216 +1821 +2328 +2591 +2574 +2274 +1784 +1195 +635 +271 +148 +159 +118 +12 +-57 +42 +308 +602 +742 +620 +360 +37 +-304 +-654 +-860 +-824 +-695 +-792 +-1197 +-1699 +-2051 +-2093 +-1907 +-1587 +-1202 +-870 +-632 +-524 +-512 +-512 +-431 +-262 +-65 +0 +-111 +-295 +-440 +-470 +-456 +-340 +-158 +51 +218 +365 +494 +683 +1090 +1673 +2217 +2552 +2617 +2376 +1919 +1353 +779 +367 +190 +185 +164 +49 +-48 +-11 +219 +525 +729 +679 +450 +145 +-185 +-542 +-814 +-853 +-734 +-753 +-1092 +-1584 +-1986 +-2093 +-1945 +-1662 +-1291 +-955 +-708 +-575 +-548 +-544 +-461 +-290 +-82 +31 +-58 +-242 +-420 +-473 +-473 +-387 +-214 +-5 +184 +336 +480 +630 +967 +1510 +2074 +2471 +2602 +2446 +2051 +1525 +959 +483 +233 +175 +154 +53 +-53 +-54 +145 +450 +709 +731 +542 +248 +-84 +-444 +-772 +-882 +-789 +-730 +-978 +-1433 +-1864 +-2052 +-1968 +-1741 +-1412 +-1075 +-806 +-627 +-555 +-529 +-457 +-308 +-115 +23 +-32 +-206 +-398 +-483 +-485 +-425 +-261 +-50 +158 +310 +447 +569 +831 +1317 +1906 +2373 +2583 +2513 +2189 +1695 +1118 +586 +257 +149 +140 +65 +-39 +-72 +85 +388 +683 +777 +618 +338 +0 +-358 +-716 +-893 +-834 +-719 +-866 +-1284 +-1751 +-2030 +-2019 +-1831 +-1524 +-1173 +-866 +-641 +-529 +-496 +-461 +-348 +-183 +-25 +-27 +-177 +-366 +-477 +-486 +-446 +-299 +-102 +105 +259 +397 +511 +720 +1156 +1754 +2290 +2577 +2588 +2323 +1849 +1269 +695 +300 +144 +138 +103 +9 +-49 +51 +320 +618 +767 +658 +396 +71 +-276 +-634 +-871 +-856 +-718 +-779 +-1148 +-1636 +-1993 +-2061 +-1905 +-1615 +-1248 +-913 +-655 +-517 +-486 +-479 +-399 +-255 +-77 +-11 +-121 +-297 +-435 +-460 +-444 +-333 +-158 +46 +210 +351 +483 +656 +1044 +1637 +2205 +2552 +2628 +2419 +1979 +1410 +816 +367 +164 +148 +149 +60 +-29 +5 +224 +521 +729 +686 +459 +153 +-175 +-524 +-803 +-851 +-732 +-728 +-1047 +-1536 +-1948 +-2085 +-1959 +-1693 +-1331 +-982 +-705 +-547 +-504 +-509 +-457 +-316 +-128 +-4 +-71 +-229 +-398 +-456 +-462 +-392 +-229 +-24 +165 +311 +451 +594 +919 +1471 +2062 +2467 +2610 +2465 +2079 +1550 +972 +492 +235 +182 +181 +88 +-23 +-40 +138 +435 +691 +722 +538 +254 +-63 +-409 +-743 +-879 +-798 +-730 +-962 +-1418 +-1858 +-2063 +-1988 +-1759 +-1421 +-1073 +-791 +-612 +-547 +-538 +-488 +-346 +-155 +4 +-28 +-187 +-378 +-474 +-484 +-436 +-285 +-89 +122 +286 +440 +576 +833 +1317 +1898 +2360 +2574 +2519 +2206 +1725 +1162 +634 +306 +194 +179 +99 +-19 +-71 +66 +353 +647 +756 +619 +355 +32 +-313 +-676 +-877 +-837 +-735 +-865 +-1270 +-1735 +-2021 +-2012 +-1820 +-1523 +-1182 +-888 +-672 +-560 +-522 +-480 +-363 +-196 +-29 +-14 +-153 +-337 +-466 +-487 +-468 +-336 +-132 +98 +269 +411 +527 +723 +1148 +1729 +2248 +2537 +2563 +2322 +1882 +1330 +768 +357 +169 +142 +100 +-4 +-65 +27 +293 +597 +764 +672 +427 +107 +-241 +-605 +-858 +-870 +-742 +-781 +-1129 +-1599 +-1959 +-2033 +-1893 +-1633 +-1290 +-969 +-709 +-554 +-504 +-483 +-402 +-255 +-83 +-15 +-124 +-304 +-449 +-473 +-454 +-347 +-166 +43 +214 +352 +481 +643 +1005 +1563 +2126 +2492 +2599 +2428 +2024 +1475 +883 +411 +174 +137 +132 +51 +-26 +10 +226 +523 +735 +703 +486 +179 +-153 +-509 +-799 +-865 +-755 +-729 +-1013 +-1484 +-1906 +-2071 +-1974 +-1727 +-1371 +-1011 +-723 +-546 +-488 +-484 +-436 +-311 +-142 +-21 +-86 +-240 +-399 +-453 +-447 +-376 +-220 +-26 +155 +291 +432 +578 +893 +1426 +2016 +2440 +2608 +2494 +2127 +1603 +1010 +503 +222 +162 +172 +103 +1 +-22 +138 +416 +667 +711 +533 +252 +-69 +-408 +-727 +-850 +-773 +-703 +-915 +-1365 +-1821 +-2056 +-2009 +-1800 +-1455 +-1088 +-793 +-603 +-538 +-535 +-502 +-377 +-193 +-29 +-39 +-175 +-345 +-440 +-449 +-417 +-280 +-89 +116 +274 +423 +556 +801 +1274 +1865 +2345 +2574 +2526 +2210 +1718 +1153 +634 +302 +185 +183 +118 +9 +-47 +66 +332 +610 +727 +608 +359 +45 +-296 +-641 +-844 +-823 +-732 +-863 +-1266 +-1729 +-2043 +-2057 +-1864 +-1554 +-1194 +-888 +-672 +-571 +-539 +-503 +-385 +-210 +-29 +7 +-123 +-311 +-448 +-476 +-456 +-333 +-142 +70 +239 +390 +525 +723 +1134 +1699 +2213 +2513 +2551 +2322 +1889 +1348 +795 +389 +205 +172 +127 +22 +-53 +17 +259 +552 +739 +675 +444 +132 +-210 +-569 +-831 +-862 +-756 +-792 +-1129 +-1597 +-1962 +-2051 +-1916 +-1654 +-1312 +-994 +-745 +-593 +-525 +-482 +-393 +-247 +-81 +-8 +-110 +-284 +-436 +-478 +-462 +-360 +-183 +29 +210 +353 +483 +637 +983 +1513 +2069 +2452 +2583 +2437 +2052 +1518 +933 +461 +204 +141 +119 +40 +-37 +-4 +208 +507 +736 +726 +521 +214 +-131 +-491 +-785 +-872 +-775 +-750 +-1011 +-1459 +-1874 +-2056 +-1985 +-1761 +-1428 +-1080 +-788 +-591 +-503 +-472 +-418 +-296 +-144 +-31 +-88 +-239 +-404 +-469 +-467 +-395 +-229 +-26 +164 +299 +432 +567 +857 +1362 +1948 +2396 +2600 +2518 +2169 +1656 +1064 +545 +233 +138 +134 +81 +7 +1 +159 +430 +672 +727 +560 +281 +-54 +-397 +-711 +-847 +-778 +-710 +-901 +-1335 +-1795 +-2069 +-2056 +-1853 +-1521 +-1146 +-827 +-609 +-513 +-491 +-460 +-358 +-201 +-52 +-48 +-171 +-334 +-434 +-452 +-410 +-273 +-86 +111 +254 +389 +528 +777 +1237 +1809 +2311 +2601 +2592 +2290 +1792 +1206 +656 +297 +167 +165 +126 +36 +-13 +86 +333 +594 +714 +604 +355 +41 +-295 +-620 +-809 +-802 +-730 +-848 +-1233 +-1697 +-2024 +-2068 +-1895 +-1587 +-1212 +-886 +-658 +-551 +-521 +-499 +-400 +-239 +-69 +-19 +-124 +-292 +-429 +-463 +-445 +-329 +-147 +52 +215 +362 +508 +713 +1110 +1665 +2209 +2540 +2596 +2376 +1930 +1376 +819 +409 +210 +169 +128 +34 +-31 +26 +244 +517 +702 +665 +460 +157 +-183 +-526 +-785 +-845 +-776 +-823 +-1137 +-1585 +-1949 +-2064 +-1939 +-1670 +-1320 +-993 +-744 +-602 +-545 +-505 +-409 +-258 +-88 +-2 +-85 +-251 +-416 +-479 +-476 +-378 +-202 +2 +183 +325 +472 +643 +985 +1517 +2069 +2451 +2593 +2461 +2080 +1552 +988 +517 +249 +159 +120 +36 +-41 +-13 +180 +460 +688 +714 +536 +241 +-105 +-465 +-769 +-873 +-809 +-787 +-1020 +-1438 +-1846 +-2041 +-1980 +-1757 +-1427 +-1090 +-814 +-631 +-539 +-487 +-412 +-286 +-136 +-33 +-87 +-235 +-400 +-481 +-482 +-411 +-243 +-39 +152 +296 +433 +582 +862 +1347 +1914 +2365 +2590 +2542 +2224 +1716 +1130 +607 +277 +149 +121 +59 +-11 +-10 +145 +413 +663 +743 +600 +322 +-28 +-391 +-711 +-857 +-812 +-750 +-911 +-1302 +-1736 +-2007 +-2016 +-1839 +-1534 +-1186 +-877 +-653 +-534 +-484 +-438 +-342 +-209 +-81 +-77 +-193 +-351 +-459 +-473 +-424 +-277 +-83 +106 +248 +379 +522 +773 +1222 +1789 +2283 +2567 +2582 +2314 +1832 +1246 +693 +316 +158 +134 +101 +35 +8 +110 +342 +593 +722 +628 +382 +52 +-297 +-624 +-813 +-804 +-731 +-831 +-1188 +-1639 +-1979 +-2057 +-1910 +-1617 +-1247 +-911 +-664 +-536 +-495 +-470 +-396 +-268 +-121 +-66 +-148 +-291 +-417 +-454 +-432 +-319 +-147 +43 +195 +333 +480 +702 +1102 +1645 +2171 +2514 +2598 +2394 +1958 +1391 +827 +410 +207 +164 +136 +59 +0 +54 +257 +514 +693 +659 +455 +154 +-186 +-520 +-762 +-813 +-751 +-800 +-1101 +-1542 +-1920 +-2055 +-1946 +-1677 +-1315 +-977 +-723 +-580 +-533 +-509 +-438 +-297 +-133 +-35 +-87 +-229 +-384 +-455 +-457 +-373 +-206 +-12 +159 +307 +460 +653 +997 +1500 +2040 +2431 +2584 +2453 +2074 +1544 +984 +527 +269 +184 +148 +68 +-11 +2 +169 +429 +649 +690 +537 +259 +-81 +-431 +-722 +-832 +-787 +-783 +-1014 +-1430 +-1834 +-2039 +-1983 +-1753 +-1423 +-1083 +-816 +-639 +-556 +-510 +-433 +-303 +-146 +-30 +-60 +-196 +-361 +-457 +-471 +-410 +-252 +-54 +135 +281 +427 +587 +869 +1335 +1884 +2332 +2560 +2521 +2212 +1724 +1158 +649 +319 +176 +129 +57 +-19 +-25 +123 +384 +630 +725 +603 +340 +4 +-353 +-678 +-840 +-817 +-766 +-917 +-1295 +-1716 +-2012 +-2051 +-1877 +-1572 +-1220 +-917 +-690 +-560 +-494 +-432 +-326 +-188 +-62 +-57 +-176 +-336 +-449 +-471 +-426 +-283 +-92 +99 +248 +386 +528 +763 +1183 +1730 +2230 +2532 +2576 +2336 +1879 +1311 +757 +361 +174 +125 +81 +12 +-14 +90 +328 +581 +724 +645 +404 +72 +-286 +-618 +-822 +-825 +-747 +-827 +-1160 +-1616 +-1985 +-2087 +-1960 +-1681 +-1314 +-972 +-707 +-544 +-476 +-436 +-360 +-243 +-112 +-62 +-147 +-295 +-424 +-458 +-436 +-323 +-148 +42 +204 +341 +484 +684 +1057 +1587 +2121 +2489 +2604 +2431 +2008 +1445 +865 +422 +198 +141 +115 +47 +0 +53 +255 +509 +692 +666 +462 +158 +-184 +-515 +-761 +-814 +-747 +-774 +-1061 +-1519 +-1923 +-2096 +-2014 +-1756 +-1387 +-1024 +-740 +-567 +-494 +-469 +-414 +-304 +-158 +-57 +-97 +-223 +-368 +-438 +-442 +-365 +-206 +-12 +162 +301 +446 +623 +951 +1453 +2004 +2419 +2592 +2480 +2104 +1571 +994 +518 +250 +166 +146 +80 +7 +14 +168 +417 +641 +686 +535 +264 +-71 +-414 +-698 +-809 +-764 +-748 +-975 +-1411 +-1843 +-2072 +-2032 +-1806 +-1464 +-1100 +-810 +-628 +-548 +-515 +-459 +-335 +-177 +-46 +-54 +-176 +-337 +-435 +-453 +-401 +-255 +-65 +125 +273 +420 +577 +851 +1308 +1857 +2313 +2546 +2511 +2205 +1719 +1159 +657 +332 +196 +154 +81 +-5 +-25 +106 +357 +609 +715 +610 +364 +34 +-315 +-638 +-818 +-810 +-770 +-924 +-1300 +-1727 +-2010 +-2032 +-1857 +-1558 +-1207 +-911 +-702 +-588 +-532 +-467 +-351 +-199 +-59 +-40 +-159 +-321 +-443 +-473 +-437 +-306 +-115 +83 +239 +385 +533 +758 +1165 +1691 +2188 +2517 +2588 +2370 +1922 +1371 +820 +417 +214 +145 +88 +6 +-28 +65 +299 +564 +725 +665 +444 +121 +-238 +-583 +-809 +-837 +-780 +-853 +-1173 +-1607 +-1952 +-2049 +-1927 +-1668 +-1327 +-1006 +-755 +-595 +-511 +-454 +-367 +-241 +-109 +-58 +-145 +-292 +-427 +-467 +-445 +-335 +-150 +49 +212 +346 +484 +673 +1029 +1547 +2097 +2490 +2631 +2482 +2075 +1519 +934 +471 +216 +137 +102 +32 +-12 +44 +249 +510 +702 +689 +493 +185 +-167 +-511 +-772 +-847 +-782 +-790 +-1054 +-1486 +-1886 +-2071 +-2006 +-1773 +-1425 +-1066 +-774 +-586 +-500 +-467 +-407 +-301 +-176 +-85 +-130 +-252 +-387 +-449 +-443 +-362 +-201 +-9 +159 +294 +433 +603 +918 +1410 +1978 +2424 +2629 +2551 +2188 +1645 +1049 +539 +245 +144 +127 +75 +12 +24 +181 +429 +649 +698 +544 +266 +-72 +-417 +-703 +-824 +-782 +-758 +-968 +-1386 +-1818 +-2067 +-2049 +-1838 +-1500 +-1128 +-815 +-610 +-521 +-490 +-453 +-356 +-213 +-81 +-75 +-180 +-327 +-424 +-446 +-397 +-254 +-68 +114 +254 +394 +551 +819 +1272 +1839 +2328 +2590 +2575 +2270 +1762 +1186 +661 +322 +186 +159 +107 +24 +-4 +106 +339 +582 +689 +591 +351 +32 +-310 +-625 +-810 +-810 +-760 +-903 +-1277 +-1717 +-2018 +-2051 +-1872 +-1555 +-1191 +-877 +-664 +-564 +-526 +-488 +-383 +-232 +-86 +-48 +-150 +-307 +-432 +-466 +-437 +-309 +-124 +74 +232 +373 +523 +747 +1146 +1693 +2207 +2528 +2587 +2364 +1917 +1358 +812 +409 +214 +153 +101 +12 +-36 +43 +268 +535 +704 +666 +459 +149 +-201 +-551 +-795 +-841 +-787 +-855 +-1170 +-1595 +-1936 +-2036 +-1913 +-1652 +-1313 +-1002 +-761 +-615 +-541 +-483 +-385 +-247 +-103 +-41 +-123 +-271 +-411 +-467 +-452 +-347 +-164 +39 +207 +348 +491 +675 +1028 +1540 +2073 +2454 +2593 +2459 +2068 +1531 +963 +502 +243 +147 +105 +26 +-27 +24 +228 +498 +706 +712 +525 +225 +-131 +-486 +-764 +-850 +-795 +-804 +-1054 +-1466 +-1857 +-2042 +-1981 +-1762 +-1431 +-1091 +-807 +-618 +-518 +-462 +-393 +-278 +-151 +-68 +-117 +-247 +-393 +-459 +-451 +-372 +-206 +-12 +161 +293 +431 +591 +898 +1391 +1952 +2397 +2619 +2555 +2222 +1703 +1109 +591 +263 +143 +115 +62 +9 +30 +191 +442 +663 +714 +565 +289 +-58 +-409 +-708 +-833 +-789 +-756 +-946 +-1352 +-1786 +-2047 +-2048 +-1860 +-1539 +-1172 +-855 +-624 +-505 +-459 +-417 +-330 +-207 +-89 +-86 +-193 +-336 +-427 +-440 +-394 +-254 +-73 +109 +247 +380 +535 +800 +1256 +1822 +2315 +2597 +2600 +2319 +1822 +1228 +680 +315 +170 +150 +118 +53 +29 +132 +358 +594 +703 +602 +360 +36 +-306 +-623 +-797 +-789 +-736 +-865 +-1239 +-1689 +-2015 +-2076 +-1918 +-1613 +-1238 +-905 +-662 +-538 +-497 +-469 +-386 +-251 +-105 +-57 +-140 +-284 +-405 +-443 +-422 +-310 +-136 +54 +207 +347 +496 +724 +1129 +1674 +2199 +2536 +2610 +2397 +1942 +1371 +814 +412 +220 +172 +128 +44 +-7 +57 +269 +522 +686 +643 +442 +144 +-197 +-529 +-766 +-819 +-768 +-839 +-1152 +-1588 +-1944 +-2060 +-1942 +-1672 +-1318 +-986 +-736 +-588 +-526 +-489 +-405 +-266 +-110 +-25 +-90 +-239 +-390 +-454 +-452 +-362 +-190 +3 +174 +315 +469 +661 +1012 +1523 +2060 +2447 +2593 +2460 +2080 +1551 +984 +530 +267 +175 +130 +45 +-25 +4 +191 +458 +669 +695 +526 +238 +-103 +-452 +-734 +-836 +-790 +-797 +-1042 +-1452 +-1842 +-2032 +-1976 +-1758 +-1432 +-1097 +-822 +-637 +-540 +-481 +-401 +-275 +-130 +-29 +-73 +-214 +-372 +-456 +-460 +-387 +-225 +-28 +152 +292 +435 +597 +892 +1364 +1913 +2358 +2584 +2541 +2229 +1731 +1151 +634 +302 +162 +117 +52 +-17 +-6 +152 +412 +649 +726 +587 +314 +-28 +-387 +-699 +-848 +-814 +-773 +-937 +-1319 +-1736 +-2011 +-2045 +-1883 +-1581 +-1221 +-909 +-675 +-541 +-471 +-414 +-314 +-191 +-81 +-88 +-204 +-353 +-452 +-459 +-407 +-255 +-63 +126 +267 +402 +552 +797 +1228 +1775 +2268 +2561 +2593 +2339 +1872 +1290 +732 +343 +164 +124 +83 +22 +5 +114 +347 +594 +720 +629 +384 +53 +-300 +-627 +-818 +-815 +-755 +-861 +-1216 +-1673 +-2014 +-2101 +-1966 +-1675 +-1300 +-956 +-694 +-543 +-481 +-447 +-375 +-263 +-133 +-86 +-163 +-295 +-408 +-438 +-414 +-297 +-124 +65 +218 +353 +505 +721 +1118 +1655 +2179 +2523 +2612 +2413 +1978 +1413 +837 +414 +204 +154 +125 +57 +7 +66 +267 +515 +682 +648 +444 +145 +-189 +-514 +-746 +-799 +-748 +-808 +-1117 +-1574 +-1962 +-2109 +-2007 +-1740 +-1362 +-1001 +-732 +-579 +-522 +-498 +-435 +-308 +-154 +-59 +-107 +-235 +-371 +-427 +-423 +-339 +-181 +8 +173 +318 +471 +662 +1007 +1514 +2054 +2442 +2591 +2458 +2078 +1545 +976 +519 +262 +182 +150 +75 +4 +23 +193 +441 +649 +673 +514 +243 +-86 +-428 +-708 +-815 +-776 +-785 +-1042 +-1477 +-1894 +-2100 +-2036 +-1805 +-1457 +-1095 +-816 +-633 +-549 +-500 +-427 +-301 +-149 +-37 +-67 +-197 +-351 +-436 +-445 +-390 +-241 +-51 +136 +283 +427 +591 +877 +1346 +1890 +2332 +2552 +2513 +2209 +1724 +1166 +657 +331 +192 +150 +75 +-6 +-14 +131 +389 +630 +716 +589 +331 +0 +-350 +-671 +-831 +-813 +-783 +-961 +-1353 +-1776 +-2038 +-2043 +-1867 +-1573 +-1224 +-916 +-686 +-558 +-490 +-425 +-317 +-177 +-55 +-57 +-184 +-343 +-451 +-468 +-422 +-283 +-93 +105 +259 +402 +548 +784 +1202 +1743 +2231 +2525 +2565 +2332 +1887 +1329 +775 +380 +187 +134 +81 +7 +-15 +99 +344 +602 +733 +640 +400 +77 +-275 +-613 +-823 +-832 +-768 +-865 +-1210 +-1656 +-1991 +-2075 +-1948 +-1689 +-1335 +-995 +-727 +-559 +-477 +-429 +-355 +-241 +-119 +-80 +-172 +-312 +-428 +-452 +-426 +-316 +-137 +59 +220 +357 +499 +694 +1071 +1607 +2137 +2500 +2612 +2437 +2022 +1470 +891 +438 +199 +134 +106 +43 +4 +73 +286 +537 +699 +657 +445 +147 +-185 +-517 +-768 +-830 +-763 +-797 +-1097 +-1552 +-1945 +-2102 +-2015 +-1773 +-1420 +-1055 +-758 +-575 +-499 +-467 +-415 +-307 +-168 +-81 +-137 +-262 +-389 +-432 +-426 +-353 +-198 +-11 +160 +304 +458 +639 +977 +1486 +2038 +2445 +2606 +2491 +2118 +1588 +1003 +513 +239 +159 +151 +91 +22 +37 +206 +456 +657 +672 +498 +232 +-83 +-411 +-699 +-817 +-773 +-766 +-1019 +-1463 +-1892 +-2103 +-2047 +-1825 +-1490 +-1123 +-814 +-616 +-529 +-500 +-455 +-345 +-192 +-67 +-83 +-206 +-350 +-425 +-432 +-388 +-249 +-63 +121 +271 +424 +586 +871 +1346 +1906 +2357 +2571 +2518 +2210 +1723 +1163 +647 +322 +194 +170 +104 +16 +-6 +125 +379 +620 +702 +572 +331 +24 +-304 +-633 +-822 +-815 +-772 +-942 +-1350 +-1792 +-2061 +-2054 +-1867 +-1566 +-1215 +-906 +-682 +-566 +-513 +-461 +-350 +-198 +-55 +-41 +-164 +-320 +-424 +-440 +-417 +-296 +-114 +85 +249 +403 +552 +777 +1198 +1743 +2235 +2508 +2535 +2307 +1873 +1334 +786 +386 +198 +151 +97 +10 +-30 +70 +315 +574 +710 +623 +402 +109 +-218 +-566 +-815 +-851 +-783 +-869 +-1221 +-1667 +-1995 +-2057 +-1920 +-1668 +-1339 +-1014 +-750 +-584 +-501 +-445 +-356 +-228 +-93 +-49 +-151 +-297 +-419 +-438 +-421 +-323 +-146 +53 +221 +364 +502 +677 +1047 +1583 +2117 +2466 +2573 +2412 +2027 +1501 +925 +456 +200 +131 +102 +29 +-20 +47 +275 +548 +726 +674 +456 +166 +-164 +-509 +-793 +-864 +-782 +-794 +-1085 +-1539 +-1925 +-2071 +-1986 +-1774 +-1453 +-1107 +-803 +-587 +-485 +-440 +-382 +-276 +-148 +-67 +-137 +-276 +-403 +-433 +-416 +-344 +-188 +4 +179 +314 +457 +610 +930 +1449 +2012 +2422 +2585 +2486 +2143 +1636 +1054 +535 +231 +138 +132 +82 +18 +40 +220 +482 +685 +689 +496 +225 +-83 +-415 +-726 +-856 +-795 +-753 +-979 +-1423 +-1859 +-2083 +-2037 +-1844 +-1529 +-1170 +-847 +-613 +-503 +-471 +-441 +-351 +-214 +-86 +-104 +-225 +-359 +-416 +-405 +-366 +-238 +-61 +123 +271 +425 +571 +840 +1319 +1886 +2339 +2557 +2518 +2223 +1751 +1187 +649 +299 +172 +175 +133 +46 +20 +147 +399 +631 +701 +551 +308 +20 +-293 +-627 +-826 +-810 +-751 +-913 +-1335 +-1791 +-2073 +-2071 +-1893 +-1604 +-1245 +-919 +-667 +-543 +-501 +-473 +-385 +-238 +-84 +-50 +-156 +-304 +-404 +-415 +-403 +-299 +-128 +67 +226 +380 +527 +747 +1178 +1742 +2241 +2511 +2528 +2301 +1877 +1346 +799 +392 +208 +181 +143 +52 +-6 +72 +312 +567 +704 +606 +383 +105 +-208 +-552 +-816 +-856 +-778 +-859 +-1222 +-1677 +-2005 +-2054 +-1908 +-1661 +-1331 +-1008 +-744 +-580 +-514 +-472 +-381 +-241 +-84 +-26 +-133 +-290 +-418 +-433 +-419 +-337 +-175 +22 +198 +354 +508 +686 +1045 +1577 +2105 +2442 +2538 +2385 +2024 +1523 +961 +489 +232 +157 +122 +34 +-37 +16 +248 +528 +715 +671 +461 +192 +-116 +-464 +-778 +-879 +-806 +-809 +-1096 +-1541 +-1919 +-2052 +-1959 +-1753 +-1446 +-1117 +-821 +-608 +-497 +-441 +-377 +-257 +-119 +-33 +-114 +-267 +-406 +-439 +-422 +-363 +-212 +-21 +168 +316 +470 +618 +920 +1421 +1979 +2386 +2554 +2472 +2153 +1672 +1098 +572 +245 +137 +123 +60 +-9 +10 +198 +474 +688 +698 +505 +242 +-59 +-393 +-727 +-881 +-817 +-762 +-974 +-1411 +-1844 +-2064 +-2018 +-1840 +-1550 +-1200 +-879 +-624 +-487 +-435 +-400 +-314 +-192 +-79 +-106 +-237 +-372 +-424 +-406 +-368 +-240 +-62 +128 +273 +420 +558 +809 +1277 +1854 +2325 +2557 +2533 +2262 +1807 +1239 +678 +294 +147 +141 +105 +31 +7 +146 +406 +643 +706 +547 +296 +5 +-304 +-638 +-843 +-825 +-747 +-893 +-1308 +-1769 +-2062 +-2071 +-1910 +-1637 +-1274 +-926 +-650 +-501 +-456 +-436 +-364 +-239 +-96 +-70 +-187 +-328 +-411 +-404 +-383 +-286 +-126 +62 +216 +373 +520 +732 +1153 +1721 +2231 +2521 +2558 +2344 +1926 +1385 +816 +388 +193 +167 +143 +54 +-6 +74 +308 +561 +689 +588 +364 +96 +-196 +-535 +-799 +-844 +-763 +-830 +-1189 +-1660 +-2009 +-2078 +-1932 +-1684 +-1344 +-1007 +-732 +-561 +-496 +-466 +-397 +-264 +-107 +-33 +-126 +-278 +-403 +-419 +-415 +-349 +-191 +6 +186 +349 +509 +683 +1039 +1571 +2107 +2446 +2543 +2388 +2022 +1526 +965 +493 +237 +176 +151 +59 +-18 +14 +225 +499 +689 +652 +454 +197 +-98 +-433 +-747 +-862 +-800 +-805 +-1087 +-1538 +-1921 +-2050 +-1949 +-1738 +-1433 +-1105 +-822 +-620 +-524 +-477 +-412 +-288 +-134 +-31 +-99 +-256 +-397 +-437 +-424 +-372 +-224 +-33 +156 +312 +475 +622 +915 +1409 +1957 +2359 +2520 +2445 +2144 +1677 +1119 +605 +274 +152 +125 +49 +-31 +-22 +164 +444 +676 +710 +535 +277 +-20 +-357 +-699 +-872 +-829 +-779 +-981 +-1405 +-1824 +-2042 +-1997 +-1826 +-1553 +-1218 +-912 +-662 +-520 +-448 +-393 +-294 +-164 +-55 +-88 +-224 +-370 +-430 +-419 +-385 +-255 +-75 +119 +270 +422 +560 +802 +1256 +1815 +2280 +2518 +2512 +2266 +1830 +1276 +715 +318 +146 +121 +78 +8 +-10 +130 +398 +642 +725 +574 +325 +28 +-292 +-632 +-848 +-837 +-754 +-878 +-1270 +-1723 +-2023 +-2062 +-1924 +-1662 +-1312 +-965 +-683 +-516 +-446 +-415 +-344 +-228 +-97 +-76 +-190 +-332 +-421 +-412 +-390 +-284 +-119 +69 +223 +366 +508 +712 +1122 +1681 +2200 +2511 +2563 +2362 +1950 +1407 +826 +378 +169 +137 +125 +59 +17 +98 +325 +571 +706 +610 +382 +97 +-209 +-543 +-800 +-842 +-760 +-817 +-1164 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/pint_glass_1797.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/pint_glass_1797.samples new file mode 100644 index 00000000..a6d657d7 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/pint_glass_1797.samples @@ -0,0 +1,4096 @@ +-1158 +-1234 +-1223 +-1144 +-1007 +-829 +-584 +-226 +215 +658 +705 +645 +492 +320 +220 +99 +-99 +-291 +-399 +-470 +-564 +-653 +-710 +-689 +-587 +-462 +-309 +-106 +114 +286 +393 +466 +547 +640 +673 +616 +530 +455 +357 +201 +26 +-174 +-360 +-502 +-613 +-690 +-691 +-620 +-529 +-448 +-356 +-241 +-85 +109 +289 +414 +528 +629 +690 +692 +612 +494 +382 +228 +28 +-161 +-270 +-345 +-479 +-591 +-652 +-653 +-612 +-563 +-462 +-305 +-132 +25 +188 +351 +521 +623 +660 +637 +586 +529 +438 +310 +163 +14 +-144 +-305 +-446 +-546 +-627 +-692 +-695 +-627 +-499 +-317 +-151 +11 +150 +248 +357 +472 +565 +613 +644 +635 +575 +448 +278 +90 +-108 +-286 +-467 +-582 +-595 +-569 +-553 +-563 +-524 +-423 +-314 +-196 +-44 +187 +389 +514 +589 +649 +673 +634 +539 +391 +275 +178 +46 +-123 +-276 +-386 +-508 +-626 +-705 +-691 +-590 +-461 +-330 +-179 +-41 +114 +274 +415 +509 +552 +588 +634 +612 +518 +407 +288 +153 +-43 +-264 +-411 +-485 +-555 +-619 +-665 +-611 +-494 +-378 +-269 +-152 +3 +172 +296 +398 +521 +636 +688 +659 +586 +477 +338 +181 +-8 +-178 +-317 +-416 +-497 +-536 +-567 +-586 +-573 +-519 +-420 +-291 +-106 +103 +293 +442 +526 +581 +632 +619 +536 +451 +377 +283 +162 +10 +-150 +-313 +-484 +-622 +-696 +-671 +-591 +-496 +-384 +-253 +-116 +2 +116 +250 +393 +522 +593 +642 +661 +628 +522 +342 +140 +-38 +-173 +-303 +-405 +-470 +-507 +-545 +-594 +-603 +-531 +-416 +-282 +-123 +63 +251 +412 +536 +610 +619 +589 +535 +471 +382 +251 +131 +15 +-147 +-330 +-478 +-557 +-599 +-617 +-624 +-565 +-434 +-283 +-138 +-1 +160 +318 +426 +492 +541 +599 +623 +553 +450 +336 +236 +92 +-104 +-287 +-434 +-525 +-585 +-615 +-592 +-522 +-430 +-343 +-245 +-130 +19 +180 +338 +468 +565 +643 +667 +622 +508 +348 +200 +74 +-52 +-167 +-263 +-340 +-433 +-553 +-644 +-661 +-595 +-481 +-340 +-170 +33 +233 +367 +441 +491 +514 +514 +501 +483 +475 +433 +315 +127 +-78 +-263 +-418 +-539 +-611 +-618 +-570 +-504 +-424 +-333 +-232 +-111 +14 +150 +288 +421 +547 +636 +654 +609 +503 +389 +262 +111 +-36 +-173 +-286 +-388 +-493 +-563 +-578 +-548 +-517 +-471 +-361 +-204 +-34 +127 +281 +415 +517 +577 +588 +568 +515 +430 +315 +192 +83 +-43 +-172 +-307 +-445 +-548 +-618 +-646 +-604 +-505 +-368 +-218 +-65 +90 +222 +317 +388 +443 +496 +540 +552 +542 +486 +355 +179 +-13 +-201 +-365 +-481 +-534 +-536 +-525 +-509 +-470 +-405 +-318 +-233 +-125 +23 +203 +377 +516 +607 +639 +609 +511 +384 +263 +164 +76 +-38 +-170 +-293 +-404 +-499 +-578 +-618 +-598 +-522 +-406 +-261 +-92 +75 +215 +323 +396 +455 +499 +539 +546 +502 +416 +307 +178 +33 +-126 +-285 +-406 +-496 +-561 +-593 +-570 +-494 +-392 +-296 +-188 +-61 +80 +219 +330 +425 +509 +560 +572 +544 +481 +380 +238 +70 +-96 +-238 +-344 +-426 +-487 +-513 +-515 +-498 +-460 +-393 +-295 +-175 +-21 +143 +301 +445 +541 +586 +571 +510 +422 +343 +266 +173 +60 +-67 +-193 +-325 +-456 +-559 +-605 +-588 +-530 +-441 +-302 +-135 +15 +130 +208 +281 +371 +459 +524 +560 +556 +507 +402 +253 +89 +-64 +-203 +-330 +-430 +-490 +-510 +-500 +-477 +-437 +-380 +-295 +-172 +-21 +140 +288 +408 +498 +540 +544 +519 +474 +401 +294 +165 +26 +-101 +-220 +-333 +-433 +-505 +-542 +-547 +-507 +-431 +-325 +-201 +-73 +67 +214 +346 +443 +502 +524 +521 +482 +416 +339 +248 +135 +0 +-146 +-291 +-410 +-500 +-555 +-567 +-530 +-449 +-346 +-227 +-103 +13 +121 +220 +321 +421 +506 +563 +569 +521 +415 +285 +150 +6 +-132 +-257 +-353 +-422 +-468 +-495 +-507 +-490 +-447 +-368 +-249 +-94 +78 +234 +352 +425 +471 +499 +498 +471 +420 +346 +248 +126 +-6 +-146 +-278 +-403 +-502 +-556 +-556 +-511 +-432 +-337 +-233 +-131 +-24 +96 +221 +342 +443 +512 +534 +523 +481 +405 +303 +178 +33 +-109 +-236 +-335 +-417 +-482 +-517 +-520 +-489 +-428 +-329 +-204 +-71 +52 +168 +285 +394 +477 +523 +531 +499 +438 +347 +230 +102 +-25 +-148 +-270 +-372 +-450 +-497 +-512 +-506 +-470 +-393 +-283 +-144 +5 +142 +259 +351 +423 +470 +496 +500 +476 +415 +317 +195 +62 +-76 +-211 +-339 +-439 +-498 +-507 +-480 +-438 +-379 +-306 +-223 +-122 +3 +149 +294 +415 +491 +528 +530 +497 +429 +333 +217 +95 +-24 +-132 +-232 +-323 +-407 +-482 +-529 +-532 +-482 +-380 +-257 +-125 +3 +120 +225 +323 +408 +469 +497 +497 +466 +405 +320 +212 +76 +-73 +-220 +-340 +-417 +-465 +-483 +-477 +-452 +-404 +-329 +-225 +-102 +29 +160 +271 +365 +446 +503 +526 +500 +436 +346 +237 +118 +-7 +-131 +-247 +-353 +-432 +-478 +-489 +-470 +-433 +-380 +-299 +-188 +-53 +99 +237 +350 +428 +470 +485 +475 +438 +377 +291 +187 +74 +-44 +-157 +-272 +-386 +-484 +-540 +-539 +-486 +-398 +-295 +-188 +-82 +21 +123 +228 +335 +423 +479 +501 +496 +457 +378 +263 +121 +-27 +-159 +-265 +-346 +-397 +-433 +-457 +-469 +-457 +-412 +-320 +-196 +-59 +81 +211 +326 +416 +479 +502 +485 +437 +364 +277 +185 +85 +-24 +-146 +-274 +-389 +-466 +-506 +-507 +-479 +-426 +-343 +-233 +-108 +23 +147 +259 +347 +412 +457 +483 +490 +452 +374 +267 +143 +11 +-117 +-238 +-344 +-429 +-480 +-495 +-472 +-419 +-351 +-275 +-187 +-86 +32 +165 +301 +411 +481 +513 +509 +473 +404 +304 +180 +54 +-68 +-170 +-250 +-326 +-395 +-458 +-505 +-509 +-463 +-369 +-242 +-105 +33 +160 +270 +356 +420 +456 +461 +442 +410 +364 +297 +201 +75 +-75 +-226 +-358 +-451 +-492 +-492 +-462 +-420 +-357 +-278 +-178 +-64 +51 +163 +270 +368 +452 +512 +530 +500 +422 +307 +179 +60 +-50 +-153 +-249 +-339 +-415 +-467 +-483 +-470 +-430 +-364 +-273 +-152 +-12 +135 +269 +375 +443 +474 +474 +457 +421 +358 +266 +158 +41 +-73 +-183 +-289 +-389 +-469 +-519 +-526 +-479 +-390 +-279 +-162 +-47 +64 +174 +278 +368 +430 +467 +480 +468 +429 +360 +254 +118 +-36 +-188 +-312 +-392 +-430 +-443 +-443 +-435 +-410 +-358 +-272 +-165 +-43 +86 +217 +343 +443 +510 +532 +500 +424 +321 +218 +132 +50 +-42 +-154 +-271 +-378 +-460 +-506 +-514 +-483 +-417 +-318 +-198 +-56 +84 +207 +297 +360 +404 +439 +466 +469 +436 +359 +248 +118 +-11 +-138 +-256 +-359 +-438 +-487 +-500 +-473 +-413 +-332 +-242 +-146 +-39 +83 +208 +322 +413 +474 +497 +489 +452 +386 +292 +171 +34 +-96 +-207 +-296 +-366 +-419 +-464 +-484 +-475 +-426 +-337 +-221 +-88 +45 +173 +290 +393 +466 +495 +480 +434 +372 +306 +235 +150 +42 +-90 +-230 +-358 +-451 +-500 +-511 +-486 +-435 +-355 +-249 +-127 +0 +113 +211 +289 +366 +435 +488 +505 +479 +410 +299 +168 +37 +-87 +-199 +-298 +-387 +-450 +-479 +-476 +-444 +-393 +-328 +-238 +-127 +6 +150 +285 +391 +454 +482 +478 +451 +406 +335 +239 +125 +1 +-117 +-224 +-323 +-408 +-476 +-514 +-512 +-465 +-375 +-259 +-140 +-18 +92 +199 +305 +389 +449 +476 +469 +440 +389 +316 +218 +90 +-53 +-196 +-319 +-407 +-456 +-479 +-482 +-463 +-412 +-331 +-226 +-104 +19 +135 +244 +343 +429 +493 +520 +500 +434 +336 +228 +121 +14 +-99 +-215 +-325 +-417 +-476 +-498 +-490 +-453 +-387 +-300 +-188 +-52 +97 +233 +340 +407 +443 +463 +470 +453 +405 +326 +218 +91 +-40 +-163 +-277 +-377 +-461 +-513 +-522 +-482 +-403 +-301 +-199 +-99 +5 +116 +234 +346 +435 +492 +508 +489 +442 +370 +273 +149 +10 +-127 +-245 +-334 +-395 +-440 +-473 +-482 +-463 +-401 +-303 +-177 +-45 +85 +202 +307 +399 +466 +499 +492 +452 +385 +307 +218 +115 +-8 +-141 +-276 +-389 +-464 +-499 +-494 +-467 +-418 +-341 +-236 +-111 +20 +141 +244 +328 +396 +453 +493 +504 +471 +391 +276 +145 +18 +-102 +-214 +-319 +-411 +-476 +-503 +-488 +-441 +-371 +-288 +-197 +-89 +37 +172 +304 +410 +472 +491 +482 +454 +404 +326 +220 +95 +-38 +-160 +-268 +-354 +-424 +-482 +-515 +-510 +-458 +-362 +-239 +-110 +12 +125 +231 +329 +411 +468 +490 +479 +438 +371 +289 +186 +61 +-83 +-230 +-354 +-439 +-479 +-487 +-472 +-440 +-386 +-308 +-206 +-85 +43 +165 +276 +369 +447 +502 +521 +493 +415 +310 +192 +80 +-31 +-136 +-242 +-343 +-430 +-491 +-509 +-489 +-432 +-358 +-264 +-151 +-21 +121 +250 +351 +416 +454 +472 +470 +448 +398 +308 +185 +46 +-87 +-209 +-311 +-396 +-464 +-505 +-510 +-467 +-385 +-285 +-179 +-74 +28 +139 +255 +366 +456 +504 +511 +479 +424 +347 +249 +127 +-11 +-149 +-269 +-361 +-419 +-449 +-461 +-461 +-439 +-381 +-286 +-160 +-23 +108 +228 +335 +420 +484 +511 +499 +450 +370 +274 +173 +73 +-38 +-158 +-282 +-395 +-475 +-507 +-498 +-460 +-395 +-312 +-208 +-85 +46 +172 +281 +366 +423 +464 +491 +496 +461 +380 +257 +118 +-18 +-142 +-249 +-344 +-418 +-471 +-493 +-478 +-425 +-348 +-259 +-165 +-58 +63 +200 +330 +432 +493 +507 +489 +442 +376 +293 +185 +64 +-68 +-192 +-291 +-365 +-424 +-470 +-497 +-492 +-441 +-342 +-213 +-79 +50 +159 +260 +349 +424 +476 +492 +472 +417 +338 +246 +145 +27 +-107 +-245 +-364 +-450 +-491 +-493 +-465 +-418 +-359 +-280 +-181 +-58 +72 +193 +297 +383 +448 +491 +504 +472 +399 +293 +169 +45 +-68 +-169 +-268 +-357 +-435 +-486 +-498 +-471 +-413 +-335 +-242 +-130 +-3 +136 +264 +369 +441 +469 +468 +448 +408 +347 +263 +147 +17 +-112 +-225 +-320 +-397 +-458 +-497 +-504 +-465 +-385 +-271 +-149 +-34 +74 +172 +274 +370 +449 +491 +492 +459 +396 +316 +218 +97 +-36 +-173 +-297 +-385 +-435 +-450 +-451 +-438 +-411 +-354 +-263 +-138 +1 +134 +252 +348 +424 +473 +496 +482 +428 +339 +234 +128 +32 +-64 +-169 +-283 +-387 +-464 +-499 +-487 +-438 +-364 +-273 +-171 +-57 +66 +193 +302 +379 +426 +452 +463 +452 +415 +339 +228 +95 +-39 +-162 +-261 +-340 +-406 +-452 +-476 +-461 +-408 +-322 +-224 +-120 +-14 +98 +213 +323 +414 +469 +487 +468 +418 +350 +268 +166 +45 +-87 +-212 +-306 +-374 +-418 +-443 +-457 +-449 +-404 +-319 +-202 +-69 +63 +183 +279 +359 +422 +466 +472 +438 +373 +292 +207 +114 +11 +-108 +-234 +-353 +-444 +-489 +-488 +-452 +-396 +-324 +-242 +-144 +-28 +96 +209 +302 +371 +424 +463 +473 +448 +382 +273 +142 +11 +-103 +-198 +-279 +-353 +-422 +-470 +-484 +-457 +-394 +-305 +-206 +-96 +25 +150 +268 +370 +432 +457 +450 +420 +378 +317 +235 +128 +2 +-129 +-246 +-336 +-399 +-441 +-465 +-465 +-432 +-359 +-256 +-134 +-11 +101 +197 +288 +376 +437 +467 +458 +416 +351 +271 +180 +77 +-42 +-173 +-295 +-391 +-444 +-462 +-446 +-410 +-363 +-297 +-211 +-100 +24 +145 +250 +340 +407 +454 +480 +471 +418 +323 +210 +96 +-11 +-104 +-194 +-284 +-371 +-442 +-476 +-468 +-419 +-344 +-254 +-154 +-40 +87 +211 +314 +385 +421 +434 +433 +416 +377 +313 +213 +83 +-55 +-180 +-279 +-352 +-404 +-444 +-453 +-435 +-383 +-300 +-197 +-91 +16 +121 +228 +328 +415 +470 +480 +452 +392 +321 +237 +142 +31 +-93 +-218 +-323 +-398 +-438 +-452 +-442 +-415 +-364 +-280 +-170 +-44 +80 +192 +280 +360 +424 +465 +471 +437 +369 +272 +170 +68 +-31 +-134 +-242 +-348 +-429 +-473 +-478 +-449 +-390 +-313 +-222 +-112 +10 +135 +246 +332 +389 +422 +440 +443 +422 +364 +265 +136 +3 +-121 +-223 +-309 +-380 +-432 +-463 +-464 +-425 +-359 +-269 +-170 +-68 +43 +160 +281 +381 +448 +473 +454 +411 +357 +286 +203 +103 +-20 +-149 +-266 +-357 +-418 +-452 +-463 +-454 +-410 +-334 +-228 +-105 +15 +126 +220 +306 +382 +444 +478 +472 +420 +338 +241 +141 +38 +-75 +-189 +-297 +-386 +-445 +-463 +-454 +-416 +-358 +-283 +-183 +-68 +60 +184 +285 +360 +411 +445 +463 +452 +404 +317 +207 +85 +-36 +-145 +-240 +-324 +-398 +-449 +-472 +-453 +-399 +-321 +-232 +-131 +-19 +106 +228 +336 +412 +450 +456 +438 +403 +352 +279 +180 +58 +-70 +-192 +-294 +-375 +-430 +-456 +-460 +-432 +-369 +-280 +-171 +-61 +48 +146 +243 +338 +420 +477 +486 +452 +384 +297 +198 +95 +-8 +-124 +-237 +-334 +-406 +-443 +-455 +-443 +-409 +-347 +-256 +-139 +-8 +121 +229 +314 +378 +421 +449 +454 +429 +369 +275 +159 +40 +-74 +-181 +-281 +-370 +-437 +-474 +-469 +-427 +-361 +-279 +-187 +-84 +32 +151 +264 +358 +416 +444 +445 +430 +393 +328 +234 +117 +-12 +-138 +-246 +-332 +-394 +-439 +-463 +-455 +-413 +-335 +-239 +-136 +-29 +78 +189 +294 +389 +456 +479 +462 +411 +336 +255 +165 +64 +-49 +-165 +-274 +-362 +-420 +-452 +-459 +-443 +-394 +-312 +-200 +-68 +60 +170 +258 +327 +387 +431 +459 +455 +411 +330 +231 +119 +-4 +-121 +-231 +-330 +-406 +-453 +-464 +-435 +-387 +-328 +-256 +-168 +-57 +72 +198 +306 +388 +437 +459 +451 +421 +372 +290 +183 +55 +-67 +-171 +-264 +-345 +-410 +-454 +-468 +-447 +-391 +-303 +-202 +-96 +16 +130 +240 +342 +418 +458 +460 +431 +384 +321 +240 +141 +25 +-97 +-216 +-322 +-399 +-446 +-466 +-462 +-428 +-359 +-258 +-140 +-23 +86 +179 +264 +344 +413 +463 +478 +451 +389 +293 +182 +68 +-46 +-166 +-273 +-360 +-423 +-450 +-448 +-424 +-383 +-324 +-242 +-129 +-4 +133 +255 +352 +413 +447 +457 +443 +406 +340 +241 +135 +20 +-91 +-198 +-296 +-377 +-446 +-482 +-479 +-432 +-350 +-255 +-152 +-49 +61 +171 +277 +367 +426 +455 +447 +421 +371 +304 +211 +93 +-35 +-163 +-274 +-356 +-412 +-448 +-458 +-439 +-392 +-314 +-215 +-106 +7 +113 +212 +311 +392 +450 +482 +470 +414 +332 +238 +134 +23 +-93 +-202 +-300 +-376 +-426 +-450 +-445 +-419 +-370 +-294 +-191 +-69 +62 +186 +287 +358 +406 +438 +447 +427 +376 +300 +197 +87 +-24 +-133 +-237 +-338 +-417 +-464 +-476 +-447 +-382 +-303 +-215 +-120 +-21 +94 +208 +310 +390 +439 +454 +446 +412 +353 +271 +159 +33 +-94 +-204 +-295 +-360 +-407 +-440 +-450 +-429 +-372 +-284 +-180 +-68 +42 +151 +251 +345 +423 +462 +466 +432 +373 +294 +201 +102 +-5 +-121 +-232 +-333 +-395 +-433 +-447 +-431 +-395 +-332 +-243 +-129 +-6 +116 +221 +305 +372 +421 +450 +457 +426 +361 +265 +155 +44 +-67 +-176 +-277 +-361 +-427 +-455 +-445 +-411 +-355 +-282 +-189 +-87 +28 +152 +268 +360 +421 +448 +451 +433 +386 +316 +218 +105 +-19 +-133 +-229 +-310 +-375 +-430 +-453 +-446 +-408 +-331 +-233 +-124 +-22 +87 +193 +293 +382 +437 +463 +446 +400 +338 +260 +168 +62 +-57 +-174 +-280 +-363 +-414 +-440 +-441 +-420 +-373 +-299 +-199 +-84 +37 +153 +246 +320 +387 +439 +455 +436 +385 +305 +205 +100 +-8 +-109 +-209 +-308 +-389 +-437 +-454 +-440 +-397 +-338 +-258 +-157 +-40 +85 +200 +298 +370 +415 +433 +428 +402 +357 +282 +177 +60 +-58 +-169 +-266 +-351 +-410 +-450 +-456 +-429 +-370 +-287 +-192 +-92 +11 +120 +226 +326 +404 +446 +452 +428 +378 +310 +219 +120 +9 +-109 +-219 +-306 +-371 +-413 +-434 +-437 +-412 +-352 +-258 +-147 +-26 +88 +191 +282 +357 +414 +446 +448 +416 +350 +265 +170 +72 +-31 +-139 +-244 +-340 +-407 +-443 +-437 +-412 +-360 +-289 +-203 +-94 +19 +139 +244 +327 +378 +414 +432 +430 +399 +332 +242 +131 +12 +-105 +-208 +-295 +-363 +-415 +-436 +-426 +-385 +-323 +-244 +-153 +-56 +52 +170 +278 +368 +427 +450 +440 +401 +343 +270 +178 +72 +-36 +-141 +-238 +-318 +-379 +-421 +-440 +-431 +-383 +-303 +-199 +-84 +26 +131 +217 +299 +363 +411 +430 +416 +378 +317 +237 +140 +32 +-84 +-197 +-301 +-375 +-417 +-429 +-413 +-381 +-335 +-261 +-166 +-56 +55 +164 +263 +332 +390 +423 +433 +412 +361 +273 +170 +59 +-44 +-142 +-233 +-319 +-385 +-421 +-433 +-414 +-366 +-301 +-218 +-122 +-16 +99 +211 +311 +379 +414 +415 +397 +362 +306 +227 +131 +28 +-83 +-185 +-277 +-348 +-402 +-438 +-443 +-411 +-342 +-250 +-146 +-45 +54 +144 +234 +310 +368 +411 +419 +397 +350 +279 +192 +88 +-30 +-146 +-249 +-325 +-374 +-397 +-403 +-394 +-362 +-309 +-225 +-125 +-17 +95 +199 +292 +357 +404 +425 +413 +370 +298 +215 +131 +39 +-59 +-158 +-251 +-334 +-396 +-420 +-417 +-385 +-335 +-260 +-168 +-64 +49 +155 +247 +318 +365 +391 +399 +389 +351 +288 +200 +97 +-14 +-121 +-213 +-293 +-359 +-405 +-418 +-399 +-350 +-275 +-194 +-106 +-13 +85 +179 +267 +343 +397 +420 +408 +374 +319 +243 +150 +40 +-70 +-170 +-251 +-311 +-354 +-378 +-384 +-374 +-338 +-265 +-174 +-67 +42 +144 +234 +314 +369 +399 +402 +373 +326 +261 +188 +105 +14 +-87 +-192 +-287 +-355 +-397 +-406 +-385 +-342 +-282 +-202 +-110 +-8 +93 +180 +256 +319 +363 +391 +399 +376 +323 +239 +138 +37 +-59 +-155 +-242 +-311 +-359 +-387 +-388 +-362 +-316 +-249 +-171 +-82 +13 +114 +215 +298 +355 +379 +382 +366 +319 +263 +183 +92 +-8 +-105 +-190 +-266 +-322 +-363 +-386 +-389 +-355 +-295 +-209 +-114 +-21 +80 +168 +245 +311 +354 +372 +372 +345 +295 +231 +157 +70 +-32 +-137 +-236 +-309 +-355 +-383 +-379 +-356 +-311 +-247 +-170 +-82 +14 +103 +188 +258 +316 +362 +381 +371 +331 +265 +181 +91 +-4 +-92 +-175 +-251 +-313 +-353 +-370 +-363 +-334 +-286 +-216 +-133 +-37 +60 +161 +245 +303 +346 +366 +362 +340 +297 +233 +152 +58 +-36 +-123 +-201 +-275 +-335 +-368 +-376 +-355 +-307 +-244 +-160 +-74 +12 +100 +183 +258 +316 +354 +365 +354 +319 +269 +199 +112 +17 +-84 +-171 +-250 +-306 +-341 +-354 +-351 +-324 +-279 +-212 +-128 +-41 +51 +138 +218 +283 +333 +362 +365 +339 +291 +223 +146 +60 +-23 +-106 +-191 +-266 +-315 +-348 +-356 +-340 +-305 +-248 +-176 +-86 +10 +100 +185 +257 +304 +335 +349 +347 +318 +265 +193 +108 +23 +-64 +-149 +-225 +-288 +-328 +-352 +-348 +-319 +-270 +-207 +-133 +-47 +37 +126 +207 +270 +316 +343 +351 +331 +291 +234 +156 +69 +-24 +-111 +-187 +-253 +-299 +-337 +-347 +-334 +-299 +-244 +-169 +-90 +-8 +81 +161 +233 +289 +326 +345 +335 +305 +258 +196 +118 +34 +-56 +-145 +-221 +-282 +-317 +-338 +-336 +-314 +-271 +-214 +-141 +-57 +33 +115 +190 +251 +299 +330 +335 +321 +280 +224 +148 +70 +-9 +-92 +-167 +-237 +-292 +-328 +-336 +-327 +-295 +-245 +-178 +-99 +-14 +69 +147 +218 +270 +307 +322 +325 +303 +261 +195 +118 +33 +-50 +-127 +-201 +-260 +-304 +-329 +-336 +-307 +-269 +-211 +-142 +-66 +16 +96 +174 +240 +291 +314 +322 +305 +273 +224 +161 +83 +-3 +-88 +-164 +-226 +-273 +-306 +-320 +-318 +-294 +-248 +-184 +-106 +-23 +62 +138 +206 +263 +302 +320 +317 +290 +247 +188 +124 +53 +-28 +-111 +-185 +-249 +-295 +-320 +-318 +-297 +-259 +-208 +-137 +-60 +20 +97 +166 +227 +274 +306 +319 +314 +283 +229 +159 +78 +-2 +-82 +-153 +-215 +-265 +-295 +-310 +-300 +-272 +-233 +-178 +-111 +-33 +49 +130 +202 +256 +295 +307 +307 +285 +246 +193 +124 +47 +-32 +-104 +-171 +-229 +-276 +-304 +-312 +-299 +-260 +-206 +-139 +-61 +14 +86 +157 +222 +266 +297 +306 +293 +264 +219 +161 +92 +15 +-67 +-145 +-212 +-262 +-288 +-296 +-293 +-274 +-234 +-176 +-106 +-32 +40 +112 +182 +241 +279 +302 +308 +288 +247 +182 +113 +43 +-30 +-97 +-163 +-219 +-263 +-291 +-297 +-287 +-257 +-214 +-151 +-78 +3 +87 +159 +217 +257 +280 +288 +281 +256 +217 +162 +90 +21 +-56 +-129 +-197 +-251 +-287 +-304 +-300 +-275 +-226 +-166 +-101 +-34 +37 +107 +172 +227 +268 +290 +296 +277 +241 +193 +131 +57 +-24 +-99 +-165 +-217 +-255 +-279 +-288 +-276 +-249 +-207 +-147 +-74 +-3 +75 +140 +203 +251 +283 +295 +282 +251 +207 +152 +88 +22 +-49 +-116 +-183 +-237 +-272 +-292 +-291 +-268 +-229 +-176 +-107 +-33 +42 +112 +171 +218 +253 +274 +281 +270 +242 +196 +135 +63 +-13 +-84 +-151 +-210 +-256 +-280 +-280 +-266 +-239 +-191 +-139 +-79 +-12 +58 +129 +191 +242 +277 +288 +285 +258 +214 +158 +88 +18 +-52 +-115 +-172 +-220 +-253 +-274 +-275 +-263 +-230 +-180 +-114 +-40 +32 +101 +162 +220 +259 +275 +276 +259 +232 +189 +131 +68 +-3 +-75 +-145 +-207 +-246 +-270 +-280 +-269 +-242 +-197 +-141 +-75 +-5 +64 +123 +176 +220 +256 +278 +274 +254 +212 +154 +90 +21 +-47 +-114 +-176 +-223 +-256 +-270 +-268 +-252 +-219 +-173 +-121 +-58 +14 +89 +157 +212 +248 +265 +272 +257 +229 +178 +122 +56 +-8 +-73 +-135 +-188 +-230 +-261 +-279 +-275 +-248 +-203 +-146 +-82 +-14 +52 +118 +174 +217 +250 +261 +257 +235 +201 +160 +102 +36 +-41 +-112 +-169 +-218 +-249 +-267 +-269 +-250 +-216 +-174 +-117 +-48 +17 +80 +140 +192 +235 +266 +274 +260 +229 +180 +123 +60 +-2 +-69 +-130 +-184 +-229 +-256 +-262 +-257 +-241 +-204 +-156 +-88 +-19 +53 +118 +176 +220 +246 +262 +257 +239 +209 +160 +101 +34 +-34 +-95 +-149 +-200 +-244 +-264 +-268 +-253 +-218 +-168 +-112 +-52 +17 +80 +140 +196 +234 +257 +263 +252 +229 +190 +138 +76 +8 +-63 +-129 +-184 +-223 +-248 +-259 +-259 +-238 +-196 +-148 +-85 +-21 +46 +109 +166 +212 +247 +265 +268 +244 +206 +158 +101 +43 +-25 +-87 +-148 +-198 +-232 +-256 +-260 +-246 +-219 +-173 +-121 +-54 +14 +81 +141 +191 +227 +247 +258 +251 +226 +188 +136 +76 +9 +-58 +-117 +-172 +-215 +-249 +-263 +-255 +-232 +-192 +-145 +-91 +-28 +39 +104 +159 +206 +238 +252 +251 +238 +208 +167 +111 +46 +-26 +-93 +-147 +-193 +-227 +-251 +-254 +-243 +-216 +-172 +-116 +-56 +4 +62 +121 +177 +217 +248 +257 +248 +224 +182 +132 +72 +9 +-55 +-115 +-172 +-212 +-239 +-253 +-248 +-232 +-201 +-154 +-97 +-32 +35 +95 +151 +195 +224 +242 +245 +235 +204 +158 +102 +41 +-20 +-81 +-138 +-187 +-225 +-249 +-253 +-241 +-212 +-171 +-120 +-62 +-2 +61 +121 +171 +211 +233 +237 +240 +219 +182 +134 +76 +14 +-46 +-112 +-162 +-200 +-228 +-244 +-242 +-225 +-189 +-146 +-92 +-34 +22 +83 +143 +189 +219 +243 +242 +228 +196 +152 +104 +49 +-9 +-69 +-127 +-171 +-208 +-226 +-235 +-232 +-214 +-176 +-123 +-68 +-3 +63 +120 +168 +201 +222 +235 +231 +217 +180 +135 +84 +27 +-32 +-90 +-145 +-193 +-225 +-242 +-235 +-215 +-183 +-143 +-94 +-37 +22 +80 +136 +180 +211 +234 +237 +226 +201 +162 +112 +52 +-9 +-69 +-122 +-162 +-197 +-221 +-228 +-222 +-197 +-167 +-123 +-70 +-10 +47 +104 +156 +201 +227 +231 +224 +203 +170 +131 +81 +25 +-27 +-86 +-134 +-178 +-208 +-227 +-232 +-218 +-190 +-146 +-91 +-33 +27 +78 +122 +162 +196 +217 +221 +215 +194 +158 +110 +58 +5 +-55 +-114 +-165 +-203 +-223 +-225 +-211 +-195 +-164 +-123 +-78 +-23 +36 +89 +142 +182 +211 +222 +220 +206 +175 +127 +76 +20 +-35 +-83 +-128 +-167 +-198 +-219 +-224 +-215 +-192 +-150 +-101 +-45 +12 +70 +120 +165 +190 +206 +208 +200 +178 +145 +110 +62 +10 +-50 +-104 +-151 +-189 +-212 +-223 +-215 +-194 +-160 +-114 +-64 +-10 +39 +86 +125 +162 +191 +208 +213 +202 +174 +132 +83 +32 +-26 +-79 +-126 +-168 +-193 +-205 +-204 +-195 +-177 +-146 +-106 +-55 +1 +58 +111 +151 +184 +207 +214 +204 +180 +146 +102 +56 +7 +-39 +-85 +-128 +-167 +-197 +-212 +-208 +-190 +-160 +-118 +-66 +-15 +35 +83 +126 +161 +186 +196 +195 +187 +167 +136 +96 +42 +-15 +-71 +-124 +-163 +-190 +-201 +-204 +-191 +-169 +-134 +-93 +-47 +0 +45 +92 +133 +172 +200 +210 +204 +182 +148 +103 +55 +7 +-41 +-85 +-128 +-161 +-179 +-190 +-189 +-181 +-159 +-123 +-78 +-24 +28 +80 +125 +158 +181 +192 +192 +180 +158 +125 +84 +41 +-5 +-52 +-100 +-144 +-177 +-195 +-199 +-189 +-164 +-130 +-89 +-46 +2 +48 +92 +131 +159 +179 +188 +189 +177 +151 +114 +66 +14 +-42 +-88 +-125 +-155 +-175 +-185 +-186 +-173 +-148 +-114 +-77 +-33 +13 +61 +107 +147 +178 +192 +192 +177 +149 +117 +80 +38 +-6 +-51 +-95 +-132 +-160 +-180 +-188 +-184 +-166 +-138 +-100 +-53 +0 +47 +89 +123 +150 +173 +180 +176 +162 +138 +103 +61 +17 +-29 +-74 +-115 +-150 +-176 +-186 +-182 +-168 +-141 +-112 +-72 +-30 +14 +56 +98 +134 +160 +175 +180 +173 +151 +120 +81 +35 +-13 +-55 +-95 +-129 +-156 +-173 +-179 +-174 +-157 +-132 +-98 +-57 +-14 +34 +80 +119 +151 +171 +178 +172 +155 +132 +100 +64 +21 +-24 +-67 +-107 +-135 +-160 +-172 +-174 +-165 +-142 +-112 +-70 +-27 +19 +61 +97 +127 +153 +169 +174 +165 +143 +116 +82 +41 +0 +-42 +-85 +-119 +-150 +-167 +-173 +-164 +-147 +-122 +-88 +-53 +-12 +32 +74 +112 +139 +160 +171 +170 +157 +132 +103 +64 +20 +-25 +-65 +-101 +-131 +-150 +-162 +-164 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b2_123_471.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b2_123_471.samples new file mode 100644 index 00000000..32ba089b --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b2_123_471.samples @@ -0,0 +1,4096 @@ +276 +300 +319 +337 +350 +361 +369 +384 +393 +392 +384 +361 +329 +285 +237 +176 +109 +39 +-36 +-111 +-194 +-282 +-376 +-465 +-552 +-636 +-711 +-774 +-819 +-843 +-850 +-843 +-808 +-744 +-657 +-560 +-463 +-367 +-272 +-170 +-64 +45 +172 +307 +447 +585 +714 +829 +930 +1024 +1100 +1158 +1185 +1173 +1109 +1016 +887 +746 +595 +446 +299 +147 +-11 +-183 +-348 +-518 +-671 +-811 +-942 +-1051 +-1141 +-1215 +-1261 +-1286 +-1278 +-1231 +-1139 +-1012 +-868 +-716 +-572 +-431 +-286 +-131 +35 +212 +397 +569 +721 +854 +961 +1057 +1132 +1189 +1222 +1222 +1198 +1150 +1080 +980 +858 +732 +602 +477 +346 +205 +53 +-98 +-248 +-389 +-519 +-634 +-736 +-817 +-888 +-952 +-1003 +-1042 +-1053 +-1047 +-1023 +-986 +-937 +-874 +-801 +-717 +-614 +-489 +-351 +-203 +-47 +111 +266 +414 +546 +645 +720 +771 +796 +808 +801 +778 +740 +697 +652 +607 +574 +550 +525 +495 +461 +425 +389 +348 +304 +251 +192 +131 +67 +-1 +-72 +-143 +-215 +-274 +-321 +-359 +-382 +-398 +-404 +-406 +-398 +-387 +-376 +-364 +-365 +-371 +-375 +-372 +-373 +-378 +-387 +-398 +-408 +-415 +-418 +-424 +-428 +-428 +-418 +-395 +-371 +-349 +-329 +-306 +-276 +-229 +-169 +-94 +-24 +46 +128 +210 +299 +398 +501 +609 +708 +803 +893 +975 +1049 +1110 +1159 +1195 +1202 +1180 +1117 +1005 +846 +667 +477 +292 +112 +-65 +-239 +-408 +-569 +-734 +-895 +-1045 +-1179 +-1295 +-1387 +-1456 +-1504 +-1528 +-1510 +-1454 +-1343 +-1188 +-1011 +-812 +-614 +-425 +-232 +-28 +184 +390 +586 +769 +930 +1073 +1191 +1277 +1330 +1364 +1376 +1365 +1325 +1259 +1161 +1021 +859 +683 +504 +333 +164 +-11 +-184 +-345 +-494 +-630 +-747 +-844 +-921 +-970 +-995 +-997 +-981 +-934 +-866 +-781 +-682 +-578 +-467 +-359 +-258 +-166 +-73 +24 +128 +237 +343 +443 +538 +616 +668 +693 +686 +659 +612 +555 +495 +422 +342 +258 +175 +104 +39 +-11 +-63 +-108 +-151 +-193 +-225 +-249 +-272 +-295 +-309 +-322 +-329 +-335 +-344 +-351 +-358 +-362 +-350 +-329 +-296 +-264 +-227 +-185 +-141 +-88 +-40 +3 +45 +80 +112 +136 +150 +153 +146 +131 +119 +112 +108 +105 +103 +108 +120 +141 +161 +180 +198 +220 +240 +262 +282 +301 +315 +322 +331 +348 +371 +396 +412 +410 +395 +367 +334 +287 +230 +160 +77 +-3 +-79 +-167 +-258 +-352 +-448 +-536 +-620 +-691 +-755 +-808 +-847 +-873 +-877 +-860 +-816 +-745 +-657 +-555 +-458 +-361 +-265 +-156 +-43 +80 +214 +354 +495 +621 +744 +858 +966 +1059 +1127 +1174 +1183 +1147 +1072 +962 +825 +679 +524 +369 +217 +60 +-101 +-272 +-448 +-611 +-761 +-894 +-1015 +-1118 +-1197 +-1259 +-1293 +-1297 +-1266 +-1194 +-1085 +-951 +-800 +-650 +-509 +-364 +-212 +-45 +131 +314 +492 +654 +795 +915 +1021 +1111 +1178 +1224 +1237 +1220 +1187 +1136 +1060 +956 +831 +697 +557 +415 +274 +124 +-29 +-183 +-333 +-469 +-591 +-699 +-793 +-873 +-945 +-1007 +-1054 +-1076 +-1079 +-1068 +-1043 +-1005 +-948 +-871 +-783 +-680 +-564 +-427 +-275 +-109 +60 +228 +387 +527 +641 +732 +793 +829 +845 +840 +825 +801 +769 +731 +690 +652 +616 +583 +554 +518 +474 +424 +370 +313 +257 +195 +129 +65 +-6 +-76 +-146 +-210 +-271 +-324 +-364 +-393 +-406 +-411 +-406 +-400 +-393 +-385 +-377 +-374 +-368 +-370 +-377 +-387 +-397 +-402 +-410 +-421 +-436 +-450 +-457 +-456 +-449 +-443 +-430 +-414 +-399 +-379 +-351 +-310 +-267 +-211 +-144 +-70 +9 +96 +178 +269 +371 +480 +593 +707 +812 +906 +995 +1082 +1161 +1225 +1267 +1278 +1258 +1201 +1104 +958 +774 +574 +379 +198 +24 +-153 +-332 +-514 +-695 +-871 +-1035 +-1179 +-1311 +-1421 +-1514 +-1577 +-1607 +-1601 +-1556 +-1457 +-1309 +-1126 +-922 +-718 +-521 +-332 +-131 +84 +304 +515 +712 +883 +1035 +1166 +1266 +1346 +1401 +1427 +1426 +1399 +1347 +1264 +1140 +983 +805 +622 +445 +277 +100 +-88 +-271 +-443 +-592 +-711 +-813 +-895 +-957 +-998 +-1010 +-993 +-952 +-883 +-800 +-706 +-604 +-502 +-395 +-293 +-202 +-112 +-13 +90 +202 +313 +417 +503 +579 +633 +662 +663 +632 +581 +522 +454 +377 +292 +205 +119 +39 +-28 +-81 +-124 +-174 +-219 +-257 +-284 +-298 +-299 +-294 +-290 +-286 +-286 +-288 +-291 +-292 +-292 +-288 +-278 +-258 +-226 +-186 +-144 +-108 +-66 +-25 +18 +61 +97 +122 +139 +149 +153 +151 +144 +125 +102 +79 +57 +38 +25 +23 +31 +50 +76 +111 +144 +177 +209 +242 +272 +300 +322 +341 +355 +368 +388 +411 +431 +431 +416 +390 +352 +306 +246 +174 +91 +6 +-82 +-171 +-260 +-358 +-461 +-561 +-648 +-725 +-789 +-838 +-875 +-899 +-901 +-884 +-831 +-742 +-635 +-527 +-423 +-320 +-218 +-105 +17 +148 +286 +428 +569 +702 +825 +941 +1051 +1140 +1205 +1243 +1237 +1189 +1103 +980 +834 +671 +493 +319 +148 +-16 +-188 +-366 +-550 +-728 +-883 +-1018 +-1132 +-1231 +-1306 +-1367 +-1397 +-1399 +-1360 +-1277 +-1150 +-994 +-825 +-650 +-486 +-326 +-154 +25 +214 +410 +605 +785 +937 +1062 +1164 +1254 +1319 +1358 +1366 +1344 +1300 +1232 +1141 +1018 +877 +721 +559 +407 +249 +87 +-77 +-248 +-421 +-580 +-719 +-832 +-921 +-998 +-1064 +-1128 +-1172 +-1189 +-1177 +-1149 +-1106 +-1051 +-978 +-879 +-772 +-649 +-513 +-367 +-208 +-38 +142 +318 +474 +610 +710 +785 +844 +881 +897 +889 +868 +829 +786 +742 +696 +649 +600 +556 +518 +486 +448 +404 +352 +296 +234 +173 +112 +51 +-17 +-95 +-172 +-242 +-296 +-333 +-360 +-377 +-391 +-392 +-388 +-376 +-367 +-356 +-345 +-343 +-337 +-333 +-334 +-346 +-359 +-374 +-387 +-401 +-420 +-439 +-461 +-477 +-488 +-492 +-490 +-488 +-476 +-452 +-419 +-379 +-340 +-295 +-232 +-160 +-77 +18 +117 +218 +332 +458 +590 +724 +849 +964 +1070 +1172 +1268 +1342 +1389 +1398 +1377 +1332 +1241 +1098 +909 +694 +478 +275 +87 +-104 +-296 +-496 +-698 +-897 +-1083 +-1247 +-1397 +-1528 +-1630 +-1703 +-1736 +-1733 +-1695 +-1603 +-1459 +-1272 +-1058 +-839 +-622 +-418 +-203 +28 +264 +492 +711 +901 +1068 +1214 +1333 +1429 +1498 +1538 +1543 +1512 +1458 +1376 +1259 +1105 +918 +723 +532 +348 +166 +-23 +-215 +-400 +-568 +-710 +-823 +-914 +-984 +-1028 +-1052 +-1045 +-1003 +-932 +-848 +-759 +-667 +-572 +-465 +-355 +-247 +-147 +-49 +50 +156 +270 +380 +478 +558 +616 +646 +646 +623 +580 +519 +450 +371 +292 +208 +130 +55 +-13 +-69 +-113 +-150 +-178 +-212 +-240 +-260 +-270 +-263 +-255 +-243 +-241 +-247 +-253 +-253 +-252 +-246 +-238 +-227 +-205 +-170 +-129 +-85 +-41 +-8 +26 +61 +96 +125 +140 +145 +136 +128 +115 +104 +87 +61 +34 +8 +-2 +-1 +14 +34 +57 +89 +125 +163 +202 +233 +259 +282 +304 +330 +354 +380 +405 +427 +441 +439 +431 +402 +366 +320 +260 +187 +112 +37 +-45 +-138 +-233 +-331 +-433 +-536 +-635 +-715 +-781 +-831 +-863 +-883 +-886 +-862 +-808 +-715 +-609 +-506 +-408 +-316 +-217 +-104 +14 +144 +276 +412 +545 +676 +799 +914 +1019 +1105 +1170 +1204 +1201 +1149 +1059 +937 +796 +643 +482 +308 +133 +-43 +-213 +-386 +-561 +-728 +-884 +-1017 +-1128 +-1217 +-1292 +-1351 +-1390 +-1396 +-1363 +-1282 +-1163 +-1013 +-852 +-689 +-526 +-354 +-179 +7 +197 +386 +578 +759 +923 +1058 +1169 +1260 +1329 +1370 +1385 +1373 +1330 +1267 +1182 +1076 +944 +797 +636 +467 +297 +126 +-46 +-217 +-391 +-564 +-723 +-856 +-962 +-1050 +-1126 +-1196 +-1246 +-1277 +-1271 +-1237 +-1190 +-1136 +-1070 +-981 +-867 +-731 +-580 +-421 +-256 +-81 +104 +293 +473 +636 +764 +859 +930 +979 +1004 +1006 +980 +935 +888 +839 +790 +730 +672 +615 +562 +512 +464 +407 +346 +278 +206 +133 +65 +7 +-56 +-126 +-197 +-268 +-326 +-361 +-385 +-398 +-408 +-409 +-400 +-382 +-360 +-341 +-330 +-332 +-337 +-340 +-337 +-337 +-348 +-367 +-390 +-408 +-422 +-433 +-446 +-466 +-482 +-492 +-492 +-477 +-457 +-434 +-407 +-372 +-331 +-274 +-206 +-138 +-58 +29 +130 +238 +350 +469 +588 +710 +832 +943 +1049 +1146 +1237 +1309 +1359 +1378 +1366 +1319 +1224 +1079 +890 +685 +474 +276 +86 +-103 +-287 +-472 +-663 +-854 +-1042 +-1207 +-1349 +-1466 +-1561 +-1631 +-1676 +-1681 +-1652 +-1569 +-1432 +-1261 +-1071 +-868 +-667 +-462 +-245 +-19 +205 +417 +628 +813 +987 +1132 +1251 +1343 +1413 +1459 +1479 +1465 +1419 +1348 +1249 +1118 +962 +780 +591 +406 +220 +40 +-137 +-308 +-474 +-623 +-744 +-840 +-914 +-967 +-1002 +-1017 +-994 +-935 +-856 +-770 +-686 +-608 +-521 +-423 +-321 +-217 +-120 +-22 +73 +176 +286 +393 +486 +549 +582 +589 +582 +560 +524 +475 +409 +336 +265 +197 +134 +70 +10 +-49 +-97 +-136 +-169 +-204 +-238 +-260 +-267 +-260 +-248 +-240 +-247 +-258 +-271 +-283 +-283 +-276 +-261 +-242 +-217 +-181 +-137 +-87 +-42 +-5 +32 +69 +101 +130 +147 +152 +144 +130 +119 +104 +89 +71 +50 +34 +27 +34 +50 +72 +100 +132 +176 +217 +258 +291 +310 +326 +342 +362 +381 +403 +417 +413 +402 +387 +373 +349 +311 +252 +178 +100 +25 +-54 +-143 +-241 +-341 +-440 +-537 +-627 +-714 +-791 +-852 +-891 +-909 +-910 +-883 +-826 +-737 +-631 +-525 +-418 +-310 +-195 +-68 +67 +211 +355 +493 +628 +759 +883 +996 +1095 +1174 +1236 +1265 +1245 +1176 +1062 +918 +762 +599 +430 +258 +82 +-103 +-286 +-464 +-637 +-805 +-959 +-1101 +-1220 +-1310 +-1371 +-1407 +-1422 +-1408 +-1357 +-1252 +-1100 +-925 +-753 +-589 +-430 +-275 +-100 +93 +287 +488 +674 +843 +990 +1115 +1222 +1302 +1359 +1387 +1386 +1356 +1308 +1238 +1135 +1005 +854 +692 +529 +368 +196 +19 +-157 +-327 +-487 +-634 +-766 +-885 +-983 +-1059 +-1118 +-1166 +-1199 +-1210 +-1201 +-1176 +-1132 +-1070 +-987 +-882 +-772 +-641 +-497 +-345 +-176 +-3 +175 +350 +518 +666 +778 +863 +915 +945 +955 +944 +917 +872 +818 +764 +714 +669 +628 +582 +536 +495 +442 +381 +317 +248 +180 +111 +47 +-11 +-74 +-139 +-211 +-278 +-337 +-378 +-401 +-414 +-408 +-397 +-385 +-368 +-350 +-333 +-316 +-309 +-305 +-302 +-305 +-306 +-312 +-318 +-331 +-344 +-355 +-366 +-385 +-403 +-423 +-441 +-450 +-448 +-439 +-430 +-414 +-388 +-354 +-304 +-244 +-180 +-108 +-27 +68 +178 +291 +414 +537 +661 +792 +918 +1035 +1140 +1229 +1304 +1356 +1386 +1384 +1337 +1243 +1088 +900 +698 +498 +303 +108 +-89 +-278 +-465 +-653 +-842 +-1030 +-1206 +-1358 +-1485 +-1579 +-1648 +-1692 +-1703 +-1669 +-1581 +-1438 +-1254 +-1059 +-853 +-651 +-449 +-235 +-3 +229 +447 +652 +846 +1021 +1177 +1297 +1382 +1439 +1470 +1482 +1466 +1424 +1345 +1233 +1082 +910 +728 +545 +361 +175 +-18 +-200 +-368 +-522 +-661 +-790 +-894 +-969 +-1011 +-1026 +-1026 +-992 +-935 +-857 +-765 +-663 +-565 +-472 +-373 +-278 +-185 +-92 +4 +103 +206 +312 +412 +506 +577 +609 +613 +596 +561 +519 +464 +394 +321 +241 +163 +92 +27 +-26 +-80 +-130 +-172 +-207 +-228 +-253 +-268 +-277 +-279 +-276 +-269 +-261 +-260 +-262 +-266 +-265 +-250 +-224 +-191 +-154 +-121 +-82 +-45 +1 +45 +86 +116 +139 +159 +173 +185 +177 +160 +131 +102 +76 +55 +34 +18 +10 +11 +23 +48 +76 +106 +142 +168 +198 +225 +253 +275 +289 +305 +321 +347 +373 +395 +401 +394 +371 +338 +298 +244 +180 +105 +35 +-35 +-110 +-184 +-269 +-363 +-455 +-546 +-634 +-706 +-763 +-800 +-821 +-825 +-807 +-760 +-679 +-588 +-493 +-397 +-306 +-213 +-105 +6 +124 +250 +379 +509 +630 +746 +858 +957 +1044 +1107 +1147 +1150 +1107 +1026 +911 +771 +616 +456 +290 +130 +-38 +-207 +-385 +-554 +-714 +-854 +-984 +-1101 +-1198 +-1277 +-1326 +-1346 +-1338 +-1295 +-1218 +-1096 +-942 +-779 +-616 +-465 +-309 +-144 +42 +236 +429 +614 +782 +927 +1051 +1158 +1250 +1315 +1346 +1339 +1310 +1264 +1199 +1107 +982 +832 +671 +516 +363 +207 +46 +-127 +-303 +-465 +-610 +-737 +-847 +-947 +-1033 +-1100 +-1149 +-1169 +-1159 +-1145 +-1114 +-1076 +-1011 +-921 +-818 +-707 +-589 +-462 +-315 +-149 +38 +222 +394 +555 +687 +796 +879 +934 +955 +940 +908 +858 +803 +744 +679 +621 +565 +517 +472 +434 +391 +344 +292 +236 +187 +132 +85 +38 +-10 +-58 +-111 +-164 +-208 +-248 +-278 +-296 +-306 +-309 +-301 +-285 +-274 +-263 +-254 +-245 +-238 +-245 +-259 +-280 +-303 +-319 +-336 +-360 +-387 +-420 +-445 +-466 +-485 +-496 +-508 +-511 +-512 +-501 +-483 +-455 +-429 +-394 +-346 +-285 +-211 +-130 +-36 +56 +162 +278 +401 +526 +653 +780 +898 +1012 +1122 +1215 +1292 +1350 +1378 +1376 +1338 +1252 +1106 +911 +704 +496 +303 +118 +-74 +-265 +-456 +-636 +-816 +-996 +-1165 +-1326 +-1464 +-1574 +-1649 +-1683 +-1686 +-1654 +-1577 +-1444 +-1265 +-1069 +-862 +-660 +-469 +-264 +-43 +191 +414 +619 +803 +974 +1124 +1259 +1363 +1427 +1459 +1460 +1441 +1405 +1341 +1231 +1083 +905 +719 +536 +357 +172 +-19 +-208 +-378 +-526 +-659 +-776 +-884 +-969 +-1024 +-1047 +-1039 +-997 +-927 +-844 +-748 +-638 +-531 +-421 +-310 +-219 +-129 +-34 +70 +181 +289 +393 +486 +567 +635 +675 +682 +648 +590 +522 +445 +367 +285 +196 +105 +26 +-43 +-97 +-149 +-199 +-244 +-284 +-314 +-320 +-314 +-304 +-300 +-291 +-272 +-253 +-229 +-213 +-204 +-194 +-180 +-154 +-116 +-77 +-43 +-9 +30 +78 +129 +171 +203 +211 +208 +206 +199 +187 +160 +118 +66 +26 +-8 +-28 +-43 +-54 +-52 +-43 +-20 +18 +58 +93 +126 +158 +190 +232 +280 +315 +339 +363 +393 +437 +472 +490 +481 +453 +418 +384 +334 +265 +177 +88 +2 +-91 +-186 +-284 +-394 +-501 +-607 +-700 +-775 +-836 +-876 +-903 +-914 +-897 +-842 +-754 +-644 +-540 +-438 +-337 +-228 +-109 +16 +150 +289 +429 +565 +691 +810 +923 +1028 +1111 +1181 +1219 +1217 +1157 +1050 +915 +758 +597 +430 +258 +86 +-88 +-273 +-451 +-628 +-791 +-933 +-1060 +-1178 +-1268 +-1337 +-1386 +-1400 +-1384 +-1337 +-1241 +-1098 +-943 +-771 +-605 +-449 +-293 +-119 +60 +249 +446 +649 +831 +984 +1105 +1201 +1289 +1350 +1380 +1375 +1341 +1291 +1219 +1121 +993 +838 +674 +512 +357 +198 +36 +-135 +-314 +-488 +-645 +-782 +-890 +-982 +-1061 +-1133 +-1194 +-1229 +-1232 +-1215 +-1186 +-1137 +-1077 +-989 +-874 +-758 +-621 +-485 +-341 +-180 +5 +205 +393 +569 +700 +798 +874 +935 +972 +981 +953 +898 +847 +804 +755 +705 +654 +589 +527 +475 +436 +396 +337 +265 +192 +117 +56 +5 +-39 +-85 +-140 +-199 +-250 +-288 +-316 +-336 +-349 +-352 +-341 +-328 +-314 +-305 +-298 +-287 +-278 +-269 +-265 +-269 +-285 +-305 +-326 +-346 +-370 +-398 +-425 +-449 +-465 +-472 +-476 +-479 +-477 +-474 +-464 +-432 +-396 +-357 +-300 +-246 +-179 +-98 +-6 +100 +196 +314 +436 +560 +687 +817 +937 +1036 +1134 +1229 +1311 +1371 +1391 +1374 +1330 +1244 +1098 +907 +699 +485 +300 +109 +-77 +-267 +-456 +-640 +-842 +-1024 +-1188 +-1332 +-1456 +-1565 +-1636 +-1664 +-1663 +-1626 +-1548 +-1415 +-1240 +-1044 +-831 +-617 +-430 +-230 +-1 +221 +443 +657 +834 +991 +1130 +1253 +1343 +1414 +1463 +1465 +1443 +1396 +1333 +1238 +1098 +925 +727 +533 +354 +179 +-11 +-193 +-362 +-519 +-649 +-762 +-863 +-936 +-991 +-1027 +-1018 +-982 +-910 +-827 +-743 +-656 +-561 +-455 +-343 +-246 +-168 +-80 +10 +121 +236 +341 +446 +520 +578 +617 +626 +616 +580 +520 +460 +383 +307 +240 +166 +101 +25 +-44 +-109 +-156 +-189 +-226 +-260 +-291 +-299 +-289 +-277 +-265 +-263 +-260 +-267 +-264 +-261 +-252 +-241 +-229 +-205 +-172 +-132 +-96 +-52 +-16 +16 +41 +85 +118 +133 +148 +152 +146 +134 +101 +70 +36 +11 +-12 +-31 +-34 +-21 +12 +42 +88 +128 +171 +204 +226 +256 +283 +310 +343 +366 +377 +396 +422 +449 +456 +426 +391 +337 +286 +220 +135 +55 +-18 +-94 +-183 +-279 +-368 +-469 +-569 +-645 +-736 +-812 +-859 +-879 +-889 +-893 +-871 +-802 +-704 +-583 +-475 +-373 +-268 +-159 +-44 +72 +204 +341 +489 +616 +744 +856 +953 +1054 +1127 +1193 +1238 +1237 +1175 +1058 +910 +752 +593 +433 +263 +91 +-93 +-270 +-442 +-616 +-784 +-924 +-1064 +-1176 +-1261 +-1322 +-1374 +-1399 +-1387 +-1360 +-1257 +-1104 +-939 +-767 +-615 +-467 +-320 +-136 +51 +236 +433 +625 +804 +956 +1088 +1185 +1267 +1345 +1378 +1379 +1353 +1309 +1249 +1142 +1010 +847 +697 +547 +395 +240 +62 +-106 +-271 +-433 +-584 +-712 +-825 +-918 +-991 +-1067 +-1135 +-1173 +-1175 +-1157 +-1134 +-1098 +-1044 +-972 +-866 +-771 +-654 +-519 +-378 +-212 +-37 +149 +329 +492 +646 +740 +807 +860 +887 +900 +885 +847 +812 +756 +704 +678 +644 +608 +567 +524 +490 +441 +387 +345 +278 +211 +149 +98 +55 +-14 +-69 +-148 +-218 +-272 +-304 +-317 +-328 +-333 +-334 +-329 +-323 +-306 +-297 +-272 +-275 +-301 +-321 +-321 +-333 +-356 +-380 +-413 +-430 +-455 +-467 +-488 +-519 +-536 +-549 +-540 +-520 +-500 +-473 +-440 +-402 +-366 +-302 +-229 +-146 +-63 +39 +144 +253 +374 +482 +608 +734 +862 +980 +1088 +1190 +1269 +1342 +1404 +1418 +1393 +1344 +1233 +1057 +838 +615 +409 +198 +14 +-193 +-377 +-550 +-734 +-932 +-1118 +-1283 +-1416 +-1534 +-1628 +-1692 +-1719 +-1710 +-1658 +-1555 +-1399 +-1213 +-1026 +-794 +-586 +-385 +-179 +39 +265 +479 +699 +891 +1062 +1201 +1314 +1387 +1457 +1508 +1526 +1491 +1430 +1352 +1239 +1079 +903 +706 +513 +329 +134 +-63 +-246 +-414 +-576 +-723 +-849 +-951 +-1016 +-1054 +-1086 +-1096 +-1047 +-968 +-869 +-762 +-666 +-567 +-463 +-343 +-257 +-159 +-70 +23 +136 +258 +376 +478 +574 +635 +681 +680 +661 +623 +570 +505 +421 +332 +245 +172 +100 +26 +-41 +-97 +-154 +-192 +-230 +-279 +-300 +-314 +-321 +-310 +-288 +-276 +-273 +-281 +-284 +-295 +-288 +-268 +-244 +-204 +-163 +-124 +-72 +-16 +23 +74 +108 +148 +177 +202 +216 +199 +182 +155 +118 +95 +77 +53 +22 +-6 +-17 +-1 +27 +64 +92 +112 +150 +178 +198 +230 +248 +276 +305 +319 +340 +360 +413 +448 +453 +447 +424 +380 +332 +280 +214 +124 +57 +-9 +-90 +-185 +-296 +-397 +-487 +-583 +-676 +-752 +-822 +-858 +-874 +-883 +-875 +-829 +-731 +-618 +-514 +-423 +-329 +-226 +-106 +13 +125 +278 +414 +558 +682 +799 +921 +1015 +1120 +1195 +1257 +1283 +1239 +1142 +1001 +839 +677 +511 +326 +150 +-23 +-217 +-395 +-575 +-746 +-902 +-1035 +-1159 +-1263 +-1343 +-1403 +-1439 +-1445 +-1426 +-1350 +-1208 +-1026 +-851 +-699 +-554 +-415 +-215 +-17 +178 +375 +565 +757 +927 +1063 +1173 +1278 +1360 +1412 +1427 +1402 +1374 +1330 +1241 +1101 +934 +772 +619 +472 +311 +125 +-63 +-236 +-406 +-560 +-703 +-829 +-943 +-1044 +-1117 +-1190 +-1237 +-1271 +-1263 +-1240 +-1204 +-1153 +-1084 +-970 +-859 +-731 +-587 +-431 +-259 +-56 +144 +333 +508 +665 +780 +867 +930 +949 +945 +915 +878 +822 +754 +697 +632 +594 +561 +533 +496 +465 +424 +369 +330 +279 +231 +175 +123 +62 +-1 +-69 +-133 +-201 +-256 +-287 +-298 +-317 +-333 +-336 +-328 +-331 +-321 +-310 +-297 +-290 +-309 +-338 +-353 +-359 +-374 +-384 +-414 +-432 +-461 +-470 +-474 +-495 +-514 +-520 +-512 +-487 +-465 +-427 +-398 +-382 +-348 +-297 +-219 +-155 +-75 +18 +113 +208 +317 +434 +555 +682 +815 +936 +1053 +1144 +1233 +1317 +1378 +1411 +1391 +1353 +1257 +1095 +894 +673 +472 +280 +96 +-95 +-279 +-451 +-633 +-825 +-1008 +-1175 +-1321 +-1439 +-1544 +-1625 +-1673 +-1678 +-1644 +-1562 +-1416 +-1246 +-1055 +-848 +-644 +-452 +-234 +0 +222 +416 +633 +831 +1004 +1160 +1273 +1348 +1405 +1465 +1513 +1501 +1466 +1393 +1281 +1146 +972 +796 +613 +436 +237 +33 +-161 +-324 +-476 +-623 +-769 +-903 +-987 +-1033 +-1069 +-1070 +-1057 +-998 +-906 +-805 +-688 +-598 +-492 +-399 +-318 +-221 +-131 +-37 +65 +176 +290 +408 +519 +621 +671 +686 +669 +643 +608 +557 +488 +394 +300 +216 +147 +75 +11 +-65 +-122 +-170 +-207 +-236 +-266 +-288 +-311 +-313 +-315 +-302 +-299 +-306 +-327 +-350 +-352 +-338 +-300 +-258 +-209 +-184 +-138 +-78 +-22 +30 +74 +108 +138 +170 +187 +198 +192 +169 +127 +94 +65 +54 +27 +4 +-18 +-15 +1 +33 +70 +105 +134 +157 +187 +217 +242 +275 +300 +311 +348 +380 +438 +472 +483 +476 +442 +392 +347 +288 +212 +123 +44 +-20 +-104 +-205 +-309 +-419 +-527 +-618 +-713 +-820 +-899 +-939 +-932 +-930 +-917 +-855 +-747 +-615 +-504 +-402 +-306 +-206 +-97 +28 +162 +307 +463 +611 +735 +855 +968 +1077 +1164 +1223 +1264 +1248 +1196 +1095 +950 +787 +624 +440 +257 +102 +-50 +-240 +-427 +-611 +-780 +-910 +-1032 +-1145 +-1245 +-1318 +-1373 +-1390 +-1378 +-1349 +-1251 +-1108 +-945 +-777 +-615 +-457 +-318 +-152 +27 +209 +403 +609 +792 +933 +1046 +1143 +1237 +1320 +1359 +1348 +1319 +1283 +1221 +1142 +1018 +863 +714 +563 +421 +269 +107 +-61 +-238 +-403 +-547 +-658 +-768 +-868 +-963 +-1046 +-1107 +-1145 +-1163 +-1164 +-1166 +-1146 +-1115 +-1045 +-940 +-830 +-709 +-592 +-441 +-293 +-95 +105 +290 +459 +593 +713 +805 +877 +916 +918 +899 +866 +846 +810 +754 +724 +674 +643 +616 +580 +550 +486 +423 +349 +270 +202 +135 +69 +0 +-69 +-146 +-212 +-278 +-327 +-373 +-404 +-419 +-406 +-398 +-384 +-369 +-334 +-310 +-290 +-275 +-268 +-260 +-263 +-267 +-280 +-284 +-306 +-322 +-359 +-379 +-413 +-436 +-444 +-462 +-480 +-479 +-472 +-454 +-425 +-404 +-371 +-319 +-257 +-190 +-120 +-29 +62 +149 +268 +380 +514 +644 +775 +911 +998 +1104 +1194 +1279 +1366 +1390 +1381 +1350 +1268 +1091 +886 +665 +457 +278 +93 +-103 +-283 +-452 +-628 +-821 +-1014 +-1175 +-1323 +-1451 +-1549 +-1627 +-1665 +-1671 +-1652 +-1575 +-1413 +-1231 +-1026 +-813 +-628 +-454 +-254 +-20 +192 +406 +614 +809 +1000 +1152 +1273 +1351 +1410 +1467 +1483 +1479 +1456 +1398 +1286 +1127 +933 +745 +567 +398 +212 +-3 +-200 +-358 +-502 +-643 +-785 +-912 +-1006 +-1042 +-1055 +-1065 +-1047 +-988 +-911 +-822 +-703 +-602 +-483 +-383 +-300 +-221 +-134 +-28 +95 +198 +311 +408 +523 +624 +690 +708 +673 +631 +570 +516 +458 +384 +306 +214 +137 +56 +2 +-50 +-106 +-159 +-206 +-232 +-264 +-283 +-306 +-332 +-328 +-316 +-308 +-292 +-295 +-304 +-317 +-305 +-280 +-241 +-201 +-161 +-113 +-83 +-39 +-1 +47 +88 +128 +150 +159 +182 +170 +158 +117 +71 +56 +43 +25 +14 +-9 +-9 +5 +48 +86 +116 +163 +197 +221 +232 +256 +272 +296 +323 +330 +358 +389 +428 +458 +448 +424 +379 +332 +279 +216 +125 +44 +-30 +-108 +-196 +-294 +-387 +-470 +-553 +-645 +-726 +-798 +-836 +-859 +-857 +-860 +-820 +-739 +-633 +-521 +-422 +-332 +-235 +-123 +-10 +97 +236 +381 +518 +661 +772 +895 +998 +1098 +1184 +1229 +1243 +1204 +1121 +995 +833 +664 +492 +329 +152 +-3 +-172 +-357 +-542 +-740 +-884 +-994 +-1120 +-1210 +-1302 +-1367 +-1392 +-1402 +-1358 +-1275 +-1137 +-968 +-803 +-642 +-478 +-327 +-145 +28 +199 +397 +610 +809 +972 +1091 +1174 +1266 +1350 +1416 +1422 +1388 +1318 +1246 +1130 +1004 +847 +680 +510 +348 +188 +17 +-143 +-318 +-498 +-661 +-788 +-891 +-983 +-1064 +-1126 +-1183 +-1221 +-1212 +-1178 +-1133 +-1098 +-1049 +-969 +-850 +-723 +-592 +-449 +-304 +-139 +58 +262 +440 +620 +750 +840 +903 +955 +962 +950 +907 +841 +786 +718 +671 +617 +569 +518 +471 +427 +387 +347 +289 +220 +151 +79 +23 +-28 +-58 +-106 +-168 +-235 +-284 +-308 +-331 +-346 +-352 +-340 +-322 +-292 +-261 +-238 +-224 +-201 +-183 +-185 +-180 +-179 +-206 +-229 +-258 +-290 +-313 +-345 +-370 +-396 +-426 +-452 +-478 +-492 +-499 +-503 +-495 +-485 +-457 +-438 +-387 +-322 +-265 +-169 +-79 +16 +115 +226 +352 +487 +629 +773 +892 +1005 +1113 +1218 +1321 +1397 +1439 +1428 +1388 +1292 +1134 +934 +711 +506 +322 +145 +-46 +-229 +-405 +-598 +-811 +-1009 +-1171 +-1323 +-1441 +-1554 +-1634 +-1672 +-1678 +-1658 +-1572 +-1419 +-1244 +-1034 +-824 +-631 +-445 +-253 +-28 +201 +414 +658 +844 +1025 +1183 +1288 +1372 +1449 +1518 +1534 +1506 +1466 +1413 +1297 +1132 +929 +739 +545 +375 +177 +-32 +-219 +610 +546 +466 +379 +310 +221 +128 +42 +-42 +-93 +-133 +-168 +-195 +-253 +-291 +-320 +-326 +-329 +-317 +-316 +-332 +-330 +-338 +-341 +-342 +-323 +-307 +-266 +-210 +-154 +-94 +-52 +-12 +24 +80 +141 +184 +218 +224 +219 +199 +181 +161 +134 +100 +50 +6 +-19 +-18 +-7 +6 +29 +41 +78 +126 +156 +182 +182 +199 +221 +258 +296 +321 +349 +392 +433 +450 +448 +432 +392 +337 +293 +221 +148 +79 +7 +-71 +-160 +-254 +-360 +-465 +-563 +-661 +-747 +-803 +-836 +-848 +-866 +-861 +-811 +-725 +-611 +-511 +-426 +-345 +-242 +-133 +-9 +105 +223 +373 +513 +655 +775 +891 +985 +1081 +1155 +1219 +1243 +1201 +1102 +964 +807 +649 +502 +324 +162 +-2 +-178 +-349 +-522 +-681 +-832 +-958 +-1075 +-1172 +-1238 +-1283 +-1315 +-1323 +-1309 +-1229 +-1091 +-918 +-756 +-618 +-483 +-347 +-181 +-3 +174 +346 +530 +703 +863 +989 +1076 +1153 +1225 +1270 +1284 +1264 +1217 +1160 +1073 +948 +808 +670 +541 +398 +238 +71 +-107 +-248 +-385 +-517 +-634 +-749 +-844 +-916 +-973 +-1033 +-1078 +-1117 +-1120 +-1106 +-1080 +-1042 +-980 +-899 +-802 +-672 +-531 +-367 +-208 +-28 +152 +322 +499 +651 +772 +833 +866 +871 +856 +848 +806 +757 +686 +624 +585 +552 +532 +495 +455 +414 +375 +325 +282 +215 +137 +76 +9 +-33 +-77 +-131 +-189 +-249 +-311 +-311 +-319 +-319 +-325 +-311 +-284 +-270 +-242 +-232 +-212 +-211 +-209 +-211 +-218 +-234 +-241 +-268 +-296 +-324 +-339 +-370 +-402 +-424 +-448 +-454 +-463 +-435 +-412 +-412 +-402 +-391 +-361 +-313 +-265 +-212 +-136 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b3_246_942.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b3_246_942.samples new file mode 100644 index 00000000..1beb6407 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b3_246_942.samples @@ -0,0 +1,4096 @@ +62 +31 +16 +-16 +-71 +-143 +-215 +-275 +-333 +-380 +-410 +-416 +-413 +-419 +-419 +-398 +-344 +-281 +-247 +-241 +-247 +-274 +-301 +-293 +-265 +-209 +-161 +-166 +-229 +-305 +-325 +-252 +-61 +235 +555 +855 +1079 +1216 +1307 +1347 +1352 +1276 +1043 +684 +282 +-75 +-310 +-448 +-510 +-532 +-552 +-600 +-616 +-565 +-443 +-270 +-77 +98 +212 +276 +257 +182 +102 +31 +-50 +-165 +-303 +-448 +-592 +-685 +-697 +-615 +-473 +-334 +-211 +-113 +-59 +-34 +28 +125 +214 +279 +308 +314 +323 +348 +389 +409 +394 +289 +108 +-112 +-295 +-376 +-338 +-199 +-34 +90 +135 +104 +61 +45 +66 +122 +176 +224 +238 +259 +313 +409 +525 +632 +701 +654 +503 +284 +67 +-70 +-126 +-97 +-4 +55 +4 +-107 +-214 +-288 +-346 +-413 +-543 +-714 +-954 +-1206 +-1351 +-1237 +-863 +-421 +-25 +212 +266 +273 +279 +310 +398 +493 +534 +473 +344 +163 +-8 +-112 +-155 +-160 +-132 +-92 +-70 +-30 +53 +179 +340 +482 +558 +558 +523 +501 +466 +419 +334 +185 +4 +-211 +-387 +-438 +-341 +-162 +38 +178 +214 +165 +82 +17 +-26 +-39 +-53 +-78 +-125 +-215 +-309 +-381 +-424 +-427 +-408 +-398 +-405 +-418 +-404 +-355 +-297 +-245 +-219 +-224 +-258 +-291 +-289 +-247 +-177 +-133 +-163 +-249 +-319 +-328 +-223 +13 +337 +684 +975 +1176 +1291 +1355 +1380 +1347 +1199 +906 +514 +105 +-217 +-408 +-520 +-561 +-568 +-593 +-619 +-623 +-552 +-404 +-201 +16 +190 +284 +291 +213 +106 +16 +-53 +-131 +-251 +-396 +-540 +-660 +-705 +-667 +-554 +-408 +-267 +-149 +-64 +-9 +28 +97 +164 +232 +291 +330 +355 +375 +397 +413 +412 +373 +250 +48 +-185 +-368 +-429 +-343 +-159 +32 +156 +180 +124 +50 +17 +47 +123 +199 +236 +246 +260 +309 +410 +546 +676 +726 +645 +445 +193 +-19 +-133 +-141 +-62 +37 +59 +-16 +-131 +-232 +-282 +-315 +-409 +-571 +-804 +-1084 +-1334 +-1394 +-1160 +-723 +-256 +107 +273 +297 +292 +306 +380 +482 +558 +543 +442 +278 +89 +-61 +-153 +-183 +-180 +-142 +-100 +-73 +-19 +81 +222 +386 +520 +590 +591 +565 +530 +483 +406 +297 +135 +-65 +-289 +-444 +-448 +-300 +-82 +105 +197 +181 +96 +30 +6 +16 +19 +-21 +-100 +-203 +-300 +-363 +-388 +-411 +-424 +-434 +-443 +-439 +-407 +-343 +-281 +-234 +-225 +-244 +-269 +-313 +-320 +-287 +-221 +-157 +-145 +-205 +-295 +-355 +-321 +-141 +152 +502 +830 +1079 +1224 +1311 +1372 +1415 +1377 +1168 +814 +373 +-48 +-333 +-480 +-538 +-549 +-568 +-616 +-668 +-648 +-545 +-351 +-121 +92 +236 +283 +248 +162 +72 +0 +-65 +-159 +-278 +-420 +-558 +-660 +-688 +-625 +-502 +-334 +-182 +-75 +-32 +-29 +-4 +70 +168 +252 +303 +313 +312 +334 +386 +450 +470 +404 +234 +-9 +-244 +-392 +-388 +-245 +-50 +105 +169 +123 +28 +-47 +-54 +5 +77 +142 +174 +182 +231 +328 +471 +618 +723 +729 +593 +371 +127 +-55 +-130 +-101 +0 +98 +95 +-7 +-151 +-258 +-315 +-359 +-443 +-616 +-885 +-1192 +-1405 +-1383 +-1066 +-594 +-129 +190 +295 +286 +268 +282 +365 +477 +549 +532 +419 +237 +35 +-117 +-194 +-198 +-160 +-109 +-75 +-51 +8 +117 +278 +450 +567 +591 +552 +510 +477 +452 +394 +278 +94 +-128 +-333 +-426 +-370 +-189 +23 +169 +211 +156 +65 +-6 +-43 +-56 +-76 +-118 +-166 +-231 +-300 +-367 +-421 +-449 +-450 +-433 +-422 +-412 +-390 +-339 +-277 +-214 +-177 +-173 +-204 +-242 +-255 +-233 +-186 +-148 +-159 +-222 +-297 +-333 +-259 +-53 +265 +616 +926 +1146 +1271 +1337 +1371 +1371 +1266 +1007 +631 +227 +-117 +-337 +-462 +-529 +-576 +-631 +-681 +-694 +-636 +-500 +-301 +-90 +107 +243 +302 +276 +194 +106 +29 +-55 +-171 +-315 +-482 +-624 +-701 +-679 +-576 +-426 +-279 +-156 +-76 +-34 +-1 +60 +146 +226 +284 +322 +346 +370 +396 +423 +428 +379 +261 +71 +-147 +-330 +-411 +-348 +-179 +15 +143 +161 +96 +6 +-42 +-27 +47 +123 +169 +188 +207 +264 +374 +521 +664 +747 +713 +545 +305 +64 +-95 +-138 +-88 +17 +82 +46 +-73 +-199 +-283 +-321 +-383 +-519 +-742 +-1038 +-1321 +-1449 +-1289 +-878 +-390 +24 +248 +286 +261 +259 +316 +419 +520 +544 +480 +328 +139 +-29 +-132 +-170 +-170 +-142 +-108 +-88 +-54 +29 +155 +310 +457 +540 +561 +557 +540 +509 +440 +332 +170 +-30 +-235 +-391 +-431 +-325 +-125 +87 +218 +234 +151 +44 +-30 +-51 +-46 +-59 +-95 +-161 +-238 +-301 +-343 +-372 +-382 +-385 +-397 +-418 +-419 +-387 +-331 +-273 +-236 +-226 +-248 +-274 +-279 +-252 +-208 +-153 +-134 +-175 +-249 +-320 +-320 +-197 +62 +389 +711 +972 +1141 +1237 +1292 +1320 +1291 +1152 +869 +504 +136 +-156 +-337 +-435 +-481 +-505 +-547 +-593 +-596 +-535 +-400 +-213 +-13 +149 +235 +243 +191 +117 +59 +4 +-73 +-193 +-344 +-496 +-612 +-654 +-617 +-523 +-404 +-276 +-164 +-79 +-38 +-9 +40 +117 +197 +266 +311 +347 +369 +387 +409 +404 +351 +225 +28 +-187 +-345 +-378 +-273 +-83 +105 +206 +202 +126 +38 +0 +18 +73 +131 +172 +193 +230 +300 +418 +568 +707 +762 +674 +465 +192 +-49 +-181 +-198 +-114 +-7 +24 +-37 +-149 +-240 +-301 +-350 +-433 +-588 +-826 +-1110 +-1333 +-1369 +-1127 +-698 +-238 +115 +268 +280 +250 +242 +296 +397 +484 +510 +451 +321 +145 +-6 +-88 +-115 +-104 +-67 +-42 +-44 +-23 +41 +166 +331 +461 +525 +520 +480 +435 +388 +338 +244 +93 +-99 +-285 +-386 +-343 +-172 +36 +192 +240 +186 +96 +21 +-19 +-37 +-71 +-125 +-184 +-236 +-285 +-322 +-363 +-401 +-422 +-420 +-410 +-402 +-388 +-360 +-310 +-258 +-219 +-211 +-233 +-269 +-282 +-262 +-216 +-164 +-158 +-205 +-278 +-323 +-273 +-85 +211 +549 +852 +1075 +1204 +1271 +1306 +1310 +1232 +1016 +667 +268 +-84 +-317 +-426 +-467 +-470 +-497 +-535 +-561 +-532 +-422 +-257 +-68 +90 +196 +236 +210 +140 +68 +4 +-70 +-172 +-294 +-430 +-558 +-638 +-631 +-549 +-424 +-287 +-175 +-102 +-78 +-66 +-37 +34 +123 +202 +252 +280 +306 +351 +420 +476 +471 +383 +194 +-40 +-256 +-365 +-338 +-205 +-14 +134 +188 +140 +60 +7 +-1 +42 +106 +156 +179 +208 +272 +392 +541 +684 +767 +719 +546 +293 +47 +-127 +-188 +-150 +-51 +11 +-15 +-120 +-246 +-325 +-363 +-403 +-506 +-699 +-977 +-1255 +-1400 +-1274 +-882 +-395 +25 +269 +328 +309 +285 +309 +393 +488 +525 +475 +348 +169 +-2 +-114 +-148 +-140 +-103 +-74 +-60 +-34 +37 +158 +313 +453 +520 +516 +484 +459 +429 +371 +272 +131 +-57 +-247 +-391 +-420 +-309 +-121 +74 +200 +223 +162 +70 +-8 +-53 +-79 +-105 +-144 +-194 +-240 +-279 +-304 +-319 +-332 +-341 +-357 +-383 +-394 +-377 +-328 +-279 +-252 +-250 +-279 +-309 +-317 +-283 +-219 +-159 +-132 +-178 +-261 +-332 +-341 +-223 +21 +349 +677 +951 +1137 +1247 +1312 +1337 +1299 +1134 +833 +448 +68 +-215 +-369 +-442 +-473 +-503 +-554 +-610 +-616 +-541 +-389 +-179 +41 +216 +310 +317 +248 +157 +81 +14 +-70 +-192 +-350 +-514 +-628 +-651 +-585 +-464 +-337 +-230 +-153 +-102 +-72 +-46 +3 +59 +118 +173 +233 +283 +337 +393 +444 +470 +436 +307 +105 +-116 +-277 +-313 +-212 +-32 +135 +215 +177 +72 +-23 +-61 +-38 +23 +84 +133 +159 +216 +321 +473 +645 +787 +833 +725 +483 +196 +-56 +-189 +-196 +-114 +-16 +-10 +-94 +-213 +-297 +-324 +-343 +-414 +-575 +-840 +-1158 +-1397 +-1411 +-1126 +-654 +-176 +172 +307 +307 +288 +306 +387 +504 +577 +564 +463 +306 +131 +-17 +-99 +-136 +-142 +-130 +-121 +-106 +-63 +25 +159 +308 +426 +486 +495 +492 +471 +434 +370 +270 +120 +-82 +-286 +-407 +-378 +-211 +6 +173 +219 +144 +22 +-72 +-110 +-104 +-90 +-102 +-139 +-199 +-248 +-270 +-284 +-301 +-313 +-326 +-345 +-359 +-361 +-343 +-312 +-285 +-283 +-299 +-331 +-353 +-336 +-276 +-203 +-139 +-133 +-189 +-268 +-308 +-256 +-79 +197 +517 +818 +1043 +1180 +1258 +1303 +1295 +1215 +1008 +676 +282 +-75 +-321 +-443 +-484 +-496 +-514 +-564 +-598 +-573 +-463 +-276 +-61 +130 +247 +288 +259 +197 +140 +99 +40 +-72 +-232 +-406 +-555 +-647 +-655 +-589 +-488 +-368 +-263 +-186 +-138 +-107 +-65 +3 +89 +181 +250 +301 +353 +413 +485 +541 +541 +447 +245 +-15 +-243 +-361 +-323 +-165 +22 +155 +174 +100 +-6 +-76 +-77 +-26 +50 +109 +145 +190 +278 +423 +606 +774 +868 +829 +639 +355 +70 +-130 +-208 +-176 +-75 +-3 +-29 +-130 +-250 +-324 +-353 +-399 +-510 +-711 +-1001 +-1293 +-1443 +-1309 +-902 +-397 +53 +306 +357 +325 +296 +321 +418 +521 +565 +518 +388 +209 +31 +-91 +-144 +-153 +-136 +-114 +-115 +-99 +-42 +76 +236 +388 +475 +493 +481 +474 +473 +456 +401 +271 +68 +-177 +-376 +-443 +-341 +-145 +49 +166 +164 +77 +-28 +-103 +-136 +-147 +-149 +-160 +-190 +-229 +-268 +-299 +-317 +-312 +-296 +-280 +-289 +-313 +-328 +-323 +-305 +-291 +-285 +-296 +-327 +-345 +-315 +-253 +-170 +-110 +-119 +-200 +-297 +-340 +-265 +-41 +282 +626 +914 +1103 +1204 +1266 +1300 +1280 +1157 +880 +498 +103 +-203 +-373 +-456 +-492 +-516 +-546 +-577 +-568 +-493 +-350 +-171 +23 +186 +288 +306 +256 +173 +98 +28 +-56 +-171 +-326 +-484 +-615 +-669 +-635 +-535 +-415 +-291 +-192 +-126 +-93 +-72 +-31 +32 +105 +179 +247 +309 +362 +418 +470 +495 +470 +357 +165 +-66 +-242 +-294 +-208 +-43 +115 +195 +165 +65 +-37 +-77 +-50 +21 +90 +143 +172 +220 +314 +454 +625 +767 +825 +748 +542 +268 +15 +-152 +-205 +-149 +-56 +-27 +-91 +-198 +-290 +-336 +-353 +-415 +-570 +-808 +-1104 +-1344 +-1382 +-1136 +-685 +-212 +151 +315 +325 +294 +285 +328 +423 +502 +510 +435 +300 +146 +13 +-61 +-96 +-91 +-75 +-61 +-45 +1 +82 +187 +312 +406 +456 +478 +492 +492 +461 +378 +250 +77 +-123 +-314 +-433 +-418 +-265 +-51 +130 +209 +163 +57 +-42 +-90 +-95 +-85 +-92 +-126 +-178 +-229 +-253 +-267 +-278 +-283 +-293 +-328 +-367 +-385 +-372 +-341 +-318 +-313 +-333 +-354 +-365 +-342 +-287 +-209 +-145 +-135 +-188 +-263 +-313 +-270 +-100 +177 +506 +807 +1037 +1178 +1253 +1287 +1282 +1203 +996 +655 +265 +-92 +-336 +-454 +-494 +-496 +-506 +-539 +-566 +-546 +-444 +-272 +-57 +137 +270 +316 +281 +204 +121 +67 +1 +-102 +-254 +-420 +-562 +-646 +-652 +-595 +-502 +-397 +-288 +-193 +-129 +-92 +-61 +-9 +64 +149 +235 +301 +351 +405 +464 +519 +537 +460 +279 +27 +-214 +-354 +-332 +-177 +8 +134 +151 +79 +-21 +-79 +-69 +-4 +72 +126 +158 +191 +265 +397 +565 +726 +830 +818 +662 +401 +125 +-83 +-177 +-165 +-78 +-4 +-27 +-138 +-261 +-340 +-363 +-394 +-495 +-691 +-972 +-1252 +-1399 +-1279 +-894 +-400 +38 +307 +379 +360 +341 +366 +436 +517 +545 +486 +352 +177 +7 +-107 +-160 +-175 +-155 +-120 +-89 +-53 +17 +125 +267 +408 +501 +535 +528 +512 +486 +444 +364 +225 +26 +-209 +-405 +-477 +-384 +-185 +20 +144 +144 +58 +-38 +-91 +-90 +-69 +-64 +-85 +-123 +-165 +-200 +-219 +-233 +-247 +-258 +-270 +-292 +-309 +-314 +-310 +-307 +-315 +-333 +-369 +-391 +-396 +-367 +-304 +-220 +-157 +-167 +-237 +-314 +-331 +-226 +17 +347 +695 +980 +1162 +1258 +1299 +1310 +1278 +1144 +858 +470 +63 +-267 +-461 +-541 +-553 +-552 +-572 +-600 +-592 +-508 +-348 +-135 +79 +242 +335 +352 +304 +214 +130 +55 +-41 +-170 +-324 +-481 +-611 +-680 +-670 +-584 +-456 +-315 +-205 +-143 +-129 +-117 +-69 +18 +126 +221 +294 +342 +383 +438 +496 +532 +504 +371 +152 +-89 +-270 +-324 +-242 +-74 +75 +135 +87 +-17 +-104 +-126 +-76 +16 +99 +157 +204 +262 +368 +512 +679 +809 +845 +737 +507 +230 +-8 +-139 +-164 +-99 +-21 +-22 +-111 +-240 +-347 +-398 +-415 +-476 +-617 +-844 +-1119 +-1324 +-1326 +-1043 +-581 +-108 +242 +386 +386 +349 +337 +388 +487 +552 +533 +422 +244 +56 +-84 +-143 +-159 +-152 +-132 +-127 +-116 +-63 +39 +186 +350 +476 +531 +537 +532 +523 +493 +437 +315 +129 +-110 +-340 +-476 +-464 +-316 +-111 +68 +140 +111 +16 +-77 +-128 +-133 +-102 +-79 +-75 +-92 +-126 +-161 +-191 +-214 +-229 +-239 +-270 +-314 +-341 +-340 +-322 +-304 +-302 +-321 +-360 +-390 +-390 +-349 +-278 +-207 +-174 +-207 +-279 +-333 +-299 +-132 +161 +511 +838 +1077 +1219 +1283 +1313 +1312 +1233 +1010 +645 +232 +-140 +-389 +-520 +-579 +-602 +-626 +-661 +-674 +-622 +-482 +-269 +-22 +212 +378 +448 +418 +334 +237 +156 +67 +-43 +-193 +-382 +-558 +-680 +-702 +-639 +-539 +-427 +-325 +-240 +-196 +-167 +-131 +-70 +17 +107 +202 +288 +370 +447 +518 +565 +569 +492 +316 +78 +-156 +-296 +-299 +-175 +0 +133 +151 +66 +-45 +-120 +-123 +-67 +21 +88 +131 +181 +270 +415 +586 +761 +875 +859 +696 +438 +152 +-69 +-172 +-172 +-100 +-46 +-81 +-190 +-301 +-370 +-396 +-427 +-524 +-708 +-970 +-1229 +-1359 +-1224 +-832 +-343 +97 +358 +417 +392 +363 +381 +463 +547 +579 +515 +372 +189 +29 +-73 +-119 +-144 +-156 +-159 +-163 +-138 +-70 +44 +186 +325 +420 +469 +494 +509 +498 +463 +391 +264 +81 +-135 +-335 +-411 +-335 +-149 +54 +182 +179 +71 +-53 +-141 +-166 +-137 +-105 +-104 +-133 +-172 +-211 +-232 +-232 +-226 +-220 +-229 +-248 +-272 +-281 +-274 +-263 +-254 +-266 +-301 +-344 +-370 +-357 +-303 +-234 +-181 +-199 +-274 +-353 +-375 +-274 +-31 +308 +655 +943 +1132 +1233 +1284 +1308 +1288 +1160 +885 +505 +94 +-250 +-471 +-575 +-606 +-606 +-615 +-637 +-617 +-537 +-370 +-142 +92 +279 +380 +398 +350 +277 +211 +144 +40 +-102 +-268 +-437 +-577 +-663 +-673 +-613 +-522 +-411 +-307 +-241 +-217 +-200 +-152 +-57 +66 +184 +286 +360 +428 +495 +569 +613 +586 +449 +217 +-42 +-247 +-317 +-251 +-107 +29 +92 +51 +-42 +-114 +-130 +-81 +-4 +74 +126 +171 +249 +367 +528 +696 +829 +868 +761 +539 +259 +9 +-141 +-178 +-124 +-57 +-56 +-148 +-274 +-376 +-426 +-451 +-519 +-662 +-880 +-1132 +-1308 +-1282 +-982 +-524 +-62 +276 +414 +430 +412 +414 +465 +536 +572 +532 +407 +236 +49 +-92 +-170 +-202 +-206 +-197 +-192 +-178 +-127 +-36 +113 +282 +418 +494 +527 +539 +550 +546 +511 +406 +228 +-23 +-276 +-434 +-429 +-282 +-90 +56 +87 +22 +-79 +-145 +-161 +-142 +-122 +-128 +-156 +-183 +-200 +-194 +-180 +-167 +-158 +-167 +-188 +-221 +-244 +-257 +-266 +-275 +-296 +-336 +-392 +-436 +-429 +-368 +-270 +-189 +-169 +-226 +-312 +-366 +-323 +-139 +162 +510 +825 +1053 +1183 +1258 +1301 +1314 +1245 +1014 +640 +208 +-175 +-422 +-543 +-584 +-586 +-594 +-617 +-615 +-552 +-414 +-220 +-7 +191 +321 +372 +352 +283 +208 +147 +77 +-33 +-186 +-368 +-535 +-659 +-697 +-646 +-541 +-422 +-323 +-259 +-230 +-210 +-154 +-54 +52 +144 +214 +286 +363 +461 +554 +613 +599 +493 +303 +75 +-122 +-242 +-241 +-145 +-29 +49 +51 +-20 +-110 +-159 +-130 +-61 +34 +121 +183 +247 +339 +474 +626 +753 +818 +768 +595 +356 +120 +-46 +-119 +-95 +-37 +-21 +-88 +-212 +-326 +-392 +-427 +-477 +-588 +-766 +-1009 +-1236 +-1319 +-1144 +-730 +-253 +158 +379 +415 +393 +379 +410 +490 +566 +579 +485 +318 +120 +-43 +-136 +-174 +-189 +-195 +-192 +-194 +-151 +-44 +108 +268 +397 +465 +491 +517 +551 +566 +535 +428 +258 +34 +-202 +-384 +-442 +-351 +-182 +-5 +101 +93 +4 +-103 +-174 +-182 +-155 +-122 +-110 +-134 +-176 +-202 +-204 +-193 +-188 +-191 +-210 +-245 +-279 +-274 +-268 +-269 +-281 +-308 +-346 +-387 +-406 +-379 +-318 +-238 +-176 +-188 +-264 +-345 +-364 +-252 +6 +347 +694 +973 +1132 +1202 +1243 +1267 +1258 +1129 +838 +439 +25 +-297 +-478 +-557 +-582 +-591 +-624 +-662 +-661 +-569 +-379 +-141 +99 +281 +381 +381 +317 +239 +181 +119 +21 +-122 +-302 +-482 +-613 +-663 +-634 +-554 +-464 +-367 +-289 +-242 +-217 +-186 +-125 +-37 +68 +163 +254 +327 +394 +461 +524 +559 +528 +394 +175 +-63 +-245 +-297 +-202 +-48 +74 +111 +46 +-59 +-135 +-139 +-83 +3 +82 +131 +159 +222 +340 +507 +685 +836 +879 +777 +549 +274 +39 +-101 +-135 +-92 +-35 +-52 +-160 +-285 +-366 +-401 +-427 +-509 +-654 +-874 +-1126 +-1306 +-1273 +-948 +-478 +-18 +310 +428 +428 +413 +409 +460 +521 +551 +498 +377 +222 +55 +-69 +-136 +-161 +-168 +-149 +-124 +-106 +-62 +32 +179 +340 +457 +519 +546 +551 +535 +497 +435 +321 +152 +-82 +-318 +-463 +-441 +-273 +-66 +101 +145 +76 +-26 +-94 +-100 +-56 +-26 +-29 +-60 +-113 +-156 +-170 +-166 +-172 +-185 +-212 +-251 +-286 +-289 +-276 +-263 +-260 +-275 +-297 +-321 +-340 +-348 +-323 +-250 +-179 +-157 +-209 +-292 +-355 +-314 +-123 +177 +517 +812 +1036 +1142 +1188 +1214 +1213 +1176 +991 +655 +248 +-126 +-382 +-515 +-556 +-555 +-566 +-598 +-613 +-560 +-413 +-208 +25 +215 +340 +384 +365 +281 +196 +121 +34 +-91 +-236 +-392 +-557 +-669 +-700 +-650 +-561 +-442 +-321 +-230 +-187 +-170 +-132 +-55 +45 +145 +229 +293 +356 +427 +487 +524 +517 +420 +220 +-10 +-208 +-311 +-271 +-134 +11 +92 +87 +6 +-79 +-108 +-94 +-24 +49 +109 +141 +194 +292 +424 +584 +736 +827 +785 +607 +346 +95 +-74 +-155 +-156 +-100 +-69 +-144 +-266 +-374 +-424 +-432 +-486 +-615 +-779 +-995 +-1213 +-1292 +-1114 +-692 +-221 +175 +401 +432 +424 +410 +416 +469 +526 +520 +425 +252 +64 +-95 +-182 +-196 +-201 +-177 +-161 +-155 +-126 +-43 +100 +273 +425 +504 +534 +553 +581 +576 +536 +432 +258 +34 +-233 +-449 +-514 +-421 +-245 +-59 +51 +70 +2 +-87 +-142 +-151 +-103 +-67 +-40 +-45 +-88 +-129 +-144 +-149 +-164 +-158 +-180 +-237 +-285 +-303 +-305 +-324 +-325 +-326 +-349 +-357 +-363 +-351 +-299 +-212 +-141 +-161 +-238 +-325 +-356 +-239 +20 +342 +683 +978 +1154 +1250 +1281 +1290 +1283 +1173 +871 +444 +15 +-331 +-519 +-607 +-632 +-631 +-640 +-667 +-642 +-511 +-309 +-71 +159 +335 +434 +435 +369 +262 +183 +100 +-2 +-124 +-285 +-455 +-606 +-664 +-634 +-558 +-467 +-355 +-266 +-219 +-202 +-173 +-107 +-13 +69 +135 +207 +274 +351 +427 +498 +530 +489 +354 +155 +-45 +-183 +-215 +-138 +4 +111 +116 +18 +-88 +-159 +-152 +-90 +1 +79 +131 +179 +246 +363 +495 +652 +784 +816 +689 +471 +232 +16 +-112 +-149 +-102 +-46 +-76 +-201 +-322 +-384 +-395 +-418 +-505 +-654 +-853 +-1081 +-1262 +-1239 +-906 +-438 +-20 +278 +367 +373 +394 +405 +455 +512 +549 +498 +350 +171 +-18 +-127 +-155 +-186 +-200 +-197 +-187 +-171 +-109 +21 +173 +348 +465 +513 +545 +583 +589 +548 +474 +327 +125 +-121 +-380 +-516 +-488 +-339 +-141 +45 +105 +54 +-35 +-109 +-131 +-104 +-37 +-18 +-27 +-68 +-144 +-196 +-193 +-171 +-170 +-188 +-233 +-281 +-297 +-275 +-254 +-248 +-265 +-276 +-295 +-307 +-308 +-295 +-234 +-170 +-176 +-258 +-354 +-409 +-353 +-151 +157 +487 +802 +1043 +1190 +1246 +1267 +1263 +1215 +1023 +680 +269 +-138 +-413 +-556 +-610 +-605 +-607 +-624 +-648 +-588 +-419 +-191 +49 +262 +400 +453 +412 +318 +232 +162 +79 +-43 +-198 +-367 +-522 +-626 +-639 +-581 +-507 +-421 +-315 +-241 +-207 +-196 +-151 +-80 +5 +93 +172 +241 +305 +385 +458 +517 +536 +482 +321 +111 +-71 +-164 +-164 +-80 +38 +99 +56 +-59 +-149 +-169 +-118 +-32 +51 +103 +135 +192 +282 +413 +559 +704 +804 +776 +612 +384 +145 +-21 +-104 +-120 +-61 +-41 +-128 +-252 +-348 +-392 +-422 +-489 +-619 +-780 +-975 +-1183 +-1268 +-1086 +-646 +-196 +171 +351 +383 +403 +400 +425 +483 +540 +528 +423 +265 +78 +-87 +-170 +-194 +-207 +-197 +-173 +-164 +-117 +-30 +98 +267 +411 +480 +508 +536 +539 +512 +458 +364 +228 +25 +-229 +-450 +-497 +-383 +-195 +-10 +97 +86 +10 +-73 +-130 +-125 +-65 +-21 +-1 +-39 +-105 +-166 +-194 +-195 +-193 +-197 +-222 +-258 +-282 +-278 +-279 +-282 +-276 +-272 +-285 +-292 +-308 +-297 +-266 +-207 +-152 +-193 +-291 +-363 +-374 +-269 +-15 +312 +641 +905 +1079 +1179 +1223 +1249 +1252 +1161 +875 +476 +53 +-281 +-481 +-590 +-601 +-618 +-643 +-670 +-633 +-506 +-299 +-57 +173 +330 +406 +411 +344 +253 +164 +100 +-6 +-139 +-313 +-464 +-605 +-657 +-611 +-529 +-427 +-325 +-233 +-191 +-196 +-182 +-126 +-26 +72 +171 +255 +321 +382 +445 +518 +539 +493 +349 +145 +-59 +-193 +-211 +-128 +-7 +96 +94 +12 +-88 +-153 +-159 +-107 +-16 +59 +117 +168 +250 +366 +514 +659 +776 +810 +690 +479 +232 +10 +-113 +-151 +-98 +-35 +-73 +-192 +-325 +-405 +-425 +-472 +-576 +-694 +-876 +-1090 +-1240 +-1188 +-851 +-413 +9 +294 +389 +393 +393 +391 +442 +522 +558 +503 +361 +189 +-1 +-121 +-165 +-182 +-187 +-169 +-171 +-168 +-101 +14 +179 +343 +449 +494 +527 +550 +560 +518 +429 +292 +98 +-151 +-390 +-515 +-477 +-311 +-126 +35 +93 +63 +-7 +-90 +-122 +-106 +-57 +-32 +-31 +-70 +-142 +-187 +-207 +-198 +-182 +-193 +-239 +-285 +-299 +-296 +-286 +-261 +-256 +-264 +-294 +-311 +-304 +-277 +-226 +-173 +-180 +-268 +-358 +-406 +-353 +-141 +165 +480 +789 +1019 +1166 +1235 +1244 +1232 +1170 +970 +627 +225 +-156 +-398 +-546 +-615 +-605 +-598 +-610 +-617 +-534 +-365 +-149 +78 +281 +402 +440 +396 +296 +182 +80 +-9 +-129 +-267 +-424 +-563 +-647 +-648 +-584 +-491 +-379 +-276 +-211 +-190 +-185 +-150 +-81 +19 +118 +215 +296 +360 +413 +457 +489 +477 +406 +256 +79 +-71 +-140 +-118 +-33 +52 +76 +29 +-80 +-181 +-213 +-168 +-78 +15 +89 +144 +221 +337 +479 +623 +754 +831 +779 +602 +364 +133 +-43 +-140 +-147 +-89 +-67 +-140 +-270 +-366 +-419 +-459 +-546 +-671 +-817 +-1021 +-1212 +-1252 +-1021 +-595 +-141 +222 +391 +422 +434 +441 +457 +498 +535 +496 +388 +221 +30 +-107 +-173 +-192 +-206 +-202 +-187 +-165 +-114 +-12 +138 +303 +443 +534 +593 +637 +645 +600 +495 +345 +147 +-80 +-329 +-517 +-556 +-443 +-246 +-53 +55 +54 +-16 +-93 +-120 +-83 +-8 +45 +56 +12 +-67 +-118 +-123 +-117 +-106 +-136 +-220 +-298 +-338 +-321 +-301 +-290 +-296 +-313 +-334 +-346 +-330 +-291 +-246 +-200 +-188 +-239 +-327 +-395 +-378 +-214 +78 +421 +755 +1019 +1177 +1233 +1247 +1248 +1213 +1085 +803 +412 +-3 +-327 +-514 +-600 +-617 +-617 +-638 +-662 +-633 +-509 +-312 +-70 +161 +329 +418 +413 +352 +271 +209 +137 +35 +-107 +-294 +-475 +-602 +-648 +-613 +-538 +-448 +-349 +-278 +-237 +-230 +-200 +-123 +-12 +102 +207 +287 +353 +419 +473 +521 +532 +466 +304 +88 +-120 +-240 +-230 +-124 +-3 +63 +45 +-58 +-145 +-178 +-142 +-52 +31 +90 +123 +170 +262 +398 +566 +729 +833 +827 +685 +463 +224 +31 +-73 +-97 +-59 +-21 +-73 +-197 +-326 +-417 +-461 +-521 +-629 +-789 +-991 +-1193 +-1298 +-1175 +-815 +-360 +50 +307 +393 +407 +423 +455 +511 +576 +579 +493 +344 +161 +-6 +-117 +-161 +-186 +-205 +-197 +-197 +-177 +-110 +8 +175 +338 +449 +498 +514 +528 +523 +503 +433 +296 +97 +-155 +-384 +-499 +-447 +-283 +-88 +52 +84 +36 +-43 +-91 +-89 +-38 +11 +28 +10 +-41 +-96 +-134 +-153 +-169 +-191 +-231 +-287 +-338 +-348 +-340 +-327 +-318 +-320 +-324 +-335 +-338 +-321 +-276 +-214 +-169 +-185 +-254 +-335 +-368 +-277 +-49 +263 +603 +902 +1104 +1215 +1258 +1278 +1264 +1166 +912 +537 +119 +-258 +-502 +-629 +-666 +-663 +-666 +-679 +-644 +-530 +-342 +-106 +141 +336 +451 +478 +429 +349 +251 +162 +54 +-77 +-244 +-425 +-583 +-679 +-685 +-629 +-528 +-407 +-316 +-268 +-246 +-216 +-145 +-39 +73 +168 +246 +315 +389 +472 +545 +581 +540 +408 +223 +37 +-107 +-165 +-123 +-32 +31 +31 +-48 +-160 +-241 +-252 +-185 +-84 +25 +111 +178 +260 +377 +529 +698 +834 +882 +799 +601 +347 +110 +-51 +-118 +-104 +-64 +-77 +-180 +-317 +-441 +-510 +-544 +-603 +-712 +-886 +-1095 +-1255 +-1220 +-933 +-493 +-44 +288 +443 +476 +479 +490 +536 +598 +614 +542 +384 +175 +-31 +-174 +-230 +-240 +-234 +-220 +-217 +-213 +-158 +-42 +125 +304 +442 +519 +556 +588 +598 +577 +515 +379 +183 +-65 +-320 +-488 +-513 +-399 +-216 +-37 +53 +36 +-42 +-118 +-147 +-105 +-30 +24 +34 +-16 +-97 +-168 +-192 +-189 +-184 +-197 +-236 +-293 +-321 +-307 +-277 +-250 +-246 +-264 +-297 +-325 +-327 +-301 +-257 +-213 +-208 +-267 +-352 +-418 +-393 +-235 +62 +417 +752 +999 +1136 +1210 +1249 +1265 +1236 +1096 +805 +403 +-17 +-346 +-543 +-629 +-649 +-651 +-656 +-657 +-617 +-491 +-291 +-48 +191 +364 +437 +408 +323 +233 +158 +84 +-13 +-153 +-330 +-505 +-622 +-645 +-594 +-501 +-400 +-312 +-261 +-237 +-221 +-184 +-120 +-22 +89 +190 +277 +340 +405 +461 +502 +512 +466 +342 +163 +-15 +-136 +-148 +-70 +40 +94 +52 +-54 +-161 +-210 +-176 +-81 +19 +80 +118 +165 +256 +394 +566 +734 +844 +841 +699 +471 +212 +17 +-82 +-96 +-53 +-31 +-83 +-196 +-327 +-418 +-460 +-508 +-611 +-766 +-984 +-1196 +-1283 +-1137 +-759 +-305 +95 +332 +411 +419 +425 +461 +531 +585 +569 +464 +298 +111 +-50 +-145 +-184 +-193 +-191 +-183 +-177 +-143 +-57 +70 +233 +383 +492 +557 +582 +582 +551 +489 +386 +231 +25 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b4_493_883.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b4_493_883.samples new file mode 100644 index 00000000..9d1439c8 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b4_493_883.samples @@ -0,0 +1,4096 @@ +-311 +121 +511 +875 +1192 +1447 +1607 +1626 +1490 +1250 +968 +711 +537 +462 +413 +325 +158 +-103 +-426 +-789 +-1165 +-1529 +-1840 +-2059 +-2129 +-1988 +-1635 +-1168 +-692 +-291 +25 +334 +677 +1068 +1466 +1811 +2024 +2049 +1881 +1541 +1075 +551 +36 +-413 +-759 +-985 +-1090 +-1091 +-1005 +-849 +-653 +-449 +-272 +-158 +-121 +-153 +-220 +-302 +-357 +-364 +-309 +-174 +46 +350 +690 +1002 +1247 +1386 +1385 +1247 +985 +667 +378 +181 +83 +56 +37 +-43 +-214 +-475 +-791 +-1112 +-1399 +-1614 +-1728 +-1693 +-1484 +-1137 +-712 +-266 +148 +526 +870 +1181 +1443 +1616 +1649 +1521 +1277 +988 +726 +551 +470 +427 +337 +169 +-84 +-396 +-746 +-1115 +-1480 +-1812 +-2047 +-2135 +-2019 +-1683 +-1229 +-762 +-361 +-27 +293 +652 +1057 +1465 +1816 +2035 +2071 +1920 +1589 +1126 +610 +85 +-371 +-716 +-938 +-1037 +-1042 +-973 +-849 +-679 +-488 +-316 +-192 +-142 +-158 +-218 +-298 +-360 +-374 +-327 +-195 +12 +299 +626 +944 +1200 +1347 +1363 +1241 +986 +678 +406 +212 +125 +101 +76 +-5 +-176 +-438 +-760 +-1087 +-1392 +-1625 +-1747 +-1719 +-1509 +-1156 +-718 +-263 +162 +538 +876 +1181 +1430 +1585 +1600 +1466 +1217 +933 +682 +520 +456 +411 +314 +137 +-124 +-447 +-801 +-1174 +-1538 +-1847 +-2062 +-2113 +-1944 +-1571 +-1103 +-643 +-261 +49 +366 +720 +1118 +1519 +1848 +2031 +2033 +1854 +1500 +1031 +502 +-14 +-450 +-776 +-981 +-1070 +-1060 +-978 +-831 +-641 +-439 +-262 +-142 +-103 +-134 +-210 +-301 +-369 +-382 +-326 +-190 +38 +344 +697 +1028 +1285 +1414 +1393 +1223 +941 +620 +344 +168 +95 +74 +48 +-39 +-213 +-483 +-798 +-1130 +-1433 +-1663 +-1778 +-1719 +-1482 +-1104 +-668 +-222 +181 +547 +884 +1197 +1455 +1622 +1640 +1498 +1247 +953 +702 +541 +470 +425 +332 +159 +-101 +-417 +-769 +-1147 +-1515 +-1840 +-2063 +-2128 +-1980 +-1633 +-1179 +-717 +-322 +16 +356 +734 +1148 +1555 +1884 +2072 +2081 +1908 +1563 +1090 +551 +19 +-426 +-758 +-965 +-1056 +-1062 +-1002 +-879 +-696 +-489 +-296 +-157 +-109 +-142 +-217 +-316 +-384 +-393 +-333 +-193 +29 +337 +689 +1021 +1274 +1406 +1390 +1230 +963 +660 +396 +219 +134 +106 +73 +-11 +-190 +-457 +-795 +-1148 +-1460 +-1698 +-1815 +346 +698 +1077 +1470 +1820 +2043 +2096 +1954 +1629 +1170 +640 +101 +-378 +-743 +-990 +-1117 +-1137 +-1074 +-938 +-749 +-526 +-316 +-160 +-93 +-114 +-198 +-307 +-398 +-434 +-396 +-277 +-66 +235 +596 +945 +1226 +1383 +1388 +1254 +1006 +697 +418 +220 +122 +94 +79 +29 +-111 +-349 +-669 +-1015 +-1339 +-1597 +-1744 +-1732 +-1540 +-1203 +-786 +-344 +66 +442 +796 +1122 +1400 +1596 +1652 +1545 +1313 +1022 +756 +568 +474 +429 +360 +221 +-10 +-314 +-666 +-1048 +-1429 +-1759 +-1997 +-2101 +-2016 +-1722 +-1289 +-821 +-392 +-29 +307 +673 +1067 +1473 +1836 +2069 +2123 +1993 +1678 +1218 +694 +152 +-332 +-701 +-948 +-1081 +-1114 +-1054 +-930 +-751 +-538 +-340 +-194 +-128 +-149 +-224 +-326 +-412 +-444 +-405 +-275 +-69 +222 +568 +908 +1180 +1335 +1344 +1225 +1005 +727 +469 +277 +174 +137 +120 +61 +-86 +-334 +-670 +-1028 +-1359 +-1616 +-1759 +-1744 +-1555 +-1231 +-817 +-373 +56 +453 +827 +1161 +1427 +1599 +1627 +1497 +1250 +963 +702 +522 +451 +413 +338 +186 +-61 +-378 +-736 +-1111 +-1478 +-1795 +-2020 +-2104 +-1978 +-1643 +-1183 +-702 +-283 +60 +384 +738 +1125 +1526 +1869 +2074 +2102 +1936 +1584 +1107 +581 +52 +-413 +-773 +-1021 +-1148 +-1165 +-1082 +-921 +-705 +-479 +-283 +-145 +-101 +-135 +-221 +-326 +-408 +-434 +-383 +-247 +-19 +297 +650 +983 +1230 +1363 +1361 +1220 +975 +684 +414 +222 +127 +101 +88 +28 +-127 +-390 +-721 +-1075 +-1393 +-1613 +-1729 +-1704 +-1505 +-1176 +-769 +-333 +84 +469 +835 +1165 +1436 +1614 +1653 +1528 +1283 +993 +732 +556 +472 +429 +355 +211 +-28 +-339 +-695 +-1070 +-1446 +-1779 +-2021 +-2125 +-2018 +-1701 +-1256 +-777 +-352 +0 +333 +695 +1096 +1506 +1858 +2072 +2105 +1951 +1622 +1170 +650 +118 +-366 +-740 +-991 +-1115 +-1125 +-1051 +-906 +-717 +-512 +-327 +-195 +-144 +-162 +-235 +-332 +-413 +-443 +-395 +-267 +-49 +243 +578 +899 +1149 +1298 +1322 +1220 +1004 +729 +464 +271 +170 +133 +110 +45 +-119 +-381 +-706 +-1059 +-1372 +-1612 +-1736 +-1715 +-1529 +-1201 +-786 +-333 +100 +495 +860 +1181 +1434 +1586 +1602 +1474 +1226 +938 +683 +517 +452 +416 +331 +172 +-79 +-401 +-760 +-1136 +-1497 +-1816 +-2040 +-2109 +-1964 +-1603 +-1123 +-640 +-235 +95 +414 +763 +1158 +1553 +1879 +2071 +2073 +1891 +1543 +1071 +546 +21 +-446 +-810 +-1049 +-1155 +-1144 +-1048 +-882 +-682 +-472 +-292 +-169 +-122 +-148 +-225 +-323 +-402 +-424 +-365 +-223 +5 +309 +649 +957 +1201 +1340 +1343 +1219 +972 +663 +384 +190 +102 +80 +69 +0 +-170 +-433 +-758 +-1089 +-1385 +-1616 +-1730 +-1700 +-1500 +-1161 +-736 +-286 +138 +528 +882 +1194 +1450 +1612 +1635 +1506 +1262 +975 +717 +542 +466 +427 +347 +192 +-56 +-373 +-723 +-1099 +-1472 +-1795 +-2023 +-2110 +-1992 +-1657 +-1207 +-734 +-321 +21 +353 +725 +1133 +1541 +1880 +2073 +2086 +1925 +1595 +1136 +613 +73 +-400 +-761 +-990 +-1088 +-1083 +-1001 +-872 +-701 +-508 +-334 +-198 +-136 +-154 +-229 +-329 +-410 +-433 +-381 +-246 +-31 +257 +584 +906 +1166 +1315 +1333 +1218 +978 +683 +415 +228 +143 +118 +100 +29 +-134 +-392 +-719 +-1055 +-1365 +-1613 +-1754 +-1741 +-1542 +-1189 +-746 +-278 +156 +547 +894 +1202 +1451 +1598 +1604 +1453 +1200 +915 +667 +513 +455 +415 +326 +154 +-106 +-426 +-780 +-1148 +-1507 +-1814 +-2024 +-2075 +-1907 +-1539 +-1069 +-603 +-215 +108 +436 +799 +1191 +1579 +1889 +2061 +2047 +1850 +1488 +1008 +478 +-46 +-492 +-827 +-1037 +-1125 +-1111 +-1020 +-867 +-673 +-469 +-286 +-151 +-105 +-135 +-218 +-323 +-399 +-414 +-357 +-213 +15 +322 +666 +990 +1243 +1371 +1358 +1196 +920 +609 +340 +170 +103 +83 +65 +-8 +-177 +-438 +-756 +-1097 +-1405 +-1639 +-1761 +-1721 +-1493 +-1124 +-685 +-231 +184 +554 +895 +1205 +1458 +1618 +1627 +1479 +1225 +941 +696 +539 +468 +423 +333 +162 +-88 +-401 +-752 +-1136 +-1503 +-1821 +-2032 +-2091 +-1946 +-1604 +-1152 +-690 +-288 +57 +402 +779 +1183 +1582 +1902 +2084 +2084 +1903 +1553 +1074 +534 +-1 +-458 +-799 +-1012 +-1103 +-1105 +-1041 +-910 +-727 +-515 +-313 +-168 +-117 +-152 +-238 +-342 +-413 +-423 +-361 +-218 +7 +309 +659 +986 +1237 +1364 +1345 +1194 +940 +650 +405 +239 +156 +130 +100 +18 +-160 +-426 +-766 +-1124 +-1446 +-1687 +-1798 +-1740 +-1495 +-1116 +-666 +-210 +207 +587 +939 +1252 +1501 +1638 +1613 +1434 +1164 +873 +641 +501 +451 +404 +301 +123 +-134 +-448 +-803 +-1176 +-1540 +-1845 +-2033 +-2058 +-1870 +-1490 +-1023 +-566 +-187 +133 +457 +812 +1194 +1571 +1885 +2051 +2029 +1822 +1451 +967 +441 +-67 +-497 +-822 +-1030 +-1119 +-1112 +-1018 +-864 +-657 +-435 +-247 +-127 +-100 +-153 +-253 +-360 +-430 +-438 +-371 +-217 +30 +355 +707 +1030 +1266 +1358 +1309 +1136 +865 +576 +335 +178 +112 +95 +78 +-4 +-181 +-456 +-796 +-1139 +-1440 +-1660 +-1752 +-1669 +-1416 +-1047 +-623 +-197 +201 +569 +913 +1226 +1481 +1624 +1618 +1456 +1200 +915 +681 +532 +463 +413 +311 +140 +-111 +-422 +-780 +-1159 +-1519 +-1821 +-2015 +-2059 +-1904 +-1553 +-1104 +-647 +-252 +88 +424 +798 +1202 +1603 +1928 +2096 +2084 +1887 +1503 +1015 +479 +-43 +-482 +-812 +-1019 +-1113 +-1107 +-1026 +-873 +-672 +-460 +-275 +-158 +-133 +-179 +-266 +-365 +-427 +-428 +-358 +-199 +43 +359 +703 +1012 +1236 +1329 +1306 +1157 +911 +635 +394 +226 +147 +120 +93 +9 +-174 +-467 +-819 +-1172 +-1478 +-1688 +-1774 +-1700 +-1457 +-1087 +-654 +-208 +217 +609 +966 +1282 +1520 +1636 +1592 +1402 +1134 +856 +632 +498 +446 +399 +296 +111 +-153 +-476 +-837 +-1219 +-1574 +-1871 +-2056 +-2070 +-1864 +-1474 +-994 +-530 +-148 +171 +491 +845 +1235 +1625 +1925 +2067 +2023 +1793 +1405 +923 +396 +-110 +-534 +-862 +-1067 +-1144 +-1117 +-1006 +-827 +-613 +-405 +-236 +-138 +-127 +-183 +-278 +-375 +-432 +-429 +-346 +-174 +89 +419 +758 +1054 +1261 +1349 +1309 +1138 +879 +581 +331 +170 +102 +90 +66 +-22 +-225 +-516 +-851 +-1184 +-1461 +-1654 +-1731 +-1651 +-1408 +-1046 +-621 +-184 +229 +613 +962 +1272 +1511 +1641 +1612 +1441 +1176 +886 +653 +511 +454 +411 +314 +125 +-145 +-466 +-827 +-1205 +-1561 +-1864 +-2055 +-2090 +-1915 +-1539 +-1073 +-608 +-216 +116 +452 +830 +1242 +1642 +1953 +2100 +2059 +1841 +1467 +983 +450 +-67 +-504 +-828 +-1027 +-1106 +-1087 +-994 +-840 +-650 +-456 +-290 +-178 +-148 +-186 +-269 +-364 +-426 +-420 +-339 +-173 +66 +367 +695 +990 +1219 +1332 +1315 +1177 +918 +624 +372 +207 +138 +123 +93 +-14 +-216 +-504 +-842 +-1174 +-1450 +-1654 +-1746 +-1674 +-1436 +-1065 +-622 +-167 +257 +653 +1002 +1304 +1534 +1646 +1596 +1404 +1132 +845 +618 +489 +449 +405 +291 +87 +-197 +-531 +-893 +-1266 +-1617 +-1908 +-2084 +-2086 +-1856 +-1442 +-952 +-490 +-124 +196 +526 +897 +1306 +1695 +1987 +2109 +2037 +1787 +1382 +885 +346 +-171 +-598 +-910 +-1094 +-1151 +-1108 +-987 +-814 +-611 +-418 +-262 +-161 +-144 +-190 +-275 +-367 +-427 +-422 +-336 +-164 +98 +425 +763 +1069 +1295 +1390 +1345 +1163 +866 +549 +292 +143 +93 +82 +51 +-60 +-263 +-549 +-873 +-1188 +-1470 +-1672 +-1755 +-1669 +-1410 +-1023 +-578 +-135 +275 +648 +988 +1291 +1532 +1662 +1627 +1444 +1167 +873 +640 +508 +458 +413 +303 +101 +-180 +-508 +-871 +-1243 +-1599 +-1892 +-2075 +-2089 +-1880 +-1483 +-1012 +-557 +-182 +147 +493 +876 +1288 +1674 +1969 +2105 +2062 +1834 +1443 +944 +396 +-131 +-554 +-860 +-1044 +-1103 +-1074 +-984 +-837 +-649 +-452 +-280 +-166 +-138 +-178 +-264 +-361 +-421 +-417 +-335 +-172 +70 +379 +714 +1025 +1254 +1360 +1323 +1141 +857 +558 +325 +189 +141 +128 +87 +-25 +-229 +-516 +-850 +-1190 +-1489 +-1698 +-1780 +-1684 +-1405 +-1005 +-551 +-105 +309 +683 +1018 +1307 +1527 +1630 +1570 +1370 +1093 +815 +603 +490 +446 +391 +266 +55 +-226 +-551 +-911 +-1282 +-1630 +-1913 +-2073 +-2046 +-1791 +-1367 +-885 +-443 +-88 +233 +570 +944 +1340 +1705 +1970 +2076 +1997 +1741 +1333 +829 +284 +-216 +-621 +-915 +-1084 +-1133 +-1091 +-983 +-811 +-604 +-399 +-225 +-125 +-111 +-168 +-265 +-368 +-426 +-414 +-331 +-156 +109 +443 +794 +1096 +1311 +1379 +1300 +1088 +786 +487 +259 +134 +93 +82 +43 +-67 +-268 +-550 +-883 +-1216 +-1504 +-1703 +-1760 +-1638 +-1346 +-947 +-507 +-83 +304 +662 +993 +1284 +1513 +1627 +1575 +1388 +1118 +839 +623 +501 +446 +391 +277 +75 +-199 +-517 +-885 +-1261 +-1609 +-1887 +-2037 +-2023 +-1798 +-1403 +-947 +-509 +-146 +181 +525 +903 +1298 +1667 +1949 +2068 +2006 +1769 +1370 +875 +338 +-164 +-566 +-851 +-1019 +-1078 +-1061 +-971 +-825 +-629 +-421 +-245 +-134 +-118 +-172 +-266 +-364 +-417 +-407 +-323 +-160 +87 +408 +748 +1051 +1256 +1319 +1248 +1064 +800 +531 +323 +202 +153 +133 +90 +-24 +-224 +-517 +-866 +-1209 +-1498 +-1693 +-1744 +-1622 +-1337 +-945 +-510 +-91 +296 +659 +990 +1278 +1498 +1597 +1530 +1333 +1068 +799 +591 +474 +427 +364 +240 +35 +-245 +-573 +-935 +-1307 +-1646 +-1900 +-2028 +-1975 +-1705 +-1286 +-817 +-391 +-45 +262 +580 +938 +1319 +1678 +1935 +2027 +1935 +1661 +1246 +755 +234 +-245 +-627 +-906 +-1067 +-1121 +-1079 +-962 +-781 +-558 +-350 +-188 +-105 +-113 +-182 +-277 +-365 +-408 +-390 +-297 +-118 +154 +490 +826 +1104 +1277 +1312 +1221 +1012 +740 +472 +265 +152 +108 +92 +50 +-64 +-272 +-568 +-901 +-1224 +-1494 +-1657 +-1688 +-1546 +-1258 +-880 +-468 +-76 +297 +657 +995 +1288 +1508 +1609 +1545 +1345 +1073 +799 +587 +472 +421 +364 +253 +51 +-226 +-552 +-914 +-1287 +-1618 +-1868 +-2005 +-1977 +-1743 +-1345 +-884 +-447 +-91 +220 +545 +908 +1294 +1662 +1922 +2016 +1928 +1664 +1266 +790 +275 +-200 +-580 +-854 +-1015 +-1068 +-1036 +-935 +-768 +-571 +-381 +-227 +-144 +-149 +-206 +-287 +-366 +-405 +-382 +-285 +-109 +142 +454 +773 +1036 +1203 +1259 +1192 +1016 +766 +506 +305 +188 +147 +138 +98 +-24 +-244 +-542 +-875 +-1197 +-1461 +-1627 +-1674 +-1549 +-1273 +-900 +-483 +-77 +305 +667 +1004 +1287 +1488 +1564 +1483 +1278 +1016 +761 +569 +470 +424 +360 +229 +13 +-276 +-603 +-953 +-1305 +-1621 +-1866 +-1986 +-1922 +-1643 +-1213 +-744 +-329 +-7 +278 +586 +940 +1313 +1667 +1906 +1981 +1867 +1580 +1175 +695 +190 +-274 +-640 +-908 +-1056 +-1089 +-1034 +-903 +-719 +-515 +-326 +-186 +-121 +-129 +-186 +-271 +-348 +-384 +-362 +-266 +-87 +181 +497 +799 +1050 +1213 +1262 +1184 +995 +722 +447 +239 +134 +106 +100 +59 +-72 +-292 +-581 +-896 +-1195 +-1441 +-1611 +-1645 +-1510 +-1229 +-858 +-449 +-50 +318 +676 +997 +1275 +1476 +1557 +1484 +1288 +1023 +766 +575 +471 +425 +368 +243 +22 +-260 +-584 +-936 +-1288 +-1608 +-1854 +-1988 +-1948 +-1690 +-1272 +-803 +-379 +-45 +250 +567 +924 +1307 +1662 +1903 +1979 +1878 +1614 +1215 +742 +235 +-241 +-615 +-875 +-1015 +-1048 +-999 +-892 +-734 +-553 +-381 +-245 +-164 +-150 +-190 +-265 +-343 +-381 +-359 +-262 +-91 +151 +448 +748 +1007 +1192 +1256 +1196 +1008 +739 +470 +265 +160 +132 +128 +78 +-49 +-260 +-550 +-868 +-1175 +-1441 +-1614 +-1652 +-1528 +-1249 +-867 +-444 +-33 +344 +703 +1017 +1281 +1470 +1539 +1461 +1254 +992 +743 +558 +466 +424 +352 +208 +-26 +-319 +-643 +-976 +-1313 +-1618 +-1848 +-1962 +-1883 +-1581 +-1142 +-675 +-275 +31 +313 +621 +973 +1345 +1675 +1888 +1936 +1818 +1531 +1116 +641 +139 +-318 +-672 +-917 +-1046 +-1063 +-1000 +-876 +-707 +-515 +-340 +-199 +-122 +-124 +-177 +-261 +-342 +-376 +-349 +-253 +-73 +184 +495 +802 +1069 +1249 +1298 +1208 +981 +686 +401 +207 +124 +111 +109 +59 +-73 +-295 +-581 +-891 +-1194 +-1454 +-1626 +-1660 +-1509 +-1209 +-820 +-401 +-7 +348 +683 +996 +1268 +1475 +1564 +1494 +1287 +1012 +754 +567 +478 +437 +369 +230 +-1 +-293 +-615 +-962 +-1320 +-1645 +-1892 +-2015 +-1950 +-1662 +-1232 +-771 +-359 +-29 +276 +610 +973 +1350 +1683 +1914 +1995 +1897 +1620 +1199 +701 +178 +-291 +-656 +-898 +-1024 +-1050 +-1002 +-902 +-748 +-564 +-381 +-227 +-137 +-126 +-179 +-269 +-358 +-399 +-372 +-267 +-89 +164 +475 +794 +1071 +1257 +1302 +1207 +988 +707 +441 +250 +159 +139 +133 +81 +-53 +-284 +-582 +-924 +-1251 +-1516 +-1684 +-1704 +-1544 +-1224 +-817 +-382 +20 +378 +717 +1035 +1309 +1508 +1577 +1480 +1259 +986 +736 +559 +476 +432 +347 +185 +-62 +-365 +-694 +-1048 +-1400 +-1715 +-1944 +-2032 +-1923 +-1598 +-1147 +-671 +-265 +54 +351 +680 +1043 +1419 +1745 +1959 +2018 +1887 +1572 +1117 +599 +79 +-378 +-721 +-954 +-1077 +-1100 +-1042 +-914 +-734 +-521 +-323 +-175 +-106 +-125 +-199 +-298 +-380 +-406 +-366 +-251 +-56 +222 +559 +888 +1160 +1317 +1323 +1190 +947 +653 +389 +212 +137 +118 +113 +56 +-88 +-320 +-631 +-968 +-1282 +-1539 +-1690 +-1692 +-1500 +-1172 +-771 +-348 +36 +388 +727 +1050 +1334 +1548 +1623 +1534 +1308 +1023 +757 +570 +480 +434 +357 +207 +-34 +-336 +-673 +-1033 +-1387 +-1699 +-1930 +-2020 +-1937 +-1639 +-1203 +-732 +-317 +18 +331 +663 +1033 +1412 +1758 +1986 +2040 +1916 +1606 +1156 +650 +128 +-335 +-688 +-924 +-1047 +-1082 +-1033 +-923 +-750 +-538 +-348 +-196 +-131 +-159 +-227 +-316 +-392 +-414 +-372 +-258 +-68 +203 +535 +863 +1117 +1266 +1281 +1173 +961 +692 +448 +266 +173 +144 +128 +71 +-70 +-312 +-640 +-990 +-1320 +-1573 +-1711 +-1693 +-1507 +-1182 +-791 +-368 +30 +394 +749 +1078 +1363 +1550 +1604 +1489 +1260 +984 +730 +548 +473 +425 +328 +164 +-84 +-397 +-746 +-1108 +-1467 +-1763 +-1972 +-2046 +-1915 +-1568 +-1100 +-615 +-211 +100 +397 +726 +1087 +1473 +1809 +2017 +2046 +1886 +1536 +1069 +558 +38 +-411 +-754 +-989 +-1119 +-1138 +-1064 +-915 +-711 +-482 +-289 +-153 +-109 +-145 +-223 +-313 +-377 +-396 +-351 +-235 +-29 +269 +619 +941 +1181 +1315 +1313 +1192 +957 +666 +401 +214 +134 +121 +111 +58 +-99 +-361 +-686 +-1030 +-1339 +-1576 +-1701 +-1690 +-1496 +-1169 +-772 +-348 +55 +421 +770 +1097 +1375 +1571 +1634 +1532 +1307 +1018 +747 +560 +477 +438 +359 +203 +-47 +-366 +-711 +-1084 +-1448 +-1757 +-1979 +-2065 +-1964 +-1631 +-1165 +-673 +-249 +65 +355 +684 +1066 +1460 +1810 +2022 +2053 +1902 +1576 +1135 +628 +108 +-350 +-703 +-950 +-1075 +-1091 +-1028 +-901 +-721 +-522 +-341 +-211 +-153 +-167 +-222 +-304 +-374 +-394 +-346 +-217 +-26 +241 +567 +885 +1125 +1265 +1287 +1192 +978 +703 +435 +242 +150 +130 +127 +73 +-85 +-358 +-697 +-1053 +-1347 +-1575 +-1718 +-1718 +-1542 +-1221 +-816 +-371 +49 +424 +786 +1110 +1378 +1562 +1595 +1467 +1228 +948 +693 +519 +464 +433 +332 +156 +-112 +-438 +-786 +-1150 +-1498 +-1799 +-2004 +-2064 +-1922 +-1533 +-1035 +-542 +-158 +120 +397 +718 +1088 +1477 +1813 +2005 +2017 +1842 +1502 +1045 +538 +18 +-431 +-777 +-1006 +-1116 +-1120 +-1036 +-885 +-692 +-492 +-312 +-182 +-132 +-155 +-215 +-292 +-361 +-373 +-324 +-209 +-7 +278 +617 +922 +1167 +1313 +1323 +1212 +962 +638 +358 +182 +119 +124 +120 +59 +-110 +-379 +-707 +-1034 +-1321 +-1549 +-1696 +-1692 +-1497 +-1152 +-739 +-301 +96 +458 +788 +1098 +1370 +1567 +1621 +1509 +1287 +993 +728 +554 +491 +459 +365 +180 +-92 +-411 +-747 +-1118 +-1480 +-1788 +-1989 +-2074 +-1951 +-1573 +-1080 +-584 +-188 +96 +376 +717 +1098 +1494 +1826 +2019 +2040 +1895 +1560 +1108 +594 +60 +-399 +-736 +-949 +-1052 +-1060 +-1004 +-887 +-724 +-532 +-357 +-206 +-140 +-159 +-207 +-290 +-355 +-369 +-316 +-196 +-16 +256 +582 +898 +1150 +1303 +1338 +1227 +964 +651 +387 +213 +150 +147 +142 +81 +-81 +-349 +-686 +-1027 +-1341 +-1588 +-1740 +-1732 +-1522 +-1174 +-750 +-310 +96 +458 +796 +1113 +1380 +1575 +1611 +1463 +1215 +928 +676 +519 +478 +443 +319 +118 +-157 +-483 +-827 +-1194 +-1547 +-1850 +-2055 +-2106 +-1914 +-1479 +-960 +-479 +-123 +145 +428 +759 +1130 +1503 +1823 +1995 +2005 +1825 +1462 +992 +462 +-54 +-483 +-812 +-1020 +-1104 +-1105 +-1030 +-898 +-708 +-509 +-317 +-173 +-121 +-144 +-218 +-310 +-374 +-383 +-336 +-211 +-11 +289 +642 +967 +1222 +1349 +1337 +1178 +882 +553 +283 +134 +100 +111 +114 +59 +-110 +-376 +-707 +-1043 +-1347 +-1601 +-1756 +-1730 +-1481 +-1111 +-687 +-251 +129 +477 +807 +1124 +1414 +1613 +1655 +1513 +1268 +969 +706 +538 +488 +452 +332 +138 +-138 +-448 +-792 +-1174 +-1537 +-1835 +-2028 +-2083 +-1934 +-1526 +-1028 +-541 +-163 +122 +416 +761 +1150 +1538 +1868 +2049 +2065 +1905 +1549 +1065 +533 +0 +-440 +-761 +-970 +-1065 +-1078 +-1034 +-916 +-739 +-533 +-328 +-166 +-111 +-137 +-203 +-296 +-364 +-366 +-303 +-171 +29 +316 +669 +990 +1240 +1369 +1359 +1214 +932 +619 +371 +216 +163 +159 +149 +88 +-84 +-359 +-718 +-1092 +-1412 +-1655 +-1794 +-1750 +-1492 +-1118 +-687 +-256 +132 +494 +840 +1162 +1443 +1622 +1627 +1466 +1207 +914 +664 +514 +483 +439 +304 +94 +-190 +-519 +-878 +-1261 +-1615 +-1900 +-2070 +-2104 +-1898 +-1453 +-929 +-441 +-88 +182 +462 +795 +1156 +1528 +1849 +2022 +2011 +1833 +1444 +950 +416 +-94 +-501 +-815 +-1019 +-1112 +-1123 +-1057 +-909 +-707 +-483 +-278 +-140 +-116 +-168 +-255 +-359 +-418 +-408 +-349 +-213 +16 +342 +706 +1031 +1263 +1358 +1316 +1146 +856 +538 +288 +153 +116 +133 +127 +50 +-124 +-411 +-771 +-1134 +-1443 +-1678 +-1791 +-1719 +-1447 +-1068 +-659 +-256 +114 +468 +814 +1149 +1445 +1650 +1670 +1519 +1258 +955 +710 +547 +493 +449 +325 +110 +-175 +-490 +-859 +-1254 +-1615 +-1896 +-2061 +-2105 +-1934 +-1518 +-1012 +-516 +-126 +157 +461 +812 +1191 +1584 +1927 +2105 +2098 +1919 +1526 +1024 +477 +-48 +-475 +-798 +-1018 +-1114 +-1118 +-1056 +-918 +-712 +-490 +-293 +-143 +-117 +-153 +-231 +-317 +-368 +-365 +-292 +-145 +75 +371 +730 +1040 +1269 +1368 +1343 +1197 +923 +621 +374 +219 +167 +164 +157 +80 +-100 +-400 +-787 +-1168 +-1475 +-1698 +-1809 +-1737 +-1471 +-1088 +-671 +-241 +164 +554 +923 +1255 +1530 +1698 +1677 +1489 +1211 +911 +659 +509 +474 +428 +289 +67 +-233 +-576 +-949 +-1339 +-1685 +-1942 +-2113 +-2145 +-1916 +-1450 +-899 +-393 +-44 +221 +509 +840 +1214 +1607 +1925 +2083 +2053 +1832 +1420 +919 +376 +-139 +-544 +-868 +-1088 +-1171 +-1154 +-1049 +-871 +-653 +-442 +-251 +-135 +-125 +-173 +-257 +-342 +-392 +-383 +-325 +-181 +69 +395 +747 +1043 +1257 +1339 +1305 +1150 +862 +537 +276 +134 +94 +110 +116 +28 +-166 +-472 +-834 +-1174 +-1461 +-1667 +-1783 +-1715 +-1450 +-1072 +-653 +-232 +162 +538 +893 +1212 +1489 +1669 +1661 +1493 +1221 +909 +647 +495 +463 +431 +311 +90 +-206 +-530 +-904 +-1289 +-1635 +-1917 +-2094 +-2141 +-1943 +-1492 +-951 +-442 +-88 +183 +471 +807 +1194 +1607 +1937 +2090 +2055 +1838 +1456 +975 +441 +-89 +-517 +-843 +-1044 +-1112 +-1086 +-995 +-842 +-651 +-457 +-276 +-148 +-126 +-154 +-213 +-309 +-362 +-374 +-296 +-141 +78 +380 +701 +997 +1221 +1335 +1326 +1195 +900 +573 +320 +172 +142 +165 +167 +83 +-114 +-417 +-790 +-1132 +-1428 +-1645 +-1759 +-1706 +-1441 +-1055 +-618 +-189 +213 +593 +940 +1245 +1501 +1659 +1627 +1440 +1167 +868 +625 +494 +479 +430 +287 +49 +-263 +-597 +-958 +-1328 +-1652 +-1909 +-2082 +-2093 +-1822 +-1337 +-778 +-299 +10 +236 +512 +845 +1230 +1620 +1917 +2048 +1995 +1762 +1363 +880 +336 +-185 +-602 +-908 +-1091 +-1145 +-1096 +-982 +-818 +-616 +-425 +-234 +-118 +-103 +-133 +-215 +-313 +-372 +-367 +-296 +-146 +90 +417 +752 +1042 +1268 +1367 +1342 +1146 +807 +448 +182 +63 +52 +101 +112 +26 +-178 +-481 +-817 +-1146 +-1433 +-1670 +-1788 +-1719 +-1438 +-1027 +-581 +-156 +214 +574 +897 +1195 +1465 +1626 +1612 +1421 +1126 +812 +563 +446 +434 +404 +282 +51 +-239 +-544 +-900 +-1282 +-1628 +-1902 +-2080 +-2098 +-1844 +-1363 +-834 +-363 +-56 +179 +461 +800 +1186 +1578 +1879 +2007 +1966 +1764 +1391 +913 +367 +-164 +-574 +-864 +-1029 +-1066 +-1039 +-959 +-815 +-637 +-440 +-242 +-101 +-66 +-96 +-181 +-296 +-361 +-357 +-275 +-136 +81 +374 +694 +1003 +1241 +1357 +1328 +1128 +792 +455 +221 +117 +123 +170 +179 +98 +-96 +-397 +-746 +-1087 +-1394 +-1623 +-1738 +-1654 +-1368 +-951 +-510 +-100 +257 +590 +906 +1188 +1447 +1586 +1542 +1332 +1038 +748 +523 +433 +432 +406 +277 +46 +-247 +-563 +-903 +-1260 +-1596 +-1863 +-2030 +-2004 +-1690 +-1192 +-661 +-227 +36 +241 +499 +821 +1190 +1556 +1839 +1954 +1896 +1656 +1266 +791 +257 +-232 +-610 +-875 +-1016 +-1046 +-1010 +-924 +-770 +-566 +-355 +-150 +-29 +-22 +-82 +-188 +-309 +-367 +-356 +-293 +-149 +86 +410 +751 +1070 +1299 +1373 +1272 +1026 +671 +334 +117 +39 +71 +120 +143 +61 +-127 +-421 +-765 +-1105 +-1402 +-1630 +-1721 +-1611 +-1303 +-895 +-469 +-84 +222 +530 +828 +1114 +1383 +1544 +1507 +1290 +985 +683 +468 +380 +393 +377 +267 +50 +-228 +-526 +-864 +-1230 +-1568 +-1835 +-1977 +-1955 +-1681 +-1211 +-713 +-296 +-29 +181 +423 +729 +1088 +1449 +1736 +1878 +1849 +1636 +1265 +786 +273 +-208 +-570 +-815 +-965 +-1006 +-987 +-912 +-768 +-564 +-341 +-145 +-24 +-23 +-82 +-189 +-300 +-360 +-367 +-299 +-170 +47 +357 +695 +1004 +1220 +1281 +1206 +996 +685 +381 +169 +88 +107 +167 +190 +124 +-48 +-344 +-703 +-1048 +-1345 +-1558 +-1641 +-1525 +-1226 +-834 +-429 +-73 +225 +520 +816 +1104 +1349 +1471 +1399 +1167 +872 +591 +411 +354 +379 +367 +259 +52 +-218 +-511 +-843 +-1182 +-1499 +-1747 +-1875 +-1818 +-1507 +-1031 +-538 +-145 +85 +246 +438 +703 +1025 +1374 +1653 +1770 +1714 +1477 +1097 +658 +189 +-231 +-552 +-786 +-927 +-963 +-918 +-817 +-645 +-426 +-212 +-44 +44 +24 +-51 +-159 +-256 +-314 +-323 +-278 +-150 +81 +395 +722 +993 +1164 +1192 +1095 +873 +573 +277 +72 +4 +42 +121 +170 +113 +-68 +-353 +-690 +-999 +-1266 +-1447 +-1505 +-1393 +-1113 +-752 +-376 +-58 +205 +472 +744 +1018 +1257 +1385 +1323 +1107 +814 +543 +364 +307 +325 +329 +252 +67 +-184 +-459 +-771 +-1093 +-1384 +-1619 +-1756 +-1728 +-1466 +-1032 +-569 +-194 +33 +181 +356 +612 +932 +1281 +1554 +1668 +1618 +1398 +1057 +655 +209 +-199 +-516 +-740 +-869 +-894 +-852 +-753 +-600 +-407 +-228 +-79 +0 +-6 +-57 +-148 +-241 +-310 +-327 +-275 +-145 +74 +355 +644 +887 +1049 +1104 +1049 +879 +606 +322 +114 +35 +68 +150 +199 +138 +-51 +-336 +-657 +-958 +-1197 +-1367 +-1428 +-1330 +-1079 +-744 +-386 +-69 +207 +482 +753 +1003 +1205 +1300 +1220 +1004 +733 +483 +315 +276 +307 +313 +234 +47 +-214 +-502 +-803 +-1098 +-1362 +-1579 +-1698 +-1646 +-1347 +-893 +-429 +-79 +105 +213 +357 +601 +926 +1266 +1514 +1606 +1526 +1292 +959 +564 +148 +-236 +-540 +-748 +-857 +-866 +-805 +-684 +-519 +-338 +-172 +-46 +17 +1 +-57 +-148 +-238 +-296 +-309 +-253 +-119 +106 +393 +668 +896 +1061 +1112 +1043 +843 +545 +249 +44 +-11 +46 +139 +182 +107 +-90 +-365 +-665 +-938 +-1168 +-1339 +-1401 +-1301 +-1047 +-709 +-345 +-32 +235 +489 +731 +965 +1170 +1282 +1227 +1022 +738 +473 +304 +267 +310 +328 +249 +57 +-201 +-477 +-767 +-1061 +-1331 +-1563 +-1696 +-1659 +-1383 +-947 +-490 +-142 +43 +170 +341 +597 +922 +1248 +1485 +1572 +1509 +1306 +983 +600 +167 +-235 +-542 +-743 +-840 +-845 +-788 +-691 +-553 +-389 +-232 +-92 +-6 +-6 +-46 +-138 +-233 +-299 +-307 +-236 +-106 +93 +347 +611 +842 +1021 +1098 +1048 +859 +558 +261 +63 +13 +78 +169 +198 +111 +-83 +-361 +-655 +-924 +-1163 +-1346 +-1426 +-1332 +-1072 +-714 +-329 +0 +271 +518 +751 +979 +1171 +1254 +1175 +957 +687 +432 +277 +259 +312 +322 +227 +18 +-249 +-521 +-796 +-1072 +-1334 +-1552 +-1674 +-1601 +-1281 +-816 +-363 +-50 +107 +214 +376 +627 +946 +1266 +1482 +1555 +1473 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b5_987_767.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b5_987_767.samples new file mode 100644 index 00000000..346f9630 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_clarinet_b5_987_767.samples @@ -0,0 +1,4096 @@ +261 +514 +684 +799 +878 +966 +1038 +1089 +1135 +1146 +1114 +1089 +1090 +1075 +1038 +935 +805 +665 +569 +475 +389 +312 +178 +36 +-119 +-283 +-427 +-559 +-716 +-875 +-1013 +-1163 +-1326 +-1456 +-1597 +-1695 +-1638 +-1439 +-1207 +-948 +-738 +-590 +-387 +-117 +145 +408 +621 +764 +857 +920 +1001 +1066 +1120 +1128 +1102 +1082 +1069 +1058 +1048 +987 +864 +728 +610 +528 +454 +367 +225 +69 +-54 +-216 +-364 +-501 +-669 +-824 +-934 +-1075 +-1253 +-1389 +-1521 +-1653 +-1666 +-1502 +-1278 +-1050 +-815 +-650 +-475 +-235 +10 +282 +526 +668 +772 +863 +951 +1035 +1090 +1112 +1099 +1086 +1077 +1071 +1071 +1029 +906 +765 +652 +566 +490 +399 +290 +144 +17 +-114 +-275 +-410 +-568 +-736 +-871 +-984 +-1154 +-1317 +-1464 +-1597 +-1673 +-1587 +-1375 +-1148 +-913 +-720 +-568 +-367 +-97 +165 +413 +601 +726 +817 +928 +1012 +1071 +1106 +1096 +1065 +1055 +1066 +1048 +1018 +941 +807 +688 +610 +535 +435 +339 +217 +76 +-45 +-192 +-346 +-490 +-674 +-813 +-925 +-1054 +-1222 +-1385 +-1518 +-1631 +-1616 +-1447 +-1228 +-1009 +-783 +-646 +-470 +-219 +30 +269 +506 +651 +741 +852 +959 +1015 +1064 +1093 +1061 +1054 +1067 +1068 +1043 +984 +879 +754 +663 +576 +485 +383 +276 +143 +15 +-97 +-235 +-411 +-583 +-734 +-851 +-974 +-1147 +-1305 +-1443 +-1576 +-1634 +-1527 +-1322 +-1104 +-885 +-729 +-566 +-326 +-75 +152 +405 +608 +715 +811 +905 +997 +1045 +1059 +1055 +1054 +1044 +1046 +1027 +998 +911 +799 +710 +615 +518 +401 +296 +204 +83 +-32 +-187 +-355 +-492 +-655 +-787 +-904 +-1053 +-1226 +-1368 +-1492 +-1613 +-1591 +-1397 +-1198 +-986 +-781 +-641 +-464 +-181 +68 +270 +494 +640 +763 +877 +959 +996 +1043 +1067 +1051 +1057 +1060 +1020 +1010 +987 +863 +729 +644 +547 +438 +352 +237 +119 +34 +-116 +-268 +-420 +-591 +-757 +-842 +-946 +-1152 +-1329 +-1428 +-1547 +-1592 +-1462 +-1272 +-1093 +-870 +-691 +-532 +-293 +-69 +157 +420 +593 +702 +801 +913 +975 +1016 +1043 +1037 +1053 +1036 +1022 +1009 +989 +910 +794 +691 +575 +491 +399 +283 +195 +92 +-39 +-198 +-352 +-504 +-671 +-789 +-908 +-1059 +-1243 +-1384 +-1489 +-1574 +-1536 +-1377 +-1192 +-970 +-754 +-631 +-411 +-141 +67 +271 +511 +657 +754 +844 +937 +978 +1016 +1048 +1033 +1041 +1059 +1038 +998 +958 +855 +735 +601 +517 +426 +324 +219 +126 +2 +-131 +-266 +-442 +-606 +-733 +-817 +-963 +-1144 +-1299 +-1406 +-1508 +-1538 +-1433 +-1271 +-1092 +-834 +-645 +-519 +-285 +-24 +184 +429 +605 +712 +816 +913 +963 +982 +1025 +1025 +1025 +1024 +1016 +1000 +970 +881 +773 +677 +566 +461 +369 +289 +212 +89 +-58 +-220 +-377 +-521 +-672 +-789 +-894 +-1072 +-1255 +-1355 +-1435 +-1549 +-1517 +-1344 +-1170 +-947 +-723 +-598 +-374 +-118 +84 +311 +516 +658 +758 +861 +909 +938 +991 +1002 +1022 +1033 +1021 +983 +973 +945 +838 +710 +585 +500 +430 +347 +252 +128 +11 +-133 +-279 +-423 +-618 +-726 +-825 +-965 +-1158 +-1301 +-1400 +-1481 +-1530 +-1428 +-1252 +-1065 +-826 +-638 +-467 +-253 +-35 +181 +451 +620 +718 +808 +902 +937 +968 +1014 +1014 +1038 +1046 +1012 +963 +954 +880 +755 +646 +550 +451 +356 +295 +207 +87 +-83 +-235 +-359 +-515 +-685 +-786 +-902 +-1055 +-1231 +-1346 +-1438 +-1529 +-1515 +-1347 +-1154 +-937 +-716 +-557 +-357 +-112 +77 +309 +553 +694 +793 +831 +893 +946 +1014 +1028 +1020 +1008 +1010 +997 +967 +904 +814 +690 +571 +496 +401 +346 +266 +112 +-5 +-136 +-316 +-475 +-570 +-710 +-843 +-980 +-1168 +-1297 +-1358 +-1480 +-1540 +-1431 +-1254 +-1047 +-779 +-603 +-483 +-233 +-3 +221 +462 +634 +738 +816 +875 +908 +972 +1025 +1041 +1046 +1003 +967 +959 +961 +865 +740 +640 +530 +458 +391 +303 +171 +76 +-58 +-247 +-382 +-506 +-674 +-772 +-895 +-1100 +-1244 +-1323 +-1435 +-1564 +-1515 +-1356 +-1163 +-892 +-676 +-563 +-385 +-140 +112 +342 +558 +679 +769 +835 +899 +955 +989 +1026 +1044 +1023 +985 +963 +950 +914 +803 +683 +553 +489 +434 +361 +268 +130 +-11 +-160 +-292 +-404 +-583 +-746 +-829 +-950 +-1161 +-1290 +-1368 +-1489 +-1556 +-1435 +-1234 +-1013 +-759 +-621 +-481 +-237 +1 +226 +476 +623 +724 +802 +854 +926 +979 +1024 +1010 +999 +986 +951 +945 +933 +854 +754 +624 +527 +476 +405 +323 +185 +48 +-72 +-230 +-340 +-500 +-682 +-781 +-897 +-1065 +-1220 +-1337 +-1456 +-1554 +-1505 +-1323 +-1100 +-869 +-701 +-567 +-352 +-94 +100 +348 +587 +698 +751 +797 +893 +967 +1024 +1050 +996 +971 +964 +957 +952 +902 +798 +662 +565 +503 +437 +354 +241 +114 +-8 +-147 +-280 +-441 +-584 +-713 +-857 +-984 +-1147 +-1291 +-1402 +-1536 +-1570 +-1422 +-1219 +-1007 +-775 +-621 +-482 +-236 +17 +246 +480 +644 +741 +800 +882 +970 +1015 +1029 +1004 +982 +960 +962 +956 +924 +819 +712 +621 +527 +467 +382 +288 +186 +30 +-80 +-199 +-369 +-521 +-668 +-791 +-912 +-1085 +-1238 +-1346 +-1489 +-1577 +-1496 +-1303 +-1096 +-856 +-675 +-547 +-336 +-83 +154 +388 +566 +662 +764 +843 +921 +980 +1005 +1004 +978 +958 +958 +937 +924 +861 +753 +631 +552 +492 +388 +313 +223 +102 +-14 +-134 +-264 +-419 +-581 +-735 +-833 +-954 +-1151 +-1304 +-1398 +-1514 +-1550 +-1380 +-1161 +-974 +-759 +-598 +-451 +-213 +41 +269 +487 +634 +719 +809 +895 +951 +991 +1005 +982 +951 +957 +950 +928 +903 +801 +683 +595 +526 +447 +359 +260 +151 +77 +-37 +-215 +-338 +-487 +-655 +-776 +-888 +-1044 +-1217 +-1351 +-1473 +-1544 +-1463 +-1271 +-1073 +-838 +-669 +-538 +-339 +-62 +159 +389 +571 +672 +746 +858 +930 +954 +970 +960 +945 +936 +941 +928 +903 +833 +750 +657 +549 +471 +401 +314 +228 +120 +14 +-111 +-263 +-426 +-584 +-706 +-819 +-961 +-1138 +-1294 +-1410 +-1507 +-1497 +-1347 +-1158 +-957 +-749 +-608 +-448 +-187 +69 +269 +474 +635 +734 +819 +892 +952 +975 +965 +946 +937 +934 +911 +899 +859 +771 +677 +582 +502 +427 +348 +264 +171 +104 +-39 +-185 +-319 +-504 +-637 +-747 +-877 +-1062 +-1241 +-1355 +-1469 +-1524 +-1427 +-1243 +-1057 +-855 +-675 +-513 +-292 +-52 +180 +389 +559 +667 +773 +848 +900 +926 +936 +923 +909 +918 +908 +888 +867 +803 +719 +642 +554 +470 +398 +319 +251 +164 +39 +-106 +-245 +-424 +-582 +-691 +-819 +-963 +-1152 +-1312 +-1410 +-1486 +-1482 +-1341 +-1150 +-957 +-760 +-602 +-403 +-150 +69 +287 +502 +639 +737 +818 +882 +906 +919 +930 +917 +908 +904 +884 +854 +833 +774 +674 +578 +497 +432 +362 +296 +207 +106 +-8 +-170 +-328 +-475 +-604 +-716 +-865 +-1043 +-1221 +-1338 +-1429 +-1471 +-1398 +-1242 +-1070 +-851 +-656 +-499 +-272 +-33 +170 +389 +577 +685 +761 +830 +873 +894 +913 +913 +915 +906 +884 +867 +838 +794 +716 +620 +526 +454 +391 +320 +253 +184 +59 +-105 +-256 +-379 +-536 +-667 +-799 +-965 +-1126 +-1267 +-1369 +-1446 +-1432 +-1312 +-1144 +-945 +-727 +-551 +-355 +-140 +71 +290 +512 +643 +733 +791 +833 +865 +886 +902 +908 +895 +865 +851 +847 +824 +760 +678 +572 +484 +424 +364 +302 +230 +118 +-34 +-180 +-327 +-483 +-616 +-731 +-872 +-1053 +-1211 +-1322 +-1421 +-1467 +-1402 +-1252 +-1063 +-831 +-633 +-463 +-266 +-42 +192 +429 +603 +702 +775 +810 +860 +894 +914 +914 +899 +868 +842 +829 +819 +772 +700 +604 +502 +429 +375 +325 +265 +176 +40 +-116 +-256 +-394 +-537 +-667 +-799 +-954 +-1124 +-1254 +-1355 +-1442 +-1447 +-1323 +-1141 +-932 +-707 +-546 +-378 +-143 +77 +302 +511 +653 +727 +781 +825 +868 +909 +926 +908 +878 +859 +843 +838 +821 +759 +658 +556 +479 +431 +372 +319 +229 +109 +-38 +-193 +-318 +-462 +-611 +-740 +-887 +-1039 +-1190 +-1312 +-1411 +-1469 +-1403 +-1247 +-1032 +-798 +-615 +-462 +-253 +-25 +203 +440 +613 +701 +755 +805 +845 +888 +922 +909 +874 +844 +826 +824 +819 +779 +690 +585 +502 +446 +399 +349 +269 +165 +44 +-105 +-248 +-380 +-518 +-659 +-801 +-944 +-1095 +-1239 +-1365 +-1449 +-1450 +-1327 +-1128 +-907 +-699 +-529 +-358 +-148 +100 +338 +533 +670 +738 +767 +831 +885 +911 +917 +888 +841 +813 +812 +811 +788 +713 +612 +518 +457 +413 +363 +301 +201 +89 +-42 +-192 +-321 +-456 +-601 +-736 +-864 +-1021 +-1175 +-1287 +-1401 +-1460 +-1378 +-1203 +-995 +-772 +-592 +-443 +-246 +-7 +226 +450 +605 +682 +728 +785 +842 +882 +890 +864 +830 +803 +790 +806 +807 +756 +666 +571 +498 +449 +399 +333 +254 +144 +15 +-117 +-251 +-387 +-529 +-674 +-803 +-944 +-1101 +-1236 +-1366 +-1467 +-1452 +-1311 +-1112 +-883 +-673 +-523 +-343 +-106 +130 +364 +557 +663 +723 +779 +836 +876 +904 +889 +853 +824 +809 +805 +806 +782 +705 +606 +517 +454 +403 +348 +273 +174 +74 +-42 +-179 +-309 +-450 +-599 +-728 +-854 +-1005 +-1164 +-1300 +-1425 +-1473 +-1383 +-1195 +-973 +-760 +-591 +-435 +-231 +9 +246 +459 +609 +693 +749 +806 +867 +901 +910 +876 +840 +823 +824 +824 +805 +751 +663 +574 +501 +448 +394 +320 +229 +128 +16 +-115 +-254 +-393 +-542 +-678 +-799 +-930 +-1082 +-1233 +-1362 +-1448 +-1422 +-1270 +-1072 +-862 +-671 +-517 +-337 +-99 +135 +363 +549 +657 +725 +787 +844 +875 +888 +871 +833 +815 +811 +814 +819 +787 +708 +624 +550 +487 +427 +349 +264 +177 +76 +-42 +-182 +-319 +-466 +-604 +-726 +-862 +-1010 +-1173 +-1323 +-1441 +-1479 +-1383 +-1200 +-989 +-784 +-614 +-437 +-224 +14 +260 +469 +602 +700 +769 +821 +863 +881 +876 +857 +833 +822 +820 +819 +800 +740 +661 +577 +500 +434 +364 +291 +206 +109 +12 +-115 +-260 +-412 +-564 +-686 +-803 +-944 +-1114 +-1276 +-1398 +-1473 +-1432 +-1275 +-1081 +-876 +-687 +-536 +-349 +-107 +127 +347 +533 +646 +722 +783 +835 +863 +871 +859 +838 +825 +820 +813 +810 +780 +721 +640 +561 +486 +407 +335 +252 +171 +75 +-47 +-192 +-344 +-493 +-628 +-745 +-866 +-1036 +-1207 +-1344 +-1446 +-1456 +-1354 +-1182 +-991 +-786 +-615 +-437 +-212 +25 +258 +469 +619 +707 +773 +829 +862 +874 +870 +851 +837 +832 +824 +815 +799 +756 +692 +613 +533 +455 +378 +304 +235 +156 +41 +-99 +-244 +-391 +-533 +-663 +-792 +-935 +-1107 +-1270 +-1389 +-1448 +-1408 +-1269 +-1085 +-887 +-693 +-518 +-323 +-82 +155 +368 +553 +676 +760 +812 +854 +873 +877 +876 +863 +842 +834 +823 +808 +776 +728 +657 +566 +482 +403 +336 +269 +190 +94 +-32 +-188 +-340 +-485 +-615 +-732 +-873 +-1040 +-1197 +-1323 +-1419 +-1429 +-1337 +-1173 +-989 +-777 +-592 +-408 +-178 +47 +272 +481 +628 +725 +787 +827 +853 +865 +864 +856 +845 +824 +808 +801 +791 +752 +688 +607 +514 +420 +343 +287 +230 +141 +9 +-137 +-288 +-426 +-563 +-690 +-810 +-967 +-1138 +-1280 +-1387 +-1450 +-1409 +-1283 +-1111 +-914 +-710 +-516 +-307 +-78 +154 +379 +558 +689 +769 +812 +841 +857 +867 +871 +852 +828 +804 +788 +783 +765 +715 +634 +530 +436 +371 +309 +255 +184 +82 +-68 +-222 +-357 +-496 +-628 +-747 +-891 +-1069 +-1216 +-1329 +-1418 +-1450 +-1366 +-1214 +-1022 +-799 +-605 +-422 +-190 +39 +249 +463 +625 +728 +778 +807 +832 +847 +872 +868 +841 +811 +792 +791 +793 +768 +698 +594 +495 +422 +363 +313 +244 +143 +4 +-150 +-300 +-435 +-564 +-683 +-824 +-982 +-1132 +-1264 +-1364 +-1429 +-1414 +-1289 +-1108 +-884 +-666 +-481 +-284 +-63 +163 +389 +579 +699 +764 +791 +814 +835 +858 +867 +854 +821 +792 +788 +804 +799 +744 +652 +548 +461 +404 +356 +300 +211 +89 +-62 +-218 +-341 +-466 +-597 +-730 +-883 +-1038 +-1182 +-1302 +-1401 +-1432 +-1358 +-1196 +-983 +-746 +-542 +-362 +-162 +71 +303 +510 +665 +749 +776 +799 +830 +858 +879 +870 +833 +798 +792 +807 +815 +779 +699 +593 +500 +437 +390 +343 +254 +139 +-5 +-150 +-280 +-401 +-538 +-670 +-812 +-971 +-1119 +-1240 +-1354 +-1441 +-1424 +-1288 +-1090 +-856 +-637 +-465 +-278 +-61 +170 +402 +596 +696 +737 +770 +804 +839 +867 +859 +833 +800 +778 +785 +806 +796 +725 +629 +536 +463 +411 +363 +292 +183 +38 +-102 +-222 +-343 +-486 +-630 +-761 +-899 +-1063 +-1206 +-1330 +-1446 +-1482 +-1393 +-1210 +-983 +-747 +-565 +-392 +-177 +55 +292 +508 +649 +712 +737 +768 +810 +851 +861 +827 +785 +758 +761 +777 +784 +744 +658 +560 +482 +434 +384 +317 +216 +98 +-30 +-169 +-295 +-420 +-565 +-702 +-831 +-978 +-1129 +-1262 +-1394 +-1476 +-1441 +-1291 +-1082 +-846 +-644 +-489 +-301 +-68 +179 +410 +581 +665 +709 +748 +795 +837 +858 +840 +804 +774 +766 +785 +804 +785 +716 +629 +547 +484 +431 +366 +278 +167 +43 +-84 +-212 +-336 +-487 +-626 +-747 +-888 +-1030 +-1180 +-1324 +-1440 +-1467 +-1355 +-1164 +-943 +-730 +-555 +-382 +-162 +87 +330 +537 +661 +720 +758 +801 +850 +875 +863 +832 +799 +781 +790 +812 +811 +763 +688 +600 +526 +468 +397 +315 +222 +117 +-6 +-130 +-253 +-401 +-549 +-674 +-794 +-947 +-1105 +-1255 +-1388 +-1464 +-1408 +-1244 +-1036 +-820 +-635 +-469 +-267 +-21 +225 +444 +608 +702 +751 +799 +846 +876 +883 +860 +820 +793 +790 +798 +812 +786 +721 +644 +561 +492 +422 +337 +248 +152 +48 +-79 +-216 +-356 +-506 +-629 +-743 +-880 +-1042 +-1202 +-1334 +-1438 +-1444 +-1325 +-1138 +-933 +-728 +-565 +-395 +-159 +90 +313 +512 +634 +701 +755 +812 +849 +864 +852 +816 +786 +781 +785 +793 +795 +757 +681 +593 +513 +438 +360 +271 +178 +84 +-38 +-187 +-320 +-466 +-595 +-709 +-836 +-985 +-1148 +-1296 +-1419 +-1472 +-1406 +-1246 +-1055 +-839 +-653 +-484 +-275 +-28 +214 +429 +590 +680 +734 +783 +831 +847 +836 +810 +782 +755 +755 +771 +781 +764 +718 +646 +554 +473 +393 +312 +234 +144 +25 +-109 +-257 +-402 +-530 +-643 +-763 +-896 +-1052 +-1215 +-1348 +-1442 +-1437 +-1320 +-1138 +-947 +-742 +-560 +-382 +-141 +112 +333 +529 +649 +723 +775 +809 +836 +845 +831 +796 +778 +773 +775 +794 +795 +757 +692 +614 +525 +439 +362 +295 +219 +111 +-15 +-153 +-297 +-447 +-570 +-676 +-799 +-954 +-1131 +-1277 +-1381 +-1433 +-1371 +-1216 +-1033 +-826 +-637 +-454 +-235 +12 +248 +457 +615 +717 +774 +803 +835 +844 +838 +820 +799 +784 +786 +798 +809 +798 +752 +667 +578 +493 +408 +329 +270 +187 +68 +-81 +-236 +-369 +-507 +-622 +-730 +-881 +-1058 +-1208 +-1333 +-1416 +-1412 +-1299 +-1136 +-939 +-730 +-545 +-354 +-112 +132 +355 +549 +679 +754 +796 +831 +841 +838 +830 +812 +795 +785 +780 +792 +795 +771 +706 +608 +514 +427 +360 +300 +221 +125 +-13 +-172 +-315 +-446 +-567 +-683 +-810 +-981 +-1148 +-1286 +-1393 +-1433 +-1378 +-1242 +-1062 +-853 +-649 +-460 +-243 +6 +221 +442 +616 +713 +766 +800 +811 +815 +821 +812 +796 +779 +769 +778 +800 +789 +741 +662 +557 +456 +388 +328 +260 +169 +41 +-115 +-269 +-413 +-528 +-633 +-761 +-921 +-1088 +-1228 +-1351 +-1422 +-1428 +-1334 +-1176 +-971 +-744 +-555 +-356 +-125 +104 +334 +533 +662 +748 +786 +799 +810 +824 +821 +814 +795 +767 +761 +783 +794 +766 +698 +597 +493 +410 +354 +303 +221 +103 +-38 +-190 +-331 +-459 +-565 +-683 +-827 +-992 +-1149 +-1270 +-1377 +-1438 +-1402 +-1269 +-1088 +-858 +-642 +-453 +-243 +-14 +217 +445 +607 +711 +767 +786 +802 +820 +839 +841 +828 +803 +781 +795 +825 +817 +762 +662 +552 +463 +395 +336 +274 +169 +28 +-130 +-272 +-380 +-509 +-632 +-749 +-899 +-1063 +-1198 +-1311 +-1417 +-1438 +-1347 +-1189 +-972 +-738 +-537 +-342 +-120 +113 +351 +558 +691 +765 +791 +808 +826 +854 +871 +860 +828 +801 +797 +833 +851 +806 +721 +601 +503 +436 +377 +312 +210 +93 +-51 +-207 +-337 +-457 +-575 +-701 +-838 +-993 +-1141 +-1264 +-1375 +-1457 +-1429 +-1278 +-1075 +-831 +-607 +-434 +-236 +15 +246 +468 +656 +746 +770 +793 +818 +840 +866 +859 +824 +792 +786 +813 +840 +826 +753 +645 +548 +463 +402 +342 +258 +143 +-3 +-145 +-286 +-411 +-537 +-665 +-783 +-934 +-1081 +-1215 +-1338 +-1453 +-1478 +-1371 +-1194 +-962 +-707 +-534 +-360 +-127 +116 +350 +566 +692 +734 +770 +799 +827 +855 +858 +829 +798 +782 +793 +825 +845 +795 +702 +604 +508 +432 +370 +294 +183 +53 +-100 +-238 +-352 +-496 +-633 +-734 +-873 +-1024 +-1159 +-1287 +-1433 +-1520 +-1466 +-1293 +-1073 +-835 +-630 +-450 +-238 +-3 +248 +486 +650 +737 +779 +794 +824 +854 +875 +850 +810 +775 +776 +809 +846 +826 +749 +649 +557 +487 +417 +334 +239 +116 +-20 +-156 +-292 +-415 +-560 +-679 +-785 +-922 +-1096 +-1232 +-1363 +-1487 +-1506 +-1373 +-1165 +-926 +-694 +-540 +-346 +-98 +153 +387 +593 +717 +765 +792 +836 +860 +882 +878 +842 +812 +798 +803 +853 +873 +810 +722 +623 +551 +481 +392 +289 +177 +57 +-75 +-213 +-349 +-493 +-629 +-725 +-838 +-1011 +-1171 +-1308 +-1449 +-1514 +-1434 +-1267 +-1052 +-797 +-602 +-456 +-231 +45 +278 +517 +691 +745 +782 +841 +874 +891 +908 +884 +831 +810 +825 +840 +872 +848 +765 +676 +587 +503 +416 +323 +215 +107 +-6 +-164 +-307 +-452 +-582 +-678 +-802 +-949 +-1114 +-1266 +-1405 +-1522 +-1510 +-1351 +-1163 +-937 +-712 +-549 +-367 +-93 +175 +400 +603 +714 +761 +802 +859 +886 +883 +867 +850 +817 +803 +825 +863 +857 +803 +732 +640 +541 +456 +360 +245 +150 +29 +-107 +-250 +-399 +-556 +-663 +-752 +-879 +-1062 +-1234 +-1350 +-1471 +-1546 +-1442 +-1259 +-1068 +-823 +-641 +-487 +-252 +47 +296 +512 +654 +729 +778 +839 +883 +889 +882 +859 +843 +833 +831 +857 +896 +870 +798 +703 +603 +511 +398 +300 +210 +90 +-20 +-185 +-338 +-462 +-622 +-727 +-803 +-973 +-1170 +-1302 +-1409 +-1535 +-1509 +-1334 +-1158 +-949 +-721 +-562 +-356 +-68 +204 +429 +612 +705 +773 +844 +890 +883 +891 +889 +866 +852 +852 +866 +901 +923 +864 +780 +678 +574 +476 +373 +280 +147 +58 +-64 +-264 +-405 +-548 +-674 +-781 +-891 +-1085 +-1278 +-1368 +-1481 +-1544 +-1429 +-1254 +-1068 +-830 +-664 +-466 +-183 +98 +302 +528 +688 +748 +828 +889 +891 +900 +911 +886 +879 +865 +864 +898 +933 +905 +826 +739 +634 +501 +397 +303 +196 +94 +-22 +-193 +-362 +-511 +-644 +-734 +-858 +-1019 +-1199 +-1335 +-1458 +-1535 +-1504 +-1357 +-1195 +-964 +-750 +-580 +-342 +-64 +183 +410 +590 +699 +792 +840 +880 +886 +885 +887 +878 +869 +866 +878 +921 +934 +871 +781 +671 +550 +437 +329 +247 +135 +10 +-160 +-304 +-459 +-617 +-704 +-798 +-950 +-1136 +-1287 +-1406 +-1508 +-1553 +-1458 +-1300 +-1110 +-863 +-662 +-483 +-195 +79 +283 +507 +668 +767 +814 +854 +875 +877 +902 +907 +886 +892 +877 +914 +963 +932 +847 +734 +617 +503 +390 +294 +191 +75 +-64 +-260 +-399 +-553 +-697 +-758 +-850 +-1059 +-1248 +-1333 +-1447 +-1545 +-1518 +-1373 +-1210 +-955 +-695 +-550 +-310 +-12 +206 +445 +642 +732 +794 +859 +894 +870 +912 +920 +915 +931 +920 +913 +958 +975 +912 +804 +664 +524 +438 +344 +233 +136 +-3 +-184 +-345 +-480 +-628 +-718 +-807 +-929 +-1145 +-1278 +-1368 +-1489 +-1525 +-1431 +-1279 +-1061 +-798 +-612 +-419 +-124 +135 +318 +569 +716 +-1208 +-1320 +-1408 +-1389 +-1260 +-1087 +-877 +-679 +-502 +-309 +-81 +154 +370 +536 +640 +703 +739 +766 +787 +811 +822 +826 +831 +847 +881 +921 +931 +887 +800 +677 +539 +408 +292 +178 +56 +-67 +-204 +-354 +-487 +-610 +-718 +-804 +-895 +-1022 +-1143 +-1256 +-1354 +-1384 +-1306 +-1147 +-954 +-744 +-565 +-379 +-150 +75 +290 +487 +615 +690 +736 +758 +781 +807 +822 +833 +833 +849 +878 +923 +953 +933 +864 +755 +627 +492 +359 +250 +135 +13 +-127 +-291 +-431 +-561 +-668 +-754 +-857 +-965 +-1083 +-1200 +-1304 +-1368 +-1346 +-1227 +-1048 +-833 +-635 +-453 +-246 +-18 +201 +406 +575 +676 +731 +756 +771 +785 +800 +823 +828 +833 +852 +884 +923 +933 +891 +799 +670 +527 +406 +298 +186 +60 +-75 +-226 +-384 +-516 +-629 +-729 +-809 +-914 +-1042 +-1154 +-1259 +-1348 +-1364 +-1275 +-1125 +-929 +-712 +-530 +-338 +-115 +99 +304 +493 +618 +685 +712 +728 +746 +769 +797 +808 +816 +822 +852 +905 +939 +911 +841 +724 +583 +456 +338 +244 +123 +-18 +-178 +-340 +-470 +-583 +-683 +-773 +-872 +-983 +-1107 +-1209 +-1306 +-1368 +-1335 +-1206 +-1020 +-801 +-593 +-408 +-203 +5 +218 +421 +578 +673 +713 +715 +722 +752 +787 +804 +814 +821 +835 +879 +933 +931 +871 +768 +641 +516 +395 +299 +188 +51 +-105 +-277 +-421 +-535 +-634 +-728 +-827 +-924 +-1040 +-1153 +-1248 +-1337 +-1354 +-1261 +-1095 +-885 +-664 +-481 +-292 +-86 +129 +349 +534 +641 +690 +708 +720 +740 +779 +811 +818 +820 +830 +865 +919 +945 +911 +819 +686 +556 +439 +338 +238 +99 +-63 +-218 +-370 +-494 +-601 +-701 +-791 +-894 +-1007 +-1117 +-1215 +-1313 +-1369 +-1322 +-1182 +-980 +-743 +-547 +-379 +-177 +34 +251 +456 +599 +681 +696 +710 +728 +762 +803 +823 +810 +809 +842 +898 +935 +920 +850 +734 +610 +502 +395 +291 +163 +2 +-163 +-314 +-441 +-561 +-658 +-753 +-863 +-970 +-1073 +-1176 +-1283 +-1372 +-1365 +-1252 +-1067 +-828 +-615 +-446 +-266 +-46 +179 +384 +565 +657 +686 +703 +725 +756 +802 +827 +819 +811 +830 +880 +938 +948 +893 +794 +671 +551 +443 +344 +221 +74 +-93 +-259 +-383 +-499 +-607 +-711 +-805 +-905 +-1013 +-1116 +-1220 +-1329 +-1378 +-1302 +-1142 +-925 +-693 +-510 +-347 +-144 +84 +307 +507 +633 +686 +707 +725 +753 +795 +823 +826 +816 +819 +851 +911 +946 +913 +823 +712 +598 +498 +392 +268 +120 +-42 +-187 +-343 +-461 +-557 +-679 +-773 +-864 +-975 +-1081 +-1181 +-1291 +-1373 +-1348 +-1209 +-1007 +-769 +-579 +-423 +-236 +-10 +214 +427 +581 +659 +691 +711 +744 +781 +809 +815 +812 +802 +831 +884 +927 +920 +858 +752 +633 +526 +422 +301 +161 +-4 +-158 +-300 +-426 +-528 +-637 +-744 +-843 +-928 +-1037 +-1137 +-1253 +-1363 +-1386 +-1281 +-1103 +-878 +-659 +-495 +-320 +-105 +122 +335 +524 +636 +676 +695 +730 +761 +801 +822 +815 +800 +818 +866 +917 +936 +893 +800 +688 +580 +471 +353 +223 +65 +-96 +-235 +-365 +-482 +-600 +-701 +-798 +-895 +-992 +-1097 +-1211 +-1326 +-1389 +-1327 +-1168 +-955 +-727 +-543 +-383 +-183 +46 +268 +469 +602 +667 +693 +718 +750 +784 +807 +812 +807 +818 +857 +913 +954 +928 +847 +747 +642 +535 +415 +279 +135 +-16 +-165 +-299 +-414 +-537 +-655 +-756 +-846 +-938 +-1037 +-1148 +-1265 +-1356 +-1357 +-1228 +-1032 +-812 +-618 +-454 +-278 +-63 +164 +383 +553 +644 +684 +714 +745 +776 +806 +813 +804 +807 +836 +890 +944 +947 +890 +795 +688 +581 +464 +332 +190 +39 +-108 +-244 +-372 +-496 +-613 +-730 +-824 +-908 +-1006 +-1121 +-1235 +-1340 +-1383 +-1293 +-1122 +-908 +-691 +-523 +-364 +-155 +74 +293 +486 +610 +663 +697 +730 +753 +778 +794 +797 +794 +811 +853 +910 +937 +908 +834 +728 +619 +504 +376 +234 +86 +-54 +-186 +-321 +-446 +-571 +-681 +-780 +-869 +-966 +-1078 +-1193 +-1305 +-1383 +-1349 +-1202 +-1005 +-784 +-598 +-439 +-250 +-25 +203 +403 +558 +649 +681 +711 +749 +770 +790 +792 +788 +799 +840 +899 +938 +933 +873 +786 +680 +564 +435 +299 +163 +16 +-121 +-254 +-386 +-519 +-645 +-737 +-832 +-915 +-1017 +-1134 +-1248 +-1350 +-1369 +-1264 +-1081 +-877 +-672 +-507 +-336 +-116 +121 +336 +516 +626 +685 +720 +750 +772 +793 +798 +795 +811 +836 +878 +926 +945 +905 +831 +733 +615 +480 +344 +209 +82 +-49 +-188 +-324 +-459 +-578 +-692 +-780 +-860 +-958 +-1082 +-1198 +-1307 +-1367 +-1309 +-1157 +-975 +-764 +-581 +-416 +-208 +15 +238 +447 +587 +661 +699 +732 +761 +775 +785 +782 +791 +813 +856 +903 +936 +923 +866 +776 +659 +530 +391 +267 +145 +8 +-118 +-263 +-410 +-532 +-650 +-745 +-824 +-920 +-1038 +-1160 +-1276 +-1364 +-1355 +-1240 +-1063 +-859 +-670 +-508 +-309 +-77 +139 +350 +517 +622 +677 +717 +745 +760 +769 +778 +788 +796 +827 +877 +920 +929 +897 +820 +705 +582 +444 +313 +201 +65 +-68 +-203 +-354 +-491 +-605 +-704 +-788 +-873 +-984 +-1110 +-1224 +-1325 +-1364 +-1292 +-1146 +-959 +-756 +-577 +-391 +-167 +60 +271 +457 +591 +666 +706 +730 +738 +753 +765 +776 +792 +819 +859 +908 +943 +929 +868 +768 +643 +504 +363 +246 +129 +-5 +-137 +-292 +-432 +-560 +-660 +-736 +-818 +-918 +-1044 +-1162 +-1269 +-1339 +-1318 +-1199 +-1034 +-835 +-633 +-451 +-246 +-18 +199 +390 +541 +643 +698 +722 +735 +737 +743 +759 +782 +805 +837 +882 +927 +940 +896 +808 +690 +551 +414 +289 +182 +64 +-71 +-225 +-377 +-496 +-601 +-695 +-773 +-866 +-1000 +-1115 +-1218 +-1306 +-1330 +-1251 +-1102 +-915 +-705 +-518 +-327 +-110 +106 +301 +482 +601 +667 +703 +722 +718 +729 +752 +764 +780 +806 +839 +886 +920 +903 +838 +726 +592 +455 +334 +231 +115 +-21 +-169 +-325 +-455 +-572 +-661 +-741 +-831 +-940 +-1065 +-1175 +-1277 +-1328 +-1298 +-1183 +-1010 +-795 +-587 +-398 +-190 +25 +216 +405 +563 +661 +699 +716 +713 +718 +738 +756 +765 +779 +811 +847 +892 +903 +858 +765 +636 +500 +375 +278 +174 +41 +-111 +-271 +-411 +-526 +-614 +-687 +-774 +-883 +-994 +-1105 +-1205 +-1292 +-1319 +-1236 +-1087 +-885 +-662 +-463 +-267 +-59 +146 +346 +518 +637 +698 +702 +701 +702 +714 +741 +758 +764 +781 +824 +882 +912 +888 +809 +695 +574 +451 +339 +237 +104 +-47 +-207 +-351 +-474 +-575 +-658 +-736 +-838 +-947 +-1049 +-1148 +-1247 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b2_123_471.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b2_123_471.samples new file mode 100644 index 00000000..8c0d12da --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b2_123_471.samples @@ -0,0 +1,4096 @@ +311 +422 +525 +614 +704 +775 +835 +883 +921 +944 +963 +961 +946 +910 +861 +803 +738 +667 +589 +505 +416 +321 +225 +138 +39 +-63 +-158 +-249 +-333 +-405 +-472 +-529 +-576 +-607 +-621 +-624 +-610 +-601 +-592 +-578 +-564 +-543 +-519 +-489 +-456 +-409 +-340 +-258 +-155 +-38 +86 +216 +336 +451 +549 +630 +683 +714 +737 +760 +780 +792 +798 +795 +794 +787 +777 +755 +722 +669 +594 +506 +407 +309 +207 +102 +0 +-90 +-171 +-243 +-306 +-351 +-389 +-425 +-448 +-479 +-513 +-550 +-592 +-638 +-691 +-742 +-788 +-835 +-885 +-927 +-963 +-984 +-985 +-968 +-933 +-889 +-829 +-754 +-641 +-497 +-339 +-166 +14 +202 +393 +588 +780 +962 +1125 +1265 +1379 +1468 +1534 +1571 +1573 +1553 +1499 +1414 +1297 +1140 +955 +741 +510 +260 +7 +-258 +-520 +-768 +-996 +-1196 +-1362 +-1494 +-1591 +-1652 +-1681 +-1671 +-1623 +-1547 +-1448 +-1329 +-1190 +-1025 +-847 +-653 +-456 +-256 +-57 +131 +314 +474 +617 +736 +823 +886 +921 +945 +951 +949 +932 +900 +861 +820 +774 +724 +662 +589 +509 +418 +330 +251 +171 +95 +24 +-42 +-93 +-142 +-183 +-231 +-284 +-331 +-379 +-422 +-473 +-522 +-568 +-604 +-630 +-644 +-642 +-633 +-620 +-601 +-568 +-519 +-462 +-403 +-348 +-288 +-225 +-152 +-77 +1 +81 +155 +231 +303 +384 +453 +517 +566 +609 +656 +690 +728 +761 +782 +795 +801 +797 +786 +760 +729 +683 +627 +566 +494 +415 +325 +231 +124 +11 +-112 +-235 +-366 +-488 +-609 +-724 +-829 +-916 +-983 +-1022 +-1040 +-1023 +-984 +-922 +-838 +-743 +-633 +-522 +-413 +-309 +-211 +-125 +-42 +29 +90 +149 +205 +273 +340 +409 +477 +544 +613 +680 +754 +815 +875 +926 +979 +1018 +1042 +1049 +1035 +1002 +944 +854 +731 +582 +401 +197 +-22 +-251 +-482 +-721 +-947 +-1160 +-1353 +-1516 +-1651 +-1747 +-1805 +-1820 +-1783 +-1711 +-1601 +-1450 +-1266 +-1035 +-777 +-497 +-207 +94 +386 +675 +940 +1179 +1378 +1534 +1646 +1705 +1721 +1701 +1646 +1560 +1445 +1320 +1180 +1018 +837 +646 +448 +249 +54 +-144 +-336 +-519 +-679 +-815 +-926 +-1019 +-1094 +-1158 +-1210 +-1246 +-1263 +-1268 +-1258 +-1230 +-1179 +-1102 +-1007 +-897 +-767 +-632 +-491 +-343 +-198 +-58 +70 +182 +292 +390 +490 +576 +658 +730 +782 +827 +851 +865 +869 +860 +838 +801 +760 +709 +651 +595 +537 +476 +395 +314 +224 +128 +35 +-54 +-146 +-235 +-311 +-382 +-437 +-475 +-512 +-537 +-554 +-565 +-574 +-582 +-589 +-597 +-596 +-589 +-565 +-531 +-487 +-424 +-349 +-257 +-144 +-28 +90 +199 +299 +391 +465 +533 +587 +631 +663 +692 +719 +747 +776 +794 +808 +813 +804 +776 +731 +667 +592 +508 +413 +310 +208 +109 +23 +-53 +-124 +-186 +-240 +-292 +-337 +-374 +-422 +-473 +-524 +-572 +-619 +-664 +-710 +-762 +-815 +-862 +-899 +-931 +-964 +-988 +-999 +-995 +-970 +-917 +-842 +-744 +-622 +-477 +-311 +-130 +52 +246 +440 +622 +796 +963 +1117 +1249 +1363 +1455 +1525 +1570 +1582 +1563 +1497 +1398 +1266 +1098 +901 +674 +426 +170 +-81 +-325 +-561 +-788 +-989 +-1164 +-1309 +-1423 +-1504 +-1554 +-1575 +-1573 +-1541 +-1469 +-1371 +-1249 +-1101 +-945 +-774 +-594 +-403 +-218 +-40 +134 +291 +427 +546 +649 +735 +796 +840 +866 +871 +870 +855 +837 +809 +763 +710 +649 +588 +526 +456 +386 +310 +243 +181 +119 +68 +11 +-37 +-87 +-134 +-178 +-227 +-278 +-336 +-396 +-446 +-490 +-526 +-553 +-580 +-599 +-601 +-594 +-575 +-550 +-528 +-502 +-465 +-418 +-359 +-298 +-238 +-178 +-109 +-37 +40 +119 +194 +262 +328 +392 +445 +501 +551 +601 +648 +691 +729 +759 +783 +802 +809 +802 +784 +753 +716 +661 +600 +526 +443 +354 +255 +151 +34 +-98 +-243 +-381 +-517 +-644 +-756 +-858 +-937 +-994 +-1021 +-1018 +-991 +-940 +-872 +-791 +-704 +-612 +-519 +-430 +-349 +-271 +-198 +-123 +-52 +11 +77 +145 +215 +288 +363 +442 +520 +594 +670 +748 +824 +893 +957 +1015 +1059 +1088 +1094 +1072 +1023 +943 +837 +700 +537 +346 +136 +-87 +-319 +-550 +-783 +-1004 +-1206 +-1385 +-1540 +-1661 +-1752 +-1794 +-1801 +-1757 +-1671 +-1544 +-1371 +-1168 +-927 +-666 +-389 +-103 +183 +456 +723 +959 +1167 +1343 +1479 +1565 +1616 +1637 +1618 +1565 +1482 +1367 +1235 +1085 +914 +738 +548 +351 +155 +-31 +-209 +-379 +-537 +-677 +-801 +-906 +-992 +-1066 +-1124 +-1173 +-1207 +-1228 +-1229 +-1207 +-1165 +-1103 +-1026 +-926 +-813 +-684 +-552 +-420 +-287 +-154 +-24 +95 +215 +315 +414 +504 +588 +660 +717 +756 +784 +798 +801 +793 +776 +761 +738 +711 +674 +638 +591 +536 +474 +397 +316 +225 +129 +31 +-56 +-124 +-192 +-247 +-301 +-346 +-381 +-412 +-439 +-466 +-498 +-533 +-557 +-585 +-603 +-610 +-600 +-578 +-536 +-471 +-389 +-300 +-205 +-106 +-5 +98 +197 +292 +367 +436 +487 +538 +592 +643 +702 +746 +784 +815 +838 +853 +850 +835 +800 +746 +673 +584 +495 +400 +305 +215 +124 +43 +-33 +-111 +-179 +-242 +-306 +-360 +-417 +-467 +-523 +-582 +-638 +-693 +-737 +-780 +-821 +-864 +-912 +-963 +-998 +-1017 +-1027 +-1026 +-1013 +-976 +-913 +-829 +-719 +-585 +-434 +-265 +-87 +100 +293 +475 +658 +826 +996 +1158 +1304 +1429 +1518 +1574 +1603 +1605 +1567 +1489 +1364 +1203 +1009 +795 +569 +330 +83 +-159 +-394 +-618 +-821 +-1004 +-1166 +-1297 +-1404 +-1482 +-1527 +-1539 +-1527 +-1483 +-1407 +-1311 +-1187 +-1052 +-898 +-745 +-580 +-407 +-238 +-60 +101 +250 +381 +500 +606 +692 +759 +817 +852 +865 +860 +845 +825 +788 +743 +684 +626 +566 +506 +448 +389 +334 +278 +224 +179 +142 +95 +42 +-19 +-81 +-140 +-198 +-254 +-312 +-371 +-427 +-470 +-505 +-532 +-553 +-568 +-580 +-581 +-574 +-558 +-536 +-506 +-468 +-419 +-362 +-303 +-239 +-173 +-107 +-33 +39 +108 +175 +234 +288 +346 +405 +468 +528 +588 +646 +695 +744 +790 +828 +855 +869 +863 +849 +822 +781 +727 +664 +591 +503 +395 +280 +154 +18 +-123 +-270 +-411 +-555 +-684 +-795 +-887 +-951 +-996 +-1010 +-1000 +-964 +-905 +-840 +-769 +-692 +-614 +-532 +-456 +-375 +-304 +-233 +-169 +-98 +-25 +48 +129 +201 +275 +345 +422 +505 +594 +679 +762 +847 +925 +994 +1054 +1096 +1109 +1102 +1068 +1004 +912 +785 +633 +455 +266 +52 +-162 +-384 +-607 +-824 +-1030 +-1222 +-1401 +-1542 +-1647 +-1710 +-1734 +-1712 +-1649 +-1544 +-1401 +-1221 +-1005 +-768 +-516 +-252 +9 +267 +517 +753 +968 +1151 +1309 +1429 +1512 +1551 +1558 +1531 +1473 +1385 +1270 +1123 +961 +784 +608 +427 +252 +83 +-86 +-250 +-400 +-526 +-648 +-753 +-850 +-937 +-1008 +-1065 +-1112 +-1141 +-1150 +-1143 +-1113 +-1063 +-992 +-909 +-814 +-711 +-595 +-474 +-351 +-233 +-117 +-4 +108 +218 +319 +410 +493 +564 +615 +653 +681 +699 +708 +715 +717 +711 +695 +676 +650 +620 +588 +539 +477 +402 +322 +247 +169 +91 +21 +-38 +-92 +-133 +-174 +-215 +-258 +-296 +-333 +-374 +-419 +-468 +-514 +-556 +-585 +-601 +-596 +-576 +-542 +-494 +-430 +-350 +-255 +-164 +-72 +12 +92 +169 +237 +305 +365 +425 +480 +538 +596 +652 +704 +750 +781 +805 +813 +802 +775 +736 +680 +607 +535 +459 +375 +291 +209 +128 +51 +-19 +-79 +-144 +-213 +-282 +-345 +-410 +-473 +-531 +-584 +-638 +-692 +-741 +-792 +-832 +-871 +-916 +-956 +-991 +-1017 +-1020 +-1015 +-995 +-952 +-884 +-790 +-675 +-536 +-384 +-224 +-50 +135 +325 +519 +708 +880 +1042 +1188 +1325 +1439 +1520 +1575 +1584 +1556 +1490 +1393 +1267 +1108 +919 +703 +479 +252 +29 +-195 +-414 +-620 +-809 +-976 +-1113 +-1227 +-1318 +-1376 +-1413 +-1418 +-1391 +-1332 +-1256 +-1160 +-1050 +-918 +-774 +-623 +-468 +-322 +-178 +-39 +97 +222 +343 +452 +544 +622 +690 +741 +777 +795 +795 +778 +746 +704 +653 +600 +544 +489 +437 +397 +364 +330 +295 +254 +211 +169 +121 +74 +19 +-45 +-114 +-181 +-241 +-293 +-344 +-389 +-436 +-480 +-512 +-535 +-554 +-570 +-579 +-586 +-577 +-554 +-524 +-492 +-448 +-389 +-326 +-260 +-192 +-130 +-71 +-9 +50 +109 +171 +225 +276 +337 +402 +466 +539 +602 +665 +718 +771 +810 +839 +860 +857 +861 +845 +814 +769 +702 +619 +518 +404 +272 +125 +-26 +-184 +-336 +-479 +-605 +-718 +-802 +-870 +-919 +-945 +-950 +-935 +-905 +-860 +-809 +-752 +-687 +-623 +-559 +-491 +-421 +-351 +-281 +-219 +-156 +-85 +-15 +62 +146 +234 +321 +415 +513 +617 +717 +812 +904 +990 +1064 +1116 +1147 +1155 +1138 +1084 +1003 +894 +760 +606 +424 +224 +7 +-213 +-442 +-661 +-875 +-1079 +-1261 +-1426 +-1553 +-1642 +-1684 +-1678 +-1632 +-1549 +-1430 +-1275 +-1089 +-877 +-648 +-415 +-168 +73 +310 +543 +762 +971 +1153 +1303 +1417 +1493 +1526 +1517 +1471 +1392 +1289 +1160 +1019 +857 +686 +521 +358 +201 +50 +-102 +-257 +-402 +-541 +-660 +-768 +-859 +-936 +-1004 +-1055 +-1087 +-1102 +-1102 +-1088 +-1056 +-1008 +-937 +-859 +-771 +-670 +-567 +-451 +-325 +-201 +-78 +41 +146 +238 +321 +395 +466 +518 +561 +592 +612 +625 +636 +649 +657 +661 +655 +638 +605 +569 +526 +478 +423 +362 +288 +219 +156 +97 +48 +8 +-25 +-63 +-98 +-134 +-180 +-238 +-300 +-358 +-421 +-474 +-525 +-566 +-596 +-604 +-591 +-560 +-506 +-447 +-382 +-313 +-240 +-165 +-86 +-14 +57 +122 +190 +256 +320 +391 +462 +534 +604 +666 +718 +762 +786 +799 +805 +794 +770 +729 +676 +615 +546 +476 +402 +331 +258 +180 +103 +22 +-53 +-124 +-195 +-263 +-330 +-396 +-472 +-542 +-606 +-668 +-723 +-775 +-827 +-886 +-930 +-969 +-1004 +-1026 +-1041 +-1042 +-1022 +-988 +-938 +-872 +-784 +-674 +-538 +-378 +-214 +-36 +145 +331 +532 +731 +922 +1096 +1249 +1375 +1479 +1552 +1591 +1589 +1545 +1465 +1347 +1206 +1035 +842 +633 +412 +190 +-25 +-240 +-445 +-640 +-822 +-981 +-1115 +-1219 +-1297 +-1350 +-1379 +-1376 +-1338 +-1279 +-1196 +-1098 +-979 +-862 +-742 +-611 +-481 +-352 +-219 +-88 +37 +157 +275 +387 +485 +573 +640 +686 +715 +729 +724 +702 +672 +631 +588 +543 +505 +472 +434 +398 +365 +337 +306 +278 +237 +186 +134 +80 +32 +-19 +-74 +-130 +-187 +-242 +-294 +-338 +-383 +-433 +-474 +-506 +-529 +-545 +-558 +-564 +-560 +-541 +-507 +-462 +-409 +-354 +-302 +-248 +-187 +-127 +-76 +-24 +27 +85 +143 +204 +270 +328 +402 +471 +547 +620 +681 +739 +793 +835 +874 +904 +918 +921 +906 +876 +825 +754 +663 +548 +413 +264 +112 +-44 +-193 +-341 +-477 +-593 +-692 +-770 +-830 +-868 +-890 +-888 +-875 +-849 +-816 +-779 +-728 +-673 +-608 +-553 +-495 +-444 +-386 +-328 +-267 +-203 +-138 +-62 +14 +101 +192 +290 +393 +502 +608 +715 +820 +915 +1002 +1074 +1122 +1149 +1148 +1121 +1063 +977 +872 +731 +562 +377 +179 +-36 +-256 +-481 +-709 +-922 +-1122 +-1292 +-1426 +-1524 +-1582 +-1606 +-1582 +-1521 +-1425 +-1295 +-1139 +-967 +-773 +-563 +-341 +-115 +112 +340 +562 +782 +977 +1151 +1285 +1374 +1430 +1440 +1418 +1362 +1273 +1167 +1035 +895 +753 +597 +442 +289 +135 +-14 +-162 +-308 +-447 +-571 +-685 +-778 +-854 +-916 +-968 +-1008 +-1032 +-1039 +-1028 +-1008 +-973 +-925 +-865 +-788 +-691 +-589 +-476 +-362 +-249 +-135 +-28 +70 +159 +240 +304 +361 +410 +454 +486 +517 +542 +564 +581 +590 +595 +594 +585 +569 +543 +503 +455 +404 +354 +308 +263 +220 +184 +152 +127 +100 +75 +35 +-9 +-59 +-112 +-175 +-245 +-323 +-399 +-461 +-504 +-533 +-546 +-543 +-532 +-507 +-465 +-409 +-348 +-282 +-221 +-158 +-95 +-32 +36 +104 +175 +251 +323 +399 +470 +541 +599 +662 +716 +754 +781 +788 +783 +763 +743 +709 +665 +609 +547 +485 +415 +343 +271 +195 +121 +42 +-37 +-111 +-187 +-263 +-341 +-416 +-487 +-553 +-629 +-700 +-764 +-821 +-876 +-922 +-959 +-992 +-1016 +-1028 +-1033 +-1031 +-1015 +-980 +-923 +-851 +-760 +-649 +-521 +-367 +-191 +3 +202 +399 +596 +788 +973 +1145 +1290 +1404 +1489 +1541 +1561 +1545 +1497 +1409 +1291 +1144 +976 +786 +582 +369 +151 +-66 +-270 +-468 +-652 +-819 +-962 +-1083 +-1177 +-1242 +-1277 +-1288 +-1276 +-1235 +-1176 +-1097 +-1007 +-905 +-801 +-689 +-574 +-452 +-337 +-222 +-105 +8 +126 +242 +345 +440 +516 +576 +614 +638 +653 +651 +645 +619 +586 +545 +511 +480 +458 +439 +417 +386 +345 +307 +272 +241 +208 +162 +112 +61 +8 +-42 +-96 +-151 +-211 +-270 +-324 +-377 +-426 +-476 +-516 +-546 +-564 +-563 +-555 +-542 +-521 +-496 +-463 +-421 +-374 +-334 +-295 +-253 +-202 +-153 +-94 +-36 +20 +89 +159 +228 +303 +376 +452 +522 +598 +676 +745 +811 +867 +919 +959 +987 +992 +978 +932 +871 +785 +673 +542 +397 +247 +91 +-64 +-217 +-360 +-486 +-590 +-678 +-744 +-800 +-842 +-867 +-876 +-860 +-839 +-810 +-778 +-746 +-700 +-646 +-593 +-541 +-493 +-445 +-390 +-328 +-259 +-187 +-108 +-20 +71 +173 +282 +398 +519 +639 +757 +865 +959 +1041 +1105 +1148 +1169 +1163 +1126 +1059 +967 +850 +706 +533 +337 +124 +-102 +-331 +-555 +-773 +-973 +-1156 +-1303 +-1411 +-1478 +-1503 +-1497 +-1462 +-1395 +-1295 +-1170 +-1024 +-859 +-678 +-486 +-278 +-62 +166 +386 +605 +809 +985 +1136 +1252 +1326 +1360 +1360 +1332 +1271 +1186 +1080 +963 +834 +689 +547 +397 +245 +100 +-53 +-197 +-333 +-460 +-575 +-673 +-755 +-819 +-874 +-915 +-948 +-973 +-982 +-981 +-952 +-917 +-870 +-801 +-727 +-633 +-534 +-425 +-310 +-197 +-91 +1 +83 +154 +213 +265 +315 +361 +406 +437 +460 +482 +504 +528 +544 +548 +539 +518 +487 +452 +418 +383 +351 +313 +283 +260 +240 +223 +197 +173 +144 +113 +74 +22 +-40 +-104 +-176 +-250 +-313 +-369 +-420 +-463 +-499 +-513 +-514 +-503 +-477 +-449 +-407 +-359 +-308 +-259 +-203 +-140 +-69 +1 +74 +146 +216 +290 +363 +446 +524 +591 +642 +682 +716 +743 +759 +768 +761 +743 +709 +669 +623 +570 +515 +449 +380 +311 +229 +152 +76 +-1 +-80 +-165 +-241 +-322 +-405 +-487 +-563 +-646 +-720 +-775 +-825 +-879 +-922 +-965 +-1008 +-1032 +-1043 +-1041 +-1042 +-1037 +-1005 +-960 +-892 +-788 +-660 +-511 +-351 +-174 +23 +217 +424 +634 +831 +1007 +1166 +1300 +1403 +1480 +1512 +1518 +1494 +1434 +1349 +1229 +1084 +912 +729 +540 +343 +143 +-65 +-266 +-458 +-633 +-792 +-925 +-1029 +-1106 +-1155 +-1187 +-1190 +-1167 +-1129 +-1073 +-1003 +-928 +-844 +-752 +-652 +-558 +-454 +-346 +-232 +-120 +-16 +87 +185 +271 +342 +405 +461 +503 +534 +551 +552 +550 +543 +534 +524 +501 +476 +445 +418 +390 +364 +343 +315 +287 +257 +230 +200 +165 +125 +73 +21 +-37 +-96 +-155 +-220 +-285 +-349 +-399 +-435 +-463 +-488 +-502 +-506 +-502 +-490 +-473 +-456 +-437 +-411 +-379 +-343 +-306 +-271 +-229 +-180 +-122 +-63 +-5 +58 +126 +194 +273 +352 +432 +510 +589 +672 +756 +826 +892 +949 +990 +1015 +1019 +997 +953 +890 +806 +692 +555 +403 +246 +93 +-62 +-203 +-338 +-458 +-565 +-650 +-716 +-761 +-795 +-816 +-827 +-829 +-821 +-802 +-775 +-747 +-711 +-673 +-633 +-591 +-542 +-501 +-452 +-395 +-325 +-243 +-158 +-66 +37 +152 +272 +400 +523 +643 +757 +862 +952 +1034 +1100 +1149 +1172 +1166 +1133 +1070 +977 +845 +685 +501 +287 +53 +-179 +-414 +-631 +-834 +-1015 +-1161 +-1280 +-1361 +-1409 +-1419 +-1404 +-1368 +-1304 +-1216 +-1096 +-953 +-793 +-615 +-424 +-219 +-3 +216 +433 +632 +817 +973 +1098 +1192 +1249 +1270 +1260 +1222 +1164 +1083 +984 +871 +741 +606 +460 +313 +169 +25 +-112 +-249 +-374 +-487 +-587 +-674 +-747 +-801 +-854 +-892 +-921 +-941 +-945 +-935 +-906 +-860 +-800 +-726 +-641 +-545 +-439 +-334 +-236 +-148 +-69 +4 +71 +131 +183 +229 +272 +315 +362 +404 +440 +464 +478 +488 +488 +483 +462 +443 +419 +388 +369 +347 +329 +312 +297 +284 +275 +271 +256 +232 +198 +153 +104 +49 +-6 +-74 +-146 +-217 +-285 +-339 +-385 +-421 +-448 +-468 +-472 +-470 +-460 +-438 +-408 +-365 +-316 +-259 +-203 +-138 +-67 +7 +85 +161 +242 +319 +392 +461 +518 +580 +641 +694 +733 +760 +775 +779 +772 +753 +724 +685 +637 +578 +519 +449 +379 +312 +238 +161 +76 +-13 +-103 +-196 +-288 +-379 +-469 +-555 +-637 +-714 +-784 +-848 +-905 +-951 +-989 +-1026 +-1055 +-1078 +-1093 +-1096 +-1084 +-1050 +-1000 +-934 +-850 +-744 +-607 +-455 +-283 +-93 +104 +307 +511 +705 +893 +1067 +1213 +1339 +1437 +1499 +1535 +1533 +1496 +1430 +1330 +1209 +1060 +889 +700 +495 +288 +81 +-119 +-314 +-495 +-658 +-797 +-915 +-1006 +-1077 +-1124 +-1150 +-1155 +-1142 +-1113 +-1068 +-1009 +-934 +-848 +-757 +-655 +-551 +-442 +-332 +-225 +-119 +-22 +74 +159 +233 +299 +359 +408 +452 +486 +514 +532 +540 +541 +529 +518 +501 +485 +459 +431 +406 +375 +348 +326 +308 +279 +247 +217 +181 +138 +88 +29 +-34 +-98 +-168 +-231 +-292 +-344 +-394 +-439 +-470 +-494 +-504 +-506 +-504 +-501 +-494 +-483 +-464 +-443 +-417 +-390 +-356 +-317 +-273 +-228 +-170 +-108 +-43 +29 +101 +178 +258 +341 +432 +526 +616 +710 +796 +876 +948 +1003 +1048 +1073 +1071 +1039 +979 +896 +798 +680 +541 +393 +241 +91 +-64 +-209 +-335 +-447 +-547 +-633 +-707 +-755 +-791 +-813 +-825 +-825 +-814 +-795 +-774 +-751 +-729 +-702 +-675 +-641 +-601 +-557 +-505 +-442 +-365 +-278 +-176 +-64 +52 +170 +287 +409 +531 +650 +761 +873 +976 +1058 +1128 +1174 +1198 +1182 +1135 +1052 +929 +777 +591 +387 +168 +-58 +-276 +-484 +-679 +-851 +-1000 +-1119 +-1210 +-1269 +-1305 +-1311 +-1294 +-1248 +-1174 +-1082 +-963 +-825 +-670 +-493 +-302 +-102 +102 +299 +491 +673 +831 +965 +1067 +1144 +1189 +1197 +1185 +1138 +1071 +990 +889 +774 +644 +513 +374 +233 +94 +-35 +-157 +-277 +-391 +-494 +-578 +-656 +-719 +-778 +-823 +-865 +-891 +-899 +-893 +-870 +-829 +-768 +-698 +-610 +-526 +-434 +-343 +-258 +-176 +-101 +-34 +23 +77 +126 +174 +221 +268 +311 +343 +376 +393 +404 +404 +399 +387 +376 +360 +339 +318 +297 +289 +284 +289 +293 +295 +296 +288 +281 +273 +253 +218 +174 +123 +69 +9 +-50 +-115 +-178 +-238 +-285 +-329 +-364 +-397 +-422 +-434 +-435 +-425 +-405 +-381 +-350 +-310 +-254 +-200 +-132 +-61 +5 +80 +146 +217 +290 +363 +432 +494 +553 +604 +646 +683 +712 +728 +735 +735 +715 +689 +657 +614 +568 +516 +455 +389 +313 +233 +151 +70 +-14 +-103 +-197 +-295 +-390 +-480 +-568 +-642 +-713 +-779 +-833 +-890 +-938 +-984 +-1026 +-1054 +-1077 +-1093 +-1100 +-1092 +-1059 +-1007 +-931 +-830 +-708 +-561 +-393 +-213 +-21 +172 +368 +560 +741 +916 +1070 +1207 +1317 +1403 +1463 +1490 +1485 +1450 +1379 +1276 +1148 +992 +816 +626 +430 +233 +40 +-150 +-329 +-488 +-628 +-755 +-861 +-938 +-999 +-1043 +-1067 +-1068 +-1058 +-1027 +-981 +-917 +-845 +-760 +-669 +-576 +-476 +-381 +-288 +-193 +-106 +-26 +41 +108 +172 +229 +285 +336 +375 +405 +434 +456 +473 +481 +482 +475 +459 +448 +434 +415 +395 +381 +363 +346 +330 +303 +274 +239 +201 +158 +102 +47 +-17 +-85 +-147 +-208 +-261 +-306 +-351 +-389 +-428 +-453 +-473 +-488 +-496 +-503 +-507 +-504 +-501 +-483 +-469 +-450 +-416 +-382 +-340 +-291 +-232 +-172 +-107 +-32 +51 +142 +235 +333 +436 +540 +638 +735 +832 +915 +990 +1043 +1072 +1079 +1064 +1035 +976 +895 +789 +662 +526 +384 +238 +93 +-48 +-188 +-311 +-422 +-522 +-603 +-675 +-729 +-766 +-795 +-807 +-809 +-810 +-805 +-796 +-781 +-763 +-743 +-718 +-689 +-648 +-596 +-533 +-461 +-374 +-284 +-187 +-78 +37 +154 +275 +400 +524 +652 +777 +895 +1006 +1096 +1169 +1212 +1222 +1192 +1120 +1014 +869 +701 +511 +306 +90 +-118 +-317 +-506 +-674 +-821 +-949 +-1055 +-1134 +-1191 +-1227 +-1235 +-1216 +-1175 +-1102 +-1006 +-889 +-751 +-597 +-422 +-239 +-47 +143 +327 +500 +659 +802 +920 +1011 +1074 +1115 +1122 +1109 +1069 +1005 +923 +821 +708 +585 +465 +337 +208 +77 +-42 +-154 +-266 +-373 +-473 +-560 +-640 +-712 +-773 +-818 +-849 +-866 +-859 +-839 +-801 +-749 +-683 +-612 +-537 +-451 +-376 +-302 +-231 +-166 +-97 +-35 +22 +78 +132 +184 +233 +275 +304 +326 +346 +354 +356 +346 +327 +311 +296 +286 +280 +278 +274 +273 +279 +291 +306 +320 +326 +322 +310 +292 +268 +236 +191 +139 +80 +27 +-30 +-90 +-150 +-209 +-263 +-308 +-344 +-375 +-404 +-431 +-443 +-442 +-426 +-398 +-363 +-324 +-279 +-221 +-156 +-86 +-15 +59 +132 +204 +278 +353 +424 +496 +564 +621 +672 +713 +743 +759 +766 +762 +752 +735 +707 +668 +622 +565 +501 +432 +352 +267 +172 +72 +-29 +-133 +-235 +-331 +-426 +-507 +-590 +-669 +-741 +-811 +-870 +-924 +-977 +-1025 +-1070 +-1107 +-1129 +-1145 +-1138 +-1112 +-1067 +-1001 +-916 +-800 +-663 +-510 +-345 +-163 +27 +220 +409 +590 +763 +925 +1076 +1210 +1322 +1399 +1447 +1468 +1453 +1410 +1336 +1228 +1090 +931 +755 +572 +386 +205 +25 +-151 +-314 +-464 +-594 +-710 +-811 +-891 +-958 +-1006 +-1030 +-1035 +-1024 +-998 +-957 +-901 +-830 +-756 +-667 +-576 +-489 +-403 +-324 +-248 +-169 +-92 +-24 +40 +96 +153 +209 +259 +312 +352 +393 +426 +450 +465 +477 +486 +484 +481 +477 +478 +470 +462 +445 +425 +405 +377 +341 +303 +252 +192 +130 +71 +12 +-48 +-112 +-177 +-232 +-287 +-331 +-373 +-417 +-448 +-478 +-503 +-519 +-528 +-535 +-537 +-531 +-528 +-510 +-491 +-468 +-436 +-397 +-348 +-287 +-217 +-140 +-57 +34 +135 +243 +360 +477 +592 +699 +798 +884 +964 +1028 +1079 +1101 +1103 +1081 +1033 +969 +879 +783 +665 +531 +392 +250 +110 +-26 +-153 +-274 +-380 +-467 +-542 +-605 +-661 +-705 +-737 +-761 +-778 +-790 +-798 +-804 +-805 +-793 +-774 +-747 +-709 +-662 +-608 +-546 +-474 +-393 +-301 +-203 +-101 +10 +129 +257 +389 +524 +666 +795 +921 +1032 +1114 +1168 +1194 +1178 +1132 +1048 +924 +773 +603 +419 +226 +35 +-151 +-329 +-490 +-641 +-774 +-890 +-989 +-1061 +-1113 +-1141 +-1147 +-1128 +-1084 +-1012 +-913 +-794 +-655 +-500 +-339 +-166 +8 +181 +349 +499 +637 +755 +853 +920 +966 +984 +979 +950 +899 +836 +756 +665 +568 +462 +353 +244 +131 +23 +-92 +-200 +-300 +-400 +-487 +-563 +-628 +-684 +-728 +-758 +-769 +-770 +-752 +-720 +-676 +-620 +-565 +-501 +-438 +-372 +-308 +-243 +-180 +-113 +-53 +1 +53 +99 +142 +181 +214 +239 +255 +260 +255 +246 +237 +232 +227 +220 +216 +213 +216 +232 +249 +272 +293 +308 +322 +332 +338 +332 +320 +300 +270 +234 +190 +138 +81 +19 +-38 +-95 +-155 +-212 +-264 +-312 +-353 +-384 +-407 +-419 +-423 +-424 +-411 +-391 +-357 +-313 +-266 +-212 +-148 +-82 +-7 +68 +147 +221 +301 +381 +456 +522 +571 +624 +666 +706 +738 +763 +776 +777 +768 +750 +723 +685 +633 +567 +496 +414 +315 +219 +118 +21 +-79 +-176 +-266 +-354 +-438 +-519 +-593 +-663 +-730 +-795 +-857 +-918 +-976 +-1030 +-1078 +-1116 +-1138 +-1145 +-1130 +-1095 +-1042 +-964 +-864 +-740 +-592 +-435 +-265 +-97 +80 +257 +439 +619 +787 +938 +1074 +1193 +1292 +1365 +1406 +1417 +1392 +1335 +1245 +1132 +999 +844 +681 +508 +329 +158 +-12 +-172 +-321 +-456 +-578 +-688 +-777 +-855 +-916 +-956 +-981 +-986 +-977 +-947 +-902 +-850 +-788 +-721 +-648 +-573 +-498 +-419 +-344 +-267 +-198 +-129 +-60 +0 +59 +111 +162 +212 +259 +306 +337 +371 +399 +433 +463 +487 +510 +522 +533 +535 +540 +534 +522 +497 +464 +429 +385 +344 +293 +236 +165 +95 +32 +-32 +-91 +-153 +-213 +-271 +-326 +-366 +-408 +-450 +-483 +-512 +-535 +-552 +-563 +-569 +-577 +-580 +-575 +-561 +-534 +-504 +-464 +-418 +-356 +-283 +-198 +-96 +15 +135 +254 +377 +500 +626 +740 +844 +932 +1006 +1061 +1094 +1113 +1104 +1075 +1023 +949 +860 +753 +637 +504 +366 +231 +98 +-26 +-147 +-257 +-358 +-449 +-523 +-587 +-636 +-687 +-733 +-766 +-793 +-811 +-818 +-820 +-815 +-801 +-784 +-755 +-714 +-660 +-606 +-548 +-484 +-408 +-319 +-222 +-118 +0 +128 +267 +415 +561 +705 +833 +949 +1043 +1108 +1149 +1150 +1115 +1048 +948 +825 +683 +527 +358 +187 +14 +-158 +-320 +-473 +-605 +-730 +-833 +-915 +-983 +-1032 +-1056 +-1054 +-1030 +-981 +-912 +-819 +-708 +-576 +-430 +-273 +-111 +53 +211 +360 +497 +613 +713 +787 +835 +859 +867 +854 +824 +777 +717 +648 +572 +489 +393 +293 +193 +93 +-9 +-109 +-211 +-308 +-401 +-481 +-550 +-606 +-651 +-682 +-698 +-700 +-685 +-661 +-625 +-586 +-541 +-489 +-431 +-370 +-307 +-249 +-191 +-130 +-79 +-22 +33 +85 +131 +168 +188 +208 +212 +216 +216 +205 +190 +170 +157 +146 +148 +157 +169 +182 +202 +225 +254 +286 +308 +325 +340 +344 +345 +334 +312 +283 +243 +204 +152 +100 +41 +-22 +-82 +-145 +-198 +-249 +-295 +-334 +-373 +-401 +-418 +-426 +-424 +-416 +-401 +-378 +-341 +-295 +-241 +-182 +-114 +-37 +42 +121 +197 +270 +338 +411 +472 +537 +594 +640 +686 +721 +761 +790 +808 +813 +801 +773 +727 +670 +604 +525 +433 +335 +233 +129 +28 +-68 +-159 +-251 +-336 +-420 +-498 +-572 +-646 +-716 +-786 +-855 +-921 +-984 +-1040 +-1084 +-1120 +-1145 +-1151 +-1127 +-1078 +-1011 +-919 +-811 +-691 +-549 +-388 +-218 +-49 +124 +297 +463 +629 +792 +945 +1078 +1190 +1282 +1342 +1376 +1375 +1341 +1278 +1188 +1077 +944 +798 +643 +480 +315 +155 +2 +-146 +-285 +-413 +-530 +-635 +-726 +-800 +-853 +-894 +-916 +-922 +-914 +-894 +-860 +-816 +-765 +-704 +-638 +-572 +-502 +-428 +-352 +-282 +-213 +-149 +-90 +-35 +21 +67 +107 +149 +187 +221 +263 +303 +342 +380 +418 +461 +499 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b3_246_942.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b3_246_942.samples new file mode 100644 index 00000000..ef586cea --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b3_246_942.samples @@ -0,0 +1,4096 @@ +2068 +1842 +1291 +663 +271 +249 +492 +764 +857 +696 +366 +22 +-259 +-557 +-919 +-1274 +-1515 +-1543 +-1294 +-879 +-606 +-682 +-1009 +-1343 +-1514 +-1474 +-1250 +-883 +-476 +-151 +78 +301 +573 +798 +835 +684 +514 +489 +656 +995 +1436 +1771 +1827 +1690 +1539 +1416 +1284 +1122 +949 +703 +330 +-110 +-492 +-727 +-833 +-868 +-880 +-860 +-806 +-782 +-770 +-681 +-522 +-432 +-503 +-703 +-986 +-1252 +-1337 +-1128 +-757 +-468 +-391 +-523 +-762 +-856 +-573 +71 +751 +1145 +1232 +1221 +1318 +1496 +1590 +1456 +1091 +665 +423 +535 +872 +1118 +1109 +926 +706 +495 +371 +358 +351 +206 +-137 +-566 +-942 +-1190 +-1293 +-1323 +-1359 +-1481 +-1690 +-1874 +-1861 +-1598 +-1196 +-792 +-486 +-320 +-289 +-278 +-134 +131 +321 +278 +40 +-175 +-167 +109 +493 +761 +826 +748 +707 +838 +1152 +1519 +1753 +1757 +1557 +1259 +966 +742 +603 +466 +253 +27 +-132 +-220 +-310 +-476 +-775 +-1163 +-1521 +-1742 +-1759 +-1566 +-1275 +-1116 +-1217 +-1447 +-1591 +-1528 +-1300 +-1017 +-756 +-564 +-412 +-204 +123 +467 +661 +673 +616 +646 +869 +1259 +1669 +1901 +1830 +1507 +1150 +984 +1056 +1186 +1177 +1023 +836 +684 +588 +513 +368 +65 +-382 +-812 +-1116 +-1229 +-1176 +-1090 +-1109 +-1281 +-1477 +-1565 +-1516 +-1391 +-1261 +-1168 +-1093 +-957 +-664 +-235 +199 +487 +546 +416 +262 +258 +462 +804 +1160 +1426 +1526 +1527 +1548 +1603 +1632 +1622 +1554 +1352 +1007 +640 +318 +4 +-279 +-506 +-698 +-861 +-942 +-930 +-834 +-626 +-396 +-370 +-656 +-1107 +-1450 +-1495 +-1233 +-852 +-637 +-730 +-1003 +-1198 +-1158 +-904 +-543 +-177 +129 +405 +735 +1104 +1399 +1532 +1483 +1288 +1046 +894 +877 +942 +1030 +1080 +1032 +921 +864 +888 +921 +939 +936 +852 +602 +232 +-146 +-446 +-657 +-879 +-1204 +-1600 +-1886 +-1953 +-1828 +-1629 +-1466 +-1368 +-1315 +-1225 +-1041 +-796 +-576 +-428 +-331 +-261 +-193 +-94 +29 +145 +231 +299 +388 +531 +726 +946 +1157 +1360 +1565 +1701 +1734 +1730 +1737 +1669 +1446 +1134 +855 +682 +612 +537 +289 +-186 +-733 +-1154 +-1347 +-1324 +-1238 +-1242 +-1399 +-1605 +-1727 +-1735 +-1673 +-1640 +-1700 +-1815 +-1801 +-1492 +-950 +-420 +-124 +-85 +-141 +-87 +150 +513 +885 +1179 +1386 +1504 +1568 +1621 +1645 +1577 +1437 +1327 +1302 +1345 +1427 +1429 +1219 +790 +314 +-25 +-195 +-274 +-387 +-630 +-965 +-1276 +-1484 +-1553 +-1507 +-1472 +-1591 +-1824 +-1960 +-1821 +-1437 +-951 +-529 +-280 +-220 +-228 +-149 +56 +300 +468 +528 +546 +644 +913 +1316 +1690 +1881 +1863 +1753 +1695 +1734 +1764 +1667 +1398 +1010 +551 +67 +-369 +-670 +-793 +-787 +-750 +-769 +-876 +-985 +-1006 +-919 +-800 +-794 +-946 +-1142 +-1227 +-1146 +-997 +-939 +-1061 +-1300 +-1464 +-1382 +-1004 +-415 +182 +630 +875 +1017 +1178 +1373 +1496 +1480 +1370 +1259 +1182 +1101 +991 +886 +837 +843 +899 +951 +938 +852 +785 +783 +780 +642 +313 +-161 +-634 +-966 +-1152 +-1268 +-1381 +-1529 +-1672 +-1711 +-1625 +-1450 +-1291 +-1184 +-1069 +-895 +-701 +-547 +-434 +-305 +-139 +28 +152 +187 +178 +198 +270 +374 +499 +662 +869 +1140 +1454 +1703 +1779 +1652 +1408 +1181 +1093 +1194 +1377 +1419 +1156 +624 +25 +-410 +-616 +-707 +-818 +-967 +-1097 +-1168 +-1215 +-1293 +-1451 +-1658 +-1832 +-1915 +-1866 +-1717 +-1494 +-1218 +-974 +-826 +-736 +-612 +-404 +-96 +249 +560 +823 +1053 +1245 +1375 +1407 +1363 +1310 +1298 +1350 +1469 +1610 +1671 +1572 +1322 +1030 +791 +628 +481 +272 +-28 +-350 +-624 +-806 +-897 +-966 +-1103 +-1334 +-1612 +-1855 +-1991 +-1972 +-1778 +-1444 +-1067 +-713 +-428 +-274 +-276 +-358 +-376 +-256 +-32 +194 +343 +459 +644 +931 +1249 +1475 +1545 +1523 +1557 +1753 +2051 +2176 +1916 +1305 +564 +-39 +-364 +-439 +-411 +-432 +-539 +-690 +-791 +-766 +-675 +-655 +-768 +-901 +-912 +-820 +-724 +-735 +-900 +-1196 +-1543 +-1801 +-1835 +-1557 +-999 +-313 +260 +571 +642 +606 +676 +973 +1352 +1571 +1527 +1295 +1038 +893 +909 +997 +1001 +834 +581 +442 +533 +828 +1143 +1304 +1230 +917 +435 +-86 +-485 +-687 +-803 +-976 +-1257 +-1558 +-1771 +-1766 +-1562 +-1315 +-1182 +-1199 +-1238 +-1144 +-867 +-515 +-238 +-111 +-87 +-64 +18 +164 +298 +293 +151 +10 +104 +489 +1006 +1392 +1491 +1341 +1121 +1023 +1099 +1276 +1430 +1496 +1454 +1296 +1026 +677 +265 +-144 +-456 +-644 +-726 +-710 +-657 +-683 +-863 +-1164 +-1461 +-1669 +-1752 +-1735 +-1652 +-1542 +-1420 +-1270 +-1066 +-867 +-708 +-597 +-503 +-329 +6 +432 +819 +1076 +1149 +1071 +951 +933 +1029 +1167 +1281 +1329 +1320 +1303 +1327 +1395 +1426 +1290 +932 +462 +62 +-152 +-223 +-264 +-367 +-536 +-748 +-992 +-1235 +-1469 +-1672 +-1772 +-1693 +-1463 +-1147 +-841 +-603 +-438 +-320 +-228 +-221 +-290 +-321 +-220 +-8 +238 +438 +553 +602 +654 +779 +1010 +1315 +1624 +1840 +1941 +1926 +1727 +1315 +727 +112 +-360 +-590 +-601 +-543 +-554 +-656 +-753 +-757 +-688 +-634 +-640 +-645 +-574 +-414 +-267 +-324 +-651 +-1157 +-1660 +-1972 +-1907 +-1460 +-894 +-433 +-116 +123 +357 +598 +828 +1031 +1194 +1276 +1231 +1105 +969 +881 +842 +793 +679 +482 +300 +295 +558 +959 +1253 +1311 +1140 +837 +502 +179 +-123 +-401 +-665 +-933 +-1175 +-1317 +-1378 +-1399 +-1409 +-1390 +-1290 +-1122 +-952 +-840 +-792 +-720 +-501 +-162 +134 +215 +63 +-189 +-339 +-267 +-14 +232 +356 +379 +380 +465 +677 +957 +1159 +1188 +1099 +1050 +1185 +1496 +1790 +1805 +1436 +819 +179 +-252 +-389 +-321 +-246 +-287 +-401 +-531 +-659 +-790 +-985 +-1245 +-1486 +-1593 +-1551 +-1394 +-1202 +-1098 +-1107 +-1146 +-1118 +-973 +-697 +-344 +50 +404 +639 +778 +887 +957 +938 +834 +724 +702 +844 +1113 +1409 +1615 +1663 +1537 +1298 +1028 +734 +439 +199 +100 +122 +106 +-75 +-427 +-799 +-1053 +-1196 +-1284 +-1360 +-1430 +-1462 +-1376 +-1103 +-705 +-361 +-224 +-269 +-389 +-446 +-334 +-115 +34 +53 +22 +48 +166 +350 +518 +631 +765 +1012 +1356 +1682 +1885 +1893 +1660 +1222 +704 +210 +-197 +-453 +-548 +-550 +-546 +-619 +-772 +-945 +-983 +-777 +-410 +-66 +107 +64 +-135 +-388 +-627 +-902 +-1245 +-1579 +-1742 +-1627 +-1263 +-775 +-279 +147 +473 +711 +876 +991 +1110 +1229 +1274 +1206 +1036 +798 +554 +354 +234 +170 +153 +159 +209 +375 +690 +1063 +1273 +1146 +710 +164 +-260 +-448 +-496 +-577 +-788 +-1044 +-1195 +-1151 +-1008 +-952 +-1045 +-1205 +-1296 +-1206 +-898 +-457 +-61 +136 +111 +-48 +-213 +-290 +-236 +-98 +31 +102 +109 +128 +214 +362 +518 +614 +654 +675 +747 +923 +1199 +1502 +1707 +1689 +1400 +920 +400 +-17 +-224 +-222 +-131 +-101 +-194 +-373 +-583 +-752 +-902 +-1060 +-1216 +-1316 +-1327 +-1244 +-1118 +-1039 +-1050 +-1109 +-1155 +-1121 +-924 +-552 +-68 +412 +755 +859 +765 +607 +483 +431 +455 +543 +720 +1030 +1388 +1645 +1718 +1579 +1271 +908 +650 +553 +520 +441 +268 +34 +-197 +-343 +-433 +-618 +-957 +-1345 +-1579 +-1558 +-1337 +-1059 +-855 +-715 +-562 +-391 +-241 +-141 +-92 +-71 +-65 +-35 +16 +22 +-21 +-17 +119 +330 +544 +728 +911 +1159 +1528 +1908 +2049 +1805 +1234 +566 +54 +-170 +-193 +-264 +-508 +-863 +-1157 +-1238 +-1047 +-658 +-229 +91 +221 +161 +5 +-112 +-162 +-243 +-479 +-882 +-1390 +-1826 +-1922 +-1559 +-922 +-307 +108 +290 +386 +600 +974 +1340 +1506 +1377 +1073 +800 +703 +719 +642 +391 +59 +-167 +-156 +96 +477 +801 +948 +915 +773 +583 +360 +101 +-213 +-533 +-785 +-915 +-951 +-959 +-1004 +-1123 +-1257 +-1316 +-1264 +-1103 +-891 +-670 +-457 +-255 +-40 +138 +213 +148 +4 +-108 +-115 +-3 +131 +184 +131 +50 +14 +56 +182 +380 +593 +783 +952 +1107 +1285 +1469 +1584 +1543 +1303 +899 +424 +54 +-129 +-149 +-132 +-182 +-316 +-515 +-730 +-949 +-1145 +-1262 +-1252 +-1130 +-1024 +-1019 +-1118 +-1279 +-1421 +-1411 +-1197 +-856 +-470 +-90 +255 +538 +725 +743 +552 +242 +-11 +-19 +283 +765 +1197 +1433 +1490 +1488 +1464 +1402 +1274 +1090 +918 +783 +654 +490 +284 +35 +-245 +-489 +-697 +-902 +-1134 +-1355 +-1469 +-1397 +-1191 +-1002 +-905 +-857 +-758 +-547 +-237 +30 +103 +0 +-113 +-124 +-74 +-26 +-45 +-132 +-112 +131 +558 +1055 +1495 +1775 +1856 +1782 +1636 +1443 +1173 +881 +556 +160 +-265 +-629 +-908 +-1082 +-1107 +-987 +-803 +-581 +-324 +-44 +210 +365 +337 +69 +-378 +-854 +-1241 +-1510 +-1666 +-1722 +-1655 +-1420 +-989 +-453 +37 +376 +607 +804 +1026 +1272 +1498 +1541 +1357 +1038 +692 +424 +295 +271 +251 +213 +220 +334 +561 +864 +1109 +1124 +860 +416 +-21 +-279 +-337 +-301 +-350 +-557 +-862 +-1117 +-1257 +-1265 +-1217 +-1191 +-1206 +-1198 +-1081 +-834 +-530 +-278 +-150 +-176 +-283 +-369 +-319 +-130 +108 +259 +230 +48 +-131 +-160 +-15 +233 +484 +680 +835 +1004 +1202 +1387 +1544 +1640 +1608 +1393 +1061 +721 +478 +372 +324 +223 +-5 +-341 +-665 +-868 +-919 +-877 +-867 +-955 +-1118 +-1278 +-1366 +-1388 +-1442 +-1602 +-1814 +-1851 +-1519 +-859 +-109 +420 +579 +425 +195 +70 +78 +176 +299 +426 +611 +911 +1286 +1610 +1767 +1743 +1615 +1460 +1331 +1242 +1138 +1014 +881 +705 +410 +-12 +-449 +-779 +-947 +-1023 +-1112 +-1286 +-1492 +-1561 +-1460 +-1260 +-1040 +-856 +-701 +-569 +-376 +-153 +-8 +19 +-74 +-248 +-425 +-485 +-341 +-32 +374 +771 +1083 +1308 +1476 +1645 +1796 +1903 +1905 +1722 +1310 +779 +316 +-2 +-236 +-505 +-851 +-1211 +-1389 +-1219 +-755 +-201 +215 +383 +335 +160 +-16 +-222 +-526 +-945 +-1404 +-1779 +-1949 +-1817 +-1472 +-1082 +-759 +-488 +-216 +112 +522 +920 +1204 +1303 +1271 +1183 +1080 +977 +818 +582 +322 +155 +162 +356 +675 +973 +1165 +1207 +1103 +893 +624 +373 +178 +30 +-117 +-308 +-561 +-852 +-1082 +-1192 +-1232 +-1280 +-1353 +-1393 +-1352 +-1195 +-953 +-713 +-549 +-473 +-455 +-465 +-446 +-342 +-187 +-28 +63 +44 +-92 +-235 +-262 +-175 +-15 +176 +387 +597 +834 +1114 +1385 +1545 +1591 +1573 +1535 +1506 +1481 +1380 +1110 +699 +240 +-141 +-381 +-499 +-583 +-689 +-789 +-845 +-876 +-950 +-1110 +-1355 +-1656 +-1904 +-2003 +-1935 +-1737 +-1405 +-952 +-487 +-128 +64 +76 +-9 +-57 +0 +106 +171 +224 +329 +567 +951 +1373 +1649 +1691 +1597 +1508 +1516 +1612 +1692 +1605 +1306 +907 +552 +295 +96 +-128 +-432 +-790 +-1104 +-1273 +-1303 +-1263 +-1225 +-1229 +-1256 +-1211 +-1030 +-721 +-387 +-147 +-74 +-194 +-450 +-671 +-728 +-600 +-360 +-111 +62 +200 +430 +818 +1287 +1693 +1928 +1951 +1847 +1750 +1688 +1561 +1260 +769 +149 +-447 +-873 +-1067 +-1059 +-910 +-647 +-326 +12 +313 +496 +458 +173 +-256 +-701 +-1060 +-1286 +-1405 +-1494 +-1582 +-1612 +-1520 +-1278 +-907 +-483 +-86 +235 +517 +800 +1064 +1260 +1328 +1229 +993 +699 +449 +314 +306 +412 +580 +738 +855 +939 +992 +1015 +985 +879 +673 +435 +253 +142 +19 +-164 +-418 +-718 +-986 +-1147 +-1209 +-1222 +-1227 +-1243 +-1249 +-1231 +-1142 +-1006 +-868 +-750 +-648 +-572 +-481 +-338 +-164 +-9 +68 +52 +-72 +-229 +-297 +-190 +75 +404 +692 +854 +906 +956 +1064 +1240 +1439 +1615 +1715 +1701 +1611 +1447 +1156 +681 +134 +-337 +-585 +-594 +-474 +-404 +-483 +-684 +-939 +-1219 +-1495 +-1742 +-1944 +-2043 +-1969 +-1735 +-1438 +-1156 +-891 +-641 +-428 +-245 +-125 +-74 +-83 +-67 +15 +148 +331 +546 +764 +987 +1218 +1450 +1629 +1731 +1740 +1674 +1593 +1526 +1460 +1333 +1126 +820 +431 +-1 +-408 +-705 +-884 +-994 +-1091 +-1220 +-1366 +-1455 +-1406 +-1209 +-938 +-692 +-534 +-472 +-466 +-464 +-487 +-563 +-673 +-759 +-747 +-586 +-258 +142 +504 +808 +1079 +1356 +1632 +1900 +2077 +2124 +2036 +1841 +1522 +1078 +551 +-32 +-585 +-999 +-1181 +-1086 +-743 +-276 +139 +382 +416 +290 +79 +-155 +-396 +-654 +-924 +-1180 +-1364 +-1467 +-1514 +-1506 +-1431 +-1267 +-1006 +-681 +-290 +141 +573 +933 +1137 +1151 +998 +785 +608 +524 +529 +569 +612 +674 +766 +888 +1009 +1104 +1129 +1073 +959 +847 +745 +657 +552 +361 +72 +-291 +-609 +-816 +-901 +-931 +-997 +-1147 +-1345 +-1484 +-1477 +-1333 +-1137 +-988 +-934 +-948 +-919 +-763 +-481 +-186 +1 +28 +-107 +-279 +-361 +-299 +-123 +96 +308 +485 +632 +768 +871 +957 +1078 +1276 +1524 +1793 +2020 +2091 +1933 +1542 +1000 +408 +-82 +-348 +-360 +-243 +-173 +-276 +-573 +-958 +-1318 +-1596 +-1803 +-1963 +-2071 +-2071 +-1927 +-1665 +-1364 +-1091 +-887 +-750 +-635 +-492 +-313 +-140 +-14 +39 +59 +95 +216 +443 +774 +1126 +1422 +1619 +1693 +1711 +1712 +1754 +1823 +1848 +1764 +1482 +1060 +599 +198 +-124 +-417 +-692 +-959 +-1195 +-1336 +-1371 +-1337 +-1288 +-1261 +-1218 +-1095 +-870 +-595 +-385 +-343 +-474 +-718 +-935 +-1012 +-928 +-732 +-503 +-273 +-19 +290 +678 +1087 +1449 +1715 +1906 +2073 +2235 +2340 +2248 +1834 +1121 +295 +-408 +-811 +-903 +-767 +-510 +-209 +57 +248 +331 +298 +159 +-60 +-333 +-639 +-927 +-1134 +-1246 +-1314 +-1400 +-1531 +-1668 +-1699 +-1513 +-1092 +-531 +28 +451 +674 +749 +759 +761 +774 +756 +696 +617 +560 +587 +712 +900 +1063 +1148 +1148 +1107 +1058 +1052 +1083 +1087 +1009 +829 +567 +274 +5 +-220 +-396 +-561 +-758 +-987 +-1180 +-1304 +-1357 +-1372 +-1385 +-1387 +-1373 +-1325 +-1235 +-1098 +-923 +-690 +-422 +-188 +-74 +-133 +-312 +-463 +-435 +-209 +88 +325 +429 +422 +426 +521 +735 +1010 +1294 +1562 +1800 +2017 +2143 +2079 +1791 +1335 +831 +421 +159 +41 +1 +-38 +-143 +-349 +-661 +-1050 +-1447 +-1760 +-1954 +-2006 +-1937 +-1819 +-1692 +-1581 +-1479 +-1365 +-1181 +-931 +-661 +-436 +-294 +-229 +-200 +-144 +-34 +124 +308 +517 +740 +969 +1212 +1463 +1679 +1829 +1881 +1860 +1810 +1760 +1679 +1516 +1208 +774 +284 +-151 +-456 +-639 +-763 +-900 +-1073 +-1241 +-1331 +-1303 +-1166 +-992 +-829 +-738 +-708 +-706 +-729 +-786 +-899 +-1044 +-1137 +-1107 +-911 +-589 +-219 +122 +408 +677 +971 +1313 +1672 +2020 +2302 +2455 +2367 +1979 +1340 +616 +-33 +-473 +-666 +-659 +-523 +-308 +-43 +213 +390 +412 +277 +40 +-206 +-395 +-540 +-701 +-922 +-1197 +-1473 +-1699 +-1816 +-1782 +-1584 +-1233 +-795 +-348 +46 +331 +507 +600 +646 +669 +669 +646 +612 +609 +639 +683 +731 +793 +856 +924 +1009 +1066 +1078 +1050 +1006 +970 +940 +872 +693 +416 +101 +-194 +-416 +-573 +-706 +-859 +-1017 +-1142 +-1220 +-1276 +-1338 +-1391 +-1391 +-1305 +-1126 +-886 +-648 +-463 +-361 +-340 +-361 +-389 +-378 +-294 +-135 +45 +168 +168 +104 +79 +179 +435 +775 +1127 +1403 +1606 +1765 +1907 +1982 +1926 +1684 +1292 +885 +560 +370 +268 +197 +63 +-191 +-539 +-912 +-1223 +-1441 +-1576 +-1677 +-1758 +-1802 +-1801 +-1725 +-1559 +-1351 +-1134 +-943 +-799 +-694 +-587 +-455 +-296 +-135 +-30 +-7 +-8 +61 +258 +586 +951 +1251 +1440 +1546 +1638 +1744 +1868 +1948 +1933 +1792 +1512 +1143 +730 +317 +-67 +-430 +-749 +-980 +-1104 +-1153 +-1154 +-1121 +-1044 +-925 +-778 +-640 +-560 +-577 +-695 +-853 +-1003 +-1094 +-1115 +-1059 +-932 +-765 +-582 +-381 +-128 +207 +623 +1104 +1581 +1986 +2269 +2384 +2325 +2070 +1616 +1000 +330 +-258 +-625 +-706 +-542 +-264 +-9 +145 +188 +168 +143 +145 +144 +73 +-115 +-416 +-778 +-1118 +-1364 +-1527 +-1633 +-1686 +-1638 +-1426 +-1035 +-561 +-117 +183 +323 +378 +434 +540 +674 +744 +712 +605 +500 +474 +543 +695 +837 +919 +934 +918 +908 +909 +943 +990 +1013 +984 +850 +590 +252 +-75 +-289 +-368 +-378 +-466 +-690 +-1009 +-1293 +-1450 +-1467 +-1403 +-1324 +-1251 +-1158 +-990 +-762 +-540 +-417 +-405 +-442 +-440 +-339 +-164 +14 +110 +86 +-10 +-113 +-139 +-32 +202 +516 +837 +1121 +1350 +1519 +1644 +1730 +1770 +1722 +1569 +1333 +1064 +797 +534 +268 +17 +-197 +-404 +-625 +-857 +-1118 +-1383 +-1626 +-1801 +-1838 +-1761 +-1622 +-1462 +-1327 +-1230 +-1153 +-1042 +-863 +-639 +-411 +-229 +-116 +-66 +-45 +-34 +-4 +64 +224 +459 +767 +1106 +1406 +1615 +1724 +1765 +1787 +1827 +1871 +1836 +1617 +1203 +655 +87 +-405 +-766 +-1004 +-1152 +-1223 +-1217 +-1123 +-952 +-745 +-560 +-481 +-514 +-648 +-798 +-884 +-873 +-788 +-710 +-716 +-798 +-891 +-918 +-793 +-493 +-77 +395 +878 +1363 +1821 +2210 +2470 +2486 +2227 +1720 +1052 +377 +-175 +-480 +-556 +-482 +-363 +-284 +-243 +-177 +-41 +152 +334 +423 +364 +154 +-149 +-462 +-772 +-1075 +-1343 +-1556 +-1667 +-1640 +-1444 +-1089 +-666 +-283 +7 +213 +365 +504 +644 +751 +777 +711 +595 +494 +469 +543 +666 +776 +798 +729 +625 +586 +663 +816 +994 +1099 +1047 +823 +504 +209 +17 +-59 +-79 +-118 +-241 +-499 +-824 +-1129 +-1321 +-1362 +-1319 +-1242 +-1182 +-1116 +-1026 +-898 +-734 +-582 +-478 +-394 +-298 +-164 +-2 +129 +179 +123 +-15 +-173 +-273 +-250 +-75 +197 +502 +770 +963 +1088 +1188 +1324 +1504 +1709 +1818 +1721 +1420 +992 +577 +290 +149 +90 +-15 +-264 +-625 +-1007 +-1307 +-1485 +-1577 +-1640 +-1681 +-1668 +-1570 +-1389 +-1178 +-1046 +-1020 +-1021 +-939 +-719 +-395 +-79 +98 +94 +-46 +-194 +-233 +-120 +125 +451 +772 +1048 +1261 +1432 +1582 +1715 +1851 +1954 +1984 +1869 +1567 +1097 +533 +-46 +-573 +-1026 +-1350 +-1476 +-1384 +-1113 +-758 +-474 +-371 +-445 +-606 +-728 +-748 +-661 +-533 +-459 +-487 +-610 +-795 +-961 +-1046 +-1015 +-860 +-535 +-51 +547 +1180 +1756 +2175 +2369 +2347 +2126 +1752 +1276 +771 +294 +-93 +-352 +-492 +-530 +-520 +-488 +-416 +-282 +-50 +233 +461 +543 +419 +127 +-235 +-584 +-862 +-1084 +-1277 +-1427 +-1484 +-1411 +-1197 +-853 +-468 +-127 +130 +327 +486 +597 +649 +652 +618 +591 +594 +617 +635 +623 +593 +557 +545 +546 +567 +610 +698 +819 +921 +931 +788 +526 +253 +81 +67 +122 +109 +-59 +-362 +-690 +-934 +-1035 +-1032 +-1015 +-1038 +-1103 +-1140 +-1094 +-949 +-765 +-615 +-535 +-488 +-403 +-236 +-4 +189 +243 +138 +-72 +-273 +-374 +-315 +-132 +92 +299 +440 +533 +651 +847 +1133 +1447 +1704 +1811 +1724 +1467 +1150 +883 +679 +512 +307 +78 +-176 +-468 +-772 +-1067 +-1333 +-1532 +-1644 +-1657 +-1578 +-1439 +-1308 +-1228 +-1186 +-1167 +-1139 +-1036 +-824 +-517 +-209 +13 +107 +70 +-62 +-201 +-262 +-205 +-3 +299 +638 +960 +1235 +1449 +1616 +1752 +1896 +2032 +2113 +2026 +1672 +1060 +286 +-482 +-1063 +-1376 +-1429 +-1275 +-1034 +-796 +-635 +-564 +-577 +-630 +-673 +-662 +-579 +-441 +-314 +-267 +-353 +-580 +-918 +-1262 +-1456 +-1377 +-986 +-348 +410 +1108 +1648 +2000 +2179 +2216 +2111 +1874 +1513 +1096 +696 +346 +43 +-255 +-541 +-770 +-861 +-770 +-493 +-97 +298 +591 +710 +616 +340 +-26 +-398 +-705 +-942 +-1115 +-1268 +-1401 +-1459 +-1372 +-1115 +-733 +-311 +22 +203 +262 +292 +368 +500 +650 +747 +763 +707 +618 +527 +467 +455 +494 +558 +641 +701 +745 +768 +780 +778 +739 +666 +571 +481 +403 +308 +174 +-16 +-252 +-487 +-695 +-864 +-974 +-1023 +-1031 +-1025 +-1043 +-1084 +-1119 +-1109 +-1012 +-837 +-605 +-367 +-170 +-34 +24 +29 +-16 +-83 +-136 +-161 +-150 +-112 +-58 +34 +170 +344 +568 +793 +1032 +1261 +1445 +1574 +1625 +1592 +1472 +1297 +1093 +858 +588 +275 +-60 +-385 +-709 +-1016 +-1261 +-1436 +-1509 +-1487 +-1418 +-1353 +-1324 +-1309 +-1295 +-1243 +-1162 +-1064 +-952 +-771 +-480 +-158 +93 +185 +80 +-146 +-335 +-372 +-229 +68 +389 +648 +830 +989 +1212 +1527 +1907 +2238 +2400 +2334 +1978 +1366 +621 +-124 +-740 +-1140 +-1307 +-1282 +-1086 +-840 +-622 +-520 +-550 +-636 +-699 +-642 +-456 +-212 +-16 +28 +-142 +-508 +-980 +-1440 +-1742 +-1738 +-1366 +-719 +32 +738 +1270 +1605 +1801 +1911 +1941 +1885 +1723 +1455 +1135 +801 +467 +90 +-304 +-637 +-817 +-762 +-508 +-137 +227 +476 +562 +492 +322 +98 +-150 +-417 +-702 +-993 +-1230 +-1380 +-1405 +-1293 +-1073 +-800 +-545 +-346 +-213 +-119 +-21 +164 +421 +674 +837 +855 +737 +548 +412 +379 +449 +599 +726 +773 +730 +657 +619 +627 +662 +690 +672 +608 +532 +479 +441 +367 +212 +-52 +-371 +-659 +-815 +-849 +-812 +-787 +-853 +-1013 +-1199 +-1290 +-1236 +-1016 +-748 +-507 +-366 +-336 +-320 +-260 +-129 +16 +73 +21 +-116 +-229 +-254 +-186 +-46 +103 +252 +406 +586 +784 +980 +1143 +1274 +1367 +1460 +1542 +1575 +1528 +1370 +1098 +714 +253 +-206 +-574 +-863 +-1053 +-1167 +-1242 +-1302 +-1335 +-1358 +-1363 +-1336 +-1299 +-1278 +-1262 +-1207 +-1102 +-903 +-610 +-296 +-81 +-22 +-87 +-193 +-251 +-233 +-167 +-88 +2 +111 +298 +605 +1020 +1479 +1899 +2210 +2370 +2369 +2194 +1809 +1201 +458 +-270 +-819 +-1082 +-1078 +-960 +-839 +-791 +-812 +-838 +-801 +-685 +-505 +-305 +-124 +-1 +5 +-129 +-446 +-891 +-1353 +-1646 +-1663 +-1382 +-862 +-257 +333 +808 +1175 +1434 +1619 +1735 +1775 +1744 +1623 +1397 +1068 +670 +242 +-158 +-462 +-623 +-611 +-459 +-224 +37 +267 +423 +479 +427 +267 +16 +-299 +-624 +-913 +-1129 +-1228 +-1221 +-1110 +-941 +-756 +-628 +-570 +-537 +-437 +-229 +71 +398 +657 +766 +731 +614 +511 +459 +481 +533 +591 +631 +639 +634 +611 +582 +544 +506 +481 +506 +588 +674 +685 +592 +397 +158 +-81 +-272 +-394 +-469 +-523 +-618 +-745 +-886 +-1012 +-1090 +-1097 +-1033 +-916 +-775 +-640 +-518 +-424 +-351 +-267 +-150 +-37 +14 +-24 +-143 +-252 +-281 +-214 +-83 +58 +175 +280 +381 +506 +618 +719 +810 +930 +1106 +1336 +1583 +1775 +1789 +1567 +1153 +635 +98 +-336 +-612 +-793 +-927 +-1022 +-1098 +-1170 +-1224 +-1279 +-1334 +-1349 +-1326 +-1272 +-1182 +-1089 +-980 +-840 +-654 +-411 +-200 +-56 +2 +-14 +-79 +-157 +-232 +-287 +-274 +-124 +191 +657 +1197 +1724 +2114 +2320 +2328 +2162 +1854 +1416 +864 +275 +-227 +-577 +-769 +-844 +-909 +-986 +-1058 +-1056 +-928 +-680 +-368 +-67 +143 +214 +128 +-111 +-444 +-841 +-1205 +-1454 +-1516 +-1376 +-1047 +-620 +-173 +265 +679 +1067 +1397 +1639 +1773 +1793 +1695 +1489 +1169 +791 +406 +53 +-248 +-442 +-538 +-519 +-378 +-143 +136 +399 +573 +602 +455 +181 +-164 +-486 +-720 +-858 +-905 +-911 +-874 +-830 +-771 +-731 +-710 +-681 +-597 +-419 +-170 +101 +316 +450 +492 +462 +416 +384 +403 +475 +576 +674 +728 +687 +589 +481 +411 +433 +539 +683 +780 +787 +706 +565 +421 +323 +239 +109 +-74 +-292 +-468 +-573 +-648 +-746 +-874 +-1006 +-1107 +-1114 +-1057 +-950 +-822 +-721 +-605 +-474 +-319 +-186 +-93 +-61 +-102 +-173 +-234 +-240 +-173 +-48 +101 +239 +321 +345 +339 +330 +358 +447 +623 +871 +1140 +1427 +1714 +1902 +1878 +1599 +1119 +505 +-85 +-490 +-664 +-724 +-769 +-879 +-1056 +-1225 +-1307 +-1302 +-1266 +-1220 +-1228 +-1267 +-1274 +-1201 +-1051 +-826 +-561 +-295 +-74 +56 +110 +74 +-42 +-226 +-422 +-542 +-489 +-212 +280 +879 +1451 +1896 +2120 +2154 +2046 +1831 +1537 +1202 +843 +453 +64 +-334 +-694 +-990 +-1211 +-1295 +-1208 +-955 +-591 +-210 +97 +277 +279 +124 +-164 +-497 +-805 +-1078 +-1255 +-1311 +-1277 +-1152 +-932 +-620 +-212 +257 +738 +1157 +1467 +1656 +1715 +1658 +1505 +1266 +978 +668 +383 +107 +-152 +-364 +-481 +-436 +-205 +149 +480 +668 +631 +429 +149 +-139 +-363 +-509 +-641 +-763 +-854 +-882 +-853 +-799 +-738 +-702 +-695 +-691 +-592 +-384 +-117 +128 +297 +369 +361 +335 +360 +428 +533 +642 +682 +643 +553 +471 +437 +462 +537 +623 +667 +657 +634 +620 +615 +611 +577 +477 +299 +76 +-148 +-343 +-449 +-506 +-591 +-726 +-886 +-1036 +-1087 +-1046 +-979 +-886 +-799 +-692 +-550 +-391 +-234 +-167 +-201 +-294 +-388 +-403 +-318 +-130 +63 +223 +296 +278 +208 +130 +93 +77 +106 +230 +471 +826 +1247 +1647 +1961 +2048 +1816 +1374 +808 +283 +-120 +-354 +-446 +-575 +-751 +-942 +-1115 +-1171 +-1151 +-1104 +-1119 +-1188 +-1271 +-1333 +-1299 +-1159 +-939 +-704 +-461 +-219 +-34 +58 +32 +-108 +-317 +-550 +-705 +-686 +-444 +-13 +559 +1120 +1546 +1819 +1934 +1923 +1855 +1755 +1640 +1482 +1177 +710 +103 +-526 +-1073 +-1390 +-1460 +-1308 +-993 +-593 +-178 +141 +298 +263 +95 +-154 +-404 +-630 +-836 +-1035 +-1179 +-1276 +-1303 +-1218 +-988 +-603 +-123 +412 +904 +1285 +1521 +1629 +1616 +1531 +1378 +1180 +927 +628 +295 +-45 +-293 +-391 +-282 +-41 +249 +460 +548 +509 +376 +207 +32 +-138 +-318 +-499 +-641 +-740 +-760 +-733 +-709 +-699 +-726 +-741 +-715 +-625 +-497 +-347 +-200 +-71 +46 +175 +312 +423 +516 +567 +586 +584 +571 +539 +517 +510 +536 +578 +585 +591 +568 +553 +560 +598 +655 +652 +563 +409 +214 +46 +-109 +-259 +-366 +-470 +-580 +-725 +-872 +-979 +-1051 +-1048 +-996 +-865 +-702 +-525 +-377 +-319 +-328 +-426 +-505 +-537 +-508 +-393 +-222 +-4 +208 +357 +385 +288 +69 +-154 +-266 +-209 +17 +359 +746 +1110 +1440 +1712 +1883 +1904 +1709 +1344 +898 +472 +79 +-217 +-413 +-574 +-773 +-955 +-1061 +-1114 +-1098 +-1106 +-1184 +-1285 +-1365 +-1398 +-1317 +-1132 +-885 +-603 +-296 +-47 +76 +32 +-179 +-448 +-680 +-769 +-739 +-560 +-259 +148 +588 +1002 +1347 +1593 +1762 +1884 +1977 +2039 +2017 +1824 +1372 +659 +-140 +-873 +-1346 +-1495 +-1376 +-1068 +-666 +-285 +14 +172 +170 +64 +-121 +-311 +-472 +-655 +-876 +-1111 +-1325 +-1458 +-1445 +-1260 +-909 +-450 +60 +547 +960 +1288 +1525 +1636 +1602 +1475 +1246 +975 +690 +407 +159 +-18 +-95 +-52 +102 +272 +445 +543 +526 +448 +307 +161 +-13 +-190 +-352 +-509 +-633 +-741 +-807 +-827 +-810 +-749 +-686 +-624 +-600 +-602 +-620 +-562 +-422 +-232 +-26 +162 +306 +374 +435 +505 +593 +643 +623 +573 +526 +541 +607 +670 +711 +695 +655 +616 +621 +671 +734 +741 +637 +440 +215 +21 +-92 +-173 +-267 +-411 +-628 +-877 +-1099 +-1204 +-1173 +-1043 +-881 +-738 +-597 +-498 +-432 +-398 +-437 +-568 +-716 +-761 +-631 +-319 +66 +408 +554 +481 +253 +-46 +-281 +-350 +-246 +-29 +234 +516 +824 +1131 +1438 +1687 +1865 +1899 +1704 +1365 +961 +548 +177 +-153 +-400 +-619 +-827 +-977 +-1042 +-1034 +-1010 +-1074 +-1264 +-1445 +-1559 +-1540 +-1342 +-992 +-610 +-277 +-75 +-38 +-143 +-329 +-531 +-681 +-706 +-647 +-552 +-409 +-153 +144 +488 +845 +1175 +1469 +1748 +2001 +2176 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b4_493_883.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b4_493_883.samples new file mode 100644 index 00000000..06cf31a7 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_guitar_b4_493_883.samples @@ -0,0 +1,4096 @@ +-746 +-522 +-291 +-56 +178 +368 +447 +427 +390 +386 +452 +581 +722 +845 +965 +1084 +1215 +1343 +1434 +1480 +1510 +1534 +1508 +1392 +1134 +723 +235 +-210 +-544 +-775 +-949 +-1095 +-1215 +-1265 +-1244 +-1193 +-1156 +-1152 +-1146 +-1104 +-967 +-765 +-570 +-457 +-456 +-522 +-573 +-527 +-384 +-203 +-60 +48 +190 +431 +759 +1101 +1359 +1471 +1474 +1469 +1502 +1544 +1508 +1309 +913 +420 +-15 +-267 +-334 +-308 +-291 +-321 +-363 +-365 +-315 +-277 +-328 +-486 +-682 +-830 +-899 +-943 +-1004 +-1096 +-1182 +-1213 +-1167 +-1061 +-905 +-728 +-523 +-276 +-20 +196 +349 +400 +369 +332 +335 +373 +444 +532 +624 +750 +896 +1048 +1156 +1208 +1243 +1309 +1421 +1493 +1445 +1217 +806 +315 +-128 +-450 +-679 +-872 +-1038 +-1162 +-1205 +-1165 +-1095 +-1043 +-1039 +-1047 +-984 +-839 +-635 +-450 +-360 +-389 +-483 +-534 +-488 +-366 +-246 +-156 +-83 +36 +270 +619 +964 +1208 +1326 +1361 +1391 +1457 +1530 +1516 +1317 +907 +413 +-10 +-268 +-381 +-404 +-404 +-409 +-399 +-348 +-277 +-262 +-326 +-450 +-573 +-654 +-707 +-766 +-873 +-1002 +-1091 +-1112 +-1072 +-1012 +-927 +-784 +-570 +-282 +16 +234 +351 +377 +335 +283 +261 +268 +316 +395 +506 +655 +819 +959 +1045 +1096 +1159 +1280 +1448 +1578 +1549 +1313 +905 +423 +-19 +-380 +-657 +-878 +-1039 +-1135 +-1147 +-1079 +-998 +-972 +-983 +-978 +-907 +-738 +-543 +-389 +-324 +-347 +-395 +-417 +-386 +-321 +-276 +-248 +-205 +-89 +156 +484 +806 +1048 +1182 +1252 +1330 +1442 +1530 +1497 +1280 +888 +432 +27 +-267 +-432 +-503 +-524 +-495 +-426 +-331 +-271 +-274 +-338 +-429 +-496 +-533 +-567 +-645 +-763 +-885 +-965 +-988 +-975 +-963 +-918 +-786 +-560 +-254 +59 +278 +374 +383 +332 +274 +251 +252 +268 +321 +420 +561 +711 +819 +871 +911 +998 +1153 +1356 +1521 +1526 +1313 +932 +476 +51 +-295 +-571 +-801 +-979 +-1085 +-1096 +-1030 +-958 +-934 +-956 +-954 +-861 +-673 +-451 +-297 +-231 +-251 +-300 +-320 +-293 +-267 +-275 +-294 +-279 +-168 +60 +381 +695 +921 +1038 +1117 +1216 +1340 +1425 +1386 +1202 +872 +479 +114 +-180 +-389 +-530 +-585 +-541 +-435 +-327 +-276 +-315 +-391 +-446 +-456 +-450 +-462 +-533 +-660 +-783 +-860 +-883 +-903 +-926 +-918 +-799 +-560 +-248 +66 +290 +381 +384 +339 +278 +241 +218 +209 +252 +349 +475 +598 +687 +732 +792 +916 +1092 +1302 +1468 +1482 +1300 +960 +539 +119 +185 +430 +731 +985 +1119 +1148 +1141 +1139 +1143 +1075 +851 +461 +34 +-303 +-466 +-467 +-387 +-319 +-313 +-348 +-383 +-388 +-373 +-381 +-435 +-490 +-525 +-547 +-581 +-646 +-748 +-833 +-861 +-799 +-645 +-416 +-173 +53 +233 +342 +382 +347 +261 +174 +143 +172 +232 +287 +281 +243 +246 +330 +498 +714 +910 +1075 +1205 +1283 +1266 +1108 +780 +312 +-147 +-471 +-628 +-681 +-721 +-813 +-930 +-988 +-948 +-807 +-651 +-541 +-477 +-428 +-335 +-196 +-74 +-21 +-70 +-191 +-311 +-350 +-301 +-226 +-172 +-144 +-75 +95 +363 +662 +887 +995 +1027 +1059 +1127 +1172 +1130 +912 +541 +132 +-196 +-387 +-449 +-420 +-377 +-349 +-339 +-326 +-324 +-338 +-365 +-408 +-437 +-452 +-472 +-520 +-619 +-732 +-809 +-825 +-760 +-629 +-437 +-231 +-10 +190 +311 +341 +306 +232 +168 +179 +227 +276 +275 +213 +152 +150 +238 +400 +590 +761 +921 +1094 +1258 +1321 +1196 +868 +398 +-62 +-380 +-529 +-591 +-656 +-771 +-898 +-945 +-877 +-737 +-609 +-546 +-518 +-460 +-340 +-174 +-38 +5 +-62 +-181 +-270 +-284 +-240 +-200 +-182 +-186 +-129 +41 +301 +568 +758 +850 +903 +985 +1087 +1147 +1102 +914 +586 +226 +-91 +-314 +-428 +-452 +-415 +-361 +-303 +-274 +-278 +-313 +-349 +-365 +-364 +-364 +-393 +-479 +-602 +-717 +-778 +-766 +-714 +-628 +-481 +-279 +-47 +175 +315 +345 +299 +226 +177 +200 +248 +259 +221 +148 +84 +99 +210 +356 +509 +643 +792 +991 +1205 +1325 +1230 +928 +488 +54 +-240 +-393 +-482 +-585 +-729 +-860 +-886 +-807 +-687 +-606 +-572 +-544 +-468 +-310 +-130 +-8 +-3 +-101 +-216 +-274 +-255 +-212 +-194 +-211 +-236 +-186 +-22 +225 +468 +644 +747 +833 +939 +1044 +1102 +1065 +912 +647 +323 +4 +-261 +-438 +-503 +-468 +-372 +-279 +-235 +-249 +-291 +-326 +-338 +-327 +-327 +-368 +-465 +-571 +-663 +-716 +-726 +-712 +-659 +-532 +-324 +-78 +163 +317 +334 +276 +218 +189 +217 +254 +242 +181 +100 +61 +90 +180 +278 +367 +480 +645 +877 +1110 +1245 +1181 +920 +546 +173 +-98 +-260 +-390 +-544 +-696 +-818 +-839 +-763 +-670 +-605 +-577 +-536 +-428 +-250 +-78 +9 +-26 +-122 +-210 +-238 +-200 +-161 +-173 +-222 +-257 +-217 +-66 +154 +366 +524 +643 +746 +864 +973 +1031 +1014 +909 +704 +422 +107 +-196 +-425 +-517 +-473 +-354 +-245 +-192 +-213 +-274 +-302 +-289 +-265 +-261 +-302 +-378 +-476 +-579 +-656 +-703 +-714 +-690 +-579 +-369 +-110 +135 +291 +320 +262 +220 +215 +237 +256 +227 +141 +67 +45 +75 +139 +204 +273 +404 +617 +864 +1093 +1229 +1187 +960 +637 +298 +22 +-184 +-356 +-525 +-677 +-774 +-791 +-731 +-661 +-618 +-592 +-534 +-413 +-246 +-84 +-8 +-30 +-99 +-150 +-156 +-141 +-144 +-200 +-282 +-321 +-283 +-147 +53 +261 +448 +608 +739 +863 +970 +1036 +1031 +955 +792 +536 +211 +-112 +-360 +-483 +-468 +-379 +-284 +-252 +-285 +-334 +-345 +-308 +-267 +-249 +-259 +-312 +-404 +-505 +-609 +-691 +-730 +-711 +-605 +-390 +-124 +104 +257 +289 +239 +206 +216 +230 +238 +197 +124 +73 +74 +90 +113 +150 +217 +354 +558 +802 +1021 +1158 +1141 +967 +702 +403 +121 +-111 +-319 +-507 +-647 +-717 +-727 +-689 +-645 +-625 +-608 +-556 +-444 +-293 +-151 +-75 +-75 +-115 +-134 +-121 +-112 +-131 +-191 +-265 +-302 +-269 +-164 +7 +197 +380 +548 +697 +815 +902 +963 +970 +919 +801 +582 +286 +-27 +-290 +-440 +-458 +-376 +-291 +-255 +-271 +-313 +-328 +-314 +-287 +-264 +-259 +-293 +-374 +-484 +-606 +-708 +-751 +-724 +-613 +-404 +-151 +73 +218 +259 +226 +212 +236 +256 +248 +208 +152 +108 +85 +74 +62 +78 +142 +292 +521 +772 +989 +1126 +1153 +1035 +808 +533 +237 +-41 +-290 +-499 +-640 +-705 +-713 +-689 +-664 +-656 +-637 +-575 +-455 +-303 +-167 +-92 +-83 +-109 +-123 +-119 +-120 +-146 +-205 +-267 +-298 +-259 +-161 +-14 +160 +338 +512 +674 +793 +881 +940 +962 +939 +861 +688 +412 +82 +-220 +-413 +-472 +-428 +-346 +-281 +-269 +-293 +-324 +-315 +-281 +-244 +-226 +-255 +-330 +-448 +-585 +-691 +-728 +-697 +-583 +-385 +-150 +44 +167 +215 +207 +207 +237 +255 +247 +223 +184 +141 +112 +74 +35 +35 +95 +238 +455 +691 +889 +1029 +1081 +1019 +851 +615 +336 +46 +-224 +-435 +-567 +-625 +-641 +-649 +-658 +-673 +-665 +-591 +-467 +-326 +-204 +-126 +-94 +-100 +-102 +-95 +-106 +-139 +-195 +-245 +-263 +-233 +-164 +-60 +83 +253 +436 +609 +739 +827 +884 +924 +937 +900 +765 +498 +160 +-163 +-397 +-486 +-454 +-361 +-286 +-263 +-277 +-302 +-291 +-256 +-216 +-197 +-221 +-295 +-417 +-553 +-667 +-722 +-699 +-598 +-423 +-206 +-20 +97 +161 +191 +213 +245 +260 +241 +208 +180 +140 +98 +52 +1 +-12 +52 +194 +399 +630 +825 +956 +1024 +1004 +890 +704 +445 +146 +-144 +-371 +-511 +-569 +-593 +-625 +-672 +-698 +-672 +-579 +-448 +-315 +-212 +-140 +-100 +-88 +-78 +-79 +-104 +-153 +-199 +-232 +-251 +-231 +-188 +-109 +13 +180 +376 +560 +703 +785 +843 +900 +937 +921 +806 +558 +223 +-103 +-343 +-445 +-423 +-349 +-287 +-268 +-276 +-293 +-293 +-267 +-230 +-210 +-215 +-262 +-361 +-497 +-631 +-715 +-705 +-609 +-446 +-249 +-76 +55 +141 +199 +236 +266 +268 +226 +174 +140 +120 +92 +53 +-6 +-39 +9 +151 +365 +587 +757 +866 +939 +966 +914 +780 +552 +243 +-72 +-314 +-455 +-512 +-555 +-616 +-684 +-710 +-658 +-559 +-438 +-330 +-247 +-190 +-136 +-90 +-70 +-77 +-110 +-162 +-198 +-218 +-224 +-218 +-209 +-167 +-65 +113 +320 +508 +644 +730 +799 +871 +932 +931 +826 +588 +266 +-46 +-275 +-390 +-402 +-361 +-316 +-292 +-290 +-296 +-295 +-273 +-240 +-204 +-179 +-192 +-276 +-423 +-586 +-692 +-687 +-591 +-437 +-265 +-109 +7 +100 +194 +256 +279 +257 +211 +162 +151 +157 +135 +77 +-17 +-84 +-48 +95 +303 +504 +657 +766 +860 +941 +960 +866 +640 +309 +-25 +-272 +-407 +-464 +-515 +-587 +-663 +-681 +-625 +-523 +-425 +-359 +-313 +-250 +-169 +-95 +-59 +-68 +-108 +-155 +-175 +-182 +-190 +-219 +-249 +-234 +-135 +46 +264 +457 +590 +679 +752 +834 +897 +899 +798 +585 +298 +12 +-201 +-331 +-375 +-368 +-335 +-301 +-276 +-258 +-268 +-268 +-240 +-186 +-133 +-136 +-223 +-390 +-575 +-681 +-673 +-565 +-424 +-289 +-158 +-49 +68 +181 +254 +261 +221 +174 +144 +157 +184 +157 +65 +-56 +-136 +-98 +52 +251 +432 +568 +685 +806 +947 +1026 +952 +723 +385 +54 +-183 +-311 +-384 +-449 +-544 +-632 +-655 +-599 +-513 +-447 +-400 +-357 +-280 +-170 +-75 +-33 +-53 +-100 +-139 +-147 +-142 +-162 +-217 +-272 +-268 +-174 +12 +224 +404 +526 +612 +696 +792 +878 +894 +810 +631 +384 +132 +-87 +-257 +-366 +-412 +-393 +-329 +-262 +-242 +-253 +-266 +-231 +-149 +-79 +-79 +-185 +-372 +-561 +-668 +-655 +-565 +-457 +-351 +-239 +-111 +25 +160 +243 +244 +201 +163 +169 +208 +231 +178 +51 +-83 +-151 +-108 +37 +209 +358 +479 +604 +763 +938 +1040 +973 +750 +427 +114 +-107 +-242 +-339 +-443 +-553 +-644 +-654 +-601 +-528 +-473 +-425 +-370 +-277 +-157 +-57 +-30 +-76 +-130 +-156 +-142 +-133 +-164 +-236 +-296 +-287 +-178 +-3 +182 +328 +438 +537 +651 +772 +862 +881 +811 +670 +469 +233 +-10 +-238 +-407 +-474 +-434 +-337 +-257 +-238 +-272 +-288 +-235 +-133 +-47 +-55 +-169 +-354 +-522 +-608 +-601 +-537 +-469 +-397 +-296 +-152 +4 +144 +223 +222 +187 +183 +213 +246 +250 +172 +35 +-93 +-137 +-93 +25 +166 +288 +415 +564 +746 +927 +1036 +988 +787 +503 +223 +6 +-140 +-269 +-408 +-530 +-618 +-644 +-610 +-557 +-517 +-471 +-388 +-262 +-132 +-48 +-36 +-77 +-111 +-113 +-105 +-117 +-172 +-251 +-308 +-290 +-189 +-42 +113 +248 +367 +504 +650 +776 +859 +871 +812 +703 +542 +320 +60 +-209 +-411 +-491 +-437 +-328 +-248 +-244 +-295 +-306 +-233 +-115 +-34 +-52 +-167 +-331 +-472 +-544 +-566 +-543 +-510 +-454 +-352 +-191 +-13 +126 +205 +210 +187 +196 +235 +259 +239 +151 +13 +-98 +-134 +-94 +0 +110 +226 +360 +528 +712 +893 +1006 +976 +809 +570 +320 +98 +-81 +-243 +-393 +-514 +-591 +-624 +-609 +-583 +-550 +-484 +-386 +-266 +-153 +-79 +-68 +-89 +-100 +-82 +-68 +-87 +-151 +-237 +-285 +-268 +-194 +-86 +37 +167 +314 +480 +644 +773 +840 +839 +792 +715 +597 +392 +117 +-167 +-382 +-459 +-415 +-316 +-258 +-274 +-315 +-314 +-237 +-116 +-39 +-59 +-159 +-285 +-399 +-476 +-525 +-553 +-543 +-490 +-380 +-210 +-36 +89 +161 +178 +171 +196 +248 +270 +231 +147 +28 +-72 +-112 +-95 +-42 +46 +157 +295 +476 +672 +850 +968 +984 +872 +675 +437 +194 +-19 +-217 +-381 +-498 +-572 +-606 +-614 +-596 +-558 +-483 +-383 +-279 +-191 +-133 +-107 +-99 +-85 +-61 +-49 +-86 +-157 +-232 +-282 +-285 +-242 +-171 +-65 +77 +253 +453 +635 +762 +815 +824 +804 +750 +652 +457 +179 +-112 +-335 +-440 +-422 +-347 +-306 +-311 +-333 +-309 +-228 +-121 +-58 +-75 +-152 +-257 +-359 +-453 +-529 +-578 +-576 +-514 +-391 +-221 +-63 +57 +126 +154 +170 +204 +258 +279 +239 +162 +56 +-36 +-83 +-93 +-69 +-11 +90 +227 +417 +619 +804 +945 +1006 +951 +785 +562 +307 +56 +-159 +-341 +-466 +-545 +-594 +-612 +-598 +-555 +-480 +-387 +-304 +-229 +-165 +-122 +-89 +-58 +-45 +-55 +-96 +-158 +-219 +-266 +-282 +-263 +-210 +-123 +25 +213 +416 +595 +718 +776 +803 +816 +802 +728 +551 +290 +-1 +-240 +-370 +-398 +-369 +-338 +-322 +-307 +-273 +-193 +-101 +-47 +-60 +-116 +-212 +-317 +-429 +-527 +-592 +-595 +-526 +-410 +-259 +-111 +-9 +53 +92 +120 +161 +218 +245 +214 +142 +46 +-36 +-91 +-109 +-107 +-64 +31 +178 +369 +577 +769 +918 +1009 +999 +878 +673 +422 +156 +-81 +-275 +-413 +-507 +-574 +-615 +-621 +-593 +-534 +-455 +-370 +-286 +-211 +-144 +-92 +-67 +-66 +-86 +-131 +-193 +-250 +-291 +-316 +-312 +-266 +-176 +-28 +162 +365 +540 +672 +756 +815 +862 +871 +822 +679 +440 +146 +-118 +-294 +-376 +-381 +-358 +-331 +-293 +-234 +-152 +-70 +-16 +-13 +-68 +-165 +-288 +-414 +-536 +-617 +-631 +-576 +-465 +-327 +-183 +-80 +-15 +34 +88 +151 +219 +254 +220 +139 +36 +-55 +-122 +-153 +-153 +-120 +-27 +124 +323 +544 +749 +914 +1029 +1067 +993 +820 +578 +303 +42 +-175 +-337 +-451 +-537 +-600 +-634 +-623 +-577 +-492 +-400 +-316 +-228 +-154 +-105 +-81 +-88 +-122 +-176 +-240 +-301 +-349 +-373 +-369 +-329 +-246 +-111 +76 +286 +482 +637 +743 +827 +895 +933 +895 +768 +538 +251 +-20 +-230 +-343 +-376 +-367 +-338 +-284 +-212 +-128 +-45 +9 +16 +-33 +-113 +-222 +-351 +-486 +-597 +-636 +-599 +-508 +-391 +-269 +-174 +-120 +-61 +19 +104 +178 +208 +162 +64 +-30 +-108 +-164 +-195 +-201 +-182 +-88 +73 +283 +521 +740 +913 +1046 +1125 +1101 +973 +753 +473 +192 +-50 +-239 +-378 +-483 +-566 +-625 +-632 +-588 +-510 +-422 +-337 +-265 +-205 +-140 +-107 +-111 +-149 +-213 +-291 +-351 +-393 +-418 +-431 +-425 +-373 +-251 +-51 +188 +416 +608 +756 +868 +958 +1005 +982 +864 +651 +382 +122 +-88 +-228 +-301 +-326 +-307 +-249 +-162 +-76 +2 +48 +52 +18 +-42 +-137 +-271 +-427 +-572 +-656 +-646 +-567 +-467 +-371 +-287 +-221 +-150 +-44 +69 +138 +157 +112 +16 +-70 +-124 +-174 +-222 +-256 +-256 +-170 +-3 +221 +462 +689 +880 +1046 +1177 +1221 +1142 +944 +661 +347 +74 +-144 +-319 +-448 +-552 +-630 +-642 +-593 +-522 +-460 +-399 +-342 +-281 +-210 +-161 +-160 +-209 +-280 +-346 +-385 +-408 +-442 +-493 +-529 +-510 +-391 +-184 +70 +320 +536 +715 +864 +984 +1052 +1040 +938 +760 +528 +287 +72 +-109 +-239 +-310 +-309 +-240 +-133 +-23 +47 +86 +98 +79 +32 +-58 +-205 +-389 +-565 +-670 +-676 +-606 +-514 +-440 +-385 +-324 +-246 +-131 +-12 +52 +50 +5 +-67 +-123 +-149 +-185 +-244 +-304 +-310 +-232 +-55 +175 +422 +655 +867 +1061 +1238 +1341 +1297 +1113 +828 +505 +208 +-37 +-235 +-382 +-497 +-576 +-599 +-567 +-520 +-481 +-448 +-408 +-344 +-261 +-201 +-208 +-269 +-341 +-390 +-413 +-436 +-490 +-577 +-640 +-628 +-498 +-285 +-24 +235 +474 +688 +872 +1012 +1090 +1092 +1015 +881 +693 +468 +231 +1 +-192 +-311 +-317 +-224 +-90 +34 +108 +141 +156 +157 +122 +32 +-135 +-349 +-550 +-662 +-673 +-613 +-543 +-506 +-473 +-417 +-325 +-202 +-77 +-19 +-35 +-65 +-99 +-121 +-143 +-199 +-291 +-363 +-376 +-305 +-134 +93 +335 +580 +828 +1066 +1287 +1427 +1416 +1259 +995 +676 +369 +100 +-134 +-319 +-458 +-551 +-580 +-565 +-545 +-527 +-501 +-444 +-354 +-261 +-207 +-234 +-309 +-379 +-413 +-434 +-473 +-551 +-655 +-720 +-698 +-574 +-368 +-121 +132 +381 +619 +827 +985 +1077 +1093 +1056 +973 +839 +643 +393 +117 +-137 +-297 +-318 +-219 +-61 +65 +137 +169 +195 +217 +197 +98 +-81 +-312 +-516 +-626 +-648 +-610 +-575 +-568 +-552 +-494 +-387 +-256 +-147 +-98 +-111 +-126 +-134 +-155 +-193 +-266 +-370 +-443 +-440 +-350 +-186 +28 +273 +535 +816 +1088 +1318 +1467 +1484 +1365 +1136 +844 +532 +228 +-49 +-271 +-426 +-520 +-570 +-584 +-593 +-592 +-544 +-455 +-353 +-261 +-223 +-262 +-336 +-390 +-409 +-435 +-493 +-595 +-716 +-790 +-775 +-667 +-495 +-273 +-22 +255 +541 +794 +973 +1076 +1107 +1094 +1055 +968 +797 +522 +199 +-101 +-291 +-324 +-215 +-59 +63 +133 +176 +221 +268 +258 +160 +-21 +-242 +-431 +-543 +-592 +-605 +-616 +-639 +-638 +-572 +-453 +-328 +-220 +-154 +-131 +-125 +-119 +-141 +-204 +-296 +-403 +-483 +-476 +-405 +-266 +-60 +188 +471 +775 +1053 +1278 +1442 +1507 +1454 +1291 +1043 +719 +378 +63 +-190 +-365 +-468 +-541 +-596 +-623 +-624 +-575 +-472 +-356 +-291 +-281 +-317 +-365 +-392 +-397 +-424 +-501 +-610 +-724 +-795 +-789 +-720 +-593 +-404 +-144 +168 +493 +778 +967 +1066 +1110 +1129 +1133 +1085 +929 +647 +294 +-27 +-241 +-299 +-222 +-84 +34 +120 +187 +250 +293 +277 +179 +10 +-177 +-352 +-470 +-544 +-598 +-641 +-670 +-659 +-588 +-476 +-362 +-263 +-191 +-149 +-125 +-118 +-149 +-227 +-323 +-420 +-490 +-500 +-452 +-338 +-146 +110 +410 +715 +988 +1213 +1387 +1509 +1537 +1439 +1211 +875 +485 +121 +-148 +-317 +-427 +-506 +-582 +-637 +-619 +-552 +-461 +-372 +-322 +-331 +-349 +-366 +-374 +-381 +-415 +-510 +-615 +-710 +-776 +-799 +-779 +-702 +-533 +-261 +78 +428 +720 +908 +1006 +1073 +1127 +1161 +1138 +1012 +745 +408 +73 +-180 +-291 +-260 +-149 +-22 +91 +184 +256 +295 +276 +176 +34 +-131 +-287 +-414 +-519 +-603 +-652 +-666 +-641 +-578 +-479 +-385 +-301 +-222 +-162 +-136 +-138 +-170 +-241 +-327 +-400 +-459 +-494 +-473 +-391 +-219 +23 +309 +603 +868 +1100 +1306 +1495 +1605 +1565 +1357 +1001 +579 +196 +-99 +-287 +-403 +-495 +-579 +-619 +-598 +-528 +-457 +-404 +-374 +-362 +-357 +-349 +-353 +-392 +-450 +-524 +-608 +-685 +-756 +-812 +-829 +-775 +-617 +-351 +0 +353 +649 +850 +967 +1049 +1127 +1184 +1192 +1097 +867 +541 +185 +-106 +-286 +-321 +-231 +-91 +54 +178 +253 +289 +274 +194 +67 +-77 +-220 +-364 +-492 +-594 +-653 +-669 +-645 +-592 +-514 +-428 +-342 +-257 +-185 +-146 +-141 +-163 +-219 +-288 +-351 +-418 +-472 +-476 +-417 +-266 +-42 +224 +496 +756 +1002 +1240 +1471 +1632 +1646 +1475 +1137 +723 +332 +23 +-182 +-329 +-442 +-542 +-599 +-598 +-558 +-507 +-458 +-412 +-369 +-337 +-316 +-340 +-394 +-460 +-526 +-593 +-664 +-744 +-822 +-856 +-819 +-673 +-413 +-71 +275 +569 +780 +917 +1018 +1117 +1205 +1249 +1198 +1020 +703 +335 +-6 +-250 +-341 +-282 +-141 +24 +167 +258 +293 +282 +219 +114 +-18 +-161 +-304 +-447 +-563 +-639 +-667 +-655 +-622 +-561 +-475 +-388 +-304 +-211 +-155 +-134 +-143 +-187 +-266 +-350 +-431 +-499 +-516 +-460 +-322 +-111 +153 +416 +676 +928 +1178 +1417 +1605 +1658 +1525 +1229 +844 +456 +137 +-98 +-273 +-406 +-526 +-608 +-635 +-615 +-575 +-519 +-459 +-399 +-347 +-324 +-338 +-388 +-447 +-505 +-569 +-636 +-716 +-802 +-863 +-853 +-725 +-494 +-178 +153 +449 +671 +825 +944 +1059 +1172 +1246 +1239 +1101 +819 +444 +69 +-216 +-349 +-331 +-198 +-28 +128 +231 +267 +256 +200 +102 +-7 +-125 +-250 +-386 +-512 +-612 +-663 +-664 +-636 +-595 +-532 +-453 +-367 +-266 +-182 +-141 +-134 +-168 +-249 +-352 +-442 +-518 +-542 +-482 +-355 +-161 +87 +352 +616 +879 +1128 +1374 +1587 +1690 +1613 +1362 +998 +610 +271 +3 +-205 +-366 +-497 +-598 +-637 +-627 +-596 +-542 +-483 +-424 +-370 +-345 +-354 +-393 +-439 +-490 +-542 +-604 +-681 +-776 +-856 +-870 +-775 +-562 +-257 +84 +392 +630 +809 +945 +1070 +1197 +1291 +1298 +1188 +928 +569 +191 +-125 +-317 +-347 +-235 +-58 +118 +242 +282 +257 +204 +123 +36 +-62 +-173 +-311 +-453 +-569 +-633 +-643 +-624 +-590 +-537 +-468 +-390 +-292 +-192 +-134 +-125 +-160 +-247 +-351 +-442 +-510 +-537 +-501 +-394 +-219 +12 +267 +514 +764 +1023 +1287 +1538 +1707 +1706 +1511 +1179 +782 +413 +101 +-144 +-335 +-477 +-577 +-640 +-644 +-618 +-571 +-521 +-476 +-432 +-403 +-392 +-419 +-463 +-503 +-537 +-584 +-651 +-753 +-868 +-924 +-866 +-673 +-374 +-31 +285 +539 +740 +903 +1056 +1190 +1286 +1307 +1232 +1028 +699 +323 +-39 +-298 +-392 +-314 +-121 +74 +218 +266 +222 +158 +91 +34 +-39 +-137 +-282 +-449 +-587 +-671 +-688 +-656 +-622 +-583 +-518 +-435 +-337 +-231 +-169 +-158 +-181 +-245 +-347 +-432 +-508 +-555 +-533 +-438 +-281 +-68 +175 +407 +646 +908 +1195 +1486 +1711 +1772 +1629 +1320 +923 +521 +175 +-100 +-307 +-455 +-562 +-620 +-628 +-603 +-573 +-532 +-480 +-434 +-408 +-408 +-443 +-494 +-526 +-542 +-566 +-625 +-733 +-865 +-942 +-898 +-718 +-427 +-98 +211 +469 +682 +868 +1040 +1189 +1296 +1344 +1319 +1182 +898 +503 +83 +-257 +-418 +-370 +-162 +76 +232 +271 +220 +157 +118 +82 +24 +-87 +-249 +-424 +-578 +-662 +-674 +-646 +-611 +-570 +-511 +-444 +-356 +-255 +-190 +-179 +-193 +-232 +-310 +-394 +-479 +-532 +-522 +-430 +-267 +-78 +132 +342 +567 +840 +1141 +1447 +1694 +1802 +1705 +1443 +1073 +666 +300 +-5 +-232 +-394 +-501 +-573 +-607 +-615 +-595 +-555 +-505 +-451 +-420 +-427 +-455 +-491 +-520 +-528 +-550 +-623 +-753 +-898 +-984 +-940 +-763 +-493 +-194 +101 +363 +596 +806 +984 +1132 +1252 +1337 +1367 +1303 +1064 +667 +202 +-198 +-419 +-387 +-186 +40 +193 +224 +178 +132 +125 +108 +62 +-44 +-211 +-387 +-530 +-629 +-675 +-683 +-665 +-630 +-570 +-482 +-406 +-322 +-255 +-215 +-200 +-223 +-290 +-394 +-497 +-565 +-557 +-457 +-304 +-129 +61 +253 +484 +770 +1089 +1388 +1633 +1772 +1739 +1545 +1220 +822 +422 +76 +-176 +-346 +-459 +-553 +-622 +-661 +-655 +-599 +-536 +-476 +-441 +-443 +-464 +-494 +-511 +-510 +-538 +-623 +-753 +-894 +-976 +-939 +-790 +-564 +-292 +-7 +266 +529 +770 +959 +1114 +1249 +1363 +1438 +1420 +1207 +803 +309 +-129 +-372 +-367 +-194 +16 +161 +197 +175 +140 +123 +107 +53 +-50 +-188 +-331 +-464 +-573 +-638 +-667 +-658 +-623 +-564 +-493 +-433 +-363 +-285 +-216 +-174 +-176 +-250 +-384 +-503 +-574 +-564 +-476 +-350 +-202 +-35 +173 +422 +714 +1020 +1303 +1545 +1721 +1763 +1639 +1360 +970 +551 +183 +-76 +-248 +-384 +-502 +-614 +-682 +-682 +-626 +-555 +-496 +-474 +-487 +-501 +-506 +-510 +-510 +-539 +-634 +-764 +-892 +-972 +-954 +-834 +-647 +-411 +-128 +164 +443 +687 +881 +1033 +1183 +1338 +1451 +1469 +1293 +914 +428 +-19 +-304 +-366 +-248 +-67 +74 +137 +147 +128 +113 +95 +41 +-38 +-144 +-274 +-412 +-536 +-637 +-679 +-670 +-638 +-590 +-534 +-479 +-413 +-308 +-204 +-152 +-157 +-235 +-368 +-485 +-547 +-542 +-485 +-397 +-284 +-128 +85 +334 +619 +913 +1187 +1447 +1682 +1813 +1758 +1521 +1128 +682 +285 +4 +-181 +-339 +-476 +-598 +-663 +-649 +-582 +-521 +-491 +-489 +-504 +-502 +-480 +-465 +-465 +-506 +-592 +-718 +-836 +-921 +-937 +-867 +-730 +-515 +-230 +89 +391 +651 +855 +1017 +1179 +1357 +1492 +1519 +1367 +1020 +553 +101 +-214 +-335 +-270 +-111 +60 +176 +211 +189 +145 +105 +58 +4 +-72 +-188 +-332 +-473 +-590 +-644 +-640 +-607 +-572 +-529 +-480 +-412 +-316 +-209 +-156 +-172 +-251 +-376 +-484 +-536 +-546 +-507 +-436 +-334 +-178 +32 +277 +528 +788 +1059 +1339 +1621 +1820 +1824 +1610 +1237 +788 +381 +70 +-152 +-323 +-476 +-597 +-664 +-654 +-600 +-550 +-527 +-538 +-543 +-521 +-488 +-471 +-486 +-537 +-627 +-727 +-822 +-900 +-942 +-916 +-804 +-607 +-340 +-29 +263 +499 +707 +890 +1082 +1285 +1450 +1510 +1409 +1115 +676 +218 +-156 +-352 +-354 +-205 +-15 +124 +177 +147 +96 +67 +50 +15 +-48 +-164 +-327 +-486 +-606 +-659 +-652 +-623 +-599 +-573 +-524 +-452 +-348 +-241 +-181 +-196 +-270 +-369 +-459 +-519 +-541 +-528 +-473 +-374 +-225 +-22 +191 +416 +666 +953 +1263 +1577 +1816 +1867 +1689 +1339 +905 +495 +177 +-61 +-250 +-410 +-538 +-616 +-619 +-588 +-557 +-538 +-542 +-528 +-489 +-439 +-423 +-443 +-500 +-573 +-670 +-767 +-860 +-927 +-921 +-830 +-640 +-380 +-80 +205 +446 +663 +871 +1081 +1299 +1476 +1553 +1496 +1257 +850 +381 +-31 +-291 +-346 +-226 +-35 +121 +182 +167 +122 +105 +106 +85 +11 +-115 +-280 +-438 +-547 +-599 +-606 +-588 +-581 +-570 +-521 +-433 +-322 +-215 +-161 +-181 +-234 +-310 +-405 +-471 +-516 +-530 +-489 +-391 +-255 +-84 +113 +316 +561 +866 +1198 +1525 +1783 +1869 +1739 +1436 +1040 +631 +288 +17 +-209 +-395 +-526 +-610 +-638 +-617 +-599 +-587 +-573 +-544 +-496 +-445 +-419 +-439 +-492 +-566 +-653 +-760 +-861 +-935 +-956 +-886 +-717 +-477 +-200 +72 +316 +538 +763 +982 +1204 +1397 +1507 +1494 +1315 +962 +510 +75 +-229 +-333 +-260 +-92 +55 +120 +117 +93 +83 +84 +59 +-9 +-124 +-261 +-394 +-500 +-557 +-592 +-616 +-626 +-617 +-564 +-469 +-360 +-250 +-193 +-197 +-235 +-294 +-380 +-467 +-529 +-556 +-522 +-429 +-298 +-147 +24 +220 +465 +772 +1103 +1428 +1693 +1828 +1767 +1532 +1181 +794 +432 +126 +-120 +-315 +-455 +-553 +-603 +-615 +-615 +-611 +-597 +-560 +-510 +-461 +-429 +-435 +-472 +-526 +-603 +-710 +-812 +-901 +-939 +-885 +-744 +-532 +-275 +-7 +242 +479 +714 +947 +1175 +1383 +1525 +1548 +1413 +1096 +650 +204 +-131 +-283 +-253 +-111 +28 +111 +129 +111 +94 +87 +64 +-1 +-90 +-204 +-320 +-426 +-510 +-575 +-608 +-618 +-609 +-560 +-479 +-376 +-277 +-198 +-177 +-210 +-264 +-351 +-444 +-514 +-544 +-531 +-455 +-340 +-209 +-43 +151 +390 +687 +1020 +1345 +1621 +1800 +1814 +1639 +1323 +931 +541 +203 +-71 +-279 +-427 +-533 +-595 +-615 +-614 +-608 +-597 +-571 +-530 +-483 +-450 +-441 +-470 +-524 +-602 +-702 +-804 +-893 +-942 +-914 +-801 +-609 +-371 +-110 +142 +386 +630 +870 +1111 +1338 +1504 +1548 +1446 +1166 +755 +318 +-41 +-245 +-275 +-180 +-41 +65 +107 +104 +84 +72 +42 +-1 +-71 +-176 +-289 +-399 +-501 +-573 +-610 +-622 +-617 +-583 +-501 +-405 +-304 +-227 +-195 +-219 +-275 +-352 +-431 +-498 +-538 +-536 +-481 +-383 +-251 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b2_123_471.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b2_123_471.samples new file mode 100644 index 00000000..b7338ea6 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b2_123_471.samples @@ -0,0 +1,4096 @@ +1337 +1199 +1022 +805 +548 +266 +-31 +-322 +-599 +-842 +-1039 +-1191 +-1294 +-1354 +-1384 +-1384 +-1355 +-1306 +-1243 +-1156 +-1041 +-917 +-768 +-590 +-391 +-181 +36 +245 +434 +597 +736 +859 +962 +1049 +1123 +1170 +1194 +1199 +1168 +1096 +998 +875 +730 +570 +394 +194 +-39 +-286 +-537 +-779 +-993 +-1146 +-1219 +-1216 +-1123 +-952 +-736 +-509 +-296 +-113 +28 +121 +183 +231 +264 +305 +358 +434 +529 +626 +717 +776 +803 +795 +754 +698 +624 +540 +435 +294 +105 +-142 +-431 +-764 +-1125 +-1466 +-1755 +-1957 +-2054 +-2019 +-1862 +-1620 +-1318 +-1004 +-693 +-401 +-121 +147 +434 +744 +1084 +1429 +1776 +2105 +2368 +2536 +2592 +2541 +2376 +2118 +1822 +1530 +1259 +1026 +815 +605 +372 +107 +-200 +-537 +-884 +-1236 +-1568 +-1876 +-2141 +-2364 +-2550 +-2682 +-2761 +-2772 +-2701 +-2551 +-2305 +-1959 +-1538 +-1064 +-588 +-128 +286 +629 +894 +1089 +1242 +1361 +1462 +1567 +1684 +1811 +1917 +1989 +2008 +1951 +1815 +1594 +1323 +1041 +759 +496 +264 +83 +-67 +-198 +-308 +-408 +-505 +-607 +-696 +-759 +-785 +-761 +-698 +-618 +-535 +-468 +-439 +-470 +-542 +-638 +-737 +-804 +-825 +-781 +-685 +-563 +-445 +-348 +-280 +-243 +-233 +-227 +-213 +-190 +-154 +-113 +-70 +-34 +-32 +-69 +-144 +-222 +-285 +-307 +-267 +-137 +74 +328 +612 +900 +1179 +1425 +1623 +1772 +1861 +1888 +1865 +1784 +1631 +1409 +1117 +754 +357 +-40 +-415 +-755 +-1029 +-1224 +-1345 +-1400 +-1386 +-1322 +-1236 +-1148 +-1072 +-1029 +-1006 +-982 +-953 +-897 +-808 +-682 +-544 +-406 +-275 +-164 +-78 +-7 +53 +120 +205 +311 +430 +552 +660 +741 +769 +736 +664 +563 +449 +359 +304 +288 +298 +334 +380 +420 +458 +477 +478 +468 +447 +421 +387 +352 +319 +274 +222 +166 +104 +28 +-44 +-116 +-191 +-272 +-356 +-451 +-564 +-689 +-815 +-945 +-1070 +-1165 +-1219 +-1235 +-1208 +-1149 +-1058 +-945 +-800 +-632 +-446 +-227 +27 +305 +606 +919 +1213 +1466 +1666 +1804 +1866 +1841 +1747 +1577 +1341 +1062 +770 +490 +248 +43 +-131 +-277 +-421 +-550 +-670 +-770 +-857 +-927 +-974 +-1004 +-1021 +-1034 +-1046 +-1052 +-1061 +-1074 +-1059 +-1030 +-964 +-849 +-693 +-503 +-278 +-28 +236 +501 +754 +982 +1180 +1349 +1478 +1565 +1593 +1567 +1487 +1355 +1188 +997 +784 +578 +371 +160 +-60 +-283 +-508 +-733 +-947 +-1143 +-1302 +-1424 +-1493 +-1502 +-1460 +-1373 +-1261 +-1134 +-1006 +-881 +-766 +-658 +-537 +-405 +-243 +-33 +226 +519 +815 +1098 +1353 +1539 +1645 +1664 +1611 +1474 +1283 +1062 +822 +585 +352 +127 +-99 +-325 +-540 +-732 +-886 +-971 +-975 +-915 +-812 +-674 +-545 +-445 +-401 +-405 +-428 +-453 +-447 +-402 +-286 +-102 +125 +382 +638 +875 +1051 +1163 +1212 +1209 +1182 +1119 +1028 +915 +767 +575 +323 +24 +-310 +-670 +-1031 +-1360 +-1630 +-1822 +-1950 +-1999 +-1974 +-1892 +-1755 +-1579 +-1361 +-1108 +-805 +-465 +-107 +273 +645 +993 +1294 +1547 +1753 +1894 +1984 +2047 +2105 +2165 +2225 +2266 +2275 +2231 +2106 +1858 +1495 +1048 +539 +11 +-486 +-915 +-1287 +-1598 +-1853 +-2060 +-2228 +-2359 +-2456 +-2519 +-2536 +-2482 +-2368 +-2181 +-1918 +-1614 +-1306 +-1009 +-723 +-453 +-188 +81 +365 +657 +958 +1248 +1515 +1740 +1899 +1982 +1963 +1875 +1737 +1565 +1378 +1201 +1043 +899 +768 +642 +507 +359 +200 +37 +-124 +-257 +-348 +-394 +-397 +-378 +-348 +-344 +-377 +-445 +-535 +-637 +-744 +-824 +-860 +-843 +-781 +-687 +-573 +-461 +-366 +-297 +-259 +-245 +-240 +-247 +-245 +-235 +-232 +-249 +-309 +-414 +-552 +-692 +-820 +-882 +-851 +-730 +-527 +-255 +68 +393 +697 +970 +1200 +1393 +1548 +1667 +1749 +1789 +1786 +1723 +1587 +1395 +1158 +879 +580 +298 +47 +-165 +-327 +-458 +-549 +-629 +-699 +-769 +-845 +-924 +-1007 +-1090 +-1157 +-1200 +-1212 +-1193 +-1136 +-1050 +-945 +-824 +-692 +-546 +-399 +-237 +-83 +59 +171 +263 +326 +355 +368 +361 +350 +337 +334 +351 +381 +415 +442 +451 +442 +432 +418 +401 +395 +401 +418 +445 +485 +531 +559 +573 +571 +548 +499 +438 +368 +296 +230 +177 +127 +66 +-15 +-126 +-277 +-462 +-658 +-860 +-1053 +-1224 +-1357 +-1459 +-1522 +-1525 +-1476 +-1368 +-1205 +-995 +-752 +-478 +-175 +138 +448 +736 +988 +1190 +1339 +1441 +1495 +1503 +1464 +1388 +1281 +1155 +1024 +885 +749 +608 +474 +348 +232 +123 +15 +-100 +-229 +-380 +-550 +-733 +-930 +-1123 +-1295 +-1424 +-1504 +-1520 +-1473 +-1366 +-1224 +-1055 +-876 +-698 +-527 +-365 +-194 +-5 +220 +473 +752 +1040 +1310 +1524 +1653 +1695 +1649 +1528 +1351 +1150 +955 +781 +628 +493 +362 +218 +52 +-141 +-354 +-562 +-765 +-949 +-1096 +-1207 +-1295 +-1363 +-1416 +-1466 +-1504 +-1516 +-1497 +-1424 +-1256 +-992 +-661 +-282 +117 +503 +834 +1096 +1290 +1411 +1445 +1412 +1337 +1238 +1112 +973 +839 +697 +555 +406 +250 +91 +-55 +-186 +-309 +-407 +-481 +-543 +-606 +-672 +-737 +-804 +-853 +-881 +-870 +-812 +-707 +-553 +-366 +-153 +62 +261 +443 +600 +750 +895 +1040 +1184 +1324 +1442 +1494 +1449 +1290 +1025 +657 +223 +-216 +-615 +-959 +-1233 +-1420 +-1540 +-1609 +-1640 +-1642 +-1633 +-1610 +-1567 +-1522 +-1446 +-1314 +-1139 +-915 +-643 +-335 +-12 +315 +648 +978 +1299 +1613 +1923 +2203 +2463 +2670 +2796 +2805 +2690 +2472 +2157 +1774 +1378 +993 +632 +289 +-33 +-342 +-650 +-949 +-1250 +-1543 +-1814 +-2055 +-2254 +-2395 +-2459 +-2446 +-2362 +-2215 +-2028 +-1816 +-1602 +-1387 +-1165 +-920 +-640 +-324 +24 +390 +746 +1056 +1288 +1438 +1512 +1519 +1485 +1438 +1400 +1369 +1324 +1279 +1215 +1125 +1016 +879 +737 +600 +479 +374 +292 +229 +171 +107 +17 +-94 +-228 +-386 +-553 +-710 +-836 +-909 +-923 +-881 +-788 +-659 +-516 +-378 +-258 +-166 +-107 +-81 +-86 +-124 +-196 +-294 +-415 +-561 +-716 +-868 +-1014 +-1128 +-1191 +-1196 +-1142 +-1009 +-814 +-579 +-312 +-26 +255 +521 +771 +1000 +1194 +1345 +1464 +1535 +1551 +1522 +1449 +1353 +1239 +1119 +1001 +885 +780 +680 +576 +460 +330 +160 +-32 +-247 +-465 +-668 +-849 +-983 +-1077 +-1133 +-1143 +-1130 +-1102 +-1076 +-1044 +-1009 +-963 +-889 +-785 +-664 +-529 +-387 +-260 +-138 +-36 +51 +110 +147 +171 +188 +195 +212 +232 +259 +288 +315 +344 +361 +378 +389 +391 +399 +409 +419 +430 +447 +467 +498 +532 +581 +634 +686 +740 +782 +798 +784 +744 +655 +515 +330 +111 +-138 +-391 +-629 +-850 +-1053 +-1236 +-1391 +-1521 +-1619 +-1665 +-1655 +-1581 +-1433 +-1214 +-941 +-635 +-327 +-36 +216 +408 +549 +653 +735 +800 +870 +957 +1058 +1163 +1252 +1321 +1340 +1307 +1227 +1103 +958 +814 +680 +562 +470 +373 +258 +100 +-97 +-335 +-610 +-891 +-1146 +-1346 +-1488 +-1570 +-1594 +-1573 +-1519 +-1438 +-1336 +-1200 +-1028 +-818 +-578 +-307 +-2 +318 +624 +884 +1087 +1215 +1261 +1241 +1186 +1126 +1077 +1057 +1064 +1095 +1125 +1121 +1064 +955 +783 +546 +273 +-7 +-290 +-568 +-822 +-1049 +-1259 +-1439 +-1584 +-1703 +-1773 +-1774 +-1692 +-1525 +-1269 +-950 +-615 +-303 +-42 +165 +319 +439 +543 +648 +757 +866 +976 +1064 +1125 +1151 +1118 +1016 +870 +689 +499 +319 +173 +75 +17 +-22 +-63 +-134 +-250 +-416 +-617 +-817 +-983 +-1103 +-1154 +-1118 +-1003 +-828 +-614 +-374 +-127 +118 +357 +588 +806 +1011 +1194 +1335 +1422 +1461 +1431 +1310 +1117 +868 +593 +312 +58 +-149 +-314 +-454 +-597 +-751 +-935 +-1140 +-1373 +-1621 +-1840 +-1990 +-2057 +-2036 +-1905 +-1698 +-1442 +-1162 +-874 +-587 +-297 +16 +353 +709 +1086 +1472 +1836 +2158 +2419 +2602 +2684 +2673 +2576 +2398 +2176 +1929 +1665 +1412 +1148 +863 +544 +197 +-177 +-562 +-944 +-1293 +-1597 +-1854 +-2048 +-2171 +-2242 +-2277 +-2260 +-2219 +-2150 +-2035 +-1873 +-1671 +-1423 +-1132 +-810 +-480 +-162 +133 +383 +576 +722 +834 +914 +980 +1030 +1078 +1121 +1155 +1200 +1232 +1255 +1262 +1258 +1235 +1187 +1123 +1028 +898 +738 +551 +343 +124 +-96 +-306 +-482 +-621 +-713 +-750 +-743 +-698 +-619 +-511 +-383 +-250 +-121 +8 +110 +163 +165 +103 +-31 +-218 +-437 +-667 +-901 +-1105 +-1264 +-1375 +-1426 +-1418 +-1344 +-1218 +-1044 +-833 +-617 +-400 +-189 +-1 +174 +348 +526 +698 +858 +1004 +1122 +1216 +1290 +1349 +1379 +1381 +1362 +1315 +1246 +1158 +1058 +948 +819 +673 +514 +337 +149 +-39 +-232 +-416 +-588 +-731 +-848 +-943 +-1006 +-1056 +-1074 +-1064 +-1026 +-961 +-887 +-808 +-730 +-672 +-620 +-574 +-527 +-469 +-393 +-296 +-183 +-58 +57 +162 +241 +278 +271 +244 +212 +177 +155 +152 +174 +202 +233 +258 +270 +279 +289 +309 +349 +440 +575 +740 +922 +1103 +1257 +1341 +1336 +1245 +1075 +820 +518 +214 +-70 +-320 +-540 +-733 +-916 +-1076 +-1230 +-1367 +-1475 +-1542 +-1557 +-1512 +-1407 +-1252 +-1066 +-877 +-686 +-503 +-329 +-175 +-35 +97 +238 +383 +534 +696 +855 +992 +1089 +1147 +1166 +1164 +1159 +1160 +1176 +1207 +1236 +1242 +1203 +1107 +936 +676 +352 +-3 +-361 +-703 +-998 +-1228 +-1402 +-1527 +-1604 +-1629 +-1609 +-1538 +-1430 +-1290 +-1126 +-932 +-722 +-514 +-312 +-128 +22 +145 +240 +326 +424 +547 +703 +900 +1136 +1374 +1574 +1716 +1780 +1734 +1571 +1328 +1044 +745 +457 +201 +-18 +-225 +-423 +-627 +-832 +-1033 +-1225 +-1398 +-1542 +-1619 +-1622 +-1546 +-1399 +-1190 +-948 +-715 +-507 +-331 +-189 +-70 +34 +148 +278 +421 +569 +703 +813 +896 +943 +961 +961 +949 +931 +902 +861 +791 +679 +510 +281 +-5 +-312 +-606 +-871 +-1072 +-1182 +-1197 +-1142 +-1019 +-857 +-683 +-510 +-350 +-197 +-53 +103 +275 +453 +641 +823 +994 +1129 +1219 +1267 +1252 +1184 +1081 +957 +824 +691 +548 +385 +189 +-43 +-318 +-628 +-942 +-1255 +-1547 +-1785 +-1960 +-2067 +-2106 +-2073 +-1976 +-1837 +-1663 +-1451 +-1216 +-948 +-648 +-316 +36 +411 +789 +1163 +1517 +1830 +2090 +2287 +2429 +2508 +2536 +2507 +2429 +2286 +2097 +1869 +1599 +1287 +943 +584 +201 +-186 +-559 +-906 +-1225 +-1510 +-1750 +-1943 +-2096 +-2192 +-2217 +-2174 +-2072 +-1920 +-1733 +-1533 +-1321 +-1111 +-916 +-740 +-580 +-428 +-280 +-135 +15 +172 +328 +486 +643 +788 +930 +1072 +1208 +1337 +1446 +1534 +1589 +1602 +1553 +1436 +1254 +1021 +741 +456 +177 +-82 +-296 +-448 +-528 +-544 +-498 +-406 +-289 +-166 +-34 +82 +180 +248 +288 +287 +233 +135 +-7 +-191 +-391 +-585 +-762 +-922 +-1052 +-1145 +-1226 +-1291 +-1331 +-1340 +-1319 +-1253 +-1146 +-999 +-829 +-631 +-427 +-226 +-21 +170 +342 +489 +621 +739 +857 +978 +1108 +1231 +1351 +1449 +1502 +1507 +1454 +1349 +1191 +1008 +829 +666 +526 +402 +288 +176 +53 +-88 +-246 +-414 +-579 +-726 +-846 +-916 +-933 +-908 +-876 +-846 +-826 +-822 +-842 +-869 +-878 +-860 +-796 +-687 +-531 +-337 +-138 +32 +157 +236 +254 +211 +130 +34 +-55 +-130 +-171 +-179 +-169 +-148 +-118 +-72 +-12 +85 +220 +392 +599 +826 +1042 +1222 +1350 +1426 +1435 +1380 +1270 +1121 +943 +751 +557 +359 +155 +-63 +-295 +-544 +-791 +-1020 +-1220 +-1379 +-1477 +-1505 +-1470 +-1379 +-1252 +-1117 +-994 +-879 +-781 +-692 +-599 +-505 +-389 +-254 +-106 +42 +192 +328 +461 +601 +744 +901 +1073 +1265 +1460 +1628 +1745 +1804 +1779 +1646 +1414 +1111 +758 +390 +55 +-226 +-439 +-603 +-725 +-818 +-906 +-993 +-1094 +-1201 +-1305 +-1388 +-1443 +-1441 +-1379 +-1278 +-1137 +-983 +-816 +-654 +-488 +-315 +-129 +81 +321 +581 +852 +1125 +1365 +1558 +1683 +1743 +1727 +1643 +1503 +1331 +1135 +922 +691 +446 +188 +-78 +-340 +-591 +-815 +-988 +-1106 +-1176 +-1191 +-1160 +-1107 +-1042 +-989 +-958 +-943 +-938 +-934 +-906 +-825 +-692 +-507 +-282 +-38 +205 +436 +644 +824 +976 +1091 +1174 +1221 +1226 +1187 +1102 +957 +757 +517 +259 +-6 +-251 +-461 +-632 +-755 +-837 +-869 +-873 +-843 +-795 +-736 +-675 +-601 +-508 +-397 +-254 +-82 +108 +303 +507 +699 +874 +1032 +1164 +1257 +1316 +1333 +1310 +1248 +1139 +990 +793 +569 +320 +49 +-243 +-535 +-834 +-1122 +-1393 +-1636 +-1836 +-1992 +-2086 +-2123 +-2099 +-2007 +-1859 +-1672 +-1446 +-1194 +-918 +-624 +-311 +18 +353 +697 +1044 +1385 +1709 +2017 +2294 +2514 +2670 +2749 +2736 +2620 +2429 +2172 +1860 +1517 +1159 +794 +424 +65 +-281 +-613 +-920 +-1186 +-1414 +-1598 +-1719 +-1783 +-1800 +-1770 +-1708 +-1626 +-1537 +-1461 +-1390 +-1332 +-1282 +-1226 +-1159 +-1072 +-949 +-789 +-597 +-366 +-112 +164 +453 +736 +1002 +1243 +1453 +1600 +1681 +1683 +1614 +1476 +1287 +1074 +850 +641 +453 +303 +181 +84 +12 +-37 +-64 +-72 +-55 +-13 +57 +159 +275 +385 +462 +500 +483 +394 +250 +63 +-144 +-343 +-519 +-658 +-765 +-850 +-925 +-1009 +-1105 +-1208 +-1309 +-1397 +-1451 +-1445 +-1390 +-1280 +-1112 +-904 +-678 +-465 +-266 +-90 +67 +220 +378 +544 +728 +915 +1098 +1260 +1386 +1467 +1472 +1416 +1324 +1206 +1077 +961 +865 +789 +724 +650 +563 +458 +332 +186 +26 +-133 +-284 +-423 +-552 +-664 +-769 +-863 +-943 +-1010 +-1052 +-1068 +-1051 +-990 +-874 +-715 +-526 +-337 +-170 +-44 +25 +33 +-6 +-72 +-154 +-232 +-291 +-333 +-356 +-370 +-376 +-373 +-366 +-343 +-303 +-228 +-107 +63 +263 +487 +715 +935 +1129 +1286 +1399 +1467 +1480 +1453 +1389 +1288 +1159 +990 +782 +533 +259 +-27 +-316 +-583 +-804 +-967 +-1061 +-1089 +-1062 +-1005 +-956 +-935 +-954 +-1003 +-1075 +-1157 +-1217 +-1230 +-1190 +-1095 +-938 +-727 +-490 +-244 +4 +244 +474 +693 +901 +1091 +1265 +1419 +1532 +1599 +1611 +1569 +1474 +1340 +1178 +1000 +828 +670 +518 +373 +219 +43 +-160 +-385 +-612 +-837 +-1037 +-1201 +-1325 +-1404 +-1449 +-1474 +-1487 +-1480 +-1447 +-1387 +-1289 +-1135 +-929 +-675 +-376 +-39 +317 +662 +984 +1259 +1473 +1611 +1680 +1681 +1617 +1508 +1366 +1204 +1021 +839 +654 +475 +304 +132 +-29 +-180 +-315 +-431 +-540 +-649 +-770 +-901 +-1033 +-1160 +-1263 +-1342 +-1385 +-1376 +-1313 +-1189 +-1010 +-785 +-540 +-281 +-23 +222 +453 +657 +832 +972 +1078 +1142 +1164 +1145 +1086 +979 +837 +670 +488 +298 +113 +-67 +-244 +-411 +-562 +-688 +-799 +-877 +-921 +-934 +-914 +-855 +-762 +-644 +-512 +-364 +-207 +-34 +159 +365 +583 +809 +1028 +1227 +1393 +1512 +1581 +1572 +1497 +1365 +1180 +959 +717 +465 +203 +-65 +-339 +-612 +-879 +-1135 +-1381 +-1606 +-1804 +-1959 +-2078 +-2140 +-2135 +-2084 +-1977 +-1824 +-1632 +-1400 +-1128 +-817 +-476 +-102 +295 +699 +1108 +1513 +1887 +2210 +2471 +2654 +2752 +2751 +2663 +2496 +2250 +1948 +1608 +1249 +893 +548 +231 +-45 +-276 +-452 +-586 +-693 +-791 +-895 +-1020 +-1166 +-1329 +-1491 +-1638 +-1755 +-1837 +-1872 +-1856 +-1802 +-1701 +-1566 +-1404 +-1217 +-1003 +-766 +-507 +-222 +80 +390 +692 +972 +1207 +1366 +1434 +1410 +1316 +1179 +1013 +858 +732 +636 +561 +508 +464 +414 +360 +300 +241 +203 +193 +213 +264 +342 +434 +508 +559 +576 +556 +490 +382 +253 +114 +-24 +-147 +-263 +-372 +-488 +-619 +-770 +-935 +-1096 +-1252 +-1389 +-1486 +-1525 +-1521 +-1477 +-1389 +-1269 +-1121 +-958 +-769 +-569 +-353 +-122 +104 +331 +542 +732 +878 +972 +1027 +1052 +1053 +1052 +1054 +1075 +1111 +1153 +1193 +1216 +1209 +1160 +1066 +929 +749 +545 +330 +136 +-42 +-201 +-345 +-475 +-594 +-707 +-797 +-863 +-897 +-889 +-833 +-749 +-636 +-512 +-398 +-310 +-256 +-228 +-228 +-245 +-270 +-293 +-311 +-329 +-349 +-379 +-430 +-495 +-575 +-661 +-731 +-757 +-729 +-635 +-461 +-216 +80 +393 +694 +968 +1189 +1349 +1447 +1490 +1473 +1422 +1343 +1243 +1125 +986 +837 +679 +524 +368 +222 +86 +-43 +-161 +-275 +-396 +-535 +-697 +-864 +-1044 +-1217 +-1366 +-1478 +-1545 +-1567 +-1529 +-1437 +-1299 +-1132 +-953 +-772 +-582 +-384 +-187 +24 +245 +478 +700 +910 +1094 +1237 +1336 +1388 +1398 +1375 +1341 +1283 +1231 +1179 +1122 +1055 +970 +855 +706 +515 +285 +22 +-268 +-563 +-840 +-1094 +-1328 +-1524 +-1691 +-1813 +-1877 +-1876 +-1802 +-1661 +-1452 +-1190 +-898 +-590 +-271 +40 +330 +585 +802 +975 +1096 +1187 +1245 +1272 +1287 +1277 +1250 +1212 +1157 +1091 +1009 +902 +770 +617 +441 +257 +58 +-157 +-374 +-586 +-793 +-979 +-1133 +-1251 +-1334 +-1376 +-1374 +-1337 +-1257 +-1147 +-1002 +-832 +-631 +-404 +-172 +59 +279 +477 +646 +787 +899 +972 +1007 +1006 +969 +904 +814 +707 +589 +460 +312 +145 +-33 +-214 +-406 +-592 +-757 +-889 +-977 +-1027 +-1024 +-973 +-889 +-777 +-639 +-480 +-294 +-87 +140 +379 +623 +860 +1074 +1252 +1395 +1493 +1540 +1537 +1495 +1410 +1285 +1129 +943 +727 +494 +240 +-29 +-305 +-574 +-842 +-1101 +-1344 +-1573 +-1784 +-1974 +-2142 +-2278 +-2360 +-2375 +-2308 +-2156 +-1902 +-1565 +-1165 +-720 +-254 +206 +639 +1032 +1378 +1675 +1913 +2102 +2236 +2318 +2339 +2303 +2205 +2053 +1863 +1648 +1425 +1207 +1004 +828 +670 +529 +386 +229 +37 +-196 +-459 +-745 +-1046 +-1339 +-1608 +-1819 +-1969 +-2050 +-2066 +-2022 +-1933 +-1818 +-1672 +-1495 +-1289 +-1056 +-803 +-538 +-265 +7 +258 +473 +651 +771 +840 +857 +844 +820 +786 +758 +730 +706 +669 +631 +585 +535 +489 +448 +422 +413 +434 +467 +505 +543 +577 +592 +591 +578 +564 +539 +519 +493 +461 +419 +351 +247 +95 +-99 +-321 +-567 +-819 +-1049 +-1240 +-1385 +-1482 +-1526 +-1535 +-1512 +-1464 +-1397 +-1307 +-1195 +-1061 +-905 +-728 +-536 +-344 +-154 +20 +176 +307 +424 +527 +629 +746 +875 +1018 +1164 +1298 +1406 +1468 +1469 +1411 +1300 +1143 +972 +801 +644 +504 +378 +258 +140 +16 +-122 +-263 +-406 +-533 +-639 +-707 +-726 +-693 +-621 +-523 +-414 +-306 +-218 +-148 +-107 +-97 +-117 +-169 +-242 +-343 +-468 +-598 +-733 +-867 +-977 +-1045 +-1064 +-1030 +-932 +-778 +-582 +-361 +-126 +97 +303 +481 +630 +756 +862 +952 +1026 +1099 +1166 +1220 +1256 +1264 +1250 +1203 +1135 +1047 +937 +814 +679 +531 +365 +184 +-11 +-232 +-459 +-680 +-898 +-1097 +-1280 +-1420 +-1532 +-1595 +-1598 +-1555 +-1474 +-1359 +-1209 +-1043 +-858 +-666 +-467 +-274 +-85 +92 +257 +410 +548 +671 +790 +906 +1018 +1127 +1239 +1348 +1440 +1513 +1554 +1553 +1507 +1408 +1252 +1040 +771 +463 +126 +-223 +-559 +-867 +-1139 +-1368 +-1537 +-1651 +-1711 +-1712 +-1658 +-1569 +-1438 +-1282 +-1106 +-918 +-722 +-521 +-321 +-121 +80 +279 +469 +655 +824 +971 +1093 +1192 +1263 +1304 +1322 +1307 +1266 +1203 +1109 +985 +831 +641 +425 +191 +-45 +-270 +-479 +-667 +-825 +-954 +-1061 +-1132 +-1175 +-1194 +-1178 +-1135 +-1063 +-957 +-824 +-669 +-502 +-327 +-154 +14 +171 +318 +460 +591 +712 +813 +885 +925 +926 +880 +785 +658 +494 +312 +122 +-66 +-246 +-419 +-577 +-717 +-840 +-939 +-1009 +-1045 +-1034 +-972 +-849 +-681 +-477 +-245 +1 +235 +451 +642 +807 +940 +1053 +1153 +1245 +1331 +1401 +1454 +1487 +1483 +1420 +1303 +1131 +907 +634 +329 +7 +-321 +-649 +-973 +-1291 +-1604 +-1892 +-2145 +-2354 +-2508 +-2561 +-2516 +-2375 +-2132 +-1823 +-1470 +-1097 +-721 +-357 +-18 +295 +582 +841 +1085 +1307 +1499 +1658 +1786 +1881 +1941 +1969 +1971 +1944 +1892 +1826 +1745 +1648 +1521 +1355 +1146 +893 +602 +280 +-58 +-391 +-711 +-1004 +-1261 +-1470 +-1630 +-1751 +-1833 +-1874 +-1876 +-1825 +-1733 +-1599 +-1432 +-1235 +-1018 +-792 +-569 +-361 +-179 +-36 +74 +164 +236 +300 +368 +437 +507 +571 +623 +655 +660 +641 +604 +546 +494 +457 +440 +444 +476 +521 +565 +610 +657 +706 +746 +782 +820 +848 +872 +886 +867 +801 +688 +531 +325 +96 +-138 +-371 +-584 +-763 +-903 +-1005 +-1086 +-1153 +-1219 +-1287 +-1348 +-1403 +-1439 +-1443 +-1413 +-1350 +-1243 +-1096 +-916 +-721 +-524 +-328 +-139 +42 +218 +385 +543 +697 +846 +986 +1104 +1207 +1280 +1324 +1341 +1327 +1290 +1228 +1138 +1022 +872 +699 +504 +288 +71 +-127 +-292 +-415 +-480 +-485 +-446 +-372 +-269 +-159 +-60 +15 +62 +67 +31 +-35 +-127 +-236 +-356 +-478 +-602 +-720 +-823 +-910 +-979 +-1027 +-1041 +-1031 +-989 +-914 +-814 +-695 +-567 +-433 +-296 +-159 +-19 +119 +254 +385 +518 +645 +778 +907 +1021 +1125 +1219 +1299 +1355 +1392 +1392 +1360 +1285 +1172 +1024 +839 +625 +386 +132 +-132 +-390 +-634 +-852 +-1048 +-1201 +-1315 +-1388 +-1416 +-1411 +-1378 +-1321 +-1251 +-1165 +-1072 +-982 +-883 +-788 +-680 +-563 +-434 +-282 +-115 +78 +297 +538 +782 +1015 +1226 +1407 +1552 +1658 +1721 +1731 +1693 +1609 +1482 +1302 +1081 +822 +534 +233 +-59 +-339 +-593 +-820 +-1014 +-1171 +-1295 +-1379 +-1427 +-1444 +-1434 +-1398 +-1346 +-1269 +-1158 +-1020 +-863 +-680 +-479 +-274 +-58 +152 +359 +554 +744 +926 +1093 +1243 +1360 +1434 +1457 +1428 +1352 +1225 +1060 +880 +686 +496 +315 +143 +-24 +-194 +-361 +-531 +-693 +-840 +-965 +-1067 +-1133 +-1154 +-1136 +-1074 +-982 +-867 +-750 +-636 +-519 +-398 +-260 +-104 +74 +271 +481 +689 +865 +990 +1057 +1050 +964 +827 +660 +480 +291 +102 +-79 +-252 +-417 +-568 +-708 +-832 +-925 +-985 +-1005 +-971 +-892 +-787 +-663 +-521 +-369 +-217 +-69 +79 +231 +400 +587 +791 +1014 +1244 +1464 +1657 +1808 +1907 +1931 +1869 +1729 +1514 +1239 +916 +565 +192 +-194 +-584 +-968 +-1338 +-1666 +-1943 +-2166 +-2314 +-2383 +-2370 +-2290 +-2158 +-1977 +-1768 +-1542 +-1313 +-1084 +-853 +-612 +-353 +-84 +198 +482 +764 +1029 +1270 +1485 +1671 +1820 +1951 +2068 +2159 +2226 +2249 +2228 +2156 +2009 +1787 +1498 +1164 +805 +437 +84 +-236 +-526 +-779 +-999 +-1201 +-1373 +-1516 +-1624 +-1693 +-1719 +-1697 +-1633 +-1535 +-1407 +-1262 +-1115 +-969 +-839 +-704 +-575 +-446 +-314 +-177 +-38 +98 +220 +324 +399 +443 +449 +421 +377 +328 +284 +260 +276 +315 +381 +468 +567 +665 +750 +829 +888 +933 +965 +979 +983 +975 +957 +918 +856 +783 +688 +575 +449 +313 +157 +-11 +-176 +-352 +-531 +-713 +-895 +-1070 +-1217 +-1337 +-1429 +-1488 +-1518 +-1510 +-1465 +-1399 +-1309 +-1208 +-1101 +-989 +-872 +-738 +-583 +-402 +-203 +20 +262 +508 +749 +968 +1164 +1319 +1417 +1475 +1478 +1419 +1310 +1159 +977 +778 +584 +401 +240 +109 +12 +-51 +-86 +-83 +-44 +9 +70 +137 +205 +251 +269 +260 +217 +148 +54 +-59 +-183 +-314 +-446 +-573 +-694 +-800 +-882 +-941 +-977 +-993 +-988 +-972 +-935 +-896 +-852 +-801 +-739 +-667 +-592 +-492 +-383 +-262 +-115 +47 +225 +414 +614 +820 +1026 +1227 +1404 +1544 +1637 +1688 +1680 +1609 +1490 +1323 +1125 +903 +665 +442 +221 +16 +-176 +-356 +-516 +-668 +-807 +-939 +-1051 +-1145 +-1231 +-1295 +-1346 +-1380 +-1400 +-1399 +-1385 +-1343 +-1265 +-1145 +-987 +-782 +-544 +-293 +-26 +248 +510 +752 +973 +1175 +1351 +1499 +1622 +1694 +1725 +1712 +1640 +1515 +1344 +1145 +916 +676 +436 +205 +-9 +-208 +-400 +-588 +-768 +-942 +-1112 +-1287 +-1420 +-1510 +-1556 +-1554 +-1498 +-1390 +-1255 +-1090 +-911 +-727 +-542 +-340 +-141 +77 +309 +554 +785 +998 +1194 +1336 +1409 +1423 +1397 +1309 +1185 +1047 +907 +777 +645 +511 +365 +215 +55 +-123 +-313 +-499 +-667 +-831 +-961 +-1045 +-1100 +-1130 +-1131 +-1092 +-1032 +-950 +-834 +-685 +-510 +-300 +-68 +161 +376 +580 +732 +834 +878 +879 +833 +753 +652 +533 +407 +281 +157 +28 +-106 +-244 +-390 +-524 +-638 +-747 +-835 +-896 +-931 +-945 +-939 +-910 +-870 +-795 +-679 +-530 +-341 +-91 +203 +514 +830 +1155 +1469 +1720 +1902 +2022 +2066 +2026 +1927 +1756 +1531 +1262 +961 +628 +276 +-60 +-398 +-738 +-1052 +-1316 +-1525 +-1703 +-1820 +-1882 +-1909 +-1910 +-1886 +-1847 +-1796 +-1716 +-1619 +-1488 +-1322 +-1102 +-854 +-580 +-295 +15 +316 +610 +896 +1163 +1420 +1646 +1853 +2034 +2180 +2269 +2286 +2232 +2117 +1931 +1688 +1422 +1141 +865 +597 +352 +121 +-104 +-329 +-542 +-760 +-953 +-1133 +-1293 +-1399 +-1467 +-1487 +-1477 +-1412 +-1314 +-1204 +-1070 +-928 +-784 +-651 +-518 +-393 +-298 +-230 +-161 +-109 +-83 +-70 +-58 +-54 +-40 +-18 +21 +65 +120 +191 +254 +320 +390 +451 +514 +565 +625 +676 +737 +810 +878 +937 +994 +1034 +1055 +1050 +1020 +969 +873 +749 +616 +457 +297 +145 +-3 +-142 +-272 +-399 +-537 +-677 +-797 +-938 +-1074 +-1186 +-1295 +-1387 +-1468 +-1504 +-1519 +-1493 +-1417 +-1298 +-1145 +-943 +-689 +-444 +-190 +72 +328 +562 +767 +953 +1085 +1157 +1184 +1167 +1102 +993 +867 +735 +585 +443 +338 +248 +180 +148 +145 +160 +183 +236 +285 +319 +369 +399 +411 +404 +392 +358 +290 +192 +99 +-17 +-141 +-250 +-345 +-419 +-480 +-531 +-586 +-629 +-686 +-756 +-837 +-908 +-966 +-1023 +-1060 +-1063 +-1052 +-1017 +-941 +-830 +-695 +-527 +-333 +-125 +101 +351 +583 +795 +996 +1166 +1301 +1380 +1420 +1430 +1399 +1334 +1249 +1161 +1068 +970 +854 +713 +572 +411 +230 +38 +-142 +-307 +-486 +-653 +-805 +-942 +-1083 +-1229 +-1374 +-1491 +-1558 +-1596 +-1600 +-1533 +-1406 +-1254 +-1048 +-821 +-568 +-328 +-109 +108 +311 +522 +714 +873 +1059 +1229 +1364 +1458 +1512 +1533 +1489 +1403 +1287 +1151 +998 +843 +668 +498 +326 +141 +-64 +-293 +-502 +-718 +-940 +-1138 +-1273 +-1378 +-1455 +-1471 +-1435 +-1366 +-1278 +-1143 +-1002 +-846 +-651 +-450 +-229 +-10 +213 +412 +594 +770 +914 +1018 +1078 +1135 +1156 +1159 +1139 +1096 +1049 +967 +860 +718 +554 +384 +177 +-37 +-241 +-418 +-594 +-749 +-858 +-953 +-1016 +-1053 +-1048 +-1013 +-935 +-817 +-669 +-498 +-305 +-113 +54 +192 +320 +428 +474 +525 +553 +579 +599 +600 +616 +602 +582 +534 +436 +328 +194 +26 +-150 +-323 +-500 +-680 +-822 +-951 +-1065 +-1146 +-1185 +-1183 +-1146 +-1029 +-860 +-661 +-416 +-107 +195 +492 +784 +1052 +1286 +1461 +1619 +1702 +1734 +1732 +1665 +1544 +1381 +1182 +965 +724 +475 +232 +-21 +-254 +-477 +-664 +-852 +-1031 +-1176 +-1318 +-1442 +-1564 +-1673 +-1749 +-1787 +-1803 +-1770 +-1665 +-1527 +-1345 +-1118 +-861 +-595 +-316 +-21 +261 +519 +775 +1020 +1234 +1420 +1573 +1697 +1771 +1828 +1844 +1805 +1735 +1630 +1484 +1310 +1113 +896 +654 +393 +150 +-102 +-335 +-556 +-734 +-879 +-979 +-1039 +-1052 +-1036 +-1011 +-959 +-905 +-869 +-818 +-753 +-700 +-642 +-587 +-535 +-488 +-431 +-377 +-331 +-281 +-245 +-208 +-198 +-177 +-156 +-163 +-152 +-124 +-75 +-37 +35 +132 +230 +330 +435 +540 +633 +725 +803 +851 +878 +903 +902 +890 +876 +847 +800 +758 +722 +666 +613 +548 +468 +385 +284 +173 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b3_246_942.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b3_246_942.samples new file mode 100644 index 00000000..d4bd7e6e --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b3_246_942.samples @@ -0,0 +1,4096 @@ +1099 +1067 +1015 +950 +875 +799 +750 +722 +713 +704 +677 +616 +500 +342 +157 +-50 +-260 +-452 +-605 +-717 +-791 +-824 +-848 +-859 +-865 +-892 +-943 +-1014 +-1095 +-1184 +-1241 +-1245 +-1207 +-1125 +-999 +-853 +-702 +-549 +-399 +-266 +-138 +-3 +130 +267 +424 +594 +766 +934 +1086 +1194 +1247 +1239 +1188 +1111 +1023 +942 +870 +801 +729 +657 +564 +447 +283 +77 +-158 +-400 +-634 +-850 +-1042 +-1192 +-1296 +-1356 +-1349 +-1294 +-1201 +-1080 +-914 +-718 +-499 +-269 +-33 +191 +406 +611 +786 +940 +1057 +1125 +1143 +1106 +1019 +886 +714 +518 +316 +122 +-67 +-237 +-384 +-524 +-661 +-802 +-944 +-1089 +-1220 +-1333 +-1428 +-1489 +-1505 +-1464 +-1373 +-1216 +-991 +-730 +-442 +-152 +136 +402 +640 +844 +998 +1114 +1203 +1283 +1385 +1512 +1656 +1788 +1894 +1947 +1928 +1835 +1681 +1482 +1262 +1040 +817 +592 +361 +117 +-131 +-375 +-618 +-860 +-1107 +-1346 +-1576 +-1789 +-1958 +-2077 +-2136 +-2139 +-2073 +-1942 +-1777 +-1572 +-1328 +-1062 +-799 +-552 +-324 +-125 +45 +196 +330 +445 +551 +657 +764 +887 +1009 +1116 +1198 +1235 +1219 +1173 +1109 +1046 +990 +962 +952 +961 +992 +1025 +1047 +1054 +1019 +929 +784 +606 +405 +193 +5 +-153 +-280 +-372 +-428 +-472 +-528 +-599 +-679 +-795 +-933 +-1061 +-1176 +-1262 +-1300 +-1290 +-1248 +-1185 +-1109 +-1032 +-962 +-891 +-810 +-721 +-613 +-473 +-305 +-110 +102 +316 +521 +704 +856 +967 +1036 +1066 +1070 +1062 +1057 +1064 +1078 +1086 +1078 +1044 +967 +838 +668 +461 +227 +-16 +-252 +-482 +-701 +-895 +-1064 +-1198 +-1287 +-1324 +-1326 +-1293 +-1220 +-1108 +-952 +-738 +-488 +-238 +7 +235 +441 +629 +798 +933 +1029 +1071 +1066 +1002 +899 +759 +609 +462 +316 +183 +57 +-75 +-216 +-372 +-554 +-750 +-963 +-1182 +-1385 +-1542 +-1642 +-1673 +-1615 +-1472 +-1273 +-1045 +-811 +-593 +-387 +-188 +15 +224 +433 +633 +817 +982 +1141 +1297 +1447 +1590 +1713 +1798 +1855 +1883 +1871 +1817 +1706 +1552 +1359 +1150 +947 +739 +512 +259 +-17 +-300 +-588 +-870 +-1133 +-1378 +-1603 +-1805 +-1963 +-2069 +-2116 +-2094 +-2006 +-1860 +-1670 +-1455 +-1222 +-991 +-787 +-613 +-464 +-333 +-199 +-48 +127 +314 +512 +703 +868 +994 +1076 +1103 +1082 +1035 +978 +935 +915 +933 +980 +1050 +1136 +1215 +1253 +1252 +1204 +1106 +967 +809 +648 +481 +333 +219 +127 +51 +-19 +-94 +-195 +-322 +-457 +-614 +-773 +-914 +-1027 +-1107 +-1148 +-1158 +-1167 +-1169 +-1168 +-1175 +-1176 +-1165 +-1138 +-1093 +-1004 +-860 +-664 +-436 +-203 +10 +180 +317 +432 +533 +633 +737 +843 +950 +1050 +1144 +1225 +1278 +1298 +1288 +1241 +1153 +1033 +870 +671 +458 +233 +-8 +-252 +-493 +-715 +-911 +-1070 +-1194 +-1292 +-1358 +-1393 +-1381 +-1310 +-1176 +-979 +-733 +-467 +-203 +43 +269 +471 +646 +797 +897 +942 +950 +919 +862 +802 +745 +691 +645 +585 +490 +349 +161 +-82 +-359 +-643 +-918 +-1153 +-1334 +-1457 +-1534 +-1561 +-1536 +-1462 +-1350 +-1208 +-1044 +-883 +-712 +-537 +-357 +-158 +65 +298 +527 +750 +951 +1129 +1279 +1404 +1517 +1624 +1723 +1810 +1871 +1891 +1864 +1788 +1664 +1509 +1334 +1137 +914 +664 +386 +89 +-225 +-543 +-870 +-1171 +-1440 +-1669 +-1838 +-1944 +-1989 +-1981 +-1917 +-1814 +-1691 +-1560 +-1431 +-1306 +-1178 +-1038 +-894 +-722 +-513 +-287 +-46 +202 +429 +606 +739 +818 +841 +833 +816 +814 +829 +873 +956 +1059 +1149 +1230 +1284 +1294 +1271 +1226 +1158 +1075 +986 +896 +802 +707 +615 +512 +409 +303 +175 +24 +-139 +-294 +-436 +-560 +-645 +-713 +-779 +-842 +-918 +-1006 +-1103 +-1195 +-1269 +-1318 +-1338 +-1319 +-1261 +-1162 +-1028 +-863 +-687 +-521 +-370 +-245 +-129 +-7 +120 +257 +397 +536 +677 +808 +946 +1072 +1171 +1253 +1317 +1346 +1339 +1301 +1214 +1084 +912 +709 +486 +255 +19 +-224 +-463 +-679 +-879 +-1049 +-1195 +-1320 +-1406 +-1445 +-1416 +-1315 +-1132 +-890 +-607 +-312 +-54 +138 +271 +358 +420 +488 +578 +678 +771 +852 +906 +935 +935 +902 +832 +725 +560 +336 +79 +-193 +-465 +-711 +-920 +-1090 +-1224 +-1330 +-1395 +-1432 +-1444 +-1421 +-1360 +-1268 +-1142 +-986 +-808 +-617 +-416 +-206 +5 +222 +436 +637 +825 +990 +1139 +1276 +1403 +1523 +1625 +1705 +1774 +1830 +1875 +1899 +1884 +1804 +1648 +1419 +1124 +786 +427 +61 +-292 +-612 +-899 +-1142 +-1337 +-1482 +-1594 +-1668 +-1716 +-1763 +-1796 +-1808 +-1807 +-1777 +-1705 +-1586 +-1416 +-1201 +-949 +-694 +-449 +-228 +-38 +112 +230 +319 +392 +456 +516 +590 +678 +794 +924 +1045 +1140 +1213 +1249 +1244 +1227 +1213 +1204 +1208 +1220 +1219 +1192 +1131 +1041 +919 +770 +613 +448 +279 +128 +-4 +-110 +-198 +-275 +-361 +-467 +-589 +-735 +-888 +-1040 +-1182 +-1292 +-1370 +-1404 +-1398 +-1355 +-1281 +-1175 +-1054 +-931 +-811 +-696 +-593 +-496 +-386 +-257 +-122 +23 +178 +328 +475 +625 +775 +918 +1062 +1201 +1321 +1407 +1440 +1411 +1335 +1218 +1086 +940 +780 +592 +368 +104 +-194 +-496 +-772 +-1014 +-1206 +-1328 +-1389 +-1388 +-1328 +-1212 +-1053 +-867 +-663 +-465 +-293 +-151 +-55 +27 +126 +239 +384 +561 +734 +880 +987 +1054 +1064 +1017 +933 +804 +634 +436 +217 +-9 +-235 +-453 +-662 +-860 +-1039 +-1187 +-1310 +-1388 +-1423 +-1427 +-1396 +-1348 +-1269 +-1157 +-1021 +-858 +-674 +-469 +-247 +-16 +208 +418 +602 +749 +872 +980 +1090 +1205 +1337 +1498 +1671 +1846 +2003 +2118 +2182 +2146 +1995 +1726 +1383 +999 +604 +251 +-48 +-298 +-511 +-694 +-875 +-1061 +-1236 +-1398 +-1554 +-1702 +-1828 +-1928 +-1976 +-1954 +-1860 +-1696 +-1479 +-1241 +-1007 +-801 +-634 +-496 +-391 +-297 +-195 +-79 +53 +201 +360 +509 +640 +754 +845 +911 +959 +999 +1039 +1084 +1146 +1217 +1294 +1363 +1403 +1407 +1366 +1283 +1167 +1027 +889 +749 +619 +501 +406 +318 +229 +132 +22 +-113 +-272 +-444 +-628 +-817 +-983 +-1119 +-1222 +-1292 +-1330 +-1339 +-1332 +-1300 +-1242 +-1158 +-1055 +-943 +-835 +-746 +-661 +-594 +-527 +-429 +-295 +-126 +73 +283 +479 +644 +787 +911 +1037 +1168 +1287 +1392 +1473 +1504 +1479 +1411 +1298 +1123 +891 +613 +303 +-27 +-346 +-640 +-887 +-1064 +-1178 +-1214 +-1194 +-1142 +-1073 +-995 +-913 +-831 +-746 +-641 +-539 +-420 +-276 +-123 +50 +236 +423 +602 +771 +907 +999 +1038 +1032 +979 +880 +749 +588 +395 +191 +-24 +-241 +-448 +-633 +-796 +-946 +-1077 +-1195 +-1300 +-1385 +-1434 +-1444 +-1403 +-1327 +-1200 +-1029 +-830 +-613 +-393 +-178 +12 +160 +265 +356 +446 +561 +719 +934 +1181 +1442 +1706 +1937 +2111 +2216 +2263 +2218 +2065 +1833 +1535 +1204 +895 +633 +405 +199 +-1 +-229 +-488 +-758 +-1028 +-1282 +-1509 +-1694 +-1840 +-1937 +-1958 +-1911 +-1810 +-1680 +-1527 +-1370 +-1231 +-1100 +-975 +-865 +-743 +-602 +-444 +-278 +-101 +65 +208 +331 +434 +525 +616 +709 +797 +882 +970 +1061 +1160 +1261 +1358 +1436 +1464 +1456 +1403 +1319 +1221 +1123 +1033 +944 +855 +766 +672 +564 +447 +322 +185 +38 +-114 +-284 +-481 +-684 +-881 +-1060 +-1186 +-1251 +-1274 +-1279 +-1264 +-1238 +-1214 +-1188 +-1154 +-1110 +-1060 +-1000 +-925 +-828 +-710 +-584 +-438 +-284 +-132 +17 +164 +310 +457 +626 +818 +1020 +1228 +1426 +1589 +1698 +1737 +1680 +1541 +1332 +1054 +745 +435 +136 +-136 +-384 +-598 +-770 +-886 +-953 +-990 +-1005 +-1009 +-1016 +-1009 +-976 +-932 +-864 +-775 +-666 +-535 +-377 +-193 +4 +220 +442 +641 +802 +910 +973 +980 +946 +878 +782 +661 +523 +379 +224 +68 +-98 +-278 +-472 +-673 +-881 +-1085 +-1260 +-1390 +-1461 +-1452 +-1385 +-1276 +-1137 +-984 +-829 +-689 +-567 +-454 +-369 +-294 +-212 +-97 +56 +259 +516 +796 +1086 +1373 +1623 +1819 +1957 +2034 +2044 +2016 +1955 +1848 +1707 +1543 +1367 +1164 +944 +703 +420 +104 +-217 +-527 +-813 +-1062 +-1267 +-1433 +-1564 +-1657 +-1717 +-1741 +-1722 +-1680 +-1616 +-1538 +-1445 +-1343 +-1238 +-1108 +-954 +-803 +-646 +-485 +-337 +-208 +-96 +4 +106 +224 +359 +506 +657 +801 +916 +1014 +1098 +1188 +1284 +1369 +1428 +1448 +1425 +1365 +1303 +1242 +1185 +1127 +1070 +1009 +927 +834 +723 +585 +416 +224 +25 +-184 +-390 +-577 +-751 +-891 +-996 +-1075 +-1132 +-1173 +-1213 +-1241 +-1254 +-1262 +-1255 +-1224 +-1162 +-1079 +-973 +-861 +-754 +-658 +-577 +-502 +-426 +-333 +-213 +-55 +145 +388 +666 +958 +1238 +1483 +1675 +1791 +1816 +1763 +1627 +1416 +1172 +903 +622 +357 +111 +-121 +-321 +-484 +-620 +-739 +-832 +-905 +-973 +-1023 +-1052 +-1072 +-1075 +-1054 +-1003 +-912 +-767 +-575 +-354 +-114 +126 +347 +533 +682 +783 +837 +870 +875 +866 +850 +818 +764 +679 +564 +411 +206 +-31 +-286 +-553 +-810 +-1029 +-1187 +-1278 +-1295 +-1257 +-1184 +-1110 +-1044 +-993 +-963 +-941 +-913 +-885 +-836 +-742 +-597 +-409 +-163 +118 +398 +665 +913 +1122 +1304 +1461 +1598 +1715 +1820 +1921 +2000 +2044 +2035 +1947 +1775 +1539 +1260 +958 +650 +350 +53 +-228 +-481 +-702 +-899 +-1076 +-1236 +-1384 +-1522 +-1639 +-1728 +-1766 +-1747 +-1674 +-1566 +-1449 +-1329 +-1218 +-1117 +-1009 +-892 +-774 +-643 +-500 +-361 +-232 +-108 +17 +150 +294 +448 +614 +774 +912 +1031 +1139 +1210 +1257 +1288 +1305 +1314 +1319 +1328 +1334 +1334 +1318 +1286 +1230 +1151 +1035 +884 +712 +526 +335 +154 +-15 +-174 +-328 +-480 +-624 +-770 +-901 +-1023 +-1136 +-1223 +-1281 +-1306 +-1293 +-1244 +-1166 +-1076 +-993 +-932 +-896 +-889 +-896 +-890 +-854 +-779 +-664 +-505 +-302 +-54 +226 +523 +823 +1107 +1365 +1573 +1721 +1798 +1778 +1676 +1520 +1320 +1091 +858 +623 +392 +182 +0 +-154 +-303 +-441 +-585 +-726 +-863 +-985 +-1086 +-1160 +-1202 +-1195 +-1131 +-1013 +-854 +-666 +-461 +-263 +-82 +81 +232 +362 +476 +589 +704 +814 +921 +1004 +1044 +1021 +931 +769 +551 +299 +43 +-212 +-447 +-638 +-775 +-867 +-906 +-903 +-904 +-928 +-972 +-1041 +-1131 +-1202 +-1239 +-1229 +-1177 +-1068 +-924 +-759 +-570 +-363 +-149 +79 +308 +523 +719 +908 +1098 +1284 +1487 +1697 +1894 +2059 +2158 +2180 +2118 +1965 +1761 +1523 +1265 +1010 +763 +514 +260 +7 +-258 +-517 +-758 +-986 +-1190 +-1364 +-1501 +-1607 +-1674 +-1691 +-1675 +-1628 +-1554 +-1472 +-1382 +-1301 +-1224 +-1138 +-1051 +-956 +-843 +-704 +-560 +-404 +-232 +-54 +131 +321 +499 +654 +782 +891 +973 +1034 +1094 +1157 +1218 +1288 +1359 +1420 +1469 +1495 +1488 +1454 +1386 +1274 +1132 +977 +830 +682 +552 +420 +277 +116 +-66 +-260 +-458 +-654 +-828 +-972 +-1071 +-1129 +-1155 +-1145 +-1125 +-1090 +-1044 +-1006 +-977 +-974 +-998 +-1030 +-1056 +-1070 +-1059 +-1012 +-911 +-776 +-586 +-332 +-46 +263 +586 +894 +1165 +1387 +1545 +1619 +1619 +1556 +1438 +1303 +1161 +1014 +857 +706 +551 +388 +224 +43 +-169 +-383 +-592 +-788 +-950 +-1057 +-1117 +-1130 +-1097 +-1030 +-946 +-845 +-740 +-631 +-519 +-399 +-262 +-124 +32 +214 +417 +630 +837 +1016 +1124 +1137 +1050 +893 +688 +460 +251 +71 +-75 +-191 +-284 +-364 +-438 +-504 +-589 +-697 +-819 +-955 +-1103 +-1221 +-1294 +-1328 +-1304 +-1225 +-1121 +-1010 +-900 +-781 +-668 +-532 +-359 +-157 +79 +329 +588 +838 +1077 +1303 +1510 +1691 +1845 +1965 +2038 +2068 +2053 +1971 +1829 +1638 +1416 +1173 +925 +681 +425 +154 +-114 +-378 +-629 +-864 +-1072 +-1240 +-1379 +-1473 +-1536 +-1565 +-1568 +-1545 +-1502 +-1465 +-1433 +-1398 +-1354 +-1307 +-1239 +-1139 +-1014 +-859 +-681 +-484 +-271 +-66 +124 +278 +404 +506 +588 +686 +793 +909 +1036 +1169 +1298 +1413 +1492 +1537 +1548 +1533 +1501 +1448 +1382 +1300 +1205 +1105 +995 +875 +728 +556 +358 +135 +-97 +-327 +-538 +-719 +-859 +-950 +-1001 +-1026 +-1025 +-1010 +-986 +-966 +-956 +-961 +-1001 +-1066 +-1134 +-1206 +-1261 +-1286 +-1260 +-1175 +-1018 +-791 +-513 +-194 +140 +457 +738 +976 +1145 +1251 +1321 +1356 +1368 +1375 +1371 +1335 +1278 +1176 +1039 +873 +681 +460 +209 +-43 +-289 +-518 +-698 +-810 +-870 +-893 +-898 +-896 +-909 +-941 +-971 +-977 +-951 +-876 +-737 +-549 +-327 +-74 +194 +448 +679 +867 +981 +1015 +977 +872 +727 +577 +446 +338 +252 +193 +139 +58 +-49 +-184 +-345 +-517 +-671 +-807 +-925 +-1013 +-1091 +-1159 +-1206 +-1235 +-1245 +-1231 +-1191 +-1126 +-1040 +-925 +-780 +-609 +-410 +-178 +78 +329 +585 +838 +1076 +1293 +1490 +1663 +1801 +1909 +1991 +2041 +2044 +1995 +1888 +1726 +1518 +1275 +1015 +745 +463 +184 +-83 +-340 +-580 +-789 +-972 +-1124 +-1242 +-1325 +-1382 +-1430 +-1472 +-1509 +-1539 +-1562 +-1575 +-1560 +-1500 +-1412 +-1287 +-1133 +-973 +-800 +-630 +-468 +-318 +-177 +-41 +90 +223 +361 +500 +648 +801 +952 +1087 +1199 +1293 +1356 +1402 +1447 +1485 +1510 +1526 +1525 +1497 +1432 +1344 +1236 +1107 +956 +778 +575 +343 +100 +-142 +-364 +-548 +-685 +-773 +-821 +-839 +-835 +-821 +-807 +-809 +-849 +-934 +-1058 +-1200 +-1347 +-1455 +-1506 +-1504 +-1437 +-1308 +-1129 +-911 +-656 +-388 +-121 +144 +379 +573 +740 +889 +1018 +1153 +1302 +1442 +1548 +1592 +1563 +1447 +1268 +1048 +804 +563 +337 +145 +-26 +-179 +-308 +-431 +-542 +-649 +-753 +-859 +-981 +-1099 +-1201 +-1254 +-1232 +-1119 +-921 +-665 +-376 +-82 +176 +381 +537 +631 +676 +700 +706 +703 +692 +670 +626 +561 +493 +403 +300 +199 +86 +-47 +-179 +-305 +-430 +-556 +-667 +-785 +-909 +-1033 +-1140 +-1228 +-1288 +-1307 +-1307 +-1282 +-1233 +-1147 +-1017 +-853 +-655 +-436 +-207 +30 +268 +513 +752 +983 +1198 +1392 +1576 +1736 +1871 +1976 +2048 +2087 +2079 +1996 +1839 +1617 +1336 +1041 +747 +472 +215 +-18 +-224 +-423 +-605 +-772 +-924 +-1063 +-1188 +-1301 +-1408 +-1507 +-1587 +-1634 +-1646 +-1621 +-1557 +-1470 +-1362 +-1253 +-1137 +-1017 +-905 +-774 +-624 +-461 +-299 +-134 +28 +189 +336 +486 +640 +786 +912 +1021 +1116 +1201 +1276 +1365 +1453 +1525 +1578 +1600 +1601 +1567 +1510 +1424 +1309 +1158 +965 +730 +473 +214 +-26 +-230 +-377 +-473 +-529 +-553 +-556 +-560 +-575 +-607 +-682 +-802 +-957 +-1141 +-1321 +-1466 +-1554 +-1587 +-1548 +-1441 +-1307 +-1154 +-989 +-825 +-666 +-485 +-293 +-92 +131 +371 +613 +856 +1098 +1316 +1489 +1605 +1639 +1585 +1451 +1276 +1085 +889 +723 +593 +482 +376 +250 +96 +-99 +-317 +-542 +-763 +-962 +-1131 +-1256 +-1327 +-1324 +-1252 +-1123 +-939 +-725 +-511 +-301 +-112 +62 +210 +338 +458 +545 +613 +652 +673 +670 +645 +612 +561 +501 +435 +359 +265 +169 +72 +-31 +-140 +-258 +-385 +-530 +-688 +-847 +-994 +-1115 +-1210 +-1278 +-1321 +-1347 +-1340 +-1293 +-1204 +-1067 +-898 +-707 +-506 +-295 +-78 +139 +361 +586 +813 +1043 +1285 +1523 +1735 +1915 +2049 +2128 +2140 +2079 +1944 +1739 +1491 +1242 +1007 +798 +610 +424 +228 +14 +-210 +-438 +-651 +-843 +-1016 +-1163 +-1288 +-1403 +-1495 +-1551 +-1575 +-1576 +-1552 +-1510 +-1462 +-1416 +-1351 +-1258 +-1141 +-998 +-839 +-670 +-507 +-356 +-208 +-60 +91 +246 +405 +556 +684 +798 +895 +986 +1089 +1215 +1355 +1489 +1606 +1690 +1737 +1748 +1721 +1642 +1503 +1311 +1077 +819 +559 +321 +124 +-14 +-101 +-145 +-162 +-185 +-225 +-289 +-385 +-522 +-678 +-850 +-1031 +-1196 +-1322 +-1418 +-1472 +-1475 +-1446 +-1395 +-1329 +-1256 +-1194 +-1129 +-1030 +-893 +-701 +-450 +-151 +174 +496 +801 +1059 +1252 +1374 +1425 +1418 +1375 +1321 +1273 +1226 +1180 +1123 +1039 +921 +761 +558 +309 +40 +-226 +-489 +-726 +-925 +-1085 +-1203 +-1260 +-1257 +-1214 +-1130 +-1003 +-858 +-696 +-515 +-321 +-149 +9 +161 +287 +392 +483 +557 +605 +633 +639 +632 +612 +591 +547 +494 +434 +359 +278 +184 +80 +-32 +-162 +-311 +-478 +-658 +-839 +-1007 +-1150 +-1266 +-1355 +-1400 +-1409 +-1378 +-1302 +-1202 +-1082 +-947 +-803 +-641 +-462 +-264 +-37 +220 +496 +790 +1085 +1360 +1594 +1775 +1913 +1994 +2035 +2025 +1963 +1857 +1700 +1520 +1341 +1158 +978 +787 +586 +361 +114 +-136 +-368 +-581 +-766 +-927 +-1070 +-1194 +-1315 +-1414 +-1485 +-1519 +-1529 +-1531 +-1525 +-1504 +-1460 +-1397 +-1305 +-1187 +-1047 +-895 +-736 +-577 +-423 +-277 +-142 +-10 +117 +237 +355 +464 +571 +696 +839 +1014 +1215 +1417 +1599 +1743 +1826 +1839 +1784 +1662 +1488 +1285 +1076 +873 +700 +562 +460 +385 +341 +306 +255 +176 +69 +-80 +-266 +-452 +-630 +-798 +-932 +-1023 +-1094 +-1151 +-1205 +-1268 +-1352 +-1440 +-1527 +-1589 +-1600 +-1542 +-1404 +-1187 +-907 +-588 +-272 +13 +258 +461 +625 +756 +881 +996 +1119 +1249 +1366 +1456 +1510 +1515 +1469 +1373 +1232 +1032 +786 +523 +258 +-11 +-270 +-495 +-695 +-872 +-1014 +-1112 +-1172 +-1187 +-1159 +-1093 +-987 +-845 +-685 +-522 +-359 +-209 +-77 +42 +159 +271 +368 +448 +511 +554 +579 +591 +590 +591 +576 +557 +527 +484 +431 +353 +254 +113 +-58 +-253 +-460 +-650 +-813 +-948 +-1060 +-1153 +-1235 +-1292 +-1338 +-1364 +-1360 +-1332 +-1272 +-1179 +-1047 +-873 +-661 +-411 +-122 +194 +509 +801 +1064 +1283 +1459 +1621 +1753 +1855 +1923 +1952 +1935 +1875 +1773 +1643 +1491 +1317 +1134 +929 +711 +478 +229 +-15 +-243 +-441 +-616 +-774 +-924 +-1072 +-1214 +-1335 +-1430 +-1491 +-1534 +-1562 +-1574 +-1573 +-1550 +-1493 +-1396 +-1260 +-1089 +-911 +-744 +-593 +-477 +-382 +-312 +-243 +-164 +-64 +82 +261 +478 +718 +975 +1221 +1445 +1636 +1764 +1811 +1794 +1710 +1578 +1426 +1275 +1143 +1027 +949 +882 +821 +766 +696 +587 +446 +288 +110 +-61 +-208 +-325 +-422 +-495 +-567 +-654 +-779 +-939 +-1125 +-1319 +-1489 +-1621 +-1696 +-1720 +-1674 +-1565 +-1400 +-1188 +-949 +-715 +-503 +-301 +-135 +8 +163 +335 +517 +717 +942 +1156 +1336 +1482 +1571 +1602 +1581 +1521 +1402 +1229 +1009 +755 +486 +230 +-12 +-253 +-477 +-672 +-846 +-980 +-1071 +-1110 +-1104 +-1061 +-985 +-893 +-786 +-665 +-535 +-394 +-244 +-109 +12 +109 +184 +244 +308 +370 +430 +499 +570 +618 +641 +651 +636 +600 +545 +470 +371 +239 +76 +-90 +-248 +-389 +-517 +-646 +-780 +-924 +-1069 +-1202 +-1323 +-1413 +-1473 +-1488 +-1450 +-1372 +-1252 +-1094 +-904 +-680 +-413 +-126 +174 +464 +729 +962 +1174 +1361 +1523 +1658 +1767 +1846 +1892 +1908 +1887 +1830 +1728 +1591 +1418 +1220 +1002 +765 +522 +291 +75 +-119 +-294 +-454 +-612 +-775 +-939 +-1103 +-1258 +-1409 +-1530 +-1614 +-1664 +-1663 +-1616 +-1529 +-1413 +-1278 +-1146 +-1016 +-907 +-831 +-781 +-742 +-702 +-652 +-564 +-423 +-222 +32 +332 +648 +941 +1191 +1388 +1515 +1575 +1589 +1568 +1514 +1465 +1431 +1403 +1386 +1359 +1303 +1219 +1105 +968 +820 +674 +531 +395 +287 +194 +105 +17 +-71 +-175 +-311 +-480 +-684 +-913 +-1155 +-1372 +-1537 +-1641 +-1696 +-1687 +-1628 +-1539 +-1421 +-1283 +-1143 +-993 +-832 +-669 +-511 +-341 +-158 +38 +257 +503 +753 +992 +1213 +1403 +1555 +1662 +1716 +1693 +1601 +1441 +1215 +952 +688 +444 +208 +-19 +-240 +-457 +-653 +-823 +-961 +-1045 +-1081 +-1073 +-1031 +-958 +-860 +-760 +-646 +-522 +-403 +-297 +-205 +-124 +-49 +34 +129 +237 +350 +464 +572 +651 +695 +700 +682 +640 +587 +525 +450 +364 +262 +141 +22 +-112 +-252 +-397 +-559 +-726 +-902 +-1085 +-1256 +-1400 +-1500 +-1549 +-1543 +-1484 +-1382 +-1251 +-1087 +-896 +-677 +-428 +-157 +119 +387 +636 +862 +1061 +1242 +1409 +1560 +1701 +1821 +1907 +1938 +1913 +1830 +1703 +1541 +1350 +1153 +954 +767 +587 +414 +253 +81 +-106 +-306 +-514 +-732 +-956 +-1157 +-1338 +-1476 +-1557 +-1570 +-1534 +-1464 +-1356 +-1245 +-1147 +-1084 +-1058 +-1077 +-1125 +-1151 +-1149 +-1108 +-999 +-819 +-586 +-315 +-20 +260 +499 +698 +854 +982 +1096 +1200 +1290 +1361 +1431 +1486 +1513 +1531 +1529 +1481 +1389 +1272 +1139 +1005 +897 +815 +745 +683 +619 +546 +449 +334 +198 +37 +-157 +-368 +-592 +-826 +-1045 +-1230 +-1378 +-1485 +-1549 +-1586 +-1589 +-1558 +-1490 +-1412 +-1305 +-1185 +-1063 +-940 +-810 +-675 +-526 +-338 +-91 +190 +494 +790 +1062 +1308 +1511 +1665 +1758 +1785 +1726 +1592 +1420 +1213 +970 +723 +477 +240 +-2 +-234 +-458 +-668 +-835 +-950 +-1012 +-1014 +-976 +-927 +-873 +-821 +-770 +-716 +-644 +-559 +-468 +-358 +-243 +-123 +8 +140 +265 +390 +496 +583 +643 +676 +682 +663 +639 +609 +579 +539 +480 +411 +312 +183 +39 +-124 +-296 +-475 +-677 +-892 +-1108 +-1302 +-1464 +-1565 +-1591 +-1567 +-1503 +-1399 +-1259 +-1094 +-918 +-722 +-508 +-283 +-43 +201 +456 +715 +958 +1191 +1418 +1602 +1742 +1825 +1856 +1837 +1776 +1708 +1613 +1501 +1377 +1245 +1114 +980 +849 +695 +494 +260 +-13 +-323 +-623 +-887 +-1093 +-1240 +-1319 +-1330 +-1301 +-1257 +-1217 +-1185 +-1183 +-1212 +-1267 +-1343 +-1419 +-1461 +-1457 +-1409 +-1288 +-1115 +-916 +-691 +-453 +-224 +-18 +174 +352 +518 +695 +874 +1045 +1189 +1321 +1417 +1477 +1520 +1525 +1487 +1418 +1338 +1245 +1168 +1104 +1061 +1041 +1008 +956 +885 +788 +675 +539 +379 +195 +-1 +-219 +-462 +-690 +-894 +-1081 +-1236 +-1339 +-1402 +-1446 +-1462 +-1461 +-1452 +-1440 +-1409 +-1361 +-1298 +-1211 +-1113 +-978 +-810 +-606 +-363 +-62 +243 +535 +823 +1094 +1336 +1536 +1692 +1787 +1800 +1752 +1626 +1433 +1205 +937 +661 +396 +159 +-67 +-281 +-466 +-624 +-749 +-829 +-870 +-881 +-879 +-878 +-874 +-866 +-836 +-796 +-726 +-628 +-518 +-392 +-255 +-107 +30 +167 +289 +398 +493 +565 +612 +635 +644 +648 +649 +651 +658 +651 +616 +544 +443 +304 +131 +-60 +-273 +-503 +-749 +-978 +-1179 +-1323 +-1421 +-1474 +-1491 +-1487 +-1466 +-1418 +-1338 +-1226 +-1081 +-893 +-671 +-424 +-142 +154 +449 +731 +1004 +1230 +1409 +1536 +1607 +1620 +1597 +1577 +1584 +1610 +1631 +1649 +1638 +1571 +1446 +1261 +1003 +704 +384 +46 +-256 +-498 +-683 +-807 +-864 +-876 +-891 +-916 +-957 +-1031 +-1138 +-1250 +-1350 +-1453 +-1525 +-1551 +-1563 +-1540 +-1451 +-1334 +-1214 +-1072 +-922 +-774 +-622 +-445 +-246 +-26 +225 +481 +708 +911 +1066 +1177 +1247 +1303 +1332 +1334 +1318 +1299 +1268 +1222 +1208 +1208 +1213 +1217 +1224 +1199 +1133 +1048 +938 +786 +606 +410 +200 +-27 +-259 +-474 +-663 +-824 +-962 +-1073 +-1154 +-1225 +-1298 +-1373 +-1441 +-1495 +-1527 +-1520 +-1475 +-1401 +-1306 +-1186 +-1050 +-885 +-676 +-442 +-170 +136 +465 +793 +1098 +1380 +1603 +1761 +1844 +1839 +1750 +1583 +1348 +1082 +818 +560 +324 +135 +-41 +-204 +-360 +-497 +-614 +-715 +-793 +-870 +-921 +-943 +-953 +-935 +-895 +-831 +-754 +-645 +-511 +-370 +-221 +-80 +65 +188 +282 +358 +423 +484 +529 +584 +648 +721 +796 +839 +850 +812 +736 +612 +466 +292 +109 +-73 +-285 +-514 +-732 +-914 +-1088 +-1228 +-1330 +-1422 +-1510 +-1579 +-1609 +-1597 +-1550 +-1418 +-1214 +-954 +-656 +-334 +-11 +274 +532 +748 +911 +1034 +1129 +1200 +1275 +1378 +1518 +1666 +1816 +1939 +1992 +1966 +1849 +1643 +1360 +1053 +744 +435 +178 +-14 +-169 +-298 +-375 +-429 +-498 +-594 +-693 +-825 +-996 +-1127 +-1245 +-1340 +-1388 +-1417 +-1439 +-1468 +-1479 +-1489 +-1469 +-1398 +-1305 +-1203 +-1065 +-879 +-688 +-480 +-234 +31 +280 +502 +688 +842 +946 +1019 +1065 +1089 +1098 +1100 +1128 +1153 +1176 +1217 +1263 +1306 +1358 +1387 +1387 +1348 +1254 +1121 +959 +788 +595 +399 +212 +9 +-183 +-374 +-542 +-691 +-811 +-907 +-1028 +-1138 +-1250 +-1362 +-1457 +-1522 +-1560 +-1576 +-1568 +-1526 +-1477 +-1390 +-1247 +-1067 +-819 +-517 +-183 +162 +528 +880 +1175 +1424 +1622 +1747 +1803 +1770 +1646 +1466 +1246 +1016 +789 +597 +410 +221 +65 +-88 +-249 +-391 +-518 +-645 +-774 +-877 +-967 +-1021 +-1025 +-999 +-922 +-824 +-700 +-571 +-459 +-358 +-269 +-169 +-66 +29 +132 +235 +330 +424 +517 +640 +748 +837 +908 +939 +897 +809 +708 +574 +424 +272 +123 +-32 +-189 +-356 +-540 +-749 +-959 +-1165 +-1390 +-1601 +-1746 +-1827 +-1832 +-1742 +-1552 +-1317 +-1043 +-768 +-506 +-262 +-53 +136 +286 +446 +608 +757 +911 +1123 +1363 +1593 +1825 +2018 +2119 +2106 +2030 +1861 +1614 +1367 +1124 +913 +718 +558 +413 +262 +124 +-21 +-175 +-305 +-430 +-580 +-736 +-863 +-983 +-1106 +-1184 +-1241 +-1313 +-1402 +-1477 +-1551 +-1616 +-1646 +-1616 +-1538 +-1426 +-1275 +-1086 +-878 +-658 +-414 +-165 +82 +309 +506 +657 +754 +821 +861 +891 +927 +980 +1050 +1121 +1194 +1253 +1318 +1379 +1433 +1483 +1486 +1434 +1344 +1233 +1094 +939 +775 +602 +416 +222 +30 +-148 +-306 +-449 +-567 +-689 +-804 +-921 +-1069 +-1209 +-1333 +-1448 +-1555 +-1628 +-1673 +-1689 +-1663 +-1593 +-1476 +-1281 +-1052 +-775 +-451 +-104 +238 +564 +880 +1165 +1408 +1594 +1687 +1691 +1608 +1449 +1270 +1114 +973 +813 +656 +492 +323 +151 +-34 +-217 +-383 +-529 +-676 +-807 +-887 +-951 +-969 +-924 +-851 +-770 +-688 +-609 +-537 +-494 +-446 +-378 +-298 +-195 +-85 +54 +184 +330 +492 +630 +733 +811 +858 +840 +785 +709 +657 +609 +571 +539 +463 +355 +184 +-28 +-278 +-563 +-854 +-1141 +-1398 +-1593 +-1726 +-1769 +-1712 +-1595 +-1428 +-1248 +-1063 +-916 +-798 +-671 +-530 +-378 +-193 +41 +274 +527 +800 +1075 +1326 +1549 +1736 +1849 +1910 +1930 +1864 +1751 +1626 +1471 +1287 +1120 +990 +844 +684 +540 +400 +243 +93 +-28 +-159 +-287 +-416 +-568 +-702 +-832 +-960 +-1087 +-1203 +-1322 +-1440 +-1539 +-1642 +-1706 +-1712 +-1673 +-1593 +-1452 +-1275 +-1070 +-848 +-603 +-365 +-150 +46 +202 +338 +439 +505 +563 +639 +722 +812 +916 +1034 +1139 +1239 +1328 +1404 +1478 +1516 +1528 +1519 +1483 +1398 +1283 +1149 +990 +814 +630 +452 +275 +112 +-24 +-162 +-286 +-405 +-548 +-712 +-898 +-1074 +-1255 +-1414 +-1539 +-1659 +-1738 +-1788 +-1802 +-1784 +-1699 +-1553 +-1334 +-1020 +-679 +-331 +15 +343 +640 +904 +1127 +1297 +1420 +1489 +1487 +1453 +1400 +1318 +1220 +1102 +945 +762 +570 +367 +150 +-63 +-243 +-426 +-577 +-685 +-764 +-824 +-830 +-805 +-785 +-759 +-762 +-760 +-771 +-772 +-725 +-640 +-515 +-355 +-175 +-1 +168 +312 +413 +503 +577 +617 +637 +659 +713 +747 +793 +855 +901 +898 +811 +664 +438 +144 +-175 +-488 +-782 +-1036 +-1232 +-1349 +-1427 +-1454 +-1451 +-1441 +-1396 +-1346 +-1310 +-1253 +-1159 +-1054 +-926 +-732 +-491 +-251 +25 +329 +616 +857 +1092 +1300 +1456 +1597 +1705 +1770 +1773 +1743 +1666 +1556 +1442 +1330 +1196 +1053 +912 +764 +621 +481 +359 +242 +126 +6 +-115 +-239 +-388 +-547 +-717 +-881 +-1052 +-1224 +-1388 +-1536 +-1659 +-1741 +-1776 +-1747 +-1662 +-1539 +-1379 +-1183 +-977 +-777 +-592 +-415 +-250 +-104 +16 +103 +204 +297 +392 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b4_493_883.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b4_493_883.samples new file mode 100644 index 00000000..b8123ecf --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b4_493_883.samples @@ -0,0 +1,4096 @@ +-1642 +-1629 +-1531 +-1354 +-1125 +-884 +-666 +-510 +-401 +-283 +-131 +57 +299 +573 +833 +1068 +1299 +1551 +1825 +2070 +2207 +2123 +1781 +1254 +700 +262 +-5 +-104 +-102 +-71 +-48 +-22 +6 +29 +27 +-35 +-176 +-399 +-684 +-973 +-1214 +-1372 +-1413 +-1353 +-1249 +-1139 +-1031 +-948 +-852 +-674 +-417 +-153 +60 +189 +210 +155 +63 +-36 +-114 +-164 +-173 +-124 +1 +196 +462 +792 +1153 +1496 +1785 +1967 +2015 +1940 +1743 +1432 +1033 +622 +247 +-57 +-261 +-392 +-485 +-564 +-672 +-833 +-1049 +-1299 +-1547 +-1745 +-1831 +-1756 +-1556 +-1315 +-1102 +-960 +-888 +-828 +-740 +-603 +-398 +-162 +79 +326 +584 +853 +1150 +1478 +1803 +2076 +2222 +2140 +1824 +1355 +853 +451 +217 +96 +37 +17 +13 +40 +121 +216 +255 +164 +-71 +-381 +-675 +-913 +-1074 +-1145 +-1185 +-1231 +-1262 +-1260 +-1209 +-1092 +-925 +-716 +-484 +-261 +-87 +27 +89 +96 +59 +-25 +-146 +-276 +-368 +-369 +-257 +-13 +325 +712 +1089 +1404 +1632 +1782 +1864 +1871 +1804 +1640 +1340 +931 +504 +156 +-48 +-125 +-147 +-213 +-385 +-663 +-989 +-1285 +-1517 +-1650 +-1686 +-1640 +-1525 +-1371 +-1214 +-1092 +-1008 +-946 +-887 +-809 +-700 +-534 +-309 +-29 +313 +680 +1046 +1376 +1665 +1888 +2015 +2030 +1879 +1572 +1165 +742 +400 +184 +94 +129 +241 +342 +389 +381 +296 +138 +-45 +-244 +-458 +-658 +-853 +-1039 +-1179 +-1271 +-1311 +-1292 +-1224 +-1128 +-1002 +-847 +-669 +-473 +-268 +-85 +49 +104 +66 +-59 +-240 +-409 +-500 +-455 +-270 +0 +304 +610 +897 +1173 +1438 +1668 +1834 +1888 +1823 +1648 +1382 +1072 +778 +544 +371 +251 +128 +-47 +-282 +-556 +-845 +-1111 +-1324 +-1490 +-1601 +-1643 +-1604 +-1480 +-1303 +-1129 +-1019 +-1003 +-1055 +-1110 +-1083 +-935 +-653 +-269 +134 +507 +836 +1152 +1467 +1772 +2015 +2136 +2044 +1712 +1255 +820 +500 +346 +342 +401 +458 +489 +481 +429 +362 +267 +129 +-32 +-236 +-487 +-743 +-972 +-1156 +-1266 +-1303 +-1299 +-1281 +-1248 +-1190 +-1075 +-871 +-600 +-320 +-96 +5 +-28 +-142 +-274 +-395 +-480 +-515 +-484 +-391 +-219 +52 +391 +760 +1129 +1439 +1640 +1736 +1759 +1714 +1622 +1502 +1357 +1184 +989 +783 +560 +337 +117 +-106 +-344 +-610 +-898 +-1196 +-1455 +1025 +1086 +1076 +989 +869 +757 +665 +565 +413 +171 +-159 +-521 +-855 +-1123 +-1311 +-1403 +-1393 +-1287 +-1103 +-868 +-628 +-447 +-383 +-432 +-558 +-710 +-850 +-949 +-1000 +-1009 +-955 +-829 +-617 +-335 +-28 +248 +460 +610 +743 +892 +1059 +1225 +1373 +1503 +1614 +1725 +1811 +1841 +1775 +1529 +1117 +660 +254 +-45 +-212 +-298 +-369 +-452 +-551 +-667 +-783 +-916 +-1103 +-1350 +-1643 +-1945 +-2155 +-2196 +-2073 +-1799 +-1443 +-1087 +-750 +-415 +-78 +261 +600 +900 +1114 +1226 +1247 +1214 +1169 +1138 +1139 +1152 +1145 +1117 +1082 +1040 +1008 +1014 +1031 +1012 +937 +781 +542 +245 +-67 +-374 +-670 +-949 +-1201 +-1384 +-1452 +-1387 +-1177 +-864 +-561 +-367 +-333 +-467 +-694 +-890 +-993 +-1023 +-1004 +-971 +-948 +-909 +-799 +-595 +-295 +36 +324 +518 +616 +690 +805 +985 +1218 +1474 +1694 +1839 +1902 +1884 +1791 +1600 +1291 +909 +530 +211 +-20 +-158 +-230 +-279 +-329 +-401 +-524 +-714 +-979 +-1313 +-1661 +-1948 +-2135 +-2173 +-2058 +-1854 +-1626 +-1379 +-1097 +-768 +-388 +16 +388 +669 +844 +944 +1020 +1080 +1142 +1203 +1221 +1187 +1123 +1073 +1071 +1113 +1173 +1227 +1245 +1211 +1109 +949 +736 +474 +187 +-121 +-459 +-813 +-1132 +-1353 +-1431 +-1330 +-1103 +-823 +-577 +-466 +-502 +-638 +-783 +-893 +-958 +-987 +-1020 +-1062 +-1076 +-1019 +-871 +-640 +-357 +-88 +109 +232 +326 +446 +634 +889 +1168 +1421 +1615 +1750 +1817 +1833 +1796 +1677 +1449 +1111 +725 +369 +127 +9 +0 +32 +14 +-105 +-319 +-608 +-930 +-1214 +-1447 +-1657 +-1854 +-2005 +-2073 +-2022 +-1842 +-1557 +-1226 +-902 +-595 +-299 +-11 +269 +531 +748 +912 +1012 +1049 +1051 +1033 +1013 +1011 +1037 +1084 +1145 +1216 +1269 +1300 +1308 +1277 +1190 +1016 +757 +414 +31 +-343 +-677 +-943 +-1108 +-1164 +-1135 +-1029 +-864 +-692 +-562 +-508 +-550 +-676 +-828 +-974 +-1083 +-1126 +-1124 +-1082 +-995 +-874 +-725 +-559 +-384 +-213 +-54 +105 +284 +491 +720 +963 +1197 +1411 +1607 +1771 +1864 +1866 +1754 +1505 +1175 +847 +575 +404 +341 +318 +261 +160 +8 +-189 +-415 +-662 +-936 +-1228 +-1524 +-1804 +-2017 +-2109 +-2057 +-1885 +-1638 +-1383 +-1148 +-899 +-624 +-321 +7 +322 +579 +747 +835 +873 +898 +938 +982 +1015 +1029 +1024 +1032 +1079 +1193 +1361 +1503 +1538 +1437 +1186 +829 +468 +151 +-129 +-393 +-645 +-880 +-1048 +-1095 +-1015 +-838 +-622 +-466 +-427 +-520 +-714 +-916 +-1055 +-1123 +-1118 +-1072 +-1036 +-1001 +-945 +-860 +-742 +-590 +-417 +-242 +-83 +73 +253 +477 +746 +1061 +1375 +1617 +1760 +1806 +1761 +1650 +1500 +1331 +1130 +908 +703 +542 +452 +408 +371 +290 +125 +-133 +-450 +-781 +-1102 +-1386 +-1629 +-1838 +-1994 +-2060 +-2025 +-1889 +-1672 +-1420 +-1152 +-860 +-558 +-261 +18 +266 +478 +646 +773 +859 +909 +909 +878 +859 +888 +979 +1151 +1364 +1552 +1672 +1675 +1543 +1306 +1006 +695 +397 +107 +-190 +-494 +-760 +-931 +-974 +-885 +-712 +-538 +-444 +-475 +-602 +-767 +-913 +-999 +-1037 +-1069 +-1111 +-1143 +-1138 +-1064 +-935 +-795 +-676 +-603 +-556 +-470 +-287 +-6 +350 +712 +1026 +1265 +1443 +1581 +1668 +1709 +1687 +1596 +1442 +1247 +1045 +874 +764 +711 +697 +665 +553 +344 +50 +-285 +-606 +-880 +-1122 +-1368 +-1633 +-1900 +-2111 +-2184 +-2090 +-1867 +-1585 +-1322 +-1099 +-880 +-636 +-341 +-7 +308 +538 +664 +700 +674 +643 +654 +711 +824 +989 +1177 +1372 +1567 +1723 +1796 +1759 +1596 +1322 +974 +601 +241 +-77 +-341 +-533 +-648 +-706 +-704 +-647 +-585 +-545 +-542 +-593 +-698 +-837 +-976 +-1090 +-1157 +-1181 +-1155 +-1085 +-1023 +-977 +-938 +-910 +-888 +-830 +-690 +-465 +-169 +176 +520 +821 +1078 +1294 +1472 +1606 +1678 +1672 +1586 +1443 +1295 +1181 +1103 +1061 +1026 +957 +838 +669 +463 +231 +-21 +-300 +-603 +-920 +-1243 +-1537 +-1778 +-1961 +-2057 +-2055 +-1972 +-1817 +-1605 +-1361 +-1099 +-799 +-475 +-165 +113 +325 +444 +496 +521 +536 +571 +648 +757 +886 +1047 +1247 +1483 +1727 +1917 +1967 +1819 +1496 +1085 +692 +370 +131 +-63 +-251 +-440 +-587 +-642 +-597 +-503 +-446 +-470 +-587 +-770 +-941 +-1033 +-1064 +-1065 +-1048 +-1041 +-1043 +-1043 +-1039 +-1029 +-996 +-948 +-898 +-818 +-665 +-422 +-99 +273 +644 +958 +1201 +1366 +1460 +1497 +1488 +1454 +1412 +1368 +1323 +1269 +1211 +1142 +1066 +989 +885 +730 +497 +204 +-129 +-461 +-758 +-1012 +-1253 +-1491 +-1732 +-1957 +-2120 +-2160 +-2058 +-1837 +-1525 +-1195 +-902 +-636 +-392 +-172 +40 +237 +389 +471 +494 +481 +479 +535 +672 +902 +1192 +1473 +1708 +1870 +1906 +1802 +1579 +1277 +943 +611 +314 +71 +-126 +-282 +-382 +-422 +-420 +-413 +-435 +-522 +-658 +-797 +-901 +-956 +-960 +-954 +-979 +-1023 +-1068 +-1083 +-1072 +-1044 +-1023 +-1014 +-1007 +-990 +-887 +-640 +-280 +131 +521 +819 +1010 +1138 +1232 +1312 +1383 +1411 +1390 +1339 +1284 +1247 +1244 +1265 +1269 +1231 +1126 +928 +664 +365 +71 +-187 +-424 +-661 +-923 +-1229 +-1557 +-1850 +-2064 +-2167 +-2121 +-1942 +-1675 +-1380 +-1115 +-874 +-631 +-382 +-147 +59 +203 +265 +274 +290 +346 +452 +624 +835 +1078 +1337 +1586 +1808 +1947 +1935 +1761 +1459 +1090 +731 +437 +222 +72 +-24 +-101 +-179 +-253 +-334 +-431 +-520 +-609 +-702 +-786 +-858 +-917 +-953 +-965 +-979 +-991 +-1017 +-1063 +-1112 +-1151 +-1173 +-1160 +-1092 +-971 +-763 +-449 +-84 +282 +599 +843 +1017 +1140 +1217 +1260 +1277 +1264 +1247 +1257 +1278 +1322 +1374 +1387 +1340 +1220 +1035 +808 +594 +394 +180 +-72 +-366 +-699 +-1045 +-1357 +-1614 +-1826 +-1998 +-2103 +-2090 +-1929 +-1646 +-1301 +-977 +-721 +-532 +-383 +-245 +-110 +12 +105 +177 +239 +322 +462 +662 +918 +1216 +1522 +1780 +1945 +1966 +1803 +1505 +1160 +840 +591 +422 +297 +177 +60 +-55 +-166 +-249 +-320 +-407 +-514 +-645 +-776 +-850 +-863 +-849 +-823 +-838 +-914 +-1029 +-1140 +-1215 +-1243 +-1232 +-1202 +-1163 +-1099 +-966 +-725 +-367 +41 +426 +723 +909 +1012 +1057 +1070 +1089 +1138 +1205 +1281 +1347 +1384 +1376 +1343 +1309 +1259 +1189 +1067 +880 +640 +364 +85 +-188 +-458 +-747 +-1057 +-1381 +-1680 +-1927 +-2085 +-2104 +-1966 +-1703 +-1383 +-1085 +-872 +-723 +-594 +-464 +-316 +-162 +-51 +11 +61 +135 +277 +513 +820 +1141 +1442 +1688 +1827 +1846 +1751 +1565 +1317 +1060 +828 +619 +451 +324 +227 +153 +68 +-60 +-214 +-371 +-521 +-635 +-700 +-723 +-716 +-700 +-713 +-775 +-879 +-1003 +-1115 +-1191 +-1225 +-1247 +-1265 +-1279 +-1255 +-1146 +-913 +-547 +-120 +265 +538 +691 +774 +836 +921 +1023 +1122 +1196 +1242 +1271 +1297 +1333 +1369 +1393 +1377 +1303 +1183 +1022 +827 +614 +382 +124 +-173 +-495 +-843 +-1189 +-1501 +-1766 +-1943 +-2015 +-1965 +-1794 +-1548 +-1271 +-1021 +-842 +-702 +-590 +-500 +-418 +-339 +-261 +-163 +-18 +180 +427 +704 +983 +1251 +1502 +1704 +1815 +1798 +1656 +1426 +1158 +927 +765 +645 +547 +457 +335 +177 +5 +-179 +-341 +-450 +-522 +-565 +-589 +-610 +-643 +-671 +-704 +-764 +-854 +-979 +-1122 +-1254 +-1351 +-1405 +-1396 +-1330 +-1206 +-1010 +-741 +-423 +-98 +199 +443 +620 +741 +828 +897 +957 +1026 +1115 +1205 +1285 +1354 +1397 +1408 +1395 +1364 +1312 +1229 +1104 +934 +701 +401 +56 +-304 +-647 +-956 +-1243 +-1507 +-1744 +-1940 +-2028 +-1952 +-1712 +-1386 +-1079 +-881 +-800 +-769 +-747 +-692 +-582 +-451 +-312 +-163 +12 +225 +490 +795 +1107 +1390 +1614 +1740 +1750 +1645 +1462 +1273 +1105 +992 +919 +814 +668 +490 +287 +103 +-38 +-155 +-267 +-381 +-488 +-564 +-586 +-557 +-505 +-486 +-571 +-760 +-979 +-1170 +-1308 +-1371 +-1381 +-1381 +-1357 +-1294 +-1178 +-978 +-688 +-350 +-16 +258 +449 +564 +641 +716 +804 +915 +1035 +1147 +1231 +1290 +1326 +1356 +1399 +1445 +1480 +1477 +1389 +1202 +944 +645 +326 +4 +-320 +-653 +-1004 +-1353 +-1650 +-1854 +-1935 +-1870 +-1681 +-1435 +-1197 +-1023 +-941 +-909 +-880 +-838 +-768 +-668 +-553 +-416 +-223 +23 +311 +634 +941 +1193 +1385 +1503 +1547 +1546 +1497 +1407 +1304 +1191 +1061 +924 +787 +648 +504 +343 +162 +-27 +-211 +-356 +-434 +-448 +-412 +-354 +-334 +-390 +-531 +-738 +-951 +-1118 +-1229 +-1312 +-1378 +-1421 +-1445 +-1411 +-1293 +-1101 +-849 +-551 +-263 +-16 +187 +339 +468 +596 +724 +831 +917 +986 +1040 +1110 +1210 +1318 +1417 +1483 +1517 +1515 +1478 +1398 +1244 +1005 +683 +304 +-92 +-476 +-821 +-1137 +-1409 +-1614 +-1737 +-1766 +-1693 +-1532 +-1336 +-1150 +-1020 +-967 +-968 +-985 +-989 +-939 +-808 +-611 +-362 +-82 +186 +430 +672 +910 +1127 +1325 +1477 +1545 +1519 +1432 +1328 +1236 +1167 +1111 +1029 +883 +671 +435 +209 +10 +-124 +-205 +-245 +-248 +-231 +-220 +-234 +-297 +-430 +-605 +-788 +-968 +-1139 +-1280 +-1403 +-1476 +-1477 +-1427 +-1323 +-1177 +-1011 +-830 +-597 +-318 +-38 +210 +400 +516 +582 +643 +719 +819 +938 +1062 +1173 +1262 +1340 +1417 +1496 +1580 +1648 +1661 +1563 +1326 +970 +546 +127 +-246 +-566 +-851 +-1124 +-1381 +-1590 +-1704 +-1693 +-1558 +-1352 +-1170 +-1075 +-1077 +-1154 +-1223 +-1206 +-1096 +-926 +-714 +-496 +-292 +-77 +170 +445 +738 +1006 +1210 +1335 +1377 +1372 +1370 +1382 +1401 +1409 +1358 +1227 +1023 +764 +493 +280 +133 +24 +-50 +-104 +-150 +-174 +-163 +-155 +-181 +-276 +-468 +-703 +-926 +-1118 +-1258 +-1334 +-1387 +-1433 +-1447 +-1420 +-1344 +-1208 +-1011 +-772 +-506 +-233 +3 +186 +320 +423 +512 +607 +712 +814 +909 +1006 +1097 +1206 +1336 +1481 +1626 +1738 +1779 +1727 +1535 +1218 +833 +428 +39 +-330 +-670 +-967 +-1215 +-1406 +-1496 +-1495 +-1441 +-1372 +-1302 +-1259 +-1258 +-1274 +-1282 +-1264 +-1203 +-1097 +-943 +-748 +-515 +-262 +11 +289 +551 +790 +978 +1111 +1216 +1304 +1393 +1492 +1571 +1583 +1502 +1337 +1111 +867 +642 +442 +273 +133 +18 +-44 +-45 +-17 +8 +3 +-75 +-229 +-422 +-623 +-812 +-974 +-1117 +-1249 +-1367 +-1457 +-1497 +-1478 +-1391 +-1253 +-1080 +-889 +-686 +-466 +-237 +-14 +189 +352 +465 +534 +585 +639 +719 +838 +987 +1149 +1310 +1460 +1601 +1723 +1823 +1877 +1820 +1583 +1185 +694 +197 +-223 +-524 +-740 +-925 +-1088 +-1231 +-1332 +-1371 +-1358 +-1316 +-1273 +-1255 +-1275 +-1320 +-1356 +-1352 +-1277 +-1122 +-905 +-651 +-393 +-152 +72 +285 +493 +705 +904 +1074 +1211 +1342 +1468 +1567 +1632 +1618 +1510 +1308 +1034 +751 +513 +328 +217 +174 +152 +131 +113 +95 +53 +-10 +-111 +-266 +-452 +-655 +-859 +-1050 +-1213 +-1350 +-1444 +-1492 +-1489 +-1443 +-1359 +-1239 +-1093 +-912 +-689 +-437 +-182 +40 +193 +283 +342 +409 +497 +609 +741 +864 +987 +1135 +1318 +1525 +1740 +1924 +2024 +1983 +1773 +1394 +905 +423 +23 +-272 +-493 +-685 +-875 +-1049 +-1182 +-1254 +-1257 +-1237 +-1249 +-1305 +-1398 +-1493 +-1530 +-1489 +-1377 +-1209 +-1014 +-823 +-633 +-421 +-196 +46 +296 +524 +725 +900 +1052 +1218 +1411 +1582 +1690 +1701 +1582 +1354 +1086 +822 +607 +462 +368 +305 +262 +218 +171 +142 +140 +126 +63 +-74 +-283 +-531 +-773 +-962 +-1098 +-1209 +-1322 +-1424 +-1501 +-1527 +-1483 +-1366 +-1188 +-995 +-800 +-605 +-406 +-207 +-20 +150 +277 +357 +408 +454 +514 +624 +795 +1014 +1267 +1529 +1763 +1946 +2064 +2079 +1945 +1647 +1229 +757 +317 +-40 +-313 +-523 +-692 +-818 +-913 +-987 +-1054 +-1132 +-1237 +-1364 +-1479 +-1546 +-1560 +-1518 +-1428 +-1313 +-1174 +-1006 +-823 +-619 +-393 +-177 +40 +264 +486 +704 +932 +1156 +1372 +1565 +1692 +1726 +1636 +1445 +1198 +963 +770 +609 +478 +383 +313 +273 +269 +286 +293 +258 +164 +14 +-175 +-377 +-573 +-759 +-935 +-1108 +-1271 +-1408 +-1500 +-1528 +-1494 +-1404 +-1276 +-1141 +-990 +-811 +-611 +-386 +-158 +20 +130 +178 +189 +210 +290 +444 +654 +910 +1173 +1418 +1638 +1835 +1999 +2109 +2100 +1908 +1537 +1045 +543 +139 +-124 +-288 +-407 +-521 +-658 +-802 +-937 +-1059 +-1177 +-1305 +-1452 +-1580 +-1643 +-1629 +-1547 +-1410 +-1263 +-1128 +-982 +-839 +-683 +-492 +-277 +-32 +240 +514 +774 +1017 +1243 +1432 +1582 +1677 +1673 +1566 +1374 +1134 +892 +692 +557 +482 +450 +431 +415 +390 +354 +306 +246 +164 +36 +-150 +-374 +-609 +-836 +-1037 +-1195 +-1319 +-1424 +-1490 +-1514 +-1494 +-1418 +-1291 +-1129 +-928 +-699 +-480 +-295 +-159 +-83 +-53 +-26 +33 +149 +314 +510 +734 +974 +1234 +1510 +1778 +2002 +2149 +2180 +2052 +1737 +1307 +848 +442 +156 +-30 +-162 +-284 +-418 +-575 +-735 +-881 +-1029 +-1193 +-1367 +-1541 +-1655 +-1657 +-1572 +-1436 +-1291 +-1202 +-1150 +-1078 +-962 +-781 +-533 +-249 +32 +295 +545 +790 +1042 +1289 +1513 +1669 +1694 +1592 +1411 +1188 +973 +808 +696 +620 +557 +508 +477 +465 +465 +454 +424 +351 +218 +29 +-203 +-447 +-662 +-848 +-1020 +-1179 +-1336 +-1481 +-1573 +-1588 +-1522 +-1384 +-1203 +-1010 +-828 +-663 +-519 +-392 +-289 +-220 +-172 +-127 +-54 +81 +278 +533 +824 +1124 +1419 +1688 +1915 +2075 +2142 +2096 +1897 +1551 +1137 +738 +412 +191 +53 +-58 +-170 +-312 +-499 +-712 +-918 +-1119 +-1302 +-1445 +-1547 +-1581 +-1545 +-1477 +-1403 +-1339 +-1287 +-1219 +-1119 +-977 +-781 +-540 +-268 +21 +313 +602 +878 +1128 +1339 +1494 +1561 +1547 +1451 +1288 +1100 +925 +785 +677 +606 +561 +551 +573 +606 +612 +566 +471 +339 +185 +19 +-163 +-378 +-616 +-860 +-1094 +-1291 +-1441 +-1528 +-1553 +-1520 +-1432 +-1302 +-1135 +-955 +-778 +-620 +-499 +-422 +-390 +-389 +-380 +-322 +-183 +41 +330 +648 +955 +1245 +1515 +1758 +1962 +2096 +2121 +2010 +1754 +1390 +1018 +713 +501 +366 +257 +104 +-106 +-338 +-561 +-758 +-926 +-1075 +-1239 +-1405 +-1540 +-1593 +-1564 +-1485 +-1399 +-1345 +-1323 +-1297 +-1223 +-1066 +-824 +-527 +-203 +116 +399 +659 +903 +1127 +1319 +1463 +1528 +1491 +1364 +1177 +965 +792 +690 +654 +658 +676 +686 +667 +632 +602 +569 +518 +443 +313 +110 +-156 +-445 +-726 +-962 +-1155 +-1308 +-1431 +-1506 +-1529 +-1491 +-1387 +-1222 +-1032 +-853 +-712 +-625 +-587 +-583 +-599 +-600 +-540 +-399 +-179 +110 +425 +731 +1035 +1330 +1605 +1828 +1977 +2018 +1948 +1788 +1577 +1334 +1089 +866 +669 +475 +287 +85 +-122 +-319 +-507 +-700 +-891 +-1074 +-1259 +-1421 +-1519 +-1541 +-1509 +-1457 +-1428 +-1435 +-1444 +-1399 +-1266 +-1047 +-766 +-471 +-187 +92 +368 +647 +925 +1178 +1356 +1442 +1437 +1348 +1204 +1060 +937 +843 +782 +744 +713 +692 +682 +682 +689 +697 +681 +612 +489 +301 +50 +-237 +-512 +-762 +-990 +-1187 +-1352 +-1476 +-1524 +-1492 +-1397 +-1248 +-1088 +-948 +-838 +-752 +-707 +-690 +-694 +-720 +-722 +-636 +-437 +-133 +231 +588 +905 +1174 +1397 +1589 +1748 +1848 +1877 +1827 +1712 +1545 +1351 +1139 +921 +711 +504 +294 +89 +-114 +-314 +-505 +-694 +-867 +-1020 +-1169 +-1310 +-1429 +-1511 +-1551 +-1554 +-1538 +-1507 +-1459 +-1373 +-1234 +-1045 +-794 +-493 +-169 +154 +455 +716 +935 +1112 +1237 +1309 +1332 +1290 +1197 +1080 +962 +860 +783 +740 +732 +745 +765 +794 +804 +790 +736 +636 +488 +285 +22 +-285 +-591 +-870 +-1102 +-1263 +-1368 +-1424 +-1428 +-1385 +-1298 +-1178 +-1037 +-909 +-819 +-787 +-806 +-854 +-901 +-913 +-825 +-607 +-301 +63 +415 +707 +958 +1177 +1373 +1561 +1719 +1807 +1817 +1767 +1665 +1527 +1375 +1199 +987 +751 +493 +232 +10 +-171 +-323 +-458 +-613 +-796 +-993 +-1187 +-1353 +-1475 +-1538 +-1552 +-1558 +-1560 +-1547 +-1501 +-1401 +-1226 +-985 +-694 +-379 +-66 +224 +478 +703 +895 +1059 +1195 +1278 +1289 +1234 +1129 +997 +880 +804 +771 +766 +774 +785 +800 +827 +855 +872 +838 +718 +505 +228 +-81 +-393 +-678 +-917 +-1107 +-1255 +-1353 +-1385 +-1349 +-1268 +-1157 +-1045 +-964 +-922 +-923 +-955 +-998 +-1027 +-1018 +-946 +-762 +-482 +-149 +196 +498 +753 +979 +1191 +1374 +1529 +1639 +1696 +1715 +1711 +1667 +1575 +1430 +1208 +934 +661 +419 +219 +60 +-80 +-232 +-407 +-595 +-791 +-986 +-1157 +-1304 +-1438 +-1552 +-1640 +-1693 +-1700 +-1646 +-1528 +-1367 +-1162 +-923 +-655 +-364 +-63 +229 +504 +738 +929 +1071 +1168 +1211 +1211 +1172 +1086 +977 +876 +797 +748 +742 +767 +821 +874 +925 +951 +940 +859 +699 +461 +165 +-164 +-483 +-762 +-995 +-1165 +-1267 +-1300 +-1267 +-1183 +-1099 +-1034 +-1004 +-1004 +-1032 +-1055 +-1075 +-1099 +-1107 +-1071 +-961 +-732 +-402 +-38 +306 +580 +787 +958 +1127 +1295 +1463 +1606 +1698 +1734 +1714 +1642 +1520 +1352 +1136 +895 +651 +425 +234 +72 +-76 +-218 +-370 +-539 +-710 +-890 +-1082 +-1280 +-1470 +-1635 +-1737 +-1760 +-1708 +-1602 +-1473 +-1335 +-1161 +-941 +-663 +-340 +-14 +273 +509 +705 +868 +1012 +1128 +1190 +1195 +1134 +1027 +921 +838 +789 +778 +796 +831 +880 +942 +1004 +1042 +1021 +915 +691 +372 +5 +-357 +-665 +-878 +-1014 +-1101 +-1140 +-1140 +-1117 +-1077 +-1033 +-1012 +-1018 +-1052 +-1115 +-1171 +-1209 +-1226 +-1193 +-1084 +-879 +-588 +-258 +56 +315 +524 +716 +917 +1131 +1336 +1511 +1631 +1693 +1710 +1687 +1628 +1525 +1361 +1134 +869 +601 +371 +203 +87 +-15 +-133 +-286 +-487 +-713 +-936 +-1140 +-1326 +-1500 +-1651 +-1747 +-1768 +-1715 +-1603 +-1461 +-1298 +-1115 +-895 +-621 +-312 +-5 +273 +512 +707 +863 +994 +1088 +1130 +1122 +1072 +994 +917 +858 +823 +811 +826 +880 +965 +1078 +1179 +1199 +1092 +858 +521 +141 +-198 +-472 +-688 +-847 +-962 +-1046 +-1076 +-1055 +-1014 +-979 +-976 +-1031 +-1113 +-1195 +-1255 +-1281 +-1265 +-1216 +-1135 +-989 +-777 +-510 +-223 +64 +318 +540 +757 +964 +1155 +1327 +1477 +1588 +1662 +1702 +1701 +1628 +1481 +1265 +1013 +764 +563 +420 +305 +193 +58 +-109 +-295 +-492 +-703 +-915 +-1126 +-1341 +-1543 +-1695 +-1776 +-1771 +-1694 +-1580 +-1452 +-1307 +-1118 +-878 +-583 +-258 +54 +316 +524 +682 +811 +927 +1026 +1088 +1089 +1036 +944 +839 +762 +749 +805 +910 +1044 +1180 +1269 +1288 +1204 +1002 +714 +378 +29 +-279 +-519 +-706 +-831 +-896 +-924 +-922 +-905 +-908 +-959 +-1041 +-1137 +-1223 +-1268 +-1288 +-1291 +-1273 +-1226 +-1147 +-1005 +-780 +-496 +-198 +88 +329 +526 +712 +911 +1126 +1334 +1515 +1644 +1709 +1713 +1666 +1567 +1417 +1226 +1014 +808 +635 +499 +377 +250 +106 +-74 +-275 +-489 +-719 +-950 +-1169 +-1389 +-1590 +-1733 +-1802 +-1802 +-1737 +-1622 +-1478 +-1301 +-1073 +-800 +-500 +-198 +77 +312 +509 +690 +844 +968 +1035 +1035 +973 +870 +774 +717 +722 +795 +923 +1069 +1220 +1350 +1402 +1345 +1180 +904 +560 +213 +-103 +-357 +-525 +-628 +-693 +-726 +-758 +-806 +-854 +-912 +-997 +-1086 +-1167 +-1249 +-1317 +-1360 +-1368 +-1337 +-1259 +-1134 +-962 +-743 +-498 +-240 +14 +257 +488 +721 +957 +1180 +1379 +1535 +1636 +1678 +1667 +1614 +1523 +1390 +1220 +1041 +872 +732 +620 +503 +354 +170 +-49 +-287 +-523 +-746 +-965 +-1188 +-1416 +-1640 +-1816 +-1894 +-1864 +-1751 +-1589 +-1426 +-1253 +-1044 +-793 +-493 +-174 +121 +368 +565 +717 +827 +902 +932 +905 +839 +756 +696 +704 +774 +903 +1076 +1243 +1384 +1471 +1447 +1294 +1038 +712 +376 +97 +-121 +-286 +-402 +-499 +-594 +-669 +-718 +-762 +-815 +-893 +-1012 +-1145 +-1268 +-1363 +-1402 +-1401 +-1371 +-1312 +-1227 +-1110 +-955 +-753 +-513 +-247 +23 +283 +527 +766 +1003 +1210 +1385 +1516 +1592 +1616 +1585 +1520 +1433 +1330 +1211 +1091 +965 +833 +696 +548 +377 +188 +-14 +-230 +-462 +-711 +-975 +-1236 +-1483 +-1698 +-1834 +-1883 +-1854 +-1765 +-1640 +-1489 +-1300 +-1054 +-764 +-445 +-128 +149 +375 +557 +692 +781 +834 +830 +777 +704 +649 +653 +745 +909 +1108 +1305 +1447 +1503 +1473 +1343 +1125 +863 +591 +326 +90 +-101 +-248 +-351 +-427 +-492 +-554 +-621 +-712 +-824 +-950 +-1091 +-1224 +-1320 +-1386 +-1420 +-1414 +-1390 +-1339 +-1259 +-1145 +-995 +-786 +-530 +-248 +36 +311 +573 +830 +1063 +1253 +1407 +1503 +1548 +1556 +1541 +1499 +1435 +1346 +1231 +1102 +975 +855 +737 +600 +425 +214 +-21 +-265 +-514 +-766 +-1018 +-1262 +-1502 +-1708 +-1849 +-1911 +-1887 +-1795 +-1642 +-1454 +-1228 +-962 +-678 +-385 +-94 +169 +389 +563 +669 +703 +682 +626 +570 +569 +638 +765 +940 +1136 +1304 +1435 +1516 +1507 +1425 +1256 +1020 +756 +496 +264 +74 +-62 +-159 +-235 +-315 +-414 +-523 +-640 +-761 +-880 +-994 +-1118 +-1237 +-1338 +-1413 +-1441 +-1434 +-1401 +-1346 +-1275 +-1181 +-1041 +-825 +-542 +-221 +106 +402 +649 +860 +1049 +1209 +1352 +1464 +1529 +1546 +1522 +1475 +1417 +1348 +1268 +1174 +1074 +954 +808 +622 +401 +167 +-71 +-296 +-514 +-754 +-1020 +-1299 +-1566 +-1793 +-1941 +-1981 +-1928 +-1802 +-1626 +-1431 +-1198 +-907 +-600 +-285 +16 +250 +406 +497 +535 +523 +503 +501 +528 +610 +750 +915 +1099 +1274 +1405 +1497 +1529 +1475 +1333 +1115 +864 +623 +427 +276 +159 +54 +-55 +-177 +-304 +-432 +-542 +-653 +-768 +-887 +-1016 +-1152 +-1262 +-1338 +-1397 +-1430 +-1445 +-1437 +-1412 +-1347 +-1224 +-1032 +-770 +-460 +-142 +156 +419 +645 +856 +1048 +1215 +1350 +1445 +1489 +1488 +1462 +1434 +1411 +1386 +1344 +1267 +1141 +967 +773 +580 +385 +186 +-27 +-266 +-526 +-808 +-1089 +-1345 +-1587 +-1807 +-1972 +-2043 +-1999 +-1854 +-1610 +-1334 +-1049 +-754 +-479 +-217 +18 +203 +318 +380 +401 +394 +400 +442 +531 +673 +859 +1058 +1250 +1409 +1506 +1535 +1484 +1356 +1178 +968 +762 +583 +443 +330 +225 +121 +-5 +-143 +-292 +-441 +-575 +-692 +-803 +-916 +-1024 +-1137 +-1253 +-1350 +-1420 +-1468 +-1484 +-1470 +-1417 +-1322 +-1174 +-973 +-716 +-413 +-105 +187 +448 +682 +886 +1050 +1179 +1283 +1355 +1393 +1426 +1449 +1456 +1450 +1424 +1368 +1276 +1143 +972 +780 +586 +377 +165 +-45 +-284 +-537 +-804 +-1085 +-1368 +-1641 +-1887 +-2060 +-2086 +-1960 +-1726 +-1437 +-1162 +-919 +-693 +-464 +-236 +-13 +152 +235 +254 +243 +247 +307 +441 +622 +834 +1045 +1220 +1357 +1457 +1501 +1486 +1397 +1241 +1056 +874 +716 +598 +522 +437 +317 +171 +-1 +-176 +-328 +-453 +-566 +-665 +-771 +-887 +-1017 +-1167 +-1315 +-1427 +-1496 +-1518 +-1506 +-1469 +-1408 +-1316 +-1173 +-959 +-663 +-329 +-8 +272 +495 +675 +846 +1004 +1144 +1261 +1337 +1375 +1400 +1422 +1443 +1462 +1462 +1406 +1293 +1131 +934 +739 +567 +396 +211 +3 +-246 +-540 +-860 +-1179 +-1485 +-1760 +-1977 +-2089 +-2046 +-1860 +-1593 +-1318 +-1073 +-847 +-631 +-419 +-214 +-44 +58 +95 +103 +124 +193 +324 +511 +726 +960 +1166 +1320 +1427 +1471 +1449 +1363 +1250 +1115 +978 +863 +764 +680 +602 +485 +322 +148 +-20 +-171 +-293 +-400 +-517 +-645 +-778 +-910 +-1052 +-1200 +-1331 +-1449 +-1535 +-1574 +-1573 +-1527 +-1445 +-1324 +-1149 +-907 +-607 +-290 +9 +273 +488 +671 +839 +982 +1109 +1213 +1298 +1359 +1419 +1477 +1514 +1523 +1483 +1375 +1220 +1062 +914 +786 +665 +507 +274 +-14 +-327 +-648 +-964 +-1266 +-1560 +-1835 +-2043 +-2108 +-1994 +-1742 +-1431 +-1165 +-963 +-783 +-617 +-450 +-277 +-142 +-69 +-37 +-2 +63 +188 +383 +617 +858 +1091 +1268 +1375 +1421 +1407 +1354 +1270 +1192 +1111 +1014 +913 +809 +692 +578 +463 +334 +193 +43 +-112 +-266 +-405 +-526 +-639 +-751 +-888 +-1062 +-1243 +-1408 +-1527 +-1588 +-1598 +-1572 +-1518 +-1437 +-1310 +-1128 +-872 +-562 +-241 +51 +297 +492 +645 +785 +919 +1047 +1179 +1303 +1400 +1467 +1504 +1505 +1470 +1412 +1331 +1236 +1136 +1030 +899 +730 +513 +238 +-73 +-391 +-717 +-1044 +-1359 +-1652 +-1903 +-2054 +-2027 +-1849 +-1575 +-1287 +-1074 +-916 +-778 +-651 +-516 +-380 +-278 +-219 +-169 +-88 +49 +256 +505 +757 +984 +1158 +1270 +1336 +1360 +1356 +1334 +1277 +1198 +1098 +987 +888 +805 +724 +635 +514 +358 +192 +33 +-113 +-239 +-346 +-459 +-592 +-753 +-944 +-1141 +-1325 +-1465 +-1548 +-1586 +-1595 +-1581 +-1533 +-1445 +-1289 +-1060 +-778 +-475 +-196 +31 +215 +387 +561 +743 +923 +1080 +1205 +1296 +1358 +1406 +1434 +1445 +1429 +1398 +1358 +1303 +1234 +1139 +995 +785 +518 +202 +-140 +-480 +-812 +-1136 +-1436 +-1707 +-1912 +-1985 +-1895 +-1685 +-1420 +-1179 +-1017 +-904 +-810 +-720 +-622 +-517 +-417 +-314 +-196 +-50 +125 +337 +562 +777 +982 +1147 +1259 +1321 +1339 +1323 +1280 +1222 +1156 +1082 +1003 +925 +843 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b5_987_767.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b5_987_767.samples new file mode 100644 index 00000000..394ee758 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/synth_piano_b5_987_767.samples @@ -0,0 +1,4096 @@ +-1105 +-1235 +-1346 +-1434 +-1492 +-1513 +-1497 +-1441 +-1348 +-1228 +-1091 +-939 +-777 +-601 +-413 +-215 +-13 +186 +379 +562 +734 +895 +1043 +1178 +1297 +1392 +1463 +1504 +1511 +1486 +1419 +1312 +1177 +1021 +852 +673 +486 +293 +90 +-120 +-329 +-528 +-715 +-887 +-1044 +-1186 +-1309 +-1411 +-1485 +-1524 +-1530 +-1497 +-1419 +-1312 +-1178 +-1030 +-873 +-702 +-520 +-330 +-130 +74 +275 +468 +649 +816 +965 +1101 +1226 +1333 +1419 +1477 +1506 +1500 +1457 +1374 +1253 +1107 +948 +777 +595 +405 +210 +6 +-203 +-407 +-600 +-783 +-952 +-1106 +-1239 +-1351 +-1440 +-1502 +-1529 +-1521 +-1474 +-1385 +-1265 +-1118 +-959 +-796 +-625 +-442 +-250 +-45 +163 +362 +549 +721 +878 +1019 +1153 +1274 +1376 +1452 +1497 +1509 +1485 +1422 +1324 +1195 +1045 +880 +701 +512 +322 +126 +-78 +-283 +-486 +-679 +-856 +-1015 +-1153 +-1274 +-1377 +-1456 +-1507 +-1526 +-1504 +-1434 +-1327 +-1193 +-1043 +-891 +-731 +-557 +-369 +-168 +39 +243 +435 +611 +775 +926 +1066 +1197 +1314 +1406 +1467 +1498 +1496 +1460 +1389 +1281 +1141 +982 +809 +626 +440 +250 +51 +-157 +-367 +-568 +-754 +-922 +-1068 +-1195 +-1310 +-1407 +-1479 +-1521 +-1522 +-1477 +-1390 +-1272 +-1133 +-986 +-836 +-670 +-488 +-291 +-84 +122 +319 +500 +673 +835 +984 +1120 +1243 +1347 +1423 +1469 +1488 +1474 +1424 +1335 +1213 +1065 +900 +728 +548 +363 +169 +-36 +-248 +-456 +-647 +-817 +-973 +-1110 +-1235 +-1345 +-1434 +-1495 +-1516 +-1496 +-1428 +-1326 +-1203 +-1064 +-919 +-764 +-592 +-404 +-207 +-6 +193 +382 +563 +731 +894 +1046 +1182 +1306 +1400 +1466 +1503 +1505 +1474 +1404 +1297 +1162 +1008 +841 +665 +482 +291 +87 +-125 +-336 +-538 +-724 +-894 +-1045 +-1182 +-1305 +-1412 +-1490 +-1532 +-1533 +-1488 +-1402 +-1289 +-1158 +-1013 +-858 +-692 +-511 +-320 +-120 +82 +279 +471 +650 +817 +966 +1105 +1232 +1340 +1424 +1479 +1500 +1489 +1441 +1354 +1235 +1095 +939 +769 +588 +400 +203 +-1 +-212 +-419 +-612 +-790 +-951 +-1096 +-1229 +-1346 +-1440 +-1504 +-1529 +-1515 +-1457 +-1362 +-1243 +-1103 +-951 +-794 +-626 +-443 +-246 +-42 +160 +359 +544 +717 +878 +1025 +1162 +1284 +1384 +1456 +1493 +1498 +1471 +1405 +1310 +1185 +1035 +871 +693 +506 +316 +117 +-87 +-296 +-499 +-686 +-859 +-1015 +-1155 +-1281 +-1386 +-1470 +-1515 +-1523 +-1488 +-1410 +-1299 +-1171 +-1028 +-881 +-723 +-551 +-362 +-160 +45 +247 +438 +615 +783 +947 +1096 +1232 +1347 +1435 +1486 +1508 +1498 +1457 +1381 +1272 +1134 +974 +802 +621 +434 +243 +41 +-169 +-380 +-583 +-766 +-935 +-1087 +-1222 +-1345 +-1448 +-1517 +-1546 +-1537 +-1482 +-1384 +-1266 +-1129 +-984 +-832 +-667 +-483 +-283 +-79 +130 +329 +519 +698 +865 +1021 +1161 +1287 +1391 +1457 +1493 +1505 +1489 +1435 +1344 +1216 +1064 +894 +718 +539 +353 +157 +-50 +-263 +-472 +-664 +-839 +-998 +-1142 +-1273 +-1388 +-1474 +-1525 +-1536 +-1501 +-1427 +-1326 +-1204 +-1069 +-921 +-763 +-589 +-399 +-199 +6 +207 +404 +591 +766 +929 +1076 +1204 +1316 +1401 +1460 +1493 +1498 +1470 +1400 +1290 +1148 +990 +822 +648 +466 +275 +71 +-142 +-353 +-553 +-735 +-905 +-1058 +-1198 +-1323 +-1424 +-1491 +-1522 +-1511 +-1462 +-1381 +-1269 +-1144 +-1001 +-849 +-684 +-505 +-316 +-113 +90 +291 +483 +665 +834 +987 +1123 +1242 +1340 +1418 +1469 +1488 +1478 +1428 +1337 +1213 +1069 +909 +742 +566 +381 +186 +-20 +-228 +-432 +-622 +-797 +-958 +-1110 +-1254 +-1374 +-1460 +-1510 +-1524 +-1503 +-1444 +-1347 +-1229 +-1095 +-947 +-790 +-623 +-439 +-241 +-34 +174 +375 +565 +742 +908 +1053 +1188 +1305 +1400 +1470 +1507 +1513 +1486 +1411 +1302 +1166 +1013 +849 +675 +493 +301 +102 +-107 +-317 +-520 +-707 +-881 +-1039 +-1181 +-1304 +-1404 +-1475 +-1511 +-1510 +-1473 +-1397 +-1289 +-1162 +-1023 +-876 +-719 +-545 +-353 +-152 +55 +258 +451 +633 +800 +954 +1096 +1225 +1332 +1415 +1470 +1493 +1486 +1440 +1355 +1239 +1097 +941 +776 +602 +420 +226 +23 +-187 +-394 +-591 +-773 +-936 +-1085 +-1218 +-1331 +-1422 +-1480 +-1503 +-1487 +-1432 +-1345 +-1234 +-1108 +-972 +-822 +-655 +-471 +-270 +-65 +139 +333 +518 +696 +857 +1009 +1144 +1262 +1359 +1427 +1471 +1484 +1461 +1398 +1300 +1172 +1026 +870 +701 +528 +342 +142 +-68 +-278 +-480 +-665 +-834 +-997 +-1144 +-1271 +-1379 +-1454 +-1495 +-1498 +-1462 +-1394 +-1299 +-1188 +-1060 +-919 +-761 +-583 +-390 +-188 +17 +214 +406 +593 +767 +928 +1072 +1200 +1309 +1397 +1459 +1492 +1491 +1456 +1378 +1262 +1128 +981 +821 +649 +465 +269 +61 +-153 +-361 +-560 +-739 +-905 +-1058 +-1194 +-1311 +-1405 +-1464 +-1491 +-1477 +-1432 +-1359 +-1260 +-1143 +-1005 +-850 +-681 +-498 +-307 +-105 +98 +295 +487 +670 +839 +988 +1121 +1239 +1340 +1416 +1465 +1481 +1461 +1406 +1318 +1203 +1069 +920 +755 +575 +383 +180 +-29 +-239 +-439 +-629 +-806 +-965 +-1109 +-1237 +-1340 +-1415 +-1459 +-1470 +-1448 +-1398 +-1318 +-1214 +-1089 +-946 +-789 +-616 +-431 +-236 +-36 +169 +368 +557 +733 +893 +1034 +1162 +1276 +1365 +1429 +1461 +1461 +1430 +1363 +1271 +1152 +1012 +854 +682 +496 +300 +98 +-110 +-314 +-513 +-701 +-873 +-1034 +-1177 +-1300 +-1395 +-1460 +-1489 +-1487 +-1453 +-1388 +-1292 +-1175 +-1037 +-887 +-726 +-547 +-358 +-158 +48 +253 +448 +634 +808 +964 +1105 +1232 +1335 +1412 +1462 +1479 +1468 +1424 +1347 +1243 +1110 +960 +794 +613 +420 +224 +18 +-192 +-401 +-600 +-782 +-948 +-1097 +-1223 +-1331 +-1416 +-1468 +-1490 +-1480 +-1435 +-1357 +-1252 +-1123 +-982 +-828 +-659 +-475 +-279 +-75 +132 +337 +531 +711 +879 +1030 +1165 +1280 +1370 +1432 +1466 +1474 +1455 +1400 +1315 +1198 +1055 +896 +723 +538 +344 +142 +-70 +-284 +-490 +-679 +-851 +-1006 +-1144 +-1261 +-1361 +-1431 +-1468 +-1474 +-1449 +-1391 +-1304 +-1194 +-1064 +-919 +-760 +-585 +-397 +-198 +7 +214 +415 +606 +783 +942 +1084 +1206 +1310 +1390 +1442 +1470 +1469 +1436 +1369 +1267 +1137 +988 +828 +651 +462 +263 +54 +-159 +-369 +-566 +-747 +-913 +-1063 +-1192 +-1306 +-1392 +-1447 +-1472 +-1467 +-1429 +-1359 +-1264 +-1144 +-1005 +-853 +-690 +-510 +-319 +-115 +94 +302 +500 +685 +852 +1008 +1147 +1265 +1363 +1430 +1474 +1484 +1467 +1415 +1329 +1217 +1083 +931 +762 +577 +381 +174 +-37 +-250 +-455 +-647 +-829 +-991 +-1134 +-1258 +-1357 +-1430 +-1473 +-1488 +-1470 +-1421 +-1340 +-1232 +-1104 +-957 +-801 +-632 +-444 +-242 +-31 +182 +389 +585 +765 +925 +1066 +1192 +1300 +1388 +1447 +1480 +1482 +1454 +1393 +1296 +1174 +1026 +863 +682 +487 +287 +80 +-131 +-338 +-538 +-725 +-895 +-1046 +-1178 +-1290 +-1377 +-1440 +-1472 +-1476 +-1451 +-1390 +-1295 +-1178 +-1043 +-891 +-731 +-555 +-360 +-152 +62 +273 +473 +657 +826 +978 +1114 +1236 +1334 +1409 +1454 +1473 +1463 +1421 +1347 +1243 +1113 +959 +789 +606 +409 +207 +0 +-211 +-418 +-612 +-792 +-954 +-1095 +-1217 +-1317 +-1395 +-1449 +-1470 +-1463 +-1421 +-1346 +-1246 +-1125 +-987 +-836 +-668 +-478 +-275 +-64 +147 +350 +541 +719 +884 +1031 +1164 +1273 +1362 +1426 +1460 +1470 +1450 +1398 +1308 +1190 +1047 +884 +709 +520 +323 +119 +-90 +-298 +-499 +-689 +-859 +-1010 +-1142 +-1255 +-1345 +-1415 +-1454 +-1463 +-1442 +-1388 +-1304 +-1198 +-1070 +-926 +-762 +-581 +-386 +-180 +26 +230 +425 +610 +787 +951 +1097 +1219 +1321 +1401 +1455 +1484 +1482 +1446 +1378 +1276 +1143 +992 +823 +640 +445 +242 +33 +-178 +-384 +-585 +-767 +-932 +-1080 +-1206 +-1311 +-1395 +-1451 +-1478 +-1477 +-1446 +-1381 +-1285 +-1165 +-1023 +-868 +-695 +-505 +-306 +-99 +110 +315 +512 +699 +865 +1015 +1145 +1257 +1353 +1422 +1468 +1486 +1472 +1426 +1342 +1228 +1090 +930 +752 +560 +361 +156 +-55 +-264 +-468 +-662 +-836 +-996 +-1138 +-1255 +-1351 +-1424 +-1473 +-1488 +-1474 +-1429 +-1351 +-1245 +-1115 +-965 +-800 +-621 +-429 +-226 +-15 +194 +399 +592 +772 +933 +1074 +1199 +1309 +1395 +1459 +1494 +1497 +1474 +1411 +1315 +1191 +1039 +868 +678 +482 +281 +76 +-133 +-343 +-548 +-737 +-908 +-1055 +-1180 +-1287 +-1375 +-1444 +-1486 +-1498 +-1477 +-1419 +-1328 +-1205 +-1058 +-899 +-727 +-541 +-344 +-137 +76 +282 +483 +667 +837 +987 +1124 +1247 +1344 +1420 +1469 +1487 +1482 +1447 +1377 +1270 +1133 +969 +787 +595 +399 +199 +-10 +-222 +-432 +-630 +-811 +-965 +-1096 +-1212 +-1312 +-1396 +-1457 +-1487 +-1486 +-1451 +-1378 +-1274 +-1147 +-1000 +-839 +-660 +-468 +-264 +-55 +155 +360 +553 +734 +896 +1040 +1169 +1278 +1365 +1429 +1468 +1482 +1470 +1421 +1335 +1211 +1059 +887 +701 +511 +315 +110 +-104 +-317 +-520 +-708 +-869 +-1012 +-1145 +-1262 +-1361 +-1441 +-1487 +-1497 +-1478 +-1424 +-1338 +-1224 +-1086 +-932 +-763 +-576 +-379 +-172 +37 +243 +442 +634 +808 +964 +1101 +1219 +1318 +1399 +1456 +1486 +1493 +1465 +1395 +1289 +1148 +989 +812 +627 +434 +232 +21 +-193 +-403 +-600 +-776 +-931 +-1069 +-1193 +-1301 +-1389 +-1453 +-1487 +-1490 +-1461 +-1396 +-1300 +-1175 +-1030 +-868 +-688 +-498 +-298 +-88 +124 +334 +533 +716 +880 +1024 +1150 +1259 +1349 +1418 +1463 +1484 +1475 +1431 +1346 +1227 +1082 +918 +737 +544 +346 +139 +-73 +-280 +-480 +-665 +-831 +-979 +-1110 +-1226 +-1324 +-1400 +-1450 +-1472 +-1465 +-1426 +-1351 +-1241 +-1106 +-952 +-786 +-607 +-415 +-212 +-1 +209 +413 +599 +770 +923 +1055 +1175 +1279 +1363 +1427 +1467 +1476 +1455 +1398 +1301 +1172 +1017 +843 +654 +458 +257 +50 +-155 +-357 +-548 +-725 +-883 +-1024 +-1158 +-1277 +-1370 +-1439 +-1480 +-1489 +-1470 +-1413 +-1319 +-1198 +-1052 +-893 +-721 +-532 +-332 +-121 +91 +296 +491 +672 +838 +984 +1112 +1226 +1322 +1396 +1449 +1477 +1476 +1441 +1365 +1253 +1111 +944 +766 +575 +379 +179 +-25 +-233 +-435 +-622 +-794 +-946 +-1081 +-1198 +-1299 +-1382 +-1441 +-1471 +-1471 +-1436 +-1366 +-1262 +-1133 +-983 +-820 +-643 +-449 +-247 +-42 +165 +367 +554 +728 +888 +1028 +1150 +1256 +1342 +1409 +1455 +1473 +1462 +1410 +1316 +1189 +1034 +863 +682 +493 +299 +99 +-108 +-312 +-506 +-684 +-851 +-1002 +-1135 +-1249 +-1347 +-1422 +-1467 +-1486 +-1471 +-1418 +-1331 +-1215 +-1076 +-919 +-746 +-560 +-362 +-159 +45 +246 +443 +630 +802 +954 +1086 +1199 +1296 +1380 +1441 +1479 +1488 +1461 +1383 +1270 +1128 +967 +796 +611 +421 +221 +15 +-191 +-390 +-580 +-754 +-912 +-1054 +-1177 +-1282 +-1370 +-1433 +-1468 +-1477 +-1450 +-1388 +-1292 +-1165 +-1016 +-844 +-665 +-480 +-285 +-83 +122 +325 +519 +698 +860 +1000 +1124 +1231 +1328 +1408 +1462 +1488 +1479 +1427 +1336 +1213 +1065 +901 +724 +534 +335 +135 +-69 +-271 +-466 +-651 +-817 +-969 +-1102 +-1218 +-1316 +-1394 +-1446 +-1472 +-1471 +-1429 +-1351 +-1235 +-1096 +-940 +-771 +-593 +-405 +-208 +-3 +202 +403 +589 +757 +907 +1038 +1155 +1265 +1355 +1424 +1468 +1478 +1451 +1385 +1283 +1152 +999 +829 +647 +454 +257 +57 +-146 +-347 +-538 +-716 +-877 +-1018 +-1143 +-1251 +-1344 +-1414 +-1463 +-1480 +-1461 +-1402 +-1301 +-1174 +-1026 +-867 +-697 +-516 +-322 +-121 +86 +288 +479 +657 +815 +967 +1103 +1225 +1331 +1413 +1471 +1497 +1486 +1440 +1357 +1241 +1100 +936 +759 +571 +377 +179 +-24 +-226 +-430 +-618 +-788 +-940 +-1076 +-1199 +-1305 +-1393 +-1461 +-1497 +-1496 +-1458 +-1376 +-1260 +-1124 +-969 +-803 +-627 +-438 +-240 +-35 +169 +370 +557 +731 +889 +1028 +1155 +1269 +1364 +1437 +1480 +1493 +1472 +1412 +1313 +1185 +1031 +862 +681 +492 +297 +94 +-110 +-314 +-507 +-685 +-845 +-992 +-1133 +-1258 +-1366 +-1449 +-1502 +-1519 +-1496 +-1436 +-1339 +-1215 +-1068 +-904 +-732 +-549 +-354 +-154 +51 +255 +453 +640 +811 +962 +1097 +1220 +1326 +1412 +1476 +1504 +1504 +1466 +1386 +1270 +1126 +966 +789 +602 +408 +209 +4 +-202 +-400 +-585 +-756 +-913 +-1057 +-1187 +-1302 +-1399 +-1468 +-1505 +-1510 +-1476 +-1404 +-1296 +-1159 +-1005 +-837 +-659 +-472 +-278 +-75 +131 +335 +529 +711 +877 +1024 +1158 +1277 +1380 +1460 +1509 +1525 +1506 +1445 +1345 +1216 +1065 +898 +714 +520 +322 +121 +-80 +-281 +-477 +-661 +-831 +-987 +-1129 +-1254 +-1360 +-1445 +-1500 +-1524 +-1512 +-1462 +-1372 +-1247 +-1099 +-937 +-767 +-588 +-401 +-202 +7 +218 +420 +608 +776 +932 +1078 +1206 +1322 +1417 +1484 +1520 +1521 +1480 +1406 +1300 +1163 +1001 +824 +635 +440 +242 +44 +-156 +-356 +-550 +-731 +-895 +-1047 +-1182 +-1301 +-1401 +-1473 +-1519 +-1531 +-1504 +-1436 +-1327 +-1190 +-1037 +-874 +-703 +-519 +-324 +-116 +95 +301 +498 +679 +839 +992 +1130 +1253 +1361 +1440 +1493 +1514 +1503 +1456 +1371 +1249 +1099 +927 +742 +553 +364 +170 +-30 +-232 +-430 +-619 +-792 +-950 +-1091 +-1217 +-1328 +-1418 +-1482 +-1514 +-1505 +-1458 +-1373 +-1254 +-1114 +-959 +-798 +-626 +-438 +-240 +-34 +173 +375 +560 +735 +893 +1038 +1175 +1295 +1388 +1459 +1501 +1511 +1487 +1423 +1319 +1181 +1021 +847 +666 +480 +292 +96 +-106 +-308 +-503 +-684 +-850 +-1000 +-1136 +-1259 +-1363 +-1443 +-1493 +-1506 +-1484 +-1422 +-1321 +-1194 +-1046 +-890 +-724 +-546 +-356 +-156 +52 +257 +451 +630 +799 +959 +1100 +1225 +1333 +1417 +1480 +1511 +1509 +1469 +1380 +1256 +1105 +940 +766 +585 +400 +209 +10 +-190 +-388 +-577 +-751 +-910 +-1056 +-1188 +-1305 +-1399 +-1468 +-1503 +-1504 +-1464 +-1381 +-1268 +-1132 +-981 +-822 +-654 +-471 +-277 +-74 +133 +332 +521 +703 +868 +1019 +1154 +1277 +1380 +1462 +1513 +1531 +1510 +1446 +1343 +1209 +1051 +881 +705 +520 +329 +134 +-68 +-268 +-467 +-654 +-824 +-980 +-1122 +-1250 +-1358 +-1441 +-1495 +-1517 +-1501 +-1442 +-1344 +-1219 +-1076 +-924 +-764 +-590 +-401 +-201 +9 +217 +413 +595 +765 +919 +1061 +1188 +1301 +1395 +1461 +1495 +1496 +1459 +1381 +1269 +1128 +971 +804 +628 +445 +258 +61 +-138 +-337 +-529 +-708 +-878 +-1031 +-1168 +-1289 +-1389 +-1465 +-1507 +-1515 +-1479 +-1402 +-1291 +-1159 +-1014 +-860 +-696 +-515 +-320 +-114 +94 +296 +487 +664 +831 +985 +1122 +1243 +1350 +1430 +1481 +1501 +1484 +1430 +1335 +1209 +1062 +902 +734 +557 +375 +186 +-13 +-216 +-415 +-606 +-778 +-934 +-1076 +-1203 +-1316 +-1406 +-1465 +-1491 +-1478 +-1423 +-1333 +-1219 +-1088 +-943 +-788 +-618 +-433 +-238 +-35 +164 +361 +547 +719 +882 +1027 +1162 +1282 +1376 +1445 +1485 +1490 +1455 +1378 +1270 +1136 +987 +827 +662 +485 +301 +107 +-94 +-297 +-491 +-673 +-840 +-993 +-1131 +-1256 +-1360 +-1437 +-1482 +-1489 +-1460 +-1392 +-1292 +-1169 +-1030 +-877 +-716 +-539 +-350 +-153 +48 +247 +439 +618 +784 +937 +1073 +1193 +1299 +1380 +1435 +1457 +1446 +1395 +1305 +1190 +1054 +906 +749 +582 +404 +218 +25 +-171 +-369 +-558 +-735 +-894 +-1040 +-1173 +-1287 +-1378 +-1439 +-1468 +-1461 +-1419 +-1338 +-1231 +-1104 +-961 +-808 +-642 +-464 +-275 +-79 +119 +316 +506 +683 +848 +994 +1128 +1245 +1342 +1415 +1454 +1457 +1427 +1358 +1258 +1136 +995 +845 +685 +512 +331 +142 +-55 +-251 +-444 +-625 +-791 +-941 +-1080 +-1208 +-1316 +-1397 +-1448 +-1459 +-1436 +-1376 +-1283 +-1169 +-1033 +-888 +-732 +-568 +-388 +-199 +-3 +195 +390 +573 +741 +896 +1037 +1168 +1280 +1369 +1427 +1452 +1439 +1388 +1306 +1198 +1070 +928 +775 +612 +440 +259 +69 +-127 +-323 +-513 +-690 +-851 +-999 +-1133 +-1249 +-1345 +-1412 +-1445 +-1446 +-1408 +-1329 +-1225 +-1101 +-964 +-816 +-661 +-492 +-312 +-122 +75 +269 +457 +634 +797 +951 +1087 +1209 +1311 +1384 +1428 +1435 +1409 +1348 +1251 +1134 +1001 +857 +704 +539 +368 +185 +-7 +-205 +-399 +-582 +-750 +-902 +-1045 +-1172 +-1280 +-1361 +-1411 +-1430 +-1411 +-1356 +-1273 +-1164 +-1038 +-899 +-749 +-590 +-420 +-239 +-47 +148 +340 +525 +696 +852 +992 +1117 +1234 +1326 +1389 +1416 +1405 +1362 +1289 +1189 +1070 +938 +795 +642 +476 +298 +109 +-87 +-285 +-472 +-649 +-810 +-959 +-1092 +-1210 +-1305 +-1371 +-1407 +-1408 +-1378 +-1317 +-1224 +-1109 +-980 +-836 +-686 +-521 +-349 +-164 +31 +227 +417 +596 +763 +911 +1046 +1165 +1268 +1343 +1391 +1402 +1380 +1328 +1243 +1140 +1018 +885 +739 +580 +407 +220 +27 +-165 +-354 +-534 +-708 +-864 +-1010 +-1142 +-1252 +-1335 +-1386 +-1408 +-1400 +-1360 +-1286 +-1183 +-1060 +-922 +-776 +-624 +-456 +-280 +-88 +109 +305 +490 +658 +819 +964 +1094 +1210 +1302 +1366 +1399 +1394 +1361 +1295 +1201 +1093 +968 +833 +682 +516 +335 +148 +-44 +-237 +-424 +-602 +-769 +-924 +-1061 +-1188 +-1285 +-1355 +-1392 +-1401 +-1383 +-1331 +-1244 +-1134 +-1003 +-864 +-718 +-561 +-390 +-202 +-8 +190 +383 +559 +726 +877 +1013 +1140 +1241 +1319 +1366 +1381 +1364 +1321 +1251 +1160 +1049 +922 +781 +622 +448 +265 +73 +-118 +-307 +-492 +-669 +-838 +-988 +-1121 +-1233 +-1320 +-1378 +-1407 +-1410 +-1378 +-1309 +-1213 +-1091 +-954 +-814 +-662 +-501 +-323 +-129 +71 +268 +456 +633 +797 +946 +1086 +1203 +1293 +1357 +1387 +1389 +1360 +1304 +1228 +1130 +1013 +878 +727 +561 +380 +188 +-7 +-201 +-393 +-578 +-748 +-906 +-1047 +-1170 +-1268 +-1340 +-1387 +-1406 +-1394 +-1347 +-1267 +-1161 +-1036 +-902 +-757 +-598 +-427 +-243 +-47 +151 +342 +527 +706 +868 +1015 +1141 +1246 +1326 +1374 +1395 +1388 +1352 +1293 +1208 +1101 +976 +831 +672 +494 +306 +108 +-88 +-283 +-473 +-656 +-823 +-978 +-1117 +-1233 +-1327 +-1392 +-1433 +-1445 +-1417 +-1350 +-1252 +-1136 +-1003 +-860 +-709 +-544 +-363 +-171 +31 +235 +432 +621 +794 +951 +1089 +1201 +1292 +1357 +1393 +1402 +1384 +1339 +1269 +1175 +1062 +928 +776 +606 +418 +226 +28 +-170 +-366 +-558 +-740 +-905 +-1051 +-1174 +-1281 +-1360 +-1416 +-1445 +-1441 +-1403 +-1326 +-1222 +-1097 +-960 +-816 +-658 +-483 +-295 +-91 +117 +323 +518 +699 +868 +1021 +1150 +1258 +1338 +1394 +1419 +1421 +1394 +1342 +1261 +1154 +1028 +883 +720 +540 +351 +154 +-46 +-248 +-446 +-636 +-812 +-968 +-1102 +-1219 +-1316 +-1390 +-1437 +-1452 +-1433 +-1378 +-1288 +-1177 +-1048 +-908 +-760 +-595 +-413 +-216 +-8 +205 +410 +604 +783 +941 +1079 +1195 +1287 +1356 +1398 +1411 +1401 +1367 +1307 +1223 +1113 +978 +825 +654 +469 +277 +78 +-123 +-324 +-522 +-709 +-879 +-1027 +-1158 +-1268 +-1360 +-1426 +-1461 +-1461 +-1425 +-1355 +-1257 +-1143 +-1012 +-872 +-715 +-539 +-349 +-143 +72 +284 +488 +677 +845 +993 +1127 +1238 +1324 +1386 +1419 +1427 +1412 +1371 +1303 +1201 +1074 +926 +762 +584 +396 +197 +-6 +-212 +-415 +-608 +-786 +-940 +-1081 +-1203 +-1306 +-1385 +-1435 +-1455 +-1441 +-1391 +-1312 +-1210 +-1090 +-961 +-813 +-647 +-464 +-266 +-56 +160 +373 +572 +751 +911 +1048 +1164 +1260 +1333 +1379 +1402 +1404 +1381 +1332 +1254 +1148 +1018 +865 +694 +510 +315 +116 +-86 +-289 +-487 +-676 +-846 +-999 +-1134 +-1251 +-1345 +-1408 +-1442 +-1447 +-1417 +-1358 +-1272 +-1164 +-1041 +-900 +-747 +-576 +-386 +-181 +35 +248 +454 +644 +815 +966 +1094 +1200 +1286 +1348 +1385 +1400 +1394 +1364 +1307 +1219 +1101 +959 +795 +621 +435 +239 +38 +-165 +-365 +-562 +-742 +-908 +-1054 +-1181 +-1292 +-1372 +-1423 +-1445 +-1437 +-1401 +-1329 +-1233 +-1119 +-988 +-842 +-680 +-502 +-305 +-92 +126 +336 +533 +712 +873 +1015 +1134 +1234 +1307 +1359 +1390 +1400 +1387 +1350 +1283 +1185 +1053 +898 +733 +554 +365 +167 +-34 +-240 +-440 +-630 +-808 +-962 +-1098 +-1215 +-1307 +-1374 +-1414 +-1426 +-1413 +-1368 +-1291 +-1189 +-1069 +-932 +-781 +-610 +-424 +-216 +-2 +210 +413 +604 +777 +929 +1059 +1167 +1254 +1316 +1358 +1381 +1389 +1370 +1321 +1241 +1128 +990 +830 +661 +480 +287 +86 +-118 +-321 +-517 +-700 +-869 +-1014 +-1142 +-1246 +-1326 +-1385 +-1414 +-1421 +-1400 +-1346 +-1263 +-1153 +-1025 +-882 +-722 +-539 +-342 +-135 +80 +289 +487 +666 +827 +964 +1082 +1179 +1259 +1321 +1362 +1385 +1386 +1357 +1296 +1202 +1076 +930 +772 +599 +408 +209 +7 +-198 +-399 +-589 +-765 +-919 +-1052 +-1166 +-1257 +-1327 +-1372 +-1397 +-1398 +-1364 +-1300 +-1206 +-1086 +-949 +-797 +-633 +-450 +-252 +-45 +165 +367 +558 +728 +880 +1008 +1118 +1201 +1272 +1323 +1354 +1368 +1351 +1308 +1232 +1125 +999 +855 +694 +515 +325 +126 +-76 +-275 +-468 +-650 +-819 +-966 +-1091 +-1193 +-1275 +-1336 +-1375 +-1394 +-1383 +-1340 +-1265 +-1157 +-1029 +-887 +-730 +-558 +-370 +-168 +41 +247 +443 +623 +781 +921 +1039 +1140 +1221 +1287 +1331 +1357 +1359 +1332 +1277 +1189 +1079 +944 +793 +619 +431 +232 +31 +-166 +-359 +-545 +-720 +-877 +-1011 +-1121 +-1212 +-1286 +-1338 +-1374 +-1384 +-1363 +-1307 +-1215 +-1098 +-964 +-817 +-654 +-475 +-282 +-79 +124 +323 +507 +673 +819 +947 +1051 +1140 +1214 +1268 +1305 +1320 +1311 +1277 +1216 +1126 +1009 +869 +710 +535 +344 +148 +-49 +-242 +-429 +-606 +-769 +-913 +-1036 +-1139 +-1223 +-1293 +-1345 +-1374 +-1373 +-1337 +-1266 +-1165 +-1042 +-903 +-751 +-581 +-395 +-199 +3 +201 +391 +568 +728 +867 +982 +1082 +1162 +1224 +1271 +1298 +1308 +1292 +1249 +1182 +1086 +959 +808 +637 +447 +256 +65 +-124 +-310 +-492 +-659 +-810 +-939 +-1047 +-1141 +-1220 +-1284 +-1326 +-1344 +-1330 +-1282 +-1203 +-1096 +-970 +-826 +-667 +-492 +-305 +-114 +84 +275 +457 +623 +775 +901 +1006 +1093 +1164 +1222 +1263 +1290 +1293 +1273 +1229 +1153 +1042 +902 +737 +556 +365 +174 +-12 +-194 +-376 +-546 +-705 +-843 +-960 +-1064 +-1152 +-1227 +-1280 +-1312 +-1319 +-1293 +-1235 +-1148 +-1032 +-894 +-744 +-582 +-406 +-224 +-35 +157 +345 +522 +681 +816 +930 +1023 +1102 +1169 +1223 +1255 +1277 +1275 +1249 +1195 +1104 +978 +826 +651 +468 +283 +99 +-80 +-262 +-435 +-602 +-752 +-884 +-996 +-1091 +-1171 +-1236 +-1280 +-1304 +-1301 +-1264 +-1195 +-1095 +-968 +-828 +-675 +-511 +-335 +-153 +34 +230 +414 +581 +724 +846 +948 +1033 +1107 +1168 +1216 +1249 +1267 +1262 +1230 +1164 +1055 +912 +742 +562 +378 +197 +21 +-156 +-334 +-508 +-670 +-813 +-934 +-1039 +-1130 +-1206 +-1264 +-1305 +-1322 +-1306 +-1256 +-1168 +-1051 +-916 +-767 +-613 +-445 +-265 +-77 +116 +304 +482 +637 +771 +885 +980 +1062 +1134 +1191 +1235 +1266 +1280 +1270 +1225 +1137 +1004 +841 +663 +487 +309 +135 +-40 +-221 +-401 +-573 +-727 +-862 +-976 +-1075 +-1165 +-1235 +-1290 +-1323 +-1326 +-1296 +-1227 +-1127 +-1002 +-863 +-715 +-555 +-381 +-196 +1 +197 +383 +549 +692 +816 +919 +1007 +1088 +1157 +1214 +1258 +1287 +1294 +1265 +1198 +1082 +933 +767 +595 +424 +248 +75 +-105 +-291 +-470 +-633 +-778 +-904 +-1012 +-1107 +-1188 +-1256 +-1303 +-1322 +-1314 +-1268 +-1186 +-1074 +-943 +-796 +-646 +-478 +-297 +-104 +93 +286 +461 +615 +749 +862 +962 +1047 +1121 +1187 +1242 +1283 +1308 +1302 +1251 +1159 +1027 +870 +703 +537 +366 +189 +11 +-174 +-358 +-532 +-689 +-826 +-949 +-1060 +-1156 +-1236 +-1298 +-1335 +-1347 +-1324 +-1254 +-1151 +-1027 +-886 +-739 +-580 +-405 +-216 +-18 +180 +368 +534 +678 +805 +913 +1012 +1097 +1174 +1240 +1287 +1320 +1326 +1293 +1219 +1106 +960 +801 +634 +465 +288 +107 +-77 +-260 +-440 +-611 +-763 +-896 +-1015 +-1116 +-1203 +-1277 +-1329 +-1361 +-1360 +-1315 +-1233 +-1121 +-987 +-843 +-689 +-522 +-335 +-138 +64 +256 +431 +585 +718 +840 +950 +1048 +1136 +1216 +1279 +1323 +1344 +1331 +1281 +1189 +1058 +904 +735 +564 +386 +206 +25 +-160 +-344 +-522 +-687 +-835 +-965 +-1081 +-1183 +-1271 +-510 +-705 +-892 +-1058 +-1208 +-1320 +-1403 +-1432 +-1421 +-1408 +-1347 +-1249 +-1135 +-1023 +-907 +-780 +-645 +-489 +-316 +-133 +69 +268 +468 +649 +817 +975 +1110 +1220 +1305 +1357 +1378 +1383 +1350 +1279 +1197 +1107 +1014 +896 +760 +604 +412 +216 +19 +-188 +-382 +-590 +-780 +-964 +-1128 +-1252 +-1356 +-1424 +-1448 +-1436 +-1389 +-1310 +-1204 +-1086 +-969 +-859 +-722 +-589 +-427 +-240 +-50 +153 +338 +528 +706 +881 +1035 +1155 +1251 +1331 +1370 +1377 +1360 +1317 +1250 +1186 +1105 +986 +867 +717 +549 +351 +149 +-55 +-258 +-461 +-668 +-862 +-1039 +-1186 +-1304 +-1392 +-1441 +-1451 +-1434 +-1375 +-1276 +-1165 +-1065 +-962 +-838 +-697 +-543 +-365 +-177 +17 +225 +425 +617 +797 +956 +1102 +1215 +1292 +1348 +1366 +1363 +1341 +1300 +1240 +1174 +1081 +964 +818 +652 +451 +256 +55 +-145 +-350 +-567 +-757 +-936 +-1093 +-1230 +-1335 +-1412 +-1447 +-1424 +-1385 +-1323 +-1236 +-1138 +-1033 +-924 +-793 +-648 +-475 +-293 +-98 +99 +295 +501 +687 +857 +1004 +1124 +1217 +1293 +1338 +1354 +1342 +1327 +1302 +1259 +1177 +1068 +931 +770 +584 +379 +172 +-36 +-233 +-431 +-639 +-825 +-999 +-1147 +-1267 +-1356 +-1405 +-1420 +-1400 +-1365 +-1300 +-1220 +-1122 +-1016 +-888 +-737 +-579 +-407 +-217 +-21 +196 +413 +613 +784 +933 +1071 +1171 +1249 +1306 +1329 +1339 +1329 +1312 +1286 +1229 +1144 +1013 +861 +682 +493 +295 +98 +-93 +-294 +-499 +-706 +-897 +-1052 +-1190 +-1296 +-1369 +-1406 +-1408 +-1386 +-1355 +-1289 +-1199 +-1090 +-974 +-837 +-692 +-540 +-361 +-155 +62 +286 +489 +668 +837 +976 +1102 +1200 +1276 +1323 +1342 +1338 +1331 +1323 +1286 +1212 +1098 +948 +767 +586 +399 +214 +19 +-182 +-394 +-603 +-797 +-980 +-1134 +-1248 +-1335 +-1385 +-1413 +-1411 +-1383 +-1332 +-1248 +-1148 +-1035 +-908 +-770 +-620 +-457 +-257 +-40 +177 +385 +570 +735 +879 +1013 +1126 +1211 +1266 +1297 +1311 +1321 +1332 +1321 +1268 +1177 +1037 +870 +705 +527 +349 +155 +-42 +-254 +-473 +-675 +-865 +-1021 +-1156 +-1263 +-1332 +-1372 +-1392 +-1387 +-1357 +-1298 +-1219 +-1113 +-999 +-875 +-736 +-575 +-382 +-171 +55 +262 +459 +637 +790 +925 +1052 +1153 +1222 +1268 +1298 +1316 +1338 +1341 +1313 +1233 +1105 +955 +792 +626 +450 +266 +67 +-152 +-361 +-564 +-747 +-910 +-1055 +-1175 +-1262 +-1318 +-1348 +-1356 +-1348 +-1313 +-1251 +-1165 +-1068 +-955 +-825 +-664 +-492 +-298 +-82 +132 +333 +510 +673 +813 +946 +1062 +1145 +1210 +1257 +1293 +1326 +1349 +1333 +1277 +1178 +1043 +893 +737 +572 +388 +191 +-20 +-232 +-431 +-626 +-800 +-962 +-1099 +-1206 +-1279 +-1321 +-1350 +-1353 +-1339 +-1297 +-1228 +-1129 +-1014 +-890 +-748 +-579 +-390 +-184 +31 +232 +416 +576 +720 +849 +966 +1059 +1139 +1205 +1254 +1294 +1322 +1326 +1290 +1214 +1101 +971 +819 +659 +487 +293 +93 +-108 +-302 +-496 +-680 +-852 +-996 +-1111 +-1202 +-1260 +-1300 +-1327 +-1338 +-1318 +-1271 +-1188 +-1086 +-970 +-839 +-685 +-503 +-302 +-92 +112 +299 +466 +612 +744 +868 +977 +1076 +1153 +1217 +1269 +1306 +1328 +1323 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b3_246_942.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b3_246_942.samples new file mode 100644 index 00000000..2abc325d --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b3_246_942.samples @@ -0,0 +1,4096 @@ +63 +70 +76 +81 +87 +94 +100 +107 +112 +116 +122 +129 +137 +144 +150 +154 +157 +161 +166 +169 +171 +173 +175 +179 +182 +183 +186 +187 +185 +185 +183 +185 +186 +184 +182 +181 +177 +176 +175 +173 +170 +166 +164 +162 +158 +156 +150 +145 +141 +137 +135 +129 +126 +119 +111 +106 +102 +98 +93 +89 +82 +76 +70 +66 +60 +55 +51 +45 +38 +31 +25 +21 +16 +9 +4 +-1 +-5 +-11 +-16 +-20 +-27 +-33 +-37 +-44 +-48 +-52 +-57 +-61 +-67 +-72 +-78 +-81 +-87 +-91 +-96 +-102 +-106 +-110 +-112 +-117 +-123 +-131 +-138 +-142 +-145 +-147 +-152 +-155 +-158 +-163 +-167 +-170 +-172 +-174 +-177 +-180 +-181 +-185 +-185 +-188 +-189 +-188 +-188 +-188 +-187 +-184 +-185 +-184 +-180 +-177 +-173 +-173 +-171 +-164 +-158 +-153 +-147 +-142 +-138 +-131 +-125 +-120 +-114 +-111 +-105 +-98 +-90 +-83 +-77 +-72 +-68 +-64 +-58 +-53 +-47 +-43 +-41 +-39 +-35 +-31 +-26 +-20 +-21 +-17 +-11 +-10 +-5 +-1 +4 +7 +13 +20 +22 +27 +33 +39 +43 +48 +53 +62 +68 +73 +79 +84 +90 +98 +105 +113 +116 +122 +131 +140 +147 +151 +153 +156 +162 +167 +173 +177 +182 +185 +187 +189 +191 +193 +193 +193 +194 +193 +194 +193 +195 +194 +193 +192 +186 +185 +181 +180 +178 +173 +169 +161 +157 +152 +150 +145 +140 +136 +131 +127 +119 +115 +108 +101 +96 +92 +87 +84 +81 +74 +71 +68 +62 +57 +52 +46 +41 +36 +30 +25 +21 +14 +10 +5 +-1 +-5 +-11 +-18 +-22 +-28 +-33 +-40 +-47 +-53 +-58 +-64 +-69 +-76 +-84 +-89 +-95 +-98 +-103 +-107 +-115 +-120 +-125 +-132 +-137 +-143 +-148 +-152 +-156 +-159 +-163 +-165 +-170 +-172 +-178 +-182 +-185 +-189 +-187 +-190 +-191 +-193 +-194 +-192 +-193 +-192 +-194 +-193 +-192 +-193 +-191 +-186 +-184 +-181 +-178 +-177 +-172 +-168 +-160 +-157 +-153 +-149 +-142 +-136 +-131 +-126 +-123 +-115 +-110 +-105 +-99 +-95 +-89 +-83 +-76 +-70 +-65 +-62 +-59 +-55 +-51 +-45 +-42 +-35 +-33 +-30 +-27 +-23 +-17 +-9 +-6 +-5 +1 +3 +10 +19 +25 +30 +34 +37 +44 +51 +59 +64 +68 +74 +83 +90 +96 +103 +111 +115 +123 +131 +138 +146 +151 +155 +159 +166 +170 +174 +180 +185 +190 +193 +196 +198 +199 +200 +199 +200 +202 +201 +199 +199 +200 +198 +197 +196 +192 +189 +187 +185 +180 +176 +171 +169 +164 +160 +157 +153 +148 +143 +137 +133 +128 +121 +118 +113 +108 +101 +96 +92 +87 +81 +74 +70 +65 +59 +55 +46 +40 +36 +30 +25 +17 +10 +4 +0 +-5 +-11 +-14 +-22 +-30 +-36 +-41 +-47 +-53 +-60 +-66 +-71 +-78 +-84 +-90 +-93 +-100 +-106 +-111 +-115 +-124 +-127 +-134 +-141 +-146 +-150 +-153 +-158 +-160 +-165 +-169 +-173 +-177 +-179 +-182 +-186 +-191 +-193 +-194 +-195 +-194 +-196 +-197 +-199 +-198 +-199 +-198 +-199 +-196 +-194 +-195 +-190 +-189 +-186 +-179 +-175 +-171 +-166 +-160 +-157 +-154 +-148 +-139 +-132 +-126 +-120 +-115 +-108 +-102 +-98 +-94 +-90 +-84 +-73 +-68 +-62 +-58 +-56 +-50 +-45 +-39 +-35 +-32 +-28 +-26 +-18 +-17 +-13 +-10 +-3 +2 +3 +7 +11 +20 +28 +37 +44 +49 +51 +60 +65 +73 +81 +87 +93 +98 +105 +111 +118 +124 +127 +137 +143 +148 +154 +157 +159 +166 +172 +177 +180 +182 +184 +187 +192 +195 +196 +192 +191 +193 +196 +200 +199 +200 +195 +194 +194 +190 +188 +186 +180 +177 +175 +168 +165 +162 +158 +152 +147 +143 +137 +132 +126 +119 +113 +109 +107 +101 +96 +90 +86 +81 +74 +70 +65 +63 +58 +49 +44 +40 +34 +29 +23 +18 +10 +3 +-1 +-7 +-12 +-18 +-22 +-28 +-34 +-41 +-46 +-52 +-59 +-65 +-71 +-76 +-82 +-86 +-92 +-97 +-103 +-109 +-118 +-122 +-125 +-128 +-133 +-143 +-148 +-152 +-155 +-158 +-160 +-166 +-170 +-174 +-179 +-183 +-185 +-186 +-187 +-188 +-190 +-192 +-197 +-197 +-196 +-194 +-192 +-193 +-192 +-192 +-189 +-186 +-181 +-177 +-175 +-169 +-164 +-160 +-156 +-154 +-147 +-140 +-135 +-128 +-124 +-117 +-109 +-104 +-98 +-93 +-90 +-84 +-80 +-74 +-69 +-66 +-62 +-59 +-54 +-50 +-46 +-42 +-37 +-33 +-28 +-23 +-17 +-13 +-10 +-7 +-4 +7 +15 +21 +25 +27 +33 +40 +46 +54 +62 +67 +73 +78 +84 +89 +95 +103 +108 +113 +115 +123 +132 +138 +143 +148 +150 +153 +157 +163 +167 +170 +174 +175 +180 +181 +185 +188 +187 +188 +187 +189 +190 +188 +189 +190 +191 +187 +185 +183 +181 +178 +176 +172 +170 +168 +164 +159 +153 +150 +146 +141 +134 +129 +125 +117 +113 +108 +103 +98 +92 +88 +81 +74 +69 +63 +58 +52 +46 +41 +35 +32 +29 +25 +20 +13 +5 +-1 +-5 +-8 +-13 +-19 +-26 +-32 +-36 +-40 +-42 +-51 +-58 +-63 +-68 +-72 +-79 +-85 +-89 +-92 +-102 +-105 +-110 +-115 +-121 +-128 +-134 +-142 +-145 +-149 +-152 +-159 +-164 +-165 +-169 +-174 +-176 +-180 +-183 +-185 +-187 +-191 +-192 +-192 +-193 +-196 +-193 +-192 +-191 +-192 +-192 +-191 +-189 +-183 +-185 +-179 +-176 +-174 +-167 +-163 +-156 +-153 +-149 +-141 +-137 +-130 +-124 +-116 +-113 +-110 +-103 +-99 +-94 +-90 +-86 +-80 +-71 +-67 +-62 +-59 +-54 +-51 +-45 +-40 +-34 +-30 +-25 +-19 +-15 +-11 +-9 +-2 +1 +5 +11 +16 +20 +22 +27 +34 +40 +44 +50 +55 +62 +70 +78 +82 +87 +93 +97 +106 +116 +120 +125 +127 +133 +142 +148 +154 +156 +159 +163 +169 +175 +177 +179 +181 +184 +187 +190 +191 +190 +191 +193 +193 +196 +198 +194 +191 +189 +189 +185 +183 +180 +176 +175 +169 +165 +164 +159 +154 +151 +145 +140 +135 +128 +123 +119 +115 +109 +102 +97 +89 +83 +81 +75 +69 +63 +60 +58 +55 +47 +39 +33 +29 +25 +19 +14 +8 +3 +-2 +-8 +-12 +-15 +-20 +-30 +-35 +-40 +-43 +-48 +-55 +-60 +-69 +-74 +-78 +-80 +-85 +-94 +-100 +-104 +-109 +-116 +-121 +-125 +-131 +-138 +-144 +-149 +-153 +-155 +-160 +-167 +-170 +-175 +-177 +-183 +-185 +-186 +-189 +-191 +-193 +-195 +-196 +-197 +-198 +-196 +-196 +-192 +-195 +-192 +-188 +-185 +-182 +-179 +-175 +-173 +-170 +-164 +-159 +-153 +-149 +-144 +-138 +-131 +-126 +-119 +-113 +-110 +-102 +-98 +-91 +-87 +-82 +-78 +-71 +-68 +-65 +-61 +-55 +-52 +-52 +-45 +-44 +-39 +-36 +-27 +-25 +-22 +-14 +-11 +-4 +1 +5 +9 +15 +20 +28 +31 +38 +43 +49 +54 +59 +68 +73 +79 +86 +93 +101 +105 +112 +119 +124 +129 +139 +145 +149 +152 +158 +162 +167 +171 +175 +176 +180 +183 +185 +187 +189 +194 +193 +194 +195 +193 +195 +193 +191 +192 +191 +190 +185 +185 +176 +176 +173 +172 +168 +163 +163 +155 +149 +145 +141 +135 +133 +128 +123 +114 +110 +105 +100 +96 +91 +85 +80 +74 +68 +64 +58 +53 +47 +40 +38 +32 +27 +23 +18 +12 +6 +-2 +-7 +-13 +-18 +-24 +-29 +-35 +-41 +-45 +-50 +-56 +-60 +-66 +-71 +-77 +-84 +-90 +-95 +-103 +-109 +-114 +-119 +-123 +-129 +-134 +-141 +-147 +-154 +-157 +-158 +-164 +-169 +-172 +-179 +-182 +-188 +-193 +-189 +-192 +-194 +-197 +-202 +-200 +-203 +-198 +-201 +-201 +-196 +-197 +-193 +-192 +-188 +-186 +-184 +-179 +-172 +-170 +-165 +-161 +-158 +-151 +-144 +-136 +-131 +-128 +-121 +-117 +-111 +-103 +-97 +-91 +-87 +-84 +-81 +-76 +-72 +-67 +-62 +-59 +-50 +-45 +-42 +-38 +-39 +-33 +-24 +-20 +-18 +-14 +-11 +-6 +1 +6 +10 +16 +23 +31 +36 +40 +47 +54 +62 +64 +69 +74 +83 +93 +99 +106 +115 +120 +125 +128 +134 +145 +150 +158 +162 +163 +168 +171 +175 +178 +185 +190 +195 +198 +199 +198 +197 +201 +201 +201 +199 +197 +199 +198 +197 +195 +191 +192 +189 +187 +183 +180 +174 +174 +168 +165 +158 +155 +149 +141 +143 +132 +129 +120 +113 +106 +103 +101 +96 +90 +86 +77 +71 +69 +67 +58 +53 +45 +37 +37 +30 +26 +19 +15 +6 +1 +-5 +-13 +-16 +-24 +-28 +-32 +-42 +-46 +-51 +-57 +-65 +-71 +-72 +-85 +-90 +-93 +-97 +-107 +-111 +-115 +-123 +-128 +-133 +-137 +-146 +-151 +-159 +-161 +-168 +-170 +-173 +-176 +-179 +-183 +-189 +-190 +-194 +-197 +-199 +-203 +-204 +-207 +-206 +-205 +-205 +-207 +-205 +-204 +-200 +-199 +-200 +-193 +-192 +-187 +-184 +-182 +-177 +-170 +-162 +-160 +-153 +-147 +-143 +-137 +-132 +-126 +-121 +-110 +-103 +-99 +-95 +-89 +-83 +-79 +-75 +-65 +-58 +-54 +-52 +-46 +-41 +-38 +-30 +-27 +-24 +-17 +-11 +-10 +-6 +-2 +0 +10 +13 +16 +22 +29 +37 +36 +43 +52 +54 +62 +72 +78 +85 +90 +95 +106 +115 +118 +124 +136 +142 +146 +153 +159 +168 +171 +170 +174 +181 +187 +192 +194 +199 +202 +204 +208 +208 +203 +205 +205 +204 +203 +204 +207 +198 +198 +202 +197 +191 +186 +184 +179 +173 +168 +163 +160 +152 +154 +153 +145 +139 +132 +128 +123 +119 +111 +104 +98 +99 +93 +87 +78 +73 +68 +61 +57 +48 +43 +37 +31 +24 +19 +14 +6 +2 +-1 +-10 +-16 +-21 +-28 +-33 +-34 +-45 +-52 +-54 +-58 +-66 +-70 +-79 +-83 +-85 +-95 +-99 +-105 +-111 +-117 +-122 +-126 +-134 +-137 +-148 +-151 +-157 +-159 +-165 +-172 +-173 +-181 +-186 +-188 +-189 +-193 +-197 +-200 +-206 +-207 +-205 +-205 +-208 +-212 +-209 +-212 +-206 +-207 +-205 +-202 +-201 +-196 +-191 +-186 +-186 +-182 +-179 +-168 +-165 +-159 +-152 +-149 +-141 +-133 +-127 +-124 +-113 +-112 +-106 +-98 +-89 +-88 +-85 +-79 +-72 +-62 +-62 +-59 +-58 +-44 +-37 +-40 +-35 +-30 +-21 +-21 +-18 +-13 +-9 +-5 +0 +4 +11 +15 +22 +26 +31 +42 +42 +46 +57 +67 +72 +74 +82 +91 +102 +103 +112 +116 +122 +137 +143 +148 +150 +162 +166 +172 +174 +181 +184 +186 +191 +193 +197 +198 +202 +204 +207 +208 +211 +208 +211 +216 +213 +206 +207 +205 +205 +205 +202 +196 +193 +193 +186 +185 +182 +177 +175 +167 +163 +158 +151 +146 +140 +134 +127 +126 +118 +112 +111 +106 +98 +91 +83 +77 +71 +67 +62 +49 +50 +47 +38 +34 +26 +18 +19 +16 +5 +0 +-12 +-13 +-19 +-23 +-26 +-34 +-38 +-47 +-51 +-54 +-64 +-66 +-74 +-81 +-89 +-98 +-102 +-102 +-112 +-116 +-118 +-128 +-136 +-147 +-147 +-157 +-157 +-162 +-171 +-172 +-179 +-183 +-188 +-192 +-195 +-200 +-202 +-206 +-208 +-214 +-210 +-213 +-213 +-213 +-217 +-212 +-211 +-210 +-214 +-210 +-203 +-201 +-196 +-191 +-191 +-183 +-172 +-173 +-167 +-161 +-152 +-152 +-145 +-137 +-138 +-125 +-121 +-113 +-107 +-110 +-100 +-94 +-90 +-82 +-79 +-75 +-74 +-66 +-59 +-58 +-55 +-49 +-44 +-38 +-31 +-30 +-24 +-22 +-20 +-15 +-13 +0 +5 +7 +16 +19 +28 +33 +37 +47 +56 +57 +65 +71 +81 +89 +94 +98 +105 +117 +120 +128 +135 +148 +148 +154 +163 +167 +171 +176 +179 +186 +188 +191 +196 +200 +205 +198 +205 +206 +209 +210 +208 +211 +205 +211 +204 +205 +202 +197 +200 +193 +191 +192 +184 +180 +177 +174 +172 +163 +161 +155 +153 +147 +142 +137 +129 +123 +116 +110 +108 +99 +99 +91 +83 +79 +76 +68 +60 +58 +54 +46 +37 +38 +28 +29 +22 +11 +8 +4 +1 +-4 +-18 +-20 +-27 +-30 +-35 +-51 +-47 +-54 +-65 +-67 +-79 +-80 +-90 +-100 +-100 +-109 +-115 +-125 +-123 +-132 +-140 +-148 +-152 +-153 +-160 +-164 +-174 +-173 +-181 +-185 +-190 +-194 +-193 +-201 +-208 +-209 +-208 +-209 +-208 +-213 +-209 +-212 +-215 +-211 +-204 +-199 +-203 +-202 +-196 +-191 +-189 +-188 +-187 +-178 +-171 +-166 +-164 +-153 +-149 +-146 +-136 +-129 +-124 +-129 +-117 +-111 +-107 +-103 +-100 +-93 +-86 +-81 +-76 +-71 +-69 +-66 +-60 +-55 +-52 +-49 +-47 +-36 +-32 +-32 +-27 +-16 +-16 +-12 +-6 +-3 +6 +10 +14 +17 +32 +34 +38 +50 +56 +63 +65 +76 +86 +85 +96 +105 +109 +121 +122 +133 +144 +143 +150 +156 +168 +168 +173 +177 +182 +190 +189 +189 +193 +199 +202 +200 +196 +203 +203 +204 +203 +203 +198 +201 +203 +199 +191 +192 +185 +186 +180 +173 +176 +167 +163 +162 +155 +152 +150 +147 +147 +134 +133 +124 +123 +109 +103 +107 +99 +90 +87 +81 +80 +75 +65 +62 +58 +54 +48 +43 +33 +28 +28 +24 +14 +9 +0 +-6 +-8 +-12 +-17 +-23 +-29 +-33 +-36 +-48 +-49 +-54 +-64 +-65 +-75 +-81 +-83 +-92 +-97 +-105 +-115 +-117 +-119 +-124 +-135 +-148 +-144 +-145 +-155 +-158 +-167 +-176 +-174 +-176 +-184 +-185 +-189 +-186 +-196 +-199 +-200 +-201 +-203 +-200 +-199 +-203 +-204 +-197 +-195 +-196 +-196 +-184 +-179 +-176 +-174 +-169 +-160 +-166 +-156 +-153 +-146 +-135 +-140 +-129 +-121 +-113 +-111 +-106 +-95 +-93 +-91 +-87 +-80 +-76 +-72 +-67 +-65 +-56 +-60 +-48 +-50 +-43 +-38 +-44 +-29 +-30 +-28 +-21 +-17 +-7 +-7 +-1 +9 +3 +4 +13 +24 +34 +31 +38 +46 +53 +64 +67 +77 +86 +91 +96 +108 +111 +122 +130 +138 +144 +142 +157 +162 +161 +168 +170 +175 +178 +181 +186 +189 +190 +195 +195 +196 +195 +194 +200 +196 +192 +196 +194 +186 +190 +182 +183 +181 +177 +169 +164 +167 +160 +155 +151 +147 +142 +136 +133 +127 +118 +116 +113 +101 +100 +90 +89 +82 +77 +78 +63 +64 +58 +55 +48 +42 +45 +39 +32 +20 +22 +12 +11 +5 +-7 +-6 +-11 +-13 +-18 +-25 +-33 +-34 +-35 +-43 +-50 +-56 +-62 +-66 +-66 +-76 +-84 +-89 +-94 +-95 +-105 +-119 +-117 +-126 +-127 +-140 +-152 +-148 +-151 +-155 +-164 +-166 +-181 +-176 +-182 +-182 +-189 +-199 +-193 +-191 +-196 +-203 +-205 +-203 +-201 +-203 +-203 +-204 +-194 +-188 +-189 +-182 +-182 +-179 +-173 +-168 +-163 +-163 +-159 +-146 +-142 +-139 +-135 +-122 +-113 +-110 +-102 +-100 +-93 +-80 +-88 +-74 +-72 +-69 +-59 +-57 +-54 +-44 +-46 +-44 +-41 +-36 +-30 +-27 +-27 +-20 +-14 +-11 +-6 +0 +1 +1 +10 +7 +12 +20 +26 +31 +34 +46 +56 +55 +63 +70 +79 +88 +92 +98 +105 +112 +119 +134 +134 +139 +143 +147 +158 +165 +167 +172 +178 +181 +189 +194 +192 +187 +193 +203 +203 +196 +200 +203 +206 +206 +195 +199 +195 +201 +188 +187 +182 +177 +176 +172 +166 +161 +163 +150 +154 +137 +136 +126 +122 +128 +110 +114 +101 +87 +94 +86 +83 +67 +65 +68 +61 +55 +49 +50 +40 +35 +28 +23 +26 +10 +7 +8 +3 +0 +-9 +-10 +-12 +-21 +-22 +-26 +-38 +-37 +-36 +-44 +-61 +-64 +-70 +-66 +-78 +-95 +-90 +-98 +-95 +-107 +-118 +-122 +-129 +-129 +-143 +-145 +-153 +-162 +-161 +-170 +-165 +-175 +-182 +-187 +-194 +-190 +-197 +-203 +-204 +-202 +-211 +-208 +-206 +-201 +-206 +-206 +-194 +-202 +-201 +-194 +-197 +-189 +-180 +-187 +-182 +-181 +-160 +-163 +-154 +-159 +-145 +-132 +-126 +-125 +-121 +-107 +-105 +-96 +-96 +-79 +-84 +-79 +-70 +-64 +-61 +-57 +-51 +-48 +-37 +-39 +-37 +-28 +-27 +-18 +-19 +-13 +-21 +-8 +2 +4 +12 +7 +13 +16 +21 +25 +34 +34 +40 +50 +54 +61 +66 +73 +90 +92 +93 +92 +108 +118 +125 +124 +136 +146 +149 +164 +166 +172 +174 +181 +188 +185 +194 +199 +202 +203 +210 +214 +210 +218 +210 +215 +213 +217 +219 +214 +208 +205 +210 +203 +197 +187 +191 +188 +176 +174 +162 +161 +157 +156 +151 +140 +131 +129 +129 +120 +105 +99 +96 +93 +89 +82 +71 +74 +67 +59 +56 +49 +45 +38 +33 +38 +25 +23 +11 +12 +12 +-1 +-2 +-11 +-14 +-18 +-20 +-23 +-36 +-35 +-42 +-47 +-50 +-64 +-72 +-71 +-76 +-80 +-96 +-101 +-98 +-105 +-115 +-126 +-129 +-134 +-140 +-147 +-153 +-155 +-166 +-176 +-180 +-180 +-189 +-188 +-201 +-202 +-200 +-211 +-216 +-228 +-211 +-222 +-227 +-226 +-228 +-223 +-221 +-217 +-222 +-216 +-212 +-206 +-196 +-198 +-190 +-192 +-184 +-181 +-171 +-162 +-162 +-152 +-141 +-127 +-128 +-126 +-112 +-108 +-98 +-89 +-95 +-75 +-80 +-66 +-62 +-63 +-53 +-57 +-44 +-46 +-45 +-37 +-32 +-31 +-35 +-27 +-20 +-16 +-17 +-13 +-4 +-4 +0 +3 +14 +14 +22 +26 +30 +41 +45 +51 +56 +63 +75 +81 +81 +94 +98 +102 +113 +123 +136 +143 +143 +155 +156 +171 +175 +176 +186 +186 +196 +202 +198 +203 +210 +210 +208 +212 +217 +215 +214 +215 +216 +213 +216 +212 +204 +206 +200 +202 +190 +192 +190 +176 +177 +174 +169 +161 +153 +152 +143 +137 +132 +127 +123 +109 +106 +105 +88 +95 +89 +78 +78 +70 +69 +64 +53 +56 +51 +42 +36 +36 +21 +27 +19 +17 +12 +1 +2 +-2 +-6 +-16 +-19 +-18 +-29 +-37 +-39 +-44 +-54 +-57 +-57 +-72 +-72 +-89 +-79 +-92 +-98 +-99 +-116 +-116 +-124 +-129 +-143 +-153 +-157 +-162 +-160 +-164 +-177 +-183 +-182 +-189 +-195 +-203 +-201 +-205 +-212 +-212 +-219 +-219 +-212 +-212 +-218 +-215 +-211 +-209 +-206 +-207 +-207 +-198 +-195 +-191 +-185 +-181 +-171 +-169 +-170 +-152 +-149 +-141 +-141 +-131 +-119 +-117 +-109 +-100 +-95 +-95 +-84 +-77 +-82 +-62 +-65 +-64 +-57 +-53 +-47 +-50 +-46 +-40 +-35 +-42 +-34 +-27 +-22 +-26 +-20 +-15 +-11 +-1 +-10 +0 +7 +10 +7 +22 +31 +33 +39 +39 +49 +66 +68 +70 +84 +88 +99 +112 +115 +124 +122 +140 +147 +148 +155 +158 +170 +171 +187 +181 +190 +197 +193 +204 +199 +204 +208 +211 +206 +206 +207 +210 +212 +205 +203 +201 +193 +197 +201 +190 +186 +179 +176 +168 +168 +160 +147 +140 +143 +140 +132 +125 +112 +114 +108 +103 +100 +82 +82 +85 +76 +66 +60 +61 +59 +54 +43 +40 +41 +33 +29 +35 +24 +13 +18 +9 +14 +-3 +-8 +-9 +-13 +-15 +-16 +-28 +-34 +-36 +-37 +-49 +-49 +-61 +-74 +-70 +-86 +-79 +-90 +-91 +-102 +-106 +-113 +-124 +-131 +-130 +-139 +-148 +-152 +-156 +-163 +-164 +-171 +-181 +-177 +-191 +-191 +-198 +-192 +-201 +-205 +-200 +-201 +-208 +-209 +-197 +-198 +-204 +-200 +-197 +-186 +-197 +-185 +-178 +-178 +-174 +-175 +-157 +-154 +-150 +-143 +-134 +-121 +-120 +-120 +-103 +-99 +-97 +-89 +-84 +-79 +-68 +-68 +-60 +-55 +-56 +-61 +-37 +-39 +-37 +-32 +-37 +-33 +-34 +-28 +-20 +-18 +-19 +-18 +-12 +-12 +-3 +6 +-4 +5 +16 +15 +23 +24 +28 +33 +42 +51 +51 +64 +65 +70 +78 +90 +105 +104 +109 +116 +129 +137 +146 +145 +154 +162 +159 +170 +173 +180 +183 +180 +192 +194 +196 +197 +202 +198 +197 +195 +192 +198 +195 +194 +184 +190 +193 +178 +178 +165 +168 +171 +164 +155 +140 +143 +145 +135 +129 +119 +119 +117 +104 +95 +88 +83 +82 +76 +68 +64 +65 +56 +52 +45 +36 +47 +37 +28 +24 +23 +19 +12 +17 +2 +-1 +-1 +-5 +-7 +-23 +-20 +-17 +-29 +-30 +-39 +-39 +-43 +-54 +-56 +-61 +-62 +-68 +-80 +-80 +-85 +-95 +-95 +-101 +-98 +-114 +-124 +-128 +-126 +-134 +-148 +-143 +-154 +-158 +-165 +-168 +-174 +-172 +-177 +-183 +-186 +-191 +-189 +-200 +-195 +-194 +-191 +-203 +-202 +-195 +-189 +-185 +-194 +-184 +-183 +-177 +-171 +-165 +-156 +-156 +-150 +-138 +-137 +-126 +-124 +-116 +-105 +-97 +-89 +-85 +-73 +-68 +-63 +-67 +-56 +-50 +-46 +-39 +-38 +-41 +-35 +-27 +-34 +-23 +-20 +-23 +-22 +-15 +-13 +-13 +-9 +-16 +-5 +-2 +4 +4 +2 +11 +11 +26 +29 +30 +38 +48 +55 +62 +67 +75 +86 +85 +91 +104 +111 +116 +122 +122 +138 +145 +144 +151 +157 +166 +170 +164 +174 +183 +185 +191 +189 +188 +190 +195 +193 +192 +195 +192 +195 +194 +190 +189 +194 +189 +187 +180 +175 +176 +172 +167 +161 +159 +151 +146 +141 +137 +125 +119 +117 +110 +109 +95 +86 +80 +76 +73 +69 +62 +58 +50 +52 +38 +34 +35 +32 +27 +10 +19 +14 +6 +1 +-8 +-9 +-10 +-9 +-18 +-22 +-26 +-27 +-31 +-35 +-39 +-47 +-51 +-54 +-56 +-72 +-70 +-82 +-85 +-91 +-98 +-102 +-113 +-111 +-124 +-131 +-140 +-146 +-152 +-156 +-160 +-161 +-175 +-178 +-175 +-190 +-191 +-195 +-199 +-203 +-213 +-210 +-210 +-209 +-214 +-218 +-212 +-207 +-208 +-208 +-205 +-197 +-196 +-203 +-193 +-186 +-186 +-172 +-170 +-164 +-163 +-152 +-136 +-134 +-133 +-126 +-115 +-111 +-102 +-101 +-87 +-83 +-80 +-66 +-68 +-67 +-61 +-54 +-48 +-44 +-43 +-42 +-35 +-34 +-32 +-27 +-26 +-17 +-11 +-18 +-11 +-7 +-11 +3 +2 +2 +8 +11 +21 +23 +29 +32 +39 +45 +53 +61 +64 +75 +73 +84 +98 +104 +105 +123 +128 +134 +141 +150 +156 +156 +170 +174 +182 +186 +191 +195 +201 +205 +203 +210 +214 +208 +215 +213 +212 +219 +218 +212 +205 +208 +211 +206 +194 +189 +200 +186 +179 +176 +172 +177 +160 +154 +145 +143 +138 +131 +124 +114 +111 +105 +106 +96 +80 +77 +78 +74 +62 +63 +54 +51 +48 +44 +41 +34 +32 +24 +24 +23 +18 +12 +3 +0 +-5 +-2 +-5 +-19 +-22 +-19 +-17 +-35 +-41 +-46 +-44 +-55 +-63 +-73 +-77 +-78 +-84 +-91 +-110 +-108 +-112 +-123 +-127 +-139 +-144 +-151 +-150 +-152 +-170 +-176 +-177 +-184 +-190 +-194 +-198 +-203 +-206 +-207 +-217 +-214 +-214 +-217 +-215 +-214 +-219 +-219 +-214 +-208 +-203 +-197 +-195 +-194 +-179 +-184 +-181 +-166 +-155 +-156 +-152 +-141 +-132 +-129 +-120 +-110 +-106 +-95 +-92 +-86 +-87 +-74 +-71 +-65 +-64 +-62 +-50 +-53 +-49 +-43 +-39 +-40 +-36 +-32 +-30 +-26 +-24 +-22 +-18 +-16 +-10 +-10 +-4 +2 +6 +12 +18 +23 +20 +30 +34 +46 +55 +59 +58 +76 +82 +85 +100 +103 +112 +124 +129 +135 +140 +153 +160 +163 +165 +173 +176 +183 +187 +194 +194 +201 +206 +209 +212 +207 +214 +213 +210 +215 +209 +211 +215 +206 +209 +196 +196 +197 +189 +188 +185 +176 +168 +167 +161 +158 +150 +140 +138 +132 +125 +122 +110 +103 +102 +90 +95 +80 +75 +71 +69 +64 +51 +48 +43 +43 +38 +31 +26 +25 +23 +15 +9 +10 +4 +-6 +-9 +-12 +-16 +-22 +-22 +-34 +-31 +-39 +-47 +-52 +-52 +-59 +-72 +-73 +-76 +-91 +-93 +-96 +-105 +-112 +-117 +-127 +-128 +-142 +-146 +-152 +-162 +-169 +-173 +-178 +-182 +-190 +-189 +-200 +-207 +-201 +-211 +-215 +-218 +-220 +-222 +-220 +-216 +-219 +-216 +-212 +-218 +-215 +-210 +-205 +-196 +-192 +-193 +-189 +-178 +-171 +-166 +-157 +-155 +-146 +-143 +-133 +-122 +-119 +-111 +-99 +-98 +-83 +-86 +-79 +-71 +-66 +-63 +-63 +-53 +-47 +-47 +-45 +-42 +-42 +-37 +-35 +-31 +-32 +-26 +-22 +-20 +-21 +-15 +-11 +-4 +-4 +-2 +4 +9 +18 +18 +30 +30 +36 +46 +54 +60 +72 +75 +84 +93 +102 +105 +113 +125 +127 +139 +140 +149 +155 +163 +168 +172 +182 +187 +183 +191 +196 +206 +203 +206 +208 +207 +211 +201 +214 +213 +214 +210 +202 +209 +199 +199 +202 +191 +192 +185 +182 +176 +165 +169 +161 +159 +142 +138 +132 +128 +126 +118 +106 +103 +97 +92 +87 +79 +77 +74 +64 +58 +53 +50 +48 +42 +42 +36 +26 +27 +22 +19 +13 +11 +9 +9 +1 +-5 +-7 +-6 +-15 +-20 +-21 +-35 +-27 +-37 +-42 +-47 +-56 +-57 +-66 +-78 +-82 +-91 +-90 +-102 +-111 +-120 +-128 +-128 +-146 +-143 +-153 +-154 +-165 +-172 +-172 +-177 +-188 +-195 +-197 +-198 +-205 +-211 +-212 +-210 +-211 +-213 +-213 +-213 +-202 +-216 +-204 +-207 +-203 +-198 +-195 +-186 +-188 +-175 +-173 +-166 +-160 +-153 +-144 +-139 +-129 +-128 +-123 +-119 +-103 +-103 +-94 +-87 +-82 +-78 +-78 +-67 +-64 +-63 +-60 +-58 +-51 +-50 +-41 +-45 +-41 +-36 +-36 +-32 +-35 +-32 +-25 +-29 +-25 +-21 +-16 +-12 +-8 +-4 +3 +5 +16 +20 +25 +29 +36 +49 +52 +60 +66 +78 +81 +86 +100 +113 +118 +122 +131 +144 +153 +155 +160 +167 +171 +182 +182 +184 +194 +194 +200 +204 +207 +210 +210 +205 +207 +205 +202 +206 +204 +204 +196 +197 +195 +185 +188 +181 +178 +172 +167 +166 +162 +156 +148 +145 +138 +134 +131 +124 +118 +117 +104 +99 +98 +91 +90 +83 +78 +78 +67 +64 +57 +52 +51 +43 +37 +34 +34 +28 +21 +19 +19 +13 +10 +0 +-2 +-4 +-9 +-17 +-28 +-25 +-28 +-35 +-44 +-46 +-48 +-57 +-66 +-67 +-77 +-75 +-84 +-96 +-101 +-108 +-110 +-123 +-129 +-138 +-142 +-148 +-156 +-165 +-172 +-176 +-179 +-189 +-191 +-200 +-205 +-206 +-210 +-213 +-217 +-214 +-216 +-221 +-223 +-222 +-219 +-215 +-213 +-207 +-209 +-200 +-195 +-194 +-183 +-180 +-170 +-170 +-160 +-151 +-148 +-131 +-134 +-119 +-118 +-111 +-100 +-98 +-92 +-85 +-80 +-78 +-71 +-67 +-61 +-54 +-53 +-49 +-48 +-51 +-41 +-43 +-39 +-43 +-40 +-31 +-29 +-27 +-26 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b4_493_883.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b4_493_883.samples new file mode 100644 index 00000000..078bcb3c --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b4_493_883.samples @@ -0,0 +1,4096 @@ +352 +333 +315 +303 +294 +286 +281 +278 +282 +287 +297 +308 +317 +322 +324 +320 +309 +287 +260 +220 +170 +118 +58 +0 +-62 +-131 +-199 +-265 +-325 +-381 +-433 +-477 +-515 +-542 +-566 +-580 +-582 +-580 +-570 +-554 +-535 +-517 +-500 +-480 +-460 +-437 +-415 +-395 +-374 +-352 +-332 +-316 +-307 +-299 +-292 +-278 +-269 +-260 +-253 +-241 +-223 +-196 +-162 +-120 +-73 +-32 +12 +56 +103 +153 +203 +249 +292 +333 +372 +405 +437 +460 +474 +489 +494 +492 +484 +464 +447 +427 +412 +392 +378 +361 +346 +338 +325 +312 +303 +297 +296 +299 +304 +312 +317 +325 +332 +338 +338 +327 +307 +277 +242 +199 +149 +91 +29 +-37 +-101 +-167 +-231 +-295 +-360 +-416 +-464 +-504 +-532 +-553 +-575 +-584 +-585 +-578 +-564 +-552 +-536 +-522 +-507 +-483 +-459 +-439 +-418 +-397 +-378 +-358 +-340 +-326 +-316 +-306 +-297 +-289 +-279 +-268 +-252 +-236 +-208 +-174 +-134 +-92 +-51 +-3 +48 +99 +150 +197 +245 +291 +337 +380 +420 +449 +476 +493 +508 +518 +519 +510 +492 +476 +459 +440 +425 +409 +393 +381 +367 +356 +342 +332 +330 +326 +323 +329 +335 +344 +352 +362 +367 +364 +353 +337 +310 +275 +231 +180 +119 +55 +-9 +-75 +-143 +-208 +-277 +-343 +-400 +-452 +-498 +-536 +-569 +-590 +-603 +-609 +-602 +-592 +-580 +-570 +-555 +-537 +-518 +-498 +-477 +-456 +-436 +-415 +-396 +-382 +-366 +-355 +-342 +-334 +-327 +-315 +-303 +-287 +-267 +-244 +-209 +-172 +-130 +-82 +-30 +16 +66 +117 +169 +221 +272 +316 +362 +401 +435 +466 +494 +513 +519 +524 +517 +504 +493 +481 +464 +444 +429 +413 +399 +385 +372 +358 +344 +344 +341 +344 +344 +347 +358 +366 +376 +381 +379 +373 +358 +336 +302 +256 +202 +145 +80 +17 +-52 +-120 +-190 +-261 +-328 +-389 +-441 +-489 +-529 +-565 +-592 +-613 +-621 +-620 +-616 +-603 +-594 +-577 +-560 +-546 +-529 +-509 +-490 +-466 +-445 +-427 +-408 +-394 +-381 +-369 +-357 +-346 +-333 +-319 +-300 +-279 +-255 +-227 +-190 +-145 +-94 +-44 +6 +54 +103 +160 +215 +269 +317 +363 +405 +445 +482 +511 +534 +546 +549 +548 +539 +528 +516 +500 +482 +467 +454 +444 +431 +413 +398 +387 +378 +376 +373 +373 +374 +383 +391 +396 +399 +399 +398 +384 +361 +330 +289 +237 +180 +116 +52 +-16 +-93 +-162 +-234 +-306 +-371 +-432 +-482 +-532 +-569 +-602 +-621 +-633 +-640 +-636 +-627 +-617 +-606 +-594 +-582 +-567 +-551 +-526 +-506 +-485 +-469 +-453 +-435 +-420 +-409 +-398 +-385 +-374 +-359 +-344 +-325 +-300 +-268 +-227 +-183 +-134 +-82 +-33 +16 +71 +128 +188 +244 +296 +343 +388 +428 +464 +497 +522 +537 +544 +547 +542 +531 +520 +506 +493 +480 +465 +455 +443 +430 +417 +405 +397 +392 +391 +393 +397 +401 +411 +417 +420 +421 +418 +404 +385 +356 +315 +263 +206 +142 +74 +7 +-67 +-141 +-215 +-283 +-351 +-415 +-472 +-520 +-561 +-594 +-621 +-639 +-647 +-650 +-646 +-634 +-620 +-609 +-595 +-583 +-564 +-542 +-524 +-503 +-486 +-469 +-454 +-439 +-428 +-416 +-401 +-389 +-373 +-359 +-342 +-316 +-288 +-250 +-207 +-155 +-100 +-49 +6 +60 +117 +176 +231 +284 +333 +379 +426 +465 +500 +526 +545 +559 +567 +567 +560 +544 +530 +521 +510 +497 +481 +464 +452 +440 +430 +421 +413 +411 +411 +414 +423 +431 +435 +437 +438 +434 +426 +409 +380 +341 +291 +237 +172 +104 +37 +-37 +-113 +-187 +-260 +-329 +-398 +-459 +-512 +-554 +-590 +-618 +-639 +-651 +-657 +-654 +-640 +-631 +-616 +-604 +-590 +-571 +-556 +-535 +-517 +-500 +-482 +-463 +-449 +-436 +-424 +-414 +-400 +-385 +-366 +-348 +-330 +-301 +-268 +-227 +-178 +-128 +-76 +-20 +32 +91 +148 +205 +261 +311 +362 +407 +451 +486 +516 +538 +552 +559 +559 +555 +546 +531 +518 +502 +488 +475 +462 +452 +442 +431 +420 +412 +408 +404 +406 +408 +414 +423 +429 +429 +429 +420 +398 +372 +335 +292 +243 +183 +117 +46 +-26 +-96 +-168 +-242 +-315 +-382 +-444 +-494 +-540 +-579 +-614 +-636 +-651 +-652 +-648 +-640 +-631 +-625 +-612 +-594 +-575 +-559 +-541 +-522 +-502 +-485 +-467 +-451 +-437 +-423 +-412 +-395 +-382 +-365 +-352 +-329 +-302 +-270 +-229 +-185 +-135 +-81 +-23 +31 +87 +142 +200 +255 +309 +363 +409 +449 +484 +514 +540 +557 +564 +566 +559 +551 +541 +528 +517 +500 +489 +479 +469 +461 +450 +436 +426 +421 +421 +420 +419 +421 +427 +431 +433 +429 +419 +405 +382 +352 +308 +254 +191 +128 +61 +-8 +-79 +-156 +-231 +-302 +-370 +-433 +-485 +-534 +-576 +-613 +-640 +-652 +-660 +-662 +-656 +-651 +-639 +-626 +-612 +-597 +-579 +-559 +-539 +-518 +-501 +-483 +-466 +-451 +-434 +-423 +-409 +-396 +-384 +-365 +-341 +-314 +-286 +-250 +-207 +-156 +-99 +-43 +8 +62 +118 +176 +236 +292 +339 +382 +428 +467 +506 +533 +556 +565 +568 +568 +563 +555 +541 +524 +511 +495 +486 +476 +459 +446 +431 +421 +415 +413 +411 +411 +416 +423 +428 +433 +430 +426 +412 +387 +359 +319 +267 +207 +141 +74 +3 +-70 +-144 +-217 +-290 +-358 +-424 +-483 +-534 +-575 +-612 +-640 +-660 +-671 +-676 +-669 +-655 +-643 +-629 +-619 +-604 +-587 +-570 +-544 +-521 +-503 +-485 +-472 +-457 +-441 +-424 +-410 +-396 +-381 +-365 +-343 +-316 +-282 +-247 +-204 +-153 +-96 +-42 +13 +66 +124 +186 +244 +298 +351 +399 +447 +491 +526 +552 +574 +587 +596 +602 +593 +582 +567 +552 +539 +527 +512 +500 +484 +471 +463 +450 +448 +439 +433 +435 +436 +443 +449 +448 +445 +433 +423 +405 +373 +334 +280 +224 +161 +95 +22 +-54 +-129 +-205 +-281 +-350 +-417 +-478 +-531 +-577 +-614 +-645 +-669 +-683 +-688 +-683 +-675 +-668 +-655 +-644 +-629 +-616 +-598 +-576 +-559 +-539 +-522 +-501 +-486 +-470 +-454 +-439 +-426 +-406 +-386 +-367 +-343 +-313 +-278 +-235 +-184 +-132 +-75 +-19 +37 +96 +155 +216 +271 +322 +379 +427 +474 +510 +540 +566 +583 +597 +603 +599 +589 +577 +565 +550 +535 +520 +508 +496 +481 +473 +460 +452 +444 +437 +435 +438 +444 +445 +445 +445 +438 +427 +411 +384 +349 +299 +246 +182 +117 +47 +-31 +-109 +-186 +-262 +-336 +-405 +-471 +-523 +-574 +-618 +-649 +-675 +-692 +-698 +-702 +-696 +-687 +-677 +-661 +-650 +-630 +-614 +-593 +-571 +-550 +-532 +-510 +-492 +-476 +-460 +-445 +-427 +-412 +-394 +-373 +-347 +-320 +-283 +-242 +-197 +-143 +-87 +-28 +33 +91 +152 +214 +272 +336 +391 +443 +490 +529 +565 +592 +618 +633 +638 +635 +629 +623 +610 +595 +579 +563 +547 +544 +528 +512 +499 +485 +479 +475 +475 +475 +473 +478 +479 +482 +478 +469 +450 +420 +384 +337 +285 +220 +153 +77 +-4 +-81 +-157 +-237 +-317 +-392 +-460 +-519 +-575 +-620 +-659 +-688 +-709 +-723 +-727 +-722 +-716 +-706 +-696 +-684 +-664 +-650 +-631 +-612 +-595 +-577 +-556 +-535 +-519 +-504 +-485 +-467 +-452 +-437 +-418 +-391 +-360 +-328 +-285 +-243 +-187 +-125 +-67 +-8 +53 +114 +178 +243 +300 +359 +412 +461 +503 +541 +576 +598 +614 +620 +622 +619 +614 +603 +588 +573 +557 +548 +535 +522 +509 +500 +488 +476 +471 +464 +461 +461 +463 +468 +468 +464 +457 +438 +413 +378 +341 +285 +220 +152 +75 +0 +-78 +-157 +-239 +-320 +-396 +-465 +-528 +-581 +-629 +-669 +-702 +-724 +-738 +-746 +-745 +-737 +-729 +-717 +-704 +-688 +-673 +-655 +-634 +-610 +-587 +-570 +-549 +-531 +-513 +-493 +-475 +-458 +-439 +-417 +-389 +-359 +-323 +-284 +-234 +-179 +-116 +-54 +5 +68 +133 +200 +267 +327 +388 +439 +491 +539 +579 +618 +641 +663 +675 +677 +676 +666 +655 +643 +630 +615 +600 +586 +571 +556 +544 +536 +528 +523 +517 +512 +509 +512 +520 +520 +512 +501 +481 +463 +432 +387 +334 +267 +195 +122 +43 +-31 +-113 +-197 +-280 +-359 +-430 +-498 +-556 +-611 +-655 +-690 +-717 +-734 +-745 +-749 +-744 +-737 +-726 +-717 +-704 +-689 +-673 +-655 +-634 +-610 +-589 +-571 +-553 +-537 +-520 +-499 +-486 +-469 +-451 +-426 +-396 +-363 +-326 +-283 +-228 +-169 +-103 +-38 +22 +88 +152 +217 +283 +342 +401 +457 +505 +549 +588 +617 +641 +656 +662 +663 +656 +648 +636 +626 +614 +594 +582 +567 +550 +539 +525 +512 +505 +498 +496 +493 +498 +500 +495 +489 +478 +469 +448 +420 +379 +328 +266 +199 +125 +48 +-31 +-117 +-199 +-282 +-360 +-434 +-509 +-571 +-626 +-671 +-709 +-737 +-760 +-774 +-777 +-773 +-763 +-759 +-751 +-739 +-720 +-700 +-677 +-657 +-642 +-621 +-599 +-575 +-556 +-536 +-518 +-503 +-479 +-457 +-432 +-407 +-376 +-340 +-295 +-240 +-183 +-122 +-58 +3 +69 +141 +209 +273 +336 +394 +453 +505 +557 +596 +631 +656 +672 +689 +691 +692 +678 +667 +654 +645 +636 +620 +607 +592 +580 +568 +554 +542 +535 +532 +529 +527 +531 +529 +529 +525 +514 +495 +465 +424 +375 +316 +251 +181 +100 +24 +-62 +-144 +-225 +-304 +-384 +-458 +-524 +-583 +-630 +-673 +-707 +-733 +-750 +-754 +-758 +-754 +-745 +-736 +-727 +-712 +-694 +-677 +-656 +-635 +-617 +-601 +-578 +-558 +-541 +-522 +-504 +-483 +-459 +-442 +-416 +-387 +-349 +-304 +-253 +-194 +-136 +-75 +-13 +50 +119 +187 +250 +312 +370 +429 +479 +529 +569 +603 +633 +655 +667 +673 +664 +658 +645 +633 +621 +605 +589 +579 +564 +551 +538 +524 +518 +506 +503 +501 +494 +493 +496 +498 +492 +480 +463 +439 +404 +356 +304 +236 +164 +86 +10 +-73 +-153 +-235 +-320 +-397 +-473 +-539 +-601 +-649 +-696 +-735 +-760 +-782 +-786 +-788 +-785 +-777 +-766 +-753 +-738 +-719 +-705 +-684 +-664 +-639 +-615 +-599 +-578 +-563 +-538 +-517 +-497 +-479 +-461 +-436 +-406 +-365 +-321 +-268 +-216 +-159 +-95 +-32 +39 +105 +168 +240 +305 +371 +432 +484 +533 +579 +617 +648 +669 +684 +695 +689 +685 +675 +662 +651 +634 +621 +606 +595 +585 +573 +559 +545 +536 +533 +528 +522 +523 +524 +525 +523 +511 +498 +481 +448 +409 +357 +295 +226 +151 +72 +-5 +-90 +-178 +-261 +-340 +-417 +-487 +-546 +-601 +-646 +-688 +-720 +-737 +-747 +-752 +-750 +-741 +-732 +-718 +-707 +-689 +-671 +-649 +-628 +-607 +-587 +-570 +-552 +-532 +-508 +-490 +-474 +-457 +-440 +-418 +-386 +-353 +-317 +-269 +-218 +-157 +-96 +-33 +31 +93 +159 +226 +294 +353 +414 +465 +511 +559 +599 +631 +653 +669 +679 +677 +672 +660 +650 +635 +620 +609 +595 +582 +570 +552 +537 +524 +517 +515 +508 +502 +499 +499 +498 +494 +484 +474 +453 +425 +388 +337 +274 +206 +135 +61 +-16 +-98 +-182 +-267 +-346 +-422 +-493 +-556 +-612 +-660 +-700 +-731 +-749 +-765 +-772 +-770 +-766 +-757 +-748 +-737 +-723 +-704 +-684 +-659 +-636 +-620 +-598 +-578 +-559 +-537 +-520 +-503 +-486 +-467 +-446 +-416 +-385 +-348 +-304 +-253 +-195 +-134 +-71 +-8 +52 +115 +181 +248 +312 +368 +421 +474 +522 +561 +594 +620 +642 +651 +655 +649 +636 +623 +614 +606 +591 +571 +558 +544 +534 +523 +511 +502 +495 +489 +485 +485 +488 +491 +487 +482 +473 +459 +436 +400 +354 +295 +235 +169 +97 +21 +-59 +-140 +-219 +-294 +-367 +-440 +-506 +-563 +-613 +-651 +-680 +-703 +-721 +-724 +-723 +-713 +-709 +-700 +-686 +-670 +-650 +-632 +-613 +-589 +-569 +-550 +-532 +-510 +-491 +-477 +-461 +-446 +-430 +-407 +-384 +-361 +-329 +-289 +-238 +-183 +-126 +-72 +-12 +46 +109 +172 +235 +298 +356 +409 +462 +509 +549 +583 +603 +624 +634 +639 +636 +626 +611 +601 +589 +571 +558 +542 +529 +519 +505 +492 +483 +476 +468 +465 +467 +469 +469 +469 +468 +461 +450 +433 +399 +358 +305 +248 +183 +112 +38 +-40 +-122 +-202 +-276 +-348 +-419 +-486 +-540 +-592 +-631 +-663 +-691 +-707 +-718 +-716 +-704 +-694 +-683 +-672 +-658 +-634 +-619 +-600 +-583 +-565 +-542 +-523 +-508 +-492 +-476 +-463 +-445 +-431 +-415 +-396 +-373 +-347 +-310 +-268 +-217 +-163 +-105 +-44 +10 +70 +127 +189 +250 +308 +361 +411 +453 +496 +532 +562 +586 +592 +598 +599 +588 +580 +566 +550 +537 +522 +509 +498 +488 +476 +462 +448 +441 +443 +443 +445 +445 +446 +453 +455 +451 +443 +427 +399 +362 +312 +262 +202 +136 +64 +-7 +-77 +-149 +-224 +-301 +-370 +-434 +-488 +-534 +-575 +-611 +-638 +-654 +-662 +-658 +-650 +-641 +-631 +-622 +-608 +-589 +-571 +-552 +-534 +-512 +-495 +-479 +-462 +-447 +-435 +-421 +-401 +-389 +-375 +-361 +-342 +-314 +-279 +-243 +-199 +-146 +-97 +-41 +12 +71 +127 +187 +244 +299 +354 +403 +448 +484 +518 +544 +566 +581 +587 +585 +578 +570 +558 +545 +532 +520 +508 +494 +485 +471 +457 +446 +433 +431 +428 +425 +427 +429 +436 +439 +439 +434 +418 +397 +367 +330 +283 +224 +157 +91 +19 +-48 +-120 +-195 +-270 +-340 +-400 +-456 +-503 +-550 +-588 +-615 +-636 +-641 +-641 +-644 +-634 +-625 +-615 +-604 +-589 +-572 +-554 +-537 +-519 +-499 +-482 +-468 +-450 +-439 +-425 +-413 +-402 +-389 +-376 +-352 +-329 +-300 +-270 +-231 +-186 +-131 +-77 +-27 +25 +75 +130 +188 +247 +301 +348 +391 +428 +462 +494 +516 +532 +533 +531 +527 +520 +509 +494 +477 +463 +454 +441 +430 +419 +408 +395 +390 +387 +386 +389 +393 +401 +405 +411 +411 +408 +397 +382 +359 +323 +277 +223 +167 +105 +38 +-30 +-100 +-172 +-240 +-306 +-366 +-421 +-474 +-517 +-551 +-580 +-597 +-611 +-618 +-614 +-610 +-596 +-583 +-567 +-552 +-538 +-522 +-505 +-485 +-466 +-449 +-432 +-418 +-403 +-387 +-379 +-366 +-358 +-344 +-326 +-305 +-277 +-251 +-216 +-173 +-119 +-68 +-15 +33 +85 +134 +189 +243 +295 +341 +382 +421 +455 +483 +507 +523 +533 +535 +530 +519 +507 +494 +480 +470 +454 +444 +428 +416 +401 +389 +379 +374 +371 +369 +375 +381 +388 +393 +393 +393 +385 +371 +355 +324 +281 +232 +176 +118 +54 +-12 +-81 +-154 +-224 +-292 +-353 +-409 +-465 +-509 +-546 +-573 +-594 +-608 +-615 +-613 +-609 +-602 +-591 +-579 +-566 +-552 +-534 +-519 +-502 +-484 +-465 +-449 +-433 +-421 +-411 +-399 +-389 +-375 +-360 +-342 +-323 +-302 +-276 +-245 +-203 +-154 +-102 +-55 +-10 +40 +92 +147 +202 +252 +296 +337 +376 +410 +443 +467 +487 +501 +503 +501 +491 +480 +468 +457 +447 +433 +422 +409 +400 +389 +381 +371 +367 +369 +370 +372 +377 +387 +394 +401 +401 +399 +394 +378 +350 +314 +271 +222 +165 +103 +40 +-27 +-95 +-156 +-221 +-280 +-340 +-394 +-439 +-479 +-506 +-531 +-547 +-556 +-553 +-547 +-539 +-526 +-515 +-502 +-490 +-471 +-455 +-436 +-420 +-407 +-385 +-369 +-359 +-348 +-338 +-327 +-314 +-303 +-290 +-279 +-262 +-237 +-203 +-160 +-117 +-75 +-27 +21 +74 +121 +170 +218 +263 +312 +355 +393 +430 +463 +484 +501 +511 +516 +516 +504 +491 +474 +459 +445 +431 +418 +406 +397 +385 +373 +363 +358 +353 +354 +356 +360 +366 +372 +380 +383 +382 +373 +353 +330 +296 +258 +208 +145 +81 +15 +-48 +-113 +-178 +-245 +-311 +-373 +-427 +-474 +-511 +-546 +-576 +-597 +-608 +-608 +-604 +-597 +-588 +-576 +-563 +-546 +-531 +-516 +-496 +-480 +-459 +-442 +-428 +-411 +-402 +-390 +-381 +-371 +-360 +-348 +-334 +-318 +-294 +-266 +-230 +-188 +-143 +-95 +-47 +-1 +48 +97 +146 +197 +248 +294 +335 +373 +408 +436 +458 +472 +481 +480 +475 +467 +454 +445 +431 +419 +405 +398 +389 +379 +368 +354 +349 +347 +347 +350 +352 +359 +371 +380 +388 +387 +380 +370 +350 +325 +287 +238 +186 +124 +62 +2 +-59 +-126 +-193 +-259 +-321 +-375 +-422 +-463 +-499 +-526 +-548 +-559 +-559 +-554 +-548 +-537 +-526 +-512 +-494 +-480 +-462 +-445 +-429 +-407 +-391 +-376 +-361 +-351 +-339 +-326 +-316 +-305 +-296 +-285 +-268 +-249 +-222 +-191 +-153 +-108 +-59 +-14 +37 +82 +131 +184 +236 +283 +328 +367 +401 +436 +464 +489 +503 +512 +510 +500 +494 +483 +472 +458 +442 +429 +417 +405 +391 +380 +369 +362 +353 +353 +353 +354 +361 +366 +375 +377 +378 +373 +361 +343 +316 +281 +234 +183 +123 +65 +4 +-61 +-131 +-199 +-263 +-323 +-375 +-431 +-476 +-511 +-542 +-564 +-577 +-584 +-583 +-579 +-570 +-557 +-542 +-530 +-518 +-506 +-489 +-470 +-452 +-433 +-421 +-413 +-400 +-389 +-377 +-366 +-358 +-345 +-333 +-317 +-301 +-277 +-247 +-212 +-164 +-119 +-75 +-27 +19 +69 +117 +168 +217 +259 +299 +338 +379 +407 +433 +446 +454 +458 +457 +453 +444 +430 +414 +402 +388 +377 +367 +354 +344 +337 +332 +329 +327 +327 +329 +335 +344 +355 +362 +370 +368 +359 +348 +326 +295 +256 +207 +153 +97 +39 +-23 +-89 +-156 +-217 +-275 +-329 +-379 +-425 +-459 +-491 +-513 +-529 +-538 +-540 +-534 +-526 +-515 +-504 +-488 +-477 +-463 +-441 +-425 +-407 +-390 +-375 +-361 +-347 +-333 +-321 +-313 +-306 +-297 +-286 +-275 +-258 +-237 +-210 +-178 +-136 +-90 +-49 +-7 +37 +84 +136 +184 +230 +273 +315 +357 +392 +424 +446 +461 +476 +484 +485 +477 +465 +449 +438 +425 +412 +400 +387 +378 +367 +359 +351 +347 +341 +343 +345 +350 +358 +363 +372 +377 +377 +373 +367 +349 +321 +284 +237 +190 +138 +77 +15 +-49 +-114 +-175 +-236 +-296 +-347 +-394 +-432 +-463 +-491 +-508 +-518 +-521 +-518 +-509 +-499 +-489 +-476 +-463 +-448 +-434 +-417 +-403 +-385 +-371 +-355 +-343 +-338 +-328 +-324 +-319 +-313 +-303 +-294 +-281 +-263 +-237 +-203 +-172 +-130 +-89 +-47 +-7 +37 +83 +128 +169 +209 +253 +293 +329 +359 +381 +402 +416 +425 +424 +416 +401 +385 +371 +360 +348 +332 +320 +311 +302 +295 +288 +279 +278 +283 +283 +289 +296 +306 +315 +326 +332 +331 +324 +307 +284 +251 +213 +165 +114 +58 +0 +-57 +-117 +-178 +-238 +-294 +-345 +-388 +-427 +-456 +-484 +-506 +-516 +-518 +-510 +-502 +-490 +-478 +-466 +-449 +-436 +-416 +-399 +-381 +-366 +-353 +-333 +-322 +-309 +-303 +-297 +-292 +-290 +-279 +-273 +-264 +-246 +-222 +-195 +-161 +-122 +-81 +-38 +4 +47 +91 +134 +176 +216 +260 +298 +332 +362 +386 +412 +425 +434 +432 +427 +414 +401 +389 +372 +358 +342 +331 +320 +312 +305 +293 +285 +286 +288 +291 +294 +299 +311 +322 +334 +340 +341 +337 +324 +304 +278 +245 +202 +148 +91 +37 +-16 +-73 +-132 +-194 +-251 +-301 +-346 +-379 +-414 +-443 +-464 +-475 +-479 +-477 +-472 +-466 +-456 +-444 +-427 +-415 +-399 +-383 +-368 +-351 +-338 +-321 +-310 +-300 +-291 +-287 +-283 +-277 +-271 +-264 +-256 +-240 +-221 +-198 +-171 +-136 +-99 +-60 +-19 +18 +60 +101 +145 +185 +227 +261 +292 +322 +343 +366 +383 +390 +391 +385 +376 +361 +348 +336 +321 +307 +296 +284 +275 +268 +255 +250 +246 +246 +248 +253 +263 +275 +287 +297 +304 +308 +309 +301 +290 +267 +232 +189 +141 +91 +43 +-9 +-68 +-125 +-183 +-235 +-283 +-327 +-367 +-399 +-428 +-448 +-461 +-464 +-464 +-460 +-449 +-436 +-422 +-408 +-393 +-380 +-363 +-346 +-330 +-313 +-301 +-288 +-279 +-269 +-262 +-254 +-249 +-246 +-240 +-231 +-218 +-202 +-185 +-160 +-125 +-89 +-47 +-9 +26 +63 +107 +153 +192 +231 +264 +293 +321 +348 +370 +386 +395 +395 +393 +386 +376 +362 +349 +333 +321 +308 +298 +290 +277 +268 +260 +257 +257 +258 +262 +270 +280 +291 +302 +313 +322 +325 +320 +311 +286 +253 +216 +173 +125 +74 +21 +-31 +-90 +-145 +-198 +-248 +-293 +-336 +-371 +-397 +-421 +-436 +-444 +-446 +-439 +-434 +-421 +-409 +-395 +-383 +-369 +-357 +-340 +-322 +-311 +-296 +-286 +-275 +-265 +-261 +-259 +-257 +-252 +-247 +-239 +-232 +-218 +-203 +-179 +-146 +-112 +-76 +-45 +-10 +28 +69 +109 +149 +181 +217 +251 +284 +312 +334 +347 +355 +355 +353 +346 +333 +319 +303 +293 +279 +271 +257 +246 +238 +231 +223 +216 +216 +218 +221 +227 +237 +250 +265 +274 +283 +287 +290 +280 +260 +235 +201 +167 +123 +72 +20 +-33 +-85 +-137 +-189 +-241 +-286 +-327 +-362 +-390 +-410 +-427 +-436 +-440 +-438 +-424 +-412 +-404 +-396 +-381 +-365 +-347 +-330 +-315 +-301 +-287 +-275 +-259 +-251 +-242 +-238 +-237 +-230 +-225 +-221 +-217 +-208 +-191 +-168 +-138 +-104 +-70 +-33 +4 +39 +79 +118 +155 +192 +229 +265 +297 +324 +345 +365 +378 +384 +386 +381 +365 +349 +337 +320 +307 +292 +279 +269 +254 +247 +240 +235 +234 +235 +239 +247 +257 +266 +281 +293 +304 +308 +303 +295 +283 +261 +231 +193 +145 +95 +44 +-7 +-60 +-112 +-165 +-220 +-271 +-318 +-351 +-377 +-400 +-421 +-433 +-435 +-432 +-422 +-412 +-398 +-389 +-378 +-363 +-346 +-331 +-318 +-308 +-297 +-286 +-275 +-267 +-259 +-256 +-253 +-251 +-248 +-242 +-236 +-228 +-211 +-193 +-168 +-135 +-100 +-62 +-26 +13 +51 +87 +128 +169 +205 +241 +269 +297 +320 +337 +353 +360 +362 +355 +342 +327 +314 +301 +288 +274 +259 +248 +241 +235 +229 +220 +217 +221 +225 +235 +238 +252 +264 +279 +291 +294 +296 +289 +273 +253 +225 +186 +146 +97 +47 +-2 +-51 +-104 +-161 +-215 +-263 +-305 +-341 +-372 +-393 +-416 +-430 +-436 +-432 +-426 +-415 +-406 +-398 +-383 +-369 +-352 +-340 +-323 +-309 +-295 +-279 +-266 +-261 +-252 +-246 +-243 +-240 +-236 +-233 +-229 +-217 +-203 +-185 +-164 +-133 +-95 +-56 +-21 +15 +51 +88 +128 +168 +208 +245 +276 +301 +325 +349 +368 +380 +381 +377 +369 +358 +346 +333 +319 +304 +289 +274 +266 +259 +249 +244 +238 +242 +248 +249 +255 +265 +280 +292 +306 +311 +312 +308 +300 +283 +259 +222 +179 +131 +82 +33 +-22 +-76 +-134 +-188 +-237 +-277 +-315 +-350 +-380 +-403 +-420 +-423 +-426 +-424 +-413 +-405 +-392 +-379 +-367 +-350 +-338 +-323 +-309 +-295 +-282 +-272 +-262 +-254 +-247 +-244 +-241 +-239 +-239 +-228 +-223 +-211 +-198 +-181 +-153 +-118 +-77 +-45 +-9 +24 +63 +103 +143 +186 +216 +248 +279 +304 +328 +348 +357 +360 +356 +350 +337 +323 +311 +293 +276 +265 +255 +248 +235 +227 +222 +217 +217 +217 +217 +222 +233 +250 +266 +278 +287 +291 +289 +285 +270 +248 +213 +173 +129 +77 +28 +-28 +-80 +-132 +-187 +-234 +-279 +-325 +-360 +-391 +-413 +-425 +-434 +-440 +-438 +-431 +-419 +-403 +-390 +-377 +-364 +-348 +-331 +-316 +-300 +-288 +-276 +-264 +-255 +-252 +-246 +-248 +-242 +-238 +-234 +-229 +-224 +-210 +-192 +-164 +-131 +-95 +-62 +-27 +9 +52 +96 +137 +177 +213 +245 +277 +306 +329 +346 +355 +358 +360 +356 +345 +330 +313 +301 +285 +275 +259 +247 +238 +228 +220 +215 +212 +211 +216 +227 +239 +251 +266 +276 +291 +300 +303 +301 +286 +264 +232 +197 +157 +107 +59 +4 +-50 +-102 +-154 +-207 +-254 +-300 +-334 +-362 +-385 +-400 +-416 +-423 +-422 +-408 +-394 +-381 +-368 +-357 +-343 +-329 +-312 +-296 +-283 +-269 +-262 +-247 +-241 +-234 +-230 +-231 +-230 +-226 +-225 +-223 +-215 +-205 +-187 +-160 +-130 +-96 +-61 +-24 +15 +56 +98 +133 +172 +206 +240 +272 +298 +322 +340 +352 +356 +360 +357 +345 +328 +310 +296 +282 +264 +251 +240 +230 +223 +214 +206 +203 +204 +209 +216 +224 +241 +253 +270 +282 +293 +299 +294 +283 +264 +237 +204 +161 +111 +63 +10 +-44 +-93 +-145 +-199 +-249 +-291 +-326 +-355 +-380 +-401 +-418 +-423 +-423 +-413 +-399 +-388 +-377 +-366 +-352 +-334 +-319 +-306 +-293 +-279 +-265 +-252 +-246 +-240 +-238 +-235 +-234 +-233 +-227 +-227 +-222 +-213 +-197 +-174 +-145 +-111 +-79 +-42 +-5 +29 +66 +106 +144 +185 +218 +251 +281 +304 +322 +337 +344 +347 +344 +333 +320 +302 +288 +273 +261 +247 +237 +230 +221 +215 +205 +200 +202 +209 +215 +223 +232 +244 +260 +279 +289 +297 +297 +288 +272 +252 +220 +181 +137 +87 +34 +-17 +-65 +-119 +-173 +-222 +-265 +-301 +-331 +-362 +-384 +-400 +-411 +-407 +-400 +-389 +-377 +-366 +-349 +-333 +-316 +-302 +-286 +-273 +-259 +-244 +-235 +-226 +-219 +-217 +-213 +-212 +-214 +-214 +-215 +-214 +-206 +-193 +-173 +-147 +-116 +-81 +-45 +-9 +27 +62 +99 +139 +180 +216 +248 +273 +298 +322 +340 +353 +356 +354 +345 +332 +312 +296 +281 +264 +248 +233 +221 +211 +204 +196 +195 +195 +197 +205 +209 +220 +232 +249 +268 +280 +286 +287 +281 +271 +253 +222 +185 +138 +92 +46 +-3 +-54 +-108 +-161 +-213 +-252 +-293 +-326 +-356 +-380 +-396 +-406 +-404 +-404 +-395 +-385 +-371 +-353 +-337 +-322 +-310 +-299 +-284 +-271 +-255 +-241 +-231 +-224 +-220 +-218 +-219 +-218 +-218 +-216 +-216 +-209 +-200 +-185 +-161 +-132 +-96 +-61 +-25 +6 +38 +77 +119 +158 +191 +220 +246 +273 +301 +324 +333 +337 +334 +328 +320 +304 +289 +273 +255 +242 +228 +219 +209 +197 +189 +184 +182 +184 +187 +192 +202 +219 +234 +251 +261 +271 +273 +270 +265 +250 +222 +189 +147 +105 +60 +12 +-38 +-90 +-143 +-196 +-239 +-280 +-316 +-345 +-371 +-388 +-396 +-398 +-398 +-390 +-380 +-367 +-350 +-334 +-316 +-300 +-285 +-270 +-257 +-243 +-231 +-222 +-217 +-212 +-210 +-210 +-212 +-210 +-204 +-205 +-198 +-194 +-181 +-163 +-134 +-98 +-68 +-35 +-2 +36 +76 +118 +156 +191 +222 +252 +283 +305 +324 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b5_987_767.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b5_987_767.samples new file mode 100644 index 00000000..e6a6dc87 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/tone_b5_987_767.samples @@ -0,0 +1,4096 @@ +-665 +-573 +-560 +-573 +-576 +-592 +-585 +-479 +-306 +-132 +54 +281 +494 +670 +821 +973 +1123 +1280 +1408 +1434 +1308 +1086 +832 +573 +375 +276 +268 +246 +190 +133 +27 +-83 +-188 +-318 +-480 +-540 +-557 +-657 +-759 +-824 +-913 +-1013 +-988 +-872 +-765 +-624 +-544 +-569 +-579 +-563 +-586 +-574 +-425 +-253 +-91 +128 +376 +568 +715 +878 +1038 +1184 +1329 +1432 +1407 +1241 +988 +739 +519 +356 +265 +225 +212 +176 +101 +-10 +-118 +-250 +-400 +-482 +-538 +-579 +-685 +-792 +-865 +-962 +-1027 +-965 +-845 +-715 +-604 +-568 +-581 +-557 +-551 +-598 +-528 +-377 +-197 +-1 +226 +445 +615 +764 +918 +1071 +1226 +1374 +1429 +1342 +1150 +918 +681 +454 +306 +254 +212 +181 +159 +42 +-59 +-172 +-322 +-450 +-493 +-522 +-615 +-743 +-817 +-885 +-1005 +-1008 +-915 +-810 +-688 +-568 +-575 +-581 +-549 +-572 +-608 +-513 +-314 +-139 +71 +316 +513 +647 +835 +988 +1130 +1280 +1410 +1403 +1269 +1062 +835 +603 +380 +264 +235 +210 +187 +159 +35 +-130 +-203 +-338 +-473 +-506 +-545 +-669 +-800 +-863 +-945 +-1021 +-983 +-882 +-798 +-637 +-545 +-556 +-564 +-553 +-608 +-593 +-438 +-254 +-69 +171 +411 +574 +715 +900 +1064 +1195 +1344 +1413 +1366 +1211 +996 +740 +517 +330 +225 +213 +223 +195 +94 +-10 +-154 +-269 +-366 +-460 +-520 +-592 +-722 +-816 +-882 +-967 +-1021 +-957 +-838 +-734 +-601 +-544 +-545 +-545 +-574 +-612 +-548 +-377 +-164 +46 +260 +458 +631 +797 +968 +1115 +1251 +1369 +1426 +1332 +1168 +941 +678 +441 +266 +222 +216 +204 +149 +43 +-89 +-188 +-307 +-409 +-480 +-543 +-631 +-752 +-836 +-904 +-982 +-993 +-918 +-818 +-681 +-546 +-518 +-546 +-555 +-591 +-596 +-472 +-281 +-81 +114 +333 +523 +663 +835 +1016 +1157 +1288 +1394 +1394 +1297 +1095 +834 +564 +359 +255 +221 +209 +213 +129 +-14 +-111 +-211 +-349 +-437 +-494 +-597 +-708 +-769 +-843 +-940 +-999 +-984 +-884 +-760 +-624 +-558 +-532 +-548 +-600 +-637 +-588 +-417 +-228 +-45 +150 +380 +561 +721 +894 +1071 +1194 +1317 +1411 +1392 +1231 +994 +717 +461 +296 +225 +226 +206 +172 +68 +-52 +-154 +-262 +-380 +-482 +-544 +-633 +-749 +-823 +-878 +-959 +-1023 +-974 +-855 +-721 +-571 +-532 +-559 +-576 +-599 +-619 +-527 +-344 +-168 +13 +223 +433 +617 +781 +947 +1108 +1237 +1360 +1420 +1335 +1140 +881 +599 +373 +253 +205 +208 +197 +129 +31 +-63 +-176 +-298 +-407 +-515 +-591 +-681 +-759 +-830 +-909 +-1006 +-1018 +-925 +-801 +-654 +-549 +-550 +-581 +-594 +-620 +-590 +-454 +-290 +-117 +91 +323 +512 +699 +868 +1003 +1157 +1300 +1408 +1427 +1293 +1058 +782 +533 +333 +244 +234 +220 +170 +94 +-2 +-105 +-206 +-349 +-463 +-533 +-599 +-684 +-780 +-831 +-920 +-1023 +-983 +-863 +-729 +-594 +-537 +-563 +-573 +-564 +-595 +-541 +-388 +-214 +-35 +178 +404 +595 +775 +926 +1056 +1214 +1378 +1448 +1395 +1224 +978 +714 +468 +317 +263 +251 +221 +159 +76 +-10 +-106 +-260 +-385 +-466 +-540 +-615 +-713 +-792 +-877 +-983 +-1021 +-955 +-813 +-666 +-561 +-540 +-559 +-557 +-562 +-569 +-499 +-339 +-169 +29 +269 +482 +645 +816 +969 +1108 +1277 +1420 +1446 +1335 +1126 +864 +614 +418 +289 +244 +227 +201 +136 +42 +-67 +-172 +-305 +-442 +-509 +-566 +-644 +-740 +-836 +-945 +-1012 +-1005 +-916 +-791 +-652 +-571 +-571 +-575 +-575 +-599 +-579 +-483 +-321 +-116 +106 +338 +539 +700 +860 +1026 +1182 +1326 +1420 +1397 +1253 +1025 +764 +528 +349 +257 +230 +203 +167 +95 +-12 +-121 +-263 +-382 +-481 +-549 +-598 +-697 +-804 +-900 +-993 +-1047 +-991 +-881 +-758 +-640 +-579 +-567 +-565 +-580 +-609 +-564 +-426 +-246 +-34 +188 +407 +584 +746 +912 +1072 +1233 +1363 +1416 +1342 +1163 +928 +678 +459 +303 +232 +204 +198 +160 +67 +-44 +-167 +-302 +-416 +-491 +-550 +-637 +-755 +-846 +-929 +-1015 +-1028 +-963 +-849 +-712 +-600 +-561 +-558 +-557 +-580 +-589 +-511 +-350 +-144 +74 +293 +483 +653 +823 +993 +1157 +1304 +1408 +1423 +1318 +1123 +884 +626 +413 +295 +252 +243 +220 +160 +65 +-61 +-195 +-320 +-420 +-487 +-559 +-669 +-778 +-872 +-952 +-1011 +-984 +-895 +-788 +-659 +-553 +-526 +-539 +-554 +-587 +-568 +-434 +-248 +-46 +172 +383 +559 +731 +900 +1069 +1223 +1363 +1441 +1413 +1277 +1066 +805 +553 +364 +265 +250 +255 +218 +131 +16 +-107 +-224 +-352 +-445 +-523 +-621 +-732 +-832 +-911 +-978 +-1008 +-966 +-867 +-733 +-600 +-528 +-517 +-538 +-581 +-605 +-535 +-380 +-189 +15 +216 +417 +597 +769 +945 +1098 +1250 +1369 +1419 +1364 +1203 +958 +679 +442 +283 +225 +217 +217 +173 +66 +-47 +-172 +-284 +-378 +-477 +-573 +-686 +-792 +-874 +-951 +-1019 +-1029 +-974 +-854 +-705 +-576 +-533 +-547 +-588 +-620 +-604 +-505 +-330 +-140 +62 +269 +456 +640 +821 +986 +1141 +1280 +1391 +1421 +1325 +1126 +852 +564 +350 +237 +208 +211 +184 +110 +4 +-113 +-218 +-324 +-426 +-529 +-630 +-727 +-823 +-900 +-980 +-1043 +-1038 +-944 +-806 +-653 +-556 +-540 +-573 +-606 +-622 +-574 +-436 +-258 +-64 +136 +342 +537 +720 +885 +1038 +1185 +1323 +1416 +1409 +1276 +1036 +744 +472 +309 +245 +240 +236 +184 +85 +-28 +-124 +-228 +-346 +-457 +-558 +-650 +-736 +-818 +-902 +-985 +-1028 +-990 +-872 +-712 +-571 +-512 +-524 +-560 +-583 +-570 +-487 +-339 +-166 +20 +233 +444 +634 +803 +958 +1103 +1255 +1395 +1459 +1400 +1211 +932 +637 +420 +308 +270 +266 +250 +184 +78 +-26 +-131 +-246 +-369 +-481 +-572 +-654 +-736 +-824 +-916 +-1003 +-1024 +-944 +-801 +-650 +-543 +-521 +-545 +-573 +-589 +-559 +-455 +-302 +-131 +73 +300 +509 +691 +849 +998 +1153 +1316 +1435 +1455 +1333 +1095 +807 +543 +368 +287 +262 +251 +206 +123 +34 +-76 +-197 +-326 +-447 +-542 +-618 +-697 +-783 +-882 +-984 +-1048 +-1022 +-906 +-759 +-626 +-551 +-550 +-567 +-579 +-583 +-534 +-425 +-266 +-69 +151 +376 +560 +721 +881 +1040 +1212 +1368 +1459 +1418 +1237 +973 +696 +472 +327 +261 +236 +217 +172 +82 +-25 +-136 +-259 +-396 +-506 +-582 +-646 +-736 +-833 +-942 +-1032 +-1062 +-1002 +-876 +-740 +-619 +-574 +-574 +-578 +-590 +-589 +-518 +-379 +-202 +16 +246 +448 +618 +775 +933 +1106 +1281 +1406 +1444 +1346 +1137 +880 +622 +419 +291 +238 +220 +197 +140 +53 +-61 +-179 +-313 +-432 +-517 +-585 +-668 +-767 +-872 +-969 +-1034 +-1024 +-929 +-808 +-677 +-577 +-541 +-548 +-563 +-585 +-572 +-479 +-316 +-106 +116 +331 +521 +683 +848 +1026 +1197 +1347 +1441 +1432 +1298 +1077 +812 +567 +379 +277 +241 +228 +209 +140 +35 +-85 +-215 +-342 +-436 +-509 +-596 +-696 +-805 +-905 +-987 +-1028 +-991 +-885 +-750 +-621 +-535 +-506 +-528 +-563 +-583 +-542 +-415 +-232 +-15 +211 +417 +592 +751 +921 +1101 +1259 +1390 +1449 +1404 +1249 +1011 +746 +505 +336 +248 +227 +219 +185 +93 +-27 +-143 +-265 +-366 +-449 +-533 +-636 +-749 +-859 +-956 +-1036 +-1052 +-997 +-877 +-728 +-594 +-531 +-523 +-543 +-585 +-595 +-521 +-368 +-165 +51 +267 +459 +632 +809 +984 +1150 +1297 +1408 +1436 +1355 +1174 +913 +641 +413 +284 +237 +229 +215 +155 +49 +-71 +-190 +-307 +-415 +-500 +-578 +-689 +-804 +-904 +-1001 +-1064 +-1048 +-967 +-838 +-685 +-562 +-524 +-535 +-572 +-613 +-597 +-474 +-302 +-109 +117 +335 +519 +691 +867 +1035 +1192 +1333 +1422 +1423 +1310 +1092 +810 +540 +344 +245 +236 +233 +203 +119 +-4 +-126 +-244 +-358 +-451 +-547 +-652 +-748 +-848 +-935 +-1019 +-1071 +-1038 +-923 +-784 +-635 +-541 +-525 +-563 +-614 +-630 +-568 +-427 +-238 +-32 +182 +394 +583 +757 +933 +1098 +1257 +1390 +1457 +1417 +1255 +997 +702 +448 +288 +237 +240 +243 +194 +89 +-30 +-160 +-274 +-385 +-479 +-583 +-690 +-782 +-867 +-949 +-1027 +-1057 +-1004 +-877 +-722 +-589 +-533 +-541 +-580 +-620 +-610 +-514 +-344 +-144 +60 +272 +479 +665 +837 +1001 +1167 +1320 +1441 +1480 +1394 +1195 +902 +601 +376 +258 +238 +245 +231 +163 +54 +-61 +-175 +-288 +-408 +-516 +-621 +-718 +-807 +-894 +-991 +-1063 +-1060 +-973 +-834 +-666 +-560 +-540 +-569 +-607 +-635 +-599 +-471 +-289 +-91 +123 +342 +539 +721 +892 +1061 +1222 +1376 +1485 +1480 +1342 +1084 +776 +500 +317 +251 +245 +240 +211 +123 +12 +-95 +-217 +-354 +-460 +-564 +-678 +-763 +-847 +-948 +-1039 +-1081 +-1048 +-926 +-754 +-602 +-537 +-536 +-569 +-615 +-616 +-541 +-408 +-236 +-35 +185 +412 +612 +791 +945 +1105 +1283 +1436 +1504 +1453 +1251 +958 +665 +433 +298 +256 +257 +232 +170 +89 +-11 +-135 +-259 +-402 +-518 +-600 +-678 +-773 +-865 +-969 +-1075 +-1104 +-1020 +-873 +-718 +-586 +-555 +-580 +-600 +-617 +-600 +-514 +-359 +-177 +39 +281 +509 +693 +857 +1014 +1180 +1350 +1487 +1510 +1387 +1152 +856 +581 +383 +285 +253 +248 +219 +146 +43 +-59 +-194 +-336 +-455 +-560 +-629 +-704 +-796 +-906 +-1020 +-1099 +-1079 +-959 +-801 +-659 +-572 +-565 +-582 +-596 +-605 +-581 +-475 +-297 +-83 +149 +385 +588 +766 +929 +1095 +1277 +1441 +1530 +1486 +1305 +1047 +766 +514 +348 +272 +242 +233 +210 +142 +32 +-89 +-233 +-369 +-466 +-540 +-624 +-737 +-855 +-977 +-1078 +-1115 +-1047 +-916 +-766 +-630 +-557 +-551 +-561 +-582 +-605 +-552 +-423 +-243 +-21 +219 +442 +616 +788 +973 +1159 +1345 +1481 +1520 +1430 +1222 +958 +691 +466 +313 +244 +226 +225 +193 +104 +-18 +-163 +-306 +-418 +-507 +-576 +-678 +-799 +-929 +-1038 +-1107 +-1106 +-1013 +-878 +-738 +-614 +-562 +-551 +-568 +-604 +-609 +-534 +-371 +-155 +82 +310 +512 +686 +856 +1045 +1233 +1394 +1498 +1493 +1366 +1146 +874 +606 +389 +273 +242 +235 +226 +170 +52 +-71 +-222 +-355 +-441 +-521 +-623 +-742 +-863 +-976 +-1063 +-1106 +-1067 +-962 +-823 +-682 +-575 +-541 +-555 +-595 +-633 +-602 +-477 +-280 +-58 +173 +388 +573 +755 +938 +1117 +1291 +1434 +1498 +1458 +1300 +1065 +785 +513 +323 +245 +235 +247 +220 +128 +18 +-106 +-243 +-359 +-448 +-538 +-665 +-795 +-906 +-996 +-1067 +-1088 +-1039 +-918 +-766 +-624 +-536 +-524 +-550 +-610 +-633 +-567 +-404 +-193 +19 +234 +446 +642 +828 +1011 +1188 +1351 +1477 +1518 +1445 +1266 +1002 +698 +434 +278 +228 +240 +251 +207 +101 +-35 +-152 +-258 +-378 +-485 +-587 +-715 +-838 +-926 +-1013 +-1094 +-1103 +-1026 +-897 +-724 +-578 +-526 +-533 +-572 +-627 +-621 +-499 +-316 +-108 +117 +319 +511 +703 +887 +1069 +1245 +1389 +1492 +1516 +1412 +1184 +880 +577 +346 +240 +225 +244 +235 +158 +37 +-80 +-210 +-328 +-424 +-542 +-658 +-774 +-877 +-961 +-1042 +-1097 +-1089 +-984 +-820 +-648 +-539 +-519 +-557 +-610 +-635 +-580 +-436 +-246 +-51 +161 +387 +580 +769 +949 +1114 +1277 +1428 +1520 +1498 +1342 +1077 +760 +477 +303 +241 +250 +264 +228 +128 +6 +-102 +-228 +-367 +-498 +-604 +-723 +-822 +-893 +-979 +-1081 +-1117 +-1060 +-939 +-754 +-591 +-525 +-549 +-594 +-626 +-620 +-524 +-361 +-173 +28 +259 +472 +672 +854 +1016 +1165 +1324 +1475 +1543 +1459 +1249 +943 +620 +375 +252 +241 +262 +258 +190 +79 +-22 +-133 +-275 +-408 +-538 +-637 +-731 +-820 +-916 +-1012 +-1105 +-1119 +-1028 +-854 +-669 +-549 +-525 +-565 +-608 +-626 +-589 +-479 +-317 +-128 +86 +323 +543 +731 +903 +1054 +1219 +1396 +1530 +1553 +1414 +1156 +840 +556 +373 +285 +267 +270 +237 +160 +47 +-67 +-192 +-346 +-484 +-578 +-671 +-764 +-852 +-960 +-1076 +-1140 +-1100 +-966 +-795 +-640 +-557 +-570 +-594 +-613 +-621 +-571 +-448 +-276 +-74 +172 +421 +624 +788 +954 +1115 +1287 +1458 +1549 +1500 +1306 +1020 +722 +471 +323 +265 +248 +238 +206 +123 +16 +-110 +-272 +-424 +-535 +-608 +-684 +-783 +-892 +-1015 +-1123 +-1146 +-1056 +-902 +-735 +-614 +-568 +-570 +-583 +-607 +-619 +-560 +-426 +-230 +12 +271 +496 +674 +843 +1010 +1191 +1385 +1529 +1559 +1449 +1214 +919 +634 +421 +292 +243 +239 +225 +181 +88 +-34 +-184 +-342 +-473 +-557 +-631 +-717 +-832 +-959 +-1076 +-1149 +-1127 +-1012 +-852 +-694 +-588 +-567 +-568 +-579 +-608 +-600 +-511 +-350 +-127 +131 +378 +577 +738 +903 +1081 +1273 +1449 +1549 +1522 +1356 +1105 +823 +563 +367 +259 +229 +242 +238 +171 +49 +-87 +-246 +-387 +-490 +-558 +-635 +-755 +-886 +-1009 +-1104 +-1138 +-1080 +-959 +-806 +-657 +-564 +-544 +-565 +-600 +-638 +-603 +-476 +-275 +-27 +226 +456 +633 +802 +986 +1187 +1365 +1510 +1572 +1500 +1314 +1052 +758 +494 +311 +227 +211 +230 +216 +123 +-24 +-170 +-306 +-419 +-496 +-579 +-685 +-818 +-945 +-1053 +-1132 +-1136 +-1051 +-925 +-771 +-625 +-549 +-543 +-581 +-644 +-663 +-582 +-409 +-178 +61 +296 +500 +667 +858 +1061 +1255 +1420 +1535 +1551 +1447 +1240 +956 +657 +409 +258 +219 +231 +244 +197 +64 +-86 +-219 +-350 +-442 +-519 +-620 +-755 +-886 +-999 +-1098 +-1154 +-1134 +-1038 +-883 +-712 +-588 +-543 +-551 +-599 +-652 +-642 +-513 +-312 +-83 +151 +376 +565 +754 +958 +1151 +1334 +1491 +1578 +1557 +1421 +1170 +862 +561 +339 +235 +226 +246 +232 +145 +6 +-125 +-252 +-374 +-459 +-553 +-675 +-808 +-925 +-1027 +-1106 +-1143 +-1098 +-986 +-818 +-647 +-555 +-546 +-597 +-657 +-677 +-605 +-442 +-230 +0 +230 +452 +651 +848 +1044 +1230 +1401 +1543 +1613 +1564 +1376 +1087 +762 +466 +296 +242 +256 +269 +220 +97 +-39 +-160 +-281 +-402 +-516 +-632 +-757 +-878 +-978 +-1066 +-1143 +-1171 +-1097 +-942 +-757 +-607 +-562 +-590 +-644 +-690 +-683 +-560 +-368 +-144 +82 +317 +539 +751 +957 +1142 +1311 +1467 +1599 +1636 +1529 +1291 +960 +631 +381 +259 +241 +262 +246 +153 +32 +-89 +-215 +-327 +-444 +-570 +-691 +-797 +-904 +-1005 +-1098 +-1186 +-1184 +-1065 +-897 +-716 +-592 +-576 +-630 +-685 +-707 +-658 +-513 +-325 +-122 +122 +379 +610 +825 +1021 +1201 +1377 +1536 +1646 +1643 +1479 +1187 +831 +524 +328 +255 +259 +266 +219 +112 +-8 +-139 +-265 +-392 +-543 +-650 +-750 +-851 +-945 +-1051 +-1162 +-1226 +-1171 +-1015 +-825 +-658 +-584 +-599 +-645 +-683 +-676 +-596 +-444 +-257 +-32 +227 +490 +722 +914 +1094 +1275 +1453 +1625 +1714 +1634 +1393 +1059 +711 +451 +317 +281 +277 +271 +218 +105 +-15 +-135 +-289 +-449 +-569 +-671 +-769 +-857 +-966 +-1101 +-1214 +-1232 +-1127 +-956 +-763 +-632 +-608 +-633 +-660 +-672 +-649 +-551 +-392 +-195 +60 +353 +614 +819 +1000 +1182 +1378 +1570 +1714 +1735 +1582 +1283 +938 +613 +397 +298 +279 +275 +238 +165 +68 +-54 +-219 +-389 +-534 +-642 +-723 +-805 +-914 +-1035 +-1163 +-1242 +-1207 +-1061 +-881 +-723 +-634 +-622 +-649 +-668 +-684 +-657 +-543 +-357 +-110 +165 +445 +681 +872 +1047 +1229 +1435 +1635 +1735 +1675 +1458 +1146 +811 +521 +333 +271 +254 +237 +221 +150 +23 +-125 +-298 +-467 +-588 +-664 +-749 +-862 +-990 +-1122 +-1238 +-1272 +-1188 +-1026 +-851 +-708 +-644 +-642 +-650 +-682 +-702 +-653 +-508 +-283 +-13 +281 +538 +733 +910 +1106 +1329 +1545 +1709 +1749 +1631 +1383 +1073 +758 +495 +319 +244 +239 +240 +193 +94 +-33 +-192 +-355 +-492 +-588 +-668 +-769 +-915 +-1066 +-1188 +-1275 +-1263 +-1144 +-978 +-805 +-681 +-619 +-614 +-645 +-689 +-698 +-609 +-422 +-165 +112 +389 +615 +807 +1014 +1235 +1460 +1642 +1758 +1743 +1584 +1320 +992 +680 +434 +299 +255 +266 +266 +208 +81 +-78 +-239 +-393 +-518 +-602 +-699 +-842 +-991 +-1129 +-1239 +-1285 +-1222 +-1086 +-923 +-756 +-634 +-597 +-609 +-671 +-726 +-690 +-541 +-313 +-44 +224 +475 +699 +905 +1122 +1335 +1530 +1690 +1755 +1696 +1504 +1214 +871 +563 +343 +256 +255 +263 +251 +157 +6 +-150 +-300 +-437 +-528 +-641 +-775 +-928 +-1075 +-1187 +-1265 +-1274 +-1198 +-1048 +-857 +-680 +-597 +-596 +-652 +-713 +-742 +-650 +-476 +-244 +22 +278 +521 +739 +961 +1178 +1386 +1580 +1712 +1757 +1661 +1429 +1104 +760 +468 +300 +251 +264 +269 +206 +81 +-78 +-232 +-367 +-471 +-580 +-709 +-853 +-982 +-1094 +-1197 +-1262 +-1254 +-1151 +-986 +-794 +-653 +-614 +-642 +-701 +-756 +-738 +-603 +-392 +-146 +114 +378 +620 +845 +1064 +1273 +1469 +1652 +1779 +1781 +1631 +1348 +994 +633 +385 +277 +272 +287 +268 +173 +20 +-108 +-246 +-378 +-504 +-629 +-761 +-896 +-1013 +-1124 +-1219 +-1278 +-1232 +-1103 +-919 +-723 +-618 +-615 +-658 +-714 +-743 +-674 +-505 +-278 +-28 +225 +476 +701 +916 +1132 +1333 +1529 +1705 +1810 +1770 +1561 +1230 +852 +531 +332 +274 +281 +283 +240 +119 +-14 +-140 +-282 +-423 +-551 +-681 +-817 +-941 +-1046 +-1149 +-1253 +-1288 +-1206 +-1040 +-844 +-676 +-617 +-645 +-702 +-758 +-760 +-639 +-450 +-234 +17 +292 +544 +774 +995 +1198 +1397 +1597 +1756 +1810 +1700 +1433 +1067 +704 +425 +283 +262 +280 +258 +177 +60 +-57 +-196 +-350 +-492 +-630 +-755 +-868 +-982 +-1091 +-1199 +-1292 +-1289 +-1165 +-967 +-775 +-651 +-624 +-665 +-721 +-749 +-711 +-586 +-381 +-140 +112 +383 +633 +861 +1069 +1262 +1465 +1656 +1797 +1794 +1610 +1296 +924 +590 +375 +299 +288 +272 +233 +151 +22 +-108 +-253 +-406 +-551 +-667 +-768 +-875 +-990 +-1110 +-1233 +-1298 +-1236 +-1082 +-890 +-712 +-628 +-640 +-679 +-713 +-725 +-651 +-503 +-307 +-58 +222 +502 +741 +945 +1142 +1344 +1545 +1729 +1811 +1733 +1493 +1150 +797 +520 +365 +304 +299 +283 +225 +127 +6 +-137 +-308 +-465 +-589 +-689 +-790 +-893 +-1016 +-1146 +-1253 +-1272 +-1178 +-1000 +-813 +-684 +-646 +-649 +-672 +-709 +-704 +-623 +-463 +-244 +23 +314 +577 +803 +997 +1192 +1398 +1606 +1766 +1789 +1648 +1368 +1019 +698 +463 +339 +302 +292 +269 +199 +85 +-48 +-208 +-387 +-535 +-637 +-729 +-828 +-953 +-1088 +-1217 +-1288 +-1246 +-1112 +-939 +-771 +-666 +-643 +-651 +-680 +-711 +-694 +-589 +-412 +-159 +130 +412 +645 +843 +1043 +1256 +1478 +1666 +1776 +1740 +1538 +1230 +890 +598 +384 +278 +247 +233 +214 +152 +33 +-121 +-277 +-428 +-541 +-634 +-738 +-865 +-1004 +-1136 +-1251 +-1286 +-1200 +-1053 +-888 +-736 +-648 +-627 +-639 +-681 +-722 +-681 +-529 +-305 +-37 +258 +521 +732 +919 +1128 +1343 +1555 +1712 +1757 +1657 +1432 +1117 +792 +516 +333 +256 +239 +240 +203 +119 +-13 +-172 +-330 +-455 +-538 +-620 +-750 +-895 +-1037 +-1158 +-1236 +-1223 +-1122 +-973 +-807 +-668 +-606 +-591 +-624 +-698 +-721 +-630 +-443 +-189 +94 +363 +597 +789 +979 +1194 +1407 +1599 +1720 +1713 +1570 +1315 +993 +677 +422 +270 +237 +258 +255 +196 +76 +-74 +-218 +-354 +-467 +-572 +-675 +-810 +-957 +-1076 +-1177 +-1236 +-1196 +-1081 +-925 +-753 +-619 +-582 +-615 +-670 +-724 +-712 +-572 +-346 +-85 +182 +431 +638 +829 +1043 +1251 +1447 +1601 +1688 +1651 +1478 +1204 +867 +556 +336 +236 +233 +259 +239 +144 +5 +-147 +-277 +-401 +-502 +-623 +-753 +-873 +-996 +-1099 +-1184 +-1226 +-1171 +-1039 +-869 +-692 +-592 +-589 +-643 +-711 +-741 +-672 +-490 +-249 +15 +268 +483 +678 +884 +1100 +1292 +1467 +1619 +1684 +1628 +1415 +1095 +752 +455 +286 +240 +258 +269 +205 +89 +-39 +-182 +-331 +-459 +-560 +-661 +-777 +-900 +-1003 +-1095 +-1177 +-1190 +-1107 +-958 +-770 +-627 +-571 +-604 +-673 +-733 +-732 +-603 +-394 +-160 +93 +345 +567 +771 +974 +1169 +1358 +1532 +1662 +1689 +1566 +1305 +952 +603 +352 +229 +231 +259 +241 +167 +43 +-81 +-216 +-347 +-467 +-576 +-682 +-794 +-902 +-1005 +-1104 +-1174 +-1155 +-1032 +-855 +-674 +-567 +-570 +-620 +-679 +-714 +-664 +-519 +-312 +-80 +162 +415 +633 +835 +1026 +1208 +1385 +1559 +1677 +1653 +1468 +1161 +800 +490 +302 +246 +259 +269 +234 +132 +-1 +-120 +-257 +-402 +-512 +-618 +-718 +-809 +-911 +-1028 +-1129 +-1171 +-1110 +-969 +-779 +-620 +-562 +-580 +-638 +-686 +-689 +-597 +-440 +-242 +-5 +252 +504 +710 +901 +1078 +1250 +1440 +1599 +1663 +1573 +1325 +981 +644 +391 +268 +250 +253 +245 +189 +83 +-26 +-157 +-309 +-432 +-550 +-648 +-739 +-835 +-945 +-1071 +-1167 +-1167 +-1058 +-880 +-706 +-598 +-576 +-606 +-641 +-666 +-646 +-547 +-380 +-163 +79 +335 +560 +752 +930 +1103 +1292 +1482 +1622 +1634 +1480 +1188 +850 +560 +355 +263 +246 +241 +212 +142 +32 +-81 +-229 +-375 +-500 +-600 +-673 +-755 +-863 +-983 +-1098 +-1167 +-1128 +-986 +-813 +-660 +-576 +-585 +-616 +-647 +-662 +-623 +-508 +-326 +-96 +176 +438 +635 +806 +981 +1159 +1359 +1535 +1609 +1550 +1338 +1033 +721 +463 +303 +236 +222 +221 +183 +103 +-2 +-141 +-282 +-428 +-524 +-595 +-681 +-784 +-905 +-1033 +-1136 +-1156 +-1067 +-908 +-743 +-610 +-562 +-559 +-580 +-622 +-650 +-591 +-448 +-245 +2 +259 +488 +672 +841 +1022 +1228 +1438 +1587 +1617 +1494 +1249 +947 +656 +424 +284 +237 +226 +217 +176 +83 +-37 +-180 +-332 +-452 +-521 +-592 +-686 +-801 +-932 +-1048 +-1127 +-1105 +-989 +-833 +-677 +-570 +-539 +-544 +-586 +-631 +-632 +-539 +-358 +-123 +136 +383 +580 +754 +937 +1126 +1327 +1504 +1603 +1574 +1403 +1140 +838 +558 +357 +251 +229 +245 +230 +162 +57 +-87 +-229 +-354 +-453 +-532 +-611 +-722 +-849 +-964 +-1072 +-1116 +-1060 +-923 +-765 +-611 +-527 +-525 +-559 +-606 +-654 +-618 +-485 +-270 +-28 +217 +439 +612 +784 +972 +1165 +1353 +1509 +1568 +1489 +1293 +1015 +709 +443 +268 +201 +200 +213 +190 +109 +-15 +-167 +-301 +-399 +-494 +-558 +-648 +-785 +-916 +-1020 +-1106 +-1121 +-1036 +-898 +-748 +-604 +-532 +-554 +-601 +-655 +-681 +-604 +-430 +-202 +34 +260 +458 +626 +801 +998 +1194 +1365 +1499 +1530 +1418 +1196 +898 +591 +346 +199 +169 +189 +196 +147 +33 +-101 +-219 +-334 +-434 +-506 +-598 +-714 +-844 +-959 +-1055 +-1117 +-1103 +-1006 +-848 +-681 +-564 +-531 +-562 +-623 +-677 +-660 +-541 +-347 +-115 +115 +329 +514 +694 +888 +1080 +1263 +1425 +1530 +1523 +1380 +1121 +805 +496 +283 +203 +207 +236 +225 +137 +8 +-112 +-232 +-336 +-438 +-547 +-648 +-758 +-855 +-946 +-1031 +-1080 +-1038 +-913 +-742 +-579 +-498 +-503 +-552 +-612 +-644 +-588 +-439 +-228 +-8 +208 +420 +619 +808 +995 +1178 +1346 +1492 +1578 +1524 +1325 +1032 +700 +417 +259 +229 +246 +250 +210 +117 +6 +-113 +-239 +-355 +-467 +-563 +-666 +-778 +-866 +-956 +-1042 +-1063 +-984 +-844 +-669 +-532 +-485 +-527 +-591 +-631 +-632 +-528 +-352 +-153 +58 +283 +504 +696 +869 +1041 +1211 +1378 +1523 +1575 +1466 +1226 +897 +570 +332 +225 +219 +239 +230 +168 +68 +-38 +-162 +-288 +-412 +-534 +-618 +-712 +-812 +-905 +-1009 +-1091 +-1081 +-963 +-797 +-632 +-530 +-532 +-591 +-639 +-671 +-630 +-503 +-328 +-124 +104 +346 +558 +738 +900 +1069 +1246 +1413 +1533 +1524 +1359 +1080 +741 +442 +266 +204 +214 +217 +193 +102 +-5 +-106 +-239 +-379 +-481 +-586 +-681 +-748 +-839 +-954 +-1074 +-1125 +-1076 +-921 +-742 +-593 +-538 +-562 +-610 +-648 +-651 +-589 +-463 +-269 +-44 +201 +437 +627 +797 +949 +1112 +1294 +1459 +1541 +1472 +1242 +929 +618 +374 +245 +215 +224 +217 +174 +85 +-16 +-145 +-292 +-433 +-533 +-591 +-670 +-756 +-871 +-1000 +-1105 +-1110 +-1014 +-853 +-686 +-559 +-536 +-557 +-590 +-627 +-629 +-553 +-399 +-203 +44 +303 +522 +692 +855 +1028 +1226 +1417 +1553 +1568 +1419 +1152 +839 +555 +348 +251 +242 +237 +217 +172 +70 +-62 +-199 +-347 +-473 +-544 +-600 +-688 +-792 +-909 +-1039 +-1104 +-1061 +-926 +-778 +-624 +-528 +-522 +-540 +-569 +-617 +-602 +-492 +-316 +-95 +154 +391 +577 +749 +921 +1105 +1309 +1487 +1576 +1526 +1338 +1065 +763 +501 +323 +247 +240 +244 +221 +148 +32 +-106 +-248 +-380 +-474 +-547 +-617 +-716 +-838 +-959 +-1053 +-1090 +-1015 +-870 +-719 +-595 +-536 +-531 +-562 +-597 +-625 +-571 +-432 +-231 +11 +253 +469 +645 +808 +991 +1194 +1389 +1532 +1569 +1465 +1244 +960 +666 +421 +274 +220 +212 +214 +180 +85 +-39 +-173 +-310 +-411 +-483 +-551 +-652 +-789 +-909 +-1020 +-1088 +-1061 +-956 +-818 +-672 +-560 +-520 +-535 +-574 +-633 +-650 +-556 +-371 +-154 +84 +322 +508 +673 +859 +1049 +1239 +1402 +1509 +1503 +1369 +1133 +843 +560 +341 +218 +193 +208 +203 +134 +16 +-109 +-234 +-353 +-438 +-509 +-607 +-729 +-865 +-981 +-1065 +-1099 +-1064 +-947 +-795 +-643 +-549 +-529 +-555 +-616 +-668 +-650 +-517 +-304 +-75 +157 +365 +543 +722 +915 +1107 +1280 +1420 +1489 +1440 +1277 +1025 +723 +441 +254 +178 +179 +205 +178 +73 +-53 +-171 +-280 +-385 +-465 +-543 +-654 +-776 +-890 +-991 +-1070 +-1093 +-1035 +-904 +-740 +-589 +-522 +-535 +-579 +-639 +-673 +-601 +-434 +-225 +2 +232 +430 +609 +809 +1004 +1184 +1341 +1469 +1519 +1442 +1240 +948 +631 +370 +225 +201 +220 +223 +177 +66 +-56 +-182 +-298 +-400 +-485 +-572 +-689 +-799 +-896 +-981 +-1039 +-1047 +-956 +-814 +-651 +-521 +-492 +-523 +-594 +-636 +-620 +-506 +-311 +-100 +107 +326 +531 +719 +905 +1084 +1254 +1416 +1537 +1549 +1418 +1173 +855 +543 +318 +228 +239 +264 +245 +156 +37 +-75 +-186 +-311 +-413 +-502 +-612 +-713 +-800 +-889 +-985 +-1045 +-1022 +-906 +-743 +-591 +-514 +-516 +-561 +-624 +-652 +-589 +-441 +-239 +-22 +191 +410 +610 +787 +965 +1137 +1306 +1454 +1544 +1513 +1335 +1048 +718 +426 +258 +211 +224 +226 +180 +83 +-30 +-128 +-240 +-368 +-473 +-566 +-664 +-768 +-857 +-956 +-1065 +-1095 +-1026 +-875 +-693 +-558 +-523 +-554 +-603 +-637 +-635 +-554 +-402 +-220 +-12 +220 +443 +632 +813 +984 +1158 +1339 +1486 +1531 +1430 +1193 +872 +558 +327 +216 +188 +190 +174 +119 +24 +-88 +-195 +-319 +-443 +-531 +-607 +-696 +-788 +-893 +-1012 +-1099 +-1093 +-982 +-824 +-667 +-563 +-549 +-581 +-626 +-652 +-625 +-518 +-358 +-159 +75 +313 +527 +705 +882 +1057 +1230 +1399 +1510 +1504 +1345 +1070 +750 +479 +292 +216 +216 +216 +181 +114 +10 +-99 +-227 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1081.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1081.samples new file mode 100644 index 00000000..73ae8f42 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1081.samples @@ -0,0 +1,4096 @@ +225 +240 +250 +255 +254 +245 +229 +207 +180 +151 +119 +83 +48 +10 +-27 +-60 +-92 +-123 +-153 +-179 +-204 +-224 +-238 +-248 +-251 +-248 +-236 +-221 +-201 +-173 +-143 +-105 +-68 +-28 +10 +47 +82 +114 +144 +168 +190 +209 +226 +236 +241 +240 +232 +222 +208 +186 +159 +125 +89 +50 +10 +-29 +-68 +-105 +-140 +-170 +-194 +-214 +-229 +-238 +-240 +-238 +-234 +-223 +-211 +-192 +-170 +-140 +-106 +-71 +-34 +3 +40 +80 +118 +154 +185 +210 +229 +243 +251 +253 +246 +234 +220 +201 +180 +153 +122 +87 +54 +18 +-17 +-54 +-91 +-125 +-158 +-188 +-211 +-232 +-245 +-252 +-249 +-242 +-226 +-206 +-183 +-156 +-126 +-94 +-60 +-24 +13 +52 +84 +117 +147 +175 +200 +222 +239 +253 +258 +254 +248 +232 +210 +185 +153 +118 +83 +45 +9 +-30 +-68 +-101 +-132 +-162 +-185 +-204 +-222 +-234 +-242 +-245 +-242 +-233 +-219 +-200 +-176 +-145 +-109 +-69 +-29 +11 +49 +84 +118 +149 +175 +198 +214 +228 +237 +237 +233 +225 +214 +199 +176 +150 +120 +87 +50 +13 +-27 +-67 +-104 +-140 +-172 +-198 +-220 +-238 +-246 +-251 +-247 +-240 +-226 +-209 +-189 +-167 +-142 +-111 +-77 +-40 +-3 +32 +66 +104 +136 +167 +195 +217 +233 +241 +241 +235 +225 +208 +188 +163 +136 +103 +71 +38 +4 +-29 +-64 +-98 +-129 +-158 +-184 +-209 +-228 +-243 +-251 +-253 +-245 +-232 +-214 +-192 +-165 +-130 +-96 +-60 +-24 +12 +46 +80 +111 +141 +167 +191 +210 +223 +237 +241 +240 +237 +224 +206 +183 +153 +118 +83 +45 +6 +-33 +-67 +-99 +-130 +-157 +-181 +-198 +-214 +-222 +-228 +-227 +-221 +-214 +-202 +-184 +-160 +-131 +-97 +-61 +-26 +11 +49 +88 +122 +155 +183 +205 +221 +233 +240 +241 +236 +227 +213 +196 +177 +150 +121 +89 +54 +18 +-20 +-56 +-91 +-126 +-158 +-184 +-208 +-226 +-238 +-242 +-240 +-232 +-219 +-202 +-179 +-154 +-125 +-95 +-61 +-28 +6 +42 +76 +109 +141 +170 +195 +216 +230 +240 +247 +246 +235 +219 +196 +170 +140 +107 +75 +41 +4 +-31 +-66 +-97 +-129 +-157 +-183 +-206 +-222 +-234 +-243 +-246 +-242 +-233 +-215 +-192 +-165 +-135 +-99 +-62 +-24 +13 +47 +84 +116 +146 +170 +192 +208 +220 +228 +233 +232 +225 +217 +199 +177 +149 +118 +83 +43 +4 +-35 +-73 +-109 +-143 +-170 +-193 +-212 +-226 +-235 +-237 +-235 +-227 +-217 +-201 +-182 +-159 +-132 +-101 +-65 +-27 +11 +48 +85 +118 +151 +181 +206 +227 +239 +245 +245 +238 +226 +212 +189 +166 +139 +109 +77 +44 +9 +-27 +-63 +-98 +-131 +-162 +-189 +-212 +-230 +-243 +-250 +-249 +-241 +-226 +-205 +-181 +-152 +-120 +-88 +-52 +-18 +17 +51 +83 +115 +148 +173 +195 +215 +232 +242 +245 +243 +234 +220 +197 +171 +139 +101 +64 +27 +-11 +-49 +-82 +-117 +-148 +-174 +-197 +-217 +-232 +-240 +-247 +-249 +-245 +-233 +-219 +-198 +-171 +-138 +-101 +-64 +-24 +17 +55 +92 +125 +155 +182 +203 +221 +232 +236 +236 +231 +222 +206 +190 +168 +140 +110 +77 +40 +0 +-42 +-81 +-118 +-153 +-183 +-208 +-228 +-244 +-250 +-252 +-249 +-239 +-224 +-203 +-180 +-153 +-124 +-91 +-57 +-22 +17 +54 +91 +125 +160 +189 +213 +235 +248 +255 +257 +251 +239 +223 +199 +170 +140 +107 +74 +36 +3 +-31 +-66 +-98 +-129 +-159 +-186 +-208 +-225 +-238 +-244 +-243 +-237 +-222 +-202 +-177 +-146 +-112 +-74 +-38 +-1 +36 +72 +107 +139 +170 +195 +217 +234 +246 +254 +256 +253 +245 +232 +210 +184 +153 +118 +79 +39 +-1 +-41 +-76 +-110 +-142 +-171 +-195 +-212 +-224 +-232 +-235 +-233 +-226 +-215 +-197 +-176 +-151 +-121 +-89 +-52 +-15 +28 +70 +106 +142 +172 +197 +219 +235 +245 +248 +246 +239 +225 +208 +187 +161 +132 +101 +69 +32 +-7 +-46 +-85 +-121 +-155 +-186 +-210 +-231 +-249 +-258 +-260 +-256 +-246 +-230 +-208 +-181 +-152 +-120 +-86 +-52 +-18 +15 +52 +89 +123 +155 +180 +202 +221 +238 +245 +245 +240 +227 +209 +185 +159 +124 +86 +46 +9 +-28 +-64 +-96 +-131 +-163 +-191 +-214 +-232 +-245 +-254 +-259 +-261 +-254 +-242 +-223 +-196 +-168 +-134 +-96 +-56 +-14 +25 +65 +100 +130 +159 +186 +208 +224 +234 +238 +236 +230 +221 +209 +191 +165 +137 +102 +64 +25 +-15 +-56 +-93 +-131 +-163 +-192 +-215 +-232 +-244 +-250 +-250 +-246 +-233 +-219 +-198 +-175 +-148 +-116 +-83 +-47 +-9 +27 +65 +104 +140 +172 +201 +226 +241 +253 +255 +255 +247 +234 +215 +191 +164 +133 +100 +65 +30 +-7 +-42 +-78 +-113 +-145 +-174 +-201 +-222 +-237 +-247 +-251 +-245 +-234 +-218 +-197 +-172 +-142 +-105 +-69 +-33 +4 +41 +76 +111 +143 +171 +196 +219 +236 +250 +255 +254 +249 +238 +223 +199 +170 +136 +98 +59 +20 +-19 +-57 +-92 +-125 +-156 +-182 +-203 +-220 +-233 +-238 +-241 +-238 +-232 +-218 +-199 +-175 +-145 +-112 +-78 +-42 +-1 +40 +81 +121 +151 +178 +202 +220 +237 +244 +251 +246 +235 +223 +204 +183 +158 +130 +100 +65 +26 +-14 +-52 +-90 +-128 +-161 +-191 +-214 +-233 +-244 +-248 +-248 +-242 +-228 +-211 +-191 +-166 +-136 +-104 +-71 +-37 +-2 +35 +72 +107 +141 +173 +200 +223 +240 +252 +256 +251 +242 +227 +209 +186 +157 +122 +88 +52 +14 +-21 +-57 +-92 +-127 +-156 +-182 +-207 +-227 +-242 +-251 +-253 +-248 +-239 +-222 +-204 +-177 +-145 +-108 +-70 +-31 +5 +44 +80 +113 +144 +169 +193 +211 +224 +235 +239 +238 +230 +218 +201 +182 +154 +121 +83 +44 +4 +-34 +-72 +-109 +-142 +-173 +15 +51 +84 +117 +149 +175 +196 +214 +231 +240 +243 +240 +230 +214 +195 +170 +140 +106 +69 +30 +-8 +-45 +-80 +-113 +-145 +-171 +-194 +-211 +-225 +-234 +-242 +-240 +-234 +-223 +-206 +-186 +-160 +-125 +-90 +-54 +-14 +23 +62 +98 +135 +167 +191 +213 +227 +235 +243 +245 +241 +230 +212 +194 +172 +147 +112 +77 +40 +1 +-36 +-72 +-108 +-143 +-172 +-199 +-221 +-233 +-241 +-240 +-235 +-227 +-215 +-196 +-174 +-149 +-116 +-84 +-49 +-12 +25 +62 +98 +130 +162 +191 +217 +236 +250 +255 +255 +248 +234 +216 +194 +166 +134 +102 +66 +30 +-6 +-41 +-76 +-108 +-141 +-170 +-194 +-214 +-230 +-241 +-246 +-245 +-236 +-222 +-200 +-175 +-146 +-114 +-79 +-42 +-5 +32 +68 +100 +133 +161 +184 +205 +221 +235 +242 +244 +239 +229 +214 +195 +171 +139 +104 +67 +29 +-11 +-48 +-86 +-119 +-153 +-181 +-204 +-220 +-231 +-238 +-242 +-240 +-231 +-221 +-202 +-179 +-153 +-121 +-90 +-55 +-17 +22 +62 +98 +133 +165 +192 +214 +230 +240 +241 +238 +230 +217 +200 +182 +158 +128 +96 +61 +27 +-6 +-44 +-80 +-116 +-150 +-180 +-207 +-227 +-243 +-252 +-254 +-249 +-237 +-221 +-200 +-177 +-148 +-116 +-82 +-47 +-12 +21 +58 +92 +125 +155 +180 +202 +220 +235 +244 +246 +237 +224 +206 +183 +156 +122 +86 +51 +13 +-21 +-55 +-92 +-124 +-153 +-177 +-200 +-219 +-233 +-242 +-244 +-243 +-237 +-225 +-206 +-181 +-150 +-114 +-78 +-42 +-5 +33 +71 +106 +139 +168 +191 +208 +223 +234 +238 +236 +230 +221 +203 +183 +158 +129 +96 +61 +23 +-16 +-55 +-92 +-126 +-161 +-187 +-210 +-227 +-236 +-243 +-242 +-238 +-227 +-213 +-195 +-170 +-144 +-115 +-81 +-45 +-7 +32 +68 +102 +138 +170 +198 +217 +234 +244 +247 +245 +237 +222 +203 +179 +153 +124 +92 +57 +21 +-14 +-49 +-84 +-116 +-149 +-175 +-197 +-218 +-233 +-244 +-244 +-240 +-228 +-209 +-188 +-163 +-134 +-101 +-64 +-27 +10 +47 +82 +114 +144 +172 +197 +217 +232 +243 +250 +252 +248 +234 +216 +192 +163 +131 +97 +63 +25 +-13 +-51 +-86 +-117 +-147 +-171 +-194 +-213 +-223 +-229 +-230 +-225 +-215 +-203 +-186 +-164 +-136 +-103 +-67 +-30 +10 +48 +85 +121 +154 +181 +205 +225 +234 +244 +247 +244 +236 +221 +204 +180 +155 +125 +94 +59 +24 +-14 +-51 +-87 +-122 +-153 +-181 +-203 +-222 +-232 +-239 +-240 +-234 +-221 +-202 +-181 +-159 +-130 +-101 +-70 +-35 +0 +37 +74 +105 +137 +167 +190 +209 +224 +237 +241 +239 +230 +213 +190 +166 +138 +107 +76 +41 +6 +-30 +-68 +-101 +-133 +-161 +-185 +-206 +-222 +-235 +-245 +-248 +-247 +-236 +-221 +-198 +-172 +-144 +-111 +-77 +-38 +0 +36 +70 +100 +129 +159 +180 +198 +209 +217 +221 +220 +215 +207 +189 +168 +140 +107 +74 +38 +2 +-37 +-75 +-107 +-141 +-169 +-192 +-212 +-228 +-239 +-243 +-242 +-238 +-228 +-211 +-192 +-171 +-143 +-113 +-80 +-42 +-3 +33 +68 +101 +134 +164 +187 +208 +222 +228 +229 +225 +215 +201 +184 +161 +136 +106 +76 +45 +11 +-25 +-59 +-92 +-126 +-155 +-182 +-204 +-220 +-232 +-234 +-235 +-229 +-215 +-198 +-176 +-149 +-117 +-86 +-51 +-18 +16 +49 +83 +114 +144 +174 +196 +216 +231 +238 +241 +240 +233 +222 +203 +179 +149 +116 +83 +51 +17 +-20 +-57 +-88 +-117 +-146 +-167 +-187 +-202 +-214 +-217 +-216 +-212 +-202 +-187 +-169 +-145 +-116 +-84 +-46 +-11 +26 +60 +94 +125 +155 +182 +203 +218 +228 +235 +238 +235 +226 +215 +197 +177 +152 +121 +88 +53 +15 +-21 +-55 +-89 +-121 +-153 +-178 +-198 +-211 +-220 +-222 +-220 +-215 +-201 +-186 +-165 +-142 +-116 +-86 +-53 +-21 +14 +48 +81 +113 +143 +172 +195 +211 +223 +229 +229 +227 +218 +201 +180 +155 +128 +98 +67 +33 +-2 +-36 +-69 +-101 +-131 +-159 +-183 +-204 +-219 +-230 +-236 +-236 +-230 +-219 +-203 +-180 +-155 +-124 +-92 +-58 +-22 +11 +43 +76 +104 +132 +155 +173 +190 +204 +210 +213 +211 +202 +192 +174 +150 +123 +91 +55 +18 +-14 +-50 +-84 +-116 +-147 +-171 +-193 +-209 +-222 +-231 +-236 +-235 +-229 +-220 +-203 +-184 +-162 +-136 +-104 +-66 +-31 +5 +38 +72 +105 +137 +161 +183 +200 +211 +218 +219 +215 +204 +188 +170 +152 +127 +98 +66 +35 +0 +-34 +-66 +-99 +-131 +-160 +-184 +-202 +-218 +-226 +-229 +-227 +-218 +-205 +-186 +-165 +-139 +-112 +-82 +-49 +-18 +16 +49 +82 +113 +141 +168 +190 +209 +222 +229 +231 +229 +222 +208 +190 +165 +136 +104 +72 +41 +8 +-25 +-59 +-90 +-117 +-141 +-164 +-182 +-198 +-208 +-212 +-213 +-207 +-198 +-183 +-165 +-139 +-108 +-75 +-38 +-3 +32 +66 +98 +127 +155 +178 +198 +213 +223 +230 +232 +229 +222 +208 +190 +169 +144 +113 +80 +44 +9 +-24 +-60 +-93 +-122 +-150 +-175 +-194 +-208 +-216 +-219 +-217 +-211 +-199 +-185 +-165 +-142 +-113 +-84 +-54 +-18 +15 +49 +83 +116 +146 +171 +193 +209 +220 +226 +225 +222 +210 +194 +174 +150 +123 +96 +64 +31 +-2 +-36 +-72 +-104 +-133 +-162 +-185 +-206 +-222 +-234 +-236 +-234 +-229 +-217 +-201 +-180 +-153 +-120 +-89 +-57 +-24 +8 +41 +71 +100 +130 +154 +175 +192 +205 +211 +213 +212 +203 +190 +174 +148 +119 +87 +52 +17 +-18 +-51 +-85 +-115 +-144 +-170 +-191 +-207 +-222 +-232 +-237 +-238 +-232 +-220 +-205 +-183 +-159 +-130 +-100 +-67 +-29 +7 +44 +76 +106 +135 +159 +181 +196 +205 +211 +210 +208 +198 +183 +167 +143 +119 +93 +64 +31 +-4 +-40 +-75 +-107 +-139 +-164 +-188 +-206 +-219 +-225 +-229 +-224 +-214 +-202 +-184 +-163 +-138 +-108 +-80 +-47 +-13 +18 +54 +86 +118 +150 +176 +198 +217 +227 +233 +235 +230 +220 +203 +183 +159 +131 +102 +69 +37 +4 +-29 +-61 +-89 +-117 +-143 +-168 +-189 +-203 +-213 +-215 +-213 +-206 +-195 +-178 +-155 +-128 +-100 +-69 +-33 +0 +34 +67 +100 +128 +156 +178 +198 +216 +226 +231 +232 +227 +218 +206 +188 +166 +138 +105 +73 +37 +0 +-37 +-76 +-105 +-133 +-159 +-179 +-196 +-209 +-217 +-218 +-214 +-208 +-195 +-181 +-162 +-138 +-107 +-77 +-43 +-9 +27 +63 +94 +128 +157 +182 +198 +210 +221 +223 +223 +218 +205 +189 +166 +142 +115 +86 +56 +23 +-11 +-45 +-82 +-112 +-143 +-170 +-192 +-214 +-226 +-232 +-235 +-231 +-221 +-206 +-188 +-166 +-137 +-104 +-73 +-41 +-10 +22 +53 +86 +117 +144 +168 +189 +204 +215 +221 +223 +217 +205 +188 +169 +142 +111 +80 +45 +12 +-22 +-53 +-85 +-114 +-142 +-166 +-185 +-200 +-215 +-224 +-226 +-224 +-215 +-203 +-186 +-165 +-139 +-107 +-73 +-39 +-4 +32 +66 +98 +129 +155 +176 +193 +208 +218 +224 +224 +216 +206 +193 +173 +148 +118 +89 +56 +23 +-12 +-48 +-83 +-115 +-148 +-173 +-192 +-206 +-216 +-222 +-221 +-216 +-207 +-194 +-174 +-152 +-127 +-99 +-68 +-36 +-2 +35 +65 +97 +129 +158 +185 +204 +217 +226 +227 +225 +219 +206 +189 +167 +141 +114 +84 +52 +19 +-14 +-47 +-78 +-106 +-135 +-161 +-184 +-203 +-217 +-224 +-226 +-222 +-212 +-199 +-180 +-157 +-128 +-97 +-66 +-31 +4 +37 +67 +95 +123 +146 +170 +190 +206 +218 +221 +222 +216 +207 +189 +170 +146 +117 +85 +50 +13 +-21 +-53 +-88 +-116 +-143 +-166 +-185 +-201 +-212 +-220 +-223 +-220 +-212 +-200 +-181 +-159 +-131 +-104 +-72 +-40 +-5 +31 +65 +99 +128 +156 +176 +193 +207 +213 +216 +213 +206 +196 +180 +161 +137 +109 +79 +46 +14 +-17 +-49 +-81 +-112 +-142 +-170 +-191 +-206 +-217 +-223 +-221 +-212 +-202 +-186 +-169 +-148 +-122 +-94 +-62 +-31 +1 +32 +62 +93 +123 +152 +175 +194 +208 +217 +221 +219 +211 +198 +181 +161 +135 +108 +78 +45 +13 +-22 +-54 +-81 +-106 +-133 +-154 +-174 +-192 +-208 +-212 +-214 +-207 +-197 +-187 +-170 +-148 +-122 +-93 +-60 +-26 +6 +41 +72 +102 +128 +151 +170 +187 +200 +207 +211 +212 +205 +194 +180 +158 +135 +106 +76 +44 +11 +-26 +-60 +-91 +-120 +-147 +-168 +-186 +-198 +-207 +-214 +-210 +-207 +-197 +-182 +-165 +-146 +-120 +-92 +-62 +-30 +1 +34 +67 +101 +131 +154 +175 +194 +206 +212 +213 +208 +199 +186 +169 +147 +124 +96 +68 +38 +7 +-21 +-52 +-82 +-112 +-139 +-164 +-183 +-197 +-208 +-213 +-214 +-209 +-196 +-181 +-163 +-138 +-114 +-82 +-51 +-21 +10 +40 +71 +98 +124 +150 +172 +189 +202 +211 +211 +210 +205 +194 +177 +154 +126 +96 +67 +36 +4 +-29 +-57 +-88 +-116 +-139 +-160 +-178 +-192 +-204 +-208 +-209 +-204 +-195 +-180 +-163 +-142 +-116 +-88 +-54 +-24 +10 +43 +76 +105 +133 +159 +176 +188 +198 +203 +204 +202 +194 +184 +168 +148 +123 +98 +67 +36 +3 +-29 +-58 +-91 +-120 +-149 +-169 +-187 +-202 +-210 +-212 +-209 +-203 +-190 +-176 +-157 +-136 +-111 +-83 +-52 +-22 +9 +41 +72 +101 +129 +151 +175 +192 +207 +211 +212 +207 +197 +183 +166 +144 +118 +92 +63 +34 +2 +-27 +-56 +-84 +-112 +-137 +-159 +-179 +-192 +-203 +-207 +-206 +-200 +-188 +-172 +-149 +-127 +-101 +-71 +-41 +-9 +23 +54 +84 +111 +135 +158 +176 +190 +202 +210 +212 +210 +202 +189 +173 +153 +128 +98 +68 +37 +4 +-29 +-62 +-90 +-119 +-144 +-164 +-180 +-189 +-197 +-199 +-198 +-196 +-187 +-172 +-152 +-131 +-108 +-80 +-51 +-18 +15 +46 +78 +108 +134 +158 +178 +190 +197 +202 +198 +193 +185 +174 +158 +137 +115 +87 +59 +30 +0 +-31 +-61 +-92 +-121 +-148 +-171 +-187 +-200 +-209 +-212 +-209 +-201 +-190 +-174 +-156 +-133 +-108 +-80 +-53 +-21 +11 +39 +65 +91 +116 +140 +161 +176 +190 +193 +195 +193 +186 +173 +155 +132 +107 +81 +52 +23 +-10 +-40 +-69 +-94 +-121 +-143 +-162 +-181 +-196 +-205 +-208 +-209 +-206 +-198 +-182 +-165 +-140 +-113 +-85 +-54 +-24 +9 +39 +70 +98 +124 +145 +164 +177 +188 +193 +195 +193 +185 +176 +159 +139 +115 +89 +62 +29 +-4 +-35 +-67 +-97 +-122 +-147 +-170 +-186 +-197 +-201 +-203 +-200 +-193 +-183 +-167 +-151 +-129 +-108 +-81 +-48 +-18 +13 +45 +74 +103 +131 +158 +178 +192 +202 +206 +207 +201 +191 +178 +162 +142 +116 +92 +64 +35 +5 +-23 +-51 +-79 +-107 +-131 +-153 +-170 +-184 +-194 +-198 +-196 +-189 +-179 +-164 +-142 +-117 +-89 +-61 +-31 +-2 +26 +54 +85 +112 +136 +158 +176 +192 +203 +211 +211 +209 +201 +187 +171 +150 +125 +95 +65 +33 +0 +-31 +-61 +-88 +-114 +-135 +-157 +-173 +-184 +-194 +-195 +-197 +-191 +-183 +-170 +-152 +-128 +-101 +-72 +-45 +-14 +19 +51 +83 +109 +133 +155 +171 +185 +193 +197 +196 +190 +182 +170 +153 +132 +110 +82 +55 +27 +-5 +-36 +-68 +-100 +-129 +-152 +-171 +-189 +-202 +-209 +-210 +-206 +-196 +-184 +-170 +-150 +-126 +-101 +-74 +-48 +-17 +13 +44 +73 +101 +129 +152 +172 +188 +199 +204 +205 +199 +188 +173 +154 +129 +104 +78 +49 +19 +-11 +-40 +-68 +-94 +-119 +-143 +-165 +-182 +-194 +-202 +-204 +-203 +-197 +-187 +-172 +-148 +-124 +-95 +-65 +-34 +-4 +28 +59 +87 +113 +139 +158 +174 +190 +202 +208 +206 +201 +192 +181 +163 +143 +117 +87 +57 +24 +-8 +-40 +-71 +-101 +-127 +-151 +-169 +-184 +-192 +-200 +-202 +-198 +-191 +-179 +-164 +-147 +-125 +-98 +-69 +-39 +-8 +25 +58 +88 +116 +143 +165 +182 +195 +203 +206 +204 +199 +189 +173 +155 +135 +111 +83 +54 +24 +-7 +-37 +-67 +-98 +-126 +-151 +-172 +-187 +-199 +-208 +-211 +-209 +-201 +-185 +-164 +-142 +-121 +-96 +-69 +-39 +-9 +24 +54 +82 +112 +136 +160 +177 +192 +203 +207 +208 +204 +193 +179 +157 +133 +104 +75 +45 +14 +-16 +-46 +-75 +-103 +-129 +-153 +-172 +-186 +-197 +-204 +-204 +-204 +-199 +-187 +-173 +-153 +-124 +-97 +-65 +-33 +-1 +29 +61 +90 +117 +144 +163 +180 +191 +199 +202 +200 +196 +185 +171 +153 +130 +105 +79 +48 +14 +-16 +-51 +-81 +-109 +-138 +-160 +-181 +-194 +-204 +-210 +-210 +-206 +-196 +-181 +-164 +-143 +-121 +-96 +-69 +-39 +-7 +25 +58 +89 +117 +142 +164 +184 +199 +208 +211 +208 +200 +188 +173 +153 +130 +104 +76 +46 +15 +-15 +-46 +-76 +-104 +-132 +-155 +-175 +-190 +-200 +-206 +-209 +-205 +-196 +-181 +-160 +-138 +-113 +-85 +-55 +-25 +9 +40 +70 +99 +124 +148 +170 +184 +199 +208 +213 +212 +205 +195 +181 +160 +135 +108 +79 +46 +12 +-20 +-51 +-82 +-110 +-134 +-159 +-175 +-189 +-198 +-206 +-205 +-202 +-194 +-183 +-168 +-146 +-121 +-95 +-65 +-32 +1 +35 +66 +95 +121 +147 +167 +184 +196 +203 +207 +205 +197 +186 +169 +150 +126 +102 +76 +47 +16 +-15 +-48 +-79 +-110 +-138 +-160 +-180 +-193 +-206 +-213 +-215 +-209 +-198 +-184 +-164 +-144 +-119 +-91 +-62 +-34 +-3 +27 +55 +87 +114 +141 +163 +180 +193 +201 +206 +207 +201 +189 +171 +148 +122 +95 +68 +37 +7 +-22 +-50 +-78 +-106 +-132 +-156 +-173 +-187 +-197 +-204 +-206 +-204 +-195 +-182 +-165 +-143 +-119 +-90 +-60 +-25 +8 +39 +69 +93 +122 +144 +165 +183 +192 +198 +201 +200 +194 +184 +170 +151 +129 +103 +75 +45 +12 +-21 +-52 +-82 +-109 +-133 +-155 +-173 +-186 +-198 +-201 +-200 +-194 +-184 +-173 +-156 +-133 +-110 +-85 +-57 +-27 +4 +38 +67 +97 +125 +149 +169 +184 +197 +202 +203 +200 +193 +179 +163 +144 +121 +95 +69 +40 +12 +-17 +-47 +-78 +-107 +-134 +-156 +-172 +-186 +-192 +-199 +-200 +-195 +-184 +-170 +-150 +-127 +-101 +-76 +-46 +-15 +14 +43 +70 +97 +124 +148 +169 +184 +195 +203 +205 +205 +198 +189 +174 +153 +127 +99 +69 +38 +8 +-23 +-54 +-83 +-108 +-129 +-151 +-167 +-181 +-188 +-194 +-193 +-189 +-181 +-169 +-154 +-133 +-107 +-79 +-48 +-18 +13 +43 +74 +102 +125 +148 +165 +179 +188 +192 +190 +187 +180 +169 +153 +133 +111 +85 +59 +29 +-1 +-33 +-64 +-95 +-122 +-148 +-170 +-188 +-202 +-207 +-211 +-209 +-203 +-191 +-177 +-160 +-138 +-111 +-87 +-61 +-32 +-1 +28 +58 +86 +113 +139 +159 +175 +185 +192 +193 +190 +182 +166 +149 +127 +100 +74 +48 +20 +-9 +-37 +-65 +-91 +-119 +-141 +-162 +-178 +-192 +-200 +-204 +-204 +-197 +-188 +-171 +-154 +-131 +-103 +-74 +-43 +-13 +20 +48 +77 +102 +124 +147 +165 +181 +191 +197 +199 +198 +191 +179 +164 +144 +119 +93 +65 +33 +0 +-30 +-57 +-86 +-112 +-136 +-156 +-170 +-180 +-187 +-190 +-190 +-184 +-174 +-159 +-142 +-120 +-96 +-71 +-41 +-11 +20 +52 +81 +109 +136 +158 +177 +189 +200 +204 +202 +200 +192 +178 +160 +143 +120 +94 +65 +37 +8 +-22 +-50 +-78 +-105 +-130 +-152 +-170 +-183 +-191 +-193 +-191 +-183 +-174 +-160 +-139 +-117 +-94 +-68 +-40 +-10 +18 +47 +74 +101 +125 +146 +167 +183 +195 +199 +199 +196 +187 +175 +158 +137 +111 +85 +56 +25 +-4 +-36 +-62 +-88 +-113 +-134 +-156 +-173 +-185 +-195 +-200 +-199 +-194 +-185 +-169 +-152 +-131 +-105 +-78 +-49 +-18 +12 +43 +72 +97 +121 +141 +156 +171 +182 +188 +190 +188 +179 +166 +151 +133 +110 +86 +56 +27 +-4 +-36 +-66 +-95 +-121 +-147 +-166 +-179 +-190 +-197 +-201 +-198 +-193 +-182 +-167 +-150 +-130 +-107 +-82 +-53 +-22 +8 +38 +64 +92 +119 +143 +163 +178 +187 +191 +192 +189 +179 +166 +149 +127 +102 +77 +48 +21 +-6 +-34 +-60 +-89 +-116 +-141 +-162 +-177 +-189 +-197 +-202 +-200 +-192 +-183 +-167 +-145 +-120 +-97 +-68 +-39 +-9 +20 +47 +76 +101 +125 +148 +169 +184 +195 +203 +203 +201 +194 +183 +166 +145 +119 +90 +63 +32 +4 +-26 +-57 +-83 +-108 +-130 +-147 +-160 +-173 +-180 +-186 +-187 +-181 +-172 +-160 +-141 +-120 +-97 +-69 +-40 +-10 +22 +54 +82 +111 +134 +156 +175 +186 +193 +197 +200 +196 +188 +174 +156 +137 +115 +89 +62 +33 +3 +-29 +-61 +-90 +-116 +-141 +-160 +-178 +-190 +-196 +-198 +-195 +-189 +-177 +-162 +-142 +-119 +-95 +-69 +-42 +-15 +12 +40 +68 +96 +120 +144 +165 +179 +190 +196 +197 +192 +184 +170 +151 +130 +104 +78 +50 +20 +-9 +-36 +-64 +-90 +-115 +-140 +-160 +-177 +-187 +-195 +-201 +-200 +-196 +-185 +-170 +-150 +-125 +-101 +-73 +-44 +-16 +16 +45 +74 +98 +120 +140 +156 +171 +181 +187 +187 +184 +175 +165 +147 +127 +105 +78 +48 +19 +-12 +-42 +-70 +-98 +-124 +-147 +-164 +-178 +-186 +-193 +-195 +-193 +-188 +-176 +-161 +-143 +-120 +-98 +-70 +-43 +-12 +19 +48 +77 +105 +130 +152 +169 +184 +193 +194 +192 +186 +178 +163 +147 +127 +104 +75 +50 +22 +-7 +-34 +-65 +-91 +-116 +-140 +-161 +-176 +-187 +-193 +-194 +-189 +-182 +-171 +-156 +-135 +-112 +-86 +-58 +-30 +-4 +25 +53 +80 +104 +131 +150 +167 +182 +191 +195 +197 +192 +183 +168 +150 +128 +104 +78 +47 +17 +-12 +-38 +-66 +-94 +-116 +-136 +-154 +-167 +-176 +-182 +-186 +-187 +-180 +-169 +-150 +-130 +-107 +-82 +-56 +-24 +6 +37 +65 +92 +117 +139 +160 +173 +183 +191 +195 +194 +191 +179 +165 +146 +127 +106 +76 +47 +18 +-13 +-42 +-72 +-101 +-127 +-149 +-168 +-181 +-190 +-193 +-192 +-188 +-183 +-172 +-155 +-136 +-114 +-88 +-61 +-34 +-7 +25 +53 +78 +106 +132 +153 +169 +182 +188 +191 +188 +180 +170 +153 +133 +112 +88 +63 +34 +4 +-26 +-51 +-76 +-102 +-127 +-150 +-169 +-184 +-193 +-200 +-201 +-197 +-189 +-177 +-156 +-137 +-110 +-85 +-56 +-28 +3 +32 +60 +88 +110 +132 +152 +167 +179 +185 +189 +190 +185 +178 +164 +146 +121 +95 +68 +38 +9 +-23 +-52 +-83 +-108 +-131 +-153 +-167 +-181 +-190 +-195 +-196 +-189 +-183 +-169 +-155 +-137 +-112 +-86 +-56 +-26 +6 +36 +66 +93 +117 +142 +165 +179 +189 +194 +194 +194 +186 +178 +162 +144 +123 +96 +71 +46 +14 +-15 +-43 +-70 +-99 +-125 +-146 +-167 +-179 +-193 +-195 +-195 +-190 +-177 +-165 +-146 +-123 +-100 +-77 +-50 +-23 +7 +36 +65 +94 +117 +140 +162 +177 +189 +199 +204 +202 +196 +184 +168 +147 +123 +98 +70 +40 +11 +-19 +-50 +-74 +-99 +-124 +-145 +-164 +-174 +-185 +-190 +-190 +-188 +-183 +-171 +-155 +-130 +-105 +-79 +-51 +-25 +6 +36 +65 +90 +115 +137 +157 +170 +177 +182 +187 +186 +182 +171 +156 +138 +116 +93 +63 +36 +5 +-27 +-56 +-84 +-110 +-134 +-157 +-174 +-185 +-190 +-195 +-196 +-192 +-182 +-169 +-156 +-133 +-112 +-86 +-57 +-33 +-2 +27 +56 +86 +112 +136 +155 +167 +179 +185 +190 +185 +177 +166 +151 +133 +109 +88 +61 +31 +0 +-27 +-57 +-82 +-107 +-131 +-152 +-171 +-182 +-192 +-195 +-198 +-189 +-181 +-167 +-149 +-129 +-104 +-78 +-50 +-23 +4 +32 +60 +85 +109 +131 +152 +168 +182 +186 +189 +188 +184 +173 +157 +138 +116 +91 +67 +35 +8 +-20 +-48 +-76 +-99 +-119 +-140 +-154 +-167 +-173 +-178 +-177 +-173 +-166 +-155 +-138 +-117 +-96 +-69 +-43 +-15 +17 +42 +73 +100 +121 +143 +157 +172 +180 +186 +186 +184 +177 +166 +152 +138 +116 +89 +63 +37 +10 +-18 +-48 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1250.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1250.samples new file mode 100644 index 00000000..dd74b900 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1250.samples @@ -0,0 +1,4096 @@ +-755 +-761 +-543 +-114 +312 +567 +616 +526 +508 +675 +961 +1255 +1383 +1272 +1064 +903 +861 +929 +918 +699 +305 +-156 +-473 +-538 +-466 +-413 +-548 +-916 +-1305 +-1517 +-1447 +-1126 +-800 +-678 +-776 +-978 +-1038 +-777 +-269 +291 +664 +703 +541 +413 +474 +792 +1190 +1428 +1391 +1106 +772 +619 +672 +830 +911 +729 +346 +-94 +-441 +-582 +-586 +-639 +-812 +-1081 +-1343 +-1414 +-1275 +-1019 +-793 +-740 +-808 +-845 +-729 +-398 +27 +314 +403 +333 +257 +399 +754 +1195 +1510 +1504 +1209 +853 +640 +682 +889 +994 +840 +416 +-124 +-503 +-591 +-473 +-324 +-391 +-731 +-1169 +-1508 +-1558 +-1307 +-969 +-727 +-678 +-789 +-832 +-648 +-276 +168 +473 +543 +493 +458 +574 +857 +1129 +1255 +1195 +999 +857 +879 +989 +1072 +953 +558 +58 +-350 +-525 +-463 +-381 +-455 +-741 +-1165 +-1464 +-1467 +-1200 +-818 +-572 +-615 +-835 +-1016 +-966 +-576 +-34 +418 +622 +558 +422 +447 +694 +1090 +1416 +1460 +1259 +942 +699 +684 +797 +867 +763 +436 +27 +-273 +-417 +-432 +-468 +-679 +-1008 +-1320 +-1462 +-1337 +-1050 +-802 +-715 +-805 +-913 +-834 +-523 +-65 +344 +489 +399 +260 +264 +555 +1036 +1429 +1551 +1359 +991 +720 +684 +844 +1017 +951 +587 +59 +-420 +-636 +-574 +-434 +-407 +-610 +-991 +-1313 +-1422 +-1293 +-1019 +-806 +-758 +-809 +-845 +-700 +-349 +54 +365 +492 +474 +478 +622 +887 +1177 +1312 +1220 +1004 +800 +762 +893 +1018 +978 +706 +233 +-208 +-446 +-468 +-372 +-381 +-624 +-1021 +-1391 +-1528 +-1344 +-984 +-658 +-546 +-693 +-889 +-914 +-670 +-208 +258 +510 +528 +434 +410 +610 +959 +1293 +1440 +1324 +1064 +844 +749 +785 +822 +701 +417 +44 +-259 +-375 +-374 +-393 +-551 +-874 +-1214 +-1394 +-1352 +-1122 +-872 +-783 +-858 +-967 +-936 +-640 +-169 +279 +520 +485 +316 +248 +418 +811 +1240 +1446 +1362 +1087 +798 +710 +822 +983 +1007 +745 +263 +-232 +-557 +-629 +-554 +-530 +-662 +-935 +-1226 +-1351 +-1261 +-1056 +-862 +-808 +-868 +-894 +-774 +-478 +-86 +224 +375 +408 +434 +596 +895 +1195 +1358 +1293 +1056 +824 +731 +810 +971 +995 +787 +378 +-89 +-401 +-486 +-437 +-413 +-568 +-926 +-1328 +-1564 +-1510 +-1211 +-872 +-673 +-672 +-791 +-831 +-663 +-305 +110 +414 +493 +464 +467 +610 +903 +1207 +1375 +1342 +1168 +981 +901 +890 +867 +723 +404 +31 +-275 +-436 +-443 +-442 +-571 +-836 +-1160 +-1379 +-1363 +-1174 +-944 +-812 +-861 +-983 +-997 +-797 +-370 +127 +476 +599 +526 +433 +507 +778 +1139 +1405 +1414 +1201 +933 +753 +762 +877 +916 +763 +404 +-49 +-408 +-587 +-620 +-630 +-761 +-992 +-1230 +-1359 +-1291 +-1089 +-899 +-807 +-816 +-848 +-747 +-477 +-119 +213 +388 +421 +436 +554 +833 +1196 +1438 +1452 +1243 +934 +746 +742 +859 +938 +808 +438 +-25 +-398 +-548 +-496 +-424 +-497 +-761 +-1148 +-1446 +-1500 +-1321 +-1016 +-778 +-709 +-743 +-765 +-629 +-299 +90 +412 +567 +559 +540 +644 +876 +1149 +1321 +1293 +1143 +984 +909 +935 +942 +803 +489 +60 +-304 +-479 +-500 +-463 +-528 +-775 +-1108 +-1356 +-1400 +-1204 +-919 +-734 +-725 +-865 +-963 +-853 +-512 +-31 +392 +598 +602 +544 +574 +795 +1121 +1371 +1422 +1247 +966 +764 +705 +761 +801 +676 +380 +12 +-310 +-490 +-556 +-617 +-757 +-997 +-1238 +-1357 +-1302 +-1111 +-903 +-804 +-804 +-805 +-718 +-462 +-92 +227 +406 +434 +404 +476 +715 +1068 +1382 +1484 +1340 +1059 +796 +704 +773 +835 +751 +451 +-3 +-407 +-616 +-622 +-526 +-512 +-688 +-997 +-1302 +-1427 +-1324 +-1094 +-863 +-747 +-747 +-739 +-607 +-320 +58 +386 +568 +624 +632 +719 +915 +1131 +1265 +1243 +1074 +895 +819 +841 +884 +801 +525 +115 +-290 +-538 +-592 +-558 +-582 +-759 +-1070 +-1347 +-1429 +-1288 +-987 +-711 +-614 +-683 +-793 +-775 +-529 +-119 +302 +579 +654 +624 +641 +791 +1062 +1321 +1409 +1302 +1064 +821 +687 +651 +628 +515 +261 +-56 +-329 +-496 +-563 +-617 +-752 +-972 +-1206 +-1347 +-1315 +-1136 +-924 +-788 +-771 +-782 +-691 +-446 +-67 +318 +557 +609 +555 +533 +675 +966 +1266 +1425 +1356 +1115 +857 +709 +709 +773 +723 +478 +73 +-359 +-649 +-740 +-714 +-684 +-768 +-983 +-1213 +-1329 +-1265 +-1063 +-857 +-737 +-704 +-692 +-572 +-303 +46 +370 +572 +643 +684 +790 +989 +1217 +1343 +1294 +1100 +866 +736 +747 +801 +770 +561 +178 +-229 +-517 +-625 +-608 +-608 +-740 +-1010 +-1311 +-1470 +-1392 +-1137 +-831 +-627 +-601 +-658 +-649 +-483 +-142 +251 +546 +675 +674 +675 +787 +1005 +1254 +1396 +1346 +1154 +929 +771 +706 +658 +516 +252 +-84 +-388 +-557 +-606 +-617 +-703 +-917 +-1178 +-1352 +-1355 +-1189 +-955 +-797 +-764 +-796 +-764 +-551 +-163 +265 +586 +700 +657 +610 +667 +889 +1189 +1393 +1390 +1195 +925 +729 +679 +716 +708 +534 +181 +-237 +-585 +-759 +-782 +-789 +-864 +-1027 +-1217 +-1315 +-1256 +-1079 +-880 +-753 +-719 +-691 +-582 +-337 +-1 +306 +510 +600 +645 +757 +972 +1219 +1389 +1387 +1205 +958 +762 +695 +726 +719 +562 +237 +-175 +-508 +-658 +-660 +-625 +-693 +-916 +-1210 +-1430 +-1456 +-1267 +-984 +-744 +-630 +-631 +-616 +-467 +-180 +181 +494 +657 +696 +717 +799 +977 +1174 +1299 +1289 +1160 +994 +863 +782 +704 +554 +268 +-83 +-390 +-579 +-634 +-640 +-715 +-895 +-1136 +-1319 +-1338 +-1189 +-960 +-784 +-737 +-781 +-786 +-639 +-306 +131 +505 +707 +740 +706 +748 +908 +1139 +1325 +1346 +1197 +963 +758 +655 +650 +630 +495 +228 +-115 +-427 +-636 +-737 +-802 +-909 +-1070 +-1227 +-1305 +-1251 +-1085 +-901 +-775 +-708 +-658 +-540 +987 +1066 +1154 +1214 +1207 +1105 +923 +703 +500 +339 +202 +52 +-151 +-403 +-663 +-875 +-1001 +-1041 +-1035 +-1027 +-1047 +-1085 +-1095 +-1043 +-913 +-722 +-507 +-300 +-110 +63 +246 +444 +648 +837 +987 +1086 +1139 +1157 +1147 +1101 +1017 +905 +766 +623 +482 +322 +131 +-89 +-335 +-576 +-770 +-898 +-972 +-1023 +-1078 +-1148 +-1200 +-1184 +-1080 +-898 +-678 +-476 +-323 +-207 +-86 +81 +308 +563 +793 +959 +1044 +1072 +1088 +1109 +1132 +1127 +1059 +921 +721 +496 +279 +82 +-93 +-265 +-442 +-618 +-779 +-914 +-1022 +-1102 +-1156 +-1178 +-1154 +-1079 +-955 +-803 +-644 +-487 +-326 +-139 +88 +340 +583 +775 +894 +950 +981 +1023 +1089 +1161 +1181 +1118 +964 +756 +543 +362 +214 +70 +-108 +-336 +-591 +-830 +-1000 +-1085 +-1104 +-1093 +-1082 +-1080 +-1071 +-1018 +-909 +-747 +-552 +-353 +-157 +32 +223 +422 +614 +794 +947 +1060 +1144 +1197 +1212 +1178 +1086 +946 +778 +608 +458 +317 +158 +-44 +-288 +-543 +-762 +-908 +-987 +-1028 +-1066 +-1124 +-1187 +-1212 +-1148 +-989 +-766 +-527 +-328 +-177 +-47 +103 +298 +528 +757 +943 +1056 +1107 +1127 +1133 +1144 +1132 +1077 +962 +791 +585 +364 +145 +-69 +-277 +-475 +-652 +-801 +-913 +-1004 +-1079 +-1140 +-1177 +-1175 +-1107 +-979 +-819 +-650 +-499 +-355 +-192 +17 +270 +542 +781 +942 +1022 +1045 +1056 +1088 +1139 +1170 +1132 +1005 +807 +583 +379 +211 +70 +-87 +-285 +-518 +-761 +-962 +-1090 +-1150 +-1159 +-1146 +-1120 +-1083 +-1013 +-898 +-752 +-573 +-386 +-195 +5 +211 +418 +610 +775 +908 +1015 +1105 +1184 +1239 +1239 +1161 +1011 +817 +617 +445 +300 +156 +-18 +-244 +-496 +-732 +-907 +-997 +-1033 +-1054 +-1089 +-1145 +-1188 +-1168 +-1055 +-858 +-621 +-389 +-194 +-31 +127 +307 +512 +725 +914 +1046 +1120 +1148 +1150 +1135 +1104 +1044 +942 +799 +625 +434 +222 +-1 +-236 +-470 +-673 +-829 +-940 +-1013 +-1074 +-1133 +-1182 +-1195 +-1139 +-1012 +-833 +-644 +-477 +-341 +-207 +-37 +192 +462 +731 +942 +1063 +1106 +1112 +1118 +1137 +1153 +1124 +1018 +839 +615 +391 +194 +33 +-117 +-292 +-492 +-702 +-900 +-1052 +-1152 +-1200 +-1206 +-1183 +-1127 +-1035 +-906 +-746 +-573 +-392 +-198 +4 +225 +447 +644 +801 +911 +988 +1054 +1128 +1200 +1233 +1192 +1064 +869 +645 +437 +266 +115 +-46 +-249 +-488 +-732 +-932 +-1050 +-1088 +-1083 +-1076 +-1087 +-1108 +-1101 +-1026 +-875 +-661 +-423 +-200 +-4 +172 +351 +543 +738 +913 +1050 +1134 +1169 +1173 +1143 +1085 +994 +872 +722 +563 +402 +223 +16 +-219 +-466 +-695 +-872 +-985 +-1044 +-1080 +-1117 +-1159 +-1176 +-1134 +-1010 +-818 +-596 +-391 +-233 +-102 +33 +209 +438 +689 +911 +1063 +1133 +1144 +1131 +1120 +1112 +1077 +990 +831 +615 +376 +148 +-49 +-223 +-386 +-551 +-721 +-877 +-1009 +-1106 +-1167 +-1188 +-1171 +-1111 +-1007 +-864 +-698 +-522 +-350 +-170 +28 +248 +483 +703 +875 +977 +1026 +1048 +1078 +1123 +1160 +1146 +1051 +874 +641 +406 +205 +44 +-105 +-277 +-489 +-727 +-942 +-1090 +-1152 +-1141 +-1101 +-1065 +-1041 +-1015 +-949 +-821 +-639 +-420 +-196 +12 +203 +390 +576 +757 +915 +1043 +1136 +1186 +1202 +1177 +1102 +983 +825 +648 +471 +312 +157 +-13 +-216 +-451 +-690 +-888 +-1015 +-1075 +-1093 +-1108 +-1131 +-1155 +-1137 +-1038 +-858 +-617 +-369 +-156 +5 +134 +277 +458 +675 +887 +1055 +1146 +1166 +1149 +1115 +1082 +1039 +958 +820 +626 +397 +157 +-68 +-273 +-458 +-631 +-784 +-912 +-1014 +-1087 +-1134 +-1160 +-1158 +-1111 +-1007 +-858 +-674 +-481 +-305 +-138 +37 +244 +480 +721 +930 +1063 +1114 +1107 +1083 +1082 +1095 +1091 +1026 +875 +655 +405 +181 +2 +-146 +-298 +-480 +-699 +-917 +-1091 +-1187 +-1201 +-1164 +-1103 +-1040 +-973 +-882 +-754 +-583 +-384 +-175 +33 +230 +422 +609 +783 +929 +1038 +1116 +1167 +1197 +1196 +1147 +1028 +852 +641 +428 +242 +89 +-59 +-231 +-442 +-676 +-888 +-1041 +-1109 +-1116 +-1102 +-1096 +-1107 +-1105 +-1042 +-898 +-674 +-412 +-162 +41 +196 +341 +497 +677 +869 +1035 +1139 +1179 +1166 +1123 +1069 +1002 +916 +790 +622 +422 +203 +-21 +-244 +-455 +-655 +-827 +-956 +-1041 +-1091 +-1119 +-1140 +-1145 +-1118 +-1032 +-882 +-683 +-474 +-286 +-129 +16 +186 +397 +646 +885 +1063 +1149 +1155 +1119 +1080 +1062 +1048 +995 +873 +674 +435 +196 +-7 +-168 +-313 +-469 +-648 +-843 +-1020 +-1146 +-1207 +-1207 +-1166 +-1098 +-1009 +-893 +-746 +-579 +-395 +-202 +-9 +195 +398 +597 +772 +907 +999 +1059 +1102 +1140 +1169 +1159 +1081 +923 +706 +470 +253 +75 +-67 +-222 +-407 +-625 +-842 +-1014 +-1108 +-1123 +-1094 +-1059 +-1044 +-1035 +-1002 +-903 +-727 +-494 +-241 +-10 +181 +346 +505 +669 +838 +994 +1107 +1163 +1171 +1142 +1080 +998 +890 +758 +601 +428 +250 +56 +-153 +-378 +-603 +-803 +-952 +-1039 +-1076 +-1089 +-1096 +-1106 +-1094 +-1025 +-887 +-688 +-461 +-254 +-91 +41 +177 +351 +563 +798 +1000 +1128 +1173 +1154 +1110 +1066 +1029 +975 +869 +697 +477 +235 +10 +-180 +-340 +-486 +-637 +-788 +-931 +-1051 +-1128 +-1163 +-1159 +-1113 +-1028 +-904 +-748 +-572 +-389 +-212 +-30 +162 +370 +584 +780 +927 +1013 +1047 +1054 +1066 +1089 +1100 +1064 +948 +752 +513 +274 +76 +-83 +-229 +-391 +-586 +-798 +-989 +-1110 +-1150 +-1123 +-1071 +-1024 +-987 +-944 +-865 +-728 +-533 +-310 +-83 +127 +313 +491 +662 +820 +959 +1066 +1130 +1156 +1147 +1101 +1013 +886 +727 +547 +376 +219 +64 +-111 +-314 +-541 +-763 +-938 +-1047 +-1089 +-1093 +-1086 +-1093 +-1093 +-1053 +-942 +-755 +-519 +-278 +-80 +71 +200 +339 +513 +720 +921 +1074 +1150 +1157 +1119 +1066 +1016 +956 +862 +717 +518 +292 +63 +-149 +-336 +-504 +-655 +-795 +-912 +-1007 +-1073 +-1110 +-1125 +-1110 +-1051 +-939 +-781 +-590 +-398 +-220 +-55 +116 +312 +535 +757 +942 +1052 +1086 +1071 +1044 +1036 +1044 +1029 +953 +797 +575 +332 +110 +-65 +-208 +-358 +-532 +-733 +-931 +-1083 +-1159 +-1160 +-1109 +-1042 +-974 +-903 +-815 +-688 +-519 +-324 +-116 +87 +285 +472 +651 +810 +937 +1036 +1100 +1139 +1152 +1131 +1065 +941 +768 +566 +366 +188 +36 +-109 +-279 +-478 +-700 +-898 +-1036 +-1096 +-1095 +-1069 +-1050 +-1047 +-1027 +-955 +-804 +-582 +-328 +-89 +103 +250 +379 +523 +696 +876 +1032 +1125 +1152 +1126 +1075 +1011 +938 +846 +712 +539 +331 +112 +-105 +-313 +-505 +-683 +-833 +-946 +-1018 +-1055 +-1076 +-1088 +-1084 +-1047 +-954 +-804 +-609 +-402 +-215 +-53 +96 +266 +471 +700 +916 +1068 +1134 +1126 +1076 +1028 +1001 +978 +918 +792 +598 +359 +122 +-77 +-237 +-377 +-524 +-696 +-876 +-1036 +-1140 +-1179 +-1159 +-1096 +-1012 +-916 +-803 +-665 +-502 +-321 +-127 +70 +262 +455 +639 +806 +937 +1023 +1074 +1101 +1116 +1114 +1077 +981 +819 +601 +368 +157 +-14 +-154 +-296 +-468 +-668 +-869 +-1028 +-1110 +-1119 +-1081 +-1037 +-1008 +-991 +-944 +-831 +-641 +-397 +-141 +87 +268 +419 +562 +714 +875 +1017 +1111 +1154 +1143 +1093 +1025 +935 +824 +688 +524 +340 +145 +-56 +-261 +-473 +-679 +-857 +-991 +-1065 +-1092 +-1092 +-1087 +-1079 +-1050 +-976 +-834 +-639 +-417 +-205 +-30 +114 +262 +437 +645 +865 +1054 +1166 +1192 +1155 +1089 +1027 +976 +906 +799 +627 +405 +162 +-61 +-245 +-398 +-538 +-685 +-840 +-988 +-1103 +-1168 +-1181 +-1149 +-1083 +-982 +-854 +-698 +-517 +-327 +-135 +54 +244 +438 +635 +818 +962 +1049 +1085 +1089 +1090 +1092 +1082 +1026 +895 +695 +452 +210 +6 +-154 +-295 +-447 +-632 +-830 +-1007 +-1120 +-1152 +-1123 +-1065 +-1009 +-968 +-917 +-828 +-679 +-474 +-237 +5 +219 +401 +566 +721 +870 +1001 +1099 +1150 +1156 +1127 +1061 +964 +840 +687 +518 +343 +167 +-8 +-192 +-392 +-602 +-806 +-971 +-1072 +-1111 +-1106 +-1087 +-1069 +-1044 +-991 +-876 +-692 +-461 +-225 +-20 +141 +272 +410 +582 +780 +975 +1118 +1180 +1169 +1111 +1039 +971 +896 +794 +643 +441 +209 +-21 +-229 +-403 +-553 +-697 +-831 +-952 +-1048 +-1110 +-1138 +-1134 +-1094 +-1016 +-890 +-724 +-531 +-332 +-142 +34 +214 +402 +608 +806 +968 +1065 +1095 +1080 +1050 +1031 +1017 +983 +893 +728 +503 +255 +26 +-158 +-311 +-455 +-618 +-803 +-983 +-1118 +-1180 +-1167 +-1104 +-1024 +-947 +-867 +-775 +-644 +-472 +-262 +-38 +180 +378 +556 +719 +863 +986 +1078 +1134 +1150 +1135 +1087 +999 +866 +698 +502 +304 +120 +-40 +-197 +-368 +-562 +-769 +-953 +-1080 +-1134 +-1127 +-1087 +-1048 +-1020 +-978 +-888 +-728 +-501 +-246 +-8 +183 +327 +452 +592 +757 +930 +1073 +1159 +1173 +1131 +1061 +980 +892 +784 +641 +456 +241 +15 +-203 +-402 +-582 +-739 +-871 +-974 +-1039 +-1075 +-1090 +-1086 +-1062 +-1004 +-894 +-733 +-534 +-326 +-130 +42 +205 +381 +574 +781 +970 +1098 +1149 +1131 +1075 +1016 +971 +930 +855 +719 +520 +280 +41 +-163 +-324 +-462 +-604 +-760 +-925 +-1070 +-1159 +-1177 +-1135 +-1050 +-952 +-846 +-727 +-588 +-421 +-231 +-33 +166 +360 +541 +712 +861 +980 +1059 +1098 +1107 +1097 +1068 +1005 +889 +717 +500 +274 +68 +-101 +-243 +-381 +-541 +-726 +-908 +-1051 +-1120 +-1121 +-1071 +-1016 +-973 +-929 +-859 +-727 +-529 +-287 +-34 +187 +364 +505 +636 +769 +907 +1029 +1109 +1136 +1109 +1046 +959 +855 +735 +589 +420 +232 +32 +-170 +-373 +-568 +-747 +-899 +-1007 +-1066 +-1082 +-1068 +-1046 +-1015 +-968 +-880 +-730 +-537 +-315 +-105 +69 +218 +360 +525 +717 +911 +1072 +1157 +1160 +1103 +1020 +941 +876 +797 +680 +506 +285 +50 +-165 +-338 +-481 +-609 +-745 +-884 +-1013 +-1106 +-1145 +-1132 +-1074 +-988 +-875 +-735 +-572 +-389 +-204 +-17 +162 +342 +523 +704 +863 +984 +1049 +1067 +1059 +1041 +1022 +985 +903 +756 +548 +309 +78 +-114 +-265 +-400 +-543 +-708 +-879 +-1026 +-1110 +-1123 +-1080 +-1008 +-936 +-874 +-805 +-700 +-538 +-327 +-89 +140 +344 +511 +658 +789 +910 +1015 +1085 +1113 +1098 +1045 +962 +852 +719 +564 +389 +212 +36 +-139 +-321 +-509 +-703 +-879 +-1015 +-1088 +-1101 +-1072 +-1027 +-986 +-938 +-862 +-732 +-542 +-315 +-89 +104 +253 +376 +508 +667 +848 +1009 +1122 +1158 +1123 +1047 +957 +868 +776 +655 +492 +288 +65 +-153 +-342 +-499 +-640 +-765 +-876 +-970 +-1039 +-1076 +-1081 +-1055 +-993 +-890 +-750 +-574 +-380 +-187 +-9 +158 +326 +503 +686 +858 +989 +1057 +1066 +1037 +995 +959 +924 +865 +752 +577 +353 +112 +-100 +-273 +-411 +-545 +-687 +-843 +-985 +-1086 +-1119 +-1082 +-1007 +-914 +-826 +-739 +-638 +-502 +-326 +-123 +94 +296 +479 +639 +778 +899 +993 +1055 +1080 +1071 +1031 +963 +861 +720 +545 +354 +166 +-3 +-150 +-294 +-452 +-631 +-812 +-964 +-1054 +-1079 +-1050 +-999 +-947 +-901 +-837 +-729 +-559 +-339 +-104 +112 +280 +409 +526 +652 +794 +938 +1049 +1102 +1095 +1036 +949 +849 +742 +619 +469 +288 +87 +-120 +-318 +-493 +-647 +-775 +-878 +-949 +-992 +-1014 +-1014 +-997 +-956 +-875 +-750 +-581 +-384 +-185 +-2 +163 +317 +475 +649 +823 +972 +1059 +1080 +1038 +967 +901 +843 +786 +697 +553 +355 +128 +-93 +-280 +-426 +-551 +-673 +-808 +-945 +-1051 +-1105 +-1096 +-1031 +-936 +-828 +-712 +-587 +-446 +-284 +-106 +81 +270 +450 +618 +768 +889 +976 +1025 +1041 +1033 +1004 +953 +868 +736 +557 +347 +138 +-46 +-196 +-326 +-457 +-608 +-774 +-925 +-1032 +-1074 +-1054 +-995 +-930 +-869 +-804 +-710 +-567 +-373 +-143 +88 +290 +450 +574 +684 +796 +908 +1004 +1062 +1073 +1031 +950 +846 +728 +599 +449 +286 +106 +-84 +-274 +-462 +-636 +-785 +-903 +-975 +-1006 +-1006 +-985 +-956 +-914 +-846 +-734 +-580 +-386 +-178 +17 +183 +325 +467 +619 +784 +944 +1058 +1104 +1080 +1007 +918 +832 +754 +663 +539 +367 +158 +-61 +-259 +-422 +-555 +-671 +-787 +-904 +-1000 +-1061 +-1077 +-1041 +-963 +-853 +-720 +-574 +-415 +-249 +-79 +94 +264 +435 +604 +758 +889 +976 +1018 +1023 +1004 +975 +934 +866 +757 +594 +386 +163 +-49 +-223 +-361 +-482 +-612 +-754 +-897 +-1009 +-1067 +-1058 +-1004 +-922 +-840 +-763 +-677 +-559 +-393 +-186 +41 +258 +445 +593 +715 +817 +908 +986 +1035 +1046 +1016 +947 +845 +721 +577 +419 +254 +85 +-85 +-259 +-435 +-612 +-779 +-920 +-1014 +-1053 +-1042 +-1000 +-947 +-892 +-829 +-732 +-590 +-401 +-185 +22 +201 +342 +464 +594 +737 +888 +1021 +1096 +1103 +1045 +951 +847 +741 +636 +508 +344 +151 +-62 +-269 +-447 +-594 +-714 +-815 +-905 +-980 +-1031 +-1051 +-1033 +-983 +-889 +-763 +-607 +-427 +-244 +-64 +106 +270 +433 +599 +758 +899 +1000 +1046 +1039 +1001 +949 +896 +837 +749 +618 +427 +202 +-25 +-229 +-390 +-519 +-638 +-758 +-885 +-1001 +-1071 +-1082 +-1034 +-944 +-842 +-740 +-639 +-523 +-376 +-195 +11 +224 +423 +594 +737 +854 +947 +1013 +1050 +1055 +1026 +969 +880 +756 +602 +425 +240 +62 +-102 +-255 +-405 +-563 +-733 +-888 +-1005 +-1066 +-1066 +-1022 +-954 +-886 +-816 +-728 +-604 +-425 +-210 +15 +216 +377 +508 +620 +737 +865 +986 +1072 +1108 +1079 +1002 +893 +771 +647 +512 +357 +175 +-23 +-228 +-418 +-585 +-726 +-834 +-918 +-974 +-1008 +-1019 +-1005 +-969 +-901 +-793 +-646 +-466 +-270 +-71 +112 +276 +427 +581 +736 +886 +1005 +1071 +1075 +1027 +952 +878 +806 +725 +615 +457 +252 +23 +-195 +-381 +-527 +-649 +-760 +-881 +-988 +-1068 +-1099 +-1069 +-991 +-882 +-761 +-634 +-504 +-358 +-192 +-9 +183 +374 +555 +713 +845 +946 +1013 +1046 +1044 +1020 +970 +895 +785 +634 +449 +246 +45 +-137 +-290 +-426 +-565 +-709 +-858 +-984 +-1068 +-1092 +-1058 +-989 +-905 +-820 +-729 +-615 +-460 +-261 +-31 +192 +388 +538 +657 +757 +856 +955 +1036 +1078 +1072 +1011 +911 +789 +652 +505 +347 +176 +-11 +-206 +-398 +-576 +-734 +-864 +-958 +-1012 +-1029 +-1019 +-988 +-944 +-881 +-790 +-660 +-489 +-289 +-78 +117 +286 +434 +575 +719 +869 +1001 +1087 +1111 +1072 +986 +886 +788 +693 +585 +445 +265 +52 +-169 +-367 +-531 +-662 +-771 +-870 +-964 +-1040 +-1081 +-1074 +-1018 +-916 +-784 +-637 +-481 +-319 +-154 +18 +194 +371 +544 +706 +845 +951 +1022 +1050 +1043 +1011 +961 +895 +798 +663 +484 +278 +59 +-147 +-319 +-460 +-584 +-705 +-834 +-956 +-1048 +-1090 +-1068 +-997 +-900 +-796 +-695 +-591 +-454 +-279 +-65 +162 +372 +549 +684 +789 +879 +957 +1020 +1057 +1055 +1009 +919 +798 +656 +498 +333 +158 +-20 +-199 +-376 +-549 +-714 +-860 +-972 +-1040 +-1059 +-1034 +-987 +-925 +-853 +-768 +-652 +-498 +-306 +-93 +114 +295 +441 +571 +698 +832 +963 +1066 +1118 +1102 +1026 +917 +793 +673 +551 +414 +250 +55 +-154 +-359 +-536 +-677 +-786 +-876 +-951 +-1017 +-1057 +-1062 +-1027 +-946 +-826 +-674 +-505 +-325 +-145 +34 +209 +372 +535 +690 +831 +951 +1031 +1063 +1050 +1005 +942 +870 +782 +670 +519 +322 +98 +-128 +-327 +-487 +-611 +-717 +-827 +-936 +-1032 +-1086 +-1078 +-1016 +-914 +-797 +-681 +-565 +-437 +-278 +-92 +121 +335 +529 +689 +813 +909 +978 +1029 +1050 +1043 +999 +920 +811 +668 +506 +327 +142 +-33 +-202 +-358 +-516 +-671 +-819 +-950 +-1039 +-1079 +-1062 +-1003 +-921 +-835 +-743 +-633 +-492 +-311 +-100 +115 +311 +471 +596 +702 +809 +918 +1018 +1083 +1094 +1041 +942 +813 +675 +536 +391 +233 +54 +-142 +-343 +-527 +-678 +-793 +-884 +-950 +-990 +-1012 +-1008 +-976 +-915 +-818 +-686 +-525 +-341 +-146 +48 +225 +386 +534 +672 +813 +934 +1025 +1065 +1047 +988 +899 +810 +721 +623 +495 +326 +119 +-102 +-313 +-486 +-620 +-728 +-823 +-918 +-1001 +-1056 +-1061 +-1015 +-918 +-794 +-659 +-526 +-386 +-240 +-75 +107 +298 +484 +650 +791 +899 +972 +1013 +1025 +1007 +963 +893 +794 +663 +502 +318 +127 +-61 +-231 +-379 +-513 +-640 +-771 +-897 +-997 +-1056 +-1056 +-1005 +-919 +-819 +-716 +-608 +-481 +-319 +-122 +93 +300 +478 +615 +711 +797 +879 +957 +1017 +1039 +1009 +930 +810 +674 +529 +377 +221 +48 +-133 +-318 +-493 +-654 +-785 +-889 +-955 +-988 +-988 +-963 +-917 +-856 +-775 +-666 +-522 +-346 +-151 +48 +230 +386 +520 +647 +773 +894 +994 +1050 +1049 +991 +896 +787 +680 +575 +457 +311 +132 +-74 +-280 +-462 +-609 +-722 +-812 +-889 +-956 +-1005 +-1020 +-991 +-914 +-795 +-654 +-502 +-350 +-195 +-38 +121 +290 +458 +618 +759 +875 +956 +1001 +1008 +984 +934 +864 +774 +658 +514 +337 +136 +-67 +-252 +-403 +-529 +-637 +-740 +-847 +-944 +-1012 +-1027 +-988 +-903 +-797 +-685 +-577 +-457 +-314 +-137 +67 +275 +461 +614 +724 +808 +875 +930 +973 +987 +965 +902 +799 +671 +525 +370 +207 +38 +-127 +-294 +-453 +-608 +-750 +-868 +-951 +-990 +-987 +-948 +-890 +-819 +-740 +-646 +-521 +-361 +-175 +22 +211 +370 +504 +619 +730 +840 +938 +1007 +1028 +991 +905 +786 +659 +536 +413 +280 +120 +-58 +-250 +-430 +-584 +-703 +-791 +-859 +-912 +-953 +-974 +-959 +-903 +-805 +-676 +-525 +-360 +-195 +-30 +131 +285 +432 +573 +705 +822 +912 +965 +974 +942 +884 +813 +730 +635 +516 +361 +170 +-36 +-236 +-402 +-531 +-633 +-722 +-809 +-893 +-959 +-984 +-961 +-889 +-784 +-664 +-546 +-429 +-299 +-145 +32 +226 +416 +584 +715 +809 +875 +919 +941 +944 +920 +870 +782 +664 +519 +360 +196 +31 +-125 +-277 +-421 +-562 +-698 +-820 +-916 +-972 +-983 +-950 +-881 +-796 +-703 +-605 +-488 +-348 +-175 +18 +211 +383 +519 +625 +714 +801 +888 +961 +1001 +989 +924 +812 +677 +541 +406 +272 +127 +-38 +-218 +-396 +-558 +-686 +-779 +-848 +-891 +-919 +-928 +-910 +-867 +-790 +-682 +-546 +-384 +-206 +-27 +145 +299 +438 +562 +683 +797 +893 +955 +971 +942 +878 +796 +707 +615 +510 +377 +209 +15 +-189 +-374 +-525 +-634 +-722 +-798 +-869 +-926 +-957 +-948 +-888 +-786 +-663 +-530 +-400 +-272 +-134 +19 +185 +358 +525 +669 +783 +861 +906 +923 +918 +891 +844 +763 +659 +526 +372 +202 +26 +-139 +-288 +-420 +-541 +-654 +-767 +-869 +-945 +-974 +-954 +-890 +-799 +-693 +-593 +-484 +-357 +-202 +-20 +174 +356 +507 +619 +700 +770 +837 +898 +941 +947 +902 +813 +690 +551 +403 +260 +112 +-47 +-213 +-379 +-534 +-672 +-779 +-854 +-900 +-914 +-904 +-873 +-824 +-761 +-671 +-557 +-410 +-240 +-56 +125 +287 +426 +549 +661 +768 +869 +941 +972 +954 +890 +797 +689 +584 +478 +360 +216 +43 +-147 +-335 +-499 +-629 +-723 +-793 +-852 +-903 +-938 +-941 +-898 +-809 +-688 +-548 +-403 +-260 +-116 +28 +185 +341 +497 +641 +763 +857 +919 +946 +939 +906 +848 +771 +677 +557 +411 +240 +53 +-130 +-296 +-430 +-543 +-640 +-733 +-829 +-911 +-958 +-958 +-908 +-818 +-709 +-598 +-487 +-365 +-223 +-52 +139 +331 +501 +634 +728 +796 +850 +894 +922 +925 +892 +823 +713 +581 +432 +277 +121 +-34 +-192 +-348 +-499 +-641 +-764 +-858 +-917 +-939 +-926 +-882 +-821 +-744 +-660 +-560 +-429 +-272 +-92 +94 +269 +419 +543 +646 +743 +834 +914 +966 +967 +916 +820 +700 +575 +454 +337 +206 +52 +-124 +-307 +-478 +-617 +-723 +-798 +-854 +-899 +-928 +-931 +-902 +-830 +-722 +-588 +-436 +-277 +-114 +42 +192 +337 +474 +606 +725 +827 +901 +937 +933 +893 +828 +749 +663 +560 +430 +269 +81 +-110 +-294 +-446 +-566 +-660 +-741 +-818 +-891 +-941 +-953 +-917 +-834 +-723 +-600 +-477 +-356 +-222 +-67 +108 +293 +472 +622 +735 +816 +864 +895 +909 +902 +872 +810 +713 +590 +446 +288 +127 +-34 +-187 +-334 +-475 +-607 +-731 +-833 +-910 +-950 +-945 +-899 +-824 +-732 +-635 +-533 +-418 +-273 +-102 +83 +267 +429 +558 +653 +738 +818 +892 +949 +968 +934 +852 +733 +598 +463 +329 +195 +45 +-117 +-288 +-458 +-605 +-717 +-801 +-855 +-889 +-904 +-898 +-869 +-812 +-723 +-603 +-456 +-292 +-116 +54 +215 +361 +492 +615 +727 +827 +903 +946 +947 +907 +833 +744 +645 +542 +424 +279 +109 +-82 +-274 +-447 +-585 +-684 +-760 +-824 +-877 +-921 +-940 +-913 +-841 +-729 +-596 +-458 +-327 +-194 +-50 +104 +278 +451 +608 +737 +830 +889 +917 +922 +904 +864 +797 +705 +589 +447 +286 +115 +-59 +-221 +-365 +-492 +-609 +-719 +-821 +-905 +-958 +-966 +-928 +-846 +-740 +-628 +-516 +-399 +-263 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1295.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1295.samples new file mode 100644 index 00000000..cb2d1edc --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1295.samples @@ -0,0 +1,4096 @@ +-134 +-138 +-1 +298 +667 +961 +1074 +1018 +897 +804 +776 +791 +820 +825 +758 +589 +320 +2 +-289 +-470 +-535 +-540 +-555 +-633 +-787 +-999 +-1185 +-1243 +-1092 +-765 +-425 +-229 +-224 +-309 +-332 +-190 +128 +515 +839 +997 +955 +801 +673 +682 +835 +1017 +1082 +950 +660 +329 +52 +-137 +-246 +-300 +-337 +-418 +-579 +-803 +-1013 +-1132 +-1126 +-1011 +-835 +-651 +-518 +-475 +-492 +-487 +-352 +-45 +363 +718 +884 +847 +719 +630 +670 +837 +1048 +1178 +1128 +866 +497 +177 +26 +30 +64 +1 +-204 +-506 +-805 +-1015 +-1098 +-1052 +-920 +-774 +-687 +-677 +-713 +-707 +-602 +-399 +-131 +155 +419 +596 +650 +611 +570 +636 +836 +1075 +1221 +1173 +940 +612 +312 +145 +120 +175 +174 +11 +-327 +-724 +-1004 +-1066 +-947 +-782 +-700 +-745 +-864 +-971 +-978 +-837 +-558 +-214 +82 +267 +343 +373 +426 +533 +689 +864 +1022 +1124 +1111 +960 +722 +504 +389 +392 +419 +366 +172 +-148 +-513 +-816 +-946 +-891 +-730 +-612 +-649 +-831 +-1032 +-1094 +-938 +-625 +-283 +-31 +88 +107 +105 +172 +361 +650 +935 +1102 +1107 +998 +852 +728 +643 +595 +568 +531 +437 +241 +-53 +-375 +-628 +-745 +-735 +-676 +-657 +-730 +-888 +-1072 +-1169 +-1086 +-802 +-433 +-142 +-30 +-72 +-121 +-51 +183 +520 +843 +1042 +1062 +947 +790 +695 +716 +811 +877 +810 +598 +308 +21 +-213 +-382 +-479 +-513 +-525 +-574 +-697 +-872 +-1022 +-1074 +-996 +-811 +-581 +-375 +-258 +-238 +-255 +-201 +8 +360 +740 +984 +1018 +891 +735 +664 +716 +847 +961 +950 +765 +441 +92 +-151 +-242 +-232 +-240 +-344 +-541 +-771 +-960 +-1066 +-1074 +-982 +-824 +-659 +-548 +-506 +-494 +-446 +-312 +-91 +195 +495 +736 +846 +814 +709 +653 +727 +904 +1058 +1067 +885 +567 +237 +7 +-77 +-50 +-15 +-85 +-310 +-638 +-929 +-1061 +-1006 +-851 +-712 +-650 +-664 +-701 +-695 +-609 +-419 +-146 +146 +385 +531 +588 +602 +623 +677 +775 +899 +1013 +1047 +939 +696 +399 +175 +96 +124 +141 +49 +-190 +-521 +-834 +-1021 +-1014 +-861 +-685 +-615 +-694 +-848 +-934 +-850 +-593 +-261 +26 +206 +286 +314 +348 +437 +603 +809 +980 +1048 +998 +868 +708 +547 +415 +333 +303 +275 +181 +-31 +-337 +-639 +-824 +-845 +-751 +-642 +-616 +-707 +-858 +-981 +-956 +-737 +-381 +-35 +160 +182 +126 +130 +262 +510 +780 +975 +1040 +968 +819 +668 +581 +571 +593 +572 +453 +245 +-4 +-254 +-475 +-628 +-691 +-670 +-629 +-650 +-764 +-927 +-1037 +-1010 +-831 +-556 +-279 +-92 +-33 +-56 +-62 +52 +321 +667 +941 +1034 +940 +764 +629 +602 +665 +747 +765 +658 +419 +111 +-165 +-329 +-382 +-385 +-419 +-519 +-669 +-833 +-959 +-1018 +-976 +-829 +-614 +-402 +-269 +-225 +-212 +-157 +-4 +241 +528 +781 +920 +904 +778 +653 +631 +736 +883 +943 +834 +563 +232 +-48 +-201 +-237 +-217 +-230 +-354 +-586 +-851 +-1031 +-1061 +-952 +-789 +-655 +-573 +-533 +-506 +-454 +-338 +-138 +127 +401 +606 +701 +700 +651 +627 +662 +755 +874 +948 +901 +704 +403 +118 +-44 +-63 +-28 +-55 +-214 +-481 +-776 +-985 +-1040 +-934 +-743 +-590 +-550 +-619 +-699 +-675 +-505 +-224 +74 +310 +455 +518 +537 +558 +617 +735 +875 +979 +988 +884 +711 +504 +314 +182 +125 +115 +77 +-61 +-322 +-634 +-880 +-968 +-892 +-747 +-641 +-635 +-720 +-820 +-835 +-692 +-397 +-47 +226 +337 +314 +270 +306 +456 +671 +864 +972 +962 +850 +684 +528 +427 +388 +370 +305 +163 +-51 +-292 +-529 +-716 +-813 +-800 +-716 +-646 +-659 +-764 +-883 +-908 +-784 +-524 +-214 +41 +178 +198 +168 +193 +348 +621 +903 +1059 +1031 +867 +682 +573 +558 +597 +618 +561 +389 +118 +-176 +-410 +-538 +-581 +-588 +-617 +-682 +-776 +-873 +-938 +-934 +-827 +-621 +-370 +-160 +-55 +-40 +-41 +29 +207 +464 +735 +931 +979 +880 +708 +585 +585 +684 +770 +722 +510 +189 +-121 +-333 +-420 +-427 +-410 +-450 +-583 +-782 +-965 +-1043 +-981 +-827 +-650 +-500 +-386 +-307 +-245 +-165 +-37 +167 +424 +674 +831 +870 +813 +729 +685 +711 +798 +886 +886 +737 +449 +111 +-142 +-242 +-227 +-211 +-291 +-490 +-748 +-964 +-1059 +-1002 +-829 +-638 +-510 +-492 +-530 +-535 +-431 +-211 +59 +314 +507 +629 +685 +693 +689 +717 +793 +887 +933 +882 +723 +492 +241 +37 +-76 +-101 +-99 +-167 +-352 +-640 +-921 +-1068 +-1040 +-881 +-712 +-622 +-633 +-696 +-718 +-625 +-386 +-52 +260 +455 +505 +480 +479 +560 +712 +876 +991 +1022 +958 +811 +617 +432 +294 +219 +168 +77 +-71 +-281 +-519 +-737 +-882 +-911 +-823 +-695 +-624 +-664 +-778 +-850 +-788 +-562 +-242 +68 +279 +356 +348 +337 +415 +610 +857 +1043 +1074 +944 +742 +566 +470 +440 +423 +376 +256 +53 +-209 +-469 +-667 +-766 +-782 +-764 +-755 +-778 +-830 +-885 +-908 +-850 +-674 +-402 +-114 +86 +160 +155 +170 +280 +499 +771 +999 +1095 +1029 +846 +655 +553 +569 +630 +621 +472 +191 +-124 +-380 +-524 +-567 +-559 +-555 +-612 +-732 +-878 +-985 +-985 +-874 +-695 +-497 +-314 +-168 +-59 +17 +97 +233 +446 +705 +920 +1011 +955 +816 +682 +620 +646 +719 +747 +652 +404 +60 +-256 +-437 +-465 +-425 +-437 +-556 +-764 +-970 +-1089 +-1074 +-937 +-735 +-548 +-430 +-385 +-361 +-287 +-122 +114 +370 +599 +768 +863 +880 +830 +767 +744 +786 +847 +846 +734 +507 +220 +-43 +-217 +-277 +-262 +-265 +-375 +-613 +-896 +-1100 +-1122 +-978 +-764 +-596 +-531 +-538 +-547 +-480 +-298 +-15 +299 +546 +666 +680 +659 +678 +749 +847 +929 +965 +933 +823 +629 +388 +162 +6 +-67 +-111 +-187 +-338 +-556 +-792 +-980 +-1052 +-980 +-812 +-655 +-605 +-669 +-752 +-737 +-553 +-232 +120 +390 +529 +549 +528 +546 +657 +838 +1009 +1073 +989 +803 +597 +441 +343 +278 +215 +127 +-12 +-214 +-462 +-702 +-874 +-941 +-912 +-840 +-777 +-753 +-775 +-806 +-783 +-644 +-373 +-37 +245 +380 +384 +350 +390 +548 +785 +1011 +1129 +1090 +919 +692 +517 +452 +464 +466 +366 +140 +-148 +-413 +-602 +-706 +-744 +-746 +-746 +-777 +-849 +-929 +-960 +-893 +-727 +-492 +-241 +-19 +138 +218 +250 +303 +443 +671 +917 +1063 +1050 +903 +715 +582 +552 +598 +633 +575 +367 +41 +-303 +-546 +-633 +-610 +-585 +-638 +-775 +-934 +-1039 +-1042 +-939 +-756 +-543 +-351 +-219 +-134 +-68 +39 +202 +409 +627 +817 +956 +1000 +941 +818 +707 +675 +724 +764 +708 +512 +208 +-109 +-347 +-455 +-457 +-430 +-473 +-639 +-888 +-1104 +-1168 +-1047 +-817 +-592 +-456 +-404 +-373 +-310 +-171 +50 +311 +551 +719 +793 +793 +775 +774 +796 +829 +858 +860 +797 +639 +388 +94 +-150 +-276 +-304 +-316 +-396 +-574 +-814 +-1029 +-1132 +-1076 +-890 +-667 +-528 +-519 +-574 +-581 +-443 +-156 +183 +469 +635 +679 +669 +663 +709 +813 +936 +1012 +984 +853 +662 +470 +300 +155 +36 +-57 +-148 +-275 +-470 +-714 +-941 +-1062 +-1040 +-914 +-761 +-658 +-638 +-673 +-683 +-593 +-357 +-18 +306 +499 +531 +478 +465 +563 +761 +970 +1097 +1087 +949 +740 +533 +391 +319 +271 +188 +20 +-212 +-449 +-647 +-792 +-875 +-894 +-858 +-797 +-762 +-782 +-831 +-831 +-726 +-503 +-209 +82 +293 +391 +401 +399 +473 +660 +915 +1106 +1132 +990 +765 +579 +494 +494 +506 +449 +276 +-2 +-323 +-589 +-733 +-761 +-733 +-733 +-784 +-864 +-927 +-937 +-882 +-761 +-574 +-342 +-116 +46 +136 +188 +263 +402 +603 +828 +1017 +1095 +1033 +863 +672 +564 +578 +636 +624 +459 +155 +-190 +-460 +-597 +-618 +-587 +-591 +-682 +-855 +-1030 +-1109 +-1035 +-841 +-612 +-424 +-297 +-204 +-114 +-6 +134 +322 +537 +747 +901 +959 +928 +850 +776 +738 +745 +766 +744 +615 +358 +19 +-293 +-468 +-494 +-451 +-460 +-581 +-792 +-1001 +-1113 +-1079 +-908 +-679 +-494 +-412 +-415 +-408 +-304 +-78 +225 +505 +702 +804 +834 +827 +808 +806 +832 +871 +880 +814 +659 +440 +198 +-22 +-184 +-275 +-312 +-361 +-492 +-712 +-963 +-1127 +-1130 +-979 +-770 +-603 +-536 +-547 +-558 +-491 +-289 +20 +355 +595 +688 +666 +627 +660 +776 +920 +1017 +1017 +918 +741 +529 +321 +159 +56 +-17 +-106 +-247 +-434 +-639 +-826 +-962 +-1007 +-950 +-826 +-707 +-662 +-696 +-732 +-672 +-472 +-158 +174 +432 +558 +573 +542 +557 +675 +872 +1055 +1114 +1006 +784 +557 +408 +343 +312 +258 +134 +-68 +-322 +-574 +-769 +-866 +-873 +-837 +-807 +-804 +-820 +-829 +-813 +-739 +-576 +-327 +-36 +212 +347 +380 +390 +454 +606 +819 +1015 +1110 +1058 +877 +647 +473 +423 +458 +474 +367 +116 +-204 +-490 +-665 +-728 +-719 +-703 +-730 +-812 +-922 +-995 +-971 +-834 +-620 +-392 +-193 +-27 +95 +190 +273 +377 +538 +746 +941 +1049 +1025 +895 +738 +624 +588 +607 +616 +538 +324 +-2 +-338 +-563 +-627 +-585 +-549 +-610 +-770 +-959 +-1078 +-1070 +-932 +-714 +-488 +-321 +-232 +-184 +-107 +44 +265 +506 +709 +847 +913 +917 +863 +780 +717 +708 +733 +733 +638 +435 +158 +-121 +-330 +-437 +-454 +-453 +-517 +-682 +-920 +-1113 +-1152 +-1015 +-776 +-551 +-422 +-384 +-378 +-321 +-169 +81 +378 +631 +770 +794 +757 +729 +755 +822 +880 +891 +842 +717 +527 +292 +60 +-120 +-217 +-266 +-331 +-452 +-635 +-840 +-1008 +-1082 +-1027 +-863 +-673 +-547 +-524 +-554 +-536 +-385 +-97 +238 +513 +667 +696 +659 +631 +674 +799 +945 +1021 +964 +784 +558 +361 +227 +137 +60 +-37 +-175 +-358 +-576 +-790 +-943 +-1000 +-960 +-866 +-773 +-715 +-690 +-677 +-637 +-510 +-276 +35 +329 +510 +555 +522 +515 +599 +772 +961 +1070 +1049 +894 +662 +448 +323 +295 +292 +223 +34 +-240 +-517 +-724 +-830 +-856 +-837 +-808 +-800 +-821 +-849 +-844 +-764 +-592 +-359 +-107 +118 +280 +372 +411 +448 +537 +705 +908 +1054 +1068 +940 +741 +568 +477 +468 +474 +414 +241 +-51 +-379 +-643 +-768 +-757 +-702 +-692 +-767 +-886 +-973 +-974 +-870 +-684 +-455 +-237 +-69 +34 +107 +194 +326 +502 +688 +851 +961 +991 +930 +802 +669 +595 +594 +613 +567 +395 +117 +-196 +-453 +-592 +-621 +-597 +-601 +-691 +-861 +-1031 +-1097 +-995 +-765 +-510 +-319 +-221 +-175 +-123 +-15 +166 +397 +630 +806 +883 +876 +826 +783 +768 +774 +775 +747 +660 +499 +260 +-20 +-264 +-415 +-462 +-472 +-519 +-643 +-824 +-995 +-1082 +-1041 +-869 +-639 +-446 +-355 +-353 +-351 +-257 +-32 +266 +548 +727 +787 +762 +718 +706 +755 +845 +912 +897 +773 +568 +340 +138 +-20 +-143 +-238 +-331 +-444 +-598 +-784 +-951 +-1041 +-1013 +-883 +-716 +-581 +-512 +-498 +-488 +-415 +-228 +55 +362 +587 +667 +639 +593 +617 +735 +894 +1008 +1011 +886 +665 +428 +242 +139 +90 +30 +-98 +-305 +-537 +-738 +-867 +-922 +-913 +-853 +-775 +-707 +-675 +-670 +-640 +-533 +-337 +-79 +180 +382 +495 +521 +512 +536 +650 +840 +1012 +1067 +966 +753 +528 +372 +311 +297 +254 +120 +-113 +-404 +-667 +-818 +-843 +-788 +-733 +-730 +-775 +-821 +-824 +-757 +-622 +-431 +-208 +4 +168 +268 +324 +382 +483 +632 +801 +946 +1011 +965 +820 +632 +484 +432 +446 +437 +317 +68 +-245 +-523 +-692 +-736 +-695 +-649 +-668 +-768 +-895 +-964 +-906 +-725 +-485 +-270 +-122 +-36 +32 +114 +233 +397 +587 +770 +897 +941 +902 +815 +721 +649 +613 +594 +547 +429 +217 +-68 +-346 +-537 +-598 +-573 +-551 +-601 +-737 +-899 +-1001 +-985 +-837 +-610 +-384 +-240 +-194 +-185 +-129 +32 +274 +533 +727 +825 +835 +798 +750 +724 +735 +758 +754 +680 +517 +300 +67 +-144 +-301 +-401 +-448 +-485 +-565 +-702 +-873 +-997 +-1006 +-885 +-692 +-504 +-386 +-347 +-343 +-301 +-156 +89 +386 +633 +757 +754 +691 +660 +706 +806 +891 +903 +810 +627 +397 +183 +23 +-75 +-140 +-220 +-344 +-510 +-684 +-825 +-912 +-933 +-874 +-760 +-633 +-543 +-512 +-504 +-454 +-305 +-67 +209 +446 +591 +630 +603 +582 +630 +759 +908 +985 +916 +720 +474 +272 +157 +109 +71 +-18 +-181 +-401 +-630 +-800 +-870 +-849 +-785 +-729 +-707 +-705 +-695 +-654 +-562 +-411 +-199 +46 +261 +407 +469 +487 +521 +612 +756 +898 +985 +959 +814 +601 +403 +291 +272 +277 +209 +25 +-246 +-517 +-706 +-780 +-760 +-702 +-672 +-704 +-776 +-834 +-816 +-692 +-487 +-266 +-75 +64 +165 +246 +326 +426 +558 +717 +861 +938 +919 +816 +672 +540 +456 +423 +399 +333 +177 +-74 +-357 +-579 +-677 +-661 +-605 +-599 +-679 +-807 +-911 +-922 +-811 +-603 +-365 +-170 +-60 +-16 +26 +130 +306 +519 +709 +834 +876 +852 +788 +711 +648 +618 +605 +565 +461 +281 +53 +-183 +-371 +-488 +-527 +-528 +-548 +-630 +-776 +-918 +-970 +-886 +-696 +-475 +-305 +-221 +-192 +-158 +-55 +139 +397 +642 +799 +832 +774 +700 +677 +705 +748 +757 +696 +558 +366 +152 +-43 +-188 +-278 +-333 +-400 +-502 +-640 +-784 +-897 +-947 +-903 +-777 +-604 +-453 +-368 +-345 +-319 +-220 +-22 +247 +503 +677 +732 +702 +642 +632 +700 +813 +888 +853 +696 +464 +238 +78 +-13 +-67 +-133 +-244 +-404 +-591 +-762 +-870 +-895 +-848 +-762 +-677 +-611 +-565 +-522 +-458 +-342 +-155 +88 +334 +518 +595 +590 +571 +596 +688 +816 +913 +913 +794 +584 +359 +196 +129 +117 +76 +-52 +-270 +-517 +-720 +-825 +-835 +-782 +-720 +-690 +-696 +-716 +-703 +-618 +-456 +-245 +-31 +159 +301 +392 +450 +493 +560 +669 +803 +905 +918 +823 +655 +476 +343 +281 +260 +224 +113 +-94 +-362 +-609 +-748 +-762 +-703 +-650 +-667 +-742 +-820 +-835 +-750 +-572 +-338 +-115 +47 +139 +191 +255 +363 +512 +670 +795 +867 +872 +815 +710 +593 +503 +458 +431 +369 +235 +22 +-228 +-456 +-607 +-660 +-639 +-609 +-632 +-727 +-851 +-919 +-865 +-688 +-448 +-230 +-96 +-36 +-2 +67 +206 +406 +621 +784 +849 +821 +747 +678 +647 +641 +631 +592 +498 +344 +143 +-81 +-277 +-419 +-493 +-522 +-557 +-628 +-740 +-851 +-919 +-894 +-765 +-563 +-361 +-222 +-173 +-165 +-112 +32 +266 +514 +706 +791 +775 +707 +655 +658 +715 +772 +758 +645 +444 +214 +15 +-127 +-219 +-288 +-365 +-463 +-592 +-733 +-854 +-915 +-889 +-788 +-650 +-517 +-418 +-357 +-311 +-236 +-94 +127 +380 +591 +699 +694 +635 +603 +642 +738 +830 +852 +762 +572 +335 +130 +5 +-48 +-87 +-177 +-341 +-544 +-731 +-849 +-884 +-848 +-769 +-680 +-607 +-565 +-532 +-479 +-371 +-201 +14 +230 +410 +525 +576 +577 +583 +639 +747 +861 +906 +838 +661 +446 +263 +155 +109 +76 +-3 +-170 +-409 +-649 +-812 +-860 +-807 +-722 +-669 +-667 +-696 +-697 +-633 +-494 +-294 +-74 +121 +259 +337 +383 +438 +523 +640 +763 +862 +901 +858 +740 +575 +419 +319 +271 +233 +136 +-46 +-290 +-531 +-702 +-771 +-750 +-684 +-645 +-674 +-752 +-816 +-790 +-646 +-418 +-183 +-1 +104 +162 +215 +305 +444 +614 +772 +870 +879 +817 +717 +623 +554 +504 +457 +386 +269 +91 +-134 +-367 +-549 +-642 +-657 +-638 +-648 +-707 +-796 +-863 +-853 +-737 +-531 +-298 +-115 +-22 +2 +26 +119 +298 +524 +721 +834 +848 +790 +711 +655 +640 +653 +640 +556 +388 +171 +-50 +-236 +-369 +-456 +-504 +-546 +-605 +-697 +-802 +-878 +-881 +-789 +-625 +-443 +-293 +-201 +-153 +-103 +-5 +171 +409 +634 +776 +799 +741 +666 +645 +684 +745 +768 +700 +535 +302 +70 +-109 +-214 +-267 +-322 +-420 +-559 +-709 +-827 +-881 +-866 +-788 +-669 +-540 +-437 +-375 +-331 +-259 +-128 +65 +289 +495 +638 +700 +689 +656 +650 +704 +793 +849 +805 +642 +411 +188 +25 +-58 +-99 +-156 +-268 +-447 +-652 +-821 +-895 +-866 +-773 +-677 +-617 +-589 +-564 +-510 +-408 +-246 +-46 +169 +353 +478 +538 +558 +588 +647 +736 +824 +874 +848 +731 +542 +337 +179 +96 +59 +3 +-128 +-334 +-559 +-737 +-827 +-816 +-746 +-666 +-631 +-652 +-692 +-682 +-581 +-389 +-154 +55 +207 +301 +367 +430 +510 +619 +741 +849 +890 +848 +737 +591 +461 +359 +284 +221 +136 +2 +-193 +-420 +-621 +-737 +-748 +-700 +-656 +-661 +-713 +-771 +-776 +-692 +-515 +-284 +-62 +88 +157 +189 +245 +374 +551 +729 +846 +881 +839 +748 +639 +552 +500 +465 +407 +290 +112 +-100 +-301 +-461 +-566 +-613 +-622 +-626 +-659 +-735 +-812 +-841 +-770 +-604 +-393 +-203 +-70 +9 +59 +130 +258 +449 +656 +817 +868 +814 +715 +636 +611 +621 +622 +565 +438 +243 +20 +-190 +-338 +-420 +-463 +-505 +-579 +-681 +-780 +-842 +-848 +-792 +-669 +-510 +-351 +-235 +-170 +-118 +-28 +128 +338 +553 +718 +798 +785 +723 +658 +642 +681 +722 +698 +564 +349 +114 +-80 +-197 +-256 +-297 +-365 +-478 +-629 +-777 +-872 +-879 +-805 +-689 +-575 +-491 +-426 +-356 +-268 +-144 +27 +231 +441 +601 +679 +683 +658 +654 +686 +739 +778 +764 +665 +485 +262 +63 +-62 +-114 +-148 +-228 +-383 +-574 +-750 +-855 +-867 +-807 +-709 +-619 +-571 +-558 +-540 +-465 +-309 +-95 +127 +310 +439 +516 +562 +593 +635 +700 +781 +834 +816 +715 +554 +378 +231 +128 +56 +-5 +-95 +-245 +-448 +-655 +-796 +-829 +-773 +-690 +-637 +-637 +-658 +-655 +-588 +-436 +-222 +12 +206 +318 +362 +392 +463 +575 +709 +814 +854 +833 +746 +617 +481 +369 +294 +238 +157 +21 +-159 +-358 +-533 +-656 +-715 +-715 +-676 +-645 +-664 +-714 +-748 +-702 +-555 +-339 +-116 +58 +164 +225 +275 +352 +485 +651 +801 +872 +840 +734 +617 +534 +493 +463 +410 +309 +156 +-39 +-246 +-426 +-544 +-596 +-612 +-631 +-672 +-730 +-775 +-790 +-745 +-630 +-455 +-255 +-90 +11 +60 +113 +217 +384 +576 +739 +823 +820 +754 +657 +584 +566 +581 +567 +474 +287 +61 +-147 +-296 +-388 +-447 +-489 +-550 +-637 +-738 +-825 +-853 +-798 +-674 +-525 +-386 +-275 +-188 +-107 +-15 +103 +268 +458 +634 +740 +750 +701 +645 +628 +643 +671 +662 +583 +430 +209 +-14 +-182 +-271 +-304 +-345 +-440 +-585 +-733 +-832 +-855 +-802 +-700 +-577 +-472 +-401 +-358 +-302 +-191 +-20 +182 +369 +514 +607 +649 +655 +647 +651 +688 +736 +744 +672 +516 +318 +133 +-9 +-95 +-152 +-217 +-320 +-474 +-653 +-802 +-856 +-803 +-695 +-593 +-534 +-512 +-492 +-431 +-312 +-137 +72 +273 +416 +488 +513 +537 +590 +672 +753 +793 +784 +718 +598 +440 +273 +142 +64 +2 +-83 +-223 +-402 +-577 +-714 +-777 +-770 +-705 +-623 +-576 +-580 +-599 +-575 +-461 +-260 +-32 +158 +286 +351 +393 +437 +515 +631 +754 +840 +835 +748 +616 +494 +400 +331 +260 +169 +50 +-104 +-289 +-478 +-627 +-697 +-694 +-664 +-642 +-649 +-667 +-674 +-643 +-553 +-392 +-190 +6 +143 +201 +230 +284 +406 +571 +722 +814 +825 +767 +659 +546 +469 +430 +407 +339 +193 +-8 +-214 +-380 +-490 +-555 +-589 +-608 +-629 +-672 +-726 +-762 +-735 +-629 +-472 +-300 +-155 +-44 +36 +105 +187 +302 +464 +638 +767 +799 +742 +650 +576 +550 +548 +529 +461 +326 +132 +-86 +-279 +-395 +-442 +-454 +-493 +-582 +-690 +-770 +-795 +-759 +-670 +-544 +-406 +-286 +-203 +-143 +-66 +54 +221 +400 +554 +664 +714 +710 +667 +616 +599 +613 +627 +580 +443 +245 +37 +-133 +-240 +-297 +-338 +-399 +-496 +-631 +-761 +-831 +-808 +-697 +-562 +-459 +-402 +-360 +-297 +-205 +-64 +108 +301 +471 +578 +618 +615 +622 +649 +689 +718 +707 +654 +540 +375 +186 +14 +-96 +-155 +-197 +-280 +-417 +-574 +-708 +-784 +-785 +-716 +-613 +-526 +-480 +-474 +-460 +-381 +-215 +7 +212 +362 +448 +492 +522 +557 +619 +696 +767 +782 +719 +593 +440 +298 +191 +100 +20 +-69 +-178 +-313 +-476 +-631 +-728 +-737 +-683 +-613 +-576 +-571 +-575 +-553 +-480 +-337 +-139 +78 +246 +338 +369 +389 +460 +576 +704 +786 +804 +749 +638 +506 +384 +300 +253 +196 +96 +-59 +-241 +-411 +-536 +-613 +-646 +-648 +-627 +-616 +-631 +-658 +-656 +-583 +-433 +-243 +-61 +83 +177 +242 +296 +370 +489 +641 +771 +822 +774 +656 +539 +463 +427 +397 +339 +232 +72 +-123 +-314 +-455 +-523 +-536 +-538 +-574 +-641 +-705 +-734 +-711 +-638 +-517 +-361 +-199 +-67 +24 +85 +161 +285 +441 +600 +713 +767 +757 +689 +603 +529 +503 +508 +490 +388 +207 +-9 +-200 +-324 +-393 +-428 +-460 +-517 +-609 +-716 +-795 +-796 +-707 +-568 +-425 +-319 +-247 +-172 +-85 +29 +170 +337 +505 +634 +696 +688 +647 +615 +607 +609 +609 +567 +477 +327 +134 +-59 +-204 +-272 +-296 +-338 +-430 +-567 +-705 +-791 +-804 +-737 +-622 +-503 +-409 +-360 +-331 +-267 +-138 +52 +258 +421 +525 +575 +597 +603 +608 +633 +671 +690 +658 +552 +394 +229 +87 +-27 +-110 +-182 +-252 +-352 +-493 +-648 +-764 +-800 +-746 +-644 +-560 +-510 +-492 +-470 +-406 +-278 +-95 +119 +311 +433 +474 +476 +499 +567 +658 +730 +748 +707 +608 +478 +334 +209 +122 +60 +-7 +-119 +-269 +-435 +-579 +-676 +-725 +-714 +-665 +-611 +-578 +-579 +-576 +-527 +-396 +-203 +9 +184 +294 +353 +388 +430 +506 +618 +735 +804 +778 +670 +531 +416 +344 +300 +244 +156 +20 +-153 +-337 +-499 +-598 +-634 +-627 +-616 +-631 +-659 +-676 +-659 +-593 +-486 +-322 +-136 +31 +148 +210 +256 +328 +445 +588 +712 +781 +777 +707 +602 +496 +435 +414 +394 +327 +177 +-30 +-234 +-386 +-478 +-513 +-532 +-558 +-604 +-674 +-735 +-745 +-681 +-545 +-386 +-240 +-124 +-35 +45 +134 +237 +362 +508 +646 +733 +743 +688 +616 +565 +541 +527 +499 +429 +297 +109 +-100 +-277 +-376 +-405 +-421 +-468 +-566 +-685 +-766 +-784 +-727 +-613 +-472 +-345 +-252 +-194 +-141 +-43 +104 +280 +445 +564 +629 +652 +643 +620 +601 +599 +612 +598 +530 +393 +208 +30 +-120 +-223 +-285 +-337 +-400 +-508 +-639 +-761 +-815 +-771 +-656 +-527 +-434 +-383 +-353 +-302 +-202 +-43 +148 +336 +478 +547 +558 +554 +577 +627 +681 +706 +678 +599 +474 +322 +164 +32 +-56 +-124 +-195 +-304 +-444 +-589 +-703 +-761 +-754 +-688 +-594 +-516 +-478 +-465 +-439 +-346 +-180 +29 +223 +357 +430 +457 +473 +518 +597 +693 +764 +760 +676 +538 +395 +282 +201 +133 +48 +-59 +-198 +-359 +-512 +-632 +-692 +-688 +-647 +-608 +-587 +-580 +-564 +-523 +-436 +-293 +-106 +82 +227 +308 +342 +373 +445 +563 +686 +773 +786 +722 +606 +474 +372 +316 +286 +230 +109 +-70 +-264 +-432 +-540 +-592 +-605 +-604 +-607 +-625 +-652 +-662 +-623 +-521 +-370 +-206 +-58 +57 +142 +210 +276 +369 +492 +630 +740 +779 +736 +638 +540 +471 +437 +409 +353 +241 +65 +-141 +-332 +-458 +-506 +-508 +-518 +-566 +-647 +-722 +-745 +-703 +-600 +-464 +-317 +-194 +-102 +-36 +38 +147 +285 +441 +576 +670 +710 +700 +652 +593 +549 +537 +527 +480 +368 +187 +-12 +-191 +-315 +-382 +-416 +-449 +-512 +-615 +-726 +-791 +-772 +-669 +-529 +-399 +-312 +-264 +-213 +-132 +-2 +163 +347 +501 +600 +635 +628 +617 +618 +634 +645 +626 +565 +452 +298 +123 +-41 +-158 +-228 +-274 +-335 +-436 +-566 +-685 +-763 +-767 +-703 +-591 +-482 +-405 +-372 +-348 +-282 +-146 +52 +254 +412 +505 +540 +547 +560 +597 +657 +714 +724 +661 +534 +377 +228 +110 +20 +-58 +-141 +-240 +-363 +-506 +-634 +-716 +-729 +-683 +-611 +-547 +-510 +-491 +-462 +-394 +-269 +-89 +118 +295 +403 +446 +457 +491 +564 +667 +750 +775 +723 +604 +455 +318 +227 +171 +119 +31 +-106 +-277 +-444 +-570 +-642 +-664 +-649 +-621 +-599 +-595 +-597 +-574 +-500 +-367 +-190 +-10 +138 +244 +308 +354 +414 +507 +623 +737 +791 +759 +651 +519 +409 +340 +304 +258 +167 +20 +-169 +-357 +-499 +-569 +-580 +-571 +-582 +-624 +-674 +-700 +-676 +-595 +-466 +-304 +-146 +-14 +82 +155 +230 +329 +455 +588 +695 +749 +739 +673 +578 +494 +445 +423 +395 +311 +157 +-41 +-236 +-382 +-463 +-489 +-499 +-532 +-599 +-687 +-753 +-752 +-669 +-530 +-377 +-252 +-164 +-94 +-20 +82 +218 +376 +527 +639 +696 +689 +649 +604 +570 +553 +534 +492 +402 +263 +86 +-96 +-240 +-327 +-365 +-394 +-454 +-556 +-671 +-760 +-780 +-721 +-602 +-461 +-345 +-273 +-230 +-173 +-64 +101 +293 +459 +570 +616 +616 +601 +595 +608 +632 +640 +600 +502 +353 +188 +38 +-81 +-166 +-233 +-298 +-385 +-501 +-627 +-726 +-763 +-724 +-631 +-523 +-444 +-399 +-365 +-310 +-201 +-34 +167 +357 +486 +539 +540 +534 +560 +620 +684 +710 +671 +570 +425 +271 +147 +59 +-2 +-586 +-501 +-435 +-385 +-329 +-250 +-126 +40 +226 +387 +497 +541 +545 +549 +577 +636 +693 +705 +655 +538 +376 +219 +95 +16 +-41 +-113 +-228 +-377 +-531 +-649 +-707 +-702 +-656 +-596 +-548 +-522 +-501 +-460 +-371 +-233 +-62 +112 +260 +361 +425 +468 +510 +567 +644 +717 +745 +706 +599 +456 +319 +217 +149 +94 +20 +-100 +-264 +-436 +-578 +-651 +-655 +-620 +-587 +-583 +-600 +-607 +-574 +-480 +-334 +-160 +7 +138 +226 +285 +341 +422 +524 +627 +709 +738 +708 +628 +524 +421 +342 +286 +232 +144 +7 +-169 +-345 +-482 +-562 +-583 +-574 +-564 +-586 +-629 +-669 +-660 +-577 +-434 +-263 +-111 +3 +76 +141 +219 +329 +464 +594 +689 +721 +690 +617 +542 +485 +448 +412 +353 +255 +113 +-56 +-222 +-361 +-446 +-482 +-503 +-534 +-592 +-660 +-708 +-704 +-637 +-510 +-357 +-216 +-115 +-52 +5 +89 +221 +382 +535 +639 +677 +658 +610 +564 +542 +539 +527 +476 +366 +208 +35 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1466.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1466.samples new file mode 100644 index 00000000..6acd1247 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1466.samples @@ -0,0 +1,4096 @@ +-117 +-86 +-34 +24 +73 +101 +114 +126 +144 +168 +176 +164 +143 +124 +111 +103 +81 +40 +-10 +-54 +-86 +-112 +-138 +-169 +-192 +-194 +-179 +-149 +-126 +-114 +-104 +-83 +-43 +6 +50 +76 +94 +119 +150 +185 +204 +195 +167 +131 +107 +84 +59 +24 +-20 +-54 +-76 +-91 +-114 +-148 +-180 +-196 +-189 +-168 +-144 +-128 +-108 +-77 +-28 +29 +74 +97 +106 +117 +136 +165 +184 +181 +167 +148 +128 +113 +85 +40 +-14 +-62 +-93 +-112 +-130 +-154 +-174 +-178 +-164 +-141 +-122 +-118 +-112 +-91 +-50 +9 +59 +94 +115 +134 +162 +185 +198 +188 +159 +129 +109 +96 +78 +44 +4 +-36 +-67 +-93 +-120 +-154 +-184 +-196 +-188 +-162 +-133 +-114 +-98 +-72 +-34 +17 +58 +80 +92 +107 +135 +172 +196 +196 +177 +150 +125 +105 +77 +36 +-12 +-57 +-83 +-101 +-118 +-139 +-164 +-181 +-179 +-165 +-150 +-137 +-126 +-100 +-56 +3 +56 +90 +107 +118 +138 +162 +178 +175 +155 +130 +115 +106 +90 +59 +11 +-37 +-76 +-105 +-128 +-158 +-185 +-195 +-186 +-160 +-135 +-122 +-112 +-96 +-61 +-12 +31 +63 +83 +105 +137 +173 +196 +197 +174 +141 +112 +91 +69 +39 +-2 +-41 +-71 +-89 +-109 +-135 +-169 +-193 +-198 +-184 +-162 +-142 +-122 +-95 +-52 +2 +50 +80 +93 +102 +121 +152 +179 +185 +175 +154 +134 +120 +97 +62 +11 +-42 +-81 +-104 +-121 +-139 +-159 +-175 +-172 +-155 +-135 +-125 +-117 +-100 +-67 +-16 +36 +76 +104 +122 +148 +177 +195 +194 +170 +138 +115 +101 +87 +62 +24 +-17 +-56 +-82 +-108 +-139 +-169 +-190 +-192 +-171 +-142 +-118 +-100 +-77 +-42 +7 +51 +78 +93 +105 +127 +162 +190 +201 +191 +164 +135 +113 +88 +53 +5 +-42 +-79 +-98 +-112 +-129 +-146 +-167 +-171 +-165 +-148 +-135 +-123 +-103 +-64 +-10 +47 +87 +109 +124 +139 +163 +179 +177 +159 +132 +111 +101 +92 +65 +22 +-31 +-75 +-107 +-129 +-151 +-174 +-189 +-187 +-166 +-139 +-117 +-105 +-91 +-62 +-19 +24 +62 +89 +107 +133 +164 +191 +199 +180 +146 +113 +89 +69 +41 +4 +-38 +-75 +-96 +-113 +-133 +-162 +-187 +-200 +-191 +-171 +-148 +-125 +-100 +-62 +-12 +43 +77 +96 +104 +117 +142 +169 +178 +171 +150 +127 +112 +91 +60 +15 +-39 +-83 +-114 +-130 +-144 +-164 +-180 +-181 +-167 +-146 +-126 +-114 +-101 +-74 +-29 +26 +71 +102 +123 +145 +173 +194 +201 +184 +152 +121 +97 +82 +62 +29 +-12 +-57 +-90 +-114 +-138 +-167 +-193 +-200 +-188 +-161 +-131 +-105 +-82 +-52 +-9 +36 +73 +94 +108 +130 +160 +194 +211 +206 +181 +151 +124 +101 +68 +26 +-25 +-69 +-96 +-109 +-122 +-139 +-162 +-175 +-171 +-156 +-138 +-125 +-105 +-70 +-18 +40 +86 +115 +131 +146 +164 +185 +194 +183 +158 +134 +115 +105 +84 +45 +-7 +-59 +-99 +-126 +-148 +-169 +-187 +-195 +-182 +-156 +-129 +-109 +-93 +-70 +-30 +18 +58 +88 +109 +134 +164 +198 +213 +203 +171 +135 +106 +84 +59 +23 +-24 +-67 +-95 +-112 +-131 +-155 +-185 +-203 +-202 +-185 +-160 +-137 +-110 +-74 +-25 +29 +70 +94 +105 +116 +141 +167 +182 +179 +160 +134 +114 +97 +71 +27 +-29 +-81 +-120 +-144 +-160 +-173 +-188 +-195 +-188 +-166 +-145 +-129 +-115 +-91 +-52 +2 +53 +91 +116 +140 +165 +191 +202 +189 +156 +120 +98 +83 +67 +34 +-9 +-57 +-95 +-119 +-145 +-173 +-196 +-210 +-204 +-182 +-151 +-122 +-96 +-65 +-26 +20 +60 +86 +105 +122 +151 +185 +208 +211 +187 +157 +126 +103 +76 +33 +-18 +-68 +-102 +-120 +-128 +-144 +-165 +-179 +-181 +-168 +-149 +-127 +-108 +-77 +-31 +23 +77 +115 +137 +152 +171 +192 +205 +200 +176 +146 +124 +112 +95 +62 +12 +-42 +-85 +-117 +-136 +-158 +-178 +-188 +-181 +-160 +-133 +-107 +-84 +-64 +-30 +14 +57 +94 +118 +143 +171 +206 +225 +220 +196 +158 +124 +99 +74 +40 +-4 +-47 +-84 +-107 +-121 +-142 +-165 +-190 +-199 +-187 +-165 +-135 +-105 +-72 +-30 +20 +67 +98 +118 +130 +149 +171 +190 +194 +181 +156 +134 +113 +88 +52 +-3 +-60 +-109 +-136 +-154 +-165 +-178 +-190 +-189 +-178 +-156 +-135 +-119 +-96 +-63 +-15 +35 +76 +110 +132 +156 +181 +196 +188 +166 +131 +100 +82 +64 +40 +-3 +-52 +-94 +-125 +-149 +-173 +-197 +-217 +-221 +-206 +-175 +-140 +-114 +-82 +-47 +-5 +37 +67 +91 +108 +131 +162 +188 +193 +181 +150 +124 +99 +72 +34 +-17 +-67 +-109 +-133 +-142 +-152 +-170 +-184 +-192 +-186 +-168 +-146 +-123 +-96 +-57 +-4 +48 +91 +121 +141 +157 +177 +187 +186 +168 +141 +118 +102 +88 +60 +17 +-35 +-84 +-118 +-141 +-158 +-178 +-189 +-187 +-171 +-139 +-110 +-85 +-63 +-36 +3 +45 +83 +110 +138 +168 +199 +220 +223 +204 +168 +134 +105 +81 +50 +10 +-33 +-68 +-94 +-109 +-126 +-151 +-173 +-185 +-178 +-159 +-130 +-100 +-68 +-27 +24 +70 +104 +126 +140 +157 +176 +194 +201 +191 +171 +146 +125 +104 +71 +22 +-35 +-85 +-120 +-139 +-150 +-163 +-172 +-175 +-164 +-144 +-122 +-102 +-84 +-56 +-14 +34 +77 +112 +138 +164 +190 +206 +205 +184 +152 +119 +94 +78 +54 +18 +-31 +-75 +-109 +-133 +-155 +-179 +-201 +-213 +-207 +-183 +-150 +-115 +-85 +-50 +-11 +28 +64 +87 +105 +127 +153 +182 +192 +186 +163 +135 +108 +80 +45 +-6 +-60 +-105 +-134 +-148 +-158 +-170 +-188 +-202 +-201 +-186 +-165 +-142 +-116 +-81 +-34 +20 +67 +103 +123 +142 +162 +176 +179 +165 +141 +115 +99 +84 +60 +19 +-34 +-85 +-127 +-155 +-175 +-194 +-207 +-211 +-201 +-175 +-145 +-116 +-90 +-65 +-30 +10 +53 +90 +117 +145 +175 +201 +212 +201 +171 +136 +107 +83 +55 +16 +-29 +-74 +-104 +-122 +-135 +-156 +-178 +-199 +-201 +-186 +-155 +-122 +-90 +-52 +-8 +42 +86 +119 +136 +153 +170 +189 +201 +197 +180 +158 +136 +119 +91 +46 +-9 +-64 +-105 +-128 +-142 +-155 +-167 +-173 +-169 +-147 +-124 +-104 +-84 +-59 +-22 +22 +72 +112 +143 +168 +195 +214 +220 +206 +176 +144 +119 +99 +78 +44 +3 +-42 +-79 +-106 +-131 +-153 +-179 +-196 +-195 +-174 +-140 +-105 +-72 +-40 +-4 +36 +72 +100 +119 +141 +164 +186 +202 +202 +186 +160 +132 +105 +70 +25 +-27 +-75 +-111 +-130 +-141 +-154 +-169 +-184 +-189 +-180 +-158 +-133 +-107 +-77 +-34 +16 +64 +104 +130 +148 +166 +179 +184 +174 +152 +128 +105 +89 +66 +31 +-18 +-72 +-114 +-145 +-166 +-186 +-204 +-216 +-210 +-190 +-157 +-125 +-96 +-69 +-38 +-2 +37 +71 +100 +128 +154 +180 +194 +191 +166 +135 +102 +74 +42 +3 +-37 +-81 +-114 +-134 +-148 +-163 +-186 +-205 +-212 +-203 +-176 +-143 +-110 +-74 +-30 +17 +60 +97 +120 +138 +156 +166 +178 +177 +162 +143 +123 +103 +75 +37 +-14 +-70 +-115 +-142 +-157 +-166 +-178 +-187 +-181 +-166 +-140 +-114 +-88 +-67 +-37 +5 +52 +96 +133 +163 +184 +202 +208 +200 +177 +146 +117 +94 +73 +43 +3 +-40 +-78 +-107 +-127 +-148 +-170 +-188 +-192 +-176 +-146 +-109 +-75 +-42 +-7 +32 +69 +102 +126 +146 +164 +185 +202 +205 +193 +170 +143 +115 +84 +43 +-6 +-55 +-93 +-117 +-130 +-138 +-151 +-168 +-173 +-165 +-147 +-124 +-99 +-69 +-32 +10 +58 +101 +134 +159 +174 +185 +190 +184 +166 +142 +118 +99 +80 +49 +8 +-42 +-85 +-119 +-142 +-164 +-182 +-196 +-196 +-180 +-149 +-115 +-87 +-62 +-36 +-2 +32 +69 +100 +126 +152 +175 +191 +192 +177 +148 +117 +87 +55 +20 +-21 +-63 +-97 +-116 +-133 +-148 +-167 +-187 +-202 +-198 +-178 +-149 +-115 +-81 +-44 +-2 +44 +83 +110 +128 +142 +154 +166 +169 +159 +142 +123 +103 +77 +40 +-6 +-60 +-105 +-136 +-155 +-169 +-178 +-188 +-188 +-176 +-153 +-126 +-105 +-79 +-52 +-16 +27 +71 +110 +141 +165 +181 +189 +186 +169 +143 +115 +88 +63 +35 +0 +-41 +-79 +-109 +-130 +-151 +-171 +-190 +-201 +-191 +-165 +-130 +-94 +-60 +-28 +7 +46 +82 +111 +131 +150 +169 +183 +191 +184 +168 +142 +113 +84 +46 +0 +-50 +-92 +-120 +-133 +-145 +-157 +-170 +-176 +-171 +-154 +-128 +-102 +-76 +-43 +-2 +45 +92 +129 +157 +176 +185 +192 +189 +173 +152 +126 +107 +87 +59 +19 +-27 +-71 +-109 +-136 +-159 +-176 +-192 +-196 +-182 +-155 +-121 +-89 +-62 +-36 +-2 +33 +70 +104 +133 +160 +182 +198 +204 +195 +170 +138 +107 +75 +38 +-1 +-44 +-80 +-107 +-125 +-139 +-158 +-178 +-193 +-193 +-176 +-146 +-113 +-80 +-43 +-4 +40 +82 +118 +140 +152 +164 +176 +177 +170 +159 +137 +115 +90 +55 +11 +-38 +-84 +-119 +-142 +-160 +-173 +-184 +-189 +-182 +-159 +-131 +-105 +-81 +-55 +-24 +16 +60 +100 +133 +159 +178 +189 +190 +177 +153 +126 +97 +69 +40 +7 +-31 +-67 +-98 +-123 +-142 +-167 +-189 +-201 +-199 +-178 +-145 +-110 +-76 +-44 +-11 +26 +65 +95 +118 +136 +154 +169 +178 +179 +170 +149 +119 +87 +52 +8 +-41 +-82 +-113 +-130 +-144 +-155 +-169 +-177 +-176 +-166 +-142 +-119 +-93 +-64 +-29 +14 +61 +104 +135 +156 +167 +175 +175 +168 +150 +131 +110 +88 +62 +27 +-14 +-58 +-95 +-119 +-144 +-166 +-183 +-192 +-182 +-162 +-131 +-100 +-74 +-50 +-23 +13 +52 +87 +119 +142 +164 +180 +189 +187 +170 +145 +117 +84 +49 +11 +-29 +-64 +-92 +-110 +-129 +-145 +-165 +-180 +-182 +-172 +-148 +-119 +-88 +-53 +-19 +24 +68 +106 +134 +151 +161 +169 +172 +169 +160 +145 +124 +99 +66 +28 +-18 +-64 +-101 +-129 +-148 +-164 +-176 +-180 +-174 +-157 +-130 +-106 +-84 +-62 +-34 +3 +48 +90 +128 +154 +173 +185 +190 +183 +164 +136 +107 +82 +54 +21 +-17 +-53 +-83 +-109 +-135 +-161 +-183 +-197 +-197 +-181 +-152 +-117 +-84 +-52 +-19 +16 +58 +90 +116 +138 +152 +170 +177 +181 +174 +157 +132 +99 +63 +21 +-24 +-67 +-102 +-125 +-139 +-152 +-165 +-177 +-177 +-167 +-148 +-125 +-101 +-74 +-42 +2 +49 +93 +127 +152 +169 +176 +179 +171 +158 +139 +118 +95 +70 +36 +-4 +-43 +-81 +-112 +-137 +-161 +-180 +-192 +-190 +-172 +-143 +-111 +-84 +-61 +-33 +2 +39 +78 +107 +133 +155 +174 +185 +191 +181 +159 +129 +94 +59 +21 +-17 +-54 +-82 +-104 +-119 +-139 +-160 +-178 +-187 +-180 +-160 +-134 +-106 +-76 +-38 +7 +50 +90 +119 +137 +150 +160 +165 +166 +161 +149 +131 +110 +80 +42 +-2 +-47 +-88 +-116 +-140 +-157 +-172 +-181 +-179 +-163 +-140 +-115 +-96 +-74 +-48 +-15 +29 +72 +108 +137 +161 +175 +185 +181 +168 +144 +116 +88 +61 +32 +-3 +-38 +-72 +-99 +-122 +-146 +-169 +-187 +-193 +-183 +-156 +-126 +-95 +-65 +-33 +3 +42 +77 +106 +125 +142 +159 +169 +177 +172 +158 +138 +110 +76 +35 +-11 +-53 +-87 +-112 +-131 +-146 +-160 +-168 +-172 +-163 +-144 +-124 +-103 +-81 +-51 +-8 +35 +82 +119 +144 +162 +172 +176 +170 +158 +137 +117 +92 +69 +39 +6 +-32 +-68 +-98 +-125 +-148 +-171 +-183 +-183 +-167 +-141 +-111 +-84 +-60 +-33 +-4 +33 +68 +98 +123 +145 +165 +176 +182 +176 +156 +127 +96 +62 +25 +-12 +-49 +-78 +-99 +-114 +-132 +-152 +-170 +-178 +-172 +-156 +-129 +-103 +-74 +-43 +-3 +40 +80 +112 +132 +144 +152 +158 +160 +158 +146 +129 +105 +79 +46 +4 +-39 +-79 +-110 +-134 +-153 +-168 +-178 +-176 +-162 +-141 +-118 +-95 +-76 +-53 +-22 +17 +60 +95 +123 +146 +162 +175 +176 +166 +145 +120 +92 +62 +33 +-1 +-33 +-64 +-88 +-112 +-134 +-158 +-177 +-185 +-177 +-157 +-129 +-101 +-71 +-41 +-6 +32 +69 +98 +117 +131 +142 +159 +168 +170 +162 +141 +116 +83 +48 +6 +-34 +-70 +-99 +-117 +-134 +-147 +-159 +-163 +-156 +-142 +-124 +-107 +-85 +-58 +-22 +22 +65 +103 +130 +151 +162 +166 +167 +161 +145 +125 +105 +84 +56 +26 +-10 +-45 +-78 +-107 +-133 +-155 +-169 +-173 +-163 +-141 +-113 +-87 +-63 +-41 +-12 +22 +56 +84 +109 +131 +150 +167 +177 +176 +162 +138 +109 +78 +45 +8 +-26 +-58 +-81 +-99 +-118 +-135 +-152 +-161 +-161 +-149 +-130 +-110 +-85 +-57 +-19 +22 +63 +97 +118 +132 +140 +148 +151 +150 +141 +128 +110 +86 +58 +22 +-17 +-56 +-90 +-116 +-138 +-155 +-169 +-171 +-162 +-142 +-118 +-99 +-82 +-62 +-37 +-3 +36 +71 +102 +124 +144 +156 +162 +157 +141 +118 +92 +62 +33 +5 +-24 +-50 +-74 +-98 +-122 +-146 +-167 +-179 +-177 +-162 +-139 +-111 +-86 +-55 +-23 +13 +49 +76 +94 +109 +120 +134 +146 +150 +147 +130 +110 +82 +48 +12 +-25 +-60 +-90 +-113 +-129 +-142 +-155 +-158 +-155 +-144 +-128 +-114 +-96 +-71 +-38 +2 +44 +81 +108 +127 +142 +153 +156 +152 +138 +122 +101 +79 +55 +29 +-2 +-35 +-65 +-95 +-121 +-144 +-162 +-169 +-162 +-144 +-119 +-95 +-69 +-48 +-23 +9 +43 +74 +99 +120 +139 +156 +171 +175 +166 +148 +120 +90 +61 +29 +-6 +-37 +-63 +-85 +-101 +-116 +-132 +-145 +-149 +-141 +-127 +-108 +-86 +-59 +-23 +18 +59 +94 +117 +133 +146 +155 +161 +161 +156 +144 +127 +106 +79 +50 +15 +-24 +-61 +-89 +-113 +-134 +-147 +-151 +-144 +-131 +-114 +-97 +-80 +-61 +-37 +-6 +32 +68 +100 +122 +140 +156 +167 +168 +155 +136 +110 +84 +56 +32 +1 +-26 +-52 +-79 +-104 +-128 +-151 +-167 +-167 +-159 +-140 +-118 +-94 +-67 +-37 +0 +34 +60 +81 +96 +112 +124 +138 +146 +144 +134 +114 +89 +59 +25 +-12 +-47 +-80 +-104 +-125 +-140 +-154 +-163 +-160 +-152 +-139 +-126 +-113 +-93 +-65 +-27 +14 +52 +81 +102 +117 +128 +137 +136 +128 +111 +89 +68 +46 +24 +-3 +-33 +-63 +-94 +-121 +-147 +-164 +-175 +-173 +-161 +-140 +-118 +-96 +-73 +-48 +-17 +14 +44 +69 +89 +105 +122 +140 +151 +149 +135 +109 +82 +53 +25 +-6 +-36 +-63 +-85 +-105 +-122 +-134 +-147 +-152 +-149 +-138 +-120 +-101 +-74 +-41 +-3 +36 +70 +99 +117 +128 +137 +146 +152 +147 +136 +121 +103 +81 +54 +23 +-12 +-47 +-77 +-103 +-122 +-136 +-141 +-139 +-127 +-111 +-94 +-73 +-54 +-32 +-4 +34 +67 +97 +121 +142 +159 +171 +174 +167 +150 +124 +98 +72 +48 +21 +-7 +-33 +-58 +-80 +-102 +-122 +-137 +-144 +-136 +-122 +-100 +-80 +-57 +-25 +9 +46 +78 +100 +115 +125 +140 +153 +163 +163 +153 +134 +110 +84 +52 +19 +-16 +-50 +-78 +-101 +-117 +-129 +-137 +-139 +-134 +-123 +-110 +-97 +-78 +-52 +-20 +20 +60 +90 +113 +130 +141 +148 +149 +142 +126 +104 +82 +60 +39 +15 +-15 +-49 +-81 +-108 +-133 +-155 +-168 +-170 +-161 +-145 +-125 +-104 +-83 +-59 +-29 +4 +33 +59 +78 +96 +112 +128 +142 +139 +126 +105 +80 +50 +19 +-11 +-41 +-68 +-93 +-114 +-130 +-147 +-161 +-166 +-164 +-156 +-141 +-123 +-101 +-70 +-35 +3 +36 +67 +86 +100 +114 +121 +127 +125 +116 +101 +83 +63 +39 +11 +-22 +-57 +-88 +-116 +-137 +-152 +-160 +-160 +-149 +-133 +-120 +-103 +-85 +-60 +-33 +0 +33 +63 +88 +109 +128 +145 +152 +151 +137 +114 +90 +65 +44 +19 +-7 +-33 +-55 +-79 +-101 +-120 +-136 +-143 +-143 +-131 +-113 +-90 +-65 +-36 +-5 +29 +60 +83 +100 +113 +127 +143 +154 +158 +154 +140 +120 +96 +71 +37 +3 +-29 +-56 +-78 +-96 +-107 +-116 +-118 +-114 +-109 +-97 +-86 +-68 +-46 +-14 +22 +56 +88 +114 +135 +148 +160 +163 +159 +144 +124 +106 +88 +68 +45 +20 +-10 +-41 +-70 +-97 +-118 +-131 +-137 +-134 +-121 +-103 +-82 +-62 +-40 +-11 +17 +43 +69 +90 +106 +124 +143 +154 +160 +148 +129 +107 +80 +54 +22 +-8 +-36 +-63 +-82 +-100 +-115 +-130 +-138 +-141 +-137 +-126 +-113 +-93 +-68 +-35 +1 +38 +67 +87 +102 +111 +120 +127 +126 +119 +104 +87 +69 +47 +23 +-8 +-44 +-77 +-104 +-128 +-146 +-158 +-160 +-156 +-144 +-127 +-111 +-94 +-77 +-52 +-23 +11 +39 +65 +87 +108 +125 +136 +137 +123 +102 +79 +54 +31 +8 +-17 +-44 +-69 +-91 +-112 +-131 +-149 +-160 +-163 +-156 +-140 +-122 +-98 +-71 +-40 +-4 +27 +51 +70 +84 +97 +110 +125 +134 +130 +118 +100 +79 +56 +27 +-5 +-40 +-69 +-95 +-115 +-126 +-134 +-137 +-136 +-132 +-123 +-110 +-93 +-71 +-42 +-6 +29 +62 +88 +108 +128 +144 +152 +152 +140 +123 +102 +84 +66 +44 +19 +-10 +-38 +-67 +-92 +-113 +-129 +-136 +-136 +-127 +-111 +-93 +-70 +-48 +-21 +11 +38 +64 +83 +102 +120 +139 +155 +163 +160 +145 +126 +100 +74 +46 +16 +-16 +-44 +-64 +-81 +-95 +-107 +-116 +-121 +-121 +-114 +-101 +-82 +-59 +-29 +9 +45 +75 +97 +116 +127 +138 +145 +148 +140 +130 +115 +98 +81 +56 +28 +-6 +-39 +-70 +-95 +-114 +-126 +-132 +-131 +-123 +-113 +-98 +-83 +-65 +-39 +-13 +17 +45 +69 +92 +111 +133 +145 +150 +141 +121 +98 +77 +54 +32 +8 +-20 +-46 +-70 +-92 +-112 +-130 +-144 +-150 +-150 +-140 +-124 +-103 +-77 +-48 +-16 +16 +42 +62 +75 +90 +106 +118 +125 +125 +116 +100 +80 +58 +33 +1 +-33 +-67 +-93 +-115 +-128 +-138 +-144 +-145 +-141 +-132 +-121 +-108 +-90 +-64 +-34 +-2 +32 +60 +82 +101 +117 +127 +128 +122 +105 +87 +68 +51 +33 +9 +-18 +-49 +-76 +-100 +-123 +-141 +-152 +-154 +-146 +-132 +-115 +-93 +-72 +-46 +-16 +10 +38 +59 +76 +97 +117 +134 +143 +140 +128 +109 +87 +64 +39 +8 +-22 +-49 +-70 +-89 +-105 +-117 +-124 +-128 +-128 +-124 +-114 +-100 +-76 +-46 +-10 +24 +55 +82 +101 +114 +125 +135 +138 +136 +127 +114 +99 +80 +61 +36 +3 +-31 +-63 +-88 +-106 +-119 +-124 +-124 +-117 +-107 +-94 +-77 +-59 +-35 +-11 +19 +48 +72 +93 +115 +136 +152 +159 +153 +139 +117 +95 +72 +52 +26 +0 +-27 +-49 +-71 +-90 +-106 +-120 +-126 +-129 +-123 +-109 +-92 +-66 +-37 +-8 +25 +51 +74 +88 +103 +119 +132 +142 +143 +134 +121 +104 +82 +58 +29 +-4 +-39 +-68 +-89 +-105 +-115 +-122 +-124 +-125 +-117 +-109 +-99 +-80 +-59 +-29 +0 +31 +60 +85 +106 +124 +137 +139 +130 +116 +100 +81 +66 +48 +24 +-3 +-32 +-60 +-86 +-109 +-127 +-140 +-148 +-145 +-134 +-119 +-100 +-78 +-54 +-28 +-2 +21 +42 +61 +81 +101 +119 +131 +130 +123 +106 +87 +65 +39 +11 +-19 +-47 +-73 +-91 +-106 +-119 +-130 +-135 +-134 +-134 +-126 +-113 +-91 +-64 +-35 +-2 +26 +52 +73 +90 +106 +114 +120 +116 +108 +97 +83 +69 +50 +26 +-3 +-33 +-64 +-89 +-113 +-126 +-135 +-137 +-132 +-122 +-108 +-93 +-75 +-54 +-29 +-5 +24 +47 +68 +92 +114 +131 +143 +139 +126 +110 +88 +68 +47 +23 +-4 +-31 +-52 +-72 +-89 +-103 +-117 +-129 +-131 +-128 +-117 +-99 +-75 +-48 +-16 +14 +42 +62 +80 +95 +110 +124 +132 +136 +131 +120 +106 +88 +68 +39 +6 +-27 +-55 +-77 +-94 +-104 +-111 +-115 +-116 +-109 +-99 +-89 +-71 +-52 +-26 +5 +35 +59 +83 +106 +123 +136 +142 +142 +127 +109 +93 +75 +58 +37 +12 +-17 +-45 +-70 +-92 +-108 +-122 +-132 +-133 +-124 +-111 +-93 +-70 +-45 +-20 +8 +33 +52 +74 +92 +109 +127 +137 +139 +132 +120 +102 +82 +57 +29 +-3 +-32 +-56 +-77 +-92 +-104 +-114 +-121 +-125 +-125 +-118 +-109 +-90 +-66 +-35 +-2 +27 +55 +75 +93 +112 +122 +129 +126 +115 +105 +93 +80 +62 +37 +9 +-22 +-54 +-82 +-102 +-120 +-133 +-136 +-133 +-126 +-113 +-96 +-81 +-61 +-40 +-17 +11 +34 +61 +83 +104 +126 +136 +136 +125 +108 +89 +70 +50 +27 +1 +-25 +-51 +-74 +-90 +-107 +-122 +-131 +-138 +-135 +-128 +-112 +-89 +-65 +-36 +-2 +25 +47 +66 +81 +97 +110 +121 +126 +122 +114 +101 +84 +65 +37 +6 +-28 +-57 +-79 +-99 +-109 +-120 +-127 +-128 +-122 +-113 +-101 +-86 +-69 +-47 +-18 +13 +42 +67 +90 +109 +126 +135 +132 +124 +109 +93 +76 +59 +40 +16 +-12 +-39 +-63 +-84 +-101 +-117 +-133 +-137 +-132 +-120 +-103 +-81 +-55 +-29 +-4 +19 +40 +58 +77 +97 +114 +131 +136 +132 +123 +107 +88 +66 +42 +11 +-23 +-48 +-70 +-85 +-97 +-106 +-116 +-122 +-122 +-118 +-107 +-89 +-68 +-39 +-11 +21 +49 +70 +89 +106 +118 +126 +127 +117 +109 +99 +88 +72 +51 +21 +-8 +-39 +-66 +-89 +-109 +-121 +-130 +-133 +-126 +-115 +-98 +-81 +-61 +-38 +-15 +12 +33 +56 +79 +102 +123 +135 +140 +130 +115 +98 +81 +62 +40 +14 +-15 +-41 +-61 +-81 +-97 +-112 +-125 +-131 +-134 +-128 +-114 +-92 +-70 +-43 +-14 +16 +43 +64 +82 +96 +109 +118 +124 +120 +114 +103 +89 +75 +51 +18 +-13 +-46 +-74 +-92 +-106 +-113 +-121 +-126 +-125 +-117 +-105 +-90 +-74 +-53 +-28 +2 +32 +57 +81 +101 +119 +130 +131 +123 +109 +93 +77 +60 +43 +21 +-5 +-31 +-59 +-81 +-100 +-117 +-130 +-138 +-136 +-128 +-111 +-86 +-65 +-40 +-17 +8 +31 +52 +71 +91 +108 +122 +131 +130 +122 +109 +93 +73 +47 +16 +-14 +-41 +-65 +-80 +-94 +-106 +-115 +-123 +-125 +-123 +-115 +-99 +-77 +-54 +-24 +7 +36 +59 +82 +102 +115 +123 +123 +119 +109 +98 +88 +73 +57 +32 +3 +-29 +-56 +-78 +-97 +-110 +-123 +-129 +-125 +-115 +-100 +-80 +-63 +-42 +-18 +6 +29 +52 +75 +96 +118 +131 +136 +134 +122 +106 +87 +69 +48 +22 +-5 +-32 +-52 +-70 +-85 +-100 +-115 +-126 +-128 +-122 +-109 +-91 +-69 +-42 +-15 +15 +43 +65 +81 +95 +109 +119 +126 +125 +119 +110 +97 +81 +61 +33 +-2 +-33 +-61 +-80 +-98 +-108 +-116 +-121 +-120 +-114 +-103 +-88 +-71 +-52 +-25 +1 +31 +56 +81 +104 +121 +132 +132 +127 +116 +101 +86 +71 +53 +28 +3 +-24 +-48 +-70 +-91 +-106 +-122 +-132 +-133 +-126 +-108 +-89 +-67 +-45 +-17 +6 +29 +51 +72 +89 +105 +121 +128 +129 +122 +112 +97 +78 +54 +24 +-10 +-37 +-61 +-79 +-92 +-102 +-114 +-125 +-127 +-125 +-117 +-101 +-81 +-61 +-32 +-5 +25 +56 +79 +98 +112 +122 +122 +119 +109 +97 +85 +75 +57 +34 +3 +-29 +-58 +-79 +-98 +-115 +-128 +-135 +-132 +-125 +-110 +-93 +-74 +-55 +-32 +-8 +17 +42 +68 +89 +109 +125 +133 +131 +123 +107 +92 +-4 +24 +47 +68 +82 +94 +104 +113 +119 +118 +111 +96 +78 +57 +34 +8 +-19 +-47 +-66 +-82 +-96 +-106 +-110 +-113 +-107 +-99 +-88 +-74 +-58 +-34 +-10 +21 +48 +72 +89 +103 +115 +121 +123 +116 +105 +92 +76 +58 +38 +17 +-8 +-32 +-55 +-75 +-93 +-106 +-115 +-117 +-112 +-99 +-83 +-68 +-48 +-29 +-5 +21 +43 +64 +81 +95 +108 +119 +125 +123 +113 +97 +76 +52 +31 +7 +-14 +-36 +-57 +-76 +-90 +-102 +-110 +-112 +-109 +-104 +-94 +-79 +-59 +-37 +-10 +19 +46 +66 +82 +94 +104 +110 +112 +109 +103 +90 +77 +59 +38 +15 +-12 +-38 +-63 +-81 +-99 +-110 +-114 +-116 +-110 +-99 +-88 +-76 +-60 +-41 +-19 +6 +31 +53 +71 +88 +103 +113 +116 +113 +101 +84 +67 +48 +28 +7 +-15 +-37 +-56 +-73 +-90 +-104 +-116 +-121 +-118 +-110 +-96 +-80 +-61 +-39 +-14 +12 +35 +55 +69 +81 +92 +101 +107 +107 +102 +90 +75 +55 +34 +9 +-16 +-40 +-60 +-78 +-93 +-104 +-109 +-111 +-109 +-102 +-94 +-80 +-67 +-46 +-21 +8 +34 +57 +76 +90 +102 +112 +113 +109 +100 +85 +70 +52 +37 +17 +-6 +-30 +-52 +-72 +-89 +-102 +-110 +-114 +-112 +-103 +-87 +-70 +-52 +-34 +-12 +11 +34 +55 +71 +86 +99 +111 +117 +119 +109 +98 +79 +58 +38 +13 +-8 +-32 +-51 +-66 +-81 +-93 +-102 +-107 +-109 +-103 +-92 +-81 +-64 +-42 +-17 +12 +39 +61 +78 +90 +100 +107 +111 +111 +105 +93 +80 +66 +47 +23 +0 +-26 +-51 +-73 +-90 +-104 +-111 +-111 +-106 +-97 +-86 +-74 +-61 +-44 +-22 +5 +29 +50 +67 +82 +97 +111 +118 +119 +109 +94 +75 +55 +38 +17 +-5 +-25 +-46 +-66 +-81 +-96 +-105 +-112 +-114 +-108 +-98 +-83 +-66 +-44 +-20 +6 +29 +51 +64 +77 +88 +99 +107 +110 +105 +94 +78 +60 +42 +19 +-7 +-32 +-55 +-72 +-89 +-100 +-107 +-109 +-106 +-101 +-96 +-84 +-70 +-51 +-29 +-4 +22 +45 +65 +80 +95 +104 +109 +109 +101 +87 +72 +57 +41 +22 +3 +-18 +-42 +-66 +-84 +-99 +-110 +-115 +-114 +-108 +-97 +-83 +-66 +-46 +-22 +2 +24 +43 +59 +75 +88 +101 +109 +114 +109 +96 +81 +61 +42 +22 +-2 +-24 +-47 +-65 +-81 +-90 +-99 +-104 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1594.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1594.samples new file mode 100644 index 00000000..430a3694 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1594.samples @@ -0,0 +1,4096 @@ +-834 +-686 +-981 +-1107 +-645 +150 +830 +980 +578 +279 +656 +1321 +1667 +1487 +933 +476 +518 +717 +551 +84 +-371 +-619 +-658 +-786 +-1209 +-1597 +-1491 +-1076 +-765 +-708 +-921 +-953 +-407 +413 +854 +821 +636 +561 +926 +1450 +1438 +939 +486 +317 +339 +371 +81 +-439 +-685 +-628 +-690 +-1077 +-1500 +-1689 +-1405 +-739 +-412 +-579 +-844 +-713 +-79 +727 +1133 +895 +638 +722 +954 +1162 +1030 +668 +455 +522 +508 +90 +-430 +-840 +-909 +-659 +-710 +-1251 +-1811 +-1822 +-1391 +-809 +-463 +-613 +-752 +-348 +342 +840 +1028 +950 +867 +1129 +1388 +1213 +762 +447 +456 +672 +718 +192 +-509 +-829 +-631 +-377 +-527 +-1050 +-1652 +-1622 +-1071 +-602 +-401 +-485 +-466 +-113 +481 +753 +604 +616 +863 +1319 +1593 +1321 +732 +396 +615 +757 +553 +-18 +-680 +-812 +-520 +-303 +-705 +-1348 +-1646 +-1534 +-919 +-532 +-628 +-754 +-476 +137 +582 +791 +640 +684 +1200 +1593 +1584 +1053 +631 +652 +1081 +1410 +911 +110 +-474 +-499 +-227 +-263 +-737 +-1435 +-1507 +-1130 +-778 +-613 +-788 +-765 +-343 +245 +399 +175 +149 +461 +1198 +1731 +1531 +852 +379 +595 +973 +1117 +754 +56 +-297 +-264 +-241 +-586 +-1057 +-1342 +-1258 +-848 +-753 +-988 +-1164 +-912 +-278 +249 +336 +34 +100 +683 +1303 +1523 +1119 +621 +481 +914 +1339 +1158 +654 +73 +-134 +-34 +-106 +-583 +-1128 +-1121 +-885 +-649 +-741 +-1193 +-1300 +-834 +-68 +284 +199 +-20 +-63 +477 +1011 +1083 +719 +452 +616 +908 +1162 +877 +371 +167 +160 +117 +-284 +-848 +-1262 +-1134 +-689 +-625 +-850 +-1186 +-1131 +-577 +28 +187 +-200 +-343 +-72 +538 +1104 +1089 +804 +648 +861 +994 +829 +568 +265 +299 +488 +283 +-418 +-1088 +-1233 +-989 +-516 +-500 +-1039 +-1398 +-1277 +-683 +-146 +68 +-12 +-49 +338 +716 +809 +668 +589 +759 +1106 +1282 +841 +317 +101 +183 +348 +67 +-606 +-1237 +-1243 +-881 +-685 +-722 +-1112 +-1298 +-988 +-463 +-200 +-290 +-235 +-14 +461 +882 +878 +671 +680 +1044 +1216 +1085 +622 +80 +102 +404 +472 +18 +-687 +-1153 +-1184 +-773 +-611 +-798 +-997 +-980 +-675 +-385 +-301 +-371 +-200 +311 +707 +812 +596 +436 +650 +1195 +1493 +1062 +413 +-100 +-169 +170 +186 +-338 +-995 +-1241 +-1113 +-862 +-758 +-984 +-1121 +-909 +-492 +-280 +-240 +-83 +200 +768 +1207 +1080 +747 +674 +1036 +1470 +1634 +1222 +544 +266 +281 +321 +85 +-472 +-979 +-1131 +-973 +-966 +-1134 +-1272 +-1127 +-704 +-329 +-233 +-445 +-307 +275 +900 +1305 +1131 +741 +704 +1148 +1529 +1434 +1026 +443 +188 +272 +182 +-217 +-745 +-960 +-934 +-867 +-1032 +-1469 +-1619 +-1248 +-610 +-253 +-218 +-291 +-130 +560 +1201 +1333 +1117 +905 +1064 +1492 +1781 +1477 +915 +543 +414 +373 +51 +-495 +-928 +-980 +-781 +-860 +-1194 +-1547 +-1557 +-1070 +-472 +-257 +-440 +-451 +-99 +576 +1217 +1289 +1050 +929 +1148 +1449 +1466 +1164 +667 +458 +445 +275 +-202 +-823 +-1156 +-1158 +-1017 +-1130 +-1569 +-1781 +-1497 +-853 +-335 +-247 +-471 +-441 +143 +822 +1258 +1258 +1025 +1071 +1381 +1585 +1367 +951 +660 +570 +534 +133 +-627 +-1265 +-1329 +-1030 +-897 +-1104 +-1621 +-1915 +-1605 +-994 +-593 +-508 +-453 +-225 +315 +862 +1009 +977 +1033 +1269 +1483 +1382 +978 +581 +565 +714 +592 +11 +-773 +-1271 +-1269 +-980 +-1003 +-1399 +-1715 +-1695 +-1267 +-754 +-539 +-573 +-379 +118 +616 +937 +957 +939 +1213 +1655 +1809 +1432 +848 +463 +464 +639 +480 +-156 +-878 +-1225 +-1248 +-1206 +-1311 +-1652 +-1763 +-1499 +-1071 +-790 +-675 +-506 +-135 +485 +868 +863 +745 +817 +1258 +1701 +1759 +1303 +732 +546 +627 +600 +212 +-472 +-1090 +-1246 +-1126 +-1185 +-1341 +-1494 +-1463 +-1151 +-840 +-748 +-733 +-362 +291 +941 +1259 +1139 +943 +1061 +1541 +1846 +1688 +1229 +732 +536 +551 +415 +-76 +-663 +-1031 +-1194 +-1210 +-1398 +-1691 +-1710 +-1425 +-974 +-701 +-632 +-581 +-223 +453 +993 +1173 +1044 +952 +1172 +1558 +1785 +1514 +1077 +779 +649 +575 +237 +-344 +-915 +-1098 +-1102 +-1223 +-1427 +-1677 +-1595 +-1172 +-736 +-557 +-608 +-453 +46 +774 +1307 +1398 +1221 +1142 +1377 +1568 +1541 +1246 +861 +728 +634 +389 +-148 +-723 +-1055 +-1116 +-1055 +-1305 +-1631 +-1724 +-1440 +-880 +-486 +-407 +-520 +-341 +220 +793 +1171 +1198 +1157 +1229 +1431 +1492 +1166 +815 +549 +474 +399 +16 +-582 +-1089 +-1178 +-1085 +-1055 +-1253 +-1561 +-1534 +-1183 +-632 +-277 +-148 +-2 +249 +717 +1052 +1135 +1115 +1160 +1413 +1585 +1525 +1143 +736 +586 +440 +169 +-377 +-967 +-1323 +-1290 +-1099 +-1184 +-1431 +-1636 +-1511 +-1059 +-597 +-319 +-282 +-80 +294 +695 +1007 +1055 +1106 +1244 +1454 +1439 +1101 +728 +434 +439 +418 +62 +-498 +-1035 +-1178 +-1089 +-982 +-1143 +-1459 +-1488 +-1189 +-648 +-256 +-61 +78 +304 +752 +997 +1028 +979 +1033 +1299 +1497 +1425 +926 +480 +312 +287 +221 +-252 +-859 +-1316 +-1357 +-1156 +-1134 +-1253 +-1444 +-1331 +-959 +-551 +-312 +-231 +65 +461 +908 +1108 +969 +884 +1013 +1318 +1395 +1127 +623 +200 +192 +243 +105 +-361 +-933 +-1243 +-1276 +-1119 +-1157 +-1267 +-1207 +-954 +-550 +-311 +-179 +-91 +261 +831 +1167 +1239 +1018 +894 +1052 +1331 +1364 +954 +489 +140 +56 +38 +-260 +-718 +-1143 +-1235 +-1191 +-1216 +-1329 +-1477 +-1295 +-874 +-429 +-228 +-179 +-2 +373 +959 +1279 +1197 +997 +920 +1086 +1248 +1209 +856 +447 +261 +132 +-74 +-495 +-946 +-1228 +-1245 +-1139 +-1236 +-1359 +-1299 +-964 +-503 +-196 +-154 +-198 +79 +600 +1080 +1311 +1161 +997 +1031 +1213 +1275 +1057 +693 +326 +167 +26 +-284 +-712 +-1059 +-1142 +-1169 +-1209 +-1398 +-1589 +-1381 +-875 +-341 +-95 +-68 +-66 +210 +775 +1168 +1271 +1160 +1076 +1131 +1236 +1184 +871 +583 +442 +329 +85 +-396 +-905 +-1194 +-1122 +-953 +-1030 +-1221 +-1352 +-1184 +-724 +-309 +-146 +-104 +113 +506 +962 +1211 +1142 +1045 +1081 +1215 +1198 +993 +684 +451 +445 +371 +25 +-517 +-973 +-1117 +-1049 +-937 +-1107 +-1378 +-1373 +-1086 +-630 +-269 +-82 +1 +249 +618 +872 +1000 +1006 +1080 +1261 +1376 +1252 +872 +586 +493 +502 +381 +-66 +-651 +-1054 +-1064 +-944 +-927 +-1065 +-1315 +-1312 +-1038 +-685 +-410 +-200 +62 +379 +747 +927 +894 +907 +1053 +1302 +1360 +1163 +776 +479 +475 +477 +270 +-191 +-694 +-1004 +-1041 +-958 +-1078 +-1247 +-1286 +-1160 +-862 +-647 +-524 +-384 +-46 +388 +675 +785 +733 +799 +1044 +1316 +1336 +1035 +707 +498 +496 +477 +188 +-282 +-696 +-872 +-942 +-977 +-1128 +-1297 +-1195 +-945 +-692 +-569 +-489 +-295 +86 +552 +759 +699 +612 +718 +1035 +1300 +1298 +967 +622 +482 +396 +230 +-114 +-531 +-802 +-872 +-919 +-1102 +-1277 +-1341 +-1162 +-849 +-675 +-661 +-635 +-354 +107 +534 +732 +693 +695 +885 +1177 +1281 +1143 +882 +653 +625 +576 +312 +-75 +-425 +-616 +-705 +-827 +-1113 +-1336 +-1257 +-998 +-720 +-620 +-653 +-595 +-258 +253 +594 +685 +628 +650 +860 +1113 +1201 +1032 +851 +735 +596 +371 +-43 +-459 +-617 +-598 +-643 +-882 +-1221 +-1455 +-1323 +-976 +-707 +-643 +-666 +-495 +-110 +361 +626 +649 +683 +848 +1071 +1180 +1150 +996 +889 +913 +766 +396 +-89 +-469 +-583 +-541 +-611 +-971 +-1322 +-1410 +-1186 +-840 +-657 +-667 +-675 +-436 +-24 +313 +520 +618 +783 +1069 +1275 +1208 +969 +821 +802 +896 +809 +371 +-140 +-450 +-507 +-518 +-695 +-1049 +-1374 +-1371 +-1131 +-881 +-781 +-746 +-594 +-282 +148 +408 +487 +632 +891 +1215 +1379 +1288 +1043 +921 +995 +1004 +799 +328 +-179 +-452 +-518 +-586 +-820 +-1114 +-1289 +-1239 +-1022 +-880 +-850 +-768 +-461 +-83 +220 +385 +442 +668 +1056 +1358 +1380 +1168 +939 +875 +1010 +1002 +655 +164 +-256 +-461 +-571 +-739 +-1052 +-1329 +-1341 +-1206 +-1063 +-1020 +-975 +-763 +-355 +96 +299 +355 +480 +794 +1261 +1560 +1497 +1202 +998 +977 +1008 +898 +493 +25 +-311 +-496 +-682 +-978 +-1268 +-1425 +-1341 +-1148 +-1100 +-1166 +-1097 +-730 +-206 +269 +461 +428 +553 +894 +1262 +1428 +1316 +1063 +926 +961 +912 +646 +241 +-145 +-358 +-525 +-772 +-1176 +-1466 +-1436 +-1234 +-1041 +-1051 +-1186 +-1122 +-687 +-118 +265 +437 +486 +659 +1028 +1323 +1371 +1217 +1102 +1076 +1080 +914 +476 +37 +-211 +-292 +-464 +-817 +-1253 +-1534 +-1434 +-1150 +-998 +-1036 +-1071 +-892 +-448 +95 +377 +459 +567 +776 +1052 +1203 +1183 +1076 +1057 +1112 +1003 +659 +175 +-197 +-346 +-391 +-591 +-1040 +-1420 +-1541 +-1371 +-1083 +-966 +-1006 +-949 +-630 +-194 +189 +424 +533 +755 +1059 +1274 +1300 +1181 +1125 +1162 +1220 +1066 +622 +129 +-171 +-264 +-379 +-643 +-1084 +-1437 +-1467 +-1304 +-1107 +-1013 +-967 +-803 +-454 +-70 +159 +325 +535 +848 +1190 +1326 +1218 +1045 +1033 +1136 +1116 +846 +340 +-125 +-361 +-415 +-558 +-882 +-1215 +-1436 +-1384 +-1178 +-1078 +-1023 +-868 +-530 +-133 +195 +331 +427 +706 +1095 +1394 +1391 +1184 +999 +989 +1144 +1119 +779 +277 +-174 +-405 +-531 +-710 +-1048 +-1324 +-1379 +-1301 +-1149 +-1082 +-1027 +-796 +-376 +33 +245 +347 +466 +787 +1227 +1485 +1406 +1099 +919 +935 +1019 +944 +533 +24 +-354 +-554 +-715 +-933 +-1187 +-1382 +-1349 +-1222 +-1158 +-1121 +-992 +-634 +-132 +294 +452 +462 +607 +948 +1341 +1493 +1362 +1094 +947 +998 +963 +750 +318 +-158 +-482 +-680 +-894 +-1193 +-1385 +-1424 +-1294 +-1122 +-1104 +-1112 +-937 +-479 +57 +420 +565 +587 +766 +1098 +1395 +1454 +1289 +1090 +926 +873 +719 +358 +-25 +-313 +-484 +-674 +-964 +-1325 +-1532 +-1417 +-1194 +-1000 +-961 +-950 +-735 +-289 +253 +559 +674 +757 +925 +1204 +1395 +1365 +1173 +1035 +950 +789 +535 +146 +-201 +-366 +-485 +-718 +-1108 +-1424 +-1522 +-1298 +-978 +-841 +-866 +-853 +-555 +-71 +418 +713 +792 +917 +1116 +1272 +1285 +1163 +1026 +952 +937 +739 +337 +-101 +-409 +-516 +-619 +-878 +-1309 +-1588 +-1543 +-1275 +-970 +-839 +-781 +-650 +-289 +151 +450 +647 +788 +1011 +1275 +1399 +1295 +1106 +1047 +1057 +993 +701 +172 +-274 +-479 +-510 +-611 +-902 +-1265 +-1506 +-1422 +-1176 +-989 +-901 +-785 +-495 +-108 +269 +448 +527 +747 +1046 +1292 +1312 +1133 +936 +909 +991 +881 +526 +20 +-397 +-551 +-582 +-713 +-1022 +-1299 +-1384 +-1260 +-1042 +-916 +-830 +-668 +-329 +24 +255 +432 +580 +891 +1251 +1423 +1301 +1024 +852 +850 +939 +824 +410 +-75 +-437 +-599 +-703 +-878 +-1146 +-1358 +-1341 +-1232 +-1109 +-1015 +-863 +-566 +-157 +240 +389 +455 +612 +899 +1223 +1351 +1212 +973 +883 +922 +904 +703 +261 +-194 +-498 +-655 +-811 +-1053 +-1224 +-1303 +-1217 +-1093 +-1062 +-1028 +-828 +-390 +58 +361 +437 +436 +628 +976 +1277 +1313 +1131 +925 +860 +934 +864 +596 +209 +-134 +-355 +-583 +-853 +-1184 +-1346 +-1269 +-1125 +-1028 +-1045 +-1013 +-776 +-318 +109 +279 +306 +351 +596 +968 +1221 +1222 +1054 +953 +917 +885 +712 +375 +76 +-113 +-260 +-527 +-889 +-1175 +-1256 +-1077 +-884 +-881 +-1001 +-996 +-722 +-264 +164 +331 +377 +522 +768 +1025 +1126 +1086 +1012 +1015 +1045 +900 +592 +224 +-23 +-135 +-272 +-570 +-1022 +-1302 +-1306 +-1116 +-931 +-939 +-1008 +-924 +-580 +-157 +166 +346 +449 +664 +917 +1084 +1093 +1033 +1049 +1089 +1081 +854 +465 +152 +-6 +-70 +-279 +-636 +-1050 +-1282 +-1206 +-1050 +-970 +-996 +-975 +-784 +-432 +-70 +115 +245 +437 +699 +941 +1008 +984 +959 +1094 +1226 +1139 +824 +365 +24 +-114 +-177 +-373 +-737 +-1054 +-1228 +-1187 +-1076 +-1038 +-1014 +-886 +-611 +-322 +-86 +83 +259 +575 +901 +1065 +1015 +889 +876 +997 +1146 +1032 +664 +246 +-22 +-124 +-228 +-455 +-816 +-1101 +-1185 +-1163 +-1097 +-1056 +-962 +-744 +-434 +-165 +-47 +66 +288 +646 +1002 +1143 +1043 +893 +907 +1028 +1076 +917 +532 +157 +-56 +-178 +-359 +-615 +-880 +-1074 +-1101 +-1106 +-1160 +-1172 +-1031 +-701 +-348 +-85 +-8 +75 +351 +749 +1065 +1135 +1029 +905 +945 +1090 +1078 +850 +476 +143 +-55 +-217 +-457 +-794 +-1014 +-1089 +-1068 +-1053 +-1131 +-1136 +-971 +-616 +-279 +-115 +-29 +88 +410 +838 +1128 +1160 +1053 +1001 +1021 +1080 +992 +722 +447 +236 +44 +-239 +-593 +-935 +-1117 +-1108 +-1094 +-1165 +-1274 +-1229 +-945 +-536 +-179 +-49 +22 +216 +537 +896 +1094 +1105 +1053 +1077 +1141 +1087 +896 +609 +363 +195 +-15 +-365 +-790 +-1055 +-1108 +-1030 +-992 +-1120 +-1260 +-1199 +-877 +-467 +-149 +33 +162 +404 +717 +953 +1041 +1047 +1072 +1142 +1166 +1000 +702 +433 +286 +171 +-75 +-473 +-925 +-1176 +-1164 +-1080 +-1066 +-1165 +-1217 +-1078 +-735 +-361 +-113 +56 +253 +525 +808 +989 +1044 +1093 +1206 +1288 +1202 +938 +569 +316 +210 +112 +-163 +-585 +-973 +-1189 +-1179 +-1108 +-1112 +-1155 +-1098 +-893 +-623 +-346 +-125 +99 +427 +745 +936 +971 +968 +1030 +1204 +1337 +1223 +902 +541 +289 +147 +-23 +-335 +-745 +-1063 +-1182 +-1190 +-1154 +-1171 +-1157 +-1020 +-755 +-483 +-291 +-102 +143 +491 +831 +1014 +1037 +1035 +1141 +1275 +1306 +1125 +754 +412 +207 +77 +-111 +-413 +-766 +-1042 +-1154 +-1184 +-1217 +-1207 +-1098 +-873 +-605 +-386 +-260 +-81 +253 +645 +954 +1046 +1000 +974 +1092 +1251 +1249 +1059 +737 +429 +212 +7 +-280 +-619 +-887 +-1060 +-1154 +-1224 +-1307 +-1291 +-1102 +-789 +-512 +-333 +-188 +24 +400 +816 +1074 +1115 +1039 +1024 +1099 +1195 +1139 +917 +641 +374 +132 +-138 +-458 +-785 +-1003 +-1092 +-1171 +-1271 +-1340 +-1268 +-1005 +-651 +-352 +-214 +-109 +103 +448 +819 +1032 +1078 +1061 +1116 +1200 +1190 +1051 +786 +515 +294 +42 +-290 +-644 +-916 +-1051 +-1084 +-1144 +-1297 +-1403 +-1302 +-990 +-603 +-292 +-109 +47 +316 +672 +968 +1113 +1127 +1105 +1127 +1160 +1071 +864 +632 +419 +200 +-109 +-507 +-889 +-1086 +-1099 +-1078 +-1111 +-1228 +-1288 +-1156 +-829 +-468 +-193 +13 +208 +468 +753 +968 +1084 +1147 +1223 +1242 +1156 +952 +677 +464 +315 +121 +-214 +-630 +-996 +-1183 +-1182 +-1156 +-1199 +-1264 +-1227 +-1023 +-696 +-354 +-93 +138 +401 +655 +861 +978 +1047 +1143 +1266 +1311 +1170 +890 +602 +379 +234 +17 +-336 +-761 +-1077 +-1211 +-1209 +-1169 +-1185 +-1183 +-1087 +-861 +-579 +-301 +-31 +234 +531 +795 +947 +1011 +1067 +1174 +1265 +1247 +1027 +700 +434 +276 +147 +-63 +-402 +-790 +-1087 +-1216 +-1241 +-1240 +-1197 +-1091 +-906 +-674 +-443 +-242 +21 +356 +687 +927 +1012 +1009 +1040 +1172 +1287 +1249 +1021 +686 +390 +179 +-17 +-285 +-597 +-879 +-1068 +-1161 +-1212 +-1250 +-1216 +-1056 +-811 +-580 +-381 +-195 +59 +428 +795 +1009 +1046 +1017 +1040 +1143 +1228 +1154 +923 +632 +359 +121 +-137 +-434 +-734 +-939 +-1053 +-1140 +-1220 +-1258 +-1176 +-955 +-680 +-470 +-336 +-176 +83 +448 +805 +1015 +1064 +1069 +1116 +1174 +1167 +1036 +799 +564 +338 +77 +-238 +-566 +-807 +-958 +-1038 +-1150 +-1306 +-1363 +-1242 +-946 +-612 +-367 +-216 +-71 +195 +523 +813 +1002 +1061 +1079 +1118 +1146 +1089 +950 +764 +552 +313 +-20 +-409 +-758 +-955 +-1030 +-1081 +-1175 +-1297 +-1319 +-1164 +-873 +-581 +-352 +-161 +44 +323 +630 +858 +990 +1078 +1158 +1200 +1166 +1028 +840 +674 +520 +294 +-46 +-436 +-777 +-965 +-1033 +-1099 +-1221 +-1320 +-1292 +-1095 +-782 +-479 +-256 +-60 +162 +413 +668 +859 +996 +1108 +1216 +1240 +1129 +949 +735 +578 +417 +177 +-193 +-593 +-874 +-1005 +-1017 +-1037 +-1123 +-1203 +-1169 +-996 +-750 +-471 +-202 +51 +334 +589 +774 +896 +1010 +1139 +1240 +1239 +1094 +867 +667 +522 +357 +97 +-269 +-655 +-920 +-1031 +-1075 +-1109 +-1147 +-1138 +-1032 +-851 +-642 +-428 +-178 +102 +393 +635 +786 +884 +1009 +1158 +1242 +1195 +1023 +781 +582 +440 +259 +-17 +-357 +-684 +-923 +-1056 +-1130 +-1194 +-1207 +-1134 +-995 +-813 +-613 +-376 +-75 +276 +573 +759 +826 +871 +973 +1125 +1230 +1187 +1007 +759 +522 +311 +75 +-213 +-518 +-764 +-943 +-1083 +-1181 +-1235 +-1187 +-1053 +-868 +-702 +-545 +-322 +-26 +331 +636 +813 +884 +938 +1034 +1134 +1170 +1078 +873 +657 +445 +221 +-27 +-298 +-567 +-802 +-993 +-1166 +-1272 +-1266 +-1143 +-942 +-740 +-574 +-430 +-211 +96 +414 +685 +840 +908 +972 +1064 +1141 +1132 +1044 +866 +650 +413 +128 +-176 +-462 +-678 +-843 +-990 +-1131 +-1245 +-1242 +-1099 +-883 +-688 +-523 +-354 +-127 +188 +516 +775 +919 +1000 +1053 +1088 +1091 +1038 +941 +826 +654 +389 +53 +-305 +-592 +-770 +-880 +-1008 +-1163 +-1261 +-1235 +-1060 +-808 +-584 +-411 +-229 +1 +273 +564 +808 +975 +1091 +1162 +1150 +1086 +978 +859 +735 +565 +296 +-59 +-411 +-662 +-816 +-918 +-1042 +-1190 +-1267 +-1220 +-1042 +-792 +-539 +-303 +-71 +172 +407 +619 +812 +975 +1107 +1185 +1170 +1068 +942 +822 +696 +494 +192 +-192 +-548 +-778 +-915 +-1009 +-1095 +-1179 +-1206 +-1128 +-957 +-739 +-505 +-254 +2 +254 +489 +687 +867 +1043 +1182 +1219 +1152 +1010 +854 +738 +608 +400 +85 +-279 +-603 +-831 +-961 +-1061 +-1141 +-1186 +-1174 +-1079 +-914 +-708 +-465 +-169 +129 +372 +545 +675 +812 +979 +1144 +1209 +1142 +983 +801 +637 +469 +241 +-63 +-389 +-672 +-879 +-1012 +-1101 +-1155 +-1140 +-1068 +-952 +-823 +-646 +-396 +-89 +244 +505 +662 +759 +861 +996 +1124 +1161 +1078 +904 +726 +551 +365 +129 +-163 +-469 +-734 +-938 +-1101 +-1189 +-1194 +-1114 +-988 +-843 +-711 +-562 +-318 +-3 +312 +574 +735 +831 +934 +1066 +1164 +1168 +1073 +893 +685 +468 +229 +-37 +-294 +-523 +-733 +-916 +-1086 +-1204 +-1215 +-1110 +-947 +-780 +-628 +-449 +-206 +100 +408 +646 +798 +887 +979 +1071 +1130 +1112 +1019 +878 +680 +440 +162 +-137 +-404 +-602 +-774 +-948 +-1101 +-1186 +-1165 +-1024 +-844 +-681 +-538 +-357 +-110 +184 +481 +704 +858 +957 +1029 +1064 +1064 +1026 +942 +823 +639 +363 +48 +-251 +-483 +-648 +-798 +-975 +-1142 +-1217 +-1168 +-1001 +-791 +-601 +-432 +-239 +6 +259 +507 +715 +861 +971 +1046 +1072 +1045 +989 +905 +772 +561 +264 +-81 +-387 +-597 +-737 +-866 +-999 +-1134 +-1192 +-1134 +-982 +-774 +-559 +-339 +-123 +114 +343 +553 +746 +914 +1040 +1085 +1052 +960 +860 +784 +680 +487 +189 +-168 +-496 +-718 +-850 +-962 +-1062 +-1138 +-1157 +-1078 +-915 +-710 +-491 +-254 +-21 +185 +376 +562 +760 +959 +1109 +1152 +1090 +958 +822 +700 +560 +347 +56 +-271 +-549 +-746 +-878 +-977 +-1061 +-1102 +-1087 +-1012 +-877 +-689 +-452 +-184 +87 +324 +496 +648 +810 +976 +1101 +1138 +1068 +933 +791 +648 +475 +244 +-46 +-359 +-620 +-821 +-964 +-1052 +-1096 +-1095 +-1035 +-936 +-811 +-634 +-386 +-90 +198 +434 +604 +739 +897 +1044 +1131 +1131 +1038 +900 +751 +596 +397 +158 +-113 +-392 +-634 +-847 +-1015 +-1125 +-1147 +-1093 +-996 +-873 +-732 +-536 +-274 +30 +304 +512 +661 +784 +917 +1053 +1126 +1117 +1032 +896 +724 +523 +283 +20 +-245 +-485 +-711 +-922 +-1077 +-1150 +-1126 +-1037 +-926 +-818 +-683 +-484 +-212 +106 +396 +609 +755 +871 +967 +1044 +1091 +1072 +992 +868 +677 +432 +166 +-93 +-321 +-533 +-745 +-964 +-1137 +-1204 +-1159 +-1026 +-867 +-731 +-587 +-388 +-132 +149 +420 +638 +794 +909 +990 +1029 +1028 +1002 +930 +805 +598 +320 +18 +-248 +-442 +-607 +-778 +-968 +-1134 +-1203 +-1149 +-1005 +-823 +-642 +-457 +-245 +4 +254 +487 +694 +857 +965 +1022 +1024 +989 +951 +891 +768 +536 +229 +-107 +-391 +-578 +-723 +-871 +-1031 +-1146 +-1177 +-1107 +-947 +-774 +-591 +-390 +-174 +59 +306 +545 +765 +958 +1076 +1099 +1056 +969 +891 +812 +675 +443 +136 +-189 +-459 +-652 +-796 +-927 +-1052 +-1132 +-1145 +-1076 +-935 +-743 +-516 +-263 +-25 +185 +375 +564 +764 +953 +1084 +1109 +1041 +949 +863 +767 +619 +381 +68 +-253 +-525 +-721 +-863 +-971 +-1046 +-1082 +-1064 +-994 +-870 +-682 +-434 +-168 +87 +295 +474 +650 +838 +1005 +1102 +1101 +1017 +903 +799 +685 +513 +276 +-17 +-317 +-581 +-783 +-941 +-1045 +-1080 +-1076 +-1027 +-946 +-821 +-630 +-365 +-70 +182 +385 +540 +690 +864 +1027 +1123 +1124 +1044 +920 +776 +601 +388 +142 +-121 +-383 +-621 +-830 +-995 +-1090 +-1108 +-1062 +-998 +-900 +-764 +-557 +-282 +15 +274 +464 +618 +759 +897 +1019 +1085 +1075 +1009 +894 +728 +525 +289 +39 +-213 +-455 +-697 +-923 +-1077 +-1142 +-1105 +-1011 +-910 +-815 +-691 +-496 +-234 +54 +320 +527 +690 +828 +944 +1027 +1068 +1054 +974 +841 +655 +423 +178 +-51 +-275 +-490 +-711 +-929 +-1089 +-1148 +-1105 +-1000 +-874 +-746 +-595 +-394 +-149 +118 +370 +593 +770 +892 +972 +1004 +1004 +990 +936 +813 +606 +333 +49 +-197 +-398 +-580 +-770 +-952 +-1088 +-1128 +-1081 +-972 +-846 +-697 +-519 +-308 +-57 +197 +442 +667 +854 +967 +1012 +1009 +987 +959 +908 +779 +554 +268 +-19 +-267 +-463 +-638 +-822 +-988 +-1100 +-1123 +-1063 +-938 +-780 +-594 +-392 +-181 +28 +241 +463 +677 +861 +970 +1003 +982 +952 +920 +847 +701 +447 +148 +-128 +-354 +-530 +-689 +-844 +-983 +-1069 +-1081 +-1027 +-911 +-732 +-516 +-289 +-68 +126 +315 +528 +747 +925 +1020 +1024 +964 +904 +854 +775 +624 +385 +98 +-193 +-443 +-642 +-807 +-938 +-1025 +-1067 +-1056 +-996 +-883 +-692 +-451 +-203 +15 +204 +389 +590 +806 +983 +1063 +1057 +987 +896 +805 +695 +524 +292 +27 +-248 +-499 +-713 +-873 +-975 +-1024 +-1036 +-1022 +-978 +-856 +-659 +-394 +-125 +100 +283 +464 +648 +834 +986 +1062 +1062 +1010 +923 +796 +637 +432 +199 +-59 +-329 +-590 +-813 +-960 +-1023 +-1024 +-997 +-970 +-925 +-812 +-607 +-335 +-47 +203 +398 +569 +730 +875 +990 +1057 +1061 +1003 +900 +741 +541 +322 +100 +-128 +-369 +-615 +-846 +-1002 +-1066 +-1056 +-1001 +-935 +-852 +-711 +-505 +-244 +13 +248 +453 +619 +774 +893 +981 +1037 +1050 +1008 +882 +686 +453 +218 +11 +-193 +-415 +-660 +-887 +-1035 +-1074 +-1040 +-972 +-887 +-782 +-630 +-424 +-177 +80 +320 +537 +711 +829 +904 +945 +975 +992 +960 +840 +633 +382 +133 +-97 +-306 +-513 +-737 +-927 +-1051 +-1085 +-1045 +-963 +-857 +-714 +-542 +-346 +-127 +107 +357 +593 +788 +909 +958 +977 +988 +982 +932 +782 +551 +284 +36 +-171 +-369 +-567 +-774 +-946 +-1050 +-1082 +-1044 +-958 +-824 +-654 +-460 +-250 +-35 +192 +428 +650 +819 +913 +940 +940 +949 +937 +872 +717 +487 +216 +-39 +-260 +-467 +-660 +-828 +-961 +-1046 +-1068 +-1032 +-934 +-770 +-568 +-355 +-153 +33 +242 +477 +712 +884 +973 +984 +953 +923 +886 +802 +646 +423 +164 +-96 +-335 +-545 +-726 +-865 +-966 +-1030 +-1050 +-1003 +-892 +-708 +-485 +-259 +-62 +112 +301 +515 +732 +897 +980 +991 +956 +904 +829 +714 +542 +321 +77 +-179 +-423 +-629 +-780 +-881 +-944 +-981 +-1000 +-968 +-851 +-658 +-418 +-178 +35 +223 +405 +595 +769 +904 +975 +983 +944 +873 +764 +630 +464 +253 +14 +-245 +-501 +-722 +-870 +-944 +-965 +-963 +-950 +-903 +-781 +-587 +-348 +-106 +109 +300 +474 +645 +797 +911 +986 +1001 +952 +849 +701 +526 +340 +154 +-61 +-303 +-548 +-760 +-901 +-961 +-964 +-946 +-908 +-833 +-700 +-500 +-257 +-16 +204 +403 +565 +702 +812 +899 +962 +984 +945 +828 +655 +450 +245 +51 +-151 +-378 +-613 +-814 +-944 +-988 +-967 +-916 +-852 +-758 +-626 +-438 +-205 +44 +280 +490 +663 +782 +861 +919 +964 +971 +924 +786 +584 +362 +151 +-42 +-239 +-449 +-668 +-856 +-980 +-1023 +-997 +-921 +-815 +-688 +-529 +-347 +-139 +90 +327 +542 +711 +820 +872 +911 +946 +955 +896 +753 +536 +290 +63 +-136 +-324 +-513 +-703 +-871 +-979 +-1018 +-991 +-910 +-781 +-623 +-446 +-262 +-60 +163 +406 +625 +782 +862 +886 +894 +906 +899 +839 +698 +485 +241 +-1 +-226 +-429 +-618 +-779 +-901 +-994 +-1029 +-1000 +-896 +-733 +-544 +-355 +-177 +9 +217 +449 +662 +818 +894 +912 +918 +910 +872 +783 +625 +413 +175 +-71 +-300 +-501 +-670 +-804 +-907 +-982 +-1020 +-990 +-878 +-696 +-486 +-280 +-93 +88 +289 +506 +706 +842 +907 +919 +908 +878 +814 +711 +554 +353 +122 +-129 +-379 +-594 +-747 +-847 +-909 +-956 +-975 +-938 +-822 +-636 +-418 +-208 +-16 +167 +358 +561 +744 +872 +943 +955 +918 +850 +749 +616 +461 +276 +58 +-195 +-447 +-656 +-802 +-882 +-928 +-958 +-956 +-903 +-768 +-565 +-337 +-119 +72 +252 +428 +601 +758 +872 +943 +968 +932 +842 +707 +548 +381 +192 +-20 +-267 +-514 +-714 +-843 +-900 +-918 +-929 +-913 +-851 +-720 +-523 +-289 +-55 +155 +351 +524 +665 +777 +868 +925 +947 +906 +797 +640 +465 +289 +104 +-100 +-339 +-577 +-770 +-886 +-929 +-927 +-900 +-853 +-768 +-634 +-450 +-231 +0 +220 +413 +574 +698 +791 +870 +926 +937 +882 +750 +572 +381 +196 +15 +-187 +-406 +-619 +-790 +-896 +-934 +-925 +-885 +-814 +-706 +-562 +-620 +-741 +-834 +-876 +-851 +-770 +-652 +-518 +-374 +-218 +-39 +157 +352 +524 +660 +756 +805 +815 +796 +753 +676 +559 +396 +191 +-27 +-229 +-400 +-540 +-663 +-774 +-849 +-876 +-838 +-744 +-610 +-459 +-299 +-134 +39 +222 +401 +560 +691 +778 +816 +809 +770 +707 +620 +498 +324 +111 +-115 +-315 +-479 +-601 +-701 +-783 +-838 +-851 +-803 +-706 +-564 +-400 +-224 +-47 +124 +292 +450 +597 +719 +803 +829 +805 +743 +654 +555 +426 +253 +48 +-177 +-378 +-539 +-664 +-748 +-806 +-831 +-819 +-762 +-660 +-517 +-343 +-157 +26 +199 +354 +498 +635 +747 +821 +841 +799 +718 +614 +497 +352 +176 +-20 +-228 +-421 +-581 +-695 +-773 +-812 +-816 +-783 +-714 +-609 +-462 +-278 +-81 +110 +277 +418 +542 +657 +757 +819 +829 +784 +693 +574 +439 +283 +106 +-87 +-287 +-472 +-626 +-740 +-802 +-818 +-792 +-739 +-662 +-557 +-416 +-231 +-26 +175 +346 +478 +591 +692 +775 +824 +823 +766 +668 +538 +386 +215 +33 +-148 +-331 +-501 +-655 +-769 +-827 +-829 +-781 +-705 +-613 +-501 +-351 +-169 +30 +227 +394 +524 +626 +710 +773 +806 +799 +743 +638 +495 +318 +133 +-50 +-223 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1802.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1802.samples new file mode 100644 index 00000000..13820de2 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1802.samples @@ -0,0 +1,4096 @@ +-115 +-100 +-82 +-64 +-54 +-38 +-7 +27 +68 +95 +104 +105 +103 +107 +105 +91 +66 +30 +-3 +-29 +-52 +-67 +-87 +-103 +-116 +-122 +-113 +-91 +-59 +-35 +-16 +6 +32 +63 +94 +113 +117 +110 +99 +84 +71 +55 +30 +0 +-40 +-72 +-90 +-100 +-101 +-104 +-109 +-109 +-95 +-65 +-26 +5 +32 +51 +68 +84 +106 +122 +122 +108 +83 +50 +25 +6 +-15 +-42 +-74 +-105 +-119 +-116 +-110 +-102 +-90 +-76 +-55 +-25 +11 +48 +76 +96 +100 +101 +112 +116 +108 +82 +47 +10 +-17 +-39 +-59 +-78 +-100 +-121 +-130 +-129 +-106 +-77 +-47 +-27 +-14 +15 +51 +87 +108 +117 +114 +106 +96 +83 +65 +41 +11 +-25 +-64 +-90 +-103 +-106 +-110 +-119 +-124 +-109 +-81 +-47 +-15 +12 +37 +62 +87 +103 +122 +127 +117 +97 +73 +48 +25 +4 +-27 +-59 +-92 +-113 +-114 +-110 +-105 +-95 +-82 +-61 +-33 +4 +38 +71 +89 +100 +108 +113 +121 +117 +97 +60 +27 +-3 +-26 +-48 +-71 +-96 +-116 +-129 +-128 +-114 +-91 +-60 +-37 +-16 +8 +48 +85 +116 +128 +127 +120 +113 +104 +83 +59 +25 +-12 +-49 +-77 +-95 +-103 +-114 +-122 +-130 +-119 +-90 +-52 +-18 +7 +32 +57 +85 +111 +127 +130 +125 +109 +82 +55 +35 +11 +-17 +-57 +-90 +-113 +-118 +-116 +-117 +-114 +-100 +-76 +-44 +-11 +25 +60 +84 +99 +106 +117 +123 +122 +106 +73 +37 +5 +-19 +-42 +-64 +-88 +-112 +-123 +-127 +-117 +-96 +-72 +-52 +-31 +-7 +28 +68 +97 +112 +112 +108 +102 +97 +83 +59 +29 +-5 +-39 +-68 +-87 +-96 +-101 +-114 +-120 +-115 +-92 +-58 +-27 +-5 +15 +39 +71 +99 +117 +119 +113 +102 +81 +60 +38 +17 +-10 +-45 +-83 +-104 +-106 +-105 +-104 +-105 +-99 +-82 +-52 +-21 +11 +42 +69 +87 +96 +105 +118 +118 +108 +80 +46 +20 +-2 +-25 +-55 +-86 +-108 +-117 +-122 +-115 +-101 +-78 +-56 +-40 +-17 +12 +50 +84 +102 +107 +102 +109 +105 +91 +68 +36 +10 +-20 +-48 +-74 +-89 +-98 +-112 +-122 +-120 +-99 +-68 +-39 +-19 +1 +29 +61 +91 +109 +115 +111 +105 +87 +66 +47 +27 +1 +-39 +-79 +-100 +-108 +-104 +-108 +-113 +-108 +-91 +-64 +-32 +-2 +29 +55 +75 +90 +104 +119 +123 +110 +86 +52 +27 +10 +-12 +-39 +-72 +-100 +-114 +-122 +-118 +-107 +-90 +-71 +-50 +-26 +7 +46 +80 +98 +101 +104 +113 +115 +106 +79 +46 +14 +-18 +-44 +-70 +-87 +-99 +-111 +-124 +-126 +-109 +-80 +-49 +-24 +-7 +20 +57 +92 +110 +117 +118 +113 +103 +86 +66 +43 +16 +-21 +-58 +-88 +-98 +-103 +-104 +-108 +-111 +-96 +-67 +-31 +-2 +25 +49 +75 +93 +106 +122 +130 +123 +97 +64 +39 +19 +-2 +-32 +-69 +-95 +-112 +-118 +-113 +-107 +-94 +-75 +-54 +-32 +2 +42 +78 +98 +107 +110 +117 +123 +120 +98 +69 +34 +2 +-24 +-50 +-71 +-88 +-104 +-116 +-119 +-109 +-82 +-55 +-31 +-13 +11 +47 +81 +101 +113 +116 +114 +109 +92 +72 +51 +27 +-5 +-45 +-75 +-92 +-93 +-103 +-109 +-113 +-102 +-77 +-48 +-19 +6 +34 +62 +86 +99 +114 +125 +121 +106 +74 +46 +29 +9 +-17 +-52 +-84 +-103 +-110 +-108 +-105 +-99 +-84 +-64 +-42 +-12 +22 +59 +84 +97 +103 +108 +117 +117 +97 +69 +35 +5 +-19 +-43 +-67 +-90 +-106 +-116 +-122 +-120 +-94 +-69 +-45 +-26 +-6 +26 +62 +88 +101 +105 +104 +102 +91 +76 +50 +27 +-3 +-36 +-66 +-87 +-94 +-99 +-111 +-119 +-114 +-94 +-63 +-35 +-9 +15 +41 +66 +85 +101 +110 +111 +100 +76 +54 +36 +17 +-5 +-40 +-75 +-99 +-107 +-107 +-108 +-105 +-95 +-80 +-60 +-35 +-2 +32 +62 +79 +86 +91 +104 +109 +99 +71 +41 +20 +-6 +-26 +-53 +-78 +-94 +-111 +-117 +-115 +-103 +-78 +-62 +-40 +-19 +9 +46 +77 +96 +103 +104 +106 +102 +92 +75 +46 +16 +-17 +-43 +-66 +-81 +-91 +-106 +-114 +-113 +-96 +-71 +-44 +-19 +4 +29 +54 +82 +101 +114 +114 +104 +88 +72 +53 +35 +8 +-27 +-58 +-85 +-93 +-96 +-97 +-96 +-95 +-80 +-56 +-29 +2 +33 +63 +82 +94 +105 +114 +118 +109 +89 +60 +33 +10 +-11 +-39 +-63 +-86 +-105 +-110 +-110 +-100 +-82 +-63 +-45 +-24 +5 +41 +74 +93 +101 +102 +106 +107 +97 +79 +52 +26 +-6 +-35 +-59 +-79 +-86 +-100 +-114 +-118 +-106 +-81 +-50 +-30 +-11 +14 +44 +73 +95 +108 +109 +106 +96 +78 +59 +41 +19 +-13 +-45 +-73 +-91 +-93 +-98 +-101 +-105 +-96 +-75 +-49 +-15 +8 +35 +58 +73 +86 +99 +110 +105 +86 +59 +34 +18 +-2 +-28 +-59 +-88 +-103 +-110 +-109 +-104 +-93 +-74 +-59 +-42 +-11 +23 +56 +78 +89 +93 +93 +101 +98 +83 +56 +27 +1 +-25 +-49 +-70 +-85 +-98 +-109 +-115 +-106 +-82 +-59 +-34 +-17 +4 +32 +61 +87 +101 +105 +106 +98 +85 +68 +48 +26 +-6 +-37 +-64 +-81 +-91 +-99 +-105 +-109 +-103 +-78 +-49 +-22 +4 +27 +49 +69 +86 +102 +112 +114 +97 +74 +52 +31 +14 +-10 +-42 +-69 +-89 +-98 +-100 +-95 +-86 +-79 +-62 +-39 +-12 +17 +48 +70 +85 +93 +99 +104 +105 +94 +68 +39 +13 +-11 +-33 +-52 +-72 +-91 +-103 +-108 +-105 +-87 +-65 +-44 +-26 +-5 +21 +50 +79 +97 +104 +103 +100 +92 +80 +60 +42 +14 +-21 +-47 +-70 +-81 +-90 +-98 +-104 +-102 +-85 +-58 +-35 +-12 +12 +34 +58 +78 +93 +105 +108 +100 +81 +59 +43 +25 +2 +-26 +-56 +-80 +-92 +-98 +-97 +-94 +-87 +-73 +-55 +-31 +-4 +27 +57 +71 +81 +91 +99 +101 +95 +78 +49 +23 +-1 +-23 +-44 +-64 +-86 +-101 +-107 +-106 +-91 +-72 +-52 +-36 +-19 +4 +36 +67 +92 +97 +94 +92 +88 +83 +68 +46 +17 +-16 +-44 +-66 +-80 +-90 +-102 +-108 +-109 +-98 +-73 +-44 +-20 +3 +23 +46 +74 +96 +110 +110 +104 +89 +70 +53 +35 +13 +-14 +-47 +-74 +-88 +-93 +-92 +-96 +-92 +-85 +-68 +-41 +-11 +17 +44 +63 +79 +92 +101 +109 +105 +89 +62 +40 +19 +-1 +-26 +-51 +-76 +-96 +-102 +-103 +-94 +-81 +-64 +-49 +-32 +-4 +25 +57 +78 +88 +91 +94 +95 +89 +75 +56 +29 +-1 +-27 +-49 +-65 +-79 +-92 +-105 +-108 +-101 +-78 +-52 +-31 +-11 +10 +34 +60 +84 +99 +107 +103 +90 +78 +64 +44 +27 +-3 +-36 +-62 +-80 +-88 +-93 +-96 +-99 +-91 +-76 +-52 +-22 +5 +26 +46 +65 +79 +92 +100 +101 +86 +64 +42 +23 +5 +-19 +-44 +-70 +-86 +-100 +-102 +-97 +-87 +-73 +-58 +-41 +-20 +12 +42 +66 +83 +88 +89 +96 +95 +81 +62 +38 +10 +-14 +-37 +-51 +-70 +-81 +-94 +-103 +-98 +-80 +-58 +-36 +-18 +-1 +21 +45 +72 +88 +95 +92 +86 +74 +64 +47 +30 +1 +-26 +-51 +-73 +-81 +-88 +-92 +-97 +-92 +-76 +-55 +-34 +-8 +15 +35 +55 +70 +86 +95 +95 +84 +70 +50 +34 +15 +-5 +-32 +-56 +-76 +-90 +-94 +-92 +-86 +-77 +-65 +-52 +-27 +-2 +28 +51 +64 +76 +79 +87 +88 +81 +65 +43 +19 +-5 +-25 +-39 +-54 +-73 +-86 +-96 +-92 +-79 +-64 +-47 +-31 +-12 +11 +35 +60 +79 +89 +89 +87 +81 +71 +61 +41 +18 +-12 +-38 +-56 +-70 +-75 +-84 +-90 +-90 +-83 +-61 +-37 +-15 +8 +29 +45 +64 +82 +93 +99 +92 +78 +61 +45 +29 +7 +-15 +-40 +-64 +-79 +-86 +-86 +-82 +-78 +-70 +-58 +-37 +-10 +18 +43 +59 +70 +79 +90 +95 +87 +75 +56 +34 +12 +-9 +-28 +-45 +-63 +-82 +-91 +-92 +-84 +-71 +-58 +-41 +-25 +-2 +22 +50 +69 +80 +86 +85 +84 +79 +69 +52 +29 +0 +-24 +-44 +-58 +-70 +-80 +-88 +-92 +-86 +-71 +-50 +-30 +-9 +11 +30 +51 +72 +86 +93 +91 +80 +65 +52 +38 +23 +1 +-27 +-51 +-69 +-76 +-79 +-80 +-79 +-76 +-65 +-47 +-22 +6 +31 +47 +60 +73 +84 +92 +90 +82 +63 +42 +21 +2 +-16 +-38 +-58 +-77 +-90 +-92 +-87 +-75 +-65 +-53 +-36 +-15 +12 +38 +58 +72 +80 +84 +82 +78 +71 +56 +35 +10 +-15 +-34 +-48 +-60 +-72 +-86 +-91 +-88 +-77 +-58 +-37 +-16 +2 +19 +42 +65 +83 +89 +89 +80 +69 +57 +42 +25 +3 +-24 +-48 +-65 +-75 +-81 +-83 +-81 +-78 +-72 +-56 +-31 +-4 +18 +37 +54 +68 +84 +92 +91 +85 +70 +50 +31 +11 +-6 +-27 +-48 +-71 +-88 +-91 +-88 +-80 +-69 +-60 +-43 +-24 +1 +32 +53 +69 +78 +84 +86 +85 +81 +66 +46 +19 +-6 +-26 +-41 +-56 +-73 +-84 +-94 +-94 +-82 +-66 +-44 +-25 +-7 +12 +34 +58 +75 +85 +87 +81 +72 +64 +55 +39 +18 +-10 +-34 +-56 +-68 +-75 +-81 +-84 +-82 +-71 +-57 +-35 +-13 +11 +29 +47 +64 +78 +87 +92 +84 +69 +52 +34 +17 +-2 +-22 +-44 +-64 +-79 +-85 +-86 +-81 +-73 +-64 +-50 +-30 +-4 +20 +42 +61 +71 +79 +85 +87 +84 +72 +51 +26 +1 +-17 +-32 +-50 +-69 +-81 +-88 +-92 +-85 +-70 +-54 +-36 +-19 +1 +24 +49 +69 +81 +86 +81 +78 +70 +60 +44 +23 +-3 +-29 +-50 +-66 +-74 +-82 +-88 +-88 +-81 +-67 +-47 +-24 +-3 +17 +36 +53 +70 +83 +87 +86 +74 +61 +44 +24 +7 +-14 +-37 +-59 +-74 +-83 +-84 +-81 +-76 +-69 +-58 +-38 +-16 +10 +33 +53 +65 +75 +81 +83 +82 +71 +54 +32 +13 +-7 +-25 +-40 +-59 +-73 +-85 +-89 +-81 +-69 +-55 +-41 +-25 +-4 +21 +47 +67 +80 +83 +84 +81 +75 +64 +50 +32 +7 +-17 +-39 +-56 +-64 +-72 +-79 +-83 +-81 +-71 +-50 +-28 +-8 +11 +26 +46 +65 +83 +89 +87 +79 +68 +54 +38 +22 +2 +-22 +-46 +-64 +-75 +-76 +-74 +-75 +-70 +-59 +-43 +-20 +6 +29 +45 +59 +71 +79 +85 +84 +78 +62 +42 +23 +3 +-13 +-32 +-52 +-68 +-81 +-87 +-85 +-78 +-64 +-49 +-32 +-13 +10 +35 +58 +72 +81 +84 +83 +78 +70 +59 +39 +15 +-7 +-28 +-48 +-61 +-73 +-81 +-88 +-89 +-78 +-62 +-40 +-21 +-3 +15 +37 +58 +73 +84 +85 +78 +68 +55 +42 +29 +11 +-12 +-41 +-61 +-74 +-80 +-81 +-84 +-81 +-73 +-58 +-36 +-14 +10 +29 +44 +59 +70 +80 +82 +80 +68 +48 +26 +10 +-6 +-23 +-43 +-63 +-77 +-86 +-85 +-79 +-70 +-54 +-42 +-24 +-2 +23 +44 +58 +66 +73 +76 +75 +73 +58 +38 +18 +-4 +-25 +-42 +-55 +-69 +-80 +-86 +-88 +-83 +-65 +-44 +-25 +-9 +6 +25 +48 +66 +79 +81 +79 +71 +60 +46 +33 +14 +-10 +-34 +-53 +-64 +-73 +-77 +-81 +-82 +-75 +-58 +-37 +-16 +3 +23 +40 +56 +69 +79 +85 +84 +71 +55 +38 +24 +7 +-14 +-37 +-55 +-68 +-75 +-77 +-78 +-73 +-61 +-47 +-30 +-9 +15 +40 +57 +67 +73 +77 +80 +73 +64 +46 +28 +7 +-15 +-32 +-49 +-62 +-72 +-80 +-82 +-76 +-64 +-49 +-34 +-20 +-1 +21 +42 +61 +74 +79 +79 +75 +68 +55 +42 +26 +4 +-20 +-42 +-54 +-63 +-69 +-73 +-77 +-72 +-59 +-42 +-21 +0 +18 +33 +51 +64 +76 +84 +86 +78 +63 +44 +32 +18 +2 +-24 +-46 +-61 +-73 +-78 +-79 +-71 +-64 +-53 +-40 +-17 +7 +30 +49 +60 +70 +78 +84 +83 +75 +60 +40 +19 +-1 +-17 +-34 +-47 +-64 +-78 +-84 +-80 +-68 +-53 +-37 +-22 +-6 +15 +40 +59 +72 +81 +83 +81 +73 +65 +51 +34 +13 +-12 +-34 +-51 +-62 +-69 +-77 +-81 +-79 +-69 +-48 +-29 +-11 +9 +27 +45 +59 +73 +84 +85 +78 +66 +49 +37 +24 +5 +-20 +-44 +-62 +-73 +-76 +-82 +-81 +-76 +-67 +-53 +-35 +-8 +17 +36 +53 +59 +69 +78 +80 +76 +61 +42 +24 +7 +-11 +-31 +-49 +-65 +-79 +-87 +-87 +-80 +-68 +-53 +-41 +-26 +-3 +22 +47 +61 +72 +76 +75 +73 +65 +53 +38 +17 +-6 +-31 +-49 +-60 +-68 +-77 +-85 +-87 +-78 +-62 +-44 +-23 +-5 +15 +35 +52 +67 +82 +88 +81 +70 +56 +42 +29 +11 +-13 +-39 +-59 +-71 +-79 +-82 +-83 +-76 +-66 +-56 +-36 +-14 +11 +33 +51 +65 +73 +84 +91 +87 +73 +51 +33 +18 +-1 +-21 +-40 +-59 +-73 +-80 +-82 +-78 +-66 +-53 +-40 +-23 +0 +26 +47 +63 +73 +81 +84 +83 +76 +66 +50 +29 +4 +-17 +-35 +-47 +-58 +-73 +-81 +-82 +-75 +-58 +-41 +-22 +-4 +15 +35 +52 +70 +83 +90 +89 +79 +65 +49 +36 +19 +-4 +-27 +-48 +-62 +-71 +-78 +-80 +-76 +-68 +-54 +-37 +-19 +3 +25 +42 +55 +66 +78 +82 +83 +71 +52 +35 +19 +3 +-15 +-34 +-54 +-70 +-82 +-85 +-82 +-72 +-63 +-49 +-33 +-15 +8 +33 +51 +62 +71 +75 +76 +72 +62 +49 +32 +12 +-14 +-32 +-45 +-60 +-71 +-84 +-86 +-82 +-71 +-55 +-42 +-23 +-7 +14 +35 +53 +68 +74 +76 +71 +60 +53 +40 +24 +1 +-24 +-42 +-58 +-67 +-77 +-80 +-81 +-78 +-66 +-52 +-31 +-7 +13 +29 +44 +58 +72 +83 +82 +71 +60 +42 +26 +12 +-8 +-29 +-47 +-63 +-75 +-78 +-77 +-74 +-65 +-58 +-42 +-22 +3 +24 +41 +54 +62 +70 +75 +78 +74 +60 +40 +20 +-3 +-19 +-33 +-49 +-62 +-77 +-85 +-84 +-72 +-55 +-42 +-26 +-12 +8 +29 +50 +66 +76 +80 +75 +67 +60 +52 +38 +17 +-8 +-31 +-46 +-56 +-66 +-75 +-79 +-80 +-70 +-54 +-34 +-10 +6 +23 +36 +54 +70 +83 +87 +80 +69 +54 +40 +26 +9 +-13 +-37 +-55 +-68 +-76 +-76 +-73 +-70 +-62 +-47 +-29 +-4 +19 +39 +54 +63 +73 +78 +85 +82 +69 +51 +32 +13 +-7 +-26 +-41 +-59 +-72 +-84 +-86 +-79 +-63 +-49 +-36 +-18 +2 +26 +49 +67 +79 +85 +84 +80 +74 +63 +46 +26 +1 +-22 +-39 +-53 +-64 +-77 +-86 +-87 +-81 +-63 +-44 +-25 +-7 +13 +33 +51 +69 +81 +85 +84 +73 +61 +48 +31 +11 +-12 +-35 +-58 +-70 +-80 +-81 +-80 +-78 +-71 +-59 +-40 +-17 +7 +31 +48 +60 +69 +79 +87 +83 +72 +54 +36 +15 +-6 +-23 +-43 +-57 +-75 +-87 +-90 +-87 +-74 +-60 +-45 +-28 +-12 +13 +38 +57 +68 +76 +77 +77 +73 +66 +50 +31 +5 +-20 +-37 +-52 +-61 +-72 +-83 +-87 +-81 +-66 +-49 +-30 +-12 +7 +27 +48 +65 +78 +87 +86 +77 +66 +53 +41 +23 +1 +-23 +-44 +-59 +-68 +-74 +-77 +-76 +-70 +-59 +-44 +-22 +-1 +23 +42 +55 +67 +78 +87 +86 +76 +59 +42 +24 +7 +-14 +-32 +-51 +-67 +-77 +-83 +-80 +-73 +-57 +-43 +-32 +-12 +12 +36 +55 +69 +77 +82 +84 +82 +73 +57 +40 +15 +-8 +-30 +-46 +-59 +-71 +-82 +-89 +-83 +-71 +-57 +-40 +-23 +-5 +16 +40 +56 +72 +79 +81 +78 +67 +56 +45 +28 +5 +-19 +-41 +-58 +-69 +-77 +-82 +-86 +-80 +-69 +-54 +-34 +-13 +10 +27 +44 +56 +68 +80 +83 +74 +59 +40 +24 +8 +-11 +-31 +-51 +-69 +-80 +-88 +-86 +-81 +-71 +-59 +-46 +-26 +-5 +22 +41 +57 +65 +70 +74 +73 +65 +52 +38 +16 +-9 +-28 +-45 +-58 +-70 +-84 +-89 +-89 +-76 +-61 +-46 +-30 +-10 +7 +31 +52 +72 +82 +84 +81 +72 +66 +52 +36 +15 +-11 +-35 +-50 +-62 +-69 +-77 +-78 +-78 +-70 +-53 +-34 +-14 +7 +27 +44 +59 +72 +86 +90 +85 +69 +58 +43 +28 +9 +-14 +-37 +-55 +-69 +-77 +-78 +-73 +-64 +-56 +-43 +-26 +-4 +20 +44 +60 +69 +78 +85 +83 +80 +67 +51 +32 +10 +-7 +-27 +-42 +-56 +-71 +-79 +-81 +-74 +-59 +-44 +-28 +-11 +7 +28 +49 +67 +81 +85 +86 +76 +69 +58 +44 +23 +-4 +-28 +-43 +-58 +-68 +-75 +-81 +-82 +-76 +-61 +-41 +-20 +0 +19 +34 +51 +67 +80 +88 +83 +72 +57 +41 +27 +9 +-10 +-34 +-55 +-71 +-78 +-82 +-80 +-75 +-68 +-56 +-40 +-16 +8 +30 +44 +55 +65 +75 +82 +78 +67 +50 +32 +11 +-8 +-25 +-45 +-60 +-75 +-88 +-90 +-84 +-70 +-57 +-45 +-27 +-9 +17 +39 +57 +70 +77 +79 +74 +69 +60 +47 +27 +3 +-21 +-43 +-57 +-69 +-78 +-86 +-91 +-84 +-73 +-50 +-29 +-10 +8 +27 +44 +62 +78 +85 +84 +76 +63 +50 +37 +18 +-3 +-26 +-50 +-65 +-78 +-81 +-83 +-81 +-76 +-65 +-46 +-26 +2 +25 +41 +53 +65 +78 +86 +88 +80 +61 +41 +24 +4 +-14 +-30 +-47 +-63 +-78 +-81 +-79 +-70 +-57 +-48 +-32 +-14 +12 +39 +57 +70 +77 +79 +80 +79 +73 +61 +41 +17 +-7 +-29 +-42 +-54 +-66 +-75 +-82 +-79 +-69 +-52 +-34 +-14 +2 +23 +46 +62 +81 +87 +88 +81 +71 +63 +48 +29 +6 +-22 +-42 +-56 +-67 +-76 +-80 +-81 +-77 +-68 +-53 +-30 +-6 +17 +36 +51 +67 +77 +87 +88 +82 +70 +53 +36 +17 +-3 +-24 +-42 +-62 +-75 +-83 +-79 +-75 +-63 +-54 +-42 +-20 +3 +25 +48 +63 +72 +74 +79 +78 +71 +61 +41 +22 +-1 +-21 +-39 +-54 +-67 +-80 +-88 +-87 +-79 +-62 +-48 +-32 +-14 +9 +32 +50 +65 +76 +84 +78 +70 +60 +46 +33 +12 +-10 +-31 +-53 +-65 +-75 +-81 +-82 +-86 +-77 +-63 +-40 +-18 +-2 +22 +38 +51 +68 +80 +86 +83 +71 +51 +33 +18 +-2 +-20 +-40 +-62 +-79 +-87 +-88 +-86 +-77 +-67 +-51 +-34 +-11 +10 +35 +51 +60 +69 +75 +79 +74 +63 +46 +25 +4 +-13 +-33 +-47 +-63 +-76 +-85 +-89 +-81 +-67 +-50 +-34 +-17 +2 +20 +42 +64 +74 +81 +80 +73 +69 +58 +41 +20 +-3 +-26 +-45 +-56 +-69 +-76 +-79 +-78 +-73 +-62 +-40 +-20 +0 +21 +39 +51 +67 +83 +95 +91 +79 +63 +45 +31 +13 +-6 +-33 +-51 +-66 +-79 +-81 +-82 +-73 +-63 +-52 +-34 +-12 +10 +40 +55 +64 +76 +84 +93 +88 +79 +65 +46 +25 +2 +-19 +-37 +-49 +-64 +-79 +-82 +-78 +-67 +-52 +-42 +-25 +-6 +16 +43 +60 +71 +76 +84 +78 +70 +65 +52 +36 +6 +-17 +-37 +-50 +-57 +-69 +-79 +-83 +-78 +-64 +-49 +-28 +-8 +10 +30 +44 +63 +75 +88 +87 +76 +66 +47 +35 +20 +-2 +-25 +-48 +-60 +-76 +-79 +-79 +-76 +-68 +-60 +-46 +-27 +-1 +23 +41 +52 +61 +76 +84 +80 +72 +57 +39 +22 +1 +-15 +-34 +-53 +-69 +-81 +-89 +-88 +-72 +-62 +-51 +-38 +-17 +7 +30 +45 +61 +73 +78 +77 +68 +62 +56 +38 +12 +-12 +-32 +-46 +-55 +-73 +-82 +-92 +-83 +-73 +-62 +-44 +-25 +-2 +22 +36 +50 +71 +81 +86 +77 +60 +52 +43 +28 +4 +-18 +-38 +-56 +-71 +-78 +-82 +-75 +-72 +-68 +-56 +-34 +-6 +11 +34 +43 +60 +74 +81 +85 +76 +67 +49 +28 +9 +-11 +-26 +-42 +-63 +-79 +-88 +-83 +-73 +-64 +-57 +-47 +-27 +1 +29 +41 +56 +71 +79 +78 +78 +75 +65 +48 +27 +1 +-24 +-33 +-48 +-56 +-72 +-83 +-82 +-75 +-57 +-42 +-26 +-7 +15 +33 +46 +67 +84 +87 +81 +69 +66 +48 +40 +19 +-8 +-26 +-46 +-59 +-68 +-74 +-79 +-72 +-63 +-53 +-39 +-19 +10 +29 +40 +54 +66 +80 +86 +77 +66 +56 +43 +24 +3 +-16 +-32 +-50 +-67 +-79 +-75 +-75 +-64 +-59 +-52 +-32 +-9 +23 +36 +52 +66 +71 +78 +84 +74 +67 +53 +34 +8 +-15 +-27 +-42 +-57 +-71 +-80 +-90 +-74 +-66 +-53 +-36 +-20 +-2 +17 +41 +51 +68 +87 +81 +72 +57 +52 +45 +22 +4 +-24 +-43 +-53 +-68 +-73 +-82 +-84 +-76 +-65 +-49 +-34 +-10 +14 +33 +40 +52 +72 +82 +82 +66 +57 +45 +29 +11 +-12 +-28 +-47 +-62 +-77 +-87 +-83 +-70 +-66 +-55 +-48 +-26 +7 +26 +42 +51 +63 +74 +76 +77 +68 +53 +36 +17 +-9 +-26 +-36 +-51 +-70 +-82 +-85 +-82 +-69 +-61 +-47 +-33 +-8 +12 +32 +43 +63 +75 +80 +72 +65 +60 +50 +34 +9 +-18 +-33 +-48 +-62 +-68 +-78 +-83 +-77 +-65 +-51 +-35 +-12 +14 +27 +39 +56 +71 +82 +83 +72 +59 +52 +35 +19 +-2 +-22 +-39 +-51 +-64 +-80 +-78 +-71 +-61 +-55 +-41 +-25 +-2 +17 +43 +49 +63 +73 +78 +76 +75 +67 +45 +32 +9 +-12 +-23 +-44 +-53 +-71 +-77 +-72 +-65 +-52 +-44 +-35 +-17 +9 +34 +47 +63 +75 +85 +80 +68 +63 +53 +47 +17 +-5 +-24 +-37 +-51 +-63 +-71 +-80 +-76 +-65 +-53 +-41 +-28 +2 +21 +36 +49 +67 +84 +79 +76 +67 +63 +47 +30 +14 +-13 +-28 +-44 +-65 +-70 +-69 +-70 +-67 +-60 +-46 +-29 +-12 +13 +32 +48 +52 +69 +79 +79 +75 +60 +51 +35 +16 +-6 +-22 +-35 +-48 +-65 +-81 +-80 +-67 +-64 +-51 +-41 +-28 +-3 +14 +35 +51 +60 +71 +75 +67 +60 +55 +47 +29 +-4 +-17 +-34 +-47 +-58 +-68 +-76 +-78 +-73 +-63 +-49 +-33 +-12 +7 +16 +34 +54 +70 +80 +74 +61 +54 +51 +42 +20 +-8 +-26 +-38 +-53 +-67 +-76 +-73 +-67 +-68 +-56 +-46 +-29 +-1 +18 +32 +37 +51 +73 +82 +71 +60 +58 +43 +27 +2 +-16 +-29 +-40 +-60 +-77 +-81 +-72 +-66 +-58 +-50 +-41 +-14 +8 +26 +38 +57 +64 +71 +70 +67 +61 +53 +40 +13 +-11 +-27 +-39 +-47 +-64 +-77 +-81 +-73 +-62 +-52 +-40 +-17 +-4 +16 +36 +47 +66 +77 +78 +67 +64 +56 +48 +29 +9 +-14 +-33 +-47 +-61 +-66 +-74 +-74 +-67 +-62 +-49 +-28 +-7 +20 +30 +36 +52 +72 +84 +80 +67 +64 +55 +36 +16 +-2 +-15 +-33 +-52 +-68 +-77 +-76 +-64 +-63 +-57 +-43 +-27 +-2 +24 +37 +49 +62 +71 +73 +70 +69 +60 +45 +20 +-4 +-21 +-33 +-44 +-57 +-79 +-84 +-74 +-67 +-52 +-47 +-31 +-10 +9 +31 +41 +60 +76 +77 +69 +61 +54 +53 +37 +15 +-16 +-35 +-41 +-55 +-66 +-78 +-76 +-69 +-67 +-55 +-43 +-23 +4 +21 +31 +44 +63 +72 +76 +68 +62 +48 +36 +21 +7 +-19 +-35 +-49 +-61 +-74 +-82 +-67 +-63 +-56 +-50 +-32 +-3 +15 +34 +43 +55 +65 +67 +70 +71 +63 +51 +29 +4 +-10 +-21 +-33 +-52 +-67 +-76 +-74 +-65 +-54 +-47 +-37 +-14 +2 +22 +33 +50 +68 +74 +70 +61 +59 +56 +42 +19 +-5 +-23 +-34 +-39 +-60 +-69 +-68 +-63 +-63 +-53 +-39 +-19 +3 +18 +30 +43 +62 +74 +80 +74 +65 +59 +50 +31 +12 +-5 +-21 +-38 +-55 +-68 +-69 +-65 +-63 +-62 +-52 +-35 +-10 +14 +24 +36 +49 +66 +74 +74 +70 +64 +56 +37 +15 +-4 +-16 +-22 +-42 +-62 +-73 +-78 +-63 +-57 +-56 +-46 +-31 +-10 +12 +22 +44 +60 +64 +70 +66 +64 +56 +47 +31 +5 +-15 +-29 +-39 +-51 +-63 +-72 +-69 +-70 +-63 +-53 +-34 +-12 +1 +12 +26 +49 +67 +72 +70 +58 +53 +48 +33 +13 +-1 +-17 +-34 +-54 +-71 +-76 +-73 +-69 +-70 +-64 +-56 +-31 +-8 +15 +23 +35 +53 +67 +71 +69 +64 +56 +44 +23 +3 +-12 +-22 +-43 +-58 +-76 +-81 +-78 +-73 +-63 +-57 +-44 +-18 +-1 +16 +34 +53 +66 +68 +70 +66 +63 +57 +38 +17 +-8 +-21 +-37 +-49 +-62 +-77 +-78 +-78 +-68 +-55 +-41 +-20 +-7 +8 +25 +48 +67 +73 +72 +68 +66 +61 +47 +27 +11 +-10 +-28 +-42 +-58 +-65 +-68 +-66 +-66 +-62 +-50 +-28 +-5 +14 +29 +37 +55 +70 +82 +81 +73 +68 +57 +40 +15 +3 +-12 +-28 +-49 +-64 +-70 +-71 +-59 +-58 +-46 +-36 +-17 +4 +21 +41 +53 +67 +76 +73 +75 +74 +63 +52 +29 +8 +-9 +-26 +-36 +-49 +-64 +62 +62 +62 +57 +51 +37 +25 +7 +-10 +-28 +-44 +-60 +-68 +-66 +-68 +-69 +-67 +-58 +-39 +-19 +3 +15 +29 +44 +55 +63 +65 +64 +59 +46 +27 +11 +-3 +-17 +-31 +-47 +-63 +-70 +-69 +-67 +-60 +-52 +-41 +-26 +-10 +11 +31 +47 +59 +63 +65 +64 +61 +57 +45 +25 +5 +-9 +-21 +-36 +-47 +-57 +-64 +-65 +-62 +-51 +-40 +-23 +-8 +3 +23 +37 +56 +71 +73 +74 +69 +65 +54 +41 +26 +8 +-13 +-27 +-40 +-50 +-54 +-59 +-61 +-57 +-47 +-31 +-12 +4 +18 +31 +46 +57 +70 +73 +76 +73 +61 +46 +30 +16 +4 +-11 +-32 +-47 +-57 +-61 +-60 +-55 +-51 +-44 +-28 +-12 +4 +24 +38 +52 +58 +60 +63 +65 +61 +51 +33 +14 +-1 +-14 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1950.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1950.samples new file mode 100644 index 00000000..445f50f2 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_1950.samples @@ -0,0 +1,4096 @@ +219 +491 +151 +-100 +-62 +261 +578 +405 +59 +333 +556 +-122 +-879 +-1266 +-1488 +-1388 +-1044 +-724 +-82 +194 +-497 +-1038 +-633 +92 +794 +1125 +1002 +1023 +1184 +721 +173 +270 +346 +36 +-227 +-372 +-235 +-168 +-780 +-1493 +-1394 +-706 +-184 +66 +31 +122 +320 +370 +343 +686 +1104 +1100 +697 +545 +797 +823 +253 +-521 +-963 +-831 +-465 +-454 +-507 +-455 +-618 +-1047 +-999 +-443 +426 +948 +692 +230 +422 +612 +318 +-20 +-199 +-321 +-332 +-552 +-908 +-855 +-970 +-1526 +-1834 +-1420 +-865 +-301 +-288 +-530 +-376 +134 +157 +194 +544 +900 +1012 +850 +558 +494 +464 +-133 +-645 +-532 +-14 +138 +-82 +-631 +-735 +-568 +-387 +-220 +496 +1177 +1326 +978 +767 +1040 +1385 +1267 +884 +907 +1093 +1021 +349 +-221 +-570 +-627 +-869 +-851 +-602 +-113 +-177 +-732 +-1021 +-464 +151 +326 +311 +403 +661 +650 +279 +-125 +63 +60 +-264 +-603 +-440 +-323 +-458 +-1268 +-1802 +-1516 +-853 +-743 +-594 +-199 +243 +404 +195 +148 +576 +1033 +771 +517 +586 +824 +561 +34 +-627 +-589 +-389 +-351 +-473 +-246 +-244 +-557 +-870 +-641 +103 +747 +734 +482 +708 +1016 +1099 +801 +687 +553 +486 +89 +-17 +103 +195 +-427 +-1170 +-1391 +-809 +-243 +3 +28 +117 +387 +463 +444 +547 +1057 +1176 +1054 +787 +861 +851 +560 +-419 +-958 +-753 +-281 +-291 +-499 +-855 +-1116 +-1188 +-1239 +-812 +87 +698 +490 +396 +461 +821 +853 +598 +220 +573 +737 +419 +-205 +-674 +-1305 +-1798 +-2142 +-1918 +-984 +-311 +-474 +-896 +-702 +-222 +550 +998 +1449 +1835 +2251 +1863 +1380 +1114 +1021 +487 +-92 +-502 +-381 +-290 +-876 +-1814 +-2278 +-1928 +-1510 +-915 +-316 +589 +1099 +1352 +1310 +1855 +2457 +2536 +1755 +1127 +889 +709 +91 +-790 +-1473 +-1668 +-1619 +-1844 +-1584 +-1032 +-633 +-839 +-667 +-200 +904 +1726 +1877 +1602 +1915 +2216 +2031 +1386 +512 +-307 +-869 +-1414 +-1782 +-1499 +-1529 +-2034 +-2617 +-2414 +-1641 +-353 +250 +421 +677 +1254 +1331 +1387 +1423 +1326 +1009 +606 +344 +367 +278 +-617 +-1617 +-2187 +-2113 +-1795 +-1128 +-767 +-602 +-756 +-745 +-560 +249 +1235 +1941 +2112 +2108 +2136 +2123 +1914 +1349 +1004 +999 +985 +508 +81 +-582 +-1462 +-2386 +-2748 +-2507 +-1462 +-774 +-721 +-870 +-721 +-544 +-184 +267 +687 +1163 +1536 +1550 +1358 +1275 +705 +45 +-468 +-495 +-359 +-85 +-654 +-1553 +-2157 +-2089 +-1874 +-1253 +-554 +0 +327 +503 +787 +1330 +1948 +1906 +1761 +1717 +1919 +1858 +1626 +804 +78 +-522 +-921 +-1226 +-1060 +-979 +-1195 +-1483 +-1550 +-1174 +-532 +-41 +124 +579 +985 +1254 +1244 +1227 +884 +667 +407 +330 +361 +393 +-149 +-948 +-1615 +-1885 +-1764 +-1433 +-1094 +-912 +-733 +-746 +-432 +172 +859 +878 +715 +589 +977 +1282 +1171 +394 +-220 +-510 +-616 +-595 +-378 +-204 +-472 +-1014 +-1574 +-1347 +-620 +131 +189 +189 +219 +474 +559 +628 +523 +617 +719 +636 +504 +470 +185 +-575 +-1190 +-1448 +-1032 +-444 +-125 +-228 +-33 +55 +242 +541 +876 +981 +1177 +1118 +980 +908 +498 +-364 +-1097 +-1382 +-1213 +-806 +-779 +-947 +-1093 +-1026 +-1122 +-695 +-8 +816 +1203 +1286 +969 +816 +610 +235 +-74 +44 +299 +343 +93 +-553 +-930 +-1257 +-1347 +-1336 +-715 +-357 +-283 +-678 +-780 +-655 +-74 +344 +707 +1091 +1526 +1566 +1205 +873 +496 +268 +-122 +-319 +-469 +-204 +-336 +-694 +-1290 +-1443 +-1463 +-1051 +-701 +-260 +94 +399 +481 +631 +1044 +1324 +1377 +1238 +1370 +1549 +1613 +823 +-70 +-862 +-1155 +-1348 +-1117 +-1015 +-882 +-1130 +-1560 +-1750 +-1181 +-234 +530 +1041 +1336 +1699 +1903 +1998 +1675 +1545 +1185 +856 +462 +444 +154 +-357 +-1296 +-1958 +-2083 +-1619 +-1178 +-931 +-766 +-577 +-273 +-6 +508 +916 +1297 +1238 +1289 +1323 +1493 +1075 +334 +-556 +-984 +-1050 +-762 +-742 +-1022 +-1456 +-1934 +-2005 +-1447 +-455 +297 +757 +731 +912 +1272 +1695 +1629 +1592 +1406 +1295 +1159 +1088 +750 +218 +-612 +-1488 +-1755 +-1358 +-740 +-499 +-532 +-802 +-677 +-453 +-28 +451 +1179 +1557 +1722 +1761 +1815 +1549 +1018 +318 +-101 +-22 +124 +-44 +-622 +-1168 +-1672 +-1778 +-1710 +-1196 +-528 +10 +108 +335 +780 +1349 +1441 +1276 +1214 +1448 +1626 +1437 +916 +152 +-530 +-1221 +-1521 +-1374 +-969 +-986 +-1369 +-1904 +-1819 +-1340 +-715 +-342 +166 +622 +967 +1186 +1283 +1300 +1138 +735 +306 +383 +614 +581 +-81 +-902 +-1565 +-1562 +-1448 +-1203 +-842 +-355 +-243 +-314 +-269 +68 +521 +799 +956 +1244 +1672 +1683 +1266 +474 +-58 +-348 +-353 +-361 +-245 +-293 +-633 +-1236 +-1469 +-1181 +-626 +-322 +-132 +153 +532 +849 +874 +734 +519 +461 +366 +425 +589 +648 +121 +-753 +-1607 +-1727 +-1331 +-902 +-813 +-768 +-731 +-769 +-711 +-541 +-144 +309 +614 +728 +1027 +1208 +1125 +588 +22 +-296 +-33 +239 +118 +-220 +-603 +-1016 +-1281 +-1232 +-911 +-387 +-55 +-26 +25 +358 +519 +573 +452 +541 +864 +1119 +993 +648 +231 +-346 +-978 +-1229 +-945 +-466 +-321 +-695 +-1048 +-1049 +-699 +-352 +-14 +370 +771 +927 +909 +946 +1078 +1014 +646 +242 +347 +722 +658 +102 +-577 +-944 +-994 +-848 +-732 +-479 +-211 +-274 +-491 +-329 +89 +478 +492 +320 +506 +1046 +1296 +977 +596 +193 +-178 +-366 +-331 +-130 +71 +-308 +-994 +-1309 +-991 +-541 +-215 +-73 +179 +703 +1002 +966 +882 +909 +813 +713 +698 +866 +866 +368 +-652 +-1396 +-1567 +-1305 +-1052 +-976 +-978 +-962 +-903 +-792 +-405 +179 +642 +743 +765 +965 +1248 +1113 +688 +137 +-120 +-147 +-199 +-426 +-713 +-996 +-1317 +-1445 +-1166 +-602 +-21 +305 +413 +834 +1438 +1844 +1793 +1624 +1388 +1247 +1148 +937 +578 +97 +-658 +-1335 +-1496 +-1208 +-825 +-741 +-932 +-1071 +-748 +-386 +-14 +345 +696 +874 +925 +904 +908 +755 +265 +-381 +-731 +-684 +-537 +-586 +-1007 +-1457 +-1671 +-1508 +-1175 +-633 +-111 +253 +356 +570 +902 +1304 +1414 +1328 +1240 +1299 +1487 +1396 +970 +275 +-416 +-1041 +-1239 +-1136 +-899 +-942 +-1261 +-1684 +-1592 +-1195 +-712 +-282 +152 +547 +939 +1302 +1444 +1516 +1342 +934 +606 +674 +697 +558 +-28 +-736 +-1208 +-1150 +-1020 +-816 +-583 +-540 +-619 +-560 +-306 +125 +560 +608 +564 +771 +1175 +1329 +1299 +837 +316 +-15 +-162 +-227 +-109 +-234 +-723 +-1223 +-1377 +-1152 +-718 +-398 +-352 +-169 +141 +529 +859 +1121 +1149 +1158 +1184 +1266 +1256 +1100 +512 +-306 +-1000 +-1228 +-1112 +-981 +-1013 +-1253 +-1382 +-1302 +-998 +-645 +-287 +-94 +130 +577 +1203 +1540 +1525 +1091 +565 +310 +213 +58 +-100 +-358 +-982 +-1673 +-2012 +-1874 +-1325 +-824 +-724 +-513 +24 +668 +1102 +1351 +1396 +1514 +1774 +1918 +1949 +1916 +1489 +646 +-243 +-720 +-757 +-669 +-898 +-1372 +-1566 +-1522 +-1345 +-1045 +-581 +-78 +371 +649 +951 +1302 +1504 +1199 +724 +454 +458 +392 +-49 +-713 +-1287 +-1682 +-1971 +-2032 +-1725 +-1223 +-955 +-898 +-750 +-95 +601 +990 +892 +922 +1284 +1644 +1644 +1416 +1107 +701 +202 +-261 +-359 +-249 +-390 +-1033 +-1518 +-1558 +-1131 +-785 +-596 +-398 +77 +461 +607 +748 +1056 +1176 +932 +503 +421 +731 +703 +41 +-893 +-1382 +-1498 +-1428 +-1459 +-1383 +-1203 +-1032 +-1062 +-868 +-327 +351 +657 +668 +884 +1395 +1732 +1475 +963 +576 +440 +273 +120 +4 +-67 +-453 +-966 +-1334 +-1121 +-673 +-450 +-520 +-361 +135 +615 +797 +800 +912 +1121 +1269 +1288 +1481 +1523 +1033 +-16 +-893 +-1223 +-975 +-820 +-1021 +-1226 +-1153 +-1170 +-1229 +-1066 +-538 +118 +506 +639 +911 +1421 +1426 +948 +406 +298 +420 +446 +57 +-389 +-800 +-1247 +-1782 +-1869 +-1487 +-1013 +-845 +-876 +-512 +207 +783 +810 +808 +1096 +1588 +1790 +1753 +1550 +1330 +747 +57 +-398 +-324 +-142 +-418 +-1047 +-1442 +-1321 +-1064 +-883 +-668 +-166 +448 +943 +1176 +1578 +1878 +1830 +1372 +1082 +1120 +1304 +1036 +209 +-620 +-1058 +-1349 +-1577 +-1559 +-1338 +-1081 +-1147 +-1253 +-1015 +-301 +89 +174 +356 +931 +1545 +1814 +1494 +1069 +784 +532 +180 +11 +46 +-182 +-771 +-1528 +-1723 +-1343 +-897 +-851 +-730 +-325 +311 +787 +1093 +1258 +1460 +1450 +1327 +1352 +1589 +1592 +884 +-241 +-1095 +-1278 +-1253 +-1372 +-1607 +-1623 +-1611 +-1611 +-1578 +-1090 +-451 +20 +178 +468 +1105 +1730 +1770 +1260 +786 +659 +658 +471 +195 +-127 +-483 +-1082 +-1491 +-1451 +-988 +-759 +-804 +-801 +-326 +356 +790 +790 +759 +935 +1183 +1377 +1468 +1528 +1235 +535 +-333 +-688 +-602 +-549 +-965 +-1485 +-1775 +-1674 +-1531 +-1352 +-1048 +-554 +-157 +50 +366 +900 +1339 +1288 +938 +786 +1045 +1123 +731 +17 +-489 +-912 +-1243 +-1513 +-1460 +-1223 +-1069 +-1137 +-1017 +-475 +188 +505 +551 +755 +1260 +1774 +1804 +1566 +1220 +857 +260 +-250 +-470 +-487 +-764 +-1385 +-1982 +-2047 +-1791 +-1575 +-1512 +-1249 +-631 +16 +420 +581 +843 +1059 +1070 +999 +1233 +1588 +1544 +804 +-72 +-625 +-750 +-871 +-1071 +-1217 +-1164 +-1079 +-1131 +-993 +-471 +146 +525 +729 +1091 +1724 +2075 +1835 +1260 +928 +735 +583 +368 +155 +-87 +-528 +-1228 +-1729 +-1702 +-1383 +-1223 +-1210 +-1062 +-610 +-32 +209 +355 +657 +1052 +1263 +1400 +1535 +1565 +1224 +507 +-213 +-423 +-344 +-457 +-856 +-1235 +-1312 +-1260 +-1193 +-1072 +-667 +-215 +45 +225 +672 +1238 +1501 +1244 +902 +846 +1063 +1133 +813 +322 +-139 +-583 +-1062 +-1287 +-1197 +-987 +-958 +-1038 +-885 +-328 +132 +289 +376 +731 +1228 +1602 +1696 +1559 +1354 +987 +502 +189 +215 +186 +-191 +-860 +-1332 +-1352 +-1116 +-1032 +-936 +-615 +-207 +119 +395 +740 +1091 +1234 +1076 +976 +1165 +1367 +1132 +532 +-150 +-576 +-815 +-1058 +-1251 +-1198 +-1116 +-1247 +-1366 +-1154 +-693 +-274 +-78 +153 +723 +1351 +1591 +1381 +1088 +867 +699 +459 +243 +117 +-80 +-636 +-1263 +-1511 +-1295 +-1071 +-1039 +-977 +-667 +-177 +156 +331 +526 +826 +1048 +1164 +1334 +1617 +1698 +1339 +601 +39 +-187 +-345 +-708 +-1086 +-1255 +-1324 +-1420 +-1498 +-1359 +-995 +-616 +-333 +101 +722 +1248 +1317 +1076 +828 +865 +972 +873 +624 +376 +-35 +-656 +-1196 +-1378 +-1302 +-1233 +-1294 +-1280 +-866 +-370 +-88 +5 +211 +606 +1104 +1426 +1562 +1607 +1417 +840 +259 +23 +63 +-22 +-448 +-932 +-1155 +-1156 +-1205 +-1238 +-1108 +-766 +-391 +-84 +244 +700 +966 +874 +644 +696 +1035 +1260 +1011 +484 +21 +-394 +-796 +-1055 +-1085 +-990 +-985 +-1184 +-1259 +-984 +-580 +-358 +-202 +109 +708 +1282 +1493 +1443 +1425 +1302 +1030 +816 +774 +737 +414 +-293 +-988 +-1259 +-1293 +-1355 +-1437 +-1325 +-962 +-467 +-124 +171 +534 +810 +821 +865 +1158 +1577 +1663 +1197 +526 +46 +-271 +-619 +-945 +-1149 +-1198 +-1317 +-1521 +-1602 +-1328 +-977 +-716 +-424 +198 +1028 +1574 +1546 +1296 +1175 +1113 +978 +759 +572 +366 +-67 +-801 +-1335 +-1446 +-1349 +-1356 +-1397 +-1252 +-791 +-352 +-203 +-80 +320 +786 +1157 +1462 +1698 +1815 +1541 +885 +283 +42 +-109 +-408 +-834 +-1145 +-1210 +-1200 +-1365 +-1428 +-1178 +-796 +-448 +-32 +534 +1077 +1287 +1103 +936 +1070 +1318 +1352 +1117 +712 +256 +-336 +-970 +-1393 +-1427 +-1339 +-1367 +-1426 +-1260 +-864 +-551 +-429 +-197 +362 +1041 +1529 +1711 +1766 +1725 +1490 +1041 +694 +575 +434 +-4 +-643 +-1097 +-1246 +-1389 +-1663 +-1763 +-1458 +-922 +-437 +-36 +393 +821 +994 +948 +1057 +1471 +1836 +1759 +1214 +580 +124 +-266 +-738 +-1068 +-1126 +-1142 +-1337 +-1564 +-1524 +-1226 +-927 +-738 +-374 +311 +1044 +1444 +1478 +1406 +1432 +1393 +1221 +1063 +979 +695 +38 +-733 +-1191 +-1282 +-1354 +-1528 +-1537 +-1204 +-737 +-387 +-188 +96 +492 +844 +1086 +1432 +1870 +2090 +1804 +1158 +617 +385 +154 +-268 +-677 +-931 +-1134 +-1422 +-1684 +-1716 +-1425 +-1100 +-813 +-353 +329 +913 +1122 +1022 +991 +1193 +1398 +1335 +1108 +826 +362 +-268 +-874 +-1197 +-1304 +-1426 +-1661 +-1752 +-1544 +-1182 +-945 +-759 +-448 +108 +710 +1190 +1545 +1789 +1802 +1475 +1057 +800 +675 +395 +-100 +-616 +-928 +-1127 +-1326 +-1573 +-1597 +-1389 +-1048 +-670 +-230 +217 +560 +687 +738 +1025 +1497 +1751 +1576 +1222 +802 +384 +-100 +-536 +-837 +-990 +-1201 +-1426 +-1485 +-1308 +-1109 +-1001 +-927 +-627 +-37 +521 +848 +1030 +1215 +1231 +1117 +989 +989 +963 +714 +167 +-366 +-729 +-995 +-1311 +-1548 +-1545 +-1259 +-885 +-624 +-385 +-121 +127 +285 +548 +992 +1475 +1609 +1363 +960 +679 +476 +253 +-58 +-332 +-554 +-853 +-1182 +-1369 +-1335 +-1219 +-1095 +-883 +-378 +285 +751 +860 +913 +1031 +1245 +1383 +1389 +1268 +1041 +611 +67 +-359 +-615 +-818 +-1077 +-1336 +-1393 +-1180 +-985 +-890 +-769 +-468 +-91 +314 +696 +1102 +1391 +1408 +1172 +959 +857 +739 +430 +-27 +-426 +-708 +-956 +-1251 +-1414 +-1422 +-1299 +-1139 +-831 +-326 +235 +521 +580 +658 +955 +1349 +1599 +1593 +1414 +1144 +711 +212 +-194 +-430 +-666 +-977 +-1295 +-1357 +-1222 +-1110 +-1089 +-897 +-474 +113 +691 +1117 +1374 +1464 +1376 +1194 +1149 +1207 +1135 +761 +226 +-234 +-505 +-799 +-1164 +-1451 +-1506 +-1392 +-1170 +-884 +-536 +-221 +-24 +158 +543 +1116 +1574 +1689 +1461 +1154 +874 +599 +249 +-58 +-331 +-615 +-968 +-1242 +-1340 +-1330 +-1351 +-1330 +-1096 +-601 +-8 +425 +668 +846 +1061 +1205 +1302 +1335 +1300 +1078 +654 +138 +-228 +-507 +-831 +-1179 +-1373 +-1332 +-1130 +-919 +-780 +-579 +-307 +5 +332 +789 +1255 +1577 +1548 +1318 +1095 +981 +731 +303 +-159 +-521 +-808 +-1093 +-1366 +-1572 +-1626 +-1612 +-1427 +-1011 +-407 +96 +398 +497 +697 +1031 +1356 +1458 +1417 +1251 +949 +528 +66 +-317 +-636 +-983 +-1346 +-1514 +-1480 +-1323 +-1258 +-1201 +-1026 +-547 +47 +602 +1032 +1344 +1453 +1412 +1310 +1281 +1259 +1036 +594 +82 +-315 +-645 +-974 +-1360 +-1589 +-1601 +-1444 +-1247 +-951 +-625 +-274 +-25 +220 +612 +1143 +1491 +1515 +1359 +1151 +974 +707 +313 +-158 +-543 +-917 +-1199 +-1363 +-1366 +-1370 +-1387 +-1380 +-1090 +-518 +72 +453 +686 +879 +1050 +1207 +1311 +1397 +1382 +1158 +701 +283 +-52 +-319 +-707 +-1091 +-1327 +-1267 +-1092 +-924 +-765 +-524 +-242 +76 +463 +945 +1377 +1514 +1431 +1263 +1184 +1066 +834 +400 +-5 +-346 +-614 +-864 +-1038 +-1203 +-1323 +-1396 +-1268 +-835 +-268 +123 +299 +472 +690 +990 +1230 +1342 +1300 +1186 +855 +455 +114 +-161 +-494 +-820 +-1117 +-1184 +-1054 +-991 +-1041 +-987 +-757 +-394 +120 +609 +1008 +1243 +1286 +1183 +1215 +1264 +1188 +882 +448 +20 +-236 +-489 +-795 +-1066 +-1240 +-1320 +-1246 +-1000 +-630 +-240 +1 +189 +431 +821 +1162 +1374 +1380 +1322 +1179 +943 +562 +149 +-271 +-645 +-987 +-1214 +-1267 +-1275 +-1365 +-1448 +-1303 +-919 +-334 +176 +522 +727 +904 +965 +1054 +1137 +1184 +1071 +803 +411 +101 +-132 +-500 +-956 +-1290 +-1420 +-1386 +-1222 +-1085 +-872 +-615 +-350 +-59 +462 +996 +1396 +1501 +1414 +1298 +1238 +1018 +616 +198 +-166 +-478 +-768 +-1014 +-1222 +-1338 +-1486 +-1483 +-1232 +-696 +-186 +161 +301 +491 +802 +1126 +1312 +1396 +1370 +1218 +923 +518 +181 +-186 +-632 +-1107 +-1328 +-1337 +-1207 +-1177 +-1232 +-1210 +-936 +-542 +-37 +475 +887 +1116 +1166 +1129 +1175 +1263 +1082 +701 +288 +-6 +-261 +-515 +-918 +-1262 +-1466 +-1486 +-1360 +-995 +-588 +-244 +-40 +95 +402 +894 +1299 +1441 +1438 +1348 +1230 +1006 +697 +291 +-72 +-497 +-830 +-1006 +-1016 +-1055 +-1179 +-1337 +-1260 +-839 +-246 +280 +664 +956 +1151 +1292 +1343 +1392 +1325 +1098 +687 +322 +29 +-213 +-597 +-1087 +-1485 +-1577 +-1467 +-1252 +-1010 +-775 +-545 +-347 +-64 +387 +946 +1292 +1419 +1399 +1373 +1311 +1144 +720 +235 +-209 +-565 +-852 +-1018 +-1182 +-1363 +-1525 +-1567 +-1282 +-718 +-160 +202 +496 +747 +1042 +1293 +1452 +1464 +1416 +1183 +876 +556 +238 +-181 +-677 +-1178 +-1447 +-1408 +-1291 +-1234 +-1201 +-1070 +-837 +-428 +42 +561 +963 +1173 +1186 +1243 +1310 +1314 +1100 +712 +298 +-9 +-312 +-674 +-1044 +-1395 +-1636 +-1741 +-1587 +-1213 +-734 +-440 +-239 +-5 +403 +869 +1264 +1412 +1445 +1378 +1201 +947 +659 +305 +-140 +-601 +-983 +-1095 +-1085 +-1160 +-1360 +-1422 +-1305 +-906 +-398 +105 +504 +830 +992 +1136 +1320 +1430 +1372 +1126 +771 +472 +301 +-3 +-454 +-961 +-1343 +-1538 +-1436 +-1231 +-963 +-764 +-650 +-526 +-176 +330 +821 +1133 +1225 +1236 +1265 +1236 +1034 +736 +317 +-103 +-499 +-762 +-944 +-1087 +-1332 +-1545 +-1567 +-1274 +-793 +-305 +48 +340 +638 +921 +1207 +1433 +1543 +1462 +1260 +975 +763 +496 +57 +-509 +-955 +-1228 +-1230 +-1143 +-1131 +-1140 +-1070 +-900 +-528 +25 +541 +953 +1168 +1217 +1272 +1419 +1395 +1181 +819 +420 +75 +-155 +-465 +-839 +-1229 +-1586 +-1749 +-1586 +-1217 +-801 +-453 +-229 +52 +499 +990 +1331 +1535 +1540 +1465 +1328 +1136 +819 +407 +-155 +-689 +-1021 +-1090 +-1052 +-1089 +-1266 +-1407 +-1283 +-917 +-396 +96 +514 +804 +1035 +1190 +1400 +1538 +1501 +1245 +927 +615 +383 +64 +-441 +-993 +-1421 +-1616 +-1567 +-1322 +-1078 +-847 +-696 +-524 +-164 +407 +880 +1200 +1309 +1312 +1293 +1266 +1061 +724 +320 +-133 +-502 +-714 +-868 +-1062 +-1318 +-1645 +-1723 +-1457 +-976 +-516 +-85 +218 +516 +815 +1087 +1307 +1466 +1434 +1259 +1052 +820 +508 +40 +-543 +-1045 +-1241 +-1258 +-1182 +-1147 +-1133 +-1122 +-963 +-639 +-105 +446 +839 +1030 +1174 +1326 +1466 +1451 +1192 +814 +422 +101 +-166 +-419 +-778 +-1181 +-1574 +-1752 +-1615 +-1211 +-844 +-549 +-317 +-43 +333 +759 +1088 +1303 +1379 +1327 +1259 +1146 +891 +456 +-86 +-655 +-968 +-1075 +-1139 +-1276 +-1421 +-1548 +-1450 +-1088 +-564 +-25 +412 +655 +860 +1147 +1410 +1556 +1472 +1181 +835 +610 +361 +60 +-365 +-872 +-1350 +-1579 +-1539 +-1261 +-983 +-845 +-750 +-501 +-57 +488 +969 +1253 +1419 +1499 +1549 +1506 +1335 +940 +441 +-96 +-457 +-624 +-709 +-956 +-1294 +-1580 +-1628 +-1374 +-947 +-505 +-104 +232 +493 +823 +1147 +1389 +1455 +1360 +1143 +1025 +883 +576 +61 +-516 +-1045 +-1319 +-1373 +-1327 +-1246 +-1208 +-1183 +-1000 +-569 +-59 +458 +817 +1036 +1216 +1465 +1591 +1573 +1340 +944 +483 +130 +-137 +-350 +-641 +-1079 +-1488 +-1680 +-1571 +-1259 +-866 +-575 +-293 +5 +378 +765 +1141 +1341 +1408 +1355 +1295 +1218 +1026 +614 +84 +-425 +-802 +-965 +-1057 +-1165 +-1327 +-1448 +-1450 +-1168 +-727 +-222 +202 +534 +767 +1068 +1333 +1447 +1371 +1139 +836 +608 +419 +121 +-282 +-822 +-1330 +-1611 +-1563 +-1372 +-1090 +-906 +-787 +-610 +-240 +176 +609 +937 +1136 +1286 +1418 +1470 +1372 +1073 +553 +50 +-325 +-529 +-693 +-900 +-1268 +-1571 +-1681 +-1496 +-1105 +-625 +-240 +83 +383 +721 +1094 +1378 +1464 +1367 +1207 +1013 +851 +580 +175 +-370 +-871 +-1240 +-1329 +-1309 +-1270 +-1277 +-1260 +-1118 +-736 +-237 +223 +598 +854 +1061 +1261 +1423 +1390 +1204 +817 +404 +99 +-72 +-298 +-587 +-1011 +-1417 +-1596 +-1482 +-1214 +-874 +-578 +-350 +-41 +354 +798 +1157 +1364 +1349 +1347 +1319 +1251 +1043 +657 +67 +-483 +-857 +-1016 +-1059 +-1124 +-1295 +-1435 +-1376 +-1089 +-603 +-134 +233 +493 +789 +1069 +1360 +1480 +1400 +1123 +815 +557 +408 +203 +-164 +-671 +-1166 +-1448 +-1452 +-1275 +-1094 +-913 +-774 +-539 +-179 +289 +688 +1011 +1164 +1282 +1411 +1491 +1365 +1039 +519 +-15 +-355 +-534 +-665 +-849 +-1112 +-1384 +-1440 +-1284 +-925 +-526 +-173 +68 +399 +769 +1129 +1353 +1397 +1257 +1113 +1009 +887 +682 +278 +-286 +-863 +-1229 +-1359 +-1274 +-1199 +-1183 +-1173 +-979 +-646 +-158 +303 +664 +918 +1150 +1377 +1562 +1562 +1292 +846 +375 +55 +-142 +-320 +-645 +-1031 +-1430 +-1617 +-1569 +-1298 +-978 +-682 +-451 +-152 +270 +736 +1101 +1293 +1309 +1268 +1302 +1280 +1110 +708 +150 +-453 +-836 +-1017 +-1047 +-1090 +-1217 +-1373 +-1319 +-1047 +-621 +-166 +197 +470 +766 +1093 +1347 +1509 +1435 +1173 +835 +577 +368 +182 +-181 +-700 +-1202 +-1485 +-1551 +-1409 +-1211 +-1032 +-833 +-563 +-192 +240 +647 +902 +1081 +1213 +1378 +1472 +1383 +1005 +495 +-21 +-380 +-595 +-749 +-970 +-1230 +-1464 +-1532 +-1354 +-1020 +-637 +-285 +39 +380 +812 +1170 +1388 +1390 +1265 +1094 +999 +874 +646 +233 +-336 +-887 +-1206 +-1299 +-1268 +-1216 +-1228 +-1201 +-1004 +-626 +-187 +245 +554 +792 +1025 +1287 +1472 +1525 +1297 +872 +446 +157 +-40 +-229 +-543 +-965 +-1313 +-1479 +-1406 +-1163 +-858 +-624 +-389 +-126 +261 +692 +1028 +1156 +1181 +1187 +1225 +1221 +1048 +659 +132 +-396 +-775 +-926 +-982 +-1063 +-1218 +-1341 +-1295 +-966 +-537 +-130 +178 +430 +701 +1047 +1340 +1483 +1394 +1092 +744 +532 +426 +265 +-55 +-576 +-1080 +-1380 +-1425 +-1323 +-1115 +-940 +-751 +-493 +-131 +280 +673 +910 +1043 +1187 +1353 +1459 +1378 +1043 +520 +32 +-338 +-546 +-694 +-876 +-1152 +-1373 +-1464 +-1308 +-982 +-617 +-323 +-30 +308 +715 +1125 +1372 +1406 +1278 +1111 +968 +874 +657 +264 +-284 +-817 +-1188 +-1297 +-1287 +-1253 +-1236 +-1181 +-996 +-631 +-175 +251 +573 +777 +976 +1221 +1451 +1506 +1335 +927 +488 +143 +-81 +-306 +-590 +-976 +-1330 +-1514 +-1470 +-1254 +-979 +-747 +-505 +-137 +327 +800 +1146 +1291 +1265 +1242 +1230 +1212 +1067 +713 +150 +-406 +-829 +-1039 +-1123 +-1231 +-1400 +-1494 +-1396 +-1092 +-651 +-255 +35 +280 +586 +947 +1317 +1494 +1417 +1130 +808 +558 +422 +220 +-146 +-636 +-1107 +-1401 +-1455 +-1344 +-1202 +-1053 +-901 +-628 +-225 +247 +629 +883 +1002 +1109 +1264 +1397 +1347 +1075 +606 +112 +-274 +-519 +-696 +-910 +-1202 +-1470 +-1514 +-1350 +-1023 +-677 +-386 +-128 +222 +637 +1049 +1320 +1374 +1247 +1092 +957 +854 +678 +293 +-256 +-781 +-1129 +-1277 +-1266 +-1263 +-1276 +-1232 +-1020 +-641 +-138 +280 +574 +776 +995 +1260 +1529 +1605 +1397 +999 +545 +177 +-71 +-286 +-586 +-950 +-1318 +-1503 +-1465 +-1252 +-1000 +-729 +-470 +-119 +325 +776 +1106 +1269 +1273 +1251 +1269 +1236 +1095 +739 +221 +-321 +-707 +-956 +-1092 +-1213 +-1354 +-1435 +-1302 +-995 +-560 +-153 +136 +363 +665 +1042 +1417 +1652 +1579 +1292 +958 +701 +498 +296 +-82 +-586 +-1086 +-1407 +-1496 +-1378 +-1235 +-1115 +-951 +-665 +-220 +302 +723 +955 +1090 +1196 +1351 +1503 +1515 +1253 +805 +286 +-115 +-371 +-574 +-858 +-1185 +-1459 +-1533 +-1369 +-1066 +-743 +-445 +-143 +224 +702 +1157 +1457 +1503 +1361 +1183 +1094 +1008 +836 +455 +-74 +-619 +-999 +-1196 +-1263 +-1296 +-1349 +-1330 +-1144 +-777 +-329 +95 +378 +624 +913 +1256 +1534 +1647 +1449 +1044 +594 +257 +55 +-125 +-446 +-891 +-1291 +-1513 +-1482 +-1297 +-1093 +-910 +-654 +-302 +182 +687 +1076 +1230 +1237 +1187 +1230 +1315 +1254 +925 +396 +-174 +-606 +-840 +-1000 +-1165 +-1358 +-1486 +-1445 +-1146 +-721 +-305 +-17 +217 +517 +949 +1354 +1586 +1555 +1314 +1015 +790 +616 +398 +43 +-473 +-963 +-1279 +-1354 +-1294 +-1231 +-1227 +-1126 +-838 +-361 +153 +575 +796 +916 +1033 +1208 +1387 +1415 +1161 +677 +185 +-183 +-369 +-534 +-800 +-1145 +-1410 +-1519 +-1391 +-1110 +-801 +-551 +-310 +-2 +469 +986 +1324 +1384 +1247 +1083 +1001 +967 +798 +440 +-76 +-596 +-988 +-1138 +-1161 +-1157 +-1223 +-1259 +-1115 +-746 +-294 +87 +343 +545 +816 +1154 +1460 +1575 +1432 +1041 +612 +268 +68 +-126 +-441 +-905 +-1308 +-1488 +-1428 +-1219 +-991 +-823 +-638 +-345 +70 +566 +966 +1144 +1125 +1087 +1092 +1138 +1044 +718 +229 +-245 +-627 +-854 +-1013 +-1188 +-1383 +-1509 +-1443 +-1125 +-655 +-262 +8 +213 +502 +908 +1325 +1518 +1457 +1194 +886 +640 +489 +298 +-37 +-536 +-1042 +-1336 +-1370 +-1278 +-1198 +-1160 +-1078 +-801 +-348 +180 +603 +877 +999 +1107 +1258 +1412 +1406 +1137 +637 +128 +-229 +-442 +-630 +-893 +-1205 +-1441 +-1483 +-1333 +-1032 +-731 +-479 +-255 +67 +515 +1031 +1379 +1458 +1341 +1198 +1096 +1021 +850 +479 +-39 +-592 +-1026 +-1236 +-1273 +-1305 +-1356 +-1372 +-1189 +-769 +-240 +165 +431 +621 +847 +1142 +1435 +1567 +1454 +1104 +649 +298 +85 +-120 +-455 +-890 +-1290 +-1467 +-1432 +-1275 +-1113 +-933 +-711 +-350 +149 +683 +1090 +1247 +1200 +1151 +1210 +1287 +1214 +882 +373 +-143 +-526 +-773 +-919 +-1068 +-1258 +-1423 +-1405 +-1144 +-705 +-310 +-52 +187 +524 +954 +1365 +1586 +1554 +1343 +1042 +756 +541 +338 +-5 +-471 +-943 +-1232 +-1281 +-1215 +-1198 +-1167 +-1024 +-725 +-274 +214 +623 +882 +1000 +1077 +1254 +1478 +1538 +1293 +814 +294 +-75 +-327 +-567 +-855 +-1149 +-1389 +-1462 +-1331 +-1034 +-708 +-471 +-280 +20 +492 +990 +1312 +1361 +1251 +1104 +1004 +901 +735 +429 +-16 +-512 +-900 +-1102 +-1156 +-1221 +-1330 +-1326 +-1103 +-671 +-196 +162 +393 +606 +855 +1163 +1458 +1600 +1445 +1063 +600 +252 +63 +-132 +-487 +-911 +-1247 +-1398 +-1355 +-1208 +-1034 +-855 +-638 +-342 +118 +637 +1036 +1183 +1152 +1103 +1165 +1223 +1112 +776 +318 +-162 +-545 +-798 +-968 +-1114 +-1290 +-1423 +-1364 +-1056 +-652 +-309 +-101 +100 +406 +832 +1228 +1469 +1457 +1235 +918 +657 +494 +334 +19 +-462 +-933 +-1226 +-1306 +-1276 +-1234 +-1188 +-1026 +-728 +-293 +186 +604 +840 +941 +996 +1130 +1315 +1365 +1136 +712 +255 +-109 +-361 +-603 +-874 +-1151 +-1354 +-1429 +-1292 +-1019 +-736 +-524 +-318 +4 +508 +1028 +1348 +1399 +1280 +1110 +978 +870 +708 +429 +3 +-481 +-866 +-1042 +-1097 +-1139 +-1227 +-1240 +-1058 +-681 +-267 +82 +334 +541 +764 +1030 +1297 +1458 +1377 +1040 +627 +288 +72 +-152 +-480 +-877 +-1173 +-1304 +-1267 +-1139 +-983 +-835 +-649 +-364 +66 +584 +981 +1138 +1129 +1113 +1166 +1224 +1125 +833 +409 +-41 +-432 +-693 +-868 +-1020 +-1192 +-1315 +-1263 +-969 +-581 +-265 +-55 +148 +431 +804 +1154 +1355 +1378 +1204 +940 +695 +530 +336 +23 +-436 +-867 +-1124 +-1193 +-1194 +-1200 +-1180 +-1056 +-766 +-341 +139 +547 +794 +878 +956 +1109 +1293 +1325 +1102 +689 +277 +-52 +-289 +-511 +-754 +-1012 +-1208 +-1263 +-1131 +-849 +-595 +-438 +-295 +-26 +403 +876 +1181 +1264 +1181 +1045 +912 +807 +662 +403 +3 +-457 +-824 +-997 +-1057 +-1131 +-1206 +-1189 +-993 +-638 +-231 +99 +352 +534 +726 +965 +1224 +1369 +1290 +985 +604 +309 +104 +-131 +-452 +-822 +-1119 +-1250 +-1222 +-1083 +-914 +-757 +-600 +-333 +71 +539 +892 +1035 +1012 +983 +1002 +1019 +930 +682 +320 +-81 +-428 +-674 +-832 +-996 +-1183 +-1309 +-1244 +-973 +-592 +-284 +-66 +133 +399 +739 +1084 diff --git a/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_979.samples b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_979.samples new file mode 100644 index 00000000..2cf10bea --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/test/resources/xylophone_979.samples @@ -0,0 +1,4096 @@ +-924 +-892 +-842 +-782 +-707 +-619 +-514 +-398 +-277 +-141 +-4 +133 +262 +383 +495 +591 +680 +766 +840 +894 +926 +940 +935 +907 +864 +809 +739 +658 +568 +461 +344 +217 +76 +-61 +-196 +-323 +-438 +-544 +-643 +-734 +-810 +-872 +-921 +-946 +-948 +-928 +-891 +-844 +-775 +-694 +-603 +-509 +-398 +-276 +-147 +-9 +129 +260 +381 +496 +600 +697 +782 +852 +906 +943 +962 +957 +930 +885 +819 +742 +657 +563 +455 +336 +211 +78 +-56 +-192 +-318 +-438 +-550 +-651 +-737 +-813 +-878 +-924 +-952 +-960 +-951 +-919 +-863 +-789 +-709 +-615 +-508 +-393 +-270 +-136 +-1 +132 +264 +387 +505 +613 +705 +785 +855 +906 +941 +964 +965 +939 +896 +839 +767 +677 +573 +460 +337 +206 +69 +-68 +-201 +-333 +-458 +-570 +-672 +-762 +-838 +-896 +-936 +-962 +-966 +-953 +-922 +-874 +-810 +-729 +-636 +-532 +-409 +-276 +-139 +-5 +127 +260 +388 +513 +624 +725 +810 +875 +925 +958 +972 +966 +941 +897 +840 +769 +681 +580 +464 +336 +202 +67 +-68 +-204 +-333 +-458 +-575 +-685 +-783 +-862 +-923 +-967 +-991 +-989 +-970 +-935 +-883 +-817 +-737 +-642 +-530 +-405 +-272 +-137 +-1 +137 +267 +395 +513 +624 +726 +817 +894 +952 +988 +1001 +994 +962 +918 +859 +787 +697 +590 +470 +339 +203 +59 +-79 +-212 +-342 +-465 +-578 +-682 +-777 +-862 +-933 +-979 +-1005 +-1007 +-985 +-947 +-894 +-830 +-748 +-652 +-537 +-411 +-273 +-129 +16 +158 +293 +421 +538 +646 +747 +834 +911 +969 +1005 +1020 +1009 +980 +935 +876 +801 +709 +606 +489 +356 +214 +68 +-79 +-227 +-362 +-487 +-600 +-705 +-798 +-881 +-948 +-996 +-1020 +-1019 +-999 +-964 +-908 +-835 +-751 +-651 +-543 +-419 +-285 +-145 +3 +154 +299 +432 +554 +669 +769 +859 +933 +991 +1028 +1040 +1031 +1001 +949 +884 +803 +711 +602 +481 +352 +213 +72 +-80 +-225 +-366 +-498 +-617 +-727 +-826 +-907 +-977 +-1022 +-1050 +-1055 +-1037 +-997 +-937 +-863 +-771 +-666 +-547 +-421 +-282 +-138 +11 +153 +292 +430 +558 +677 +780 +871 +946 +1002 +1036 +1055 +1051 +1023 +979 +915 +828 +725 +610 +485 +346 +202 +53 +-93 +-239 +-380 +-513 +-635 +-748 +-846 +-929 +-990 +-1033 +-1059 +-1064 +-1050 +-1016 +-961 +-886 +-795 +-688 +-568 +-432 +-285 +-135 +13 +161 +305 +444 +574 +699 +809 +899 +972 +1024 +1057 +1069 +1061 +1035 +991 +923 +842 +745 +633 +502 +358 +211 +60 +-89 +-236 +-379 +-517 +-648 +-767 +-867 +-953 +-1019 +-1062 +-1084 +-1084 +-1063 +-1023 +-962 +-891 +-805 +-694 +-572 +-434 +-289 +-139 +12 +160 +307 +446 +582 +707 +821 +920 +999 +1056 +1091 +1101 +1090 +1060 +1006 +940 +855 +756 +638 +508 +364 +210 +55 +-94 +-242 +-384 +-521 +-650 +-768 +-876 +-967 +-1039 +-1088 +-1113 +-1113 +-1090 +-1046 +-989 +-916 +-821 +-711 +-587 +-445 +-295 +-135 +23 +173 +322 +461 +596 +718 +828 +927 +1005 +1065 +1106 +1123 +1113 +1081 +1031 +962 +876 +777 +659 +524 +377 +218 +61 +-99 +-255 +-403 +-543 +-669 +-785 +-888 +-978 +-1049 +-1100 +-1125 +-1126 +-1106 +-1066 +-1006 +-927 +-834 +-723 +-597 +-456 +-308 +-148 +14 +175 +331 +478 +618 +744 +854 +950 +1035 +1094 +1131 +1143 +1135 +1102 +1048 +979 +892 +786 +664 +532 +388 +237 +76 +-86 +-245 +-400 +-548 +-680 +-801 +-908 +-1002 +-1071 +-1122 +-1148 +-1152 +-1131 +-1088 +-1026 +-944 +-842 +-721 +-591 +-452 +-302 +-147 +11 +173 +333 +487 +625 +754 +867 +971 +1052 +1111 +1151 +1164 +1157 +1129 +1078 +1005 +909 +795 +669 +530 +381 +226 +68 +-94 +-256 +-411 +-560 +-695 +-818 +-928 +-1018 +-1088 +-1138 +-1162 +-1167 +-1151 +-1112 +-1055 +-972 +-867 +-745 +-609 +-461 +-307 +-147 +18 +183 +339 +491 +633 +764 +884 +983 +1065 +1123 +1154 +1166 +1161 +1134 +1087 +1016 +923 +814 +686 +543 +388 +229 +64 +-102 +-261 +-418 +-567 +-709 +-837 +-948 +-1042 +-1111 +-1153 +-1175 +-1178 +-1160 +-1119 +-1058 +-977 +-878 +-759 +-624 +-478 +-319 +-153 +14 +177 +336 +490 +636 +773 +899 +1004 +1087 +1144 +1178 +1193 +1183 +1150 +1096 +1023 +930 +821 +697 +554 +398 +233 +67 +-100 +-262 +-418 +-566 +-707 +-837 +-954 +-1050 +-1123 +-1174 +-1201 +-1204 +-1180 +-1135 +-1068 +-983 +-882 +-764 +-630 +-478 +-314 +-148 +21 +187 +343 +495 +638 +776 +895 +999 +1086 +1151 +1195 +1211 +1202 +1167 +1110 +1034 +941 +832 +705 +558 +400 +235 +63 +-108 +-271 +-428 +-579 +-716 +-842 +-952 +-1044 +-1118 +-1173 +-1201 +-1205 +-1186 +-1141 +-1073 +-991 +-890 +-772 +-636 +-484 +-322 +-154 +17 +186 +350 +510 +655 +787 +903 +1004 +1086 +1149 +1191 +1207 +1198 +1164 +1110 +1035 +938 +829 +703 +560 +407 +241 +76 +-95 +-266 +-432 +-587 +-726 +-851 +-962 +-1056 +-1125 +-1178 +-1207 +-1212 +-1188 +-1141 +-1075 +-988 +-884 +-764 +-629 +-480 +-324 +-162 +4 +172 +341 +501 +648 +783 +903 +1004 +1090 +1153 +1192 +1208 +1198 +1167 +1112 +1034 +934 +821 +689 +544 +391 +231 +70 +-99 +-264 +-426 +-578 +-721 +-847 +-957 +-1053 +-1124 +-1176 +-1203 +-1207 +-1189 +-1148 +-1084 +-997 +-892 +-766 +-624 +-472 +-317 +-154 +14 +178 +343 +499 +646 +780 +898 +1003 +1085 +1145 +1179 +1195 +1191 +1165 +1111 +1040 +947 +832 +698 +552 +397 +234 +66 +-103 +-268 +-430 +-581 +-719 +-847 +-961 +-1054 +-1122 +-1169 +-1191 +-1191 +-1175 +-1134 +-1077 +-996 +-890 +-771 +-632 +-484 +-324 +-156 +13 +181 +344 +498 +645 +778 +906 +1013 +1093 +1151 +1184 +1195 +1183 +1152 +1100 +1029 +936 +827 +699 +558 +403 +239 +72 +-98 +-263 +-418 +-566 +-709 +-841 +-955 +-1052 +-1126 +-1173 +-1194 +-1195 +-1173 +-1129 +-1063 +-978 +-878 +-760 +-622 +-475 +-317 +-150 +18 +182 +340 +492 +635 +773 +893 +997 +1084 +1147 +1185 +1200 +1191 +1160 +1103 +1025 +932 +821 +694 +553 +399 +236 +69 +-101 +-261 +-416 +-563 +-698 +-824 +-935 +-1032 +-1103 +-1156 +-1184 +-1190 +-1171 +-1122 +-1058 +-974 +-874 +-756 +-624 +-477 +-314 +-148 +18 +186 +347 +501 +642 +771 +887 +985 +1065 +1130 +1172 +1189 +1181 +1151 +1095 +1020 +930 +820 +698 +560 +407 +244 +78 +-90 +-254 +-413 +-563 +-702 +-826 +-932 +-1017 +-1088 +-1140 +-1168 +-1173 +-1154 +-1111 +-1047 +-964 +-864 +-749 +-616 +-471 +-320 +-159 +7 +172 +335 +490 +635 +767 +885 +983 +1063 +1123 +1162 +1177 +1171 +1136 +1082 +1008 +918 +810 +685 +546 +394 +239 +81 +-82 +-243 +-400 +-552 +-693 +-818 +-924 +-1016 +-1086 +-1137 +-1163 +-1171 +-1151 +-1110 +-1049 +-965 +-864 +-743 +-609 +-464 +-310 +-152 +6 +162 +319 +472 +616 +746 +862 +962 +1045 +1104 +1143 +1159 +1152 +1123 +1073 +1004 +914 +802 +671 +529 +380 +220 +65 +-93 +-252 +-408 +-553 +-689 +-812 +-920 +-1010 +-1081 +-1129 +-1152 +-1156 +-1137 +-1102 +-1046 +-966 +-867 +-751 +-618 +-472 +-317 +-159 +2 +164 +320 +467 +609 +738 +855 +954 +1032 +1093 +1126 +1137 +1127 +1099 +1053 +987 +900 +794 +670 +534 +387 +230 +69 +-93 +-251 +-401 +-544 +-679 +-803 +-913 +-1004 +-1073 +-1119 +-1141 +-1141 +-1120 +-1079 +-1019 +-941 +-847 +-735 +-606 +-465 +-313 +-155 +7 +165 +316 +463 +601 +728 +844 +949 +1033 +1095 +1130 +1141 +1133 +1101 +1051 +980 +891 +786 +665 +531 +388 +233 +75 +-85 +-239 +-387 +-525 +-654 +-778 +-887 +-979 +-1051 +-1100 +-1129 +-1131 +-1109 +-1070 +-1010 +-930 +-832 +-720 +-593 +-453 +-301 +-146 +12 +169 +320 +464 +597 +722 +835 +930 +1012 +1073 +1111 +1129 +1122 +1093 +1045 +973 +885 +782 +661 +529 +385 +231 +76 +-85 +-241 +-389 +-531 +-660 +-780 +-879 +-965 +-1033 +-1081 +-1109 +-1115 +-1097 +-1061 +-1000 +-921 +-828 +-718 +-592 +-456 +-309 +-155 +2 +159 +312 +459 +594 +722 +831 +924 +1000 +1053 +1091 +1105 +1100 +1074 +1024 +954 +869 +768 +648 +518 +377 +229 +76 +-76 +-232 +-383 +-526 +-660 +-776 +-879 +-962 +-1029 +-1076 +-1104 +-1109 +-1091 +-1051 +-991 +-913 +-818 +-707 +-582 +-445 +-298 +-150 +-1 +148 +296 +442 +579 +706 +817 +909 +982 +1041 +1080 +1095 +1089 +1060 +1014 +946 +861 +758 +638 +504 +361 +214 +65 +-82 +-231 +-376 +-518 +-646 +-766 +-866 +-948 +-1017 +-1063 +-1089 +-1095 +-1077 +-1041 +-984 +-909 +-818 +-708 +-581 +-441 +-295 +-147 +4 +152 +298 +441 +572 +696 +803 +897 +975 +1032 +1067 +1078 +1069 +1043 +1002 +938 +859 +757 +638 +508 +366 +219 +66 +-85 +-232 +-376 +-512 +-640 +-758 +-858 +-943 +-1009 +-1051 +-1071 +-1072 +-1053 +-1018 +-964 +-894 +-806 +-695 +-573 +-438 +-294 +-146 +3 +152 +299 +441 +571 +692 +801 +899 +978 +1034 +1065 +1076 +1066 +1035 +991 +926 +845 +746 +632 +504 +367 +224 +74 +-72 +-223 +-365 +-497 +-620 +-736 +-840 +-926 +-994 +-1042 +-1064 +-1064 +-1046 +-1010 +-953 +-877 +-784 +-676 +-556 +-425 +-285 +-138 +12 +161 +304 +438 +566 +685 +793 +886 +963 +1022 +1058 +1070 +1062 +1038 +993 +925 +839 +740 +628 +501 +366 +223 +72 +-78 +-225 +-363 +-494 +-617 +-727 +-826 +-910 +-977 +-1020 +-1043 +-1049 +-1037 +-1003 +-946 +-871 +-781 +-675 +-556 +-430 +-290 +-141 +9 +156 +299 +436 +565 +681 +788 +877 +947 +1001 +1033 +1049 +1045 +1019 +974 +908 +823 +726 +614 +493 +360 +218 +72 +-76 +-221 +-363 +-497 +-622 +-737 +-833 +-917 +-976 +-1016 +-1042 +-1047 +-1029 +-998 +-943 +-865 +-777 +-672 +-556 +-428 +-291 +-151 +-8 +134 +278 +416 +547 +669 +774 +862 +932 +984 +1019 +1034 +1029 +1004 +958 +892 +811 +714 +601 +475 +341 +201 +61 +-80 +-216 +-354 +-487 +-616 +-732 +-825 +-906 +-965 +-1009 +-1035 +-1041 +-1027 +-995 +-938 +-866 +-780 +-675 +-555 +-423 +-285 +-144 +-3 +137 +274 +409 +540 +657 +761 +848 +919 +975 +1010 +1024 +1019 +995 +950 +891 +815 +721 +608 +482 +348 +207 +64 +-77 +-215 +-351 +-482 +-603 +-715 +-812 +-892 +-954 +-999 +-1020 +-1023 +-1005 +-970 +-921 +-854 +-773 +-671 +-553 +-421 +-284 +-143 +-1 +140 +279 +415 +540 +659 +763 +851 +924 +980 +1013 +1024 +1016 +990 +949 +890 +815 +722 +615 +492 +360 +224 +84 +-57 +-200 +-336 +-466 +-587 +-699 +-796 +-878 +-947 +-992 +-1015 +-1013 +-994 +-960 +-907 +-842 +-756 +-654 +-539 +-413 +-283 +-143 +-2 +138 +278 +409 +535 +647 +748 +842 +918 +977 +1013 +1028 +1021 +996 +952 +890 +815 +718 +607 +488 +361 +225 +84 +-58 +-200 +-335 +-462 +-581 +-686 +-784 +-869 +-934 +-981 +-1006 +-1011 +-1001 +-969 +-916 +-847 +-760 +-658 +-547 +-422 +-291 +-152 +-8 +134 +274 +406 +529 +643 +744 +832 +903 +957 +995 +1010 +1009 +988 +948 +887 +809 +713 +606 +491 +363 +226 +85 +-57 +-200 +-337 +-467 +-589 +-698 +-793 +-872 +-935 +-979 +-1004 +-1012 +-1001 +-970 +-920 +-849 +-764 +-664 +-553 +-430 +-302 +-164 +-21 +118 +258 +392 +521 +640 +746 +833 +903 +957 +989 +1006 +1005 +984 +942 +880 +802 +709 +601 +483 +356 +223 +83 +-56 +-192 +-326 +-458 +-584 +-697 +-796 +-875 +-938 +-980 +-1010 +-1017 +-1005 +-975 +-925 +-854 +-769 +-665 +-551 +-427 +-294 +-155 +-18 +119 +255 +386 +511 +630 +737 +829 +901 +953 +989 +1006 +1004 +984 +946 +887 +812 +718 +612 +490 +355 +217 +78 +-58 +-194 +-329 +-455 +-580 +-690 +-789 +-869 +-929 +-977 +-1003 +-1010 +-1000 +-970 +-920 +-855 +-774 +-676 +-561 +-431 +-295 +-158 +-19 +121 +258 +388 +519 +634 +739 +828 +899 +958 +993 +1005 +1003 +980 +936 +882 +810 +725 +620 +498 +367 +230 +88 +-52 +-190 +-325 +-455 +-578 +-686 +-784 +-866 +-933 +-981 +-1004 +-1007 +-993 +-960 +-909 +-844 +-765 +-665 +-550 +-429 +-298 +-160 +-19 +122 +258 +395 +520 +636 +737 +828 +906 +965 +1001 +1019 +1012 +985 +943 +885 +810 +720 +614 +496 +367 +230 +95 +-44 +-186 +-323 +-450 +-568 +-676 +-774 +-857 +-924 +-972 +-998 +-1008 +-993 +-962 +-913 +-840 +-756 +-656 +-543 +-419 +-287 +-149 +-12 +128 +265 +400 +524 +633 +739 +824 +895 +954 +994 +1011 +1007 +989 +949 +890 +814 +718 +609 +492 +365 +231 +91 +-52 +-193 +-329 +-457 +-579 +-687 +-782 +-859 +-920 +-967 +-992 +-1000 +-991 +-962 +-912 +-840 +-761 +-660 +-546 +-423 +-294 +-162 +-20 +123 +261 +395 +521 +634 +737 +825 +896 +946 +980 +995 +994 +974 +931 +874 +797 +703 +595 +480 +354 +221 +82 +-57 +-194 +-330 +-463 +-583 +-693 +-792 +-874 +-936 +-977 +-1000 +-1007 +-997 +-964 +-915 +-848 +-762 +-660 +-544 +-426 +-295 +-160 +-23 +116 +249 +380 +505 +623 +732 +818 +891 +944 +975 +991 +989 +968 +933 +873 +791 +697 +590 +473 +343 +206 +69 +-68 +-204 +-332 +-461 +-580 +-692 +-785 +-866 +-930 +-976 +-999 +-1000 +-991 +-962 +-914 +-842 +-760 +-662 +-548 +-420 +-288 +-149 +-8 +129 +263 +391 +515 +631 +731 +819 +891 +944 +977 +993 +994 +969 +926 +868 +799 +710 +604 +484 +355 +215 +75 +-61 +-196 +-329 +-460 +-579 +-684 +-780 +-861 +-920 +-963 +-988 +-993 +-979 +-942 +-891 +-825 +-745 +-651 +-538 +-418 +-283 +-143 +-3 +133 +267 +401 +523 +639 +743 +831 +899 +952 +993 +1006 +1000 +971 +925 +869 +795 +703 +600 +488 +356 +222 +86 +-51 +-188 +-326 +-452 +-569 +-679 +-774 +-853 +-913 +-962 +-989 +-997 +-981 +-942 +-892 +-819 +-738 +-640 +-528 +-402 +-274 +-142 +-7 +132 +271 +401 +524 +633 +733 +819 +892 +951 +984 +1001 +996 +970 +931 +870 +796 +702 +591 +476 +349 +220 +79 +-62 +-200 +-330 +-460 +-582 +-681 +-771 +-849 +-913 +-960 +-987 +-994 +-982 +-952 +-904 +-836 +-750 +-646 +-534 +-411 +-285 +-147 +-9 +125 +263 +401 +524 +631 +730 +818 +889 +938 +970 +986 +983 +963 +921 +866 +790 +693 +588 +466 +346 +213 +75 +-58 +-202 +-341 +-470 +-587 +-694 +-793 +-867 +-926 +-969 +-995 +-998 +-978 +-951 +-902 +-835 +-746 +-647 +-535 +-413 +-286 +-148 +-20 +122 +261 +392 +514 +633 +735 +820 +893 +948 +982 +989 +982 +961 +921 +863 +785 +688 +581 +460 +334 +204 +68 +-71 +-204 +-334 +-463 +-583 +-687 +-787 +-869 +-930 +-972 +-993 +-996 +-987 +-953 +-904 +-836 +-754 +-648 +-528 +-411 +-277 +-140 +1 +134 +264 +391 +519 +632 +734 +820 +894 +944 +972 +992 +987 +966 +921 +865 +788 +695 +588 +471 +343 +202 +66 +-71 +-209 +-338 +-469 +-577 +-689 +-787 +-861 +-925 +-961 +-986 +-990 +-974 +-943 +-891 +-823 +-739 +-642 +-534 +-413 +-272 +-134 +3 +146 +278 +406 +528 +642 +745 +831 +900 +950 +985 +997 +989 +961 +918 +857 +778 +696 +589 +472 +350 +209 +80 +-61 +-207 +-330 +-454 +-576 +-694 +-782 +-860 +-917 +-964 +-989 +-990 +-975 +-934 +-885 +-813 +-731 +-634 +-522 +-398 +-268 +-138 +-1 +145 +275 +402 +532 +643 +739 +824 +899 +950 +985 +1001 +995 +974 +920 +859 +784 +688 +582 +462 +339 +208 +67 +-72 +-210 +-339 +-466 +-583 +-692 +-782 +-853 +-913 +-961 +-992 +-998 +-979 +-942 +-896 +-827 +-741 +-636 +-522 +-402 +-272 +-132 +6 +139 +277 +411 +532 +641 +742 +822 +892 +934 +971 +991 +989 +964 +917 +859 +782 +687 +582 +459 +333 +196 +67 +-65 +-213 +-350 +-478 +-594 +-702 +-793 +-862 +-925 +-967 +-984 +-984 +-978 +-946 +-894 +-820 +-738 +-642 +-527 +-398 +-268 +-144 +-4 +140 +269 +402 +529 +642 +744 +825 +895 +944 +977 +985 +981 +957 +914 +850 +780 +687 +574 +451 +322 +198 +66 +-68 +-208 +-344 +-468 +-588 +-693 +-791 +-872 +-930 +-968 +-983 +-992 +-977 +-942 +-891 +-818 +-736 +-632 +-521 +-393 +-262 +-125 +6 +138 +274 +408 +528 +634 +735 +827 +905 +944 +976 +989 +987 +961 +922 +863 +785 +690 +581 +463 +333 +192 +58 +-76 +-215 +-343 +-467 +-579 +-684 +-783 +-860 +-921 +-957 +-982 +-989 +-969 +-939 +-892 +-820 +-735 +-641 +-527 +-399 +-264 +-132 +6 +149 +286 +412 +527 +641 +741 +827 +896 +946 +976 +985 +980 +962 +918 +857 +779 +688 +585 +469 +342 +210 +63 +-78 +-207 +-339 +-468 +-591 +-691 +-783 +-862 +-926 +-965 +-982 +-991 +-970 +-936 +-884 +-810 +-731 +-627 +-523 +-407 +-275 +-138 +8 +143 +271 +404 +528 +638 +739 +825 +897 +943 +977 +996 +989 +963 +911 +852 +777 +679 +573 +457 +333 +201 +59 +-74 +-206 +-341 +-468 +-585 +-691 +-785 +-861 +-915 +-960 +-996 +-992 +-983 +-945 +-891 +-824 +-728 +-629 +-518 +-400 +-268 +-129 +7 +145 +283 +405 +530 +644 +746 +819 +881 +936 +971 +991 +986 +965 +922 +860 +780 +686 +579 +452 +326 +195 +59 +-75 +-216 +-346 +-477 +-600 +-699 +-786 +-863 +-917 +-961 +-982 +-987 +-980 +-948 +-887 +-821 +-740 +-643 +-520 +-393 +-265 +-131 +3 +144 +276 +413 +535 +653 +752 +834 +900 +946 +971 +987 +990 +957 +913 +861 +781 +684 +574 +454 +332 +196 +57 +-75 +-207 +-347 +-479 +-600 +-705 +-797 +-878 +-937 +-974 +-994 +-992 +-979 +-943 +-896 +-830 +-737 +-633 +-523 +-394 +-263 +-122 +3 +138 +281 +412 +532 +645 +755 +837 +905 +962 +993 +1005 +989 +965 +927 +865 +787 +689 +581 +453 +320 +188 +54 +-85 +-230 +-356 +-481 +-600 +-703 +-804 +-881 +-937 +-984 +-1005 +-1008 +-989 +-955 +-902 +-833 +-749 +-643 +-518 +-395 +-267 +-125 +15 +159 +296 +423 +544 +656 +755 +843 +916 +966 +997 +1006 +1002 +974 +933 +870 +791 +699 +584 +466 +337 +201 +53 +-94 +-230 +-363 +-493 +-610 +-714 +-813 +-888 +-948 +-989 +-1011 +-1017 +-994 +-956 +-905 +-836 +-744 +-641 +-525 +-408 +-270 +-127 +15 +161 +300 +434 +558 +670 +775 +863 +932 +982 +1014 +1027 +1016 +992 +946 +878 +790 +693 +589 +469 +340 +202 +61 +-85 +-229 +-364 +-493 +-613 +-726 +-818 +-897 +-961 +-1003 +-1027 +-1028 +-1013 +-974 +-922 +-840 +-746 +-640 +-523 +-399 +-264 +-129 +20 +170 +304 +437 +566 +682 +784 +871 +940 +991 +1024 +1040 +1038 +1012 +961 +888 +811 +711 +592 +467 +332 +195 +50 +-95 +-235 +-372 +-509 +-629 +-743 +-832 +-910 +-972 +-1009 +-1032 +-1044 +-1028 +-992 +-937 +-859 +-768 +-655 +-538 +-407 +-266 +-125 +25 +163 +303 +449 +579 +696 +799 +884 +950 +998 +1030 +1044 +1038 +1011 +968 +901 +816 +713 +595 +473 +334 +191 +45 +-100 +-241 +-387 +-519 +-647 +-766 +-862 +-938 +-992 +-1034 +-1059 +-1061 +-1040 +-1004 +-945 +-869 +-772 +-665 +-544 +-408 +-267 +-125 +16 +166 +308 +450 +584 +703 +815 +899 +972 +1030 +1058 +1065 +1057 +1027 +982 +911 +825 +724 +603 +471 +334 +191 +45 +-106 +-245 +-385 +-523 +-654 +-769 +-862 +-946 +-1013 +-1059 +-1077 +-1078 +-1058 +-1019 +-956 +-882 +-789 +-675 +-547 +-409 +-265 +-116 +36 +183 +327 +467 +597 +718 +819 +911 +989 +1042 +1076 +1089 +1082 +1049 +999 +931 +849 +743 +621 +491 +347 +195 +44 +-106 +-259 +-410 +-542 +-663 +-778 +-872 +-960 +-1023 +-1066 +-1093 +-1092 +-1069 +-1029 +-970 +-894 +-794 +-682 +-558 +-420 +-274 +-122 +30 +188 +343 +487 +618 +738 +844 +935 +1009 +1064 +1100 +1106 +1096 +1068 +1015 +943 +853 +745 +625 +493 +353 +205 +51 +-104 +-264 +-412 +-554 +-682 +-798 +-898 +-983 +-1051 +-1094 +-1113 +-1113 +-1095 +-1058 +-988 +-904 +-801 +-688 +-560 +-423 +-280 +-125 +30 +187 +341 +489 +625 +745 +859 +951 +1027 +1081 +1112 +1124 +1121 +1093 +1037 +959 +861 +753 +626 +494 +350 +197 +41 +-120 +-276 +-424 +-567 +-699 +-816 +-920 +-1002 +-1064 +-1110 +-1135 +-1139 +-1120 +-1080 +-1017 +-928 +-824 +-703 +-570 +-430 +-278 +-121 +39 +195 +349 +498 +639 +764 +878 +971 +1041 +1090 +1124 +1139 +1134 +1105 +1053 +979 +881 +769 +642 +505 +354 +197 +41 +-122 +-280 +-433 +-577 +-714 +-840 +-942 +-1025 +-1084 +-1127 +-1151 +-1151 +-1133 +-1090 +-1025 +-936 +-834 +-718 +-582 +-437 +-276 +-120 +39 +200 +356 +507 +652 +783 +898 +994 +1069 +1125 +1156 +1167 +1156 +1125 +1068 +989 +894 +784 +656 +513 +361 +199 +38 +-120 +-278 +-432 +-581 +-720 +-842 +-950 +-1038 +-1105 +-1152 +-1174 +-1172 +-1147 +-1101 +-1036 +-950 +-844 +-722 +-586 +-436 +-275 +-111 +50 +208 +367 +517 +659 +791 +907 +1005 +1082 +1138 +1173 +1188 +1175 +1137 +1079 +1004 +907 +795 +665 +519 +360 +196 +30 +-133 +-293 +-451 +-597 +-732 +-852 +-956 +-1045 +-1114 +-1162 +-1186 +-1186 +-1159 +-1112 +-1048 +-960 +-855 +-734 +-597 +-444 +-285 +-121 +49 +216 +381 +532 +675 +802 +916 +1010 +1089 +1148 +1183 +1195 +1180 +1143 +1085 +1007 +913 +798 +665 +520 +367 +205 +39 +-130 +-297 +-460 +-612 +-747 +-868 +-971 +-1060 +-1128 +-1175 +-1197 +-1196 +-1172 +-1123 +-1052 +-963 +-857 +-733 +-596 +-445 +-290 +-128 +42 +209 +378 +534 +680 +809 +922 +1022 +1102 +1158 +1193 +1202 +1191 +1156 +1098 +1018 +916 +794 +660 +516 +362 +202 +38 +-128 +-297 +-456 +-607 +-748 +-870 +-978 +-1068 +-1132 +-1179 +-1203 +-1203 +-1182 +-1138 +-1066 +-974 +-862 +-733 +-592 +-442 +-283 +-120 +46 +214 +378 +535 +680 +812 +929 +1026 +1102 +1157 +1190 +1200 +1193 +1163 +1107 +1028 +924 +803 +667 +521 +364 +202 +35 +-136 +-303 +-464 +-614 +-754 +-879 +-989 +-1076 +-1141 +-1181 +-1200 +-1201 +-1181 +-1137 +-1072 +-982 +-871 +-744 +-599 +-447 +-285 +-121 +50 +218 +381 +538 +686 +823 +943 +1040 +1117 +1169 +1197 +1208 +1194 +1160 +1104 +1028 +926 +807 +673 +526 +368 +202 +35 +-133 +-295 +-456 +-609 +-751 +-879 +-993 +-1081 +-1146 +-1190 +-1210 +-1208 +-1179 +-1134 +-1063 +-973 +-866 +-739 +-597 +-444 +-279 +-112 +56 +221 +381 +534 +683 +820 +938 +1041 +1117 +1172 +1208 +1220 +1205 +1166 +1107 +1026 +924 +807 +674 +526 +365 +198 +30 +-139 +-302 +-459 +-611 +-750 +-877 +-987 +-1074 +-1144 +-1192 +-1216 +-1215 +-1192 +-1141 +-1070 +-980 +-871 +-747 +-608 +-452 +-286 +-118 +54 +221 +383 +540 +688 +818 +931 +1029 +1106 +1165 +1204 +1215 +1203 +1163 +1102 +1023 +925 +808 +674 +526 +369 +204 +32 +-137 +-307 +-470 +-623 +-763 +-883 +-989 +-1076 +-1145 +-1191 +-1217 +-1216 +-1189 +-1139 +-1071 +-980 +-870 +-744 +-603 +-454 +-293 +-128 +42 +212 +380 +541 +688 +819 +935 +1031 +1111 +1170 +1204 +1216 +1204 +1166 +1107 +1024 +922 +801 +667 +521 +367 +208 +42 +-127 +-295 +-458 +-613 +-755 +-881 +-985 +-1073 +-1141 +-1188 +-1214 +-1212 +-1187 +-1142 +-1072 +-977 +-864 +-737 +-591 +-441 +-284 +-125 +41 +213 +381 +540 +686 +818 +930 +1030 +1110 +1167 +1202 +1213 +1202 +1172 +1114 +1033 +931 +807 +670 +522 +365 +203 +37 +-130 +-295 +-458 +-610 +-751 +-875 +-983 +-1072 +-1136 +-1179 +-1201 +-1202 +-1183 +-1140 +-1074 +-985 +-870 +-741 +-598 +-446 +-286 +-120 +50 +218 +382 +537 +683 +815 +-1044 +-1105 +-1147 +-1171 +-1170 +-1146 +-1096 +-1023 +-932 +-825 +-703 +-567 +-424 +-269 +-111 +48 +211 +372 +525 +668 +793 +902 +995 +1066 +1122 +1153 +1165 +1152 +1115 +1055 +973 +874 +758 +627 +485 +335 +179 +19 +-140 +-297 +-452 +-597 +-733 +-853 +-953 +-1033 +-1094 +-1139 +-1160 +-1161 +-1136 +-1087 +-1020 +-930 +-821 +-697 +-559 +-411 +-255 +-96 +63 +222 +380 +529 +668 +793 +902 +992 +1065 +1117 +1147 +1156 +1141 +1109 +1054 +976 +879 +765 +631 +483 +331 +175 +16 +-145 +-305 +-456 +-600 +-732 +-851 +-950 +-1031 +-1093 +-1133 +-1150 +-1144 +-1117 +-1072 +-1009 +-924 +-819 +-693 +-554 +-406 +-253 +-93 +68 +228 +385 +537 +674 +797 +905 +1000 +1076 +1127 +1152 +1158 +1140 +1101 +1045 +970 +875 +759 +629 +487 +336 +178 +17 +-144 +-303 +-456 +-596 +-728 +-846 +-950 +-1037 +-1100 +-1142 +-1158 +-1150 +-1121 +-1074 +-1007 +-917 +-810 +-686 +-553 +-409 +-254 +-96 +65 +225 +382 +527 +659 +783 +894 +991 +1066 +1122 +1150 +1156 +1139 +1099 +1041 +960 +862 +748 +616 +475 +327 +171 +8 +-155 +-310 +-462 +-600 +-728 +-845 +-947 +-1031 +-1096 +-1140 +-1155 +-1153 +-1128 +-1081 +-1012 +-918 +-814 +-689 +-557 +-412 +-259 +-100 +67 +226 +380 +528 +665 +784 +891 +981 +1055 +1108 +1136 +1145 +1134 +1096 +1038 +955 +858 +748 +621 +482 +332 +175 +13 +-149 +-310 +-463 +-605 +-736 +-849 +-949 +-1028 +-1088 +-1129 +-1147 +-1149 +-1123 +-1075 +-1007 +-917 +-811 +-690 +-558 +-417 +-265 +-104 +53 +214 +372 +522 +662 +786 +897 +985 +1055 +1103 +1133 +1145 +1130 +1098 +1042 +959 +860 +747 +622 +487 +335 +180 +22 +-135 +-289 +-443 +-587 +-721 +-839 +-938 +-1018 +-1078 +-1119 +-1143 +-1143 +-1118 +-1072 +-1002 +-913 +-807 +-686 +-551 +-407 +-253 +-97 +58 +214 +366 +513 +654 +779 +888 +979 +1050 +1098 +1134 +1147 +1135 +1104 +1045 +969 +872 +760 +630 +486 +336 +181 +23 +-134 +-285 +-434 +-581 +-712 +-831 +-926 +-1010 +-1073 +-1115 +-1135 +-1133 +-1113 +-1067 +-1000 +-917 +-815 +-695 +-560 +-410 +-258 +-100 +57 +211 +364 +515 +654 +777 +885 +978 +1051 +1101 +1133 +1139 +1125 +1088 +1034 +963 +869 +762 +637 +495 +345 +189 +30 +-127 +-283 +-437 +-579 +-712 +-830 +-929 +-1015 +-1078 +-1122 +-1142 +-1133 +-1109 +-1062 +-999 +-916 +-815 +-697 +-562 +-419 +-265 +-111 +48 +207 +361 +509 +642 +768 +877 +971 +1049 +1104 +1136 +1145 +1129 +1092 +1036 +960 +866 +754 +626 +485 +338 +185 +27 +-134 +-291 +-444 +-585 +-714 +-830 +-931 +-1023 +-1091 +-1134 +-1157 +-1152 +-1131 +-1081 +-1018 +-929 +-824 +-704 +-570 +-429 +-277 +-119 +43 +205 +362 +508 +647 +766 +871 +970 +1050 +1103 +1138 +1149 +1140 +1106 +1052 +976 +875 +765 +637 +502 +355 +200 +37 +-127 +-287 +-443 +-583 +-712 +-829 +-931 +-1014 +-1079 +-1124 +-1145 +-1148 +-1126 +-1081 +-1019 +-929 +-821 +-702 +-572 +-432 +-277 +-121 +44 +209 +367 +518 +657 +785 +897 +989 +1062 +1116 +1144 +1155 +1147 +1116 +1062 diff --git a/ScalarApiSampleApp/app/build.gradle b/ScalarApiSampleApp/app/build.gradle index b27b399d..322679fe 100644 --- a/ScalarApiSampleApp/app/build.gradle +++ b/ScalarApiSampleApp/app/build.gradle @@ -1,13 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion '25.0.2' + compileSdkVersion 27 defaultConfig { applicationId "com.google.android.apps.forscience.scalarapisampleapp" minSdkVersion 19 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 1 versionName "1.0" } @@ -30,6 +29,6 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:23.3.0' + compile 'com.android.support:appcompat-v7:27.0.1' compile 'com.google.guava:guava:18.0' } diff --git a/ScalarApiSampleApp/build.gradle b/ScalarApiSampleApp/build.gradle index b78a0b86..f93d6081 100644 --- a/ScalarApiSampleApp/build.gradle +++ b/ScalarApiSampleApp/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.1' + classpath 'com.android.tools.build:gradle:3.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,6 +16,7 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/ScalarApiSampleApp/gradle/wrapper/gradle-wrapper.properties b/ScalarApiSampleApp/gradle/wrapper/gradle-wrapper.properties index 46d158b8..9ab75f2f 100644 --- a/ScalarApiSampleApp/gradle/wrapper/gradle-wrapper.properties +++ b/ScalarApiSampleApp/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Apr 11 10:33:13 EDT 2017 +#Wed Dec 20 09:58:36 EST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/api/ScienceJournalApi/build.gradle b/api/ScienceJournalApi/build.gradle index ec5e35c3..3b8aafe0 100644 --- a/api/ScienceJournalApi/build.gradle +++ b/api/ScienceJournalApi/build.gradle @@ -3,19 +3,19 @@ apply plugin: 'com.android.library' buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.2' + classpath 'com.android.tools.build:gradle:3.0.0' } } android { - compileSdkVersion 25 - buildToolsVersion '25.0.2' + compileSdkVersion 27 defaultConfig { minSdkVersion 19 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 1 versionName "1.0" } @@ -36,8 +36,8 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:25.3.1' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:27.0.1' } // We don't seem to be able to generate javadocs of classes that depend on generated AIDL stubs. From f741d34cd310b37e247f9226884238837b45ff93 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:37:15 -0700 Subject: [PATCH 020/587] Granville release 1/24/2018 * master: Import translations. DO NOT MERGE Revert "Fix issue with recording not scrolling into view when active." Prevent crash when deleting archived trial in multi-window mode. Change-Id: Iaef863b419511368993af6d2d291df3714aea75a PiperOrigin-RevId: 190825152 --- .../experiment/ExperimentDetailsFragment.java | 64 +++++++++++-------- .../src/main/res/values-ar/strings.xml | 2 + .../src/main/res/values-b+sr+Latn/strings.xml | 2 + .../src/main/res/values-bg/strings.xml | 2 + .../src/main/res/values-bs-rBA/strings.xml | 2 + .../src/main/res/values-ca/strings.xml | 4 +- .../src/main/res/values-cs/strings.xml | 2 + .../src/main/res/values-da/strings.xml | 2 + .../src/main/res/values-de/strings.xml | 4 +- .../src/main/res/values-el/strings.xml | 2 + .../src/main/res/values-en-rAU/strings.xml | 2 + .../src/main/res/values-en-rGB/strings.xml | 2 + .../src/main/res/values-en-rIN/strings.xml | 2 + .../src/main/res/values-es-rUS/strings.xml | 2 + .../src/main/res/values-es/strings.xml | 2 + .../src/main/res/values-fi/strings.xml | 2 + .../src/main/res/values-fr/strings.xml | 2 + .../src/main/res/values-hi/strings.xml | 2 + .../src/main/res/values-hr/strings.xml | 2 + .../src/main/res/values-hu/strings.xml | 2 + .../src/main/res/values-in/strings.xml | 6 +- .../src/main/res/values-it/strings.xml | 2 + .../src/main/res/values-iw/strings.xml | 2 + .../src/main/res/values-ja/strings.xml | 2 + .../src/main/res/values-ko/strings.xml | 2 + .../src/main/res/values-lt/strings.xml | 2 + .../src/main/res/values-lv/strings.xml | 2 + .../src/main/res/values-nb/strings.xml | 2 + .../src/main/res/values-nl/strings.xml | 2 + .../src/main/res/values-pl/strings.xml | 2 + .../src/main/res/values-pt-rPT/strings.xml | 2 + .../src/main/res/values-pt/strings.xml | 4 +- .../src/main/res/values-ro/strings.xml | 2 + .../src/main/res/values-ru/strings.xml | 2 + .../src/main/res/values-sk/strings.xml | 2 + .../src/main/res/values-sl/strings.xml | 2 + .../src/main/res/values-sr/strings.xml | 2 + .../src/main/res/values-sv/strings.xml | 2 + .../src/main/res/values-th/strings.xml | 2 + .../src/main/res/values-tl/strings.xml | 2 + .../src/main/res/values-tr/strings.xml | 2 + .../src/main/res/values-uk/strings.xml | 2 + .../src/main/res/values-vi/strings.xml | 2 + .../src/main/res/values-zh-rCN/strings.xml | 2 + .../src/main/res/values-zh-rHK/strings.xml | 2 + .../src/main/res/values-zh-rTW/strings.xml | 2 + 46 files changed, 133 insertions(+), 31 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java index e9f0f5b6..70b1c3ad 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java @@ -196,6 +196,12 @@ public void onReceive(Context context, Intent intent) { } } + @Override + public void onDestroy() { + mAdapter.onDestroy(); + super.onDestroy(); + } + public void reloadWithoutScroll() { loadExperimentIfInitialized().subscribe(() -> {}, onReloadError()); } @@ -315,9 +321,6 @@ public void reloadAndScrollToBottom() { } public void scrollToBottom() { - // Doing this here lets the initial layout NOT stack from end, and keeps the view - // at the top of the list. - ((LinearLayoutManager) mDetails.getLayoutManager()).setStackFromEnd(true); if (mDetails != null && mAdapter != null && mAdapter.getItemCount() > 0) { if (DevOptionsFragment.isSmoothScrollingToBottomEnabled(getContext())) { mDetails.smoothScrollToPosition(mAdapter.getItemCount() - 1); @@ -672,6 +675,7 @@ public static class DetailsAdapter extends RecyclerView.Adapter(); @@ -732,10 +736,10 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { noteViewHolder.menuButton.setOnClickListener(view -> { Context context = noteViewHolder.menuButton.getContext(); - PopupMenu popup = new PopupMenu(context, noteViewHolder.menuButton, Gravity.NO_GRAVITY, + mPopupMenu = new PopupMenu(context, noteViewHolder.menuButton, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0); - setupNoteMenu(item, popup); - popup.show(); + setupNoteMenu(item); + mPopupMenu.show(); }); holder.itemView.setOnClickListener(view -> { if (!isRecording()) { @@ -768,10 +772,10 @@ private void setupTrialHeader(DetailsViewHolder holder, final ExperimentDetailIt holder.menuButton.setOnClickListener(view -> { Context context = holder.menuButton.getContext(); - PopupMenu popup = new PopupMenu(context, holder.menuButton, Gravity.NO_GRAVITY, + mPopupMenu = new PopupMenu(context, holder.menuButton, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0); - setupTrialMenu(item, popup); - popup.show(); + setupTrialMenu(item); + mPopupMenu.show(); }); } @@ -791,31 +795,32 @@ private void setupCaption(DetailsViewHolder holder, String caption) { }*/ } - private void setupTrialMenu(ExperimentDetailItem item, PopupMenu popup) { - popup.getMenuInflater().inflate(R.menu.menu_experiment_trial, popup.getMenu()); + private void setupTrialMenu(ExperimentDetailItem item) { + mPopupMenu.getMenuInflater().inflate(R.menu.menu_experiment_trial, mPopupMenu.getMenu()); boolean archived = item.getTrial().isArchived(); - popup.getMenu().findItem(R.id.menu_item_archive).setVisible(!archived); - popup.getMenu().findItem(R.id.menu_item_unarchive).setVisible(archived); - popup.setOnMenuItemClickListener(menuItem -> { - if (menuItem.getItemId() == R.id.menu_item_archive) { - mParentReference.get().setTrialArchived(item.getTrial(), true); - return true; - } else if (menuItem.getItemId() == R.id.menu_item_unarchive) { - mParentReference.get().setTrialArchived(item.getTrial(), false); - return true; - } else if (menuItem.getItemId() == R.id.menu_item_delete) { - if (mParentReference.get() != null) { + mPopupMenu.getMenu().findItem(R.id.menu_item_archive).setVisible(!archived); + mPopupMenu.getMenu().findItem(R.id.menu_item_unarchive).setVisible(archived); + mPopupMenu.setOnMenuItemClickListener(menuItem -> { + if (mParentReference.get() != null && mParentReference.get().isVisible()) { + if (menuItem.getItemId() == R.id.menu_item_archive) { + mParentReference.get().setTrialArchived(item.getTrial(), true); + return true; + } else if (menuItem.getItemId() == R.id.menu_item_unarchive) { + mParentReference.get().setTrialArchived(item.getTrial(), false); + return true; + } else if (menuItem.getItemId() == R.id.menu_item_delete) { mParentReference.get().deleteTrial(item.getTrial()); + return true; } - return true; } return false; }); + mPopupMenu.setOnDismissListener(menu -> mPopupMenu = null); } - private void setupNoteMenu(ExperimentDetailItem item, PopupMenu popup) { - popup.getMenuInflater().inflate(R.menu.menu_experiment_note, popup.getMenu()); - popup.setOnMenuItemClickListener(menuItem -> { + private void setupNoteMenu(ExperimentDetailItem item) { + mPopupMenu.getMenuInflater().inflate(R.menu.menu_experiment_note, mPopupMenu.getMenu()); + mPopupMenu.setOnMenuItemClickListener(menuItem -> { if (menuItem.getItemId() == R.id.btn_delete_note) { if (mParentReference.get() != null) { mParentReference.get().deleteLabel(item.getLabel()); @@ -824,6 +829,7 @@ private void setupNoteMenu(ExperimentDetailItem item, PopupMenu popup) { } return false; }); + mPopupMenu.setOnDismissListener(menu -> mPopupMenu = null); } public void deleteNote(Label label) { @@ -925,6 +931,12 @@ public int getItemViewType(int position) { return mItems.get(position).getViewType(); } + public void onDestroy() { + if (mPopupMenu != null) { + mPopupMenu.dismiss(); + } + } + public void setScalarDisplayOptions(ScalarDisplayOptions scalarDisplayOptions) { mScalarDisplayOptions = scalarDisplayOptions; } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml index ac0a8f14..6047900a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ar/strings.xml @@ -445,4 +445,6 @@ "إخفاء التجارب المؤرشفة" "إخفاء التسجيلات المؤرشَفة" "لقطة المستشعر" + "التسجيلات" + "حالة التسجيلات" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml index f3db4d5c..30b6d1a9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-b+sr+Latn/strings.xml @@ -445,4 +445,6 @@ "Sakrij arhivirane eksperimente" "Sakrij arhivirane zabeleške" "Snimak sa senzora" + "Beleške" + "Status beleženja" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml index 3339afd6..601fe5c0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bg/strings.xml @@ -445,4 +445,6 @@ "Скриване на архивираните експерименти" "Скриване на архив. записи" "Моментна снимка на сензорите" + "Записи" + "Състояние на записите" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml index 25ad1265..e329e633 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-bs-rBA/strings.xml @@ -445,4 +445,6 @@ "Sakrij arhivirane eksperimente" "Sakrij arhivirane snimke" "Snimka senzora" + "Snimke" + "Status snimanja" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml index 406aa938..b2c66487 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ca/strings.xml @@ -195,7 +195,7 @@ "Pressió atmosfèrica en hectopascals (hPa)." "El sensor de llum ambiental mesura la llum en lux, una mesura d\'il·luminació que depèn de la quantitat de llum d\'entrada i de l\'àrea sobre la qual s\'estén. \n\nLa lluna plena proporciona aproximadament 1 lux d\'il·luminació; un saló il·luminat normal, uns 50 lux; una aula il·luminada, l\'alba i la posta de sol, uns 400 lux; la llum del dia (sol indirecte), més de 10.000 lux; i el sol directe, més de 30.000 lux. \n\nEl lux és una unitat desconeguda per a la majoria de nosaltres. Quan comprem bombetes, sovint ho fem en funció dels watts, però la potència elèctrica d\'una bombeta no en determina la brillantor, sinó que només indica la quantitat d\'energia que utilitza. Els lúmens són una mesura que ens pot resultar més útil a l\'hora de comprar bombetes, ja que indiquen la quantitat de llum que produeix realment una bombeta. D\'altra banda, els lux indiquen la quantitat de llum que arriba a una àrea concreta." "Com que la llum es dispersa a mesura que viatja, el nombre de lux disminueix quan t\'allunyes d\'una font de llum, encara que aquesta continuï emetent la mateixa quantitat de llum en lúmens. Una àrea que estigui inclinada respecte d\'una font de llum també rep menys il·luminació, motiu pel qual les regions equatorials de la Terra són molt més càlides que els pols. \n\nLa finalitat del sensor de llum del teu telèfon és controlar el nivell de llum de la pantalla i ajustar-lo en funció de la llum ambiental. A l\'interior del sensor de llum hi ha un petit semiconductor que respon a la llum d\'entrada produint un corrent elèctric petit però mesurable, fenomen que es coneix com a efecte fotoelèctric. En alguns fanals s\'utilitzen sensors similars perquè s\'encenguin quan es fa fosc." - "El teu telèfon conté un dispositiu dissenyat per detectar camps magnètics: un magnetòmetre. Aquest petit sensor de tres eixos fa servir corrents elèctrics per detectar la força del camp magnètic en les tres dimensions espacials. En combinar les dades d\'aquests tres eixos, podem crear un sensor que detecti la força del camp magnètic total. \n\nAlguns magnetòmetres detecten camps magnètics mitjançant l\'efecte Hall, és a dir, la tendència dels camps magnètics a desviar una càrrega en moviment mentre flueix. Els magnetòmetres més moderns fan servir magnetoresistències, aliatges metàl·lics que canvien la seva resistència en funció dels camps magnètics. \n\nPer què un telèfon necessita un magnetòmetre? Conèixer l\'orientació del dispositiu en l\'espai és útil per a les brúixoles integrades i les aplicacions de navegació, especialment per a aquelles persones que volen rebre indicacions pas a pas." + "El teu telèfon conté un dispositiu dissenyat per detectar camps magnètics: un magnetòmetre. Aquest petit sensor de tres eixos fa servir corrents elèctrics per detectar la força del camp magnètic en les tres dimensions espacials. En combinar les dades d\'aquests tres eixos, podem crear un sensor que detecti la força del camp magnètic total. \n\nAlguns magnetòmetres detecten camps magnètics mitjançant l\'efecte Hall, és a dir, la tendència dels camps magnètics a desviar una pujada en moviment mentre flueix. Els magnetòmetres més moderns fan servir magnetoresistències, aliatges metàl·lics que canvien la seva resistència en funció dels camps magnètics. \n\nPer què un telèfon necessita un magnetòmetre? Conèixer l\'orientació del dispositiu en l\'espai és útil per a les brúixoles integrades i les aplicacions de navegació, especialment per a aquelles persones que volen rebre indicacions pas a pas." "Els imants, els corrents elèctrics i els objectes metàl·lics poden provocar que el magnetòmetre del telèfon es desviï cap a una direcció o cap a una altra. Però fins i tot al mig d\'un camp sense res, el magnetòmetre del telèfon sempre mostra una lectura baixa que mai no arriba a zero: és el camp magnètic de la Terra." "Els objectes tenen tendència a quedar-se quiets o bé a continuar en moviment si s\'estan movent: és el que anomenem principi d\'inèrcia. La primera llei de Newton expressa aquesta idea formalment: un objecte manté el seu estat de moviment o de repòs llevat que hi actuï una força desequilibradora. \n\nQuan una força desequilibradora provoca que un objecte es desplaci, diem que l\'objecte accelera: la seva velocitat (o rapidesa) canvia, ja sigui perquè accelera, desaccelera o perquè canvia de direcció. L\'acceleració es mesura com un canvi de la velocitat en el temps, en metres per segon o en metres per segon al quadrat (m/s²). \n\nEl teu telèfon té un dispositiu per mesurar aquests canvis en el moviment: un acceleròmetre. Dins de l\'acceleròmetre hi ha petites masses suspeses que tenen llibertat per moure\'s. Els canvis en el moviment provoquen que aquestes masses es desplacin, de la mateixa manera que el teu cap té tendència a caure endavant quan vas en un cotxe que frena de cop. Mesurant aquests desplaçaments subtils causats per la inèrcia, l\'acceleròmetre d\'un telèfon pot detectar canvis en el moviment i en l\'orientació, fet que resulta útil per canviar la pantalla del mode horitzontal al vertical, per jugar a videojocs al telèfon i molt més." "Probablement has notat una acceleració persistent en l\'eix Z, fins i tot amb el telèfon sobre una taula. Aquesta és l\'acceleració que experimentem a la superfície de la Terra a causa de la força de la gravetat, d\'aproximadament 9,8 m/s²." @@ -445,4 +445,6 @@ "Amaga els experiments arxivats" "Amaga els enregistraments arxivats" "Visualització general dels sensors" + "Enregistraments" + "Estat de l\'enregistrament" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml index 49093a2a..3c4b4025 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-cs/strings.xml @@ -445,4 +445,6 @@ "Skrýt archivované experimenty" "Skrýt archivované nahrávky" "Snímek záznamu senzoru" + "Záznamy" + "Stav zaznamenávání" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml index 4e8b5aec..1315c459 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-da/strings.xml @@ -445,4 +445,6 @@ "Skjul arkiverede eksperimenter" "Skjul arkiv. registreringer" "Øjebliksbillede fra sensor" + "Registreringer" + "Registreringsstatus" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml index f013c240..2e1219be 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-de/strings.xml @@ -125,7 +125,7 @@ "Teilen" "Speichern unter…" "Version" - "Open-Source-Lizenzen" + "Open Source-Lizenzen" "Für den Zugriff auf externe Geräte (\"Science Journal-Sensor\") mittels Science Journal müssen Sie zunächst Bluetooth aktivieren. Um Science Journal-Sensoren zu finden, benötigt Android außerdem Ihre Erlaubnis, auf Ihren Standort zuzugreifen, da andere Bluetooth-Geräte während der Geräteerkennung möglicherweise ihre Standortinformationen übertragen. Science Journal speichert diese Standortinformationen jedoch nicht und Science Journal-Sensoren übertragen keine Standortinformationen." "Standortzugriff aktivieren" "Bluetooth aktivieren" @@ -445,4 +445,6 @@ "Archivierte Experimente ausblenden" "Archivierte Aufz. ausblenden" "Momentaufnahme des Sensors" + "Aufzeichnungen" + "Aufzeichnungsstatus" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml index 90b78e2d..7fe3b3f4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-el/strings.xml @@ -445,4 +445,6 @@ "Απόκρυψη αρχειοθετημένων πειραμάτων" "Απόκρυψη αρχειοθετημένων εγγραφών" "Στιγμιότυπο αισθητήρα" + "Καταγραφές" + "Κατάσταση καταγραφής" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml index dd1cd903..07da02dc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rAU/strings.xml @@ -445,4 +445,6 @@ "Hide archived experiments" "Hide archived recordings" "Sensor snapshot" + "Recordings" + "Recording status" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml index dd1cd903..07da02dc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rGB/strings.xml @@ -445,4 +445,6 @@ "Hide archived experiments" "Hide archived recordings" "Sensor snapshot" + "Recordings" + "Recording status" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml index dd1cd903..07da02dc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-en-rIN/strings.xml @@ -445,4 +445,6 @@ "Hide archived experiments" "Hide archived recordings" "Sensor snapshot" + "Recordings" + "Recording status" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml index f17004b0..84f9f4ff 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es-rUS/strings.xml @@ -445,4 +445,6 @@ "Ocultar experimentos archivados" "Ocultar grabaciones archivadas" "Instantánea del sensor" + "Grabaciones" + "Estado de las grabaciones" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml index edc58ccd..361f0894 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-es/strings.xml @@ -445,4 +445,6 @@ "Ocultar experimentos archivados" "Ocultar grabaciones archivadas" "Captura del sensor" + "Grabaciones" + "Estado de registro" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml index aa789fb7..9167341a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fi/strings.xml @@ -445,4 +445,6 @@ "Piilota arkistoidut kokeet" "Piilota arkistoidut tallenteet" "Anturiotos" + "Tallenteet" + "Tallenteen tila" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml index 944e4d5e..1543f628 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-fr/strings.xml @@ -445,4 +445,6 @@ "Masquer les expériences archivées" "Masquer les enregist. archivés" "Instantané des capteurs" + "Enregistrements" + "État d\'enregistrement" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml index 8d61f905..021bf9c2 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hi/strings.xml @@ -445,4 +445,6 @@ "संग्रहित प्रयोगों को छिपाएं" "संग्रहित रिकॉर्डिंग छिपाएं" "सेंसर स्नैपशॉट" + "रिकॉर्डिंग" + "रिकॉर्डिंग स्थिति" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml index 25ad1265..e329e633 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hr/strings.xml @@ -445,4 +445,6 @@ "Sakrij arhivirane eksperimente" "Sakrij arhivirane snimke" "Snimka senzora" + "Snimke" + "Status snimanja" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml index c5931f08..fb5ef88c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-hu/strings.xml @@ -445,4 +445,6 @@ "Archivált kísérletek elrejtése" "Archivált felvételek elrejtése" "Aktuális szenzorérték" + "Felvételek" + "Rögzítési állapot" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml index 0fe88914..3d72bc2a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-in/strings.xml @@ -213,8 +213,8 @@ "Peninjauan" "Jurnal Sains" "Merekam..." - "Grafik sensor langsung. Seret untuk menggeser sumbu X, cubit untuk memperbesar sumbu Y." - "Grafik sensor. Cubit untuk memperbesar dan seret untuk menggeser, tap dua kali untuk memperkecil." + "Grafik sensor langsung. Tarik untuk menggeser sumbu X, cubit untuk memperbesar sumbu Y." + "Grafik sensor. Cubit untuk memperbesar dan tarik untuk menggeser, tap dua kali untuk memperkecil." "Opsi kartu" "sensor yang tersedia" "Informasi Sensor" @@ -445,4 +445,6 @@ "Sembunyikan arsip eksperimen" "Sembunyikan arsip rekaman" "Rekam sensor" + "Rekaman" + "Status perekaman" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml index cdcb8088..22818f39 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-it/strings.xml @@ -445,4 +445,6 @@ "Nascondi esperimenti archiviati" "Nascondi registrazioni archiviate" "Snapshot sensore" + "Registrazioni" + "Stato registrazione" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml index 74f9a1ed..2ab1bc28 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-iw/strings.xml @@ -445,4 +445,6 @@ "הסתרת ניסויים מהארכיון" "הסתרת מדידות מהארכיון" "תמונת מצב של חיישן" + "מדידות" + "סטטוס המדידה" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml index 9f9bc5c7..d183a38c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ja/strings.xml @@ -445,4 +445,6 @@ "アーカイブ済みの実験を非表示" "アーカイブ済みの記録を非表示" "センサーのスナップショット" + "記録" + "記録ステータス" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml index 4f72c4d9..e070d88a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ko/strings.xml @@ -445,4 +445,6 @@ "보관처리된 실험 숨기기" "보관처리된 기록 숨기기" "센서 스냅샷" + "기록" + "기록 상태" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml index 08e39dce..8dcaf54d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lt/strings.xml @@ -445,4 +445,6 @@ "Slėpti suarchyvuotus eksperimentus" "Slėpti suarchyvuotus įrašus" "Jutiklio duomenų įrašas" + "Įrašai" + "Įrašymo būsena" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml index 2f4d4726..fd37997b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-lv/strings.xml @@ -445,4 +445,6 @@ "Slēpt arhivētos eksperimentus" "Slēpt arhivētos ierakstus" "Sensora momentuzņēmums" + "Ieraksti" + "Ierakstīšanas statuss" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml index f4238817..f6264985 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nb/strings.xml @@ -445,4 +445,6 @@ "Skjul arkiverte eksperimenter" "Skjul arkiverte registreringer" "Øyeblikksbilde fra sensorer" + "Registreringer" + "Registreringsstatus" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml index 171ef6c9..3f73c250 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-nl/strings.xml @@ -445,4 +445,6 @@ "Gearchiveerde experimenten verbergen" "Archiefopnamen verbergen" "Momentopname van sensor" + "Opnamen" + "Opnamestatus" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml index 8caa6ad1..9874e1b4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pl/strings.xml @@ -445,4 +445,6 @@ "Ukryj zarchiwizowane doświadczenia" "Ukryj zarchiwizowane zarejestrowane dane" "Zrzut czujnika" + "Zarejestrowane dane" + "Stan rejestrowania" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml index bfd6fbb6..3b04b0d1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt-rPT/strings.xml @@ -445,4 +445,6 @@ "Ocultar experiências arquivadas" "Ocultar registos arquivados" "Instantâneo do sensor" + "Registos" + "Estado de registo" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml index 9085005a..45d08097 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-pt/strings.xml @@ -72,7 +72,7 @@ "Não foi possível iniciar a gravação. Tente novamente" "Não foi possível iniciar a gravação porque um sensor está desconectado. Tente novamente." "Os dados não estão sendo gravados" - "Um ou mais sensores não gravaram nenhum dado. Deseja cancelar esta gravação?" + "Um ou mais sensores não gravaram nenhum dado. Quer cancelar esta gravação?" "Continuar" "Cancelar gravação" "Não foi possível parar a gravação porque um sensor está desconectado. Quer cancelar esta gravação?" @@ -445,4 +445,6 @@ "Ocultar experimentos arquivados" "Ocultar gravações arquivadas" "Instantâneo do sensor" + "Gravações" + "Status da gravação" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml index 7f166d57..cc00ede4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ro/strings.xml @@ -445,4 +445,6 @@ "Ascundeți experimentele arhivate" "Ascundeți înregistrările arhivate" "Instantaneu de la senzor" + "Înregistrări" + "Starea înregistrării" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml index 7010690f..0d70482e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-ru/strings.xml @@ -445,4 +445,6 @@ "Скрыть эксперименты из архива" "Скрыть записи из архива" "Сохранить показания датчиков" + "Записи" + "Статус записи" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml index 637c1aa7..833fa203 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sk/strings.xml @@ -445,4 +445,6 @@ "Skryť archivované experimenty" "Skryť archivované záznamy" "Prehľad stavu senzorov" + "Záznamy" + "Stav zaznamenávania" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml index 93fba815..30d288c5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sl/strings.xml @@ -445,4 +445,6 @@ "Skrij arhivirane poskuse" "Skrij arhivirane posnetke" "Posnetek tipala" + "Posnetki" + "Stanje beleženja" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml index f695693b..053a1a2f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sr/strings.xml @@ -445,4 +445,6 @@ "Сакриј архивиране експерименте" "Сакриј архивиране забелешке" "Снимак са сензора" + "Белешке" + "Статус бележења" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml index e5f3b850..6de5a647 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-sv/strings.xml @@ -445,4 +445,6 @@ "Dölj arkiverade experiment" "Dölj arkiverade inspelningar" "Ögonblicksbild för sensor" + "Inspelningar" + "Inspelningsstatus" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml index c94cd10f..719ef9e4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-th/strings.xml @@ -445,4 +445,6 @@ "ซ่อนการทดลองที่เก็บถาวร" "ซ่อนบันทึกที่เก็บถาวร" "สแนปชอตเซ็นเซอร์" + "การบันทึก" + "สถานะการบันทึก" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml index ab826f1d..a1697a85 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tl/strings.xml @@ -445,4 +445,6 @@ "Itago ang mga na-archive na eksperimento" "Itago: na-archive na recording" "Snapshot ng sensor" + "Mga Recording" + "Status ng pagre-record" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml index 87d89abb..49883924 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-tr/strings.xml @@ -445,4 +445,6 @@ "Arşivlenmiş deneyleri gizle" "Arşivlenmiş kayıtları gizle" "Sensör anlık görüntüsü" + "Kayıtlar" + "Kayıt durumu" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml index 806a8791..89f96962 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-uk/strings.xml @@ -445,4 +445,6 @@ "Сховати заархівовані експерименти" "Сховати заархівовані записи" "Знімок датчика" + "Записи" + "Статус запису" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml index 8fa0bc76..0357aadc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-vi/strings.xml @@ -445,4 +445,6 @@ "Ẩn thí nghiệm đã lưu trữ" "Ẩn bản ghi đã lưu trữ" "Ảnh chụp nhanh cảm biến" + "Bản ghi" + "Trạng thái ghi" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml index bb2db21a..791d7bac 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rCN/strings.xml @@ -445,4 +445,6 @@ "隐藏已归档的实验" "隐藏已归档的记录" "传感器快照" + "记录" + "记录状态" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml index 32d4873e..92f77558 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rHK/strings.xml @@ -445,4 +445,6 @@ "隱藏已封存的實驗" "隱藏已封存的紀錄" "感測器數據匯報" + "紀錄" + "記錄狀態" diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml index 32d4873e..92f77558 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/values-zh-rTW/strings.xml @@ -445,4 +445,6 @@ "隱藏已封存的實驗" "隱藏已封存的紀錄" "感測器數據匯報" + "紀錄" + "記錄狀態" From 4d1c0b2f8c879c2340ac1c7d9a4745283436c860 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 28 Mar 2018 13:37:53 -0700 Subject: [PATCH 021/587] Hall Release 3/1/2018 * master: (88 commits) Rev to version 1.2, with platform version from build Add ContentDescription to snackbar view. Fixup commit for import service. Samsung intent filter doesn't work; Move import to the export service. Launch export chooser from the current activity, not the exporting activity. Add a Testing Options preference that displays the user age state Provide build number for Java code Persist export progress bars across device rotation. Snackbar when trying to import before age check Iterate on trials.length instead of totalTrials Stops crashing on export, but re-introduces a Context leak we'll need to fix. Reject iOS versions we can't parse. Updated Android pitch sensor code that deals with spikes, to match iOS code. Increase insert batch size to speed up imports. Import translations. DO NOT MERGE Don't import from the future Add FLAG_ACTIVITY_NEW_TASK to share intents, due to context change to App context. Don't allow exporting archived experiments from list Catch and ignore ZipException when adding the cover image twice. ... Change-Id: Id7606fa0c4ee1cfb771fcafb2c1c3a561e6df818 PiperOrigin-RevId: 190825252 --- OpenScienceJournal/gradle.properties | 2 +- .../whistlepunk_library/build.gradle | 19 +- .../dependencyVersions.gradle | 4 +- .../whistlepunk_library/proguard-rules.pro | 17 - .../src/main/AndroidManifest.xml | 56 +- .../apps/forscience/ble/BleClient.java | 12 - .../apps/forscience/ble/BleClientImpl.java | 60 -- .../apps/forscience/ble/BleDevices.java | 158 ------ .../apps/forscience/ble/BleEvents.java | 23 - .../android/apps/forscience/ble/BleFlow.java | 127 +---- .../apps/forscience/ble/MyBleService.java | 163 +----- .../whistlepunk/AccessibilityUtils.java | 1 + .../whistlepunk/ActivityNavigator.java | 34 ++ .../forscience/whistlepunk/AppServices.java | 7 + .../forscience/whistlepunk/AppSingleton.java | 36 +- .../whistlepunk/BatchDataController.java | 74 +++ .../whistlepunk/BatchInsertScalarReading.java | 36 ++ .../whistlepunk/BuiltInSensorAppearance.java | 33 +- .../whistlepunk/CardViewHolder.java | 5 +- .../whistlepunk/ControlBarController.java | 3 +- .../whistlepunk/DataController.java | 26 +- .../whistlepunk/DataControllerImpl.java | 90 ++- .../whistlepunk/DevOptionsFragment.java | 21 +- .../forscience/whistlepunk/ExportService.java | 231 +++++++- .../whistlepunk/GraphPopulator.java | 6 +- .../ImageViewSensorAnimationBehavior.java | 191 +++++++ .../forscience/whistlepunk/LevelActivity.java | 79 --- .../forscience/whistlepunk/LevelView.java | 199 ------- .../forscience/whistlepunk/MainActivity.java | 46 +- .../whistlepunk/NoteViewHolder.java | 23 +- .../forscience/whistlepunk/PanesActivity.java | 41 +- .../whistlepunk/PanesBottomSheetBehavior.java | 27 +- .../whistlepunk/PermissionUtils.java | 15 +- .../whistlepunk/PhotoAsyncLoader.java | 32 +- .../forscience/whistlepunk/PictureUtils.java | 5 +- .../PitchSensorAnimationBehavior.java | 528 ++++++++++++++++++ .../whistlepunk/ProtoSensorAppearance.java | 115 ++++ .../whistlepunk/RecordFragment.java | 78 +-- .../whistlepunk/RecorderControllerImpl.java | 3 +- .../whistlepunk/RecorderService.java | 1 + .../whistlepunk/RecordingDataController.java | 14 +- .../forscience/whistlepunk/RulerActivity.java | 152 ----- .../forscience/whistlepunk/RulerView.java | 508 ----------------- .../whistlepunk/SensorAnimationBehavior.java | 216 +------ .../SensorAppearanceProviderImpl.java | 98 +++- .../whistlepunk/SensorCardPresenter.java | 19 +- .../whistlepunk/SensorRegistry.java | 7 +- .../whistlepunk/WhistlePunkApplication.java | 20 + .../analytics/TrackerConstants.java | 2 + .../scalarinput/EmptySensorAppearance.java | 3 +- .../api/scalarinput/ScalarInputSpec.java | 5 +- .../whistlepunk/{ => audio}/AudioSource.java | 30 +- .../audiogen/AudioPlaybackController.java | 7 +- .../devicemanager/SensorTypeProvider.java | 14 +- .../whistlepunk/filemetadata/Experiment.java | 6 + .../filemetadata/ExperimentCache.java | 22 +- .../filemetadata/FileMetadataManager.java | 512 +++++++++++++++-- .../whistlepunk/filemetadata/Trial.java | 9 + .../filemetadata/UserMetadataManager.java | 15 +- .../whistlepunk/intro/AgeVerifier.java | 13 + .../whistlepunk/metadata/CropHelper.java | 2 +- .../whistlepunk/metadata/MetaDataManager.java | 10 + .../metadata/SimpleMetaDataManager.java | 21 +- .../project/ExperimentListFragment.java | 65 ++- .../experiment/ExperimentDetailsFragment.java | 267 +++++++-- .../review/ExportOptionsDialogFragment.java | 4 +- .../whistlepunk/review/PinnedNoteAdapter.java | 22 +- .../whistlepunk/review/RunReviewFragment.java | 72 +-- .../review/labels/LabelDetailsActivity.java | 8 +- .../labels/PictureLabelDetailsFragment.java | 18 + .../scalarchart/ChartController.java | 10 +- .../whistlepunk/sensorapi/ScalarSensor.java | 10 +- .../sensorapi/ScalarSensorDumpReader.java | 99 ++++ .../sensorapi/SensorEnvironment.java | 2 +- .../whistlepunk/sensorapi/ZoomRecorder.java | 19 +- .../whistlepunk/sensordb/SensorDatabase.java | 36 +- .../sensordb/SensorDatabaseImpl.java | 261 ++++++--- .../whistlepunk/sensors/DecibelSensor.java | 4 +- ...entalPitchSensor.java => PitchSensor.java} | 36 +- .../whistlepunk/sensors/SensorTool.java | 79 --- .../src/main/proto/icon_path.proto | 5 +- .../src/main/proto/scalar_sensor_data.proto | 43 ++ .../main/res/drawable-hdpi/frequency_high.png | Bin 555 -> 0 bytes .../main/res/drawable-hdpi/frequency_low.png | Bin 520 -> 0 bytes .../res/drawable-hdpi/frequency_piano_1.png | Bin 743 -> 0 bytes .../res/drawable-hdpi/frequency_piano_10.png | Bin 979 -> 0 bytes .../res/drawable-hdpi/frequency_piano_11.png | Bin 809 -> 0 bytes .../res/drawable-hdpi/frequency_piano_12.png | Bin 890 -> 0 bytes .../res/drawable-hdpi/frequency_piano_13.png | Bin 660 -> 0 bytes .../res/drawable-hdpi/frequency_piano_14.png | Bin 927 -> 0 bytes .../res/drawable-hdpi/frequency_piano_15.png | Bin 777 -> 0 bytes .../res/drawable-hdpi/frequency_piano_16.png | Bin 816 -> 0 bytes .../res/drawable-hdpi/frequency_piano_17.png | Bin 1015 -> 0 bytes .../res/drawable-hdpi/frequency_piano_18.png | Bin 826 -> 0 bytes .../res/drawable-hdpi/frequency_piano_19.png | Bin 849 -> 0 bytes .../res/drawable-hdpi/frequency_piano_2.png | Bin 956 -> 0 bytes .../res/drawable-hdpi/frequency_piano_20.png | Bin 825 -> 0 bytes .../res/drawable-hdpi/frequency_piano_21.png | Bin 760 -> 0 bytes .../res/drawable-hdpi/frequency_piano_22.png | Bin 999 -> 0 bytes .../res/drawable-hdpi/frequency_piano_23.png | Bin 841 -> 0 bytes .../res/drawable-hdpi/frequency_piano_24.png | Bin 1001 -> 0 bytes .../res/drawable-hdpi/frequency_piano_25.png | Bin 670 -> 0 bytes .../res/drawable-hdpi/frequency_piano_26.png | Bin 919 -> 0 bytes .../res/drawable-hdpi/frequency_piano_27.png | Bin 772 -> 0 bytes .../res/drawable-hdpi/frequency_piano_28.png | Bin 764 -> 0 bytes .../res/drawable-hdpi/frequency_piano_29.png | Bin 928 -> 0 bytes .../res/drawable-hdpi/frequency_piano_3.png | Bin 801 -> 0 bytes .../res/drawable-hdpi/frequency_piano_30.png | Bin 842 -> 0 bytes .../res/drawable-hdpi/frequency_piano_31.png | Bin 849 -> 0 bytes .../res/drawable-hdpi/frequency_piano_32.png | Bin 775 -> 0 bytes .../res/drawable-hdpi/frequency_piano_33.png | Bin 752 -> 0 bytes .../res/drawable-hdpi/frequency_piano_34.png | Bin 943 -> 0 bytes .../res/drawable-hdpi/frequency_piano_35.png | Bin 808 -> 0 bytes .../res/drawable-hdpi/frequency_piano_36.png | Bin 1009 -> 0 bytes .../res/drawable-hdpi/frequency_piano_37.png | Bin 709 -> 0 bytes .../res/drawable-hdpi/frequency_piano_38.png | Bin 975 -> 0 bytes .../res/drawable-hdpi/frequency_piano_39.png | Bin 850 -> 0 bytes .../res/drawable-hdpi/frequency_piano_4.png | Bin 766 -> 0 bytes .../res/drawable-hdpi/frequency_piano_40.png | Bin 810 -> 0 bytes .../res/drawable-hdpi/frequency_piano_41.png | Bin 925 -> 0 bytes .../res/drawable-hdpi/frequency_piano_42.png | Bin 817 -> 0 bytes .../res/drawable-hdpi/frequency_piano_43.png | Bin 853 -> 0 bytes .../res/drawable-hdpi/frequency_piano_44.png | Bin 826 -> 0 bytes .../res/drawable-hdpi/frequency_piano_45.png | Bin 819 -> 0 bytes .../res/drawable-hdpi/frequency_piano_46.png | Bin 975 -> 0 bytes .../res/drawable-hdpi/frequency_piano_47.png | Bin 822 -> 0 bytes .../res/drawable-hdpi/frequency_piano_48.png | Bin 981 -> 0 bytes .../res/drawable-hdpi/frequency_piano_49.png | Bin 746 -> 0 bytes .../res/drawable-hdpi/frequency_piano_5.png | Bin 990 -> 0 bytes .../res/drawable-hdpi/frequency_piano_50.png | Bin 1047 -> 0 bytes .../res/drawable-hdpi/frequency_piano_51.png | Bin 822 -> 0 bytes .../res/drawable-hdpi/frequency_piano_52.png | Bin 744 -> 0 bytes .../res/drawable-hdpi/frequency_piano_53.png | Bin 940 -> 0 bytes .../res/drawable-hdpi/frequency_piano_54.png | Bin 783 -> 0 bytes .../res/drawable-hdpi/frequency_piano_55.png | Bin 879 -> 0 bytes .../res/drawable-hdpi/frequency_piano_56.png | Bin 766 -> 0 bytes .../res/drawable-hdpi/frequency_piano_57.png | Bin 817 -> 0 bytes .../res/drawable-hdpi/frequency_piano_58.png | Bin 931 -> 0 bytes .../res/drawable-hdpi/frequency_piano_59.png | Bin 794 -> 0 bytes .../res/drawable-hdpi/frequency_piano_6.png | Bin 775 -> 0 bytes .../res/drawable-hdpi/frequency_piano_60.png | Bin 1019 -> 0 bytes .../res/drawable-hdpi/frequency_piano_61.png | Bin 695 -> 0 bytes .../res/drawable-hdpi/frequency_piano_62.png | Bin 952 -> 0 bytes .../res/drawable-hdpi/frequency_piano_63.png | Bin 814 -> 0 bytes .../res/drawable-hdpi/frequency_piano_64.png | Bin 817 -> 0 bytes .../res/drawable-hdpi/frequency_piano_65.png | Bin 942 -> 0 bytes .../res/drawable-hdpi/frequency_piano_66.png | Bin 797 -> 0 bytes .../res/drawable-hdpi/frequency_piano_67.png | Bin 890 -> 0 bytes .../res/drawable-hdpi/frequency_piano_68.png | Bin 712 -> 0 bytes .../res/drawable-hdpi/frequency_piano_69.png | Bin 779 -> 0 bytes .../res/drawable-hdpi/frequency_piano_7.png | Bin 882 -> 0 bytes .../res/drawable-hdpi/frequency_piano_70.png | Bin 960 -> 0 bytes .../res/drawable-hdpi/frequency_piano_71.png | Bin 829 -> 0 bytes .../res/drawable-hdpi/frequency_piano_72.png | Bin 981 -> 0 bytes .../res/drawable-hdpi/frequency_piano_73.png | Bin 750 -> 0 bytes .../res/drawable-hdpi/frequency_piano_74.png | Bin 1026 -> 0 bytes .../res/drawable-hdpi/frequency_piano_75.png | Bin 776 -> 0 bytes .../res/drawable-hdpi/frequency_piano_76.png | Bin 769 -> 0 bytes .../res/drawable-hdpi/frequency_piano_77.png | Bin 948 -> 0 bytes .../res/drawable-hdpi/frequency_piano_78.png | Bin 837 -> 0 bytes .../res/drawable-hdpi/frequency_piano_79.png | Bin 955 -> 0 bytes .../res/drawable-hdpi/frequency_piano_8.png | Bin 766 -> 0 bytes .../res/drawable-hdpi/frequency_piano_80.png | Bin 788 -> 0 bytes .../res/drawable-hdpi/frequency_piano_81.png | Bin 753 -> 0 bytes .../res/drawable-hdpi/frequency_piano_82.png | Bin 949 -> 0 bytes .../res/drawable-hdpi/frequency_piano_83.png | Bin 818 -> 0 bytes .../res/drawable-hdpi/frequency_piano_84.png | Bin 952 -> 0 bytes .../res/drawable-hdpi/frequency_piano_85.png | Bin 753 -> 0 bytes .../res/drawable-hdpi/frequency_piano_86.png | Bin 945 -> 0 bytes .../res/drawable-hdpi/frequency_piano_87.png | Bin 792 -> 0 bytes .../res/drawable-hdpi/frequency_piano_88.png | Bin 821 -> 0 bytes .../res/drawable-hdpi/frequency_piano_9.png | Bin 744 -> 0 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 153 -> 828 bytes .../sound_frequency_drawable.png | Bin 0 -> 15452 bytes .../main/res/drawable-mdpi/frequency_high.png | Bin 345 -> 0 bytes .../main/res/drawable-mdpi/frequency_low.png | Bin 330 -> 0 bytes .../res/drawable-mdpi/frequency_piano_1.png | Bin 467 -> 0 bytes .../res/drawable-mdpi/frequency_piano_10.png | Bin 635 -> 0 bytes .../res/drawable-mdpi/frequency_piano_11.png | Bin 508 -> 0 bytes .../res/drawable-mdpi/frequency_piano_12.png | Bin 619 -> 0 bytes .../res/drawable-mdpi/frequency_piano_13.png | Bin 428 -> 0 bytes .../res/drawable-mdpi/frequency_piano_14.png | Bin 607 -> 0 bytes .../res/drawable-mdpi/frequency_piano_15.png | Bin 494 -> 0 bytes .../res/drawable-mdpi/frequency_piano_16.png | Bin 524 -> 0 bytes .../res/drawable-mdpi/frequency_piano_17.png | Bin 663 -> 0 bytes .../res/drawable-mdpi/frequency_piano_18.png | Bin 501 -> 0 bytes .../res/drawable-mdpi/frequency_piano_19.png | Bin 554 -> 0 bytes .../res/drawable-mdpi/frequency_piano_2.png | Bin 638 -> 0 bytes .../res/drawable-mdpi/frequency_piano_20.png | Bin 520 -> 0 bytes .../res/drawable-mdpi/frequency_piano_21.png | Bin 477 -> 0 bytes .../res/drawable-mdpi/frequency_piano_22.png | Bin 655 -> 0 bytes .../res/drawable-mdpi/frequency_piano_23.png | Bin 534 -> 0 bytes .../res/drawable-mdpi/frequency_piano_24.png | Bin 650 -> 0 bytes .../res/drawable-mdpi/frequency_piano_25.png | Bin 439 -> 0 bytes .../res/drawable-mdpi/frequency_piano_26.png | Bin 606 -> 0 bytes .../res/drawable-mdpi/frequency_piano_27.png | Bin 500 -> 0 bytes .../res/drawable-mdpi/frequency_piano_28.png | Bin 489 -> 0 bytes .../res/drawable-mdpi/frequency_piano_29.png | Bin 625 -> 0 bytes .../res/drawable-mdpi/frequency_piano_3.png | Bin 498 -> 0 bytes .../res/drawable-mdpi/frequency_piano_30.png | Bin 536 -> 0 bytes .../res/drawable-mdpi/frequency_piano_31.png | Bin 594 -> 0 bytes .../res/drawable-mdpi/frequency_piano_32.png | Bin 487 -> 0 bytes .../res/drawable-mdpi/frequency_piano_33.png | Bin 498 -> 0 bytes .../res/drawable-mdpi/frequency_piano_34.png | Bin 611 -> 0 bytes .../res/drawable-mdpi/frequency_piano_35.png | Bin 535 -> 0 bytes .../res/drawable-mdpi/frequency_piano_36.png | Bin 664 -> 0 bytes .../res/drawable-mdpi/frequency_piano_37.png | Bin 467 -> 0 bytes .../res/drawable-mdpi/frequency_piano_38.png | Bin 614 -> 0 bytes .../res/drawable-mdpi/frequency_piano_39.png | Bin 543 -> 0 bytes .../res/drawable-mdpi/frequency_piano_4.png | Bin 492 -> 0 bytes .../res/drawable-mdpi/frequency_piano_40.png | Bin 531 -> 0 bytes .../res/drawable-mdpi/frequency_piano_41.png | Bin 612 -> 0 bytes .../res/drawable-mdpi/frequency_piano_42.png | Bin 529 -> 0 bytes .../res/drawable-mdpi/frequency_piano_43.png | Bin 554 -> 0 bytes .../res/drawable-mdpi/frequency_piano_44.png | Bin 524 -> 0 bytes .../res/drawable-mdpi/frequency_piano_45.png | Bin 512 -> 0 bytes .../res/drawable-mdpi/frequency_piano_46.png | Bin 646 -> 0 bytes .../res/drawable-mdpi/frequency_piano_47.png | Bin 527 -> 0 bytes .../res/drawable-mdpi/frequency_piano_48.png | Bin 652 -> 0 bytes .../res/drawable-mdpi/frequency_piano_49.png | Bin 475 -> 0 bytes .../res/drawable-mdpi/frequency_piano_5.png | Bin 632 -> 0 bytes .../res/drawable-mdpi/frequency_piano_50.png | Bin 640 -> 0 bytes .../res/drawable-mdpi/frequency_piano_51.png | Bin 524 -> 0 bytes .../res/drawable-mdpi/frequency_piano_52.png | Bin 502 -> 0 bytes .../res/drawable-mdpi/frequency_piano_53.png | Bin 631 -> 0 bytes .../res/drawable-mdpi/frequency_piano_54.png | Bin 503 -> 0 bytes .../res/drawable-mdpi/frequency_piano_55.png | Bin 586 -> 0 bytes .../res/drawable-mdpi/frequency_piano_56.png | Bin 494 -> 0 bytes .../res/drawable-mdpi/frequency_piano_57.png | Bin 514 -> 0 bytes .../res/drawable-mdpi/frequency_piano_58.png | Bin 613 -> 0 bytes .../res/drawable-mdpi/frequency_piano_59.png | Bin 503 -> 0 bytes .../res/drawable-mdpi/frequency_piano_6.png | Bin 477 -> 0 bytes .../res/drawable-mdpi/frequency_piano_60.png | Bin 654 -> 0 bytes .../res/drawable-mdpi/frequency_piano_61.png | Bin 431 -> 0 bytes .../res/drawable-mdpi/frequency_piano_62.png | Bin 610 -> 0 bytes .../res/drawable-mdpi/frequency_piano_63.png | Bin 523 -> 0 bytes .../res/drawable-mdpi/frequency_piano_64.png | Bin 505 -> 0 bytes .../res/drawable-mdpi/frequency_piano_65.png | Bin 612 -> 0 bytes .../res/drawable-mdpi/frequency_piano_66.png | Bin 499 -> 0 bytes .../res/drawable-mdpi/frequency_piano_67.png | Bin 589 -> 0 bytes .../res/drawable-mdpi/frequency_piano_68.png | Bin 473 -> 0 bytes .../res/drawable-mdpi/frequency_piano_69.png | Bin 500 -> 0 bytes .../res/drawable-mdpi/frequency_piano_7.png | Bin 585 -> 0 bytes .../res/drawable-mdpi/frequency_piano_70.png | Bin 611 -> 0 bytes .../res/drawable-mdpi/frequency_piano_71.png | Bin 527 -> 0 bytes .../res/drawable-mdpi/frequency_piano_72.png | Bin 634 -> 0 bytes .../res/drawable-mdpi/frequency_piano_73.png | Bin 497 -> 0 bytes .../res/drawable-mdpi/frequency_piano_74.png | Bin 646 -> 0 bytes .../res/drawable-mdpi/frequency_piano_75.png | Bin 522 -> 0 bytes .../res/drawable-mdpi/frequency_piano_76.png | Bin 500 -> 0 bytes .../res/drawable-mdpi/frequency_piano_77.png | Bin 630 -> 0 bytes .../res/drawable-mdpi/frequency_piano_78.png | Bin 529 -> 0 bytes .../res/drawable-mdpi/frequency_piano_79.png | Bin 625 -> 0 bytes .../res/drawable-mdpi/frequency_piano_8.png | Bin 487 -> 0 bytes .../res/drawable-mdpi/frequency_piano_80.png | Bin 502 -> 0 bytes .../res/drawable-mdpi/frequency_piano_81.png | Bin 486 -> 0 bytes .../res/drawable-mdpi/frequency_piano_82.png | Bin 631 -> 0 bytes .../res/drawable-mdpi/frequency_piano_83.png | Bin 538 -> 0 bytes .../res/drawable-mdpi/frequency_piano_84.png | Bin 609 -> 0 bytes .../res/drawable-mdpi/frequency_piano_85.png | Bin 501 -> 0 bytes .../res/drawable-mdpi/frequency_piano_86.png | Bin 612 -> 0 bytes .../res/drawable-mdpi/frequency_piano_87.png | Bin 504 -> 0 bytes .../res/drawable-mdpi/frequency_piano_88.png | Bin 504 -> 0 bytes .../res/drawable-mdpi/frequency_piano_9.png | Bin 486 -> 0 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 122 -> 543 bytes .../sound_frequency_drawable.png | Bin 0 -> 9702 bytes .../res/drawable-xhdpi/frequency_high.png | Bin 762 -> 0 bytes .../main/res/drawable-xhdpi/frequency_low.png | Bin 747 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_1.png | Bin 1025 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_10.png | Bin 1367 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_11.png | Bin 1074 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_12.png | Bin 1314 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_13.png | Bin 961 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_14.png | Bin 1358 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_15.png | Bin 1116 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_16.png | Bin 1118 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_17.png | Bin 1448 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_18.png | Bin 1131 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_19.png | Bin 1229 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_2.png | Bin 1390 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_20.png | Bin 1138 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_21.png | Bin 1084 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_22.png | Bin 1426 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_23.png | Bin 1189 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_24.png | Bin 1454 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_25.png | Bin 957 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_26.png | Bin 1300 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_27.png | Bin 1101 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_28.png | Bin 1087 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_29.png | Bin 1348 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_3.png | Bin 1142 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_30.png | Bin 1172 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_31.png | Bin 1274 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_32.png | Bin 1060 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_33.png | Bin 1029 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_34.png | Bin 1357 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_35.png | Bin 1142 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_36.png | Bin 1463 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_37.png | Bin 1035 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_38.png | Bin 1421 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_39.png | Bin 1207 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_4.png | Bin 1085 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_40.png | Bin 1126 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_41.png | Bin 1336 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_42.png | Bin 1197 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_43.png | Bin 1221 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_44.png | Bin 1199 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_45.png | Bin 1124 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_46.png | Bin 1361 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_47.png | Bin 1125 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_48.png | Bin 1355 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_49.png | Bin 1022 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_5.png | Bin 1407 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_50.png | Bin 1367 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_51.png | Bin 1175 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_52.png | Bin 1079 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_53.png | Bin 1358 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_54.png | Bin 1131 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_55.png | Bin 1274 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_56.png | Bin 1087 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_57.png | Bin 1150 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_58.png | Bin 1372 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_59.png | Bin 1135 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_6.png | Bin 1123 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_60.png | Bin 1442 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_61.png | Bin 1030 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_62.png | Bin 1372 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_63.png | Bin 1156 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_64.png | Bin 1146 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_65.png | Bin 1367 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_66.png | Bin 1099 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_67.png | Bin 1285 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_68.png | Bin 1025 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_69.png | Bin 1108 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_7.png | Bin 1308 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_70.png | Bin 1377 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_71.png | Bin 1183 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_72.png | Bin 1383 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_73.png | Bin 1104 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_74.png | Bin 1445 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_75.png | Bin 1130 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_76.png | Bin 1127 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_77.png | Bin 1343 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_78.png | Bin 1175 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_79.png | Bin 1342 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_8.png | Bin 1067 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_80.png | Bin 1131 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_81.png | Bin 1097 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_82.png | Bin 1371 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_83.png | Bin 1140 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_84.png | Bin 1330 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_85.png | Bin 1096 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_86.png | Bin 1359 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_87.png | Bin 1116 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_88.png | Bin 1119 -> 0 bytes .../res/drawable-xhdpi/frequency_piano_9.png | Bin 1061 -> 0 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 186 -> 1139 bytes .../sound_frequency_drawable.png | Bin 0 -> 21578 bytes .../res/drawable-xxhdpi/frequency_high.png | Bin 1339 -> 0 bytes .../res/drawable-xxhdpi/frequency_low.png | Bin 1300 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_1.png | Bin 1825 -> 0 bytes .../drawable-xxhdpi/frequency_piano_10.png | Bin 2289 -> 0 bytes .../drawable-xxhdpi/frequency_piano_11.png | Bin 1868 -> 0 bytes .../drawable-xxhdpi/frequency_piano_12.png | Bin 2155 -> 0 bytes .../drawable-xxhdpi/frequency_piano_13.png | Bin 1675 -> 0 bytes .../drawable-xxhdpi/frequency_piano_14.png | Bin 2243 -> 0 bytes .../drawable-xxhdpi/frequency_piano_15.png | Bin 1813 -> 0 bytes .../drawable-xxhdpi/frequency_piano_16.png | Bin 1888 -> 0 bytes .../drawable-xxhdpi/frequency_piano_17.png | Bin 2333 -> 0 bytes .../drawable-xxhdpi/frequency_piano_18.png | Bin 1849 -> 0 bytes .../drawable-xxhdpi/frequency_piano_19.png | Bin 2043 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_2.png | Bin 2308 -> 0 bytes .../drawable-xxhdpi/frequency_piano_20.png | Bin 1918 -> 0 bytes .../drawable-xxhdpi/frequency_piano_21.png | Bin 1758 -> 0 bytes .../drawable-xxhdpi/frequency_piano_22.png | Bin 2319 -> 0 bytes .../drawable-xxhdpi/frequency_piano_23.png | Bin 1901 -> 0 bytes .../drawable-xxhdpi/frequency_piano_24.png | Bin 2351 -> 0 bytes .../drawable-xxhdpi/frequency_piano_25.png | Bin 1687 -> 0 bytes .../drawable-xxhdpi/frequency_piano_26.png | Bin 2151 -> 0 bytes .../drawable-xxhdpi/frequency_piano_27.png | Bin 1774 -> 0 bytes .../drawable-xxhdpi/frequency_piano_28.png | Bin 1837 -> 0 bytes .../drawable-xxhdpi/frequency_piano_29.png | Bin 2241 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_3.png | Bin 1902 -> 0 bytes .../drawable-xxhdpi/frequency_piano_30.png | Bin 1938 -> 0 bytes .../drawable-xxhdpi/frequency_piano_31.png | Bin 2138 -> 0 bytes .../drawable-xxhdpi/frequency_piano_32.png | Bin 1794 -> 0 bytes .../drawable-xxhdpi/frequency_piano_33.png | Bin 1721 -> 0 bytes .../drawable-xxhdpi/frequency_piano_34.png | Bin 2243 -> 0 bytes .../drawable-xxhdpi/frequency_piano_35.png | Bin 1896 -> 0 bytes .../drawable-xxhdpi/frequency_piano_36.png | Bin 2317 -> 0 bytes .../drawable-xxhdpi/frequency_piano_37.png | Bin 1744 -> 0 bytes .../drawable-xxhdpi/frequency_piano_38.png | Bin 2309 -> 0 bytes .../drawable-xxhdpi/frequency_piano_39.png | Bin 1981 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_4.png | Bin 1765 -> 0 bytes .../drawable-xxhdpi/frequency_piano_40.png | Bin 1836 -> 0 bytes .../drawable-xxhdpi/frequency_piano_41.png | Bin 2178 -> 0 bytes .../drawable-xxhdpi/frequency_piano_42.png | Bin 1960 -> 0 bytes .../drawable-xxhdpi/frequency_piano_43.png | Bin 2033 -> 0 bytes .../drawable-xxhdpi/frequency_piano_44.png | Bin 1930 -> 0 bytes .../drawable-xxhdpi/frequency_piano_45.png | Bin 1877 -> 0 bytes .../drawable-xxhdpi/frequency_piano_46.png | Bin 2295 -> 0 bytes .../drawable-xxhdpi/frequency_piano_47.png | Bin 1903 -> 0 bytes .../drawable-xxhdpi/frequency_piano_48.png | Bin 2275 -> 0 bytes .../drawable-xxhdpi/frequency_piano_49.png | Bin 1834 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_5.png | Bin 2335 -> 0 bytes .../drawable-xxhdpi/frequency_piano_50.png | Bin 2294 -> 0 bytes .../drawable-xxhdpi/frequency_piano_51.png | Bin 1965 -> 0 bytes .../drawable-xxhdpi/frequency_piano_52.png | Bin 1775 -> 0 bytes .../drawable-xxhdpi/frequency_piano_53.png | Bin 2256 -> 0 bytes .../drawable-xxhdpi/frequency_piano_54.png | Bin 1861 -> 0 bytes .../drawable-xxhdpi/frequency_piano_55.png | Bin 2169 -> 0 bytes .../drawable-xxhdpi/frequency_piano_56.png | Bin 1817 -> 0 bytes .../drawable-xxhdpi/frequency_piano_57.png | Bin 1930 -> 0 bytes .../drawable-xxhdpi/frequency_piano_58.png | Bin 2232 -> 0 bytes .../drawable-xxhdpi/frequency_piano_59.png | Bin 1865 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_6.png | Bin 1867 -> 0 bytes .../drawable-xxhdpi/frequency_piano_60.png | Bin 2386 -> 0 bytes .../drawable-xxhdpi/frequency_piano_61.png | Bin 1774 -> 0 bytes .../drawable-xxhdpi/frequency_piano_62.png | Bin 2278 -> 0 bytes .../drawable-xxhdpi/frequency_piano_63.png | Bin 1884 -> 0 bytes .../drawable-xxhdpi/frequency_piano_64.png | Bin 1951 -> 0 bytes .../drawable-xxhdpi/frequency_piano_65.png | Bin 2245 -> 0 bytes .../drawable-xxhdpi/frequency_piano_66.png | Bin 1842 -> 0 bytes .../drawable-xxhdpi/frequency_piano_67.png | Bin 2145 -> 0 bytes .../drawable-xxhdpi/frequency_piano_68.png | Bin 1737 -> 0 bytes .../drawable-xxhdpi/frequency_piano_69.png | Bin 1826 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_7.png | Bin 2223 -> 0 bytes .../drawable-xxhdpi/frequency_piano_70.png | Bin 2265 -> 0 bytes .../drawable-xxhdpi/frequency_piano_71.png | Bin 1934 -> 0 bytes .../drawable-xxhdpi/frequency_piano_72.png | Bin 2223 -> 0 bytes .../drawable-xxhdpi/frequency_piano_73.png | Bin 1892 -> 0 bytes .../drawable-xxhdpi/frequency_piano_74.png | Bin 2353 -> 0 bytes .../drawable-xxhdpi/frequency_piano_75.png | Bin 1869 -> 0 bytes .../drawable-xxhdpi/frequency_piano_76.png | Bin 1865 -> 0 bytes .../drawable-xxhdpi/frequency_piano_77.png | Bin 2176 -> 0 bytes .../drawable-xxhdpi/frequency_piano_78.png | Bin 1930 -> 0 bytes .../drawable-xxhdpi/frequency_piano_79.png | Bin 2267 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_8.png | Bin 1769 -> 0 bytes .../drawable-xxhdpi/frequency_piano_80.png | Bin 1817 -> 0 bytes .../drawable-xxhdpi/frequency_piano_81.png | Bin 1788 -> 0 bytes .../drawable-xxhdpi/frequency_piano_82.png | Bin 2211 -> 0 bytes .../drawable-xxhdpi/frequency_piano_83.png | Bin 1905 -> 0 bytes .../drawable-xxhdpi/frequency_piano_84.png | Bin 2166 -> 0 bytes .../drawable-xxhdpi/frequency_piano_85.png | Bin 1866 -> 0 bytes .../drawable-xxhdpi/frequency_piano_86.png | Bin 2227 -> 0 bytes .../drawable-xxhdpi/frequency_piano_87.png | Bin 1846 -> 0 bytes .../drawable-xxhdpi/frequency_piano_88.png | Bin 1922 -> 0 bytes .../res/drawable-xxhdpi/frequency_piano_9.png | Bin 1762 -> 0 bytes .../ic_sensor_sound_frequency_white_24dp.png | Bin 264 -> 1801 bytes .../sound_frequency_drawable.png | Bin 0 -> 34426 bytes .../menu_share.xml} | 13 +- .../res/drawable/sound_frequency_drawable.xml | 108 ---- .../src/main/res/layout/activity_level.xml | 34 -- .../src/main/res/layout/activity_main.xml | 12 +- .../src/main/res/layout/activity_ruler.xml | 31 - .../main/res/layout/activity_sensor_info.xml | 8 +- .../res/layout/fragment_experiment_list.xml | 9 + .../fragment_panes_experiment_details.xml | 20 +- .../main/res/layout/fragment_run_review.xml | 1 + .../src/main/res/layout/sensor_card.xml | 1 + .../res/layout/sensor_card_graph_view.xml | 6 +- .../res/layout/snapshot_value_details.xml | 8 +- .../main/res/menu/menu_experiment_details.xml | 7 + .../main/res/menu/menu_experiment_note.xml | 6 + .../res/menu/menu_experiment_overview.xml | 5 + .../src/main/res/menu/menu_level.xml | 24 - .../src/main/res/menu/menu_note.xml | 6 + .../res/menu/menu_picture_label_details.xml | 7 + .../src/main/res/menu/menu_record.xml | 45 -- .../src/main/res/menu/menu_ruler.xml | 24 - .../src/main/res/values-ar/strings.xml | 41 +- .../src/main/res/values-b+sr+Latn/strings.xml | 41 +- .../src/main/res/values-bg/strings.xml | 41 +- .../src/main/res/values-bs-rBA/strings.xml | 41 +- .../src/main/res/values-ca/strings.xml | 43 +- .../src/main/res/values-cs/strings.xml | 41 +- .../src/main/res/values-da/strings.xml | 41 +- .../src/main/res/values-de/strings.xml | 41 +- .../src/main/res/values-el/strings.xml | 41 +- .../src/main/res/values-en-rAU/strings.xml | 41 +- .../src/main/res/values-en-rGB/strings.xml | 41 +- .../src/main/res/values-en-rIN/strings.xml | 41 +- .../src/main/res/values-es-rUS/strings.xml | 41 +- .../src/main/res/values-es/strings.xml | 41 +- .../src/main/res/values-fi/strings.xml | 41 +- .../src/main/res/values-fr/strings.xml | 41 +- .../src/main/res/values-h640dp/dimens.xml | 5 + .../src/main/res/values-hi/strings.xml | 41 +- .../src/main/res/values-hr/strings.xml | 41 +- .../src/main/res/values-hu/strings.xml | 41 +- .../src/main/res/values-in/strings.xml | 41 +- .../src/main/res/values-it/strings.xml | 41 +- .../src/main/res/values-iw/strings.xml | 41 +- .../src/main/res/values-ja/strings.xml | 41 +- .../src/main/res/values-ko/strings.xml | 41 +- .../src/main/res/values-lt/strings.xml | 41 +- .../src/main/res/values-lv/strings.xml | 41 +- .../src/main/res/values-nb/strings.xml | 41 +- .../src/main/res/values-nl/strings.xml | 41 +- .../src/main/res/values-pl/strings.xml | 41 +- .../src/main/res/values-pt-rPT/strings.xml | 41 +- .../src/main/res/values-pt/strings.xml | 41 +- .../src/main/res/values-ro/strings.xml | 41 +- .../src/main/res/values-ru/strings.xml | 41 +- .../src/main/res/values-sk/strings.xml | 41 +- .../src/main/res/values-sl/strings.xml | 41 +- .../src/main/res/values-sr/strings.xml | 41 +- .../src/main/res/values-sv/strings.xml | 41 +- .../src/main/res/values-th/strings.xml | 41 +- .../src/main/res/values-tl/strings.xml | 41 +- .../src/main/res/values-tr/strings.xml | 41 +- .../src/main/res/values-uk/strings.xml | 41 +- .../src/main/res/values-vi/strings.xml | 41 +- .../src/main/res/values-zh-rCN/strings.xml | 41 +- .../src/main/res/values-zh-rHK/strings.xml | 41 +- .../src/main/res/values-zh-rTW/strings.xml | 41 +- .../src/main/res/values/attrs_ruler_view.xml | 27 - .../src/main/res/values/colors.xml | 5 - .../src/main/res/values/dimens.xml | 3 + .../src/main/res/values/strings.xml | 171 ++++-- .../src/main/res/xml/dev_options.xml | 11 +- .../src/main/res/xml/file_paths.xml | 1 + .../BuiltInSensorAppearanceTest.java | 2 +- .../PitchSensorAnimationBehaviorTest.java | 511 +++++++++++++++++ .../whistlepunk/audio/AudioAnalyzerTest.java | 7 + .../whistlepunk/audio/AudioSourceTest.java | 222 ++++++++ .../whistlepunk/audio/ShadowAudioRecord.java | 107 ++++ .../devicemanager/DataControllerUnitTest.java | 4 +- .../filemetadata/FileMetadataManagerTest.java | 50 +- .../whistlepunk/metadata/CropHelperTest.java | 10 +- .../sensorapi/ScalarSensorDumpReaderTest.java | 89 +++ .../sensorapi/ScalarSensorTest.java | 29 +- .../sensordb/DataControllerTest.java | 8 +- .../sensordb/SensorDatabaseTest.java | 280 +++++++--- .../whistlepunk/StubDataController.java | 27 +- .../whistlepunk/sensorapi/FakeBleClient.java | 30 - .../sensorapi/MemorySensorEnvironment.java | 2 +- .../sensordb/InMemorySensorDatabase.java | 82 ++- .../sensordb/MemoryMetadataManager.java | 11 +- .../whistlepunk_library/version.gradle | 4 + README-pl-PL.md | 42 ++ README.md | 2 +- api/ScienceJournalApi/build.gradle | 7 - 543 files changed, 6457 insertions(+), 2906 deletions(-) delete mode 100644 OpenScienceJournal/whistlepunk_library/proguard-rules.pro delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleDevices.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BatchDataController.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BatchInsertScalarReading.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ImageViewSensorAnimationBehavior.java delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/LevelActivity.java delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/LevelView.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PitchSensorAnimationBehavior.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ProtoSensorAppearance.java delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RulerActivity.java delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RulerView.java rename OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/{ => audio}/AudioSource.java (87%) create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReader.java rename OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/{ExperimentalPitchSensor.java => PitchSensor.java} (78%) delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SensorTool.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/proto/scalar_sensor_data.proto delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_high.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_low.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_1.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_10.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_11.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_12.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_13.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_14.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_15.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_16.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_17.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_18.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_19.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_2.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_20.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_21.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_22.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_23.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_24.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_25.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_26.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_27.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_28.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_29.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_3.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_30.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_31.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_32.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_33.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_34.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_35.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_36.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_37.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_38.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_39.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_4.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_40.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_41.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_42.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_43.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_44.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_45.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_46.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_47.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_48.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_49.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_5.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_50.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_51.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_52.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_53.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_54.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_55.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_56.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_57.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_58.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_59.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_6.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_60.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_61.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_62.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_63.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_64.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_65.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_66.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_67.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_68.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_69.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_7.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_70.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_71.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_72.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_73.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_74.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_75.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_76.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_77.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_78.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_79.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_8.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_80.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_81.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_82.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_83.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_84.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_85.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_86.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_87.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_88.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/sound_frequency_drawable.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_high.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_low.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_1.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_10.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_11.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_12.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_13.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_14.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_15.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_16.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_17.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_18.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_19.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_2.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_20.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_21.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_22.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_23.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_24.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_25.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_26.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_27.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_28.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_29.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_3.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_30.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_31.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_32.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_33.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_34.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_35.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_36.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_37.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_38.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_39.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_4.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_40.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_41.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_42.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_43.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_44.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_45.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_46.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_47.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_48.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_49.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_5.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_50.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_51.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_52.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_53.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_54.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_55.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_56.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_57.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_58.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_59.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_6.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_60.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_61.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_62.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_63.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_64.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_65.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_66.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_67.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_68.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_69.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_7.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_70.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_71.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_72.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_73.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_74.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_75.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_76.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_77.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_78.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_79.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_8.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_80.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_81.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_82.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_83.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_84.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_85.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_86.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_87.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_88.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/sound_frequency_drawable.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_high.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_low.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_1.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_10.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_11.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_12.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_13.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_14.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_15.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_16.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_17.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_18.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_19.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_2.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_20.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_21.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_22.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_23.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_24.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_25.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_26.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_27.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_28.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_29.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_3.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_30.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_31.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_32.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_33.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_34.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_35.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_36.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_37.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_38.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_39.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_4.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_40.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_41.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_42.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_43.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_44.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_45.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_46.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_47.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_48.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_49.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_5.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_50.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_51.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_52.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_53.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_54.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_55.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_56.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_57.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_58.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_59.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_6.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_60.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_61.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_62.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_63.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_64.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_65.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_66.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_67.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_68.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_69.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_7.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_70.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_71.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_72.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_73.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_74.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_75.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_76.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_77.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_78.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_79.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_8.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_80.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_81.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_82.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_83.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_84.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_85.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_86.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_87.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_88.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xhdpi/sound_frequency_drawable.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_high.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_low.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_1.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_10.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_11.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_12.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_13.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_14.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_15.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_16.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_17.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_18.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_19.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_2.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_20.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_21.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_22.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_23.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_24.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_25.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_26.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_27.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_28.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_29.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_3.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_30.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_31.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_32.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_33.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_34.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_35.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_36.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_37.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_38.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_39.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_4.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_40.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_41.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_42.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_43.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_44.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_45.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_46.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_47.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_48.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_49.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_5.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_50.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_51.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_52.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_53.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_54.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_55.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_56.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_57.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_58.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_59.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_6.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_60.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_61.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_62.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_63.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_64.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_65.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_66.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_67.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_68.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_69.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_7.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_70.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_71.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_72.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_73.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_74.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_75.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_76.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_77.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_78.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_79.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_8.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_80.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_81.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_82.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_83.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_84.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_85.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_86.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_87.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_88.png delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/frequency_piano_9.png create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable-xxhdpi/sound_frequency_drawable.png rename OpenScienceJournal/whistlepunk_library/src/main/res/{values/attrs_level_view.xml => drawable/menu_share.xml} (63%) delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/drawable/sound_frequency_drawable.xml delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_level.xml delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/layout/activity_ruler.xml delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/menu/menu_level.xml delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/menu/menu_record.xml delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/menu/menu_ruler.xml create mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/values-h640dp/dimens.xml delete mode 100644 OpenScienceJournal/whistlepunk_library/src/main/res/values/attrs_ruler_view.xml create mode 100644 OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/PitchSensorAnimationBehaviorTest.java rename OpenScienceJournal/whistlepunk_library/src/{test => robolectricTest}/java/com/google/android/apps/forscience/whistlepunk/audio/AudioAnalyzerTest.java (96%) create mode 100644 OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/audio/AudioSourceTest.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/audio/ShadowAudioRecord.java create mode 100644 OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReaderTest.java create mode 100644 README-pl-PL.md diff --git a/OpenScienceJournal/gradle.properties b/OpenScienceJournal/gradle.properties index 7470fb8f..b0285be3 100644 --- a/OpenScienceJournal/gradle.properties +++ b/OpenScienceJournal/gradle.properties @@ -17,4 +17,4 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -android.enableAapt2=false \ No newline at end of file +org.gradle.jvmargs=-Xmx2048M \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/build.gradle b/OpenScienceJournal/whistlepunk_library/build.gradle index 1357b12c..4984ac54 100644 --- a/OpenScienceJournal/whistlepunk_library/build.gradle +++ b/OpenScienceJournal/whistlepunk_library/build.gradle @@ -19,35 +19,22 @@ buildscript { android { compileSdkVersion 27 - publishNonDefault true - defaultConfig { minSdkVersion 19 targetSdkVersion 27 versionCode buildVersionCode() versionName buildVersionName() - multiDexEnabled true + buildConfigField "int", "PLATFORM_VERSION", getReleaseVersionNumber() } buildTypes { release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { - abortOnError true - absolutePaths false - - lintConfig file("lint.xml") - warning "MissingTranslation", "ExtraTranslation" - - // b/64679950 - warning "InvalidPackage" - - htmlOutput file("build/reports/whistlepunk-lint-results.html") - xmlOutput file("build/reports/whistlepunk-lint-results.xml") + warning "MissingTranslation" } sourceSets { @@ -126,7 +113,7 @@ dependencies { implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0' implementation "com.github.bumptech.glide:glide:$glideVersion" implementation "com.google.dagger:dagger:$daggerVersion" - implementation 'com.google.guava:guava:20.0' + implementation "com.google.guava:guava:$guavaVersion" implementation 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-3.1' implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' diff --git a/OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle b/OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle index 29a7f8a8..44864051 100644 --- a/OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle +++ b/OpenScienceJournal/whistlepunk_library/dependencyVersions.gradle @@ -4,11 +4,13 @@ ext { // Updating requires giving the path to the local Maven repo in repositories.properties // We are always using the snapshot version, ignore the lint warning for newer revisions gmsVersion = "11.6-SNAPSHOT" + // Increment to something more modern after resolving Dagger conflicts with future builds + guavaVersion = "20.0" jsr250Version = "1.0" junitVersion = "4.12" leakCanaryVersion = "1.5.4" multidexVersion = "1.0.2" - robolectricVersion = "3.5.1" + robolectricVersion = "3.7" // Major version should always match compileSdkVersion in android.properties supportLibraryVersion = "27.0.2" } \ No newline at end of file diff --git a/OpenScienceJournal/whistlepunk_library/proguard-rules.pro b/OpenScienceJournal/whistlepunk_library/proguard-rules.pro deleted file mode 100644 index b0ea6809..00000000 --- a/OpenScienceJournal/whistlepunk_library/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in $HOME/Android/Sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml b/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml index f85fd1f8..679d82f0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/AndroidManifest.xml @@ -29,6 +29,8 @@ + + @@ -74,44 +76,54 @@ android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/NoBarTheme.MainActivity" - android:launchMode = "singleTop" + android:launchMode = "singleTask" + tools:ignore="AppLinkUrlError" > + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - whenConnected(); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java index 290dd17f..97fbdaf0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java @@ -16,7 +16,6 @@ package com.google.android.apps.forscience.ble; -import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothGattDescriptor; import android.bluetooth.BluetoothGattService; @@ -24,7 +23,6 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; -import android.os.Handler; import android.os.IBinder; import android.util.Log; @@ -46,7 +44,6 @@ public class BleClientImpl implements BleClient { private BehaviorSubject> mWhenService = BehaviorSubject.create(); private MyBleService bleService; - private Handler handler = new Handler(); private final Context context; private final List flows; @@ -99,35 +96,6 @@ public final void destroy() { if (DEBUG) Log.d(TAG, "client stopped"); } - @Override - public final void scanForDevices(UUID[] serviceType, int timeoutSeconds) { - if (bleService == null) { - context.sendBroadcast(new Intent(BleEvents.BLE_SCAN_END)); - return; - } - if (serviceType == null) { - bleService.scanAll(); - } else { - bleService.scanFor(serviceType); - } - handler.postDelayed(new Runnable() { - @Override - public void run() { - if (bleService != null) { - bleService.endScan(); - } - } - }, 1000 * timeoutSeconds); - if (DEBUG) Log.d(TAG, "scanning for devices..."); - } - - public final List getDevices() { - if (bleService == null) { - return new ArrayList(); - } - return bleService.getBleDevices().getDevices(); - } - @Override public final boolean connectToAddress(String address) { if (DEBUG) Log.d(TAG, "connecting to address: " + address + "..."); @@ -185,11 +153,6 @@ public void disconnectDevice(String address) { bleService.disconnectDevice(address); } - @Override - public void commit(String address) { - bleService.commit(address); - } - @Override public void writeValue(String address, BluetoothGattDescriptor currentDescriptor, byte[] value) { @@ -207,29 +170,6 @@ public boolean disableNotifications(String address, BluetoothGattCharacteristic return bleService.setNotificationsFor(address, characteristic, false); } - @Override - public void changeMtu(String address, int mtu) { - bleService.setMtu(address, mtu); - } - - @Override - public void startTransaction(String address) { - bleService.startTransaction(address); - } - - @Override - public String getFirstDeviceAddress() { - if (bleService == null) { - return null; - } - return bleService.getBleDevices().getFirstDeviceAddress(); - } - - @Override - public void setMaxNoDevices(int maxNoDevices) { - bleService.setMaxNoDevices(maxNoDevices <= 0 ? 1 : maxNoDevices); - } - @Override public Single whenConnected() { return mWhenService.filter(Optional::isPresent) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleDevices.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleDevices.java deleted file mode 100644 index 2d126a44..00000000 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleDevices.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.forscience.ble; - -import android.bluetooth.BluetoothDevice; -import android.os.SystemClock; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; - -/** - * The list of discovered BLE devices, indexed by name and address. - */ -/* package */ class BleDevices { - - /** - * Amount of time after the last scan time when a device may have been seen. - */ - private static final long PRUNE_SCAN_TIME_SLOP_MS = 5000; - - static class BluetoothDeviceRecord { - - BluetoothDevice device; - int lastRssi; - byte[] scanRecord; - - // Last time the device was seen, in uptimeMillis. - long lastSeenMs; - - void updateParams(int lastRssi) { - this.lastRssi = lastRssi; - this.lastSeenMs = SystemClock.uptimeMillis(); - } - } - - HashMap devices = new LinkedHashMap<>(); - // last scan time, in uptimeMillis. - private long lastScanTimeMs = -1; - - public boolean addDevice(BluetoothDevice device, int rssi, byte[] scanRecord) { - synchronized (devices) { - String key = device.getAddress(); - - if (!devices.containsKey(key)) { - BluetoothDeviceRecord record = new BluetoothDeviceRecord(); - record.device = device; - record.scanRecord = scanRecord; - record.updateParams(rssi); - devices.put(key, record); - return true; - } else { - // update the last known rssi and seen time. - devices.get(key).updateParams(rssi); - } - return false; - } - } - - public void removeDevice(BluetoothDevice device) { - synchronized (devices) { - String key = device.getAddress(); - devices.remove(key); - } - } - - public int getSize() { - return devices.size(); - } - - public String[] getDeviceNames() { - return devices.keySet().toArray(new String[0]); - } - - public BluetoothDevice getDevice(String name) { - return devices.get(name).device; - } - - public List getDevices() { - List returnList = new ArrayList(devices.size()); - for (BluetoothDeviceRecord record : devices.values()) { - returnList.add(record.device); - } - return returnList; - } - - public boolean hasDevice(String currentAddress) { - for (BluetoothDeviceRecord record : devices.values()) { - if (currentAddress.equalsIgnoreCase(record.device.getAddress())) { - return true; - } - } - return false; - } - - public int getCount() { - return devices.size(); - } - - public String getFirstDeviceAddress() { - // TODO: is this function really necessary? - if (devices.isEmpty()) { - return null; - } else { - return devices.keySet().iterator().next(); - } - } - - /** - * Removes devices which haven't been seen since the last scan time and are not currently - * connected. - * - * @param connectedDevices List of currently connected devices. - */ - void pruneOldDevices(List connectedDevices) { - ArrayList oldDevices = new ArrayList(); - for (BluetoothDeviceRecord record : devices.values()) { - if (record.lastSeenMs < (lastScanTimeMs + PRUNE_SCAN_TIME_SLOP_MS) - && !isContained(record.device.getAddress(), connectedDevices)) { - oldDevices.add(record.device); - } - } - for (BluetoothDevice device : oldDevices) { - removeDevice(device); - } - } - - private boolean isContained(String address, List connectedDevices) { - for (BluetoothDevice device : connectedDevices) { - if (device.getAddress().equals(address)) { - return true; - } - } - return false; - } - - /** - * Sets the last scan time. - */ - void setLastScanTime() { - lastScanTimeMs = SystemClock.uptimeMillis(); - } -} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java index ac0d2d9c..1d4b13f0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java @@ -26,9 +26,6 @@ public class BleEvents { static final String BLE_UNSUPPORTED = "BLE_UNSUPPORTED"; static final String BLE_DISABLED = "BLE_DISABLED"; - static final String BLE_ENABLED = "BLE_ENABLED"; - static final String BLE_SCAN_END = "BLE_SCAN_END"; - static final String DEVICE_FOUND = "DEVICE_FOUND"; static final String GATT_CONNECT = "GATT_CONNECT"; static final String GATT_CONNECT_FAIL = "GATT_CONNECT_FAIL"; @@ -43,20 +40,12 @@ public class BleEvents { static final String WRITE_CHAR_OK = "WRITE_CHAR_OK"; static final String WRITE_CHAR_FAIL = "WRITE_CHAR_FAIL"; - static final String COMMIT_OK = "COMMIT_OK"; - static final String COMMIT_FAIL = "COMMIT_FAIL"; - static final String READ_DESC_OK = "READ_DESC_OK"; static final String READ_DESC_FAIL = "READ_DESC_FAIL"; static final String WRITE_DESC_OK = "WRITE_DESC_OK"; static final String WRITE_DESC_FAIL = "WRITE_DESC_FAIL"; static final String CHAR_CHANGED = "CHAR_CHANGED"; - static final String MTU_CHANGE_OK = "MTU_CHANGE_OK"; - static final String MTU_CHANGE_FAIL = "MTU_CHANGE_FAIL"; - public static final String START_TX_OK = "START_TX_OK"; - public static final String START_TX_FAIL = "START_TX_FAIL"; - private static final String DATA_SCHEME = "sciencejournal"; static IntentFilter createIntentFilter(String address) { @@ -65,11 +54,8 @@ static IntentFilter createIntentFilter(String address) { intent.addDataScheme(DATA_SCHEME); intent.addDataAuthority(address, null); - intent.addAction(BLE_ENABLED); intent.addAction(BLE_UNSUPPORTED); intent.addAction(BLE_DISABLED); - intent.addAction(BLE_SCAN_END); - intent.addAction(DEVICE_FOUND); intent.addAction(GATT_CONNECT); intent.addAction(GATT_CONNECT_FAIL); @@ -83,9 +69,6 @@ static IntentFilter createIntentFilter(String address) { intent.addAction(WRITE_CHAR_OK); intent.addAction(WRITE_CHAR_FAIL); - intent.addAction(COMMIT_OK); - intent.addAction(COMMIT_FAIL); - intent.addAction(CHAR_CHANGED); intent.addAction(READ_DESC_OK); @@ -93,12 +76,6 @@ static IntentFilter createIntentFilter(String address) { intent.addAction(WRITE_DESC_OK); intent.addAction(WRITE_DESC_FAIL); - intent.addAction(MTU_CHANGE_OK); - intent.addAction(MTU_CHANGE_FAIL); - - intent.addAction(START_TX_FAIL); - intent.addAction(START_TX_OK); - return intent; } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java index 6e80cb7e..62fada26 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java @@ -28,8 +28,6 @@ import android.util.ArrayMap; import android.util.Log; -import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -63,9 +61,8 @@ public class BleFlow { private static final long SERVICES_RETRY_DELAY_MILLIS = 500; - private enum Action {SCAN, CONNECT, LOOKUP_SRV, LOOKUP_CHARACT, READ_CHARACT, WRITE_CHARACT, - LOOKUP_DESC, WRITE_DESC, ENABLE_NOTIF, DISABLE_NOTIF, DISCONNECT, COMMIT, - CHANGE_MTU, START_TX, WRITE_STREAM, PICK_FIRST_DEVICE } + private enum Action {CONNECT, LOOKUP_SRV, LOOKUP_CHARACT, READ_CHARACT, WRITE_CHARACT, + LOOKUP_DESC, WRITE_DESC, ENABLE_NOTIF, DISABLE_NOTIF, DISCONNECT } private static String TAG = "BleFlow"; private static final boolean DEBUG = false; private static UUID BLE_CLIENT_CONFIG_CHARACTERISTIC = UUID.fromString( @@ -128,7 +125,6 @@ public String toString() { private final List characteristics; private final List descriptors; private final List values; - private UUID[] scanServiceFilter; private Handler mDelayHandler = new Handler(); private BluetoothGattCharacteristic currentCharacteristic; @@ -139,13 +135,8 @@ public String toString() { private int valueIndex; private int actionIndex; private int descriptorIndex; - private int timeout = -1; private String address; private AtomicBoolean flowEnded; - private InputStream inputStream; - private int maxNoDevices; - - private int currentBufferSize = 20; private BroadcastReceiver receiver = new BroadcastReceiver() { @@ -169,9 +160,7 @@ public void onReceive(Context context, Intent intent) { return; } - if (BleEvents.BLE_SCAN_END.equals(action)) { - nextAction(); - } else if (BleEvents.BLE_DISABLED.equals(action)) { + if (BleEvents.BLE_DISABLED.equals(action)) { listener.onFailure(new Exception("BLE disabled")); flowEnded.set(true); } else if (BleEvents.GATT_CONNECT.equals(action)) { @@ -219,12 +208,6 @@ public void onReceive(Context context, Intent intent) { listener.onFailure(new Exception("Service lookup failure at: " + address)); flowEnded.set(true); - } else if (BleEvents.START_TX_OK.equals(action)) { - nextAction(); - } else if (BleEvents.START_TX_FAIL.equals(action)) { - listener.onFailure(new Exception("Start TX characteristic fail for: " - + currentCharacteristic)); - flowEnded.set(true); } else if (BleEvents.READ_CHAR_OK.equals(action)) { UUID characteristic = UUID.fromString(intent.getStringExtra(MyBleService.UUID)); int flags = intent.getIntExtra(MyBleService.FLAGS, 0); @@ -243,15 +226,6 @@ public void onReceive(Context context, Intent intent) { listener.onFailure(new Exception("Write desriptor fail for: " + currentDescriptor)); flowEnded.set(true); - } else if (BleEvents.COMMIT_OK.equals(action)) { - nextAction(); - } else if (BleEvents.COMMIT_FAIL.equals(action)) { - listener.onFailure(new Exception("Commit TX fail for: " - + currentDescriptor)); - flowEnded.set(true); - } else if (BleEvents.MTU_CHANGE_FAIL.equals(action)) { - listener.onFailure(new Exception("Mtu change failed.")); - flowEnded.set(true); } else { Log.e(TAG, "Event not mapped: " + action); } @@ -279,7 +253,6 @@ private BleFlow(BleClient client, Context context, String address) { listener = defaultListener; flowEnded = new AtomicBoolean(); flowEnded.set(true); - maxNoDevices = MyBleService.MAX_NO_DEVICES; registerReceiver(receiver); } @@ -306,24 +279,6 @@ private void nextAction() { Object param = richAction.param; if (DEBUG) Log.d(TAG, "current action: " + action); switch (action) { - case SCAN: - if (timeout > 0) { - client.setMaxNoDevices(maxNoDevices); - client.scanForDevices(scanServiceFilter, timeout); - } else { - listener.onFailure(new Exception("no scanning time set")); - flowEnded.set(true); - } - break; - case PICK_FIRST_DEVICE: - address = client.getFirstDeviceAddress(); - if (address == null) { - listener.onFailure(new Exception("no device found")); - flowEnded.set(true); - } else { - nextAction(); - } - break; case CONNECT: if (!client.connectToAddress(address)) { listener.onFailure(new Exception("cannot connect to: " + address)); @@ -333,12 +288,6 @@ private void nextAction() { case DISCONNECT: client.disconnectDevice(address); break; - case START_TX: - client.startTransaction(address); - break; - case COMMIT: - client.commit(address); - break; case LOOKUP_SRV: client.findServices(address); break; @@ -375,9 +324,6 @@ private void nextAction() { client.writeValue(address, currentCharacteristic, values.get(valueIndex++)); } break; - case WRITE_STREAM: - writeStream(); - break; case LOOKUP_DESC: UUID descId = descriptors.get(descriptorIndex++); currentDescriptor = currentCharacteristic.getDescriptor(descId); @@ -446,10 +392,7 @@ public BleFlow reset(boolean clearServiceMap) { descriptorIndex = 0; currentCharacteristic = null; currentDescriptor = null; - inputStream = null; - timeout = -1; listener = defaultListener; - maxNoDevices = MyBleService.MAX_NO_DEVICES; return this; } @@ -467,30 +410,10 @@ private BleFlow addListener(BleFlowListener listener) { return this; } - public BleFlow scan(int timeout) { - addAction(Action.SCAN); - scanServiceFilter = null; - this.timeout = timeout; - return this; - } - private void addAction(Action action) { actions.add(new RichAction(action, null)); } - public BleFlow scan(int timeout, int maxNoDevices) { - addAction(Action.SCAN); - this.maxNoDevices = maxNoDevices; - scanServiceFilter = null; - this.timeout = timeout; - return this; - } - - public BleFlow setAddress(String address) { - this.address = address; - return this; - } - public BleFlow connect() { addAction(Action.CONNECT); return this; @@ -547,24 +470,6 @@ public BleFlow disableNotification() { return this; } - public BleFlow beginTransaction() { - addAction(Action.START_TX); - return this; - } - - // TODO: If we need this, need to figure out how to make it work at API < 21 - // - // public BleFlow changeMessageTransferUnitSize(int mtu) { - // actions.add(Action.CHANGE_MTU); - // this.mtu = mtu; - // return this; - // } - - public BleFlow commit() { - addAction(Action.COMMIT); - return this; - } - public BleFlow disconnect() { addAction(Action.DISCONNECT); return this; @@ -602,32 +507,6 @@ void close() { MyBleService.getBroadcastManager(context).unregisterReceiver(receiver); } - private void writeStream() { - byte[] buffer = new byte[currentBufferSize]; - try { - int read = inputStream.read(buffer); - if (read <= 0) { - nextAction(); - return; - } - - // we execute the same action again - actionIndex--; - - if (read == buffer.length) { - client.writeValue(address, currentCharacteristic, buffer); - return; - } - - byte[] smallerBuffer = new byte[read]; - System.arraycopy(buffer, 0, smallerBuffer, 0, read); - client.writeValue(address, currentCharacteristic, smallerBuffer); - } catch (IOException e) { - listener.onFailure(new Exception("Failed to read input stream.")); - flowEnded.set(true); - } - } - public String getAddress() { return address; } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java index 70e619c4..0827e8fb 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java @@ -16,7 +16,6 @@ package com.google.android.apps.forscience.ble; -import android.annotation.TargetApi; import android.app.Service; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; @@ -31,9 +30,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.os.Binder; -import android.os.Handler; import android.os.IBinder; -import android.os.Message; import androidx.annotation.VisibleForTesting; import android.support.v4.content.LocalBroadcastManager; import androidx.collection.ArraySet; @@ -53,9 +50,6 @@ public class MyBleService extends Service { private static String TAG = "MyBleService"; private static final int SERVICES_RETRY_COUNT = 3; private static final boolean DEBUG = false; - private static final long PRUNE_DEVICE_TIMEOUT_MS = 10 * 1000; - private static final int MSG_PRUNE = 1011; - static int MAX_NO_DEVICES = 100; static LocalBroadcastManager getBroadcastManager(Context context) { // For security, only use local broadcasts (See b/32803250) @@ -78,37 +72,12 @@ public MyBleService getService() { private BluetoothManager bluetoothManager; private BluetoothAdapter btAdapter; - private Boolean isScanning = new Boolean(false); - private int maxNoDevices = MAX_NO_DEVICES; - - // the list of discovered devices - private BleDevices bleDevices; private Map addressToGattClient = Collections.synchronizedMap(new LinkedHashMap()); - private Handler handler; - private Set mOutstandingServiceDiscoveryAddresses = new ArraySet<>(); - // BLE callback - BluetoothAdapter.LeScanCallback scanCallback = new BluetoothAdapter.LeScanCallback() { - - @Override - public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { - if (bleDevices.addDevice(device, rssi, scanRecord)) { - if (DEBUG) - Log.d(TAG, "New device: " + device.getAddress() + ", name: " + device.getName()); - - if (bleDevices.getCount() >= maxNoDevices) { - Log.d(TAG, "Max no of devices reached, exiting the scan."); - endScan(); - } - } - pruneAfterDelay(); - } - }; - // GATT callbacks private BluetoothGattCallback gattCallbacks = new BluetoothGattCallback() { Map mConnectionStatuses = new ArrayMap<>(); @@ -207,18 +176,6 @@ public void onDescriptorWrite(BluetoothGatt gatt, sendGattBroadcast(getAddressFromGatt(gatt), status == BluetoothGatt.GATT_SUCCESS ? BleEvents.WRITE_DESC_OK : BleEvents.WRITE_DESC_FAIL, null); } - - @Override - public void onReliableWriteCompleted(BluetoothGatt gatt, int status) { - sendGattBroadcast(getAddressFromGatt(gatt), status == BluetoothGatt.GATT_SUCCESS - ? BleEvents.COMMIT_OK : BleEvents.COMMIT_FAIL, null); - } - - @Override - public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { - sendGattBroadcast(getAddressFromGatt(gatt), status == BluetoothGatt.GATT_SUCCESS - ? BleEvents.MTU_CHANGE_OK : BleEvents.MTU_CHANGE_OK, null); - } }; public static void sendServiceDiscoveryIntent(Context context, String address, @@ -248,24 +205,6 @@ protected void sendGattBroadcast(String address, String gattAction, getBroadcastManager(this).sendBroadcast(newIntent); } - @Override - public void onCreate() { - super.onCreate(); - bleDevices = new BleDevices(); - handler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { - if (MSG_PRUNE == msg.what && bleDevices != null) { - Log.v(TAG, "Pruning devices"); - BluetoothManager manager = (BluetoothManager) getSystemService( - Context.BLUETOOTH_SERVICE); - bleDevices.pruneOldDevices(manager.getConnectedDevices(BluetoothProfile.GATT)); - } - return false; - } - }); - } - @Override public int onStartCommand(Intent intent, int flags, int startId) { if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { @@ -284,8 +223,6 @@ public int onStartCommand(Intent intent, int flags, int startId) { stopSelf(); return START_NOT_STICKY; } - // Intent newIntent = new Intent(BleEvents.BLE_ENABLED); - // LocalBroadcastManager.getInstance(this).sendBroadcast(newIntent); return START_STICKY; } @@ -359,9 +296,6 @@ public void disconnectDevice(String address) { } void resetGatt() { - if (btAdapter != null && isScanning) { - btAdapter.stopLeScan(scanCallback); - } for (BluetoothGatt bluetoothGatt : addressToGattClient.values()) { bluetoothGatt.close(); } @@ -378,15 +312,6 @@ public IBinder onBind(Intent intent) { return binder; } - @Override - public boolean onUnbind(Intent intent) { - return super.onUnbind(intent); - } - - public BleDevices getBleDevices() { - return bleDevices; - } - public boolean discoverServices(String address) { if (mOutstandingServiceDiscoveryAddresses.contains(address)) { return addressToGattClient.containsKey(address); @@ -401,40 +326,6 @@ protected boolean internalDiscoverServices(String address) { return bluetoothGatt != null && bluetoothGatt.discoverServices(); } - public void scanFor(UUID[] serviceType) { - synchronized (isScanning) { - if (isScanning) { - return; - } - btAdapter.startLeScan(serviceType, scanCallback); - isScanning = true; - } - setLastScanTime(); - } - - public void scanAll() { - synchronized (isScanning) { - if (isScanning) { - return; - } - isScanning = true; - btAdapter.startLeScan(scanCallback); - } - setLastScanTime(); - } - - public void endScan() { - synchronized (isScanning) { - maxNoDevices = MAX_NO_DEVICES; - if (!isScanning) { - return; - } - isScanning = false; - btAdapter.stopLeScan(scanCallback); - getBroadcastManager(this).sendBroadcast(new Intent(BleEvents.BLE_SCAN_END)); - } - } - BluetoothGattService getService(String address, UUID serviceId) { if (DEBUG) Log.d(TAG, "lookup for service: " + serviceId); BluetoothGatt bluetoothGatt = addressToGattClient.get(address); @@ -445,6 +336,7 @@ BluetoothGattService getService(String address, UUID serviceId) { * FOR DEBUGGING ONLY. This should never be called from production code; we don't want this * data in our logs. */ + @SuppressWarnings("UnusedDeclaration") public void printServices(String address) { if (!DEBUG) { return; @@ -470,6 +362,7 @@ public void printServices(String address) { } } + void readValue(String address, BluetoothGattCharacteristic theCharacteristic) { BluetoothGatt bluetoothGatt = addressToGattClient.get(address); if (bluetoothGatt == null) { @@ -491,16 +384,6 @@ void writeValue(String address, BluetoothGattCharacteristic theCharacteristic, b bluetoothGatt.writeCharacteristic(theCharacteristic); } - void commit(String address) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.w(TAG, "No connection found for: " + address); - sendGattBroadcast(address, BleEvents.COMMIT_FAIL, null); - return; - } - bluetoothGatt.executeReliableWrite(); - } - public void writeValue(String address, BluetoothGattDescriptor descriptor, byte[] value) { BluetoothGatt bluetoothGatt = addressToGattClient.get(address); if (bluetoothGatt == null) { @@ -514,17 +397,6 @@ public void writeValue(String address, BluetoothGattDescriptor descriptor, byte[ } } - @TargetApi(21) - public void setMtu(String address, int mtu) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.w(TAG, "No connection found for: " + address); - sendGattBroadcast(address, BleEvents.MTU_CHANGE_FAIL, null); - return; - } - bluetoothGatt.requestMtu(mtu); - } - boolean setNotificationsFor(String address, BluetoothGattCharacteristic characteristic, boolean enable) { BluetoothGatt bluetoothGatt = addressToGattClient.get(address); @@ -535,35 +407,4 @@ boolean setNotificationsFor(String address, BluetoothGattCharacteristic characte return bluetoothGatt.setCharacteristicNotification(characteristic, enable); } - - public void startTransaction(String address) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.w(TAG, "No connection found for: " + address); - return; - } - sendGattBroadcast( - address, - (bluetoothGatt.beginReliableWrite() ? BleEvents.START_TX_OK - : BleEvents.START_TX_FAIL), - null); - } - - public void setMaxNoDevices(int maxNoDevices) { - this.maxNoDevices = maxNoDevices; - } - - private void setLastScanTime() { - bleDevices.setLastScanTime(); - } - - private void cancelPrune() { - handler.removeMessages(MSG_PRUNE); - } - - private void pruneAfterDelay() { - cancelPrune(); - - handler.sendEmptyMessageDelayed(MSG_PRUNE, PRUNE_DEVICE_TIMEOUT_MS); - } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java index e76a2867..1b9dd12e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java @@ -133,6 +133,7 @@ public boolean onTouchEvent(MotionEvent event) { public static Snackbar makeSnackbar(View view, String message, int length) { Context context = view.getContext(); Snackbar bar = Snackbar.make(view, message, length); + bar.getView().setContentDescription(message); bar.setDuration(getLongerToastDurationIfAccessibilityEnabled(context, bar)); bar.setActionTextColor(context.getResources().getColor(R.color.snackbar_action_color)); return bar; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java new file mode 100644 index 00000000..67fdd893 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java @@ -0,0 +1,34 @@ +/* + * Copyright 2018 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.forscience.whistlepunk; + +import android.content.Context; +import android.content.Intent; + +/** + * Encapsulates decisions about which specific activity classes implement which features, + * allowing different builds to use different specific activities. + */ +public interface ActivityNavigator { + ActivityNavigator STUB = new ActivityNavigator() { + @Override + public Intent launchIntentForPanesActivity(Context context, String experimentId) { + return null; + } + }; + + Intent launchIntentForPanesActivity(Context context, String experimentId); +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java index 9532e26e..ed3f126e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppServices.java @@ -41,6 +41,11 @@ public FeatureDiscoveryProvider getFeatureDiscoveryProvider() { public FeedbackProvider getFeedbackProvider() { return FeedbackProvider.STUB; } + + @Override + public ActivityNavigator getNavigator() { + return ActivityNavigator.STUB; + } }; RefWatcher getRefWatcher(); @@ -50,4 +55,6 @@ public FeedbackProvider getFeedbackProvider() { FeatureDiscoveryProvider getFeatureDiscoveryProvider(); FeedbackProvider getFeedbackProvider(); + + ActivityNavigator getNavigator(); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java index af5aabb4..8fdab5c5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AppSingleton.java @@ -16,6 +16,7 @@ package com.google.android.apps.forscience.whistlepunk; +import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Handler; @@ -25,21 +26,25 @@ import com.google.android.apps.forscience.ble.BleClient; import com.google.android.apps.forscience.ble.BleClientImpl; +import com.google.android.apps.forscience.whistlepunk.audio.AudioSource; import com.google.android.apps.forscience.whistlepunk.devicemanager.ConnectableSensor; import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorDiscoverer; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; import com.google.android.apps.forscience.whistlepunk.metadata.SimpleMetaDataManager; import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorEnvironment; import com.google.android.apps.forscience.whistlepunk.sensordb.SensorDatabaseImpl; +import com.google.common.base.Optional; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import io.reactivex.Maybe; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.Single; +import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.PublishSubject; public class AppSingleton { @@ -60,6 +65,8 @@ public class AppSingleton { private Map mExternalSensorProviders; private ConnectableSensor.Connector mSensorConnector; private PublishSubject

This is a multiple of {@link #mHashSizePx}.

- */ - private float mMinTouchLabelXPx; - - /** - * Additional offset for the X value in touch label coordinates. - *

Used to prevent the label from appearing under the finger.

- */ - private float mTouchLabelOffsetPx; - - // Members controlling the touch labels. - private int mTouchLabelColor; - private float mTouchLabelTextSize; - private TextPaint mTouchLabelTextPaint; - private float mTouchLabelTextHeight; - - private Paint mCalibratePaint; - - /** - * Stores the last known points, keyed by pointer ID (@link MotionEvent#getPointerId). - */ - private SparseArray mTouches; - - /** - * If {@code true}, we are in calibration mode, not measuring mode. - */ - private boolean mCalibrationMode; - - /** - * A scaling factor to calibrate the ruler for different screens. - */ - private float mScaleFactor = 1.0f; - - private SharedPreferences mPreferences; - - /** - * Current Y position during user calibration. - */ - private float mCalibrationY = -1.0f; - - /** - * Calibration target for calibration mode. - *

The target defines the real value that the user should be touching in calibration mode. - *

- */ - private float mCalibrationTarget; - - public RulerView(Context context) { - super(context); - init(null, 0); - } - - public RulerView(Context context, AttributeSet attrs) { - super(context, attrs); - init(attrs, 0); - } - - public RulerView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - init(attrs, defStyle); - } - - private void init(AttributeSet attrs, int defStyle) { - mPreferences = PreferenceManager.getDefaultSharedPreferences(getContext()); - mScaleFactor = mPreferences.getFloat(KEY_RULER_SCALE_FACTOR, 1.0f); - - // Load attributes - final TypedArray a = getContext().obtainStyledAttributes( - attrs, R.styleable.RulerView, defStyle, 0); - - mUnits = a.getInteger(R.styleable.RulerView_rulerUnits, 0); - mRulerColor = a.getColor(R.styleable.RulerView_rulerColor, Color.BLACK); - mRulerTextSize = a.getDimension(R.styleable.RulerView_rulerTextSize, 24); - mTouchLabelColor = a.getColor(R.styleable.RulerView_touchLabelColor, Color.BLUE); - mTouchLabelTextSize = a.getDimension(R.styleable.RulerView_touchLabelTextSize, 48); - - a.recycle(); - - // Set up the TextPaint object used to draw the labels on the ruler. - mRulerTextPaint = new TextPaint(); - mRulerTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); - mRulerTextPaint.setTextAlign(Paint.Align.CENTER); - - mCalibratePaint = new Paint(); - mCalibratePaint.setFlags(Paint.ANTI_ALIAS_FLAG); - mCalibratePaint.setStyle(Paint.Style.STROKE); - mCalibratePaint.setPathEffect(new DashPathEffect(new float[] {1.0f, 1.0f}, 0)); - mCalibratePaint.setStrokeWidth(1); - mCalibratePaint.setColor(mRulerColor); - - mTouchLabelTextPaint = new TextPaint(); - mTouchLabelTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); - mTouchLabelTextPaint.setTextAlign(Paint.Align.CENTER); - - mHashSizePx = getResources().getDimensionPixelSize(R.dimen.ruler_hash_size); - // Magic number is only used once: not worth a const. - mMinTouchLabelXPx = mHashSizePx * 4.5f; - mTouchLabelOffsetPx = getResources().getDimensionPixelOffset(R.dimen.ruler_label_offset); - - calculateSpacing(); - // Update TextPaint and text measurements from attributes - invalidateTextPaintAndMeasurements(); - - mTouches = new SparseArray<>(); - } - - private void calculateSpacing() { - // Retrieve display metrics - DisplayMetrics metrics = new DisplayMetrics(); - WindowManager manager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); - manager.getDefaultDisplay().getMetrics(metrics); - - // First we calculate a 1/10 of an inch in pixels since dpi = "dots per inch" - mSpacingPx = 16 * metrics.densityDpi / DisplayMetrics.DENSITY_MEDIUM; - if (mUnits == 0) { - // Metric: we want every mm, so convert. - mSpacingPx /= 2.54; - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - int action = event.getAction(); - switch (action & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_POINTER_DOWN: { - if (mCalibrationMode) { - startCalibration(event); - } else { - addTouch(event); - } - // Return true from here to get the rest of the events from this gesture. - return true; - } - - case MotionEvent.ACTION_MOVE: { - if (mCalibrationMode) { - updateCalibration(event); - } else { - updateTouch(event); - } - break; - } - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: { - if (mCalibrationMode) { - finishCalibration(event); - } else { - removeTouch(event); - } - break; - } - case MotionEvent.ACTION_CANCEL: { - if (!mCalibrationMode) { - removeAllTouches(); - } - break; - } - } - - - return super.onTouchEvent(event); - } - - private void addTouch(MotionEvent event) { - final int pointerIndex = getPointerIndex(event.getAction()); - final int pointerId = event.getPointerId(pointerIndex); - final int x = (int) event.getX(); - final int y = (int) event.getY(); - mTouches.append(pointerId, new Point(x, y)); - mActivePointerId = pointerId; - invalidateFromTouch(y, y); - } - - private void updateTouch(MotionEvent event) { - // Update all the pointers. - for (int pointerIndex = 0; pointerIndex < event.getPointerCount(); ++pointerIndex) { - final int x = (int) event.getX(pointerIndex); - final int y = (int) event.getY(pointerIndex); - final int pointerId = event.getPointerId(pointerIndex); - Point oldPoint = mTouches.get(pointerId); - if (oldPoint == null) { - // Don't know what this point is. - continue; - } - final int oldX = oldPoint.x; - final int oldY = oldPoint.y; - oldPoint.set(x, y); - final int minY = Math.min(y, oldY); - final int maxY = Math.max(y, oldY); - invalidateFromTouch(minY, maxY); - } - } - - /** - * Removes the touch represented by the motion event. - * @param event MotionEvent with action = ACTION_UP or ACTION_POINTER_UP - */ - private void removeTouch(MotionEvent event) { - final int action = event.getAction(); - final int pointerIndex = getPointerIndex(action); - final int pointerId = event.getPointerId(pointerIndex); - Point oldPoint = mTouches.get(pointerId); - if (oldPoint != null) { - mTouches.remove(pointerId); - invalidateFromTouch(oldPoint.y, oldPoint.y); - } - if (action == MotionEvent.ACTION_UP) { - mActivePointerId = INVALID_POINTER_ID; - } else { - if (pointerId == mActivePointerId) { - final int newPointerIndex = (pointerIndex == 0) ? 1 : 0; - mActivePointerId = event.getPointerId(newPointerIndex); - } - } - } - - private void removeAllTouches() { - mTouches.clear(); - invalidate(); - } - - private void startCalibration(MotionEvent event) { - final int pointerIndex = getPointerIndex(event.getAction()); - final int pointerId = event.getPointerId(pointerIndex); - updateScaleFactor(event.getY(pointerIndex)); - - mActivePointerId = pointerId; - invalidate(); - } - - private void updateCalibration(MotionEvent event) { - if (mActivePointerId == INVALID_POINTER_ID) { - return; - } - final int pointerIndex = event.findPointerIndex(mActivePointerId); - updateScaleFactor(event.getY(pointerIndex)); - - invalidate(); - } - - private void finishCalibration(MotionEvent event) { - final int action = event.getAction(); - final int pointerIndex = getPointerIndex(action); - final int pointerId = event.getPointerId(pointerIndex); - if (action == MotionEvent.ACTION_UP) { - mActivePointerId = INVALID_POINTER_ID; - // Save the value here now. - mPreferences.edit().putFloat(KEY_RULER_SCALE_FACTOR, mScaleFactor).apply(); - } else { - if (pointerId == mActivePointerId) { - final int newPointerIndex = (pointerIndex == 0) ? 1 : 0; - mActivePointerId = event.getPointerId(newPointerIndex); - } - } - - invalidate(); - } - - private void updateScaleFactor(float y) { - int contentHeight = getHeight() - getPaddingBottom() - getPaddingTop(); - float realY = contentHeight - y; - // The ideal size would be the calibration target * the number of pixels per unit. - float idealSizePx = mCalibrationTarget * mSpacingPx; - // The scale factor is what is necessary to line up the real size with the ideal size. - float scaleFactor = realY / idealSizePx; - - if (scaleFactor < MIN_SCALE_FACTOR) { - mScaleFactor = MIN_SCALE_FACTOR; - } else if (scaleFactor > MAX_SCALE_FACTOR) { - mScaleFactor = MAX_SCALE_FACTOR; - } else { - mScaleFactor = scaleFactor; - mCalibrationY = y; - } - } - - private int getPointerIndex(int action) { - return (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> - MotionEvent.ACTION_POINTER_INDEX_SHIFT; - } - - private void invalidateTextPaintAndMeasurements() { - mRulerTextPaint.setTextSize(mRulerTextSize); - mRulerTextPaint.setColor(mRulerColor); - - Paint.FontMetrics fontMetrics = mRulerTextPaint.getFontMetrics(); - mRulerTextHeight = fontMetrics.bottom; - - mTouchLabelTextPaint.setTextSize(mTouchLabelTextSize); - mTouchLabelTextPaint.setColor(mTouchLabelColor); - - fontMetrics = mTouchLabelTextPaint.getFontMetrics(); - mTouchLabelTextHeight = fontMetrics.bottom; - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // TODO: consider storing these as member variables to reduce - // allocations per draw cycle. - int paddingLeft = getPaddingLeft(); - int paddingTop = getPaddingTop(); - int paddingRight = getPaddingRight(); - int paddingBottom = getPaddingBottom(); - - int contentWidth = getWidth() - paddingLeft - paddingRight; - int contentHeight = getHeight() - paddingTop - paddingBottom; - final float mScaledSpacingPx = mSpacingPx * mScaleFactor; - if (mCalibrationMode) { - if (mCalibrationY > 0) { - canvas.drawLine(0, mCalibrationY, contentWidth, mCalibrationY, mTouchLabelTextPaint); - } - } else { - // Draw all the touch lines - for (int index = 0, end = mTouches.size(); index < end; ++index) { - Point point = mTouches.get(mTouches.keyAt(index)); - canvas.drawLine(0, point.y, contentWidth, point.y, mTouchLabelTextPaint); - - // Label the touch line: convert from mScaledSpacingPx to units, then draw it. - float value = (float) (contentHeight - point.y) / mScaledSpacingPx; - if (mUnits == UNITS_IMPERIAL) { - value /= 10; - } - String textLabelString = getResources().getString(mUnits == 0 ? - R.string.ruler_label_metric : - R.string.ruler_label_imperial, value); - final float measuredTextLength = mTouchLabelTextPaint.measureText(textLabelString); - - // Try to put the label near the finger. - float xCoordinate = Math.max(mMinTouchLabelXPx, point.x - measuredTextLength - - mTouchLabelOffsetPx); - - if (point.x < mMinTouchLabelXPx - mTouchLabelOffsetPx) { - // User is probably using their other hand. Move to the right so this is visible. - xCoordinate = point.x + measuredTextLength + mTouchLabelOffsetPx; - } - // TODO: the label might also be behind the action bar. Should move it downwards in - // that case. - canvas.drawText(textLabelString, xCoordinate, point.y - mTouchLabelOffsetPx, - mTouchLabelTextPaint); - } - } - - // Start from the base of the view and move up, drawing the text and lines as necessary. - int hashCount = 0; - canvas.translate(0, contentHeight); - for (int yPos = contentHeight; yPos >= 0; yPos -= mScaledSpacingPx) { - canvas.translate(0, -mScaledSpacingPx); - hashCount++; - int length = mHashSizePx; - if (hashCount % 10 == 0) { - length = mHashSizePx * 2; - // Draw the text rotated. - canvas.rotate(-90); - int labelValue = hashCount; - if (mUnits == UNITS_IMPERIAL) { - labelValue = hashCount / 10; - } - canvas.drawText(String.valueOf(labelValue), (mRulerTextHeight / -2), - length + (mRulerTextHeight * 4), mRulerTextPaint); - canvas.rotate(90); - } - canvas.drawLine(0, 0, length, 0, mCalibrationMode ? mCalibratePaint : mRulerTextPaint); - } - } - - public @Units int getUnits() { - return mUnits; - } - - public int getRulerColor() { - return mRulerColor; - } - - public void setRulerColor(int color) { - mRulerColor = color; - invalidateTextPaintAndMeasurements(); - } - - public float getRulerTextSize() { - return mRulerTextSize; - } - - public void setRulerTextSize(float textSize) { - mRulerTextSize = textSize; - invalidateTextPaintAndMeasurements(); - } - - public void setCalibrationMode(boolean mode) { - mCalibrationMode = mode; - invalidate(); - } - - public boolean getCalibrationMode() { - return mCalibrationMode; - } - - /** - * Sets the target calibration size, in the appropriate units. - */ - public void setCalibrationTarget(float target, @Units int units) { - if (mUnits != units) { - throw new IllegalArgumentException("Must send calibration target in matching units"); - } - mCalibrationTarget = target; - } - - /** - * Invalidates an area based on the touch region. This needs to have a big enough band to - * handle the label. - *

We invalidate the entire X range since we draw horizontally across the screen.

- */ - private void invalidateFromTouch(int minY, int maxY) { - invalidate(0, (int) (minY - (mTouchLabelTextSize + mTouchLabelOffsetPx)), - getWidth(), maxY + 10); - } -} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java index 4a7b3006..934c83fa 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAnimationBehavior.java @@ -16,208 +16,38 @@ package com.google.android.apps.forscience.whistlepunk; -import static com.google.android.apps.forscience.whistlepunk.audio.SoundUtils.HALF_STEP_FREQUENCY_RATIO; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LevelListDrawable; -import androidx.annotation.IntDef; -import android.view.Surface; -import android.widget.ImageView; - -import com.google.android.apps.forscience.whistlepunk.audio.SoundUtils; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import androidx.annotation.Nullable; +import android.widget.RelativeLayout; /** * Defines sensor animation behavior for sensor cards. */ -public class SensorAnimationBehavior { - - // The different types of behavior for the sensor animation. - @IntDef({TYPE_STATIC_ICON, TYPE_ACCELEROMETER_SCALE, TYPE_RELATIVE_SCALE, - TYPE_POSITIVE_RELATIVE_SCALE, TYPE_ROTATION, TYPE_ACCELEROMETER_SCALE_ROTATES, - TYPE_PITCH}) - @Retention(RetentionPolicy.SOURCE) - public @interface BehaviorType { - } - - public static final int TYPE_STATIC_ICON = 1; - public static final int TYPE_ACCELEROMETER_SCALE = 2; - public static final int TYPE_RELATIVE_SCALE = 3; - public static final int TYPE_POSITIVE_RELATIVE_SCALE = 4; - public static final int TYPE_ROTATION = 5; - public static final int TYPE_ACCELEROMETER_SCALE_ROTATES = 6; - public static final int TYPE_PITCH = 7; - +public interface SensorAnimationBehavior { /** - * noteFrequencies contains the frequencies of notes of a piano at indices 1-88. - * The value at index 0 is a half step less than the value at index 1. - * The value at index 89 is a half step more than the value at index 88. + * Initialize the icon. + * + * @param layout the layout that will contain the icon + * @param value the note view value, or null */ - private static final List noteFrequencies = new ArrayList(); - - private final int mBehaviorType; - private int mLevelDrawableId; - - public static SensorAnimationBehavior createDefault() { - // TODO: Replace bluetooth_level_drawable with a default sensor icon from UX. - return new SensorAnimationBehavior(R.drawable.bluetooth_level_drawable, - SensorAnimationBehavior.TYPE_STATIC_ICON); - } - - // For now, assume that drawableIds is size 1 for static, size 5 for accelerometer, size 4 - // for relative scale, or size 1 for rotation. - public SensorAnimationBehavior(int levelDrawableId, @BehaviorType int behaviorType) { - mBehaviorType = behaviorType; - mLevelDrawableId = levelDrawableId; - } + void initializeLargeIcon(RelativeLayout layout, @Nullable Double value); - public void updateImageView(ImageView view, double newValue, double yMin, double yMax, - int screenOrientation) { - if (mBehaviorType == TYPE_ROTATION) { - float delta = getScreenRotationDelta(screenOrientation); - view.setRotation((float) (-1.0 * (newValue + delta))); - view.setImageLevel(0); - } else { - if (mBehaviorType == TYPE_ACCELEROMETER_SCALE_ROTATES) { - float delta = getScreenRotationDelta(screenOrientation); - view.setRotation(-1 * delta); - } else { - view.setRotation(0.0f); - } - view.setImageLevel(getUpdatedLevel(newValue, yMin, yMax)); - } - } - - private void resetImageView(ImageView view) { - view.setImageLevel(0); - view.setRotation(0.0f); - } - - private int getUpdatedLevel(double newValue, double yMin, double yMax) { - int index; - if (mBehaviorType == TYPE_STATIC_ICON) { - index = 0; - } else if (mBehaviorType == TYPE_ACCELEROMETER_SCALE || - mBehaviorType == TYPE_ACCELEROMETER_SCALE_ROTATES) { - if (newValue > 3.0) { - index = 4; - } else if (newValue > 0.5) { - index = 3; - } else if (newValue > -0.5) { - index = 2; - } else if (newValue > -3) { - index = 1; - } else { - index = 0; - } - } else if (mBehaviorType == TYPE_PITCH) { - index = pitchToLevel(newValue); - } else { - double scaled; - if (mBehaviorType == TYPE_POSITIVE_RELATIVE_SCALE) { - double minVal = Math.max(yMin, 0); - scaled = (newValue - minVal) / (yMax - minVal); - } else { - // Assume mBehaviorType == TYPE_RELATIVE_SCALE - scaled = (newValue - yMin) / (yMax - yMin); - } - if (scaled > .75) { - index = 3; - } else if (scaled > .5) { - index = 2; - } else if (scaled > .25) { - index = 1; - } else { - index = 0; - } - } - return index; - } - - private float getScreenRotationDelta(int screenOrientation) { - float delta = 0; - // Use screen orientation to make sure we point the icon the right way even if the - // screen is rotated. - // The data itself is not changed when the screen is rotated: We always report angle - // along the long axis of the phone. However, if we do not rotate the image here, it - // will appear off by 90/180/270 deg. - if (screenOrientation == Surface.ROTATION_90) { - delta = 90; - } else if (screenOrientation == Surface.ROTATION_180) { - delta = 180; - } else if (screenOrientation == Surface.ROTATION_270) { - delta = 270; - } - return delta; - } - - private Drawable getLevelDrawable(Context context) { - LevelListDrawable drawable = - (LevelListDrawable) context.getResources().getDrawable(mLevelDrawableId); - drawable.setLevel(0); - return drawable; - } - - void initializeLargeIcon(ImageView largeIcon) { - largeIcon.setImageDrawable(getLevelDrawable(largeIcon.getContext())); - largeIcon.setRotation(0.0f); - // Icon level depends on type -- we want to pick something in the middle to look reasonable. - if (mBehaviorType == TYPE_ACCELEROMETER_SCALE || - mBehaviorType == TYPE_ACCELEROMETER_SCALE_ROTATES) { - // Pick the middle icon - largeIcon.setImageLevel(2); - } else if (mBehaviorType == TYPE_POSITIVE_RELATIVE_SCALE || - mBehaviorType == TYPE_RELATIVE_SCALE) { - // Pick the most exciting icon (the biggest value represented) - largeIcon.setImageLevel(3); - } - } + /** + * Reset the icon. + * + * @param layout the layout that contains the icon + */ + void resetIcon(RelativeLayout layout); - private static void fillNoteFrequencies() { - noteFrequencies.addAll(SoundUtils.getPianoNoteFrequencies()); - // Add first and last items to make lookup easier. Use the approximate half-step ratio to - // determine the first and last items. - noteFrequencies.add(0, noteFrequencies.get(0) / HALF_STEP_FREQUENCY_RATIO); - noteFrequencies.add( - noteFrequencies.get(noteFrequencies.size() - 1) * HALF_STEP_FREQUENCY_RATIO); - } + /** + * Returns whether the animation and text should be updated together. + */ + boolean updateIconAndTextTogether(); /** - * Returns the index corresponding to the given sound frequency, where indices 1-88 represent - * the notes of keys on a piano. + * Update the icon. + * + * @param layout the layout that contains the icon */ - private static int pitchToLevel(double frequency) { - if (noteFrequencies.isEmpty()) { - fillNoteFrequencies(); - } - int i = Collections.binarySearch(noteFrequencies, frequency); - // If there is an exact match, i will be a non-negative number, which is the index of the - // matching value. - if (i >= 0) { - return i; - } - // If there is no exact match, i will provide the insertion point, where the observed - // frequency would belong in the list, as (-(insertion point) - 1). - // This is the usual case, since in most cases the observed frequency will not match a - // specific note exactly. - // Calculate the insertion point - i = -i - 1; - if (i == 0) { - // frequency is significantly lower than the lowest note. - return 0; - } - if (i == noteFrequencies.size()) { - // frequency is significantly higher than the highest note. - return noteFrequencies.size() - 1; - } - // frequency is between two notes. - double midpoint = (noteFrequencies.get(i - 1) + noteFrequencies.get(i)) / 2; - return (frequency < midpoint) ? (i - 1) : i; - } + void updateIcon(RelativeLayout layout, double newValue, double yMin, double yMax, + int screenOrientation); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java index 7564f85b..e4a78081 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorAppearanceProviderImpl.java @@ -17,7 +17,6 @@ package com.google.android.apps.forscience.whistlepunk; import android.content.Context; -import android.os.Build; import com.google.android.apps.forscience.javalib.MaybeConsumer; import com.google.android.apps.forscience.javalib.Success; @@ -29,12 +28,15 @@ import com.google.android.apps.forscience.whistlepunk.sensors.BarometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.CompassSensor; import com.google.android.apps.forscience.whistlepunk.sensors.DecibelSensor; -import com.google.android.apps.forscience.whistlepunk.sensors.ExperimentalPitchSensor; import com.google.android.apps.forscience.whistlepunk.sensors.LinearAccelerometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.MagneticStrengthSensor; +import com.google.android.apps.forscience.whistlepunk.sensors.PitchSensor; import com.google.android.apps.forscience.whistlepunk.sensors.SineWavePseudoSensor; import com.google.common.base.Preconditions; +import java.text.FieldPosition; +import java.text.NumberFormat; +import java.text.ParsePosition; import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -46,13 +48,19 @@ public class SensorAppearanceProviderImpl implements SensorAppearanceProvider { new BuiltInSensorAppearance(R.string.unknown_sensor, R.drawable.ic_sensors_white_24dp, null); + public static final int DEFAULT_POINTS_AFTER_DECIMAL = -1; + + // Don't allow more than 10 places after the decimal to be displayed. The UX can't + // handle this very well. + // TODO: Revisit this constant -- should it be even smaller, like 5? + public static final int MAX_POINTS_AFTER_DECIMAL = 10; + private Map mAppearances = new HashMap<>(); private DataController mDataController; public static GoosciSensorAppearance.BasicSensorAppearance toProto( SensorAppearance appearance, Context context) { - // TODO: transfer other appearance fields GoosciSensorAppearance.BasicSensorAppearance proto = new GoosciSensorAppearance .BasicSensorAppearance(); proto.name = appearance.getName(context); @@ -75,7 +83,7 @@ private static String getLanguageTag(Context context) { } private static Locale getCurrentLocale(Context context) { - if (AndroidVersionUtils.isApiLevelAtLeastNougat()){ + if (AndroidVersionUtils.isApiLevelAtLeastNougat()) { return context.getResources().getConfiguration().getLocales().get(0); } else { //noinspection deprecation @@ -106,8 +114,8 @@ public SensorAppearanceProviderImpl(DataController dataController) { R.string.acc_x, R.drawable.ic_sensor_acc_x_white_24dp, R.string.acc_units, R.string.sensor_desc_short_acc_x, R.string.sensor_desc_first_paragraph_acc, R.string.sensor_desc_second_paragraph_acc, R.drawable.learnmore_acc, - new SensorAnimationBehavior(R.drawable.accx_level_drawable, - SensorAnimationBehavior.TYPE_ACCELEROMETER_SCALE_ROTATES), + new ImageViewSensorAnimationBehavior(R.drawable.accx_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_ACCELEROMETER_SCALE_ROTATES), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, AccelerometerSensor.Axis.X.getSensorId())); @@ -115,8 +123,8 @@ public SensorAppearanceProviderImpl(DataController dataController) { R.string.acc_y, R.drawable.ic_sensor_acc_y_white_24dp, R.string.acc_units, R.string.sensor_desc_short_acc_y, R.string.sensor_desc_first_paragraph_acc, R.string.sensor_desc_second_paragraph_acc, R.drawable.learnmore_acc, - new SensorAnimationBehavior(R.drawable.accy_level_drawable, - SensorAnimationBehavior.TYPE_ACCELEROMETER_SCALE_ROTATES), + new ImageViewSensorAnimationBehavior(R.drawable.accy_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_ACCELEROMETER_SCALE_ROTATES), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, AccelerometerSensor.Axis.Y.getSensorId())); @@ -124,8 +132,8 @@ public SensorAppearanceProviderImpl(DataController dataController) { R.string.acc_z, R.drawable.ic_sensor_acc_z_white_24dp, R.string.acc_units, R.string.sensor_desc_short_acc_z, R.string.sensor_desc_first_paragraph_acc, R.string.sensor_desc_second_paragraph_acc, R.drawable.learnmore_acc, - new SensorAnimationBehavior(R.drawable.accz_level_drawable, - SensorAnimationBehavior.TYPE_ACCELEROMETER_SCALE), + new ImageViewSensorAnimationBehavior(R.drawable.accz_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_ACCELEROMETER_SCALE), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, AccelerometerSensor.Axis.Z.getSensorId())); @@ -134,8 +142,8 @@ public SensorAppearanceProviderImpl(DataController dataController) { R.string.acc_units, R.string.sensor_desc_short_linear_acc, R.string.sensor_desc_first_paragraph_linear_acc, R.string.sensor_desc_second_paragraph_linear_acc, R.drawable.learnmore_acc, - new SensorAnimationBehavior(R.drawable.linacc_level_drawable, - SensorAnimationBehavior.TYPE_POSITIVE_RELATIVE_SCALE), + new ImageViewSensorAnimationBehavior(R.drawable.linacc_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_POSITIVE_RELATIVE_SCALE), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, LinearAccelerometerSensor.ID)); @@ -143,8 +151,8 @@ public SensorAppearanceProviderImpl(DataController dataController) { R.drawable.ic_sensor_light_white_24dp, R.string.ambient_light_units, R.string.sensor_desc_short_light, R.string.sensor_desc_first_paragraph_light, R.string.sensor_desc_second_paragraph_light, R.drawable.learnmore_light, - new SensorAnimationBehavior(R.drawable.ambient_level_drawable, - SensorAnimationBehavior.TYPE_RELATIVE_SCALE), + new ImageViewSensorAnimationBehavior(R.drawable.ambient_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_RELATIVE_SCALE), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, AmbientLightSensor.ID)); putAppearance(MagneticStrengthSensor.ID, BuiltInSensorAppearance.create( @@ -153,49 +161,49 @@ public SensorAppearanceProviderImpl(DataController dataController) { R.string.sensor_desc_first_paragraph_magnetic_strength, R.string.sensor_desc_second_paragraph_magnetic_strength, R.drawable.learnmore_magnet, - new SensorAnimationBehavior(R.drawable.magnetometer_level_drawable, - SensorAnimationBehavior.TYPE_POSITIVE_RELATIVE_SCALE), + new ImageViewSensorAnimationBehavior(R.drawable.magnetometer_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_POSITIVE_RELATIVE_SCALE), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, MagneticStrengthSensor.ID)); putAppearance(CompassSensor.ID, BuiltInSensorAppearance.create(R.string.compass, R.drawable.ic_sensor_compass_white_24dp, R.string.compass_units, R.string.sensor_desc_short_compass, R.string.sensor_desc_first_paragraph_compass, R.string.sensor_desc_second_paragraph_compass, R.drawable.learnmore_compass, - new SensorAnimationBehavior(R.drawable.compass_level_drawable, - SensorAnimationBehavior.TYPE_ROTATION), + new ImageViewSensorAnimationBehavior(R.drawable.compass_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_ROTATION), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, CompassSensor.ID)); putAppearance(DecibelSensor.ID, BuiltInSensorAppearance.create(R.string.decibel, R.drawable.ic_sensor_decibels_white_24dp, R.string.decibel_units, R.string.sensor_desc_short_decibel, R.string.sensor_desc_first_paragraph_decibel, R.string.sensor_desc_second_paragraph_decibel, R.drawable.learnmore_sound, - new SensorAnimationBehavior(R.drawable.decibel_level_drawable, - SensorAnimationBehavior.TYPE_RELATIVE_SCALE), + new ImageViewSensorAnimationBehavior(R.drawable.decibel_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_RELATIVE_SCALE), BuiltInSensorAppearance.DEFAULT_POINTS_AFTER_DECIMAL, DecibelSensor.ID)); - putAppearance(ExperimentalPitchSensor.ID, BuiltInSensorAppearance.create( + putAppearance(PitchSensor.ID, BuiltInSensorAppearance.create( R.string.pitch, R.drawable.ic_sensor_sound_frequency_white_24dp, R.string.hertz_units, R.string.sensor_desc_short_pitch, R.string.sensor_desc_first_paragraph_pitch, R.string.sensor_desc_second_paragraph_pitch, R.drawable.learnmore_sound, - new SensorAnimationBehavior(R.drawable.sound_frequency_drawable, - SensorAnimationBehavior.TYPE_PITCH), - 1 /* pointsAfterDecimalInNumberFormat */, ExperimentalPitchSensor.ID)); + new PitchSensorAnimationBehavior(), + 1 /* 1 decimal place */, PitchSensor.ID)); putAppearance(BarometerSensor.ID, BuiltInSensorAppearance.create(R.string.barometer, R.drawable.ic_sensor_barometer_white_24dp, R.string.barometer_units, R.string.sensor_desc_short_barometer, R.string.sensor_desc_first_paragraph_barometer, R.string.sensor_desc_second_paragraph_barometer, R.drawable.learnmore_barometer, - new SensorAnimationBehavior(R.drawable.barometer_level_drawable, - SensorAnimationBehavior.TYPE_RELATIVE_SCALE), 2 /* 2 decimal places */, - BarometerSensor.ID)); + new ImageViewSensorAnimationBehavior(R.drawable.barometer_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_RELATIVE_SCALE), + 2 /* 2 decimal places */, BarometerSensor.ID)); putAppearance(AmbientTemperatureSensor.ID, new BuiltInSensorAppearance( R.string.ambient_temperature, R.drawable.ic_sensors_white_24dp, - R.string.temperature_units, new SensorAnimationBehavior( - R.drawable.bluetooth_level_drawable, SensorAnimationBehavior.TYPE_STATIC_ICON), + R.string.temperature_units, + new ImageViewSensorAnimationBehavior(R.drawable.bluetooth_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_STATIC_ICON), AmbientTemperatureSensor.ID)); putAppearance(SineWavePseudoSensor.ID, new BuiltInSensorAppearance(R.string.sine_wave, @@ -222,10 +230,40 @@ public SensorAppearance getAppearance(String sensorId) { public static GoosciSensorAppearance.BasicSensorAppearance appearanceToProto( SensorAppearance appearance, Context context) { - // TODO: transfer other appearance fields GoosciSensorAppearance.BasicSensorAppearance proto = new GoosciSensorAppearance .BasicSensorAppearance(); proto.name = appearance.getName(context); + proto.units = appearance.getUnits(context); + proto.shortDescription = appearance.getShortDescription(context); + proto.iconPath = appearance.getSmallIconPath(); + proto.largeIconPath = appearance.getLargeIconPath(); + proto.pointsAfterDecimal = appearance.getPointsAfterDecimal(); return proto; } + + public static NumberFormat createNumberFormat(int pointsAfterDecimalInNumberFormat) { + if (pointsAfterDecimalInNumberFormat <= DEFAULT_POINTS_AFTER_DECIMAL) { + return new AxisNumberFormat(); + } else { + pointsAfterDecimalInNumberFormat = Math.min(pointsAfterDecimalInNumberFormat, + MAX_POINTS_AFTER_DECIMAL); + final String format = "%." + pointsAfterDecimalInNumberFormat + "f"; + return new NumberFormat() { + @Override + public StringBuffer format(double value, StringBuffer buffer, FieldPosition field) { + return buffer.append(String.format(format, value)); + } + + @Override + public StringBuffer format(long value, StringBuffer buffer, FieldPosition field) { + return format((double) value, buffer, field); + } + + @Override + public Number parse(String string, ParsePosition position) { + return null; + } + }; + } + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java index 92abf68a..94546d1a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorCardPresenter.java @@ -58,9 +58,9 @@ import com.google.android.apps.forscience.whistlepunk.sensors.BarometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.CompassSensor; import com.google.android.apps.forscience.whistlepunk.sensors.DecibelSensor; -import com.google.android.apps.forscience.whistlepunk.sensors.ExperimentalPitchSensor; import com.google.android.apps.forscience.whistlepunk.sensors.LinearAccelerometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.MagneticStrengthSensor; +import com.google.android.apps.forscience.whistlepunk.sensors.PitchSensor; import com.google.android.apps.forscience.whistlepunk.wireapi.RecordingMetadata; import com.google.common.collect.Lists; import com.google.protobuf.nano.InvalidProtocolBufferNanoException; @@ -148,7 +148,7 @@ public interface OnCloseClickedListener { // The sensor ID ordering. private static final String[] SENSOR_ID_ORDER = {AmbientLightSensor.ID, DecibelSensor.ID, - ExperimentalPitchSensor.ID, LinearAccelerometerSensor.ID, + PitchSensor.ID, LinearAccelerometerSensor.ID, AccelerometerSensor.Axis.X.getSensorId(), AccelerometerSensor.Axis.Y.getSensorId(), AccelerometerSensor.Axis.Z.getSensorId(), BarometerSensor.ID, CompassSensor.ID, MagneticStrengthSensor.ID}; @@ -156,7 +156,7 @@ public interface OnCloseClickedListener { // Update the back data textview every .25 seconds maximum. private static final int MAX_TEXT_UPDATE_TIME_MS = 250; - // Update the back data imageview every .05 seconds maximum. + // Update the back data icon every .025 seconds maximum. private static final int MAX_ICON_UPDATE_TIME_MS = 25; public static final int ANIMATION_TIME_MS = 200; @@ -260,6 +260,12 @@ public void onNewData(long timestamp, SensorObserver.Data bundle) { if (!mTextTimeHasElapsed && !iconTimeHasElapsed) { return; } + if (mSensorAnimationBehavior.updateIconAndTextTogether()) { + // For some sensors (for example, the pitch sensor), it doesn't make sense to update + // the icon without updating the text. + mTextTimeHasElapsed = true; + iconTimeHasElapsed = true; + } if (mTextTimeHasElapsed) { mLastUpdatedTextTimestamp = timestamp; @@ -277,14 +283,14 @@ public void onNewData(long timestamp, SensorObserver.Data bundle) { mCardViewHolder.meterLiveData.setText(mDataFormat.format(valueString, mUnits)); } if (iconTimeHasElapsed && mSensorPresenter != null) { - mSensorAnimationBehavior.updateImageView(mCardViewHolder.meterSensorIcon, + mSensorAnimationBehavior.updateIcon(mCardViewHolder.meterSensorIconContainer, value, mSensorPresenter.getMinY(), mSensorPresenter.getMaxY(), mCardViewHolder.screenOrientation); } } else { // TODO: Show an error state for no numerical value. mCardViewHolder.meterLiveData.setText(""); - mCardViewHolder.meterSensorIcon.setImageLevel(0); + mSensorAnimationBehavior.resetIcon(mCardViewHolder.meterSensorIconContainer); } } @@ -577,7 +583,8 @@ public void onViewRecycled() { } private void setMeterIcon() { - mSensorAnimationBehavior.initializeLargeIcon(mCardViewHolder.meterSensorIcon); + mSensorAnimationBehavior.initializeLargeIcon(mCardViewHolder.meterSensorIconContainer, + null /* value */); } private void updateCardMenu() { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java index ed983fc6..4af66cce 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/SensorRegistry.java @@ -37,9 +37,9 @@ import com.google.android.apps.forscience.whistlepunk.sensors.BarometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.CompassSensor; import com.google.android.apps.forscience.whistlepunk.sensors.DecibelSensor; -import com.google.android.apps.forscience.whistlepunk.sensors.ExperimentalPitchSensor; import com.google.android.apps.forscience.whistlepunk.sensors.LinearAccelerometerSensor; import com.google.android.apps.forscience.whistlepunk.sensors.MagneticStrengthSensor; +import com.google.android.apps.forscience.whistlepunk.sensors.PitchSensor; import com.google.android.apps.forscience.whistlepunk.sensors.SineWavePseudoSensor; import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; @@ -207,10 +207,7 @@ public boolean isSensorAvailable(int sensorType) { addBuiltInSensor(new AmbientLightSensor()); } addBuiltInSensor(new DecibelSensor()); - - if (DevOptionsFragment.isExperimentalPitchSensorEnabled(context)) { - addBuiltInSensor(new ExperimentalPitchSensor()); - } + addBuiltInSensor(new PitchSensor()); if (AccelerometerSensor.isAccelerometerAvailable(available)) { addBuiltInSensor(new AccelerometerSensor(AccelerometerSensor.Axis.X)); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java index 1a235010..e2f5d7de 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/WhistlePunkApplication.java @@ -20,6 +20,7 @@ import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Context; +import android.content.Intent; import com.google.android.apps.forscience.whistlepunk.analytics.UsageTracker; import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorDiscoverer; @@ -75,6 +76,11 @@ public FeatureDiscoveryProvider getFeatureDiscoveryProvider() { public FeedbackProvider getFeedbackProvider() { return mFeedbackProvider; } + + @Override + public ActivityNavigator getNavigator() { + return WhistlePunkApplication.this.getNavigator(); + } }; public static AppServices getAppServices(Context context) { @@ -106,6 +112,11 @@ public static PerfTrackerProvider getPerfTrackerProvider(Context context) { return app.mPerfTrackerProvider; } + public static Intent getLaunchIntentForPanesActivity(Context context, String experimentId) { + return getAppServices(context).getNavigator() + .launchIntentForPanesActivity(context, experimentId); + } + @Override public void onCreate() { super.onCreate(); @@ -154,4 +165,13 @@ private void setupNotificationChannel() { notificationManager.createNotificationChannel(mChannel); } } + + public ActivityNavigator getNavigator() { + return new ActivityNavigator() { + @Override + public Intent launchIntentForPanesActivity(Context context, String experimentId) { + return PanesActivity.launchIntent(context, experimentId); + } + }; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/analytics/TrackerConstants.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/analytics/TrackerConstants.java index e93e6d66..520ac0a5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/analytics/TrackerConstants.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/analytics/TrackerConstants.java @@ -84,6 +84,8 @@ public final class TrackerConstants { public static final String ACTION_READ_FAILED = "ReadFailed"; public static final String ACTION_PAUSED = "Paused"; public static final String ACTION_LABEL_ADDED = "LabelAdded"; + public static final String ACTION_SHARED = "Shared"; + public static final String ACTION_IMPORTED = "Imported"; // Labels public static final String LABEL_RECORD = "record"; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/EmptySensorAppearance.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/EmptySensorAppearance.java index f4d01033..df147dc9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/EmptySensorAppearance.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/EmptySensorAppearance.java @@ -20,6 +20,7 @@ import com.google.android.apps.forscience.whistlepunk.AxisNumberFormat; import com.google.android.apps.forscience.whistlepunk.BuiltInSensorAppearance; +import com.google.android.apps.forscience.whistlepunk.ImageViewSensorAnimationBehavior; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.SensorAnimationBehavior; import com.google.android.apps.forscience.whistlepunk.SensorAppearance; @@ -81,7 +82,7 @@ public GoosciIcon.IconPath getLargeIconPath() { @Override public SensorAnimationBehavior getSensorAnimationBehavior() { - return SensorAnimationBehavior.createDefault(); + return ImageViewSensorAnimationBehavior.createDefault(); } @Override diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpec.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpec.java index 86efa8b4..8714d061 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpec.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/api/scalarinput/ScalarInputSpec.java @@ -23,6 +23,7 @@ import androidx.annotation.Nullable; import android.util.Log; +import com.google.android.apps.forscience.whistlepunk.ImageViewSensorAnimationBehavior; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.SensorAnimationBehavior; import com.google.android.apps.forscience.whistlepunk.SensorAppearance; @@ -146,8 +147,8 @@ private Resources getApiAppResources(Context context) @Override public SensorAnimationBehavior getSensorAnimationBehavior() { - return new SensorAnimationBehavior(R.drawable.api_level_drawable, - SensorAnimationBehavior.TYPE_RELATIVE_SCALE); + return new ImageViewSensorAnimationBehavior(R.drawable.api_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_RELATIVE_SCALE); } }; } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSource.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/AudioSource.java similarity index 87% rename from OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSource.java rename to OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/AudioSource.java index 35f13542..5b8ff586 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AudioSource.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audio/AudioSource.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package com.google.android.apps.forscience.whistlepunk; +package com.google.android.apps.forscience.whistlepunk.audio; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; +import androidx.annotation.VisibleForTesting; import java.util.ArrayList; import java.util.List; @@ -59,9 +60,13 @@ public AudioSource() { * Returns true if successful, false otherwise. */ public boolean registerAudioReceiver(AudioReceiver audioReceiver) { + if (mMinBufferSizeInBytes < 0 || audioReceiver == null) { + // If this is the case, AudioRecord.getMinBufferSize returned an error. + return false; + } synchronized (mLockAudioReceivers) { - if (mMinBufferSizeInBytes < 0) { - // If this is the case, AudioRecord.getMinBufferSize returned an error. + if (mAudioReceivers.contains(audioReceiver)) { + // This audioReceiver was already added. return false; } mAudioReceivers.add(audioReceiver); @@ -164,4 +169,23 @@ private void stop() { Thread.currentThread().interrupt(); } } + + @VisibleForTesting + public List getRecievers () { + return mAudioReceivers; + } + + @VisibleForTesting + public boolean isRunning() { + return mRunning.get(); + } + + @VisibleForTesting + public void unregisterAllAudioReceivers() { + synchronized (mLockAudioReceivers) { + while (!mAudioReceivers.isEmpty()) { + unregisterAudioReceiver(mAudioReceivers.get(0)); + } + } + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/AudioPlaybackController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/AudioPlaybackController.java index a28aecb4..edd40994 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/AudioPlaybackController.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/AudioPlaybackController.java @@ -63,7 +63,8 @@ public AudioPlaybackController(AudioPlaybackListener listener) { } public void startPlayback(final DataController dataController, final long firstTimestamp, - final long lastTimestamp, long xMinToLoad, final String sensorId) { + final long lastTimestamp, long xMinToLoad, final String trialId, + final String sensorId) { if (mPlaybackStatus != PLAYBACK_STATUS_NOT_PLAYING) { return; } @@ -108,7 +109,7 @@ public void run() { if (audioData.size() < DATAPOINTS_PER_AUDIO_PLAYBACK_LOAD / 10 && !mFullyLoaded && !mLoading) { mLoading = true; - dataController.getScalarReadings(sensorId, /* tier 0 */ 0, + dataController.getScalarReadings(trialId, sensorId, /* tier 0 */ 0, TimeRange.oldest(Range.openClosed(lastTimestamp, xMax)), DATAPOINTS_PER_AUDIO_PLAYBACK_LOAD, new MaybeConsumer() { @@ -153,7 +154,7 @@ public void fail(Exception e) { }; // Load the first set of scalar readings, and start playing as soon as they are loaded. - dataController.getScalarReadings(sensorId, /* tier 0 */ 0, + dataController.getScalarReadings(trialId, sensorId, /* tier 0 */ 0, TimeRange.oldest(Range.closed(xMinToLoad, xMax)), DATAPOINTS_PER_AUDIO_PLAYBACK_LOAD, new MaybeConsumer() { @Override diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java index dc8459c4..1f3e1644 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java @@ -20,8 +20,8 @@ import androidx.annotation.IntDef; import com.google.android.apps.forscience.whistlepunk.ExternalSensorAppearance; +import com.google.android.apps.forscience.whistlepunk.ImageViewSensorAnimationBehavior; import com.google.android.apps.forscience.whistlepunk.R; -import com.google.android.apps.forscience.whistlepunk.SensorAnimationBehavior; import com.google.android.apps.forscience.whistlepunk.SensorAppearance; import java.lang.annotation.Retention; @@ -46,8 +46,8 @@ public static SensorAppearance getSensorAppearance(@SensorKind int kind, final S R.string.sensor_desc_first_paragraph_rotation, R.string.sensor_desc_second_paragraph_rotation, R.drawable.learnmore_rotation, - new SensorAnimationBehavior(R.drawable.rotation_level_drawable, - SensorAnimationBehavior.TYPE_POSITIVE_RELATIVE_SCALE), name, kind); + new ImageViewSensorAnimationBehavior(R.drawable.rotation_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_POSITIVE_RELATIVE_SCALE), name, kind); } else if (kind == SensorTypeProvider.TYPE_RAW) { // TODO(dek): switch icon to voltage when ready. // b/27226547 @@ -58,8 +58,8 @@ public static SensorAppearance getSensorAppearance(@SensorKind int kind, final S R.string.sensor_desc_first_paragraph_raw, R.string.sensor_desc_second_paragraph_raw, R.drawable.artboard, - new SensorAnimationBehavior(R.drawable.percent_level_drawable, - SensorAnimationBehavior.TYPE_RELATIVE_SCALE), name, kind); + new ImageViewSensorAnimationBehavior(R.drawable.percent_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_RELATIVE_SCALE), name, kind); } else { // Handle appearance for custom sensors. return new ExternalSensorAppearance(R.string.sensor_custom, @@ -68,8 +68,8 @@ public static SensorAppearance getSensorAppearance(@SensorKind int kind, final S R.string.sensor_desc_first_paragraph_unknown_bluetooth, R.string.sensor_desc_second_paragraph_unknown_bluetooth, R.drawable.learnmore_bluetooth, - new SensorAnimationBehavior(R.drawable.bluetooth_level_drawable, - SensorAnimationBehavior.TYPE_RELATIVE_SCALE), name, kind); + new ImageViewSensorAnimationBehavior(R.drawable.bluetooth_level_drawable, + ImageViewSensorAnimationBehavior.TYPE_RELATIVE_SCALE), name, kind); } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Experiment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Experiment.java index 4f5f4504..56033d48 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Experiment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Experiment.java @@ -567,6 +567,12 @@ public Consumer deleteLabelAndReturnAssetDeleter(Label item) { return deleteLabelAndReturnAssetDeleter(item, getExperimentId()); } + public boolean isEmpty() { + return getLabelCount() == 0 && getTrialCount() == 0 && + TextUtils.isEmpty(getExperimentOverview().imagePath) && + TextUtils.isEmpty(getTitle()) && !isArchived(); + } + @VisibleForTesting public int getVersion() { return mProto.fileVersion.version; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCache.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCache.java index b4191a67..97039667 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCache.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCache.java @@ -21,6 +21,7 @@ import android.text.TextUtils; import android.util.Log; +import com.google.android.apps.forscience.whistlepunk.BuildConfig; import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; import com.google.android.apps.forscience.whistlepunk.analytics.UsageTracker; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciGadgetInfo; @@ -32,6 +33,8 @@ import java.io.File; import java.io.IOException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * This reads and writes experiments to disk. It caches the last used experiment to avoid extra @@ -48,14 +51,14 @@ class ExperimentCache { // The current minor version number we expect from experiments. // See upgradeExperimentVersionIfNeeded for the meaning of version numbers. - protected static final int MINOR_VERSION = 1; + protected static final int MINOR_VERSION = 2; // The current platform version number for experiments we write. // This is implementation-specific; it _shouldn't_ affect future readers of the data, but it // will allow us to detect files written by buggy versions if needed. // // Increment this each time the file-writing logic changes. - protected static final int PLATFORM_VERSION = 2; + protected static final int PLATFORM_VERSION = BuildConfig.PLATFORM_VERSION; // Write the experiment file no more than once per every WRITE_DELAY_MS. private static final long WRITE_DELAY_MS = 1000; @@ -79,8 +82,9 @@ public interface FailureListener { private boolean mActiveExperimentNeedsWrite = false; private final long mWriteDelayMs; - private Handler mHandler; - private Runnable mWriteRunnable; + private final Handler mHandler; + private final ExecutorService mBackgroundWriteThread; + private final Runnable mWriteRunnable; public ExperimentCache(Context context, FailureListener failureListener) { this (context, failureListener, WRITE_DELAY_MS); @@ -92,12 +96,10 @@ public ExperimentCache(Context context, FailureListener failureListener) { mFailureListener = failureListener; mExperimentProtoFileHelper = new ProtoFileHelper<>(); mHandler = new Handler(); - mWriteRunnable = new Runnable() { - @Override - public void run() { - if (mActiveExperimentNeedsWrite) { - writeActiveExperimentFile(); - } + mBackgroundWriteThread = Executors.newSingleThreadExecutor(); + mWriteRunnable = () -> { + if (mActiveExperimentNeedsWrite) { + mBackgroundWriteThread.execute(this::writeActiveExperimentFile); } }; mWriteDelayMs = writeDelayMs; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java index e666b65a..92d37026 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java @@ -16,28 +16,58 @@ package com.google.android.apps.forscience.whistlepunk.filemetadata; +import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; import androidx.annotation.VisibleForTesting; +import androidx.core.content.FileProvider; import android.util.Log; +import com.google.android.apps.forscience.javalib.MaybeConsumer; +import com.google.android.apps.forscience.javalib.Success; +import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.ColorAllocator; +import com.google.android.apps.forscience.whistlepunk.DataController; +import com.google.android.apps.forscience.whistlepunk.PermissionUtils; +import com.google.android.apps.forscience.whistlepunk.ProtoUtils; import com.google.android.apps.forscience.whistlepunk.R; +import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciDeviceSpec; +import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciGadgetInfo; +import com.google.android.apps.forscience.whistlepunk.intro.AgeVerifier; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciScalarSensorData; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; +import com.google.android.apps.forscience.whistlepunk.metadata.Version; +import com.google.android.apps.forscience.whistlepunk.sensorapi.ScalarSensorDumpReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.HashMap; import java.util.List; import java.util.UUID; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import io.reactivex.Single; /** * MetadataManager backed by a file-based system using internal storage. */ // TODO: Extend MetadataManager public class FileMetadataManager { - private static final String TAG = "FileMetadataManager"; + public static final String COVER_IMAGE_FILE = + "assets/ExperimentCoverImage.jpg"; static final String ASSETS_DIRECTORY = "assets"; static final String EXPERIMENT_FILE = "experiment.proto"; + private static final String TAG = "FileMetadataManager"; private static final String USER_METADATA_FILE = "user_metadata.proto"; private Clock mClock; @@ -98,6 +128,245 @@ public void onNewerVersionDetected() { .getIntArray(R.array.experiment_colors_array).length); } + public static File getUserMetadataFile(Context context) { + return new File(context.getFilesDir(), USER_METADATA_FILE); + } + + public static File getAssetsDirectory(Context context, String experimentId) { + return new File(getExperimentDirectory(context, experimentId), ASSETS_DIRECTORY); + } + + public static File getExperimentDirectory(Context context, String experimentId) { + return new File(getExperimentsRootDirectory(context), experimentId); + } + + public static File getExperimentsRootDirectory(Context context) { + return new File(context.getFilesDir(), "experiments"); + } + + public static File getExternalExperimentsDirectory(Context context) { + return context.getExternalFilesDir(null); + } + + /** + * Gets the relative path to a file within an experiment. For example, if the file is + * a picture pic.png in the assets/ directory of experiment xyz, this will return just + * "assets/pic.png". If the file is not in xyz but the experimentId passed in is xyz, this will + * return an empty string. + */ + public static String getRelativePathInExperiment(String experimentId, File file) { + String absolutePath = file.getAbsolutePath(); + int start = absolutePath.indexOf(experimentId); + if (start < 0) { + // This file is not part of this experiment. + return ""; + } else { + return absolutePath.substring(start + experimentId.length() + 1); + } + } + + public static String getExperimentExportDirectory(Context context) throws IOException { + File dir = new File(context.getFilesDir(), "exported_experiments"); + if (!dir.exists() && !dir.mkdir()) { + throw new IOException("Can't create experiments directory"); + } + return dir.toString(); + } + + /** + * Gets a file in an experiment from a relative path to that file within the experiment. + */ + public static File getExperimentFile(Context context, String experimentId, + String relativePath) { + return new File(getExperimentDirectory(context, experimentId), relativePath); + } + + /** + * Gets the relative path to the file from the user's files directory. + * This can be used to create the imagePath in UserMetadata.ExperimentOverview. + */ + public static File getRelativePathInFilesDir(String experimentId, String relativePath) { + return new File(new File("experiments", experimentId), relativePath); + } + + /** + * Immediately saves the file to be sure the in-storage protos are consistent with memory, + * and starts the Export Service to produce an SJ file. + */ + public static Single getFileForExport(Context context, Experiment experiment, + DataController dc) { + return Single.create(s -> { + dc.saveImmediately(new MaybeConsumer() { + @Override + public void success(Success result) { + String sensorProtoFileName = getExperimentDirectory( + context, experiment.getExperimentId()) + "/sensorData.proto"; + + File zipFile; + try { + zipFile = new File(getExperimentExportDirectory(context), + experiment.getTitle() + ".sj"); + } catch (IOException ioException) { + s.onError(ioException); + return; + } + + dc.getScalarReadingProtosInBackground(experiment.getExperimentProto(), + new MaybeConsumer() { + @Override + public void success( + GoosciScalarSensorData.ScalarSensorData sensorData) { + try (FileOutputStream sensorStream = new FileOutputStream( + sensorProtoFileName)) { + byte[] sensorBytes = ProtoUtils.makeBlob(sensorData); + sensorStream.write(sensorBytes); + + } catch (IOException ioException) { + s.onError(ioException); + return; + } + + try (FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(fos);) { + File experimentDirectory = getExperimentDirectory( + context, experiment.getExperimentId()); + zipDirectory(experimentDirectory, zos, ""); + + if (!experiment.getExperimentOverview().imagePath.isEmpty + ()) { + File experimentImage = new File(context.getFilesDir(), + experiment.getExperimentOverview().imagePath); + zipExperimentImage(experimentImage, zos); + } + } catch (IOException ioException) { + s.onError(ioException); + return; + } + s.onSuccess(zipFile); + } + + @Override + public void fail(Exception e) { + s.onError(e); + return; + } + } + ); + } + + @Override + public void fail(Exception e) { + s.onError(e); + } + }); + + }); + } + + public static void zipDirectory(File directory, ZipOutputStream zipOutputStream, String path) + throws IOException { + File[] fileList = directory.listFiles(); + for (File f : fileList) { + if (f.isDirectory()) { + zipDirectory(f, zipOutputStream, path + f.getName() + "/"); + continue; + } + FileInputStream fis = new FileInputStream(f.getAbsolutePath()); + ZipEntry zipEntry = new ZipEntry(path + f.getName()); + zipOutputStream.putNextEntry(zipEntry); + + byte[] bytes = new byte[1024]; + int length; + while ((length = fis.read(bytes)) >= 0) { + zipOutputStream.write(bytes, 0, length); + } + + zipOutputStream.closeEntry(); + fis.close(); + } + } + + public static void zipExperimentImage(File image, ZipOutputStream zipOutputStream) + throws IOException { + FileInputStream fis = new FileInputStream(image.getAbsolutePath()); + ZipEntry zipEntry = new ZipEntry(COVER_IMAGE_FILE); + + try { + zipOutputStream.putNextEntry(zipEntry); + + byte[] bytes = new byte[1024]; + int length; + while ((length = fis.read(bytes)) >= 0) { + zipOutputStream.write(bytes, 0, length); + } + } catch (ZipException zipException) { + // Already zipped the cover image, because the image name was COVER_IMAGE_FILE. + // This is ok. + Log.d(TAG, "Trying to zip the cover again.", zipException); + } + + zipOutputStream.closeEntry(); + fis.close(); + } + + public static boolean validateShareIntent(Context context, String experimentId) { + // Get a low-cost known-good file to test if anything can handle our intent. + // This won't be used for the actual intent. + Uri experimentProto = FileProvider.getUriForFile(context, context.getPackageName(), + FileMetadataManager.getExperimentFile(context, experimentId, "experiment.proto")); + return FileMetadataManager.getShareIntent(context, experimentProto) != null; + } + + public static Intent getShareIntent(Context context, Uri exportFile) { + if (!AgeVerifier.isOver13(AgeVerifier.getUserAge(context))) { + return null; + } + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("application/x-zip"); + shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + shareIntent.putExtra(Intent.EXTRA_STREAM, exportFile); + + PackageManager packageManager = context.getPackageManager(); + + // Don't worry, this is fast. + List activities = packageManager.queryIntentActivities(shareIntent, + PackageManager.MATCH_DEFAULT_ONLY); + + if (activities.size() > 0) { + return shareIntent; + } + return null; + } + + public static Intent createPhotoShareIntent(Context context, String experimentId, + String imageName, String imageCaption) { + + if (!AgeVerifier.isOver13(AgeVerifier.getUserAge(context))) { + return null; + } + + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("image/*"); + File imageFile = new File( + FileMetadataManager.getExperimentDirectory(context, experimentId), imageName); + Uri uri = FileProvider.getUriForFile(context, context.getPackageName(), imageFile); + + shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + shareIntent.putExtra(Intent.EXTRA_STREAM, uri); + shareIntent.putExtra(Intent.EXTRA_TEXT, imageCaption); + + PackageManager packageManager = context.getPackageManager(); + List activities = packageManager.queryIntentActivities(shareIntent, + PackageManager.MATCH_DEFAULT_ONLY); + + if (activities.size() > 0) { + return shareIntent; + } + return null; + + } + /** * Deletes all experiments in the list of experiment IDs. * This really deletes everything and should be used very sparingly! @@ -201,54 +470,225 @@ public void close() { saveImmediately(); } - @VisibleForTesting - public static File getUserMetadataFile(Context context) { - return new File(context.getFilesDir(), USER_METADATA_FILE); + /** + * Imports an experiment from a ZIP file at the given URI, with the permissions of the Activity. + */ + public Experiment importExperiment(Context context, Uri data, ContentResolver resolver) + throws IOException { + String experimentId = null; + Context appContext = context.getApplicationContext(); + Experiment newExperiment = null; + File externalPath = null; + boolean containsExperimentImage; + try { + newExperiment = newExperiment(); + experimentId = newExperiment.getExperimentId(); + File externalFilesDir = getExternalExperimentsDirectory(context); + externalPath = new File(externalFilesDir, experimentId); + File internalPath = getExperimentDirectory(context, experimentId); + // Blocking get is ok as this is already on a background thread. + containsExperimentImage = + unzipExperimentFile(appContext, data, resolver, externalPath, + internalPath).blockingGet(); + } catch (Exception e) { + deleteExperiment(experimentId); + throw e; + } + + GoosciExperiment.Experiment proto = populateExperimentProto(context, externalPath); + if (proto == null) { + deleteExperiment(experimentId); + throw new ZipException("Corrupt or Missing Experiment Proto"); + } + if (!canImportFromVersion(proto.fileVersion)) { + deleteExperiment(experimentId); + // TODO: better error message + throw new ZipException("Cannot import from file version: " + versionToString(proto)); + } + + GoosciUserMetadata.ExperimentOverview overview = populateOverview(proto, experimentId); + HashMap trialIdMap = updateTrials(proto, newExperiment); + + updateLabels(proto, newExperiment); + newExperiment.setTitle(proto.title); + newExperiment.setLastUsedTime(mClock.getNow()); + if (containsExperimentImage) { + overview.imagePath = "experiments/" + experimentId + "/" + COVER_IMAGE_FILE; + } + updateExperiment(Experiment.fromExperiment(proto, overview)); + File dataFile = new File(externalPath, "sensorData.proto"); + ProtoFileHelper dataProtoFileHelper = + new ProtoFileHelper<>(); + GoosciScalarSensorData.ScalarSensorData dataProto = dataProtoFileHelper.readFromFile( + dataFile, + GoosciScalarSensorData.ScalarSensorData::parseFrom, + WhistlePunkApplication.getUsageTracker(context)); + + if (dataProto != null) { + ScalarSensorDumpReader dumpReader = new ScalarSensorDumpReader( + AppSingleton.getInstance(context).getSensorEnvironment().getDataController()); + dumpReader.readData(dataProto, trialIdMap); + } + + + return newExperiment; } - public static File getAssetsDirectory(Context context, String experimentId) { - return new File(getExperimentDirectory(context, experimentId) + ASSETS_DIRECTORY); + private String versionToString(GoosciExperiment.Experiment proto) { + Version.FileVersion fileVersion = proto.fileVersion; + return fileVersion.version + + "." + + fileVersion.minorVersion + + "." + + fileVersion.platform + + "." + + fileVersion.platformVersion; + } + + @VisibleForTesting + public static boolean canImportFromVersion(Version.FileVersion fileVersion) { + switch (fileVersion.platform) { + case GoosciGadgetInfo.GadgetInfo.ANDROID: + return fileVersion.version == 1 && fileVersion.minorVersion <= 2; + case GoosciGadgetInfo.GadgetInfo.IOS: + if (fileVersion.version != 1) { + return false; + } + if (fileVersion.minorVersion == 1) { + return fileVersion.platformVersion >= 3; + } + return fileVersion.minorVersion == 2; + } + + // Not IOS or Android? Did we finally release on Commodore 64? Well, as long as it's + // using a released file version. + return fileVersion.version == 1 && fileVersion.minorVersion == 2; } - private static String getExperimentDirectory(Context context, String experimentId) { - return getExperimentsRootDirectory(context) + experimentId + "/"; + private Single unzipExperimentFile(Context context, Uri data, + ContentResolver resolver, + File externalPath, File internalPath) throws IOException { + boolean containsExperimentImage = false; + if (!externalPath.exists() && !externalPath.mkdir()) { + throw new IOException("Couldn't create external experiment directory"); + } + if (!internalPath.exists() && !internalPath.mkdir()) { + throw new IOException("Couldn't create internal experiment directory"); + } + File assetsDirectory = new File(internalPath, "assets"); + if (!assetsDirectory.exists() && !assetsDirectory.mkdir()) { + throw new IOException("Couldn't create assets directory"); + } + + return Single.create(s -> { + AppSingleton.getInstance(context).onNextActivity().subscribe(activity -> { + PermissionUtils.tryRequestingPermission(activity, + PermissionUtils.REQUEST_READ_EXTERNAL_STORAGE, + new PermissionUtils.PermissionListener() { + @Override + public void onPermissionGranted() { + Boolean containsImage = false; + try { + ZipInputStream zis = new ZipInputStream( + resolver.openInputStream(data)); + ZipEntry entry = zis.getNextEntry(); + byte[] buffer = new byte[1024]; + + while (entry != null) { + String fileName = entry.getName(); + if (fileName.equals("experiment.proto") || fileName.equals( + "sensorData.proto")) { + FileOutputStream fos = new FileOutputStream( + new File(externalPath, fileName)); + readZipInputStream(zis, buffer, fos); + } else if (fileName.matches(".*jpg")) { + if (fileName.matches(COVER_IMAGE_FILE)) { + containsImage = true; + } + FileOutputStream fos = new FileOutputStream( + new File(internalPath, fileName)); + readZipInputStream(zis, buffer, fos); + } + + entry = zis.getNextEntry(); + } + zis.close(); + s.onSuccess(containsImage); + } catch (Exception e) { + s.onError(e); + } + } + + @Override + public void onPermissionDenied() { + s.onError(new IOException("Permission Denied")); + } + + @Override + public void onPermissionPermanentlyDenied() { + s.onError(new IOException("Permission Denied")); + } + }); + }); + + }); } - public static String getExperimentsRootDirectory(Context context) { - return context.getFilesDir() + "/experiments/"; + private void readZipInputStream(ZipInputStream zis, byte[] buffer, FileOutputStream fos) + throws IOException { + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + fos.close(); } - /** - * Gets the relative path to a file within an experiment. For example, if the file is - * a picture pic.png in the assets/ directory of experiment xyz, this will return just - * "assets/pic.png". If the file is not in xyz but the experimentId passed in is xyz, this will - * return an empty string. - */ - public static String getRelativePathInExperiment(String experimentId, File file) { - String absolutePath = file.getAbsolutePath(); - int start = absolutePath.indexOf(experimentId); - if (start < 0) { - // This file is not part of this experiment. - return ""; - } else { - return absolutePath.substring(start + experimentId.length() + 1); + private GoosciExperiment.Experiment populateExperimentProto(Context context, + File experimentPath) { + File experimentFile = new File(experimentPath, "experiment.proto"); + if (!experimentFile.exists()) { + return null; } + + ProtoFileHelper experimentProtoFileHelper = + new ProtoFileHelper<>(); + GoosciExperiment.Experiment proto = experimentProtoFileHelper.readFromFile(experimentFile, + GoosciExperiment.Experiment::parseFrom, + WhistlePunkApplication.getUsageTracker(context)); + + return proto; } - /** - * Gets a file in an experiment from a relative path to that file within the experiment. - */ - public static File getExperimentFile(Context context, String experimentId, - String relativePath) { - return new File(getExperimentDirectory(context, experimentId) + "/" + relativePath); + private GoosciUserMetadata.ExperimentOverview populateOverview( + GoosciExperiment.Experiment proto, String experimentId) { + GoosciUserMetadata.ExperimentOverview overview = + new GoosciUserMetadata.ExperimentOverview(); + overview.title = proto.title; + overview.trialCount = proto.totalTrials; + overview.lastUsedTimeMs = mClock.getNow(); + overview.experimentId = experimentId; + + return overview; } - /** - * Gets the relative path to the file from the user's files directory. - * This can be used to create the imagePath in UserMetadata.ExperimentOverview. - */ - public static String getRelativePathInFilesDir(String experimentId, String relativePath) { - return "experiments/" + experimentId + "/" + relativePath; + private HashMap updateTrials(GoosciExperiment.Experiment proto, + Experiment newExperiment) { + HashMap trialIdMap = new HashMap<>(); + for (int i = 0; i < proto.trials.length; i++) { + String oldId = proto.trials[i].trialId; + Trial t = Trial.fromTrialWithNewId(proto.trials[i]); + newExperiment.addTrial(t); + proto.trials[i] = t.getTrialProto(); + trialIdMap.put(oldId, proto.trials[i].trialId); + } + return trialIdMap; + } + + private void updateLabels(GoosciExperiment.Experiment proto, Experiment newExperiment) { + for (int i = 0; i < proto.labels.length; i++) { + Label label = Label.fromLabel(proto.labels[i]); + newExperiment.addLabel(label); + } } public void addMyDevice(GoosciDeviceSpec.DeviceSpec device) { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Trial.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Trial.java index 168efd5a..505f216c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Trial.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Trial.java @@ -73,6 +73,15 @@ public static Trial fromTrial(GoosciTrial.Trial trial) { return new Trial(trial); } + /** + * Populates the Trial from an existing proto, but changes the TrialId. + */ + public static Trial fromTrialWithNewId(GoosciTrial.Trial trial) { + Trial t = new Trial(trial); + t.mTrial.trialId = java.util.UUID.randomUUID().toString(); + return t; + } + /** * Invoked when recording begins to save the metadata about what's being recorded. */ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManager.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManager.java index 01e8e501..5a905b08 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManager.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/UserMetadataManager.java @@ -33,6 +33,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * Reads and writes ExperimentOverview lists @@ -50,8 +52,9 @@ public class UserMetadataManager { private static final int MINOR_VERSION = 1; private static final long WRITE_DELAY_MS = 500; - private final Handler mHandler; private final Runnable mWriteRunnable; + private final Handler mHandler; + private final ExecutorService mBackgroundWriteThread; private final long mWriteDelayMs; private boolean mNeedsWrite = false; private GoosciUserMetadata.UserMetadata mUserMetadata; @@ -75,13 +78,11 @@ public UserMetadataManager(Context context, FailureListener failureListener) { mFailureListener = failureListener; mOverviewProtoFileHelper = new ProtoFileHelper<>(); mUserMetadataFile = FileMetadataManager.getUserMetadataFile(context); + mBackgroundWriteThread = Executors.newSingleThreadExecutor(); mHandler = new Handler(); - mWriteRunnable = new Runnable() { - @Override - public void run() { - if (mNeedsWrite) { - writeUserMetadata(mUserMetadata); - } + mWriteRunnable = () -> { + if (mNeedsWrite) { + mBackgroundWriteThread.execute(() -> writeUserMetadata(mUserMetadata)); } }; mWriteDelayMs = WRITE_DELAY_MS; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java index 8f1bd17e..0e079b77 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java @@ -21,11 +21,14 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.design.widget.Snackbar; import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.DatePicker; +import com.google.android.apps.forscience.whistlepunk.AccessibilityUtils; +import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.MainActivity; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; @@ -98,6 +101,16 @@ public void onClick(View v) { WhistlePunkApplication.getPerfTrackerProvider(this).onAppInteractive(); } + @Override + protected void onResume() { + super.onResume(); + if (AppSingleton.getInstance(this).getAndClearMostRecentOpenWasImport()) { + AccessibilityUtils.makeSnackbar(mDatePicker, + getResources().getString(R.string.import_age_verification), + Snackbar.LENGTH_SHORT).show(); + } + } + public static boolean shouldShowUserAge(Context context) { if (DEBUG_AGE_VERIFIER) { return true; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelper.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelper.java index 3eb01837..883871da 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelper.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/CropHelper.java @@ -213,7 +213,7 @@ void recalculateStats(DataController dc) { } private void addReadingsToStats(final DataController dc, final TimeRange range) { - dc.getScalarReadings(mSensorId, /* tier 0 */ 0, range, + dc.getScalarReadings(mTrialId, mSensorId, /* tier 0 */ 0, range, DATAPOINTS_PER_LOAD, new MaybeConsumer() { @Override public void success(ScalarReadingList list) { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/MetaDataManager.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/MetaDataManager.java index 3a1c7b82..4ece7ec8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/MetaDataManager.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/MetaDataManager.java @@ -16,11 +16,15 @@ package com.google.android.apps.forscience.whistlepunk.metadata; +import android.content.ContentResolver; +import android.net.Uri; + import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.InputDeviceSpec; import com.google.android.apps.forscience.whistlepunk.devicemanager.ConnectableSensor; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -46,6 +50,12 @@ public interface MetaDataManager { */ void updateExperiment(Experiment experiment); + /** + * Add an existing experiment. + */ + Experiment importExperimentFromZip(Uri zipUri, ContentResolver resolver) + throws IOException; + /** * @return the list of all experiments. */ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManager.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManager.java index b8c1e8b0..06f7ab9a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManager.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/SimpleMetaDataManager.java @@ -16,12 +16,15 @@ package com.google.android.apps.forscience.whistlepunk.metadata; +import android.app.Activity; +import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteStatement; +import android.net.Uri; import android.provider.BaseColumns; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -251,6 +254,7 @@ private void updateLabelPictureAssets(Experiment experiment, Label label) { /** * Tries to migrate a label's picture assets if it is a picture label, returns true if the label * was modified. + * * @param label The label whose pictures should be migrated, if needed * @return true if the label was modified */ @@ -298,7 +302,7 @@ private List getAllExperimentIds(SQLiteDatabase db) { List experimentIds = new ArrayList<>(); Cursor cursor = null; try { - cursor = db.query(Tables.EXPERIMENTS, new String[] {ExperimentColumns.EXPERIMENT_ID}, + cursor = db.query(Tables.EXPERIMENTS, new String[]{ExperimentColumns.EXPERIMENT_ID}, null, null, null, null, null); while (cursor.moveToNext()) { experimentIds.add(cursor.getString(0)); @@ -584,6 +588,15 @@ public void updateExperiment(Experiment experiment) { getFileMetadataManager().updateExperiment(experiment); } + @Override + public Experiment importExperimentFromZip(Uri zipUri, + ContentResolver resolver) + throws IOException { + FileMetadataManager manager = getFileMetadataManager(); + return manager.importExperiment(mContext, zipUri, resolver); + + } + @Override public void saveImmediately() { getFileMetadataManager().saveImmediately(); @@ -1033,7 +1046,7 @@ public String addOrGetExternalSensor(ExternalSensorSpec sensor, private String getExternalSensorId(ExternalSensorSpec sensor, SQLiteDatabase db) { String sql = "SELECT IFNULL(MIN(" + SensorColumns.SENSOR_ID + "), '') FROM " + Tables .EXTERNAL_SENSORS + " WHERE " + SensorColumns.CONFIG + "=? AND " + - SensorColumns.TYPE + "=?"; + SensorColumns.TYPE + "=?"; SQLiteStatement statement = db.compileStatement(sql); statement.bindBlob(1, sensor.getConfig()); statement.bindString(2, sensor.getType()); @@ -1119,7 +1132,8 @@ private static class LabelQuery { private static List
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 z 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

L5m_SS4cbgnZH&id7z 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 Di&^xe diff --git a/OpenScienceJournal/whistlepunk_library/libs/jsyn.jar.README b/OpenScienceJournal/whistlepunk_library/libs/jsyn.jar.README deleted file mode 100644 index 663c577a..00000000 --- a/OpenScienceJournal/whistlepunk_library/libs/jsyn.jar.README +++ /dev/null @@ -1,9 +0,0 @@ -Version: b006311f7290fd63a789bed8a7867121aa8096f6 - -jsyn.jar is a build artefact produced by the following commands: -$ git clone https://github.com/philburk/jsyn.git -$ cd jsyn -$ export PATH=/usr/local/buildtools/java/jdk7-64/bin:$PATH -$ ant clean -$ ant dist -$ cp dist/lib/jsyn*jar $HOME/goosci/android/WhistlePunk/app/libs diff --git a/third_party/jsyn/README.google b/third_party/jsyn/README.google deleted file mode 100644 index 33fd1c40..00000000 --- a/third_party/jsyn/README.google +++ /dev/null @@ -1,10 +0,0 @@ -URL: https://github.com/philburk/jsyn/tarball/4370d8f5142e4c5fd6c61287bbf9c1901407416d -Version: 4370d8f5142e4c5fd6c61287bbf9c1901407416d -License: Apache 2.0 -License File: LICENSE - -Description: -Android integration for Java synthesizer library with unit generators - -Local Modifications: -No modifications. From 69aeb90ac4b333f72fe6a937d82ad4edd2d76266 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Mon, 2 Apr 2018 08:49:49 -0700 Subject: [PATCH 027/587] Resolve nanopb c-style -> java enum change Resolve nano namespace change Move to a single @VisibleForTesting annotation PiperOrigin-RevId: 191298468 --- .../filemetadata/ExperimentCacheTest.java | 16 ++-- .../forscience/whistlepunk/AddNoteDialog.java | 12 +-- .../whistlepunk/BuiltInSensorAppearance.java | 4 +- .../whistlepunk/CameraFragment.java | 3 +- .../whistlepunk/CommandLineSpecs.java | 4 +- .../whistlepunk/ExternalSensorAppearance.java | 4 +- .../whistlepunk/GalleryFragment.java | 2 +- .../whistlepunk/NoteViewHolder.java | 18 ++-- .../whistlepunk/PacketAssembler.java | 2 +- .../whistlepunk/RecordFragment.java | 6 +- .../whistlepunk/RecorderControllerImpl.java | 16 ++-- .../forscience/whistlepunk/Snapshotter.java | 2 +- .../whistlepunk/StatsAccumulator.java | 24 ++--- .../whistlepunk/TextToolFragment.java | 2 +- .../analytics/TrackerConstants.java | 8 +- .../api/scalarinput/InputDeviceSpec.java | 2 +- .../whistlepunk/filemetadata/Experiment.java | 8 +- .../filemetadata/ExperimentCache.java | 8 +- .../filemetadata/FileMetadataManager.java | 8 +- .../whistlepunk/filemetadata/Label.java | 30 +++--- .../filemetadata/LabelListHolder.java | 4 +- .../filemetadata/PictureLabelValue.java | 6 +- .../filemetadata/ProtoFileHelper.java | 2 +- .../filemetadata/SensorTrigger.java | 18 ++-- .../filemetadata/SensorTriggerLabelValue.java | 6 +- .../filemetadata/TextLabelValue.java | 8 +- .../whistlepunk/filemetadata/Trial.java | 4 +- .../whistlepunk/filemetadata/TrialStats.java | 2 +- .../filemetadata/UserMetadataManager.java | 2 +- .../metadata/ApplicationLabel.java | 1 + .../whistlepunk/metadata/BleSensorSpec.java | 2 +- .../whistlepunk/metadata/CropHelper.java | 3 +- .../metadata/EditTriggerFragment.java | 56 +++++------ .../metadata/ExternalSensorSpec.java | 2 +- .../whistlepunk/metadata/MetaDataManager.java | 1 + .../whistlepunk/metadata/Project.java | 2 +- .../whistlepunk/metadata/RunStats.java | 19 ++-- .../metadata/SimpleMetaDataManager.java | 40 +++++--- .../whistlepunk/metadata/TriggerHelper.java | 18 ++-- .../project/ExperimentListFragment.java | 6 +- .../experiment/ExperimentDetailItem.java | 8 +- .../experiment/ExperimentDetailsFragment.java | 24 ++--- .../whistlepunk/review/PinnedNoteAdapter.java | 10 +- .../whistlepunk/review/RunReviewFragment.java | 4 +- .../whistlepunk/review/ZoomPresenter.java | 18 ++-- .../review/labels/LabelDetailsActivity.java | 12 +-- .../whistlepunk/sensorapi/ScalarSensor.java | 6 +- .../sensors/BleProtocolVersion.java | 2 +- .../whistlepunk/sensors/BluetoothSensor.java | 2 +- .../BuiltInSensorAppearanceTest.java | 4 +- .../whistlepunk/RecorderControllerTest.java | 4 +- .../SensorAppearanceProviderImplTest.java | 4 +- .../whistlepunk/StatsAccumulatorTest.java | 10 +- .../filemetadata/ExperimentTest.java | 6 +- .../filemetadata/FileMetadataManagerTest.java | 6 +- .../whistlepunk/filemetadata/LabelTest.java | 32 +++---- .../filemetadata/LabelValueTest.java | 2 +- .../filemetadata/SensorTriggerTest.java | 96 +++++++++---------- .../filemetadata/TrialStatsTest.java | 28 +++--- .../whistlepunk/filemetadata/TrialTest.java | 14 +-- .../filemetadata/TrialUnitTest.java | 8 +- .../whistlepunk/metadata/CropHelperTest.java | 8 +- .../metadata/SimpleMetaDataManagerTest.java | 12 +-- .../whistlepunk/review/ZoomPresenterTest.java | 26 ++--- .../scalarchart/ChartDataTest.java | 8 +- .../sensorapi/ScalarSensorTest.java | 8 +- .../sensordb/InMemorySensorDatabase.java | 2 +- 67 files changed, 380 insertions(+), 365 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java b/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java index 52ef01dd..87f4003a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java @@ -173,7 +173,7 @@ public void testUpgradeStartsWriteTimer() { assertEquals(1, proto.fileVersion.version); assertEquals(1, proto.fileVersion.minorVersion); assertEquals(1, proto.fileVersion.platformVersion); - assertEquals(GoosciGadgetInfo.GadgetInfo.ANDROID, proto.fileVersion.platform); + assertEquals(GoosciGadgetInfo.GadgetInfo.Platform.ANDROID, proto.fileVersion.platform); assertTrue(cache.needsWrite()); } @@ -187,7 +187,7 @@ public void testUpgradeWhenVersionMissing() { assertEquals(1, proto.fileVersion.version); assertEquals(1, proto.fileVersion.minorVersion); assertEquals(1, proto.fileVersion.platformVersion); - assertEquals(GoosciGadgetInfo.GadgetInfo.ANDROID, proto.fileVersion.platform); + assertEquals(GoosciGadgetInfo.GadgetInfo.Platform.ANDROID, proto.fileVersion.platform); } public void testNoUpgradeDoesNotStartWriteTimer() { @@ -237,13 +237,13 @@ public void testUpgradesToMinor2() { proto.fileVersion.version = 1; proto.fileVersion.minorVersion = 1; proto.fileVersion.platformVersion = 2; - proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.ANDROID; + proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.ANDROID; cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), 1, 2, 500); assertEquals(proto.fileVersion.version, 1); assertEquals(proto.fileVersion.minorVersion, 2); assertEquals(proto.fileVersion.platformVersion, 500); - assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.ANDROID); + assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); } public void testDontDowngradePlatform() { @@ -253,13 +253,13 @@ public void testDontDowngradePlatform() { proto.fileVersion.version = 1; proto.fileVersion.minorVersion = 2; proto.fileVersion.platformVersion = 1000; - proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.ANDROID; + proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.ANDROID; cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), 1, 2, 500); assertEquals(proto.fileVersion.version, 1); assertEquals(proto.fileVersion.minorVersion, 2); assertEquals(proto.fileVersion.platformVersion, 1000); - assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.ANDROID); + assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); } public void testChangePlatformToAndroid() { @@ -269,13 +269,13 @@ public void testChangePlatformToAndroid() { proto.fileVersion.version = 1; proto.fileVersion.minorVersion = 1; proto.fileVersion.platformVersion = 1000; - proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.IOS; + proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.IOS; cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), 1, 2, 500); assertEquals(proto.fileVersion.version, 1); assertEquals(proto.fileVersion.minorVersion, 2); assertEquals(proto.fileVersion.platformVersion, 500); - assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.ANDROID); + assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); } public void testOnlyUpgradesPlatformVersion() { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java index a68d00af..0d56eed0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java @@ -250,13 +250,13 @@ private LinearLayout createAddNoteViewFromSavedState(Bundle savedInstanceState, if (getArguments().containsKey(KEY_SAVED_VALUE)) { Label savedLabel = getArguments().getParcelable(KEY_SAVED_VALUE); if (savedLabel != null) { - if (savedLabel.getType() == GoosciLabel.Label.TEXT) { + if (savedLabel.getType() == GoosciLabel.Label.ValueType.TEXT) { // Text labels don't use the caption field. text = savedLabel.getTextLabelValue().text; } else { text = savedLabel.getCaptionText(); } - if (savedLabel.getType() == GoosciLabel.Label.PICTURE) { + if (savedLabel.getType() == GoosciLabel.Label.ValueType.PICTURE) { mPictureLabelPath = savedLabel.getPictureLabelValue().filePath; } mUuid = savedLabel.getLabelId(); @@ -382,13 +382,13 @@ private Label getCurrentValue() { GoosciCaption.Caption caption = new GoosciCaption.Caption(); caption.text = mInput.getText().toString(); caption.lastEditedTimestamp = timestamp; - return Label.newLabelWithValue(timestamp, GoosciLabel.Label.PICTURE, + return Label.newLabelWithValue(timestamp, GoosciLabel.Label.ValueType.PICTURE, labelValue, caption); } else { GoosciTextLabelValue.TextLabelValue labelValue = new GoosciTextLabelValue.TextLabelValue(); labelValue.text = mInput.getText().toString(); - return Label.newLabelWithValue(timestamp, GoosciLabel.Label.TEXT, labelValue, null); + return Label.newLabelWithValue(timestamp, GoosciLabel.Label.ValueType.TEXT, labelValue, null); } } @@ -430,7 +430,7 @@ private boolean addTextLabel(Experiment experiment) { GoosciTextLabelValue.TextLabelValue labelValue = new GoosciTextLabelValue.TextLabelValue(); labelValue.text = text; mInput.setText(""); - Label label = Label.newLabelWithValue(mTimestamp, GoosciLabel.Label.TEXT, + Label label = Label.newLabelWithValue(mTimestamp, GoosciLabel.Label.ValueType.TEXT, labelValue, null); addLabel(label, getDataController(mInput.getContext()), experiment, mInput.getContext()); return true; @@ -444,7 +444,7 @@ private boolean addPictureLabel(Experiment experiment) { GoosciPictureLabelValue.PictureLabelValue labelValue = new GoosciPictureLabelValue .PictureLabelValue(); labelValue.filePath = mPictureLabelPath; - Label label = Label.fromUuidAndValue(mTimestamp, mUuid, GoosciLabel.Label.PICTURE, + Label label = Label.fromUuidAndValue(mTimestamp, mUuid, GoosciLabel.Label.ValueType.PICTURE, labelValue); GoosciCaption.Caption caption = new GoosciCaption.Caption(); caption.text = mInput.getText().toString(); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearance.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearance.java index f9c78776..98de1dc8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearance.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/BuiltInSensorAppearance.java @@ -170,7 +170,7 @@ public String getSecondParagraph() { @Override public GoosciIcon.IconPath getSmallIconPath() { GoosciIcon.IconPath path = new GoosciIcon.IconPath(); - path.type = GoosciIcon.IconPath.BUILTIN; + path.type = GoosciIcon.IconPath.PathType.BUILTIN; path.pathString = Preconditions.checkNotNull(mBuiltInSensorId); return path; } @@ -178,7 +178,7 @@ public GoosciIcon.IconPath getSmallIconPath() { @Override public GoosciIcon.IconPath getLargeIconPath() { GoosciIcon.IconPath path = new GoosciIcon.IconPath(); - path.type = GoosciIcon.IconPath.BUILTIN; + path.type = GoosciIcon.IconPath.PathType.BUILTIN; path.pathString = Preconditions.checkNotNull(mBuiltInSensorId); return path; } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java index ea5d9e9b..0befa01d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CameraFragment.java @@ -43,7 +43,6 @@ import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.PublishSubject; - public class CameraFragment extends PanesToolFragment { private final BehaviorSubject> mPreviewContainer = BehaviorSubject.create(); private BehaviorSubject mPermissionGranted = BehaviorSubject.create(); @@ -144,7 +143,7 @@ public void success(String relativePicturePath) { new GoosciPictureLabelValue.PictureLabelValue(); labelValue.filePath = relativePicturePath; Label label = Label.fromUuidAndValue(timestamp, uuid, - GoosciLabel.Label.PICTURE, labelValue); + GoosciLabel.Label.ValueType.PICTURE, labelValue); mListener.onPictureLabelTaken(label); } }); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CommandLineSpecs.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CommandLineSpecs.java index a38fdc79..513a49c2 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CommandLineSpecs.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/CommandLineSpecs.java @@ -57,9 +57,9 @@ public static List buildLayouts(String sensorId private static int findCardView(String side) { if (Objects.equals(PARAM_METER, side)) { - return GoosciSensorLayout.SensorLayout.METER; + return GoosciSensorLayout.SensorLayout.CardView.METER; } else { - return GoosciSensorLayout.SensorLayout.GRAPH; + return GoosciSensorLayout.SensorLayout.CardView.GRAPH; } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ExternalSensorAppearance.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ExternalSensorAppearance.java index 4bdf94f0..fdd8dbe4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ExternalSensorAppearance.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ExternalSensorAppearance.java @@ -51,7 +51,7 @@ public String getName(Context context) { @Override public GoosciIcon.IconPath getSmallIconPath() { GoosciIcon.IconPath path = new GoosciIcon.IconPath(); - path.type = GoosciIcon.IconPath.LEGACY_ANDROID_BLE; + path.type = GoosciIcon.IconPath.PathType.LEGACY_ANDROID_BLE; path.pathString = String.valueOf(mKind); return path; } @@ -59,7 +59,7 @@ public GoosciIcon.IconPath getSmallIconPath() { @Override public GoosciIcon.IconPath getLargeIconPath() { GoosciIcon.IconPath path = new GoosciIcon.IconPath(); - path.type = GoosciIcon.IconPath.LEGACY_ANDROID_BLE; + path.type = GoosciIcon.IconPath.PathType.LEGACY_ANDROID_BLE; path.pathString = String.valueOf(mKind); return path; } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java index 11b540c2..5a97f2b6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/GalleryFragment.java @@ -184,7 +184,7 @@ public void attachAddButton(View rootView) { } mListener.getActiveExperimentId().firstElement().subscribe(experimentId -> { - Label result = Label.newLabel(timestamp, GoosciLabel.Label.PICTURE); + Label result = Label.newLabel(timestamp, GoosciLabel.Label.ValueType.PICTURE); File imageFile = PictureUtils.createImageFile(getActivity(), experimentId, result.getLabelId()); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/NoteViewHolder.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/NoteViewHolder.java index 248c8247..531d7a14 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/NoteViewHolder.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/NoteViewHolder.java @@ -65,7 +65,7 @@ public NoteViewHolder(View v) { } public void setNote(Label label, String experimentId) { - if (label.getType() == GoosciLabel.Label.TEXT) { + if (label.getType() == GoosciLabel.Label.ValueType.TEXT) { String text = label.getTextLabelValue().text; image.setVisibility(View.GONE); // No caption, and no caption edit button. @@ -86,7 +86,7 @@ public void setNote(Label label, String experimentId) { setupCaption(label.getCaptionText()); } - if (label.getType() == GoosciLabel.Label.PICTURE) { + if (label.getType() == GoosciLabel.Label.ValueType.PICTURE) { GoosciPictureLabelValue.PictureLabelValue labelValue = label.getPictureLabelValue(); image.setVisibility(View.VISIBLE); PictureUtils.loadExperimentImage(image.getContext(), image, experimentId, @@ -96,14 +96,14 @@ public void setNote(Label label, String experimentId) { image.setVisibility(View.GONE); } - if (label.getType() != GoosciLabel.Label.SENSOR_TRIGGER && - label.getType() != GoosciLabel.Label.SNAPSHOT) { + if (label.getType() != GoosciLabel.Label.ValueType.SENSOR_TRIGGER && + label.getType() != GoosciLabel.Label.ValueType.SNAPSHOT) { valuesList.setVisibility(View.GONE); } else { - if (label.getType() == GoosciLabel.Label.SENSOR_TRIGGER) { + if (label.getType() == GoosciLabel.Label.ValueType.SENSOR_TRIGGER) { loadTriggerIntoList(valuesList, label); } - if (label.getType() == GoosciLabel.Label.SNAPSHOT) { + if (label.getType() == GoosciLabel.Label.ValueType.SNAPSHOT) { loadSnapshotsIntoList(valuesList, label); } } @@ -234,12 +234,12 @@ private static SensorAppearance getSensorAppearance( return new ProtoSensorAppearance(appearance); } switch (iconPath.type) { - case GoosciIcon.IconPath.BUILTIN: + case GoosciIcon.IconPath.PathType.BUILTIN: return appearanceProvider.getAppearance(iconPath.pathString); - case GoosciIcon.IconPath.LEGACY_ANDROID_BLE: + case GoosciIcon.IconPath.PathType.LEGACY_ANDROID_BLE: return SensorTypeProvider.getSensorAppearance(Integer.valueOf(iconPath.pathString), ""); - case GoosciIcon.IconPath.PROTO: + case GoosciIcon.IconPath.PathType.PROTO: return new ProtoSensorAppearance(appearance); } return null; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PacketAssembler.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PacketAssembler.java index 617f496d..e4528711 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PacketAssembler.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/PacketAssembler.java @@ -20,7 +20,7 @@ import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensor; import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; -import com.google.common.annotations.VisibleForTesting; +import androidx.annotation.VisibleForTesting; import com.google.protobuf.nano.InvalidProtocolBufferNanoException; import java.io.ByteArrayOutputStream; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java index 8506233e..e96e5350 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecordFragment.java @@ -87,7 +87,7 @@ public class RecordFragment extends PanesToolFragment implements Handler.Callbac private static final String KEY_SAVED_RECYCLER_LAYOUT = "savedRecyclerLayout"; private static final String KEY_EXPERIMENT_ID = "experimentId"; - private static final int DEFAULT_CARD_VIEW = GoosciSensorLayout.SensorLayout.METER; + private static final int DEFAULT_CARD_VIEW = GoosciSensorLayout.SensorLayout.CardView.METER; private static final boolean DEFAULT_AUDIO_ENABLED = false; private static final boolean DEFAULT_SHOW_STATS_OVERLAY = false; @@ -945,7 +945,7 @@ private void processAddedLabel(AddedLabelEvent event) { refreshLabels(status); ensureUnarchived(mSelectedExperiment, getDataController()); // Trigger labels are logged in RecorderControllerImpl. - if (!(label.getType() == GoosciLabel.Label.SENSOR_TRIGGER)) { + if (!(label.getType() == GoosciLabel.Label.ValueType.SENSOR_TRIGGER)) { String trackerLabel = status.isRecording() ? TrackerConstants.LABEL_RECORD : TrackerConstants.LABEL_OBSERVE; WhistlePunkApplication.getUsageTracker(getActivity()) @@ -1145,7 +1145,7 @@ private void doVisualAlert(SensorTrigger trigger) { presenter.onSensorTriggerFired(); // Only need to do a snackbar for off-screen visual alerts. - if (!trigger.hasAlertType(TriggerInformation.TRIGGER_ALERT_VISUAL)) { + if (!trigger.hasAlertType(TriggerInformation.TriggerAlertType.TRIGGER_ALERT_VISUAL)) { return; } // If a snackbar is already being shown, don't show a new one. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerImpl.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerImpl.java index ea66aefa..7dd3bfec 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerImpl.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/RecorderControllerImpl.java @@ -255,7 +255,7 @@ private void fireSensorTrigger(SensorTrigger trigger, long timestamp, // regarding start/stop recording and notes. Right now behavior may not seem repeatable // depending on timing of callbacks and order of triggers. b/ boolean triggerWasFired = false; - if (trigger.getActionType() == TriggerInformation.TRIGGER_ACTION_START_RECORDING && + if (trigger.getActionType() == TriggerInformation.TriggerActionType.TRIGGER_ACTION_START_RECORDING && !isRecording() && getSelectedExperiment() != null) { if (!mRecordingStateChangeInProgress) { triggerWasFired = true; @@ -270,7 +270,7 @@ private void fireSensorTrigger(SensorTrigger trigger, long timestamp, TrackerConstants.CATEGORY_RUNS, TrackerConstants.ACTION_TRY_RECORDING_FROM_TRIGGER, null, 0); } - } else if (trigger.getActionType() == TriggerInformation.TRIGGER_ACTION_STOP_RECORDING && + } else if (trigger.getActionType() == TriggerInformation.TriggerActionType.TRIGGER_ACTION_STOP_RECORDING && isRecording()) { if (!mRecordingStateChangeInProgress) { triggerWasFired = true; @@ -283,17 +283,17 @@ private void fireSensorTrigger(SensorTrigger trigger, long timestamp, TrackerConstants.CATEGORY_RUNS, TrackerConstants.ACTION_TRY_STOP_RECORDING_FROM_TRIGGER, null, 0); } - } else if (trigger.getActionType() == TriggerInformation.TRIGGER_ACTION_NOTE) { + } else if (trigger.getActionType() == TriggerInformation.TriggerActionType.TRIGGER_ACTION_NOTE) { triggerWasFired = true; addTriggerLabel(timestamp, trigger, sensorRegistry); - } else if (trigger.getActionType() == TriggerInformation.TRIGGER_ACTION_ALERT) { + } else if (trigger.getActionType() == TriggerInformation.TriggerActionType.TRIGGER_ACTION_ALERT) { if (trigger.getAlertTypes().length > 0) { triggerWasFired = true; } - if (trigger.hasAlertType(TriggerInformation.TRIGGER_ALERT_PHYSICAL)) { + if (trigger.hasAlertType(TriggerInformation.TriggerAlertType.TRIGGER_ALERT_PHYSICAL)) { getTriggerHelper().doVibrateAlert(mContext); } - if (trigger.hasAlertType(TriggerInformation.TRIGGER_ALERT_AUDIO)) { + if (trigger.hasAlertType(TriggerInformation.TriggerAlertType.TRIGGER_ALERT_AUDIO)) { getTriggerHelper().doAudioAlert(mContext); } // Visual alerts are not covered in RecorderControllerImpl. @@ -331,7 +331,7 @@ private void addTriggerLabel(long timestamp, SensorTrigger trigger, } labelValue.sensor = getSensorSpec(trigger.getSensorId(), sensorRegistry); final Label triggerLabel = Label.newLabelWithValue(timestamp, - GoosciLabel.Label.SENSOR_TRIGGER, labelValue, caption); + GoosciLabel.Label.ValueType.SENSOR_TRIGGER, labelValue, caption); if (isRecording()) { // Adds the label to the trial and saves the updated experiment. getSelectedExperiment().getTrial(mCurrentTrialId).addLabel(triggerLabel); @@ -792,7 +792,7 @@ String getLayoutLoggingString(String loggingId, GoosciSensorLayout.SensorLayout StringBuilder builder = new StringBuilder(); builder.append(loggingId); builder.append("|"); - builder.append(layout.cardView == GoosciSensorLayout.SensorLayout.METER ? "meter" : + builder.append(layout.cardView == GoosciSensorLayout.SensorLayout.CardView.METER ? "meter" : "graph"); builder.append("|"); builder.append(layout.audioEnabled ? "audioOn" : "audioOff"); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/Snapshotter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/Snapshotter.java index 456b600f..6e27a195 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/Snapshotter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/Snapshotter.java @@ -55,7 +55,7 @@ public Single

+ * Most callers that need the current account should use + * {@link #getObservableCurrentAccount} instead of this method. This method should only be used + * in cases where observing the current account is not feasible. + * + * @return the current account + */ + // TODO(b/78523529): Remove this method. Use getObservableCurrentAccount instead. + AppAccount getCurrentAccount(); + + /** + * Returns an {@link Observable} that publishes the current account. + *

+ * This is the preferred way to access the current account. + * + * @return an {@link Observable} that publishes the current account. + */ + Observable getObservableCurrentAccount(); + + /** + * Sets whether claim experiments mode is on or off. + */ + void setClaimExperimentsMode(boolean claimExperimentsMode); + + /** + * @return whether claim experiments mode is on or off. + */ + boolean getClaimExperimentsMode(); + + /** + * @return the current account, ignoring whether claim experiments mode is on or off. This is + * intented to be used during the transition from non-signed-in to signed-in. + */ + AppAccount getCurrentAccountIgnoringClaimExperimentsMode(); +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/AppAccount.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/AppAccount.java new file mode 100644 index 00000000..d359303d --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/AppAccount.java @@ -0,0 +1,44 @@ +/* + * Copyright 2018 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.forscience.whistlepunk.accounts; + +import java.io.File; + +/** + * An interface which represents an account. + */ +public interface AppAccount { + /** + * Returns true if this account is a signed-in account. + */ + boolean isSignedIn(); + + /** + * Returns the root directory for this account. + */ + File getFilesDir(); + + /** + * Returns the file name of the database with the given name for this account. + */ + String getDatabaseFileName(String name); + + /** + * Returns the preference key, combining the given prefKey with this account. + */ + String getPreferenceKey(String prefKey); +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/NonSignedInAccount.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/NonSignedInAccount.java new file mode 100644 index 00000000..49601853 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/NonSignedInAccount.java @@ -0,0 +1,65 @@ +package com.google.android.apps.forscience.whistlepunk.accounts; + +import android.content.Context; + +import java.io.File; + +/** + * An implementation of {@link AppAccount} representing a user with no signed-in account. + *

+ * File data, database data, and user preferences for are stored in the same places as they were + * before accounts were supported. + */ +public final class NonSignedInAccount implements AppAccount { + private static NonSignedInAccount instance; + + private final Context applicationContext; + + public static NonSignedInAccount getInstance(Context context) { + if (instance == null) { + instance = new NonSignedInAccount(context); + } + return instance; + } + + private NonSignedInAccount(Context context) { + applicationContext = context.getApplicationContext(); + } + + @Override + public boolean isSignedIn() { + return false; + } + + @Override + public File getFilesDir() { + return applicationContext.getFilesDir(); + } + + @Override + public String getDatabaseFileName(String name) { + return name; + } + + @Override + public String getPreferenceKey(String prefKey) { + return prefKey; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + // All NonSignedInAccount instances are equal. + return true; + } + + @Override + public int hashCode() { + return 42; + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/NonSignedInAccountsProvider.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/NonSignedInAccountsProvider.java new file mode 100644 index 00000000..3733e07f --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/accounts/NonSignedInAccountsProvider.java @@ -0,0 +1,68 @@ +/* + * Copyright 2018 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.forscience.whistlepunk.accounts; + +import android.app.Activity; +import android.content.Context; +import androidx.fragment.app.FragmentActivity; + +import com.google.android.apps.forscience.whistlepunk.ActivityWithNavigationView; +import com.google.android.apps.forscience.whistlepunk.R; + +/** + * An accounts provider which supports a user with no signed-in account. + */ +public final class NonSignedInAccountsProvider extends AbstractAccountsProvider { + public NonSignedInAccountsProvider(Context context) { + super(context); + setCurrentAccount(NonSignedInAccount.getInstance(context)); + } + + @Override + public boolean supportSignedInAccount() { + return false; + } + + @Override + public boolean requireSignedInAccount() { + return false; + } + + @Override + public int getAccountCount() { + return 0; + } + + @Override + public void setContentView(ActivityWithNavigationView activity) { + activity.setContentView(R.layout.activity_main); + } + + @Override + public void onStop(ActivityWithNavigationView activity) { + } + + @Override + public void showAddAccountDialog(Activity activity) { + throw new IllegalStateException("Accounts not supported"); + } + + @Override + public void showAccountSwitcherDialog(FragmentActivity fragmentActivity) { + throw new IllegalStateException("Accounts not supported"); + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java index 8ae6c8f1..0d8d63d9 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/FileMetadataManager.java @@ -36,6 +36,7 @@ import com.google.android.apps.forscience.whistlepunk.ProtoUtils; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; +import com.google.android.apps.forscience.whistlepunk.accounts.AppAccount; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciDeviceSpec; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciGadgetInfo; import com.google.android.apps.forscience.whistlepunk.intro.AgeVerifier; @@ -129,7 +130,25 @@ public void onNewerVersionDetected() { .getIntArray(R.array.experiment_colors_array).length); } + /** + * Returns the files directory for the given account. This method should be used instead of + * context.getFilesDir(). + */ + public static File getFilesDir(AppAccount appAccount) { + return appAccount.getFilesDir(); + } + + /** + * Returns the files directory for the current account. + */ + // TODO(b/78523388): Remove this method. Use getFilesDir(Context, AppAcount) instead. + public static File getFilesDir(Context context) { + return getFilesDir(WhistlePunkApplication.getAppServices(context) + .getAccountsProvider().getCurrentAccount()); + } + public static File getUserMetadataFile(Context context) { + // TODO(lizlooney): Replace context.getFilesDir() with getFilesDir(context). return new File(context.getFilesDir(), USER_METADATA_FILE); } @@ -142,6 +161,7 @@ public static File getExperimentDirectory(Context context, String experimentId) } public static File getExperimentsRootDirectory(Context context) { + // TODO(lizlooney): Replace context.getFilesDir() with getFilesDir(context). return new File(context.getFilesDir(), "experiments"); } @@ -167,6 +187,7 @@ public static String getRelativePathInExperiment(String experimentId, File file) } public static String getExperimentExportDirectory(Context context) throws IOException { + // TODO(lizlooney): Replace context.getFilesDir() with getFilesDir(context). File dir = new File(context.getFilesDir(), "exported_experiments"); if (!dir.exists() && !dir.mkdir()) { throw new IOException("Can't create experiments directory"); @@ -240,6 +261,8 @@ public void success( if (!experiment.getExperimentOverview().imagePath.isEmpty ()) { + // TODO(lizlooney): Replace context.getFilesDir() with + // getFilesDir(context). File experimentImage = new File(context.getFilesDir(), experiment.getExperimentOverview().imagePath); zipExperimentImage(experimentImage, zos); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/NonSignedInAccountsModule.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/NonSignedInAccountsModule.java new file mode 100644 index 00000000..6b317f4f --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/NonSignedInAccountsModule.java @@ -0,0 +1,20 @@ +package com.google.android.apps.forscience.whistlepunk.modules; + +import android.content.Context; + +import com.google.android.apps.forscience.whistlepunk.accounts.AccountsProvider; +import com.google.android.apps.forscience.whistlepunk.accounts.NonSignedInAccountsProvider; + +import dagger.Module; +import dagger.Provides; + +/** + * Creates an accounts provider which is backed by an artificial non-signed-in account. + */ +@Module +public class NonSignedInAccountsModule { + @Provides + AccountsProvider provideAccountsProvider(Context context) { + return new NonSignedInAccountsProvider(context); + } +} From 8e0c20b39177190f8dd0bf5bcd542f63622df50e Mon Sep 17 00:00:00 2001 From: Mike Vanne Date: Wed, 25 Apr 2018 06:32:09 -0700 Subject: [PATCH 046/587] Add the ability to export sensor data to separate files per sensor/trial. PiperOrigin-RevId: 194231733 --- .../sensorapi/ScalarSensorDumpReader.java | 37 ++++++++- .../whistlepunk/sensordb/SensorDatabase.java | 10 ++- .../sensordb/SensorDatabaseImpl.java | 20 +++-- .../sensorapi/ScalarSensorDumpReaderTest.java | 76 ++++++++++++++++++- .../sensordb/SensorDatabaseTest.java | 36 ++++++++- .../sensordb/InMemorySensorDatabase.java | 33 ++++---- 6 files changed, 181 insertions(+), 31 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReader.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReader.java index e8b38835..0afdb3f7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReader.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReader.java @@ -17,13 +17,11 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; import android.util.Log; - import com.google.android.apps.forscience.whistlepunk.BatchDataController; -import com.google.android.apps.forscience.whistlepunk.DataControllerImpl; import com.google.android.apps.forscience.whistlepunk.RecordingDataController; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciScalarSensorData; - import java.io.IOException; +import java.util.List; import java.util.Map; /* @@ -63,6 +61,37 @@ public void readData(GoosciScalarSensorData.ScalarSensorData scalarSensorData, M } } + public void readData(List scalarSensorData) { + int zoomBufferSize = mZoomLevelBetweenTiers * 2; + for (GoosciScalarSensorData.ScalarSensorDataDump sensor : scalarSensorData) { + ZoomRecorder zoomRecorder = new ZoomRecorder(sensor.tag, zoomBufferSize, 1); + String trialId = sensor.trialId; + zoomRecorder.setTrialId(trialId); + try (BatchDataController batchController = new BatchDataController(mDataController)) { + addAllRows(sensor, zoomRecorder, trialId, batchController); + batchController.flushScalarReadings(); + } catch (IOException ioe) { + Log.e(TAG, "Exception while flushing BatchDataController", ioe); + } + mLastDataTimestampMillis = NO_DATA_RECORDED; + } + } + + public void readData(GoosciScalarSensorData.ScalarSensorDataDump sensor) { + int zoomBufferSize = mZoomLevelBetweenTiers * 2; + + ZoomRecorder zoomRecorder = new ZoomRecorder(sensor.tag, zoomBufferSize, 1); + String trialId = sensor.trialId; + zoomRecorder.setTrialId(trialId); + try (BatchDataController batchController = new BatchDataController(mDataController)) { + addAllRows(sensor, zoomRecorder, trialId, batchController); + batchController.flushScalarReadings(); + } catch (IOException ioe) { + Log.e(TAG, "Exception while flushing BatchDataController", ioe); + } + mLastDataTimestampMillis = NO_DATA_RECORDED; + } + private void addAllRows(GoosciScalarSensorData.ScalarSensorDataDump sensor, ZoomRecorder zoomRecorder, String trialId, RecordingDataController batchController) { for (GoosciScalarSensorData.ScalarSensorDataRow row : sensor.rows) { @@ -96,4 +125,4 @@ private void recordData(RecordingDataController batchController, ZoomRecorder zo zoomRecorder.addData(timestampMillis, value, batchController); batchController.addScalarReading(trialId, tag, 0, timestampMillis, value); } -} \ No newline at end of file +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabase.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabase.java index d09b4304..464a422b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabase.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabase.java @@ -19,10 +19,8 @@ import com.google.android.apps.forscience.whistlepunk.BatchInsertScalarReading; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciScalarSensorData; - -import java.util.List; - import io.reactivex.Observable; +import java.util.List; /** * Stores and retrieves sensor data from on-device storage. All access should be be from a single @@ -81,4 +79,10 @@ Observable createScalarObservable(String trialId, String[] sensor GoosciScalarSensorData.ScalarSensorData getScalarReadingProtos( GoosciExperiment.Experiment experiment); + /** + * Get an ArrayList of ScalarSensorDataDump protos that contains all of the sensor data for the + * given experiment. Primarily used for drive sync. + */ + List getScalarReadingProtosAsList( + GoosciExperiment.Experiment experiment); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java index b91bf218..e4bc662a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java @@ -23,7 +23,6 @@ import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.VisibleForTesting; import androidx.core.util.Pair; - import com.google.android.apps.forscience.whistlepunk.BatchInsertScalarReading; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; @@ -36,13 +35,11 @@ import com.google.common.collect.BoundType; import com.google.common.collect.DiscreteDomain; import com.google.common.collect.Range; - -import java.util.ArrayList; -import java.util.List; - import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; +import java.util.ArrayList; +import java.util.List; public class SensorDatabaseImpl implements SensorDatabase { private static class DbVersions { @@ -327,6 +324,15 @@ public GoosciScalarSensorData.ScalarSensorData getScalarReadingProtos( GoosciExperiment.Experiment experiment) { GoosciScalarSensorData.ScalarSensorData data = new GoosciScalarSensorData.ScalarSensorData(); + List sensorDataList = + getScalarReadingProtosAsList(experiment); + data.sensors = sensorDataList.toArray(GoosciScalarSensorData.ScalarSensorDataDump.emptyArray()); + return data; + } + + @Override + public List getScalarReadingProtosAsList( + GoosciExperiment.Experiment experiment) { ArrayList sensorDataList = new ArrayList<>(); for (GoosciTrial.Trial trial : experiment.trials) { GoosciTrial.Range range = trial.recordingRange; @@ -339,9 +345,7 @@ public GoosciScalarSensorData.ScalarSensorData getScalarReadingProtos( } } } - data.sensors = sensorDataList.toArray( - GoosciScalarSensorData.ScalarSensorDataDump.emptyArray()); - return data; + return sensorDataList; } // This method gets the protos for a single sensor/trialID combination in the given diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReaderTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReaderTest.java index c995fe38..e5192290 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReaderTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensorDumpReaderTest.java @@ -81,4 +81,78 @@ public void testDataSuccessfullyWritten() { readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 4, 0); assertEquals(0, readings.size()); } -} \ No newline at end of file + + @Test + public void testDataSuccessfullyWrittenArrayList() { + GoosciScalarSensorData.ScalarSensorDataDump sensor = + new GoosciScalarSensorData.ScalarSensorDataDump(); + sensor.tag = "foo"; + sensor.trialId = "id"; + ArrayList rowList = populateRowList(); + ArrayList sensorList = new ArrayList<>(); + HashMap idMap = new HashMap<>(); + idMap.put("id", "id"); + sensor.rows = rowList.toArray(GoosciScalarSensorData.ScalarSensorDataRow.emptyArray()); + sensorList.add(sensor); + + ScalarSensorDumpReader reader = new ScalarSensorDumpReader(mRecordingController); + reader.readData(sensorList); + + ScalarReadingList readings = + mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 0, 0); + assertEquals(10000, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 1, 0); + assertEquals(500, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 2, 0); + assertEquals(26, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 3, 0); + assertEquals(2, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 4, 0); + assertEquals(0, readings.size()); + } + + @Test + public void testDataSuccessfullyWrittenSingleSensor() { + GoosciScalarSensorData.ScalarSensorDataDump sensor = + new GoosciScalarSensorData.ScalarSensorDataDump(); + sensor.tag = "foo"; + sensor.trialId = "id"; + ArrayList rowList = populateRowList(); + sensor.rows = rowList.toArray(GoosciScalarSensorData.ScalarSensorDataRow.emptyArray()); + + ScalarSensorDumpReader reader = new ScalarSensorDumpReader(mRecordingController); + reader.readData(sensor); + + ScalarReadingList readings = + mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 0, 0); + assertEquals(10000, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 1, 0); + assertEquals(500, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 2, 0); + assertEquals(26, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 3, 0); + assertEquals(2, readings.size()); + + readings = mDb.getScalarReadings("id", "foo", TimeRange.oldest(Range.all()), 4, 0); + assertEquals(0, readings.size()); + } + + private ArrayList populateRowList() { + ArrayList rowList = new ArrayList<>(); + for (int x = 1; x <= 10000; x++) { + GoosciScalarSensorData.ScalarSensorDataRow row = + new GoosciScalarSensorData.ScalarSensorDataRow(); + row.timestampMillis = x; + row.value = x * 100; + rowList.add(row); + } + return rowList; + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseTest.java b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseTest.java index 6d8aa3f5..0cf7c26d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/robolectricTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseTest.java @@ -377,6 +377,40 @@ public void testGetScalarReadingSensorProtosEmptyResult() { assertEquals(0, sensor.rows.length); } + @Test + public void testGetScalarReadingProtosAsList() { + SensorDatabaseImpl db = new SensorDatabaseImpl(getContext(), TEST_DATABASE_NAME); + long timestamp = Arbitrary.integer(); + double value = Arbitrary.doubleFloat(); + + GoosciExperiment.Experiment experiment = new GoosciExperiment.Experiment(); + GoosciTrial.Trial trial = new GoosciTrial.Trial(); + GoosciSensorLayout.SensorLayout sensorLayout = new GoosciSensorLayout.SensorLayout(); + sensorLayout.sensorId = "foo"; + GoosciTrial.Range range = new GoosciTrial.Range(); + range.startMs = timestamp - 1; + range.endMs = timestamp + 3; + trial.recordingRange = range; + GoosciSensorLayout.SensorLayout[] layoutArray = new GoosciSensorLayout.SensorLayout[1]; + layoutArray[0] = sensorLayout; + trial.sensorLayouts = layoutArray; + GoosciTrial.Trial[] trialArray = new GoosciTrial.Trial[1]; + trialArray[0] = trial; + experiment.trials = trialArray; + + db.addScalarReading(trial.trialId, "foo", 0, timestamp, value); + db.addScalarReading(trial.trialId, "foo", 1, timestamp + 1, value); + db.addScalarReading(trial.trialId, "foo", 0, timestamp + 2, value); + db.addScalarReading(trial.trialId, "bar", 0, timestamp + 2, value); + db.addScalarReading(trial.trialId, "foo", 0, timestamp + 4, value); + + List data = + db.getScalarReadingProtosAsList(experiment); + assertEquals("foo", data.get(0).tag); + assertEquals(2, data.get(0).rows.length); + assertEquals(trial.trialId, data.get(0).trialId); + } + @Before public void setUp() throws Exception { File dbtest = getContext().getDatabasePath(TEST_DATABASE_NAME); @@ -394,4 +428,4 @@ public void tearDown() throws Exception { private Context getContext() { return RuntimeEnvironment.application.getApplicationContext(); } -} \ No newline at end of file +} diff --git a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java index ef34bb27..90aa62de 100644 --- a/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java +++ b/OpenScienceJournal/whistlepunk_library/src/sharedTest/java/com/google/android/apps/forscience/whistlepunk/sensordb/InMemorySensorDatabase.java @@ -17,7 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.sensordb; import androidx.annotation.NonNull; - +import androidx.annotation.VisibleForTesting; import com.google.android.apps.forscience.whistlepunk.BatchInsertScalarReading; import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.DataControllerImpl; @@ -30,18 +30,15 @@ import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import com.google.android.apps.forscience.whistlepunk.scalarchart.ChartData; import com.google.android.apps.forscience.whistlepunk.sensorapi.StreamConsumer; -import androidx.annotation.VisibleForTesting; import com.google.common.collect.Range; import com.google.common.util.concurrent.MoreExecutors; - +import io.reactivex.Observable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import io.reactivex.Observable; - public class InMemorySensorDatabase implements SensorDatabase { private List> mReadings = new ArrayList<>(); @@ -138,20 +135,28 @@ public GoosciScalarSensorData.ScalarSensorData getScalarReadingProtos( GoosciExperiment.Experiment experiment) { GoosciScalarSensorData.ScalarSensorData data = new GoosciScalarSensorData.ScalarSensorData(); - ArrayList sensorDataList = new ArrayList<>(); - for (GoosciTrial.Trial trial : experiment.trials) { - GoosciTrial.Range range = trial.recordingRange; - TimeRange timeRange = TimeRange.oldest(Range.closed(range.startMs, range.endMs)); - for (GoosciSensorLayout.SensorLayout sensor : trial.sensorLayouts) { - String tag = sensor.sensorId; - sensorDataList.add(getScalarReadingSensorProtos(tag, timeRange)); - } - } + List sensorDataList = getScalarReadingProtosAsList(experiment); data.sensors = sensorDataList.toArray(GoosciScalarSensorData.ScalarSensorDataDump.emptyArray()); return data; } + @Override + public List getScalarReadingProtosAsList( + GoosciExperiment.Experiment experiment) { + ArrayList sensorDataList = new ArrayList<>(); + for (GoosciTrial.Trial trial : experiment.trials) { + GoosciTrial.Range range = trial.recordingRange; + TimeRange timeRange = TimeRange.oldest(Range.closed(range.startMs, range.endMs)); + for (GoosciSensorLayout.SensorLayout sensor : trial.sensorLayouts) { + String tag = sensor.sensorId; + sensorDataList.add(getScalarReadingSensorProtos(tag, timeRange)); + } + } + + return sensorDataList; + } + public GoosciScalarSensorData.ScalarSensorDataDump getScalarReadingSensorProtos( String sensorTag, TimeRange range) { GoosciScalarSensorData.ScalarSensorDataDump sensor = From acb6bd4142ba02beee61d12aab1aa3f76cec08c1 Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Wed, 25 Apr 2018 12:35:44 -0700 Subject: [PATCH 047/587] Add all Discoverers to the TaskPool immediately to prevent a race condition where a Discoverer could complete the TaskPool before all were added PiperOrigin-RevId: 194281421 --- .../devicemanager/ConnectableSensorRegistry.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java index 2b0fc2c8..f271be9f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java @@ -231,7 +231,7 @@ public void startScanningInDiscoverers(boolean clearDeviceCache) { } final long timeout = clearDeviceCache ? 0 : ASSUME_GONE_TIMEOUT_MILLIS; final Set keysSeen = new HashSet<>(); - + final String[] discovererTaskIds = mDiscoverers.keySet().toArray(new String[0]); final TaskPool pool = new TaskPool(() -> { long nowMillis = mClock.getNow(); @@ -249,7 +249,7 @@ public void startScanningInDiscoverers(boolean clearDeviceCache) { iter.remove(); } } - }); + }, discovererTaskIds); for (final Map.Entry entry : mDiscoverers.entrySet()) { SensorDiscoverer discoverer = entry.getValue(); @@ -260,8 +260,6 @@ public void startScanningInDiscoverers(boolean clearDeviceCache) { private void startScanning(final String providerKey, SensorDiscoverer discoverer, final TaskPool pool, final Set keysSeen, final boolean startSpinners) { - SensorProvider provider = discoverer.getProvider(); - pool.addTask(providerKey); mUsageTracker.trackEvent(TrackerConstants.CATEGORY_SENSOR_MANAGEMENT, TrackerConstants.ACTION_SCAN, providerKey, 0); From 0d8ebbf5ec13d9cb9d952f23fe4f3b5b942ed7fc Mon Sep 17 00:00:00 2001 From: Science Journal Robot Date: Thu, 26 Apr 2018 09:04:24 -0700 Subject: [PATCH 048/587] Resolve style guide indentation issues PiperOrigin-RevId: 194404318 --- .../OpenSourceJournalApplicationTest.java | 31 +- .../OpenScienceJournalApplication.java | 21 +- .../components/OpenSourceComponent.java | 18 +- .../modules/FeatureDiscoveryModule.java | 30 +- .../opensource/modules/FeedbackModule.java | 25 +- .../opensource/modules/PerfTrackerModule.java | 106 +- .../modules/UsageTrackerModule.java | 48 +- .../opensource/ExampleUnitTest.java | 18 +- .../filemetadata/ExperimentCacheTest.java | 630 +-- .../wireapi/RecordingMetadata.java | 106 +- .../wireapi/TransportableSensorOptions.java | 73 +- .../apps/forscience/ble/BleClient.java | 28 +- .../apps/forscience/ble/BleClientImpl.java | 265 +- .../apps/forscience/ble/BleEvents.java | 94 +- .../android/apps/forscience/ble/BleFlow.java | 843 +-- .../apps/forscience/ble/BleFlowListener.java | 24 +- .../apps/forscience/ble/DeviceDiscoverer.java | 170 +- .../ble/DeviceDiscovererLegacy.java | 152 +- .../forscience/ble/DeviceDiscovererV21.java | 71 +- .../apps/forscience/ble/MyBleService.java | 623 +-- .../apps/forscience/ble/NativeDevice.java | 25 +- .../apps/forscience/javalib/Consumer.java | 56 +- .../forscience/javalib/DataRefresher.java | 80 +- .../apps/forscience/javalib/Delay.java | 105 +- .../forscience/javalib/FailureListener.java | 2 +- .../forscience/javalib/FallibleConsumer.java | 2 +- .../forscience/javalib/MaybeConsumer.java | 8 +- .../forscience/javalib/MaybeConsumers.java | 523 +- .../apps/forscience/javalib/ParallelTask.java | 92 +- .../apps/forscience/javalib/Refresher.java | 49 +- .../apps/forscience/javalib/Scheduler.java | 12 +- .../apps/forscience/javalib/Success.java | 14 +- .../AbstractReadableSensorOptions.java | 95 +- .../whistlepunk/AccessibilityUtils.java | 208 +- .../whistlepunk/ActiveSeekBarListeners.java | 71 +- .../whistlepunk/ActiveSettingsController.java | 213 +- .../whistlepunk/ActivityNavigator.java | 13 +- .../ActivityWithNavigationView.java | 3 +- .../forscience/whistlepunk/AddNoteDialog.java | 841 ++- .../whistlepunk/AddedLabelEvent.java | 30 +- .../whistlepunk/AndroidVersionUtils.java | 46 +- .../forscience/whistlepunk/AppServices.java | 29 +- .../forscience/whistlepunk/AppSingleton.java | 399 +- .../forscience/whistlepunk/Appearances.java | 37 +- .../whistlepunk/AudioSettingsDialog.java | 377 +- .../whistlepunk/AxisNumberFormat.java | 98 +- .../whistlepunk/BatchDataController.java | 77 +- .../whistlepunk/BatchInsertScalarReading.java | 31 +- .../whistlepunk/BluetoothDisabledDialog.java | 61 +- .../whistlepunk/BuiltInSensorAppearance.java | 395 +- .../whistlepunk/CameraFragment.java | 340 +- .../whistlepunk/CardTriggerPresenter.java | 289 +- .../whistlepunk/CardViewHolder.java | 128 +- .../apps/forscience/whistlepunk/Clock.java | 6 +- .../whistlepunk/ColorAllocator.java | 60 +- .../forscience/whistlepunk/ColorUtils.java | 64 +- .../whistlepunk/CommandLineSpecs.java | 89 +- .../whistlepunk/ControlBarController.java | 367 +- .../whistlepunk/CurrentTimeClock.java | 8 +- .../whistlepunk/DataController.java | 159 +- .../whistlepunk/DataControllerImpl.java | 1045 ++-- .../forscience/whistlepunk/DataService.java | 97 +- .../forscience/whistlepunk/DeletedLabel.java | 104 +- .../whistlepunk/DevOptionsFragment.java | 213 +- .../whistlepunk/ElapsedTimeAxisFormatter.java | 162 +- .../whistlepunk/ElapsedTimeFormatter.java | 73 +- .../whistlepunk/ElapsedTimeUtils.java | 101 +- .../forscience/whistlepunk/ExportService.java | 1197 ++--- .../whistlepunk/ExternalAxisController.java | 887 ++-- .../whistlepunk/ExternalAxisView.java | 422 +- .../whistlepunk/ExternalSensorAppearance.java | 86 +- .../whistlepunk/GalleryFragment.java | 626 +-- .../whistlepunk/GraphPopulator.java | 321 +- .../whistlepunk/IRecorderService.java | 6 +- .../ImageViewSensorAnimationBehavior.java | 306 +- .../forscience/whistlepunk/KeyboardUtil.java | 41 +- .../whistlepunk/LicenseActivity.java | 412 +- .../whistlepunk/LoadStaticHtmlTask.java | 94 +- .../LocalSensorOptionsStorage.java | 99 +- .../whistlepunk/LoggingConsumer.java | 107 +- .../forscience/whistlepunk/MainActivity.java | 822 +-- .../whistlepunk/MultiTouchDrawerLayout.java | 69 +- .../whistlepunk/MultiWindowUtils.java | 23 +- .../whistlepunk/NextRequestType.java | 31 +- .../whistlepunk/NoteViewHolder.java | 389 +- .../whistlepunk/NotificationChannels.java | 6 +- .../whistlepunk/NotificationIds.java | 8 +- .../whistlepunk/OverlayOptionsStorage.java | 73 +- .../whistlepunk/PacketAssembler.java | 209 +- .../forscience/whistlepunk/PanesActivity.java | 1714 +++--- .../whistlepunk/PanesBottomSheetBehavior.java | 1421 ++--- .../whistlepunk/PanesToolFragment.java | 295 +- .../whistlepunk/PermissionUtils.java | 184 +- .../whistlepunk/PhotoAsyncLoader.java | 124 +- .../forscience/whistlepunk/PictureUtils.java | 354 +- .../PitchSensorAnimationBehavior.java | 934 ++-- .../PreferenceProgressCategory.java | 62 +- .../whistlepunk/PrefsNewOptionsStorage.java | 55 +- .../PrefsSensorHistoryStorage.java | 62 +- .../whistlepunk/ProtoSensorAppearance.java | 174 +- .../forscience/whistlepunk/ProtoUtils.java | 26 +- .../whistlepunk/ProxyRecorderController.java | 343 +- .../whistlepunk/PublicRecorderService.java | 95 +- .../apps/forscience/whistlepunk/Ranges.java | 16 +- .../ReadableTransportableSensorOptions.java | 35 +- .../whistlepunk/RecordExternalAxisView.java | 280 +- .../whistlepunk/RecordFragment.java | 2551 ++++----- .../whistlepunk/RecorderController.java | 290 +- .../whistlepunk/RecorderControllerImpl.java | 1657 +++--- .../whistlepunk/RecorderListenerRegistry.java | 202 +- .../whistlepunk/RecorderService.java | 158 +- .../RecorderServiceConnection.java | 2 +- .../RecorderServiceConnectionImpl.java | 65 +- .../whistlepunk/RecordingDataController.java | 49 +- .../whistlepunk/RecordingState.java | 72 +- .../whistlepunk/RecordingStatus.java | 92 +- .../whistlepunk/RelativeTimeFormat.java | 49 +- .../whistlepunk/RelativeTimeTextView.java | 112 +- .../whistlepunk/ReusableFormatter.java | 24 +- .../whistlepunk/ReviewExternalAxisView.java | 88 +- .../whistlepunk/RunReviewOverlay.java | 2087 ++++---- .../whistlepunk/RxDataController.java | 76 +- .../apps/forscience/whistlepunk/RxEvent.java | 31 +- .../whistlepunk/SecondsAgoFormat.java | 45 +- .../whistlepunk/SensorAnimationBehavior.java | 50 +- .../whistlepunk/SensorAppearance.java | 133 +- .../whistlepunk/SensorAppearanceProvider.java | 9 +- .../SensorAppearanceProviderImpl.java | 502 +- .../whistlepunk/SensorCardAdapter.java | 565 +- .../whistlepunk/SensorCardHeader.java | 56 +- .../whistlepunk/SensorCardPresenter.java | 2421 ++++----- .../whistlepunk/SensorHistoryStorage.java | 9 +- .../whistlepunk/SensorInfoActivity.java | 140 +- .../whistlepunk/SensorProvider.java | 8 +- .../whistlepunk/SensorRegistry.java | 496 +- .../whistlepunk/SensorSettingsController.java | 13 +- .../SensorSettingsControllerImpl.java | 78 +- .../whistlepunk/SettingsActivity.java | 102 +- .../whistlepunk/SettingsFragment.java | 125 +- .../whistlepunk/SimpleBackupAgent.java | 81 +- .../SingleLineResizableTextView.java | 139 +- .../whistlepunk/SnackbarManager.java | 74 +- .../forscience/whistlepunk/Snapshotter.java | 75 +- .../whistlepunk/SquareLayoutMaxWidth.java | 44 +- .../whistlepunk/StatefulRecorder.java | 175 +- .../whistlepunk/StatsAccumulator.java | 299 +- .../forscience/whistlepunk/StatsList.java | 209 +- .../forscience/whistlepunk/StatsListener.java | 3 +- .../StopRecordingNoDataDialog.java | 73 +- .../whistlepunk/TextToolFragment.java | 348 +- .../forscience/whistlepunk/TimedEvent.java | 4 +- .../forscience/whistlepunk/ToggleArrow.java | 155 +- .../whistlepunk/TransitionUtils.java | 39 +- .../whistlepunk/TriggerBackgroundView.java | 405 +- .../whistlepunk/UnswipableViewPager.java | 28 +- .../whistlepunk/WhistlePunkApplication.java | 256 +- .../whistlepunk/WhistlepunkGlideModule.java | 6 +- .../accounts/AbstractAccountsProvider.java | 13 +- .../accounts/AccountsProvider.java | 61 +- .../whistlepunk/accounts/AppAccount.java | 20 +- .../accounts/NonSignedInAccount.java | 5 +- .../accounts/NonSignedInAccountsProvider.java | 8 +- .../analytics/TrackerConstants.java | 193 +- .../whistlepunk/analytics/UsageTracker.java | 73 +- .../scalarinput/AppDiscoveryCallbacks.java | 14 +- .../scalarinput/EmptySensorAppearance.java | 119 +- .../api/scalarinput/InputDeviceSpec.java | 287 +- .../scalarinput/ScalarInputDiscoverer.java | 554 +- .../api/scalarinput/ScalarInputProvider.java | 50 +- .../api/scalarinput/ScalarInputSensor.java | 461 +- .../api/scalarinput/ScalarInputSpec.java | 419 +- .../scalarinput/ScalarInputStringSource.java | 4 +- .../ScalarSensorServiceFinder.java | 187 +- .../whistlepunk/api/scalarinput/TaskPool.java | 36 +- .../whistlepunk/audio/AudioAnalyzer.java | 401 +- .../whistlepunk/audio/AudioSource.java | 281 +- .../whistlepunk/audio/FftAnalyzer.java | 432 +- .../whistlepunk/audio/GoertzelAnalyzer.java | 221 +- .../whistlepunk/audio/Harmonic.java | 231 +- .../whistlepunk/audio/MovingAverage.java | 64 +- .../forscience/whistlepunk/audio/Peak.java | 127 +- .../whistlepunk/audio/SoundUtils.java | 96 +- .../whistlepunk/audiogen/AudioGenerator.java | 58 +- .../audiogen/AudioPlaybackController.java | 340 +- .../audiogen/JsynUnitVoiceAdapter.java | 40 +- .../JsynUnitVoiceAdapterInterface.java | 38 +- .../audiogen/SimpleJsynAudioGenerator.java | 169 +- .../SonificationTypeAdapterFactory.java | 61 +- .../audiogen/voices/AmplitudeVoice.java | 36 +- .../audiogen/voices/ConductorVoice.java | 152 +- ...oScalePitchSimpleJsynUnitVoiceAdapter.java | 43 +- .../audiogen/voices/DefaultVoice.java | 30 +- .../audiogen/voices/NotesVoice.java | 77 +- .../audiogen/voices/PitchGenerator.java | 38 +- .../audiogen/voices/ScaleVoice.java | 29 +- .../audiogen/voices/SimpleJsynUnitVoice.java | 130 +- .../voices/SimpleJsynUnitVoiceBase.java | 8 +- .../audiogen/voices/SineEnvelope.java | 120 +- .../CompositeRecyclerAdapter.java | 259 +- .../CompositeSensitiveExpandableAdapter.java | 73 +- .../devicemanager/ConnectableSensor.java | 314 +- .../ConnectableSensorRegistry.java | 1106 ++-- .../devicemanager/DeviceOptionsDialog.java | 289 +- .../DeviceOptionsViewController.java | 371 +- .../devicemanager/DeviceParentListItem.java | 140 +- .../devicemanager/DeviceParentViewHolder.java | 230 +- .../devicemanager/DeviceRegistry.java | 96 +- .../devicemanager/DeviceWithSensors.java | 99 +- .../devicemanager/DevicesPresenter.java | 30 +- .../devicemanager/EnablementController.java | 86 +- .../ExpandableDeviceAdapter.java | 627 +-- .../ExpandableServiceAdapter.java | 504 +- .../devicemanager/HeaderAdapter.java | 78 +- .../devicemanager/ManageDevicesActivity.java | 252 +- .../ManageDevicesRecyclerFragment.java | 415 +- .../devicemanager/ManageFragment.java | 2 +- .../devicemanager/NativeBleDiscoverer.java | 326 +- .../devicemanager/OffsetParentViewHolder.java | 48 +- .../devicemanager/PinTypeProvider.java | 169 +- .../ScanDisabledDialogFragment.java | 78 +- .../devicemanager/SensorChildViewHolder.java | 205 +- .../devicemanager/SensorDiscoverer.java | 175 +- .../devicemanager/SensorGroup.java | 81 +- .../devicemanager/SensorTypeProvider.java | 192 +- .../devicemanager/ServiceParentListItem.java | 191 +- .../ServiceParentViewHolder.java | 253 +- .../devicemanager/WhistlepunkBleDevice.java | 4 +- .../FeatureDiscoveryProvider.java | 55 +- .../feedback/FeedbackProvider.java | 18 +- .../whistlepunk/filemetadata/Experiment.java | 1082 ++-- .../filemetadata/ExperimentCache.java | 835 ++- .../filemetadata/FileMetadataManager.java | 1295 +++-- .../whistlepunk/filemetadata/Label.java | 513 +- .../filemetadata/LabelListHolder.java | 145 +- .../whistlepunk/filemetadata/LabelValue.java | 32 +- .../filemetadata/PictureLabelValue.java | 225 +- .../filemetadata/ProtoFileHelper.java | 131 +- .../ScienceJournalDocsProvider.java | 356 +- .../filemetadata/SensorTrigger.java | 542 +- .../filemetadata/SensorTriggerLabelValue.java | 239 +- .../filemetadata/TextLabelValue.java | 98 +- .../whistlepunk/filemetadata/Trial.java | 642 ++- .../whistlepunk/filemetadata/TrialStats.java | 138 +- .../filemetadata/UserMetadataManager.java | 660 ++- .../whistlepunk/intro/AgeVerifier.java | 181 +- .../metadata/ApplicationLabel.java | 264 +- .../whistlepunk/metadata/BleSensorSpec.java | 367 +- .../whistlepunk/metadata/CropHelper.java | 459 +- .../metadata/EditTriggerActivity.java | 55 +- .../metadata/EditTriggerFragment.java | 1105 ++-- .../whistlepunk/metadata/ExperimentRun.java | 61 +- .../metadata/ExperimentSensors.java | 92 +- .../metadata/ExternalSensorSpec.java | 330 +- .../whistlepunk/metadata/MetaDataManager.java | 194 +- .../whistlepunk/metadata/Project.java | 164 +- .../whistlepunk/metadata/RunStats.java | 168 +- .../metadata/SimpleMetaDataManager.java | 4668 +++++++++-------- .../whistlepunk/metadata/TriggerHelper.java | 231 +- .../metadata/TriggerListActivity.java | 56 +- .../metadata/TriggerListFragment.java | 781 +-- .../whistlepunk/modules/ContextModule.java | 22 +- .../modules/InputDeviceModule.java | 14 +- .../modules/NativeBleDiscovererModule.java | 14 +- .../modules/NonSignedInAccountsModule.java | 14 +- .../modules/ScalarInputDiscoveryModule.java | 17 +- .../performance/PerfTrackerProvider.java | 204 +- .../project/ExperimentListFragment.java | 1207 +++-- .../whistlepunk/project/MetadataActivity.java | 33 +- .../experiment/ExperimentDetailItem.java | 156 +- .../experiment/ExperimentDetailsFragment.java | 2905 +++++----- .../experiment/NameExperimentDialog.java | 219 +- .../experiment/RecordingThrobberView.java | 208 +- .../experiment/UpdateExperimentActivity.java | 64 +- .../experiment/UpdateExperimentFragment.java | 509 +- .../review/CoordinatedSeekbarViewGroup.java | 162 +- .../whistlepunk/review/CropSeekBar.java | 208 +- .../review/DeleteMetadataItemDialog.java | 112 +- .../review/EditLabelTimeDialog.java | 247 +- .../review/EditTimestampDialog.java | 268 +- .../review/ExportOptionsDialogFragment.java | 218 +- .../review/ExportStreamConsumer.java | 83 +- .../review/FreezeableCoordinatorLayout.java | 65 +- .../review/GraphExploringSeekBar.java | 191 +- .../whistlepunk/review/PinnedNoteAdapter.java | 517 +- .../whistlepunk/review/RunReviewActivity.java | 158 +- .../whistlepunk/review/RunReviewFragment.java | 3137 +++++------ .../review/TimestampPickerController.java | 304 +- .../whistlepunk/review/UpdateRunActivity.java | 44 +- .../whistlepunk/review/UpdateRunFragment.java | 217 +- .../whistlepunk/review/ZoomPresenter.java | 178 +- .../review/labels/LabelDetailsActivity.java | 238 +- .../review/labels/LabelDetailsFragment.java | 349 +- .../labels/PictureLabelDetailsFragment.java | 175 +- .../labels/SnapshotLabelDetailsFragment.java | 73 +- .../labels/TextLabelDetailsFragment.java | 140 +- .../labels/TriggerLabelDetailsFragment.java | 83 +- .../scalarchart/ChartController.java | 1518 +++--- .../whistlepunk/scalarchart/ChartData.java | 549 +- .../whistlepunk/scalarchart/ChartOptions.java | 840 +-- .../whistlepunk/scalarchart/ChartView.java | 1886 +++---- .../scalarchart/GraphOptionsController.java | 63 +- .../scalarchart/GraphOptionsManager.java | 364 +- .../scalarchart/ScalarDisplayOptions.java | 183 +- .../whistlepunk/scalarchart/UptimeClock.java | 9 +- .../sensorapi/AbstractSensorRecorder.java | 44 +- .../whistlepunk/sensorapi/ActiveBundle.java | 95 +- .../sensorapi/AvailableSensors.java | 2 +- .../sensorapi/BlankReadableSensorOptions.java | 70 +- .../whistlepunk/sensorapi/ComposeFilter.java | 22 +- .../sensorapi/DataViewOptions.java | 62 +- .../sensorapi/DelegatingSensorRecorder.java | 46 +- .../sensorapi/FloatUpdatingWatcher.java | 24 +- .../sensorapi/FrequencyBuffer.java | 183 +- .../sensorapi/FrequencyOptionsPresenter.java | 204 +- .../sensorapi/LongUpdatingWatcher.java | 24 +- .../sensorapi/NewOptionsStorage.java | 41 +- .../sensorapi/OptionsListener.java | 17 +- .../sensorapi/OptionsUpdatingWatcher.java | 58 +- .../sensorapi/ReadableSensorOptions.java | 26 +- .../whistlepunk/sensorapi/ScalarSensor.java | 931 ++-- .../sensorapi/ScalarSensorDumpReader.java | 114 +- .../whistlepunk/sensorapi/ScaleFilter.java | 40 +- .../whistlepunk/sensorapi/SensorChoice.java | 108 +- .../SensorConfigurationChangeListener.java | 11 +- .../sensorapi/SensorEnvironment.java | 35 +- .../whistlepunk/sensorapi/SensorMessage.java | 125 +- .../whistlepunk/sensorapi/SensorObserver.java | 72 +- .../sensorapi/SensorPresenter.java | 150 +- .../whistlepunk/sensorapi/SensorRecorder.java | 84 +- .../sensorapi/SensorStatusListener.java | 70 +- .../whistlepunk/sensorapi/StreamConsumer.java | 16 +- .../whistlepunk/sensorapi/StreamStat.java | 100 +- .../whistlepunk/sensorapi/ValueFilter.java | 11 +- .../sensorapi/WriteableSensorOptions.java | 25 +- .../whistlepunk/sensorapi/ZoomRecorder.java | 213 +- .../whistlepunk/sensordb/ScalarReading.java | 174 +- .../sensordb/ScalarReadingList.java | 28 +- .../whistlepunk/sensordb/SensorDatabase.java | 85 +- .../sensordb/SensorDatabaseImpl.java | 676 +-- .../whistlepunk/sensordb/StoringConsumer.java | 34 +- .../whistlepunk/sensordb/TimeRange.java | 110 +- .../sensors/AccelerometerSensor.java | 128 +- .../sensors/AmbientLightSensor.java | 120 +- .../sensors/AmbientTemperatureSensor.java | 91 +- .../whistlepunk/sensors/BarometerSensor.java | 93 +- .../sensors/BleProtocolVersion.java | 107 +- .../whistlepunk/sensors/BleServiceSpec.java | 54 +- .../whistlepunk/sensors/BluetoothSensor.java | 497 +- .../whistlepunk/sensors/CameraPreview.java | 683 +-- .../whistlepunk/sensors/CompassSensor.java | 145 +- .../whistlepunk/sensors/DecibelSensor.java | 99 +- .../sensors/LinearAccelerometerSensor.java | 94 +- .../sensors/MagneticStrengthSensor.java | 104 +- .../whistlepunk/sensors/PitchSensor.java | 169 +- .../sensors/SineWaveOptionsPresenter.java | 59 +- .../sensors/SineWavePseudoSensor.java | 102 +- .../whistlepunk/sensors/SystemScheduler.java | 23 +- .../main/proto/basic_sensor_appearance.proto | 38 +- .../src/main/proto/caption.proto | 4 +- .../src/main/proto/device_spec.proto | 16 +- .../src/main/proto/experiment.proto | 112 +- .../src/main/proto/gadget_info.proto | 64 +- .../src/main/proto/icon_path.proto | 42 +- .../src/main/proto/input_device.proto | 9 +- .../src/main/proto/label.proto | 64 +- .../src/main/proto/label_value.proto | 40 +- .../src/main/proto/local_sync_status.proto | 1 - .../src/main/proto/picture_label_value.proto | 13 +- .../src/main/proto/scalar_input_config.proto | 50 +- .../src/main/proto/scalar_sensor_data.proto | 12 +- .../src/main/proto/sensor.proto | 25 +- .../src/main/proto/sensor_config.proto | 52 +- .../src/main/proto/sensor_layout.proto | 35 +- .../src/main/proto/sensor_spec.proto | 18 +- .../src/main/proto/sensor_trigger.proto | 19 +- .../proto/sensor_trigger_information.proto | 6 +- .../proto/sensor_trigger_label_value.proto | 15 +- .../src/main/proto/snapshot_label_value.proto | 30 +- .../src/main/proto/text_label_value.proto | 9 +- .../src/main/proto/trial.proto | 161 +- .../src/main/proto/user_metadata.proto | 65 +- .../src/main/proto/version.proto | 62 +- .../apps/forscience/ble/BleEventsTest.java | 63 +- .../apps/forscience/ble/MyBleServiceTest.java | 34 +- .../forscience/javalib/ParallelTaskTest.java | 76 +- .../whistlepunk/AccessibilityUtilsTest.java | 88 +- .../whistlepunk/AddNoteDialogTest.java | 30 +- .../whistlepunk/AgeVerifierTest.java | 52 +- .../whistlepunk/AllSensorsRegistry.java | 21 +- .../whistlepunk/AlwaysAllowedPolicy.java | 8 +- .../whistlepunk/AndroidVersionUtilsTest.java | 111 +- .../whistlepunk/AppSingletonTest.java | 22 +- .../BuiltInSensorAppearanceTest.java | 94 +- .../forscience/whistlepunk/BundleAssert.java | 18 +- .../whistlepunk/BundleAssertTest.java | 46 +- .../whistlepunk/ColorAllocatorTest.java | 56 +- .../whistlepunk/DataRefresherTest.java | 166 +- .../whistlepunk/DevOptionsResource.java | 42 +- .../whistlepunk/ExportServiceTest.java | 88 +- .../whistlepunk/ManualSensorRegistry.java | 31 +- .../whistlepunk/MemoryRecorderController.java | 238 +- .../MemoryRecorderControllerTest.java | 27 +- .../whistlepunk/MockRecorderService.java | 34 +- .../whistlepunk/PacketAssemblerTest.java | 780 +-- .../whistlepunk/PanesActivityTest.java | 22 +- .../PitchSensorAnimationBehaviorTest.java | 1112 ++-- .../PrefsNewOptionsStorageTest.java | 124 +- .../ProxyRecorderControllerTest.java | 570 +- .../whistlepunk/RecordFragmentTest.java | 85 +- .../whistlepunk/RecorderControllerTest.java | 824 +-- .../RecorderListenerRegistryTest.java | 44 +- .../whistlepunk/RecordingStateListener.java | 23 +- .../whistlepunk/ReusableFormatterTest.java | 18 +- .../RxJavaCharacterizationTests.java | 28 +- .../SensorAppearanceProviderImplTest.java | 38 +- .../whistlepunk/SensorCardPresenterTest.java | 314 +- .../SensorCardPresenterUnitTest.java | 218 +- .../whistlepunk/SensorRegistryTest.java | 361 +- .../whistlepunk/SensorRegistryUnitTest.java | 47 +- .../whistlepunk/StatefulRecorderTest.java | 60 +- .../whistlepunk/StatsAccumulatorTest.java | 30 +- .../forscience/whistlepunk/StubContext.java | 1078 ++-- .../WhistlePunkApplicationTest.java | 23 +- .../api/scalarinput/InputDeviceSpecTest.java | 42 +- .../scalarinput/RecordingScanListener.java | 57 +- .../ScalarInputDiscovererTest.java | 453 +- .../scalarinput/ScalarInputProviderTest.java | 324 +- .../scalarinput/ScalarInputSensorTest.java | 362 +- .../api/scalarinput/ScalarInputSpecTest.java | 256 +- .../ScalarSensorServiceFinderTest.java | 120 +- .../api/scalarinput/SensorBehaviorTest.java | 30 +- .../scalarinput/StubPreferenceCategory.java | 61 +- .../api/scalarinput/StubScanListener.java | 30 +- .../api/scalarinput/TestConnector.java | 63 +- .../api/scalarinput/TestDiscoverer.java | 36 +- .../api/scalarinput/TestFinder.java | 95 +- .../api/scalarinput/TestScanListener.java | 29 +- .../scalarinput/TestSensorDiscovererTest.java | 13 +- .../whistlepunk/audio/AudioAnalyzerTest.java | 225 +- .../whistlepunk/audio/AudioSourceTest.java | 350 +- .../whistlepunk/audio/ShadowAudioRecord.java | 167 +- .../audiogen/voices/PitchGeneratorTest.java | 52 +- .../ConnectableSensorRegistryTest.java | 1013 ++-- .../devicemanager/ConnectableSensorTest.java | 46 +- .../devicemanager/DataControllerUnitTest.java | 187 +- .../DeviceOptionsViewControllerTest.java | 160 +- .../devicemanager/DeviceRegistryTest.java | 44 +- .../EnablementControllerTest.java | 62 +- .../ExpandableDeviceAdapterTest.java | 538 +- .../ExpandableServiceAdapterTest.java | 88 +- .../FakeUnitAppearanceProvider.java | 14 +- .../NativeBleDiscovererTest.java | 156 +- .../RecordingAdapterDataObserver.java | 77 +- .../devicemanager/SettableClock.java | 16 +- .../devicemanager/TestDevicesPresenter.java | 87 +- .../whistlepunk/devicemanager/TestFlag.java | 26 +- .../devicemanager/TestSensorRegistry.java | 6 +- .../filemetadata/ExperimentTest.java | 427 +- .../filemetadata/ExperimentUnitTest.java | 205 +- .../filemetadata/FileMetadataManagerTest.java | 294 +- .../whistlepunk/filemetadata/LabelTest.java | 267 +- .../filemetadata/LabelValueTest.java | 57 +- .../filemetadata/ProtoFileHelperTest.java | 100 +- .../filemetadata/SensorTriggerTest.java | 400 +- .../filemetadata/TrialStatsTest.java | 68 +- .../whistlepunk/filemetadata/TrialTest.java | 100 +- .../filemetadata/TrialUnitTest.java | 238 +- .../filemetadata/UserMetadataManagerTest.java | 377 +- .../whistlepunk/metadata/BleSensorTest.java | 122 +- .../whistlepunk/metadata/CropHelperTest.java | 330 +- .../metadata/SimpleMetaDataManagerTest.java | 1175 +++-- .../metadata/TriggerHelperTest.java | 58 +- .../review/ElapsedTimeUtilsTest.java | 137 +- .../review/ExportStreamConsumerTest.java | 46 +- .../review/TimestampPickerControllerTest.java | 105 +- .../whistlepunk/review/ZoomPresenterTest.java | 182 +- .../scalarchart/ChartControllerTest.java | 299 +- .../scalarchart/ChartDataTest.java | 390 +- .../scalarchart/ChartViewTest.java | 69 +- .../scalarchart/GraphOptionsManagerTest.java | 98 +- .../scalarchart/ScalarDisplayOptionsTest.java | 28 +- .../sensorapi/FrequencyBufferTest.java | 260 +- .../sensorapi/ManualSensorTest.java | 13 +- .../sensorapi/ScalarSensorDumpReaderTest.java | 94 +- .../sensorapi/ScalarSensorTest.java | 699 +-- .../sensorapi/SensorChoiceTest.java | 21 +- .../sensorapi/ValueFilterTest.java | 14 +- .../sensordb/DataControllerTest.java | 420 +- .../sensordb/MemoryMetadataManagerTest.java | 30 +- .../sensordb/SensorDatabaseTest.java | 658 +-- .../sensordb/StoringFailureListener.java | 10 +- .../sensordb/StubMaybeConsumer.java | 12 +- .../sensors/BleProtocolVersionTest.java | 172 +- .../sensors/BluetoothSensorTest.java | 82 +- .../sensors/CameraPreviewTest.java | 47 +- .../whistlepunk/AccumulatingConsumer.java | 21 +- .../forscience/whistlepunk/Arbitrary.java | 172 +- .../whistlepunk/ExplodingFactory.java | 14 +- .../whistlepunk/FakeAppearanceProvider.java | 28 +- .../whistlepunk/MemoryAppearanceProvider.java | 26 +- .../MemorySensorHistoryStorage.java | 21 +- .../forscience/whistlepunk/MockScheduler.java | 113 +- .../whistlepunk/RecordingStatusListener.java | 41 +- .../whistlepunk/StubDataController.java | 246 +- .../forscience/whistlepunk/TestConsumers.java | 169 +- .../apps/forscience/whistlepunk/TestData.java | 156 +- .../api/scalarinput/ExplicitExecutor.java | 48 +- .../api/scalarinput/RecordingRunnable.java | 10 +- .../scalarinput/RecordingUsageTracker.java | 29 +- .../api/scalarinput/ScalarInputScenario.java | 185 +- .../api/scalarinput/TestSensor.java | 35 +- .../api/scalarinput/TestSensorDiscoverer.java | 280 +- .../api/scalarinput/TestStringSource.java | 16 +- .../api/scalarinput/TrackedEvent.java | 44 +- .../devicemanager/EnumeratedDiscoverer.java | 133 +- .../devicemanager/MemorySensorGroup.java | 174 +- .../devicemanager/StubSensorDiscoverer.java | 46 +- .../whistlepunk/sensorapi/FakeBleClient.java | 138 +- .../whistlepunk/sensorapi/ManualSensor.java | 351 +- .../sensorapi/MemorySensorEnvironment.java | 75 +- .../sensorapi/RecordingSensorObserver.java | 17 +- .../sensorapi/StubInteractionListener.java | 36 +- .../sensorapi/StubStatsListener.java | 7 +- .../sensorapi/StubStatusListener.java | 12 +- .../sensordb/InMemorySensorDatabase.java | 409 +- .../sensordb/IncrementableMonotonicClock.java | 20 +- .../sensordb/MemoryMetadataManager.java | 369 +- .../whistlepunk/sensordb/MonotonicClock.java | 10 +- .../AllNativeSensorProvider.java | 287 +- .../DeviceSettingsPopupActivity.java | 88 +- .../scalarapisample/DisplayActivity.java | 12 +- .../TemperatureSettingsPopupActivity.java | 89 +- .../ExampleUnitTest.java | 18 +- ScalarApiSampleApp/gradlew.bat | 180 +- .../api/scalarinput/AdvertisedDevice.java | 41 +- .../api/scalarinput/AdvertisedSensor.java | 219 +- .../api/scalarinput/ScalarSensorService.java | 431 +- .../SensorAppearanceResources.java | 76 +- .../api/scalarinput/SensorBehavior.java | 119 +- .../api/scalarinput/Signatures.java | 178 +- .../whistlepunk/api/scalarinput/Versions.java | 25 +- sensor_providers/gradlew.bat | 180 +- .../forscience/synthetic/MainActivity.java | 12 +- 543 files changed, 59772 insertions(+), 58444 deletions(-) diff --git a/OpenScienceJournal/app/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenSourceJournalApplicationTest.java b/OpenScienceJournal/app/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenSourceJournalApplicationTest.java index d5ccfde8..9f68d1e1 100644 --- a/OpenScienceJournal/app/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenSourceJournalApplicationTest.java +++ b/OpenScienceJournal/app/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenSourceJournalApplicationTest.java @@ -16,29 +16,26 @@ package com.google.android.apps.forscience.whistlepunk.opensource; import android.test.AndroidTestCase; - import com.google.android.apps.forscience.whistlepunk.api.scalarinput.ScalarInputSpec; import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorDiscoverer; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; -import com.google.android.apps.forscience.whistlepunk.opensource.OpenScienceJournalApplication; - import java.util.Map; public class OpenSourceJournalApplicationTest extends AndroidTestCase { - public void testNativeBleDiscovererIsThere() { - Map discoverers = getDiscoverers(); - assertTrue(discoverers.containsKey(BleSensorSpec.TYPE)); - } + public void testNativeBleDiscovererIsThere() { + Map discoverers = getDiscoverers(); + assertTrue(discoverers.containsKey(BleSensorSpec.TYPE)); + } - public void testThirdPartyDiscoverer() { - Map discoverers = getDiscoverers(); - assertTrue(discoverers.containsKey(ScalarInputSpec.TYPE)); - } + public void testThirdPartyDiscoverer() { + Map discoverers = getDiscoverers(); + assertTrue(discoverers.containsKey(ScalarInputSpec.TYPE)); + } - private Map getDiscoverers() { - OpenScienceJournalApplication app = - (OpenScienceJournalApplication) getContext().getApplicationContext(); - app.onCreateInjector(); - return OpenScienceJournalApplication.getExternalSensorDiscoverers(getContext()); - } + private Map getDiscoverers() { + OpenScienceJournalApplication app = + (OpenScienceJournalApplication) getContext().getApplicationContext(); + app.onCreateInjector(); + return OpenScienceJournalApplication.getExternalSensorDiscoverers(getContext()); + } } diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java index a1cd09a7..e1487d66 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/OpenScienceJournalApplication.java @@ -17,22 +17,15 @@ package com.google.android.apps.forscience.whistlepunk.opensource; import androidx.annotation.VisibleForTesting; - import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; import com.google.android.apps.forscience.whistlepunk.modules.ContextModule; -import com.google.android.apps.forscience.whistlepunk.opensource.components - .DaggerOpenSourceComponent; +import com.google.android.apps.forscience.whistlepunk.opensource.components.DaggerOpenSourceComponent; -/** - * Subclass of WhistlePunkApplication which installs stub / default components. - */ +/** Subclass of WhistlePunkApplication which installs stub / default components. */ public class OpenScienceJournalApplication extends WhistlePunkApplication { - @VisibleForTesting - @Override - public void onCreateInjector() { - DaggerOpenSourceComponent.builder() - .contextModule(new ContextModule(this)) - .build() - .inject(this); - } + @VisibleForTesting + @Override + public void onCreateInjector() { + DaggerOpenSourceComponent.builder().contextModule(new ContextModule(this)).build().inject(this); + } } diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/components/OpenSourceComponent.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/components/OpenSourceComponent.java index 88d95802..c655d4ac 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/components/OpenSourceComponent.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/components/OpenSourceComponent.java @@ -26,12 +26,20 @@ import com.google.android.apps.forscience.whistlepunk.opensource.modules.FeedbackModule; import com.google.android.apps.forscience.whistlepunk.opensource.modules.PerfTrackerModule; import com.google.android.apps.forscience.whistlepunk.opensource.modules.UsageTrackerModule; - import dagger.Component; -@Component(modules = {FeatureDiscoveryModule.class, FeedbackModule.class, UsageTrackerModule.class, - NativeBleDiscovererModule.class, InputDeviceModule.class, ScalarInputDiscoveryModule.class, - ContextModule.class, PerfTrackerModule.class, NonSignedInAccountsModule.class}) +@Component( + modules = { + FeatureDiscoveryModule.class, + FeedbackModule.class, + UsageTrackerModule.class, + NativeBleDiscovererModule.class, + InputDeviceModule.class, + ScalarInputDiscoveryModule.class, + ContextModule.class, + PerfTrackerModule.class, + NonSignedInAccountsModule.class + }) public interface OpenSourceComponent { - void inject(WhistlePunkApplication app); + void inject(WhistlePunkApplication app); } diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java index c9b622ab..acb24afb 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeatureDiscoveryModule.java @@ -18,29 +18,23 @@ import android.content.Context; import androidx.fragment.app.FragmentActivity; - import com.google.android.apps.forscience.whistlepunk.featurediscovery.FeatureDiscoveryProvider; - import dagger.Module; import dagger.Provides; -/** - * Stub feature discovery module which does nothing. - */ +/** Stub feature discovery module which does nothing. */ @Module public class FeatureDiscoveryModule { - @Provides - public FeatureDiscoveryProvider provideFeatureDiscoveryProvider() { - return new FeatureDiscoveryProvider() { - @Override - public boolean isEnabled(Context context, String feature) { - return false; - } - - @Override - public void show(FragmentActivity activity, String feature, String tag) { + @Provides + public FeatureDiscoveryProvider provideFeatureDiscoveryProvider() { + return new FeatureDiscoveryProvider() { + @Override + public boolean isEnabled(Context context, String feature) { + return false; + } - } - }; - } + @Override + public void show(FragmentActivity activity, String feature, String tag) {} + }; + } } diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeedbackModule.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeedbackModule.java index 9e1c62d5..f54303d4 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeedbackModule.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/FeedbackModule.java @@ -18,24 +18,21 @@ import com.google.android.apps.forscience.javalib.MaybeConsumer; import com.google.android.apps.forscience.whistlepunk.feedback.FeedbackProvider; - import dagger.Module; import dagger.Provides; -/** - * Stub feedback module. - */ +/** Stub feedback module. */ @Module public class FeedbackModule { - @Provides - public FeedbackProvider provideFeedbackProvider() { - return new FeedbackProvider() { - @Override - public void sendFeedback(MaybeConsumer onSuccess) { - // Do nothing. - onSuccess.success(true); - } - }; - } + @Provides + public FeedbackProvider provideFeedbackProvider() { + return new FeedbackProvider() { + @Override + public void sendFeedback(MaybeConsumer onSuccess) { + // Do nothing. + onSuccess.success(true); + } + }; + } } diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/PerfTrackerModule.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/PerfTrackerModule.java index f7aca6f7..c846004e 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/PerfTrackerModule.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/PerfTrackerModule.java @@ -18,91 +18,63 @@ import android.app.Application; import android.content.Context; - import com.google.android.apps.forscience.whistlepunk.performance.PerfTrackerProvider; - import dagger.Module; import dagger.Provides; @Module public class PerfTrackerModule { - @Provides - public PerfTrackerProvider providesPerfTracker() { - return new PerfTrackerProvider() { - @Override - public TimerToken startTimer() { - return null; - } - - @Override - public void stopTimer(TimerToken token, String eventName) { - - } - - @Override - public void startGlobalTimer(String eventName) { - - } - - @Override - public void stopGlobalTimer(String eventName) { - - } - - @Override - public void stopGlobalTimer(String eventName, String newEventName) { - - } - - @Override - public boolean startPerfTrackerEventDebugActivity(Context context) { - return false; - } - - @Override - public void startJankRecorder(String eventName) { - - } - - @Override - public void stopJankRecorder(String eventName) { - - } + @Provides + public PerfTrackerProvider providesPerfTracker() { + return new PerfTrackerProvider() { + @Override + public TimerToken startTimer() { + return null; + } - @Override - public void watchForMemoryLeak(Object object) { + @Override + public void stopTimer(TimerToken token, String eventName) {} - } + @Override + public void startGlobalTimer(String eventName) {} - @Override - public void recordBatterySnapshotOnForegroundServiceStart() { + @Override + public void stopGlobalTimer(String eventName) {} - } + @Override + public void stopGlobalTimer(String eventName, String newEventName) {} - @Override - public void recordBatterySnapshotOnForegroundServiceStop() { + @Override + public boolean startPerfTrackerEventDebugActivity(Context context) { + return false; + } - } + @Override + public void startJankRecorder(String eventName) {} - @Override - public void recordBatterySnapshot(String eventName) { + @Override + public void stopJankRecorder(String eventName) {} - } + @Override + public void watchForMemoryLeak(Object object) {} - @Override - public void onAppCreate(Application app) { + @Override + public void recordBatterySnapshotOnForegroundServiceStart() {} - } + @Override + public void recordBatterySnapshotOnForegroundServiceStop() {} - @Override - public void onActivityInit() { + @Override + public void recordBatterySnapshot(String eventName) {} - } + @Override + public void onAppCreate(Application app) {} - @Override - public void onAppInteractive() { + @Override + public void onActivityInit() {} - } - }; - } + @Override + public void onAppInteractive() {} + }; + } } diff --git a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/UsageTrackerModule.java b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/UsageTrackerModule.java index ca95f7da..d280f114 100644 --- a/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/UsageTrackerModule.java +++ b/OpenScienceJournal/app/src/main/java/com/google/android/apps/forscience/whistlepunk/opensource/modules/UsageTrackerModule.java @@ -17,40 +17,28 @@ package com.google.android.apps.forscience.whistlepunk.opensource.modules; import android.util.SparseArray; - import com.google.android.apps.forscience.whistlepunk.analytics.UsageTracker; - import dagger.Module; import dagger.Provides; -/** - * Stub UsageTracker which does nothing. - */ +/** Stub UsageTracker which does nothing. */ @Module public class UsageTrackerModule { - @Provides - public UsageTracker provideUsageTracker() { - return new UsageTracker() { - @Override - public void setOptOut(boolean optOut) { - - } - - @Override - public void trackScreenView(String screenName) { - - } - - @Override - public void trackEvent(String category, String action, String label, long value) { - - } - - @Override - public void trackDimensionEvent(String category, String action, - SparseArray dimensions) { - - } - }; - } + @Provides + public UsageTracker provideUsageTracker() { + return new UsageTracker() { + @Override + public void setOptOut(boolean optOut) {} + + @Override + public void trackScreenView(String screenName) {} + + @Override + public void trackEvent(String category, String action, String label, long value) {} + + @Override + public void trackDimensionEvent( + String category, String action, SparseArray dimensions) {} + }; + } } diff --git a/OpenScienceJournal/app/src/test/java/com/google/android/apps/forscience/whistlepunk/opensource/ExampleUnitTest.java b/OpenScienceJournal/app/src/test/java/com/google/android/apps/forscience/whistlepunk/opensource/ExampleUnitTest.java index aafbc794..e5dac091 100644 --- a/OpenScienceJournal/app/src/test/java/com/google/android/apps/forscience/whistlepunk/opensource/ExampleUnitTest.java +++ b/OpenScienceJournal/app/src/test/java/com/google/android/apps/forscience/whistlepunk/opensource/ExampleUnitTest.java @@ -16,16 +16,14 @@ package com.google.android.apps.forscience.whistlepunk.opensource; -import org.junit.Test; - import static org.junit.Assert.*; -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ +import org.junit.Test; + +/** To work on unit tests, switch the Test Artifact in the Build Variants view. */ public class ExampleUnitTest { - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java b/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java index d9797a0c..1c9572cd 100644 --- a/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java +++ b/OpenScienceJournal/whistlepunk_library/src/androidTest/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ExperimentCacheTest.java @@ -18,330 +18,330 @@ import androidx.annotation.NonNull; import android.test.InstrumentationTestCase; - import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciGadgetInfo; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import com.google.android.apps.forscience.whistlepunk.metadata.nano.Version; import com.google.protobuf.nano.MessageNano; - import java.io.File; /** - * Tests for the ExperimentCache class. - * Note: All experiments created should start with prefix "exp_" so that they can be cleaned up - * automatically. + * Tests for the ExperimentCache class. Note: All experiments created should start with prefix + * "exp_" so that they can be cleaned up automatically. */ public class ExperimentCacheTest extends InstrumentationTestCase { - private int mFailureCount = 0; - - private ExperimentCache.FailureListener getFailureFailsListener() { - return new ExperimentCache.FailureListener() { - @Override - public void onWriteFailed(Experiment experimentToWrite) { - throw new RuntimeException("Expected success"); - } - - @Override - public void onReadFailed(GoosciUserMetadata.ExperimentOverview experimentOverview) { - throw new RuntimeException("Expected success"); - } - - @Override - public void onNewerVersionDetected( - GoosciUserMetadata.ExperimentOverview experimentOverview) { - throw new RuntimeException("Expected success"); - } - }; - } - - private ExperimentCache.FailureListener getFailureExpectedListener() { - return new ExperimentCache.FailureListener() { - @Override - public void onWriteFailed(Experiment experimentToWrite) { - mFailureCount++; - } - - @Override - public void onReadFailed( - GoosciUserMetadata.ExperimentOverview localExperimentOverview) { - mFailureCount++; - } - - @Override - public void onNewerVersionDetected( - GoosciUserMetadata.ExperimentOverview experimentOverview) { - mFailureCount++; - } - }; - } - - public void setUp() { - cleanUp(); - } - - public void tearDown() { - cleanUp(); - } - - private void cleanUp() { - File rootDirectory = getInstrumentation().getContext().getFilesDir(); - for (File file : rootDirectory.listFiles()) { - if (file.getName().startsWith("exp_")) { - ExperimentCache.deleteRecursive(file); - } - } - mFailureCount = 0; - } - - public void testExperimentWriteRead() { - Experiment experiment = Experiment.newExperiment(10, "exp_localId", 0); - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - cache.createNewExperiment(experiment); - cache.writeActiveExperimentFile(); - - // Was it set correctly in the ExperimentCache? - assertTrue(MessageNano.messageNanoEquals( - cache.getActiveExperimentForTests().getExperimentProto(), - experiment.getExperimentProto())); - - // Force a load, make sure that's equal too. - cache.loadActiveExperimentFromFile(experiment.getExperimentOverview()); - assertTrue(MessageNano.messageNanoEquals( - cache.getActiveExperimentForTests().getExperimentProto(), - experiment.getExperimentProto())); - - // Clean up. - cache.deleteExperiment("exp_localId"); - assertNull(cache.getActiveExperimentForTests()); - } - - public void testExperimentWithChanges() { - Experiment experiment = Experiment.newExperiment(10, "exp_localId", 0); - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - cache.createNewExperiment(experiment); - assertTrue(cache.needsWrite()); - - cache.writeActiveExperimentFile(); - assertFalse(cache.needsWrite()); - - experiment.setTitle("Title"); - cache.updateExperiment(experiment); - assertTrue(cache.needsWrite()); - cache.writeActiveExperimentFile(); - - // Force a load, make sure that's got the new title. - cache.loadActiveExperimentFromFile(experiment.getExperimentOverview()); - assertEquals("Title", cache.getActiveExperimentForTests().getTitle()); - - // Clean up. - cache.deleteExperiment("exp_localId"); - assertNull(cache.getActiveExperimentForTests()); - } - - public void testChangingExperimentWritesOldOne() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - - Experiment experiment = Experiment.newExperiment(10, "exp_localId", 0); - cache.createNewExperiment(experiment); - assertEquals(cache.getActiveExperimentForTests().getCreationTimeMs(), 10); - experiment.setTitle("Title"); - cache.updateExperiment(experiment); - - Experiment second = Experiment.newExperiment(20, "exp_secondId", 0); - cache.createNewExperiment(second); - assertEquals(cache.getActiveExperimentForTests().getCreationTimeMs(), 20); - - cache.getExperiment(experiment.getExperimentOverview()); - assertEquals(cache.getActiveExperimentForTests().getCreationTimeMs(), 10); - assertEquals(cache.getActiveExperimentForTests().getTitle(), "Title"); - } - - public void testUpgradeStartsWriteTimer() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = 0; - proto.fileVersion.minorVersion = 0; - proto.fileVersion.platformVersion = 0; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 1, 1); - assertEquals(1, proto.fileVersion.version); - assertEquals(1, proto.fileVersion.minorVersion); - assertEquals(1, proto.fileVersion.platformVersion); - assertEquals(GoosciGadgetInfo.GadgetInfo.Platform.ANDROID, proto.fileVersion.platform); - assertTrue(cache.needsWrite()); - } - - public void testUpgradeWhenVersionMissing() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion = null; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 1, 1); - assertEquals(1, proto.fileVersion.version); - assertEquals(1, proto.fileVersion.minorVersion); - assertEquals(1, proto.fileVersion.platformVersion); - assertEquals(GoosciGadgetInfo.GadgetInfo.Platform.ANDROID, proto.fileVersion.platform); - } - - public void testNoUpgradeDoesNotStartWriteTimer() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = 1; - proto.fileVersion.minorVersion = 1; - proto.fileVersion.platformVersion = 1; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 1, 1); - assertEquals(1, proto.fileVersion.version); - assertEquals(1, proto.fileVersion.minorVersion); - assertEquals(1, proto.fileVersion.platformVersion); - assertFalse(cache.needsWrite()); - } - - public void testVersionTooNewThrowsError() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureExpectedListener()); - - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = ExperimentCache.VERSION + 1; - proto.fileVersion.minorVersion = ExperimentCache.MINOR_VERSION; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - ExperimentCache.VERSION, ExperimentCache.MINOR_VERSION, - ExperimentCache.PLATFORM_VERSION); - assertEquals(1, mFailureCount); - } - - public void testOnlyUpgradesMinorVersion() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = 1; - proto.fileVersion.minorVersion = 0; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 1, 1); - assertEquals(proto.fileVersion.version, 1); - assertEquals(proto.fileVersion.minorVersion, 1); - } - - public void testUpgradesToMinor2() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = 1; - proto.fileVersion.minorVersion = 1; - proto.fileVersion.platformVersion = 2; - proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.ANDROID; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 2, 500); - assertEquals(proto.fileVersion.version, 1); - assertEquals(proto.fileVersion.minorVersion, 2); - assertEquals(proto.fileVersion.platformVersion, 500); - assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); - } - - public void testDontDowngradePlatform() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = 1; - proto.fileVersion.minorVersion = 2; - proto.fileVersion.platformVersion = 1000; - proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.ANDROID; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 2, 500); - assertEquals(proto.fileVersion.version, 1); - assertEquals(proto.fileVersion.minorVersion, 2); - assertEquals(proto.fileVersion.platformVersion, 1000); - assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); - } - - public void testChangePlatformToAndroid() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = 1; - proto.fileVersion.minorVersion = 1; - proto.fileVersion.platformVersion = 1000; - proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.IOS; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 2, 500); - assertEquals(proto.fileVersion.version, 1); - assertEquals(proto.fileVersion.minorVersion, 2); - assertEquals(proto.fileVersion.platformVersion, 500); - assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); - } - - public void testOnlyUpgradesPlatformVersion() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureFailsListener(), 0); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = 1; - proto.fileVersion.minorVersion = 1; - proto.fileVersion.platformVersion = 0; - cache.upgradeExperimentVersionIfNeeded(proto, new GoosciUserMetadata.ExperimentOverview(), - 1, 1, 1); - assertEquals(proto.fileVersion.version, 1); - assertEquals(proto.fileVersion.minorVersion, 1); - assertEquals(proto.fileVersion.platformVersion, 1); - } - - public void testCantWriteNewerVersion() { - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureExpectedListener()); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.version = ExperimentCache.VERSION; - proto.fileVersion.minorVersion = ExperimentCache.MINOR_VERSION + 1; - GoosciUserMetadata.ExperimentOverview overview = - new GoosciUserMetadata.ExperimentOverview(); - cache.upgradeExperimentVersionIfNeeded(proto, overview, - ExperimentCache.VERSION, ExperimentCache.MINOR_VERSION, - ExperimentCache.PLATFORM_VERSION); - // Version should be unchanged -- don't upgrade minor version. - assertEquals(proto.fileVersion.version, ExperimentCache.VERSION); - assertEquals(proto.fileVersion.minorVersion, ExperimentCache.MINOR_VERSION + 1); - - // But no errors yet -- didn't try to save it. - assertEquals(0, mFailureCount); - - Experiment experiment = Experiment.fromExperiment(proto, overview); - cache.updateExperiment(experiment); // Set this one to active so we can try to write it. - cache.writeActiveExperimentFile(); - assertEquals(1, mFailureCount); - } - - public void testPlatformVersion1To2() { - // From 1.1.1 to 1.1.2, we index the trials within the experiment. - ExperimentCache cache = new ExperimentCache(getInstrumentation().getContext(), - getFailureExpectedListener()); - GoosciExperiment.Experiment proto = createExperimentProto(); - proto.fileVersion.platformVersion = 1; - proto.fileVersion.version = 1; - proto.fileVersion.minorVersion = 1; - GoosciUserMetadata.ExperimentOverview overview = - new GoosciUserMetadata.ExperimentOverview(); - GoosciTrial.Trial trial1 = new GoosciTrial.Trial(); - GoosciTrial.Trial trial2 = new GoosciTrial.Trial(); - proto.trials = new GoosciTrial.Trial[]{trial1, trial2}; - - cache.upgradeExperimentVersionIfNeeded(proto, overview, 1, 1, 2); - assertEquals(0, mFailureCount); - assertEquals(2, proto.fileVersion.platformVersion); - assertEquals(2, proto.totalTrials); - assertEquals(1, proto.trials[0].trialNumberInExperiment); - assertEquals(2, proto.trials[1].trialNumberInExperiment); - } - - @NonNull - private GoosciExperiment.Experiment createExperimentProto() { - GoosciExperiment.Experiment proto = new GoosciExperiment.Experiment(); - proto.fileVersion = new Version.FileVersion(); - return proto; + private int mFailureCount = 0; + + private ExperimentCache.FailureListener getFailureFailsListener() { + return new ExperimentCache.FailureListener() { + @Override + public void onWriteFailed(Experiment experimentToWrite) { + throw new RuntimeException("Expected success"); + } + + @Override + public void onReadFailed(GoosciUserMetadata.ExperimentOverview experimentOverview) { + throw new RuntimeException("Expected success"); + } + + @Override + public void onNewerVersionDetected(GoosciUserMetadata.ExperimentOverview experimentOverview) { + throw new RuntimeException("Expected success"); + } + }; + } + + private ExperimentCache.FailureListener getFailureExpectedListener() { + return new ExperimentCache.FailureListener() { + @Override + public void onWriteFailed(Experiment experimentToWrite) { + mFailureCount++; + } + + @Override + public void onReadFailed(GoosciUserMetadata.ExperimentOverview localExperimentOverview) { + mFailureCount++; + } + + @Override + public void onNewerVersionDetected(GoosciUserMetadata.ExperimentOverview experimentOverview) { + mFailureCount++; + } + }; + } + + public void setUp() { + cleanUp(); + } + + public void tearDown() { + cleanUp(); + } + + private void cleanUp() { + File rootDirectory = getInstrumentation().getContext().getFilesDir(); + for (File file : rootDirectory.listFiles()) { + if (file.getName().startsWith("exp_")) { + ExperimentCache.deleteRecursive(file); + } } -} \ No newline at end of file + mFailureCount = 0; + } + + public void testExperimentWriteRead() { + Experiment experiment = Experiment.newExperiment(10, "exp_localId", 0); + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + cache.createNewExperiment(experiment); + cache.writeActiveExperimentFile(); + + // Was it set correctly in the ExperimentCache? + assertTrue( + MessageNano.messageNanoEquals( + cache.getActiveExperimentForTests().getExperimentProto(), + experiment.getExperimentProto())); + + // Force a load, make sure that's equal too. + cache.loadActiveExperimentFromFile(experiment.getExperimentOverview()); + assertTrue( + MessageNano.messageNanoEquals( + cache.getActiveExperimentForTests().getExperimentProto(), + experiment.getExperimentProto())); + + // Clean up. + cache.deleteExperiment("exp_localId"); + assertNull(cache.getActiveExperimentForTests()); + } + + public void testExperimentWithChanges() { + Experiment experiment = Experiment.newExperiment(10, "exp_localId", 0); + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + cache.createNewExperiment(experiment); + assertTrue(cache.needsWrite()); + + cache.writeActiveExperimentFile(); + assertFalse(cache.needsWrite()); + + experiment.setTitle("Title"); + cache.updateExperiment(experiment); + assertTrue(cache.needsWrite()); + cache.writeActiveExperimentFile(); + + // Force a load, make sure that's got the new title. + cache.loadActiveExperimentFromFile(experiment.getExperimentOverview()); + assertEquals("Title", cache.getActiveExperimentForTests().getTitle()); + + // Clean up. + cache.deleteExperiment("exp_localId"); + assertNull(cache.getActiveExperimentForTests()); + } + + public void testChangingExperimentWritesOldOne() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + + Experiment experiment = Experiment.newExperiment(10, "exp_localId", 0); + cache.createNewExperiment(experiment); + assertEquals(cache.getActiveExperimentForTests().getCreationTimeMs(), 10); + experiment.setTitle("Title"); + cache.updateExperiment(experiment); + + Experiment second = Experiment.newExperiment(20, "exp_secondId", 0); + cache.createNewExperiment(second); + assertEquals(cache.getActiveExperimentForTests().getCreationTimeMs(), 20); + + cache.getExperiment(experiment.getExperimentOverview()); + assertEquals(cache.getActiveExperimentForTests().getCreationTimeMs(), 10); + assertEquals(cache.getActiveExperimentForTests().getTitle(), "Title"); + } + + public void testUpgradeStartsWriteTimer() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = 0; + proto.fileVersion.minorVersion = 0; + proto.fileVersion.platformVersion = 0; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 1, 1); + assertEquals(1, proto.fileVersion.version); + assertEquals(1, proto.fileVersion.minorVersion); + assertEquals(1, proto.fileVersion.platformVersion); + assertEquals(GoosciGadgetInfo.GadgetInfo.Platform.ANDROID, proto.fileVersion.platform); + assertTrue(cache.needsWrite()); + } + + public void testUpgradeWhenVersionMissing() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion = null; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 1, 1); + assertEquals(1, proto.fileVersion.version); + assertEquals(1, proto.fileVersion.minorVersion); + assertEquals(1, proto.fileVersion.platformVersion); + assertEquals(GoosciGadgetInfo.GadgetInfo.Platform.ANDROID, proto.fileVersion.platform); + } + + public void testNoUpgradeDoesNotStartWriteTimer() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = 1; + proto.fileVersion.minorVersion = 1; + proto.fileVersion.platformVersion = 1; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 1, 1); + assertEquals(1, proto.fileVersion.version); + assertEquals(1, proto.fileVersion.minorVersion); + assertEquals(1, proto.fileVersion.platformVersion); + assertFalse(cache.needsWrite()); + } + + public void testVersionTooNewThrowsError() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureExpectedListener()); + + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = ExperimentCache.VERSION + 1; + proto.fileVersion.minorVersion = ExperimentCache.MINOR_VERSION; + cache.upgradeExperimentVersionIfNeeded( + proto, + new GoosciUserMetadata.ExperimentOverview(), + ExperimentCache.VERSION, + ExperimentCache.MINOR_VERSION, + ExperimentCache.PLATFORM_VERSION); + assertEquals(1, mFailureCount); + } + + public void testOnlyUpgradesMinorVersion() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = 1; + proto.fileVersion.minorVersion = 0; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 1, 1); + assertEquals(proto.fileVersion.version, 1); + assertEquals(proto.fileVersion.minorVersion, 1); + } + + public void testUpgradesToMinor2() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = 1; + proto.fileVersion.minorVersion = 1; + proto.fileVersion.platformVersion = 2; + proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.ANDROID; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 2, 500); + assertEquals(proto.fileVersion.version, 1); + assertEquals(proto.fileVersion.minorVersion, 2); + assertEquals(proto.fileVersion.platformVersion, 500); + assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); + } + + public void testDontDowngradePlatform() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = 1; + proto.fileVersion.minorVersion = 2; + proto.fileVersion.platformVersion = 1000; + proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.ANDROID; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 2, 500); + assertEquals(proto.fileVersion.version, 1); + assertEquals(proto.fileVersion.minorVersion, 2); + assertEquals(proto.fileVersion.platformVersion, 1000); + assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); + } + + public void testChangePlatformToAndroid() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = 1; + proto.fileVersion.minorVersion = 1; + proto.fileVersion.platformVersion = 1000; + proto.fileVersion.platform = GoosciGadgetInfo.GadgetInfo.Platform.IOS; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 2, 500); + assertEquals(proto.fileVersion.version, 1); + assertEquals(proto.fileVersion.minorVersion, 2); + assertEquals(proto.fileVersion.platformVersion, 500); + assertEquals(proto.fileVersion.platform, GoosciGadgetInfo.GadgetInfo.Platform.ANDROID); + } + + public void testOnlyUpgradesPlatformVersion() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureFailsListener(), 0); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = 1; + proto.fileVersion.minorVersion = 1; + proto.fileVersion.platformVersion = 0; + cache.upgradeExperimentVersionIfNeeded( + proto, new GoosciUserMetadata.ExperimentOverview(), 1, 1, 1); + assertEquals(proto.fileVersion.version, 1); + assertEquals(proto.fileVersion.minorVersion, 1); + assertEquals(proto.fileVersion.platformVersion, 1); + } + + public void testCantWriteNewerVersion() { + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureExpectedListener()); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.version = ExperimentCache.VERSION; + proto.fileVersion.minorVersion = ExperimentCache.MINOR_VERSION + 1; + GoosciUserMetadata.ExperimentOverview overview = new GoosciUserMetadata.ExperimentOverview(); + cache.upgradeExperimentVersionIfNeeded( + proto, + overview, + ExperimentCache.VERSION, + ExperimentCache.MINOR_VERSION, + ExperimentCache.PLATFORM_VERSION); + // Version should be unchanged -- don't upgrade minor version. + assertEquals(proto.fileVersion.version, ExperimentCache.VERSION); + assertEquals(proto.fileVersion.minorVersion, ExperimentCache.MINOR_VERSION + 1); + + // But no errors yet -- didn't try to save it. + assertEquals(0, mFailureCount); + + Experiment experiment = Experiment.fromExperiment(proto, overview); + cache.updateExperiment(experiment); // Set this one to active so we can try to write it. + cache.writeActiveExperimentFile(); + assertEquals(1, mFailureCount); + } + + public void testPlatformVersion1To2() { + // From 1.1.1 to 1.1.2, we index the trials within the experiment. + ExperimentCache cache = + new ExperimentCache(getInstrumentation().getContext(), getFailureExpectedListener()); + GoosciExperiment.Experiment proto = createExperimentProto(); + proto.fileVersion.platformVersion = 1; + proto.fileVersion.version = 1; + proto.fileVersion.minorVersion = 1; + GoosciUserMetadata.ExperimentOverview overview = new GoosciUserMetadata.ExperimentOverview(); + GoosciTrial.Trial trial1 = new GoosciTrial.Trial(); + GoosciTrial.Trial trial2 = new GoosciTrial.Trial(); + proto.trials = new GoosciTrial.Trial[] {trial1, trial2}; + + cache.upgradeExperimentVersionIfNeeded(proto, overview, 1, 1, 2); + assertEquals(0, mFailureCount); + assertEquals(2, proto.fileVersion.platformVersion); + assertEquals(2, proto.totalTrials); + assertEquals(1, proto.trials[0].trialNumberInExperiment); + assertEquals(2, proto.trials[1].trialNumberInExperiment); + } + + @NonNull + private GoosciExperiment.Experiment createExperimentProto() { + GoosciExperiment.Experiment proto = new GoosciExperiment.Experiment(); + proto.fileVersion = new Version.FileVersion(); + return proto; + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/RecordingMetadata.java b/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/RecordingMetadata.java index b7e2387f..fd66ddb6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/RecordingMetadata.java +++ b/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/RecordingMetadata.java @@ -20,73 +20,77 @@ import android.os.Parcelable; public class RecordingMetadata implements Parcelable { - /** - * "Timestamp" that indicates that recording has not started. - */ - public static final int NOT_RECORDING = -1; + /** "Timestamp" that indicates that recording has not started. */ + public static final int NOT_RECORDING = -1; - protected RecordingMetadata(Parcel in) { - mStartTime = in.readLong(); - mRunId = in.readString(); - mExperimentName = in.readString(); - } + protected RecordingMetadata(Parcel in) { + mStartTime = in.readLong(); + mRunId = in.readString(); + mExperimentName = in.readString(); + } - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeLong(mStartTime); - dest.writeString(mRunId); - dest.writeString(mExperimentName); - } + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(mStartTime); + dest.writeString(mRunId); + dest.writeString(mExperimentName); + } - @Override - public int describeContents() { - return 0; - } + @Override + public int describeContents() { + return 0; + } - public static final Creator CREATOR = new Creator() { + public static final Creator CREATOR = + new Creator() { @Override public RecordingMetadata createFromParcel(Parcel in) { - return new RecordingMetadata(in); + return new RecordingMetadata(in); } @Override public RecordingMetadata[] newArray(int size) { - return new RecordingMetadata[size]; + return new RecordingMetadata[size]; } - }; + }; - public static long getStartTime(RecordingMetadata recording) { - return recording != null ? recording.getStartTime() : NOT_RECORDING; - } + public static long getStartTime(RecordingMetadata recording) { + return recording != null ? recording.getStartTime() : NOT_RECORDING; + } - private long mStartTime; - private String mRunId; - private String mExperimentName; + private long mStartTime; + private String mRunId; + private String mExperimentName; - public RecordingMetadata(long startTime, String runId, String experimentName) { - mStartTime = startTime; - mRunId = runId; - mExperimentName = experimentName; - } + public RecordingMetadata(long startTime, String runId, String experimentName) { + mStartTime = startTime; + mRunId = runId; + mExperimentName = experimentName; + } - public long getStartTime() { - return mStartTime; - } + public long getStartTime() { + return mStartTime; + } - public String getRunId() { - return mRunId; - } + public String getRunId() { + return mRunId; + } - public String getExperimentName() { - return mExperimentName; - } + public String getExperimentName() { + return mExperimentName; + } - @Override - public String toString() { - return "RecordingMetadata{" + - "mStartTime=" + mStartTime + - ", mRunId='" + mRunId + '\'' + - ", mExperimentName='" + mExperimentName + '\'' + - '}'; - } + @Override + public String toString() { + return "RecordingMetadata{" + + "mStartTime=" + + mStartTime + + ", mRunId='" + + mRunId + + '\'' + + ", mExperimentName='" + + mExperimentName + + '\'' + + '}'; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/TransportableSensorOptions.java b/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/TransportableSensorOptions.java index 0e874133..d7cde33e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/TransportableSensorOptions.java +++ b/OpenScienceJournal/whistlepunk_library/src/api/wireapi/java/com/google/android/apps/forscience/whistlepunk/wireapi/TransportableSensorOptions.java @@ -19,54 +19,53 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.ArrayMap; - import java.util.Collection; import java.util.Map; public class TransportableSensorOptions implements Parcelable { - private Map mValues; + private Map mValues; - public TransportableSensorOptions(Map values) { - mValues = values; - } + public TransportableSensorOptions(Map values) { + mValues = values; + } - protected TransportableSensorOptions(Parcel in) { - mValues = new ArrayMap<>(); - in.readMap(mValues, getClass().getClassLoader()); - } + protected TransportableSensorOptions(Parcel in) { + mValues = new ArrayMap<>(); + in.readMap(mValues, getClass().getClassLoader()); + } - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeMap(mValues); - } + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeMap(mValues); + } - @Override - public int describeContents() { - return 0; - } + @Override + public int describeContents() { + return 0; + } - public static final Creator CREATOR = - new Creator() { - @Override - public TransportableSensorOptions createFromParcel(Parcel in) { - return new TransportableSensorOptions(in); - } - - @Override - public TransportableSensorOptions[] newArray(int size) { - return new TransportableSensorOptions[size]; - } - }; + public static final Creator CREATOR = + new Creator() { + @Override + public TransportableSensorOptions createFromParcel(Parcel in) { + return new TransportableSensorOptions(in); + } - public String getString(String key, String defaultValue) { - if (mValues.containsKey(key)) { - return mValues.get(key); - } else { - return defaultValue; + @Override + public TransportableSensorOptions[] newArray(int size) { + return new TransportableSensorOptions[size]; } - } + }; - public Collection getWrittenKeys() { - return mValues.keySet(); + public String getString(String key, String defaultValue) { + if (mValues.containsKey(key)) { + return mValues.get(key); + } else { + return defaultValue; } + } + + public Collection getWrittenKeys() { + return mValues.keySet(); + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClient.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClient.java index 04c8d54a..2fc35500 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClient.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClient.java @@ -19,33 +19,31 @@ import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothGattDescriptor; import android.bluetooth.BluetoothGattService; - -import java.util.UUID; - import io.reactivex.Single; +import java.util.UUID; public interface BleClient { - boolean connectToAddress(String address); + boolean connectToAddress(String address); - void findServices(String address); + void findServices(String address); - BluetoothGattService getService(String address, UUID serviceId); + BluetoothGattService getService(String address, UUID serviceId); - void readValue(String address, BluetoothGattCharacteristic theCharacteristic); + void readValue(String address, BluetoothGattCharacteristic theCharacteristic); - void writeValue(String address, BluetoothGattCharacteristic theCharacteristic, byte[] value); + void writeValue(String address, BluetoothGattCharacteristic theCharacteristic, byte[] value); - BleFlow getFlowFor(String address); + BleFlow getFlowFor(String address); - BleFlow createFlowFor(String address); + BleFlow createFlowFor(String address); - void disconnectDevice(String address); + void disconnectDevice(String address); - void writeValue(String address, BluetoothGattDescriptor currentDescriptor, byte[] value); + void writeValue(String address, BluetoothGattDescriptor currentDescriptor, byte[] value); - boolean enableNotifications(String address, BluetoothGattCharacteristic characteristic); + boolean enableNotifications(String address, BluetoothGattCharacteristic characteristic); - boolean disableNotifications(String address, BluetoothGattCharacteristic characteristic); + boolean disableNotifications(String address, BluetoothGattCharacteristic characteristic); - Single whenConnected(); + Single whenConnected(); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java index 97fbdaf0..49e79337 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleClientImpl.java @@ -25,156 +25,151 @@ import android.content.ServiceConnection; import android.os.IBinder; import android.util.Log; - import com.google.common.base.Optional; - +import io.reactivex.Single; +import io.reactivex.subjects.BehaviorSubject; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import io.reactivex.Single; -import io.reactivex.subjects.BehaviorSubject; - -/** - * The BLE client, a thin wrapper around the MyBleService. - */ +/** The BLE client, a thin wrapper around the MyBleService. */ public class BleClientImpl implements BleClient { - private static String TAG = "BLEClient"; - private static final boolean DEBUG = false; + private static String TAG = "BLEClient"; + private static final boolean DEBUG = false; - private BehaviorSubject> mWhenService = BehaviorSubject.create(); - private MyBleService bleService; + private BehaviorSubject> mWhenService = BehaviorSubject.create(); + private MyBleService bleService; - private final Context context; - private final List flows; + private final Context context; + private final List flows; - // service state changes - private final ServiceConnection serviceConnection = new ServiceConnection() { + // service state changes + private final ServiceConnection serviceConnection = + new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder service) { - bleService = ((MyBleService.LocalBinder) service).getService(); - mWhenService.onNext(Optional.of(bleService)); - if (DEBUG) Log.d(TAG, "bleService connected"); + bleService = ((MyBleService.LocalBinder) service).getService(); + mWhenService.onNext(Optional.of(bleService)); + if (DEBUG) Log.d(TAG, "bleService connected"); } @Override public void onServiceDisconnected(ComponentName componentName) { - bleService = null; - mWhenService.onNext(Optional.absent()); - if (DEBUG) Log.d(TAG, "bleService disconnected"); - } - }; - - public BleClientImpl(Context context) { - this.context = context; - flows = new ArrayList<>(); - } - - public final boolean create() { - if (DEBUG) Log.d(TAG, "starting client..."); - - Intent bindIntent = new Intent(context, MyBleService.class); - context.startService(bindIntent); - return context.bindService(bindIntent, serviceConnection, Context.BIND_AUTO_CREATE); - } - - public void onCreate(boolean isBleSupported, boolean isBleEnabled) { - // TODO: create boolean fields. - if (DEBUG) { - Log.d(TAG, "BLE support: " + (isBleSupported ? "YES" : "NO")); - Log.d(TAG, "BLE enabled: " + (isBleEnabled ? "YES" : "NO")); - } - } - - public final void destroy() { - for (BleFlow flow : flows) { - flow.close(); - } - if (bleService != null) { - context.unbindService(serviceConnection); - } - if (DEBUG) Log.d(TAG, "client stopped"); - } - - @Override - public final boolean connectToAddress(String address) { - if (DEBUG) Log.d(TAG, "connecting to address: " + address + "..."); - try { - return bleService.connect(address); - } catch (java.lang.IllegalArgumentException ex) { - Log.e(TAG, "failure connecting to address " + address + " due to: " + ex.getMessage()); - return false; - } - } - - @Override - public final void findServices(String address) { - if (DEBUG) Log.d(TAG, "scanning for services on " + address + "..."); - bleService.discoverServices(address); - } - - @Override - public BluetoothGattService getService(String address, UUID serviceId) { - return bleService.getService(address, serviceId); - } - - @Override - public void readValue(String address, BluetoothGattCharacteristic theCharacteristic) { - bleService.readValue(address, theCharacteristic); - } - - @Override - public void writeValue(String address, BluetoothGattCharacteristic theCharacteristic, - byte[] value) { - bleService.writeValue(address, theCharacteristic, value); - } - - @Override - public BleFlow getFlowFor(String address) { - for (BleFlow flow : flows) { - // Should only have 1 flow per device - if (flow.getAddress().equals(address)) { - return flow; - } + bleService = null; + mWhenService.onNext(Optional.absent()); + if (DEBUG) Log.d(TAG, "bleService disconnected"); } - // If there isn't a valid flow, return a new one. - return createFlowFor(address); - } - - @Override - public BleFlow createFlowFor(String address) { - BleFlow flow = BleFlow.getInstance(this, context, address); - flows.add(flow); + }; + + public BleClientImpl(Context context) { + this.context = context; + flows = new ArrayList<>(); + } + + public final boolean create() { + if (DEBUG) Log.d(TAG, "starting client..."); + + Intent bindIntent = new Intent(context, MyBleService.class); + context.startService(bindIntent); + return context.bindService(bindIntent, serviceConnection, Context.BIND_AUTO_CREATE); + } + + public void onCreate(boolean isBleSupported, boolean isBleEnabled) { + // TODO: create boolean fields. + if (DEBUG) { + Log.d(TAG, "BLE support: " + (isBleSupported ? "YES" : "NO")); + Log.d(TAG, "BLE enabled: " + (isBleEnabled ? "YES" : "NO")); + } + } + + public final void destroy() { + for (BleFlow flow : flows) { + flow.close(); + } + if (bleService != null) { + context.unbindService(serviceConnection); + } + if (DEBUG) Log.d(TAG, "client stopped"); + } + + @Override + public final boolean connectToAddress(String address) { + if (DEBUG) Log.d(TAG, "connecting to address: " + address + "..."); + try { + return bleService.connect(address); + } catch (java.lang.IllegalArgumentException ex) { + Log.e(TAG, "failure connecting to address " + address + " due to: " + ex.getMessage()); + return false; + } + } + + @Override + public final void findServices(String address) { + if (DEBUG) Log.d(TAG, "scanning for services on " + address + "..."); + bleService.discoverServices(address); + } + + @Override + public BluetoothGattService getService(String address, UUID serviceId) { + return bleService.getService(address, serviceId); + } + + @Override + public void readValue(String address, BluetoothGattCharacteristic theCharacteristic) { + bleService.readValue(address, theCharacteristic); + } + + @Override + public void writeValue( + String address, BluetoothGattCharacteristic theCharacteristic, byte[] value) { + bleService.writeValue(address, theCharacteristic, value); + } + + @Override + public BleFlow getFlowFor(String address) { + for (BleFlow flow : flows) { + // Should only have 1 flow per device + if (flow.getAddress().equals(address)) { return flow; - } - - @Override - public void disconnectDevice(String address) { - bleService.disconnectDevice(address); - } - - @Override - public void writeValue(String address, BluetoothGattDescriptor currentDescriptor, byte[] - value) { - bleService.writeValue(address, currentDescriptor, value); - } - - @Override - public boolean enableNotifications(String address, BluetoothGattCharacteristic characteristic) { - return bleService.setNotificationsFor(address, characteristic, true); - } - - @Override - public boolean disableNotifications(String address, BluetoothGattCharacteristic - characteristic) { - return bleService.setNotificationsFor(address, characteristic, false); - } - - @Override - public Single whenConnected() { - return mWhenService.filter(Optional::isPresent) - .firstElement() - .map(o -> (BleClient) this) - .toSingle(); - } + } + } + // If there isn't a valid flow, return a new one. + return createFlowFor(address); + } + + @Override + public BleFlow createFlowFor(String address) { + BleFlow flow = BleFlow.getInstance(this, context, address); + flows.add(flow); + return flow; + } + + @Override + public void disconnectDevice(String address) { + bleService.disconnectDevice(address); + } + + @Override + public void writeValue(String address, BluetoothGattDescriptor currentDescriptor, byte[] value) { + bleService.writeValue(address, currentDescriptor, value); + } + + @Override + public boolean enableNotifications(String address, BluetoothGattCharacteristic characteristic) { + return bleService.setNotificationsFor(address, characteristic, true); + } + + @Override + public boolean disableNotifications(String address, BluetoothGattCharacteristic characteristic) { + return bleService.setNotificationsFor(address, characteristic, false); + } + + @Override + public Single whenConnected() { + return mWhenService + .filter(Optional::isPresent) + .firstElement() + .map(o -> (BleClient) this) + .toSingle(); + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java index 1d4b13f0..ed72b603 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleEvents.java @@ -20,67 +20,65 @@ import android.content.IntentFilter; import android.net.Uri; -/** - * BLE related events. - */ +/** BLE related events. */ public class BleEvents { - static final String BLE_UNSUPPORTED = "BLE_UNSUPPORTED"; - static final String BLE_DISABLED = "BLE_DISABLED"; + static final String BLE_UNSUPPORTED = "BLE_UNSUPPORTED"; + static final String BLE_DISABLED = "BLE_DISABLED"; - static final String GATT_CONNECT = "GATT_CONNECT"; - static final String GATT_CONNECT_FAIL = "GATT_CONNECT_FAIL"; - static final String GATT_DISCONNECT = "GATT_DISCONNECT"; - static final String GATT_DISCONNECT_FAIL = "GATT_DISCONNECT_FAIL"; - static final String SERVICES_OK = "SERVICES_OK"; - static final String SERVICES_FAIL = "SERVICES_FAIL"; + static final String GATT_CONNECT = "GATT_CONNECT"; + static final String GATT_CONNECT_FAIL = "GATT_CONNECT_FAIL"; + static final String GATT_DISCONNECT = "GATT_DISCONNECT"; + static final String GATT_DISCONNECT_FAIL = "GATT_DISCONNECT_FAIL"; + static final String SERVICES_OK = "SERVICES_OK"; + static final String SERVICES_FAIL = "SERVICES_FAIL"; - static final String READ_CHAR_OK = "READ_CHAR_OK"; - static final String READ_CHAR_FAIL = "READ_CHAR_FAIL"; + static final String READ_CHAR_OK = "READ_CHAR_OK"; + static final String READ_CHAR_FAIL = "READ_CHAR_FAIL"; - static final String WRITE_CHAR_OK = "WRITE_CHAR_OK"; - static final String WRITE_CHAR_FAIL = "WRITE_CHAR_FAIL"; + static final String WRITE_CHAR_OK = "WRITE_CHAR_OK"; + static final String WRITE_CHAR_FAIL = "WRITE_CHAR_FAIL"; - static final String READ_DESC_OK = "READ_DESC_OK"; - static final String READ_DESC_FAIL = "READ_DESC_FAIL"; - static final String WRITE_DESC_OK = "WRITE_DESC_OK"; - static final String WRITE_DESC_FAIL = "WRITE_DESC_FAIL"; - static final String CHAR_CHANGED = "CHAR_CHANGED"; + static final String READ_DESC_OK = "READ_DESC_OK"; + static final String READ_DESC_FAIL = "READ_DESC_FAIL"; + static final String WRITE_DESC_OK = "WRITE_DESC_OK"; + static final String WRITE_DESC_FAIL = "WRITE_DESC_FAIL"; + static final String CHAR_CHANGED = "CHAR_CHANGED"; - private static final String DATA_SCHEME = "sciencejournal"; + private static final String DATA_SCHEME = "sciencejournal"; - static IntentFilter createIntentFilter(String address) { - IntentFilter intent = new IntentFilter(); + static IntentFilter createIntentFilter(String address) { + IntentFilter intent = new IntentFilter(); - intent.addDataScheme(DATA_SCHEME); - intent.addDataAuthority(address, null); + intent.addDataScheme(DATA_SCHEME); + intent.addDataAuthority(address, null); - intent.addAction(BLE_UNSUPPORTED); - intent.addAction(BLE_DISABLED); + intent.addAction(BLE_UNSUPPORTED); + intent.addAction(BLE_DISABLED); - intent.addAction(GATT_CONNECT); - intent.addAction(GATT_CONNECT_FAIL); - intent.addAction(GATT_DISCONNECT); - intent.addAction(GATT_DISCONNECT_FAIL); - intent.addAction(SERVICES_OK); - intent.addAction(SERVICES_FAIL); + intent.addAction(GATT_CONNECT); + intent.addAction(GATT_CONNECT_FAIL); + intent.addAction(GATT_DISCONNECT); + intent.addAction(GATT_DISCONNECT_FAIL); + intent.addAction(SERVICES_OK); + intent.addAction(SERVICES_FAIL); - intent.addAction(READ_CHAR_OK); - intent.addAction(READ_CHAR_FAIL); - intent.addAction(WRITE_CHAR_OK); - intent.addAction(WRITE_CHAR_FAIL); + intent.addAction(READ_CHAR_OK); + intent.addAction(READ_CHAR_FAIL); + intent.addAction(WRITE_CHAR_OK); + intent.addAction(WRITE_CHAR_FAIL); - intent.addAction(CHAR_CHANGED); + intent.addAction(CHAR_CHANGED); - intent.addAction(READ_DESC_OK); - intent.addAction(READ_DESC_FAIL); - intent.addAction(WRITE_DESC_OK); - intent.addAction(WRITE_DESC_FAIL); + intent.addAction(READ_DESC_OK); + intent.addAction(READ_DESC_FAIL); + intent.addAction(WRITE_DESC_OK); + intent.addAction(WRITE_DESC_FAIL); - return intent; - } + return intent; + } - static Intent createIntent(String action, String address) { - Uri intentUri = new Uri.Builder().scheme(DATA_SCHEME).authority(address).build(); - return new Intent(action, intentUri); - } + static Intent createIntent(String action, String address) { + Uri intentUri = new Uri.Builder().scheme(DATA_SCHEME).authority(address).build(); + return new Intent(action, intentUri); + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java index 62fada26..0fe22c39 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlow.java @@ -27,7 +27,6 @@ import androidx.collection.ArraySet; import android.util.ArrayMap; import android.util.Log; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -38,18 +37,16 @@ /** * A BLE protocol builder for simplifying the interactions with a BLE remote device. - *

- * Example of usage: - *

- * Create a flow: - * + * + *

Example of usage: + * + *

Create a flow: * flow = bleClient.createFlowFor(ADDRESS).addListener(listener) * .connect().lookupService(SERVICE_UUID); * BleFlow.run(flow); * - *

- * In the above BleFlowListener, make sure you do something useful: - * + * + *

In the above BleFlowListener, make sure you do something useful: * listener = new BleFlowListener() { * * @Override public void onSuccess(BleFlow flow) { @@ -59,15 +56,27 @@ * */ public class BleFlow { - private static final long SERVICES_RETRY_DELAY_MILLIS = 500; - - private enum Action {CONNECT, LOOKUP_SRV, LOOKUP_CHARACT, READ_CHARACT, WRITE_CHARACT, - LOOKUP_DESC, WRITE_DESC, ENABLE_NOTIF, DISABLE_NOTIF, DISCONNECT } - private static String TAG = "BleFlow"; - private static final boolean DEBUG = false; - private static UUID BLE_CLIENT_CONFIG_CHARACTERISTIC = UUID.fromString( - "00002902-0000-1000-8000-00805f9b34fb"); - private static final BleFlowListener defaultListener = new BleFlowListener() { + private static final long SERVICES_RETRY_DELAY_MILLIS = 500; + + private enum Action { + CONNECT, + LOOKUP_SRV, + LOOKUP_CHARACT, + READ_CHARACT, + WRITE_CHARACT, + LOOKUP_DESC, + WRITE_DESC, + ENABLE_NOTIF, + DISABLE_NOTIF, + DISCONNECT + } + + private static String TAG = "BleFlow"; + private static final boolean DEBUG = false; + private static UUID BLE_CLIENT_CONFIG_CHARACTERISTIC = + UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"); + private static final BleFlowListener defaultListener = + new BleFlowListener() { @Override public void onSuccess() {} @@ -94,420 +103,432 @@ public void onNotificationUnsubscribed() {} @Override public void onServicesDiscovered() {} - }; - - private static class RichAction { - public Action action; - public Object param; - - /** - * @param action the action to be undertaken - * @param param the parameter to the action, if any. Can be null if that action does not - * take a parameter. - */ - RichAction(Action action, Object param) { - this.action = action; - this.param = param; - } + }; - @Override - public String toString() { - return action + "(" + (param == null ? "" : param) + ")"; - } + private static class RichAction { + public Action action; + public Object param; + + /** + * @param action the action to be undertaken + * @param param the parameter to the action, if any. Can be null if that action does not take a + * parameter. + */ + RichAction(Action action, Object param) { + this.action = action; + this.param = param; } - // TODO: add prefixes to fields to fit standard - private final Context context; - private final BleClient client; - private final List actions; - private final Set serviceIdsToLookup = new ArraySet<>(); - private final Map serviceMap = new ArrayMap<>(); - private final List characteristics; - private final List descriptors; - private final List values; - private Handler mDelayHandler = new Handler(); - - private BluetoothGattCharacteristic currentCharacteristic; - private BluetoothGattDescriptor currentDescriptor; - - private BleFlowListener listener; - private int characteristicIndex; - private int valueIndex; - private int actionIndex; - private int descriptorIndex; - private String address; - private AtomicBoolean flowEnded; - - private BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public String toString() { + return action + "(" + (param == null ? "" : param) + ")"; + } + } + + // TODO: add prefixes to fields to fit standard + private final Context context; + private final BleClient client; + private final List actions; + private final Set serviceIdsToLookup = new ArraySet<>(); + private final Map serviceMap = new ArrayMap<>(); + private final List characteristics; + private final List descriptors; + private final List values; + private Handler mDelayHandler = new Handler(); + + private BluetoothGattCharacteristic currentCharacteristic; + private BluetoothGattDescriptor currentDescriptor; + + private BleFlowListener listener; + private int characteristicIndex; + private int valueIndex; + private int actionIndex; + private int descriptorIndex; + private String address; + private AtomicBoolean flowEnded; + + private BroadcastReceiver receiver = + new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - final String action = intent.getAction(); - - if (BleEvents.CHAR_CHANGED.equals(action)) { - int flags = intent.getIntExtra(MyBleService.FLAGS, 0); - byte[] data = intent.getByteArrayExtra(MyBleService.DATA); - UUID characteristic = UUID.fromString(intent.getStringExtra(MyBleService.UUID)); - listener.onNotification(characteristic, flags, data); - return; - } - if (flowEnded.get() && (BleEvents.GATT_CONNECT_FAIL.equals(action) - || BleEvents.GATT_DISCONNECT.equals(action))) { - listener.onDisconnect(); - return; - } - if (flowEnded.get()) { - return; - } + final String action = intent.getAction(); - if (BleEvents.BLE_DISABLED.equals(action)) { - listener.onFailure(new Exception("BLE disabled")); - flowEnded.set(true); - } else if (BleEvents.GATT_CONNECT.equals(action)) { - listener.onConnect(); - nextAction(); - } else if (BleEvents.GATT_CONNECT_FAIL.equals(action)) { - listener.onFailure(new Exception("Cannot connect to " + address)); - flowEnded.set(true); - } else if (BleEvents.GATT_DISCONNECT.equals(action)) { - nextAction(); - } else if (BleEvents.GATT_DISCONNECT_FAIL.equals(action)) { - listener.onFailure(new Exception("Could not disconnect from: " - + address)); - flowEnded.set(true); - } else if (BleEvents.SERVICES_OK.equals(action)) { - for (UUID serviceId : serviceIdsToLookup) { - // If there's no service for a serviceId we wanted to look up, there are - // several possibilities: - // - // 1) The device has actually gone away. In this case, either we don't need - // it anymore, so no harm done, or the next characteristic lookup for - // serviceId will fail, correctly. - // 2) We are on ChromeOS, or another platform that doesn't make the services - // available until some time _after_ calling back. (see discussion at - // b/31741822) - // - // Rather than try to distinguish the difference eagerly, we retry a couple - // of times, which is the correct behavior for #2, and is a small delay for - // the (rare) times we're actually in #1. - BluetoothGattService service = client.getService(address, serviceId); - if (service != null) { - serviceMap.put(serviceId, service); - serviceIdsToLookup.remove(serviceId); - } - } - int retriesLeft = intent.getIntExtra(MyBleService.INT_PARAM, 0); - if (!serviceIdsToLookup.isEmpty() && retriesLeft > 0) { - scheduleServiceLookupRetry(retriesLeft - 1); - } else { - serviceIdsToLookup.clear(); - listener.onServicesDiscovered(); - nextAction(); - } - } else if (BleEvents.SERVICES_FAIL.equals(action)) { - listener.onFailure(new Exception("Service lookup failure at: " - + address)); - flowEnded.set(true); - } else if (BleEvents.READ_CHAR_OK.equals(action)) { - UUID characteristic = UUID.fromString(intent.getStringExtra(MyBleService.UUID)); - int flags = intent.getIntExtra(MyBleService.FLAGS, 0); - byte[] data = intent.getByteArrayExtra(MyBleService.DATA); - listener.onCharacteristicRead(characteristic, flags, data); - nextAction(); - } else if (BleEvents.WRITE_CHAR_OK.equals(action)) { - nextAction(); - } else if (BleEvents.WRITE_CHAR_FAIL.equals(action)) { - listener.onFailure(new Exception("Writing characteristic fail for: " - + currentCharacteristic)); - flowEnded.set(true); - } else if (BleEvents.WRITE_DESC_OK.equals(action)) { - nextAction(); - } else if (BleEvents.WRITE_DESC_FAIL.equals(action)) { - listener.onFailure(new Exception("Write desriptor fail for: " - + currentDescriptor)); - flowEnded.set(true); + if (BleEvents.CHAR_CHANGED.equals(action)) { + int flags = intent.getIntExtra(MyBleService.FLAGS, 0); + byte[] data = intent.getByteArrayExtra(MyBleService.DATA); + UUID characteristic = UUID.fromString(intent.getStringExtra(MyBleService.UUID)); + listener.onNotification(characteristic, flags, data); + return; + } + if (flowEnded.get() + && (BleEvents.GATT_CONNECT_FAIL.equals(action) + || BleEvents.GATT_DISCONNECT.equals(action))) { + listener.onDisconnect(); + return; + } + if (flowEnded.get()) { + return; + } + + if (BleEvents.BLE_DISABLED.equals(action)) { + listener.onFailure(new Exception("BLE disabled")); + flowEnded.set(true); + } else if (BleEvents.GATT_CONNECT.equals(action)) { + listener.onConnect(); + nextAction(); + } else if (BleEvents.GATT_CONNECT_FAIL.equals(action)) { + listener.onFailure(new Exception("Cannot connect to " + address)); + flowEnded.set(true); + } else if (BleEvents.GATT_DISCONNECT.equals(action)) { + nextAction(); + } else if (BleEvents.GATT_DISCONNECT_FAIL.equals(action)) { + listener.onFailure(new Exception("Could not disconnect from: " + address)); + flowEnded.set(true); + } else if (BleEvents.SERVICES_OK.equals(action)) { + for (UUID serviceId : serviceIdsToLookup) { + // If there's no service for a serviceId we wanted to look up, there are + // several possibilities: + // + // 1) The device has actually gone away. In this case, either we don't need + // it anymore, so no harm done, or the next characteristic lookup for + // serviceId will fail, correctly. + // 2) We are on ChromeOS, or another platform that doesn't make the services + // available until some time _after_ calling back. (see discussion at + // b/31741822) + // + // Rather than try to distinguish the difference eagerly, we retry a couple + // of times, which is the correct behavior for #2, and is a small delay for + // the (rare) times we're actually in #1. + BluetoothGattService service = client.getService(address, serviceId); + if (service != null) { + serviceMap.put(serviceId, service); + serviceIdsToLookup.remove(serviceId); + } + } + int retriesLeft = intent.getIntExtra(MyBleService.INT_PARAM, 0); + if (!serviceIdsToLookup.isEmpty() && retriesLeft > 0) { + scheduleServiceLookupRetry(retriesLeft - 1); } else { - Log.e(TAG, "Event not mapped: " + action); + serviceIdsToLookup.clear(); + listener.onServicesDiscovered(); + nextAction(); } + } else if (BleEvents.SERVICES_FAIL.equals(action)) { + listener.onFailure(new Exception("Service lookup failure at: " + address)); + flowEnded.set(true); + } else if (BleEvents.READ_CHAR_OK.equals(action)) { + UUID characteristic = UUID.fromString(intent.getStringExtra(MyBleService.UUID)); + int flags = intent.getIntExtra(MyBleService.FLAGS, 0); + byte[] data = intent.getByteArrayExtra(MyBleService.DATA); + listener.onCharacteristicRead(characteristic, flags, data); + nextAction(); + } else if (BleEvents.WRITE_CHAR_OK.equals(action)) { + nextAction(); + } else if (BleEvents.WRITE_CHAR_FAIL.equals(action)) { + listener.onFailure( + new Exception("Writing characteristic fail for: " + currentCharacteristic)); + flowEnded.set(true); + } else if (BleEvents.WRITE_DESC_OK.equals(action)) { + nextAction(); + } else if (BleEvents.WRITE_DESC_FAIL.equals(action)) { + listener.onFailure(new Exception("Write desriptor fail for: " + currentDescriptor)); + flowEnded.set(true); + } else { + Log.e(TAG, "Event not mapped: " + action); + } } - }; - - private void scheduleServiceLookupRetry(final int retriesLeft) { - mDelayHandler.postDelayed(new Runnable() { - @Override - public void run() { - MyBleService.sendServiceDiscoveryIntent(context, address, retriesLeft); - } - }, SERVICES_RETRY_DELAY_MILLIS); + }; + + private void scheduleServiceLookupRetry(final int retriesLeft) { + mDelayHandler.postDelayed( + new Runnable() { + @Override + public void run() { + MyBleService.sendServiceDiscoveryIntent(context, address, retriesLeft); + } + }, + SERVICES_RETRY_DELAY_MILLIS); + } + + @VisibleForTesting + private BleFlow(BleClient client, Context context, String address) { + this.client = client; + this.context = context; + actions = new ArrayList<>(); + characteristics = new ArrayList<>(); + values = new ArrayList<>(); + descriptors = new ArrayList<>(); + this.address = address; + listener = defaultListener; + flowEnded = new AtomicBoolean(); + flowEnded.set(true); + + registerReceiver(receiver); + } + + @VisibleForTesting + private void registerReceiver(BroadcastReceiver receiver) { + MyBleService.getBroadcastManager(context) + .registerReceiver(receiver, BleEvents.createIntentFilter(address)); + } + + @VisibleForTesting + private void nextAction() { + if (flowEnded.get()) { + return; } - - @VisibleForTesting - private BleFlow(BleClient client, Context context, String address) { - this.client = client; - this.context = context; - actions = new ArrayList<>(); - characteristics = new ArrayList<>(); - values = new ArrayList<>(); - descriptors = new ArrayList<>(); - this.address = address; - listener = defaultListener; - flowEnded = new AtomicBoolean(); - flowEnded.set(true); - - registerReceiver(receiver); + if (actionIndex == actions.size()) { + if (DEBUG) Log.d(TAG, "no other action, success"); + flowEnded.set(true); + listener.onSuccess(); + return; } - - @VisibleForTesting - private void registerReceiver(BroadcastReceiver receiver) { - MyBleService.getBroadcastManager(context) - .registerReceiver(receiver, BleEvents.createIntentFilter(address)); - } - - @VisibleForTesting - private void nextAction() { - if (flowEnded.get()) { - return; + RichAction richAction = actions.get(actionIndex++); + Action action = richAction.action; + Object param = richAction.param; + if (DEBUG) Log.d(TAG, "current action: " + action); + switch (action) { + case CONNECT: + if (!client.connectToAddress(address)) { + listener.onFailure(new Exception("cannot connect to: " + address)); + flowEnded.set(true); } - if (actionIndex == actions.size()) { - if (DEBUG) Log.d(TAG, "no other action, success"); - flowEnded.set(true); - listener.onSuccess(); - return; + break; + case DISCONNECT: + client.disconnectDevice(address); + break; + case LOOKUP_SRV: + client.findServices(address); + break; + case LOOKUP_CHARACT: + UUID charactId = characteristics.get(characteristicIndex++); + UUID serviceId = (UUID) param; + BluetoothGattService currentService = serviceId != null ? serviceMap.get(serviceId) : null; + currentCharacteristic = + currentService != null ? currentService.getCharacteristic(charactId) : null; + if (currentCharacteristic == null) { + listener.onFailure(new Exception("No such charact.: " + charactId)); + flowEnded.set(true); + } else { + nextAction(); } - RichAction richAction = actions.get(actionIndex++); - Action action = richAction.action; - Object param = richAction.param; - if (DEBUG) Log.d(TAG, "current action: " + action); - switch (action) { - case CONNECT: - if (!client.connectToAddress(address)) { - listener.onFailure(new Exception("cannot connect to: " + address)); - flowEnded.set(true); - } - break; - case DISCONNECT: - client.disconnectDevice(address); - break; - case LOOKUP_SRV: - client.findServices(address); - break; - case LOOKUP_CHARACT: - UUID charactId = characteristics.get(characteristicIndex++); - UUID serviceId = (UUID) param; - BluetoothGattService currentService = serviceId != null ? serviceMap.get(serviceId) - : null; - currentCharacteristic = currentService != null ? - currentService.getCharacteristic(charactId) : null; - if (currentCharacteristic == null) { - listener.onFailure(new Exception("No such charact.: " + charactId)); - flowEnded.set(true); - } else { - nextAction(); - } - break; - case READ_CHARACT: - if (currentCharacteristic == null) { - listener.onFailure(new Exception("Missing charact.")); - flowEnded.set(true); - } else { - if (DEBUG) Log.d(TAG, "Reading on characteristic " + currentCharacteristic.getUuid()); - client.readValue(address, currentCharacteristic); - } - break; - case WRITE_CHARACT: - if (currentCharacteristic == null) { - listener.onFailure(new Exception("Missing charact.")); - flowEnded.set(true); - } else { - if (DEBUG) Log.d(TAG, "Writing on characteristic " + currentCharacteristic.getUuid() - + " the value " + Arrays.toString(values.get(valueIndex))); - client.writeValue(address, currentCharacteristic, values.get(valueIndex++)); - } - break; - case LOOKUP_DESC: - UUID descId = descriptors.get(descriptorIndex++); - currentDescriptor = currentCharacteristic.getDescriptor(descId); - if (currentDescriptor == null) { - listener.onFailure(new Exception("No such descriptor: " + descId)); - flowEnded.set(true); - } else { - nextAction(); - } - break; - case WRITE_DESC: - if (currentDescriptor == null) { - listener.onFailure(new Exception("Missing descriptor.")); - flowEnded.set(true); - } else { - if (DEBUG) Log.d(TAG, "Writing on descriptor " + currentDescriptor.getUuid() - + " the value " + Arrays.toString(values.get(valueIndex))); - client.writeValue(address, currentDescriptor, values.get(valueIndex++)); - } - break; - case ENABLE_NOTIF: - if (currentCharacteristic == null) { - listener.onFailure(new Exception("Failed to enable notifications " - + " due to missing characteristic.")); - flowEnded.set(true); - } - if (!client.enableNotifications(address, currentCharacteristic)) { - listener.onFailure(new Exception( - "Failed to enable notifications on " + currentCharacteristic.getUuid())); - flowEnded.set(true); - } - nextAction(); - listener.onNotificationSubscribed(); - break; - case DISABLE_NOTIF: - if (currentCharacteristic == null) { - listener.onFailure(new Exception("Failed to disable notifications " - + " due to missing characteristic.")); - flowEnded.set(true); - } - if (!client.disableNotifications(address, currentCharacteristic)) { - listener.onFailure(new Exception( - "Failed to disable notifications on " + currentCharacteristic.getUuid())); - flowEnded.set(true); - } - nextAction(); - listener.onNotificationUnsubscribed(); - break; - default: - break; + break; + case READ_CHARACT: + if (currentCharacteristic == null) { + listener.onFailure(new Exception("Missing charact.")); + flowEnded.set(true); + } else { + if (DEBUG) Log.d(TAG, "Reading on characteristic " + currentCharacteristic.getUuid()); + client.readValue(address, currentCharacteristic); } - } - - public BleFlow reset(boolean clearServiceMap) { - actions.clear(); - serviceIdsToLookup.clear(); - if (clearServiceMap) { - serviceMap.clear(); + break; + case WRITE_CHARACT: + if (currentCharacteristic == null) { + listener.onFailure(new Exception("Missing charact.")); + flowEnded.set(true); + } else { + if (DEBUG) + Log.d( + TAG, + "Writing on characteristic " + + currentCharacteristic.getUuid() + + " the value " + + Arrays.toString(values.get(valueIndex))); + client.writeValue(address, currentCharacteristic, values.get(valueIndex++)); } - characteristics.clear(); - descriptors.clear(); - values.clear(); - characteristicIndex = 0; - valueIndex = 0; - actionIndex = 0; - descriptorIndex = 0; - currentCharacteristic = null; - currentDescriptor = null; - listener = defaultListener; - - return this; - } - - public BleFlow resetAndAddListener(BleFlowListener flowListener, boolean clearServiceMap) { - return this.reset(clearServiceMap).addListener(flowListener); - } - - public static BleFlow getInstance(BleClient client, Context context, String address) { - return new BleFlow(client, context, address); - } - - private BleFlow addListener(BleFlowListener listener) { - this.listener = listener; - return this; - } - - private void addAction(Action action) { - actions.add(new RichAction(action, null)); - } - - public BleFlow connect() { - addAction(Action.CONNECT); - return this; - } - - public BleFlow lookupService(UUID serviceUuid) { - if (!serviceMap.containsKey(serviceUuid)) { - addAction(Action.LOOKUP_SRV); - serviceIdsToLookup.add(serviceUuid); + break; + case LOOKUP_DESC: + UUID descId = descriptors.get(descriptorIndex++); + currentDescriptor = currentCharacteristic.getDescriptor(descId); + if (currentDescriptor == null) { + listener.onFailure(new Exception("No such descriptor: " + descId)); + flowEnded.set(true); + } else { + nextAction(); } - return this; - } - - public BleFlow lookupCharacteristic(UUID serviceId, UUID characteristicUuid) { - actions.add(new RichAction(Action.LOOKUP_CHARACT, serviceId)); - characteristics.add(characteristicUuid); - return this; - } - - private BleFlow lookupDescriptor(UUID descriptorUuid) { - addAction(Action.LOOKUP_DESC); - descriptors.add(descriptorUuid); - return this; - } - - public BleFlow read() { - addAction(Action.READ_CHARACT); - return this; - } - - public BleFlow write(byte[] value) { - addAction(Action.WRITE_CHARACT); - values.add(value); - return this; - } - - public BleFlow enableNotification() { - addAction(Action.ENABLE_NOTIF); - - lookupDescriptor(BLE_CLIENT_CONFIG_CHARACTERISTIC); - - addAction(Action.WRITE_DESC); - values.add(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); - return this; - } - - public BleFlow disableNotification() { - addAction(Action.DISABLE_NOTIF); - - lookupDescriptor(BLE_CLIENT_CONFIG_CHARACTERISTIC); - - addAction(Action.WRITE_DESC); - values.add(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE); - return this; - } - - public BleFlow disconnect() { - addAction(Action.DISCONNECT); - return this; - } - - public static void run(BleFlow flow) { - flow.run(); - } - - private void run() { - Log.v(TAG, "executing actions: " + actions); - Log.v(TAG, "services: " + serviceMap); - Log.v(TAG, "characteristics: " + characteristics); - Log.v(TAG, "descriptors: " + descriptors); - Log.v(TAG, "previous flow done: " + flowEnded.get()); - Log.v(TAG, "values: " + Arrays.toString(values.toArray())); - - if(flowEnded.get()) { - flowEnded.set(false); - nextAction(); + break; + case WRITE_DESC: + if (currentDescriptor == null) { + listener.onFailure(new Exception("Missing descriptor.")); + flowEnded.set(true); + } else { + if (DEBUG) + Log.d( + TAG, + "Writing on descriptor " + + currentDescriptor.getUuid() + + " the value " + + Arrays.toString(values.get(valueIndex))); + client.writeValue(address, currentDescriptor, values.get(valueIndex++)); } - + break; + case ENABLE_NOTIF: + if (currentCharacteristic == null) { + listener.onFailure( + new Exception("Failed to enable notifications " + " due to missing characteristic.")); + flowEnded.set(true); + } + if (!client.enableNotifications(address, currentCharacteristic)) { + listener.onFailure( + new Exception( + "Failed to enable notifications on " + currentCharacteristic.getUuid())); + flowEnded.set(true); + } + nextAction(); + listener.onNotificationSubscribed(); + break; + case DISABLE_NOTIF: + if (currentCharacteristic == null) { + listener.onFailure( + new Exception( + "Failed to disable notifications " + " due to missing characteristic.")); + flowEnded.set(true); + } + if (!client.disableNotifications(address, currentCharacteristic)) { + listener.onFailure( + new Exception( + "Failed to disable notifications on " + currentCharacteristic.getUuid())); + flowEnded.set(true); + } + nextAction(); + listener.onNotificationUnsubscribed(); + break; + default: + break; } + } - /** - * @return true iff {@code characteristic} is the id of a valid characteristic in the service - * with id {@code serviceId}. - */ - public boolean isCharacteristicValid(UUID serviceId, UUID characteristic) { - BluetoothGattService currentService = serviceMap.get(serviceId); - return currentService != null && currentService.getCharacteristic(characteristic) != null; + public BleFlow reset(boolean clearServiceMap) { + actions.clear(); + serviceIdsToLookup.clear(); + if (clearServiceMap) { + serviceMap.clear(); } - - void close() { - MyBleService.getBroadcastManager(context).unregisterReceiver(receiver); + characteristics.clear(); + descriptors.clear(); + values.clear(); + characteristicIndex = 0; + valueIndex = 0; + actionIndex = 0; + descriptorIndex = 0; + currentCharacteristic = null; + currentDescriptor = null; + listener = defaultListener; + + return this; + } + + public BleFlow resetAndAddListener(BleFlowListener flowListener, boolean clearServiceMap) { + return this.reset(clearServiceMap).addListener(flowListener); + } + + public static BleFlow getInstance(BleClient client, Context context, String address) { + return new BleFlow(client, context, address); + } + + private BleFlow addListener(BleFlowListener listener) { + this.listener = listener; + return this; + } + + private void addAction(Action action) { + actions.add(new RichAction(action, null)); + } + + public BleFlow connect() { + addAction(Action.CONNECT); + return this; + } + + public BleFlow lookupService(UUID serviceUuid) { + if (!serviceMap.containsKey(serviceUuid)) { + addAction(Action.LOOKUP_SRV); + serviceIdsToLookup.add(serviceUuid); } - - public String getAddress() { - return address; + return this; + } + + public BleFlow lookupCharacteristic(UUID serviceId, UUID characteristicUuid) { + actions.add(new RichAction(Action.LOOKUP_CHARACT, serviceId)); + characteristics.add(characteristicUuid); + return this; + } + + private BleFlow lookupDescriptor(UUID descriptorUuid) { + addAction(Action.LOOKUP_DESC); + descriptors.add(descriptorUuid); + return this; + } + + public BleFlow read() { + addAction(Action.READ_CHARACT); + return this; + } + + public BleFlow write(byte[] value) { + addAction(Action.WRITE_CHARACT); + values.add(value); + return this; + } + + public BleFlow enableNotification() { + addAction(Action.ENABLE_NOTIF); + + lookupDescriptor(BLE_CLIENT_CONFIG_CHARACTERISTIC); + + addAction(Action.WRITE_DESC); + values.add(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); + return this; + } + + public BleFlow disableNotification() { + addAction(Action.DISABLE_NOTIF); + + lookupDescriptor(BLE_CLIENT_CONFIG_CHARACTERISTIC); + + addAction(Action.WRITE_DESC); + values.add(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE); + return this; + } + + public BleFlow disconnect() { + addAction(Action.DISCONNECT); + return this; + } + + public static void run(BleFlow flow) { + flow.run(); + } + + private void run() { + Log.v(TAG, "executing actions: " + actions); + Log.v(TAG, "services: " + serviceMap); + Log.v(TAG, "characteristics: " + characteristics); + Log.v(TAG, "descriptors: " + descriptors); + Log.v(TAG, "previous flow done: " + flowEnded.get()); + Log.v(TAG, "values: " + Arrays.toString(values.toArray())); + + if (flowEnded.get()) { + flowEnded.set(false); + nextAction(); } + } + + /** + * @return true iff {@code characteristic} is the id of a valid characteristic in the service with + * id {@code serviceId}. + */ + public boolean isCharacteristicValid(UUID serviceId, UUID characteristic) { + BluetoothGattService currentService = serviceMap.get(serviceId); + return currentService != null && currentService.getCharacteristic(characteristic) != null; + } + + void close() { + MyBleService.getBroadcastManager(context).unregisterReceiver(receiver); + } + + public String getAddress() { + return address; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlowListener.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlowListener.java index 897d6066..3c2d513a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlowListener.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/BleFlowListener.java @@ -18,26 +18,24 @@ import java.util.UUID; -/** - * Listener used by the BleFlow class. - */ +/** Listener used by the BleFlow class. */ public abstract class BleFlowListener { - public abstract void onSuccess(); + public abstract void onSuccess(); - public abstract void onFailure(Exception error); + public abstract void onFailure(Exception error); - public abstract void onCharacteristicRead(UUID characteristic, int flags, byte[] value); + public abstract void onCharacteristicRead(UUID characteristic, int flags, byte[] value); - public abstract void onNotification(UUID characteristic, int flags, byte[] value); + public abstract void onNotification(UUID characteristic, int flags, byte[] value); - public abstract void onDisconnect(); + public abstract void onDisconnect(); - public abstract void onConnect(); + public abstract void onConnect(); - public abstract void onNotificationSubscribed(); + public abstract void onNotificationSubscribed(); - public abstract void onNotificationUnsubscribed(); + public abstract void onNotificationUnsubscribed(); - public abstract void onServicesDiscovered(); -} \ No newline at end of file + public abstract void onServicesDiscovered(); +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java index 2a493fa5..f91a2d59 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscoverer.java @@ -19,119 +19,105 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; import android.content.Context; -import android.os.Build; import android.os.SystemClock; import androidx.collection.ArrayMap; - import com.google.android.apps.forscience.whistlepunk.AndroidVersionUtils; import com.google.android.apps.forscience.whistlepunk.devicemanager.WhistlepunkBleDevice; -/** - * Discovers BLE devices and tracks when they come and go. - */ +/** Discovers BLE devices and tracks when they come and go. */ public abstract class DeviceDiscoverer { - public static boolean isBluetoothEnabled() { - BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); - return adapter != null && adapter.isEnabled(); - } + public static boolean isBluetoothEnabled() { + BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); + return adapter != null && adapter.isEnabled(); + } - /** - * Receives notification of devices being discovered or errors. - */ - public static class Callback { - public void onDeviceFound(DeviceRecord record) {} + /** Receives notification of devices being discovered or errors. */ + public static class Callback { + public void onDeviceFound(DeviceRecord record) {} - public void onError(int error) { - // TODO: define error codes - } + public void onError(int error) { + // TODO: define error codes } + } - /** - * Describes a Bluetooth device which was discovered. - */ - public static class DeviceRecord { - - /** - * Device that was found. - */ - public WhistlepunkBleDevice device; - - /** - * Last time this device was seen, in uptimeMillis. - */ - public long lastSeenTimestampMs; - - /** - * Last RSSI value seen. - */ - public int lastRssi; - } + /** Describes a Bluetooth device which was discovered. */ + public static class DeviceRecord { - private final Context mContext; - private final BluetoothAdapter mBluetoothAdapter; - private final ArrayMap mDevices; - private Callback mCallback; - - public static DeviceDiscoverer getNewInstance(Context context) { - DeviceDiscoverer discoverer; - if (AndroidVersionUtils.isApiLevelAtLeastLollipop()) { - discoverer = new DeviceDiscovererV21(context); - } else { - discoverer = new DeviceDiscovererLegacy(context); - } - return discoverer; - } + /** Device that was found. */ + public WhistlepunkBleDevice device; - protected DeviceDiscoverer(Context context) { - mContext = context.getApplicationContext(); - BluetoothManager manager = (BluetoothManager) mContext.getSystemService( - Context.BLUETOOTH_SERVICE); - mBluetoothAdapter = manager.getAdapter(); - mDevices = new ArrayMap<>(); - } + /** Last time this device was seen, in uptimeMillis. */ + public long lastSeenTimestampMs; - public BluetoothAdapter getBluetoothAdapter() { - return mBluetoothAdapter; - } + /** Last RSSI value seen. */ + public int lastRssi; + } - public void startScanning(Callback callback) { - if (callback == null) { - throw new IllegalArgumentException("Callback must not be null"); - } + private final Context mContext; + private final BluetoothAdapter mBluetoothAdapter; + private final ArrayMap mDevices; + private Callback mCallback; - mCallback = callback; - // Clear out the older devices so we don't think they're still there. - mDevices.clear(); - onStartScanning(); + public static DeviceDiscoverer getNewInstance(Context context) { + DeviceDiscoverer discoverer; + if (AndroidVersionUtils.isApiLevelAtLeastLollipop()) { + discoverer = new DeviceDiscovererV21(context); + } else { + discoverer = new DeviceDiscovererLegacy(context); + } + return discoverer; + } + + protected DeviceDiscoverer(Context context) { + mContext = context.getApplicationContext(); + BluetoothManager manager = + (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE); + mBluetoothAdapter = manager.getAdapter(); + mDevices = new ArrayMap<>(); + } + + public BluetoothAdapter getBluetoothAdapter() { + return mBluetoothAdapter; + } + + public void startScanning(Callback callback) { + if (callback == null) { + throw new IllegalArgumentException("Callback must not be null"); } - public abstract void onStartScanning(); + mCallback = callback; + // Clear out the older devices so we don't think they're still there. + mDevices.clear(); + onStartScanning(); + } - public void stopScanning() { - onStopScanning(); - mCallback = null; - } + public abstract void onStartScanning(); + + public void stopScanning() { + onStopScanning(); + mCallback = null; + } + + public abstract void onStopScanning(); - public abstract void onStopScanning(); + public boolean canScan() { + return mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON; + } - public boolean canScan() { - return mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON; + protected void addOrUpdateDevice(WhistlepunkBleDevice device, int rssi) { + DeviceRecord deviceRecord = mDevices.get(device.getAddress()); + boolean previouslyFound = deviceRecord != null; + if (!previouslyFound) { + deviceRecord = new DeviceRecord(); + deviceRecord.device = device; + mDevices.put(device.getAddress(), deviceRecord); } + // Update the last RSSI and last seen + deviceRecord.lastRssi = rssi; + deviceRecord.lastSeenTimestampMs = SystemClock.uptimeMillis(); - protected void addOrUpdateDevice(WhistlepunkBleDevice device, int rssi) { - DeviceRecord deviceRecord = mDevices.get(device.getAddress()); - boolean previouslyFound = deviceRecord != null; - if (!previouslyFound) { - deviceRecord = new DeviceRecord(); - deviceRecord.device = device; - mDevices.put(device.getAddress(), deviceRecord); - } - // Update the last RSSI and last seen - deviceRecord.lastRssi = rssi; - deviceRecord.lastSeenTimestampMs = SystemClock.uptimeMillis(); - - if (!previouslyFound && mCallback != null) { - mCallback.onDeviceFound(deviceRecord); - } + if (!previouslyFound && mCallback != null) { + mCallback.onDeviceFound(deviceRecord); } + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererLegacy.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererLegacy.java index cc276796..d21f185e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererLegacy.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererLegacy.java @@ -19,11 +19,9 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; - import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.sensors.BleServiceSpec; import com.google.android.apps.forscience.whistlepunk.sensors.BluetoothSensor; - import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayList; @@ -31,88 +29,90 @@ import java.util.UUID; import java.util.concurrent.Executor; -/** - * Discovers devices using pre API level 21 methods. - */ +/** Discovers devices using pre API level 21 methods. */ /* package */ class DeviceDiscovererLegacy extends DeviceDiscoverer { - private final Executor mUiThreadExecutor; + private final Executor mUiThreadExecutor; - private BluetoothAdapter.LeScanCallback mCallback = new BluetoothAdapter.LeScanCallback() { + private BluetoothAdapter.LeScanCallback mCallback = + new BluetoothAdapter.LeScanCallback() { @Override - public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) { - if (isScienceSensor(parseUuids(scanRecord))) { - mUiThreadExecutor.execute(new Runnable() { - @Override - public void run() { - addOrUpdateDevice(new NativeDevice(device), rssi); - } + public void onLeScan( + final BluetoothDevice device, final int rssi, final byte[] scanRecord) { + if (isScienceSensor(parseUuids(scanRecord))) { + mUiThreadExecutor.execute( + new Runnable() { + @Override + public void run() { + addOrUpdateDevice(new NativeDevice(device), rssi); + } }); - } + } } - }; - - DeviceDiscovererLegacy(Context context) { - super(context); - mUiThreadExecutor = AppSingleton.getUiThreadExecutor(); - } - - @Override - public void onStartScanning() { - // KitKat can't handle 128bit UUIDs, so ask for all devices. - getBluetoothAdapter().startLeScan(mCallback); - } - - @Override - public void onStopScanning() { - getBluetoothAdapter().stopLeScan(mCallback); + }; + + DeviceDiscovererLegacy(Context context) { + super(context); + mUiThreadExecutor = AppSingleton.getUiThreadExecutor(); + } + + @Override + public void onStartScanning() { + // KitKat can't handle 128bit UUIDs, so ask for all devices. + getBluetoothAdapter().startLeScan(mCallback); + } + + @Override + public void onStopScanning() { + getBluetoothAdapter().stopLeScan(mCallback); + } + + private List parseUuids(byte[] advertisedData) { + List uuids = new ArrayList(); + + ByteBuffer buffer = ByteBuffer.wrap(advertisedData).order(ByteOrder.LITTLE_ENDIAN); + while (buffer.remaining() > 2) { + byte length = buffer.get(); + if (length == 0) break; + + byte type = buffer.get(); + switch (type) { + case 0x02: // Partial list of 16-bit UUIDs + case 0x03: // Complete list of 16-bit UUIDs + while (length >= 2) { + uuids.add( + UUID.fromString( + String.format("%08x-0000-1000-8000-00805f9b34fb", buffer.getShort()))); + length -= 2; + } + break; + + case 0x06: // Partial list of 128-bit UUIDs + case 0x07: // Complete list of 128-bit UUIDs + while (length >= 16) { + long lsb = buffer.getLong(); + long msb = buffer.getLong(); + uuids.add(new UUID(msb, lsb)); + length -= 16; + } + break; + + default: + buffer.position(buffer.position() + length - 1); + break; + } } - private List parseUuids(byte[] advertisedData) { - List uuids = new ArrayList(); - - ByteBuffer buffer = ByteBuffer.wrap(advertisedData).order(ByteOrder.LITTLE_ENDIAN); - while (buffer.remaining() > 2) { - byte length = buffer.get(); - if (length == 0) break; - - byte type = buffer.get(); - switch (type) { - case 0x02: // Partial list of 16-bit UUIDs - case 0x03: // Complete list of 16-bit UUIDs - while (length >= 2) { - uuids.add(UUID.fromString(String.format( - "%08x-0000-1000-8000-00805f9b34fb", buffer.getShort()))); - length -= 2; - } - break; - - case 0x06: // Partial list of 128-bit UUIDs - case 0x07: // Complete list of 128-bit UUIDs - while (length >= 16) { - long lsb = buffer.getLong(); - long msb = buffer.getLong(); - uuids.add(new UUID(msb, lsb)); - length -= 16; - } - break; - - default: - buffer.position(buffer.position() + length - 1); - break; - } - } - - return uuids; - } + return uuids; + } - private boolean isScienceSensor(List ids) { - for (BleServiceSpec spec : BluetoothSensor.SUPPORTED_SERVICES) { - for (UUID loopId : ids) { - if (loopId.compareTo(spec.getServiceId()) == 0) { - return true; - } - } + private boolean isScienceSensor(List ids) { + for (BleServiceSpec spec : BluetoothSensor.SUPPORTED_SERVICES) { + for (UUID loopId : ids) { + if (loopId.compareTo(spec.getServiceId()) == 0) { + return true; } - return false; + } } + return false; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererV21.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererV21.java index 7ab79b2b..31b549d2 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererV21.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/DeviceDiscovererV21.java @@ -24,70 +24,67 @@ import android.bluetooth.le.ScanSettings; import android.content.Context; import android.os.ParcelUuid; - import com.google.android.apps.forscience.whistlepunk.devicemanager.WhistlepunkBleDevice; import com.google.android.apps.forscience.whistlepunk.sensors.BleServiceSpec; import com.google.android.apps.forscience.whistlepunk.sensors.BluetoothSensor; - import java.util.ArrayList; import java.util.List; -/** - * Discovers LE devices using API level 21+ methods. - */ +/** Discovers LE devices using API level 21+ methods. */ @TargetApi(21) /* package */ class DeviceDiscovererV21 extends DeviceDiscoverer { - private BluetoothLeScanner mScanner; + private BluetoothLeScanner mScanner; - private ScanCallback mCallback = new ScanCallback() { + private ScanCallback mCallback = + new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { - addOrUpdateDevice(getDevice(result), result.getRssi()); + addOrUpdateDevice(getDevice(result), result.getRssi()); } private WhistlepunkBleDevice getDevice(ScanResult result) { - return new NativeDevice(result.getDevice()); + return new NativeDevice(result.getDevice()); } @Override public void onBatchScanResults(List results) { - for (ScanResult result : results) { - addOrUpdateDevice(getDevice(result), result.getRssi()); - } + for (ScanResult result : results) { + addOrUpdateDevice(getDevice(result), result.getRssi()); + } } @Override public void onScanFailed(int errorCode) { - // TODO: surface errors. + // TODO: surface errors. } - }; + }; - DeviceDiscovererV21(Context context) { - super(context); - } + DeviceDiscovererV21(Context context) { + super(context); + } - @Override - public void onStartScanning() { - mScanner = getBluetoothAdapter().getBluetoothLeScanner(); - List filters = new ArrayList<>(); - for (BleServiceSpec spec : BluetoothSensor.SUPPORTED_SERVICES) { - filters.add(new ScanFilter.Builder() - .setServiceUuid(ParcelUuid.fromString(spec.getServiceId().toString())) - .build()); - } - ScanSettings settings = new ScanSettings.Builder() - .setScanMode(ScanSettings.SCAN_MODE_BALANCED) - .build(); - mScanner.startScan(filters, settings, mCallback); + @Override + public void onStartScanning() { + mScanner = getBluetoothAdapter().getBluetoothLeScanner(); + List filters = new ArrayList<>(); + for (BleServiceSpec spec : BluetoothSensor.SUPPORTED_SERVICES) { + filters.add( + new ScanFilter.Builder() + .setServiceUuid(ParcelUuid.fromString(spec.getServiceId().toString())) + .build()); } + ScanSettings settings = + new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_BALANCED).build(); + mScanner.startScan(filters, settings, mCallback); + } - @Override - public void onStopScanning() { - if (mScanner != null) { - if (isBluetoothEnabled()) { - mScanner.stopScan(mCallback); - } - } + @Override + public void onStopScanning() { + if (mScanner != null) { + if (isBluetoothEnabled()) { + mScanner.stopScan(mCallback); + } } + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java index 0827e8fb..5e8f1b2c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/MyBleService.java @@ -36,375 +36,394 @@ import androidx.collection.ArraySet; import android.util.ArrayMap; import android.util.Log; - import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.UUID; -/** - * Service dealing with the BLE gory details. - */ +/** Service dealing with the BLE gory details. */ public class MyBleService extends Service { - private static String TAG = "MyBleService"; - private static final int SERVICES_RETRY_COUNT = 3; - private static final boolean DEBUG = false; - - static LocalBroadcastManager getBroadcastManager(Context context) { - // For security, only use local broadcasts (See b/32803250) - return LocalBroadcastManager.getInstance(context); + private static String TAG = "MyBleService"; + private static final int SERVICES_RETRY_COUNT = 3; + private static final boolean DEBUG = false; + + static LocalBroadcastManager getBroadcastManager(Context context) { + // For security, only use local broadcasts (See b/32803250) + return LocalBroadcastManager.getInstance(context); + } + + /** The local binder for this service. */ + class LocalBinder extends Binder { + public MyBleService getService() { + return MyBleService.this; } + } - /** - * The local binder for this service. - */ - class LocalBinder extends Binder { - public MyBleService getService() { - return MyBleService.this; - } - } + public static String DATA = "data"; + public static String UUID = "uuid"; + public static String FLAGS = "flags"; + public static String INT_PARAM = "int_param"; - public static String DATA = "data"; - public static String UUID = "uuid"; - public static String FLAGS = "flags"; - public static String INT_PARAM = "int_param"; + private BluetoothManager bluetoothManager; + private BluetoothAdapter btAdapter; - private BluetoothManager bluetoothManager; - private BluetoothAdapter btAdapter; + private Map addressToGattClient = + Collections.synchronizedMap(new LinkedHashMap()); - private Map addressToGattClient = - Collections.synchronizedMap(new LinkedHashMap()); + private Set mOutstandingServiceDiscoveryAddresses = new ArraySet<>(); - private Set mOutstandingServiceDiscoveryAddresses = new ArraySet<>(); - - // GATT callbacks - private BluetoothGattCallback gattCallbacks = new BluetoothGattCallback() { + // GATT callbacks + private BluetoothGattCallback gattCallbacks = + new BluetoothGattCallback() { Map mConnectionStatuses = new ArrayMap<>(); @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { - String address = getAddressFromGatt(gatt); - if (DEBUG) Log.d(TAG, "CONNECTION CHANGED FOR " + address + " : " + newState); - - // On ChromeOS (and maybe other platforms?), onConnectionStateChange can be called - // multiple times without any actual corresponding state change. This confuses our - // (very brittle) downstream code, so filter the duplicates out here. See - // b/31741822 for further discussion. - boolean isActualChange = !(mConnectionStatuses.containsKey(address) - && mConnectionStatuses.get(address) == newState); - mConnectionStatuses.put(address, newState); - - if (status != BluetoothGatt.GATT_SUCCESS) { - sendGattBroadcast(address, BleEvents.GATT_CONNECT_FAIL, null); - addressToGattClient.remove(address); - gatt.close(); - return; - } + String address = getAddressFromGatt(gatt); + if (DEBUG) Log.d(TAG, "CONNECTION CHANGED FOR " + address + " : " + newState); + + // On ChromeOS (and maybe other platforms?), onConnectionStateChange can be called + // multiple times without any actual corresponding state change. This confuses our + // (very brittle) downstream code, so filter the duplicates out here. See + // b/31741822 for further discussion. + boolean isActualChange = + !(mConnectionStatuses.containsKey(address) + && mConnectionStatuses.get(address) == newState); + mConnectionStatuses.put(address, newState); + + if (status != BluetoothGatt.GATT_SUCCESS) { + sendGattBroadcast(address, BleEvents.GATT_CONNECT_FAIL, null); + addressToGattClient.remove(address); + gatt.close(); + return; + } - if (newState == BluetoothProfile.STATE_CONNECTED) { - // TODO: extract testable code here - if (isActualChange) { - sendGattBroadcast(address, BleEvents.GATT_CONNECT, null); - } - return; + if (newState == BluetoothProfile.STATE_CONNECTED) { + // TODO: extract testable code here + if (isActualChange) { + sendGattBroadcast(address, BleEvents.GATT_CONNECT, null); } - if (newState == BluetoothProfile.STATE_DISCONNECTED) { - sendGattBroadcast(address, BleEvents.GATT_DISCONNECT, null); - addressToGattClient.remove(address); - gatt.close(); - return; - } - Log.e(TAG, "Gatt - unexpected connection state: " + newState); + return; + } + if (newState == BluetoothProfile.STATE_DISCONNECTED) { + sendGattBroadcast(address, BleEvents.GATT_DISCONNECT, null); + addressToGattClient.remove(address); + gatt.close(); + return; + } + Log.e(TAG, "Gatt - unexpected connection state: " + newState); } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { - String address = getAddressFromGatt(gatt); - mOutstandingServiceDiscoveryAddresses.remove(address); - if (status == BluetoothGatt.GATT_SUCCESS) { - if (DEBUG) Log.d(TAG, "Sending the action: " + BleEvents.SERVICES_OK); - sendServiceDiscoveryIntent(MyBleService.this, address, SERVICES_RETRY_COUNT); - } else { - sendGattBroadcast(address, BleEvents.SERVICES_FAIL, null); - } + String address = getAddressFromGatt(gatt); + mOutstandingServiceDiscoveryAddresses.remove(address); + if (status == BluetoothGatt.GATT_SUCCESS) { + if (DEBUG) Log.d(TAG, "Sending the action: " + BleEvents.SERVICES_OK); + sendServiceDiscoveryIntent(MyBleService.this, address, SERVICES_RETRY_COUNT); + } else { + sendGattBroadcast(address, BleEvents.SERVICES_FAIL, null); + } } @Override - public void onCharacteristicChanged(BluetoothGatt gatt, - BluetoothGattCharacteristic characteristic) { - if (DEBUG) Log.d(TAG, "Got notification from " + characteristic.getUuid()); - sendGattBroadcast(getAddressFromGatt(gatt), BleEvents.CHAR_CHANGED, - characteristic); + public void onCharacteristicChanged( + BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { + if (DEBUG) Log.d(TAG, "Got notification from " + characteristic.getUuid()); + sendGattBroadcast(getAddressFromGatt(gatt), BleEvents.CHAR_CHANGED, characteristic); } @Override - public void onCharacteristicRead(BluetoothGatt gatt, - BluetoothGattCharacteristic characteristic, int status) { - // Characteristic value will be stored in the intent which will be extract from - // the broadcast message (see sendGattBroadcast and BleFlow.BroadcastReceiver). - if (DEBUG) { - Log.d(TAG, "Characteristic read result: " - + characteristic.getUuid() + " - " + (status == BluetoothGatt.GATT_SUCCESS)); - Log.d(TAG, "Characteristic value: " + characteristic.getStringValue(0).toString()); - } - - sendGattBroadcast(getAddressFromGatt(gatt), status == BluetoothGatt.GATT_SUCCESS - ? BleEvents.READ_CHAR_OK : BleEvents.READ_CHAR_FAIL, characteristic); + public void onCharacteristicRead( + BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { + // Characteristic value will be stored in the intent which will be extract from + // the broadcast message (see sendGattBroadcast and BleFlow.BroadcastReceiver). + if (DEBUG) { + Log.d( + TAG, + "Characteristic read result: " + + characteristic.getUuid() + + " - " + + (status == BluetoothGatt.GATT_SUCCESS)); + Log.d(TAG, "Characteristic value: " + characteristic.getStringValue(0).toString()); + } + + sendGattBroadcast( + getAddressFromGatt(gatt), + status == BluetoothGatt.GATT_SUCCESS + ? BleEvents.READ_CHAR_OK + : BleEvents.READ_CHAR_FAIL, + characteristic); } @Override - public void onCharacteristicWrite(BluetoothGatt gatt, - BluetoothGattCharacteristic characteristic, int status) { - if (DEBUG) Log.d(TAG, "Characteristic write result: " - + characteristic.getUuid() + " - " + (status == BluetoothGatt.GATT_SUCCESS)); - sendGattBroadcast(getAddressFromGatt(gatt), - status == BluetoothGatt.GATT_SUCCESS - ? BleEvents.WRITE_CHAR_OK : BleEvents.WRITE_CHAR_FAIL, characteristic); + public void onCharacteristicWrite( + BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { + if (DEBUG) + Log.d( + TAG, + "Characteristic write result: " + + characteristic.getUuid() + + " - " + + (status == BluetoothGatt.GATT_SUCCESS)); + sendGattBroadcast( + getAddressFromGatt(gatt), + status == BluetoothGatt.GATT_SUCCESS + ? BleEvents.WRITE_CHAR_OK + : BleEvents.WRITE_CHAR_FAIL, + characteristic); } @Override - public void onDescriptorRead(BluetoothGatt gatt, - BluetoothGattDescriptor descriptor, int status) { - sendGattBroadcast(getAddressFromGatt(gatt), status == BluetoothGatt.GATT_SUCCESS - ? BleEvents.READ_DESC_OK : BleEvents.READ_DESC_FAIL, null); + public void onDescriptorRead( + BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { + sendGattBroadcast( + getAddressFromGatt(gatt), + status == BluetoothGatt.GATT_SUCCESS + ? BleEvents.READ_DESC_OK + : BleEvents.READ_DESC_FAIL, + null); } @Override - public void onDescriptorWrite(BluetoothGatt gatt, - BluetoothGattDescriptor descriptor, int status) { - sendGattBroadcast(getAddressFromGatt(gatt), status == BluetoothGatt.GATT_SUCCESS - ? BleEvents.WRITE_DESC_OK : BleEvents.WRITE_DESC_FAIL, null); + public void onDescriptorWrite( + BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { + sendGattBroadcast( + getAddressFromGatt(gatt), + status == BluetoothGatt.GATT_SUCCESS + ? BleEvents.WRITE_DESC_OK + : BleEvents.WRITE_DESC_FAIL, + null); } - }; - - public static void sendServiceDiscoveryIntent(Context context, String address, - int retriesLeft) { - Intent newIntent = BleEvents.createIntent(BleEvents.SERVICES_OK, address); - newIntent.putExtra(INT_PARAM, retriesLeft); - getBroadcastManager(context).sendBroadcast(newIntent); + }; + + public static void sendServiceDiscoveryIntent(Context context, String address, int retriesLeft) { + Intent newIntent = BleEvents.createIntent(BleEvents.SERVICES_OK, address); + newIntent.putExtra(INT_PARAM, retriesLeft); + getBroadcastManager(context).sendBroadcast(newIntent); + } + + @VisibleForTesting + protected String getAddressFromGatt(BluetoothGatt gatt) { + return gatt.getDevice().getAddress(); + } + + private final IBinder binder = new LocalBinder(); + + @VisibleForTesting + protected void sendGattBroadcast( + String address, String gattAction, BluetoothGattCharacteristic characteristic) { + if (DEBUG) Log.d(TAG, "Sending the action: " + gattAction); + Intent newIntent = BleEvents.createIntent(gattAction, address); + if (characteristic != null) { + newIntent.putExtra(UUID, characteristic.getUuid().toString()); + newIntent.putExtra(FLAGS, characteristic.getProperties()); + newIntent.putExtra(DATA, characteristic.getValue()); } - - @VisibleForTesting - protected String getAddressFromGatt(BluetoothGatt gatt) { - return gatt.getDevice().getAddress(); + getBroadcastManager(this).sendBroadcast(newIntent); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { + Intent newIntent = new Intent(BleEvents.BLE_UNSUPPORTED); + getBroadcastManager(this).sendBroadcast(newIntent); + return START_NOT_STICKY; } - private final IBinder binder = new LocalBinder(); - - @VisibleForTesting - protected void sendGattBroadcast(String address, String gattAction, - BluetoothGattCharacteristic characteristic) { - if (DEBUG) Log.d(TAG, "Sending the action: " + gattAction); - Intent newIntent = BleEvents.createIntent(gattAction, address); - if (characteristic != null) { - newIntent.putExtra(UUID, characteristic.getUuid().toString()); - newIntent.putExtra(FLAGS, characteristic.getProperties()); - newIntent.putExtra(DATA, characteristic.getValue()); - } - getBroadcastManager(this).sendBroadcast(newIntent); + if (bluetoothManager == null) { + bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { - Intent newIntent = new Intent(BleEvents.BLE_UNSUPPORTED); - getBroadcastManager(this).sendBroadcast(newIntent); - return START_NOT_STICKY; - } - - if (bluetoothManager == null) { - bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); - } - if (btAdapter == null) { - btAdapter = bluetoothManager.getAdapter(); - } - if (!checkBleEnabled()) { - stopSelf(); - return START_NOT_STICKY; - } - - return START_STICKY; + if (btAdapter == null) { + btAdapter = bluetoothManager.getAdapter(); + } + if (!checkBleEnabled()) { + stopSelf(); + return START_NOT_STICKY; } - public boolean checkBleEnabled() { - if (!isBleEnabled()) { - Intent newIntent = new Intent(BleEvents.BLE_DISABLED); - getBroadcastManager(this).sendBroadcast(newIntent); - if (DEBUG) Log.d(TAG, "sent intent BLE_DISABLED"); - return false; - } + return START_STICKY; + } - return true; + public boolean checkBleEnabled() { + if (!isBleEnabled()) { + Intent newIntent = new Intent(BleEvents.BLE_DISABLED); + getBroadcastManager(this).sendBroadcast(newIntent); + if (DEBUG) Log.d(TAG, "sent intent BLE_DISABLED"); + return false; } - private boolean isBleEnabled() { - return btAdapter != null && btAdapter.isEnabled(); - } + return true; + } - public boolean connect(String address) { - if (btAdapter == null) { - // Not sure how we could get here, but it happens (b/36738130), so flag an error - // instead of crashing. - return false; - } - BluetoothDevice device = btAdapter.getRemoteDevice(address); - // Explicitly check if Ble is enabled, otherwise it attempts a connection - // that never timesout even though it should. - if (device == null || !isBleEnabled()) { - return false; - } - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - int connectionState = bluetoothManager.getConnectionState(device, - BluetoothProfile.GATT); - if (bluetoothGatt != null && connectionState != BluetoothProfile.STATE_CONNECTED) { - return bluetoothGatt.connect(); - } - if (bluetoothGatt != null && connectionState == BluetoothProfile.STATE_CONNECTED) { - sendGattBroadcast(address, BleEvents.GATT_CONNECT, null); - return true; - } + private boolean isBleEnabled() { + return btAdapter != null && btAdapter.isEnabled(); + } - if (bluetoothGatt != null) { - bluetoothGatt.close(); - } - bluetoothGatt = device.connectGatt(this, false, // autoConnect = false - gattCallbacks); - addressToGattClient.put(address, bluetoothGatt); - return true; + public boolean connect(String address) { + if (btAdapter == null) { + // Not sure how we could get here, but it happens (b/36738130), so flag an error + // instead of crashing. + return false; } - - public void disconnectDevice(String address) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (btAdapter == null || address == null || bluetoothGatt == null) { - // Broadcast the disconnect so BleFlow doesn't hang waiting for it; something else - // already disconnected us in this case. - sendGattBroadcast(address, BleEvents.GATT_DISCONNECT, null); - return; - } - BluetoothDevice device = btAdapter.getRemoteDevice(address); - int bleState = bluetoothManager.getConnectionState(device, - BluetoothProfile.GATT); - if (bleState != BluetoothProfile.STATE_DISCONNECTED - && bleState != BluetoothProfile.STATE_DISCONNECTING) { - bluetoothGatt.disconnect(); - } else { - bluetoothGatt.close(); - addressToGattClient.remove(address); - sendGattBroadcast(address, BleEvents.GATT_DISCONNECT, null); - } + BluetoothDevice device = btAdapter.getRemoteDevice(address); + // Explicitly check if Ble is enabled, otherwise it attempts a connection + // that never timesout even though it should. + if (device == null || !isBleEnabled()) { + return false; } - - void resetGatt() { - for (BluetoothGatt bluetoothGatt : addressToGattClient.values()) { - bluetoothGatt.close(); - } + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + int connectionState = bluetoothManager.getConnectionState(device, BluetoothProfile.GATT); + if (bluetoothGatt != null && connectionState != BluetoothProfile.STATE_CONNECTED) { + return bluetoothGatt.connect(); } - - @Override - public void onDestroy() { - resetGatt(); - super.onDestroy(); + if (bluetoothGatt != null && connectionState == BluetoothProfile.STATE_CONNECTED) { + sendGattBroadcast(address, BleEvents.GATT_CONNECT, null); + return true; } - @Override - public IBinder onBind(Intent intent) { - return binder; + if (bluetoothGatt != null) { + bluetoothGatt.close(); } - - public boolean discoverServices(String address) { - if (mOutstandingServiceDiscoveryAddresses.contains(address)) { - return addressToGattClient.containsKey(address); - } - mOutstandingServiceDiscoveryAddresses.add(address); - return internalDiscoverServices(address); + bluetoothGatt = + device.connectGatt( + this, + false, // autoConnect = false + gattCallbacks); + addressToGattClient.put(address, bluetoothGatt); + return true; + } + + public void disconnectDevice(String address) { + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + if (btAdapter == null || address == null || bluetoothGatt == null) { + // Broadcast the disconnect so BleFlow doesn't hang waiting for it; something else + // already disconnected us in this case. + sendGattBroadcast(address, BleEvents.GATT_DISCONNECT, null); + return; } - - @VisibleForTesting - protected boolean internalDiscoverServices(String address) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - return bluetoothGatt != null && bluetoothGatt.discoverServices(); + BluetoothDevice device = btAdapter.getRemoteDevice(address); + int bleState = bluetoothManager.getConnectionState(device, BluetoothProfile.GATT); + if (bleState != BluetoothProfile.STATE_DISCONNECTED + && bleState != BluetoothProfile.STATE_DISCONNECTING) { + bluetoothGatt.disconnect(); + } else { + bluetoothGatt.close(); + addressToGattClient.remove(address); + sendGattBroadcast(address, BleEvents.GATT_DISCONNECT, null); } + } - BluetoothGattService getService(String address, UUID serviceId) { - if (DEBUG) Log.d(TAG, "lookup for service: " + serviceId); - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - return bluetoothGatt == null ? null : bluetoothGatt.getService(serviceId); + void resetGatt() { + for (BluetoothGatt bluetoothGatt : addressToGattClient.values()) { + bluetoothGatt.close(); } - - /** - * FOR DEBUGGING ONLY. This should never be called from production code; we don't want this - * data in our logs. - */ - @SuppressWarnings("UnusedDeclaration") - public void printServices(String address) { - if (!DEBUG) { - return; - } - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.d(TAG, "No connection found for: " + address); - return; - } - for (BluetoothGattService service : bluetoothGatt.getServices()) { - Log.d(TAG, "Service ================================"); - Log.d(TAG, "Service UUID: " + service.getUuid()); - Log.d(TAG, "Service Type: " + service.getType()); - - for (BluetoothGattCharacteristic charact : service.getCharacteristics()) { - Log.d(TAG, "Charact UUID: " + charact.getUuid()); - Log.d(TAG, "Charact prop: " + charact.getProperties()); - - if (charact.getValue() != null) { - Log.d(TAG, "Charact Value: " + new String(charact.getValue())); - } - } - } + } + + @Override + public void onDestroy() { + resetGatt(); + super.onDestroy(); + } + + @Override + public IBinder onBind(Intent intent) { + return binder; + } + + public boolean discoverServices(String address) { + if (mOutstandingServiceDiscoveryAddresses.contains(address)) { + return addressToGattClient.containsKey(address); } - - - void readValue(String address, BluetoothGattCharacteristic theCharacteristic) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.w(TAG, "No connection found for: " + address); - sendGattBroadcast(address, BleEvents.READ_CHAR_FAIL, null); - return; - } - bluetoothGatt.readCharacteristic(theCharacteristic); + mOutstandingServiceDiscoveryAddresses.add(address); + return internalDiscoverServices(address); + } + + @VisibleForTesting + protected boolean internalDiscoverServices(String address) { + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + return bluetoothGatt != null && bluetoothGatt.discoverServices(); + } + + BluetoothGattService getService(String address, UUID serviceId) { + if (DEBUG) Log.d(TAG, "lookup for service: " + serviceId); + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + return bluetoothGatt == null ? null : bluetoothGatt.getService(serviceId); + } + + /** + * FOR DEBUGGING ONLY. This should never be called from production code; we don't want this data + * in our logs. + */ + @SuppressWarnings("UnusedDeclaration") + public void printServices(String address) { + if (!DEBUG) { + return; } - - void writeValue(String address, BluetoothGattCharacteristic theCharacteristic, byte[] value) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.w(TAG, "No connection found for: " + address); - sendGattBroadcast(address, BleEvents.WRITE_CHAR_FAIL, null); - return; - } - theCharacteristic.setValue(value); - bluetoothGatt.writeCharacteristic(theCharacteristic); + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + if (bluetoothGatt == null) { + Log.d(TAG, "No connection found for: " + address); + return; } + for (BluetoothGattService service : bluetoothGatt.getServices()) { + Log.d(TAG, "Service ================================"); + Log.d(TAG, "Service UUID: " + service.getUuid()); + Log.d(TAG, "Service Type: " + service.getType()); - public void writeValue(String address, BluetoothGattDescriptor descriptor, byte[] value) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.w(TAG, "No connection found for: " + address); - sendGattBroadcast(address, BleEvents.WRITE_DESC_FAIL, null); - return; - } + for (BluetoothGattCharacteristic charact : service.getCharacteristics()) { + Log.d(TAG, "Charact UUID: " + charact.getUuid()); + Log.d(TAG, "Charact prop: " + charact.getProperties()); - if (!descriptor.setValue(value) || !bluetoothGatt.writeDescriptor(descriptor)) { - sendGattBroadcast(address, BleEvents.WRITE_DESC_FAIL, descriptor.getCharacteristic()); + if (charact.getValue() != null) { + Log.d(TAG, "Charact Value: " + new String(charact.getValue())); } + } + } + } + + void readValue(String address, BluetoothGattCharacteristic theCharacteristic) { + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + if (bluetoothGatt == null) { + Log.w(TAG, "No connection found for: " + address); + sendGattBroadcast(address, BleEvents.READ_CHAR_FAIL, null); + return; + } + bluetoothGatt.readCharacteristic(theCharacteristic); + } + + void writeValue(String address, BluetoothGattCharacteristic theCharacteristic, byte[] value) { + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + if (bluetoothGatt == null) { + Log.w(TAG, "No connection found for: " + address); + sendGattBroadcast(address, BleEvents.WRITE_CHAR_FAIL, null); + return; + } + theCharacteristic.setValue(value); + bluetoothGatt.writeCharacteristic(theCharacteristic); + } + + public void writeValue(String address, BluetoothGattDescriptor descriptor, byte[] value) { + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + if (bluetoothGatt == null) { + Log.w(TAG, "No connection found for: " + address); + sendGattBroadcast(address, BleEvents.WRITE_DESC_FAIL, null); + return; } - boolean setNotificationsFor(String address, BluetoothGattCharacteristic characteristic, - boolean enable) { - BluetoothGatt bluetoothGatt = addressToGattClient.get(address); - if (bluetoothGatt == null) { - Log.w(TAG, "No connection found for: " + address); - return false; - } - - return bluetoothGatt.setCharacteristicNotification(characteristic, enable); + if (!descriptor.setValue(value) || !bluetoothGatt.writeDescriptor(descriptor)) { + sendGattBroadcast(address, BleEvents.WRITE_DESC_FAIL, descriptor.getCharacteristic()); } + } + + boolean setNotificationsFor( + String address, BluetoothGattCharacteristic characteristic, boolean enable) { + BluetoothGatt bluetoothGatt = addressToGattClient.get(address); + if (bluetoothGatt == null) { + Log.w(TAG, "No connection found for: " + address); + return false; + } + + return bluetoothGatt.setCharacteristicNotification(characteristic, enable); + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/NativeDevice.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/NativeDevice.java index 5a8d4d3d..6a087009 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/NativeDevice.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/ble/NativeDevice.java @@ -16,23 +16,22 @@ package com.google.android.apps.forscience.ble; import android.bluetooth.BluetoothDevice; - import com.google.android.apps.forscience.whistlepunk.devicemanager.WhistlepunkBleDevice; public class NativeDevice implements WhistlepunkBleDevice { - private BluetoothDevice mDevice; + private BluetoothDevice mDevice; - public NativeDevice(BluetoothDevice device) { - mDevice = device; - } + public NativeDevice(BluetoothDevice device) { + mDevice = device; + } - @Override - public String getName() { - return mDevice.getName(); - } + @Override + public String getName() { + return mDevice.getName(); + } - @Override - public String getAddress() { - return mDevice.getAddress(); - } + @Override + public String getAddress() { + return mDevice.getAddress(); + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Consumer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Consumer.java index cd44d096..61c44982 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Consumer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Consumer.java @@ -20,36 +20,36 @@ import java.util.List; public abstract class Consumer { - public abstract void take(T t); + public abstract void take(T t); - public Consumer and(Consumer consumer) { - if (consumer == null) { - return this; - } - return new CompoundConsumer(this, consumer); + public Consumer and(Consumer consumer) { + if (consumer == null) { + return this; + } + return new CompoundConsumer(this, consumer); + } + + private class CompoundConsumer extends Consumer { + private final List> mConsumers = new ArrayList<>(); + + CompoundConsumer(Consumer first, Consumer second) { + mConsumers.add(first); + mConsumers.add(second); } - private class CompoundConsumer extends Consumer { - private final List> mConsumers = new ArrayList<>(); - - CompoundConsumer(Consumer first, Consumer second) { - mConsumers.add(first); - mConsumers.add(second); - } - - @Override - public void take(T t) { - for (Consumer consumer : mConsumers) { - consumer.take(t); - } - } - - @Override - public Consumer and(Consumer consumer) { - if (consumer != null) { - mConsumers.add(consumer); - } - return this; - } + @Override + public void take(T t) { + for (Consumer consumer : mConsumers) { + consumer.take(t); + } + } + + @Override + public Consumer and(Consumer consumer) { + if (consumer != null) { + mConsumers.add(consumer); + } + return this; } + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/DataRefresher.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/DataRefresher.java index 1249d87b..2c31d44c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/DataRefresher.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/DataRefresher.java @@ -19,58 +19,56 @@ import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.sensorapi.StreamConsumer; -/** - * A data refresher which publishes the last known data value when streaming. - */ +/** A data refresher which publishes the last known data value when streaming. */ public class DataRefresher extends Refresher { - private static final int SENSOR_REFRESH_RATE = 100; // Refresh rate in ms. + private static final int SENSOR_REFRESH_RATE = 100; // Refresh rate in ms. - protected StreamConsumer streamConsumer; - protected boolean streaming = false; - private double mValue; - private Clock mClock; + protected StreamConsumer streamConsumer; + protected boolean streaming = false; + private double mValue; + private Clock mClock; - public DataRefresher(Scheduler scheduler, Clock clock) { - this(scheduler, clock, SENSOR_REFRESH_RATE); - } + public DataRefresher(Scheduler scheduler, Clock clock) { + this(scheduler, clock, SENSOR_REFRESH_RATE); + } - public DataRefresher(Scheduler scheduler, Clock clock, int sensorRefreshRateMillis) { - super(scheduler, Delay.millis(sensorRefreshRateMillis)); - mClock = clock; - } + public DataRefresher(Scheduler scheduler, Clock clock, int sensorRefreshRateMillis) { + super(scheduler, Delay.millis(sensorRefreshRateMillis)); + mClock = clock; + } - public void setStreamConsumer(StreamConsumer consumer) { - this.streamConsumer = consumer; - } + public void setStreamConsumer(StreamConsumer consumer) { + this.streamConsumer = consumer; + } - public void startStreaming() { - if (!streaming) { - streaming = true; - refresh(); - } + public void startStreaming() { + if (!streaming) { + streaming = true; + refresh(); } + } - public void stopStreaming() { - streaming = false; - } + public void stopStreaming() { + streaming = false; + } - public void setValue(double value) { - if (value != mValue) { - mValue = value; - refresh(); - } + public void setValue(double value) { + if (value != mValue) { + mValue = value; + refresh(); } + } - public double getValue(long now) { - return mValue; - } + public double getValue(long now) { + return mValue; + } - @Override - protected boolean doRefresh() { - if (streaming && streamConsumer != null) { - long now = mClock.getNow(); - streamConsumer.addData(now, getValue(now)); - } - return streaming; + @Override + protected boolean doRefresh() { + if (streaming && streamConsumer != null) { + long now = mClock.getNow(); + streamConsumer.addData(now, getValue(now)); } + return streaming; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Delay.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Delay.java index 096534a0..55fc3361 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Delay.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Delay.java @@ -19,71 +19,70 @@ import java.util.concurrent.TimeUnit; public class Delay { - public static final Delay ZERO = millis(0); + public static final Delay ZERO = millis(0); - private final long mDelay; - private final TimeUnit mUnit; + private final long mDelay; + private final TimeUnit mUnit; - public static Delay seconds(long secs) { - return new Delay(secs, TimeUnit.SECONDS); - } - - public static Delay millis(long millis) { - return new Delay(millis, TimeUnit.MILLISECONDS); - } - - public static Delay micros(int micros) { - return new Delay(micros, TimeUnit.MICROSECONDS); - } - - private Delay(long delay, TimeUnit unit) { - mDelay = delay; - mUnit = unit; - } + public static Delay seconds(long secs) { + return new Delay(secs, TimeUnit.SECONDS); + } - public long getDelay() { - return mDelay; - } + public static Delay millis(long millis) { + return new Delay(millis, TimeUnit.MILLISECONDS); + } - public TimeUnit getUnit() { - return mUnit; - } + public static Delay micros(int micros) { + return new Delay(micros, TimeUnit.MICROSECONDS); + } - @Override - public String toString() { - return "Delay{" + mDelay + " " + mUnit + "}"; - } + private Delay(long delay, TimeUnit unit) { + mDelay = delay; + mUnit = unit; + } - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } + public long getDelay() { + return mDelay; + } - final Delay delay = (Delay) o; + public TimeUnit getUnit() { + return mUnit; + } - if (mDelay != delay.mDelay) { - return false; - } - return mUnit == delay.mUnit; + @Override + public String toString() { + return "Delay{" + mDelay + " " + mUnit + "}"; + } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; } - - @Override - public int hashCode() { - int result = (int) (mDelay ^ (mDelay >>> 32)); - result = 31 * result + mUnit.hashCode(); - return result; + if (o == null || getClass() != o.getClass()) { + return false; } - public long asMillis() { - return TimeUnit.MILLISECONDS.convert(mDelay, mUnit); - } + final Delay delay = (Delay) o; - public boolean isZero() { - return mDelay == 0; + if (mDelay != delay.mDelay) { + return false; } + return mUnit == delay.mUnit; + } + + @Override + public int hashCode() { + int result = (int) (mDelay ^ (mDelay >>> 32)); + result = 31 * result + mUnit.hashCode(); + return result; + } + + public long asMillis() { + return TimeUnit.MILLISECONDS.convert(mDelay, mUnit); + } + + public boolean isZero() { + return mDelay == 0; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FailureListener.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FailureListener.java index 47df35cd..6e387682 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FailureListener.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FailureListener.java @@ -17,5 +17,5 @@ package com.google.android.apps.forscience.javalib; public interface FailureListener { - void fail(Exception e); + void fail(Exception e); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FallibleConsumer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FallibleConsumer.java index e155e771..99b19304 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FallibleConsumer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/FallibleConsumer.java @@ -21,5 +21,5 @@ * exception. */ public interface FallibleConsumer { - void take(T t) throws Exception; + void take(T t) throws Exception; } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumer.java index 7450dcb0..05cc04d0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumer.java @@ -17,10 +17,10 @@ package com.google.android.apps.forscience.javalib; /** - * Many times, a queued operation may succeed and deliver a value, or fail with an exception. - * The methods that enqueue such operations should take a MaybeConsumer to which the success or - * failure is delivered. + * Many times, a queued operation may succeed and deliver a value, or fail with an exception. The + * methods that enqueue such operations should take a MaybeConsumer to which the success or failure + * is delivered. */ public interface MaybeConsumer extends FailureListener { - void success(T value); + void success(T value); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java index beb2c211..3a6ef911 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/MaybeConsumers.java @@ -29,302 +29,299 @@ import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; -/** - * Utilities for interfaces that use {@link MaybeConsumer} - */ +/** Utilities for interfaces that use {@link MaybeConsumer} */ public class MaybeConsumers { - /** - * A MaybeConsumer that does nothing - */ - private static final MaybeConsumer NOOP = new MaybeConsumer() { + /** A MaybeConsumer that does nothing */ + private static final MaybeConsumer NOOP = + new MaybeConsumer() { @Override - public void success(Object value) { - } + public void success(Object value) {} @Override - public void fail(Exception e) { - } - }; + public void fail(Exception e) {} + }; - /** - * A MaybeConsumer that does nothing, with a particular generic type - */ - public static MaybeConsumer noop() { - return (MaybeConsumer) NOOP; - } + /** A MaybeConsumer that does nothing, with a particular generic type */ + public static MaybeConsumer noop() { + return (MaybeConsumer) NOOP; + } - /** - * Combine a failure listener and success listener into a single MaybeConsumer - */ - public static MaybeConsumer chainFailure(final FailureListener failure, - final Consumer success) { - return new MaybeConsumer() { - @Override - public void success(T value) { - success.take(value); - } + /** Combine a failure listener and success listener into a single MaybeConsumer */ + public static MaybeConsumer chainFailure( + final FailureListener failure, final Consumer success) { + return new MaybeConsumer() { + @Override + public void success(T value) { + success.take(value); + } - @Override - public void fail(Exception e) { - failure.fail(e); - } - }; - } + @Override + public void fail(Exception e) { + failure.fail(e); + } + }; + } - /** - * Combine a failure listener and fallible success listener into a single MaybeConsumer - */ - public static MaybeConsumer chainFailure(final FailureListener failure, - final FallibleConsumer success) { - return new MaybeConsumer() { - @Override - public void success(T value) { - try { - success.take(value); - } catch (Exception e) { - fail(e); - } - } + /** Combine a failure listener and fallible success listener into a single MaybeConsumer */ + public static MaybeConsumer chainFailure( + final FailureListener failure, final FallibleConsumer success) { + return new MaybeConsumer() { + @Override + public void success(T value) { + try { + success.take(value); + } catch (Exception e) { + fail(e); + } + } - @Override - public void fail(Exception e) { - failure.fail(e); - } - }; - } + @Override + public void fail(Exception e) { + failure.fail(e); + } + }; + } - /** - * A MaybeConsumer that doesn't care about successful values, and passes along failures. - */ - public static MaybeConsumer expectSuccess(FailureListener failureListener) { - return chainFailure(failureListener, new Consumer() { - @Override - public void take(Success success) { - // do nothing, expected - } + /** A MaybeConsumer that doesn't care about successful values, and passes along failures. */ + public static MaybeConsumer expectSuccess(FailureListener failureListener) { + return chainFailure( + failureListener, + new Consumer() { + @Override + public void take(Success success) { + // do nothing, expected + } }); - } + } - /** - * Given an operation that takes a {@link MaybeConsumer}, create a JavaRX - * {@link Completable} that succeeds iff the operation does. - * - * Example: - *
-     *     // update the experiment, and then log that it was successful
-     *     DataController dc = getDataController();
-     *     MaybeConsumers.buildCompleteable(mc -> dc.updateExperiment(e.getExperimentId(), mc))
-     *                   .subscribe(() -> log("successfully updated!"));
-     * 
- */ - public static Completable buildCompleteable( - io.reactivex.functions.Consumer> c) { - return Completable.create(new CompletableOnSubscribe() { - @Override - public void subscribe(CompletableEmitter emitter) throws Exception { - c.accept(new MaybeConsumer() { - @Override - public void success(Success value) { - emitter.onComplete(); - } + /** + * Given an operation that takes a {@link MaybeConsumer}, create a JavaRX {@link + * Completable} that succeeds iff the operation does. + * + *

Example: + * + *

+   *     // update the experiment, and then log that it was successful
+   *     DataController dc = getDataController();
+   *     MaybeConsumers.buildCompleteable(mc -> dc.updateExperiment(e.getExperimentId(), mc))
+   *                   .subscribe(() -> log("successfully updated!"));
+   * 
+ */ + public static Completable buildCompleteable( + io.reactivex.functions.Consumer> c) { + return Completable.create( + new CompletableOnSubscribe() { + @Override + public void subscribe(CompletableEmitter emitter) throws Exception { + c.accept( + new MaybeConsumer() { + @Override + public void success(Success value) { + emitter.onComplete(); + } - @Override - public void fail(Exception e) { - emitter.onError(e); - } + @Override + public void fail(Exception e) { + emitter.onError(e); + } }); - } + } }); - } + } - /** - * Given an operation that takes a {@link MaybeConsumer}, create a JavaRX - * {@link Single} that produces the value passed to the MaybeConsumer. - * - * Example: - *
-     *     // log the name of the experiment with a given id
-     *     DataController dc = getDataController();
-     *     MaybeConsumers.buildSingle(mc -> dc.getExperimentById(id, mc))
-     *                   .subscribe(experiment -> log("Name: " + experiment.getName()));
-     * 
- */ - public static Single buildSingle(io.reactivex.functions.Consumer> c) { - return Single.create(new SingleOnSubscribe() { - @Override - public void subscribe(SingleEmitter emitter) throws Exception { - c.accept(new MaybeConsumer() { - @Override - public void success(T value) { - emitter.onSuccess(value); - } + /** + * Given an operation that takes a {@link MaybeConsumer}, create a JavaRX {@link Single} + * that produces the value passed to the MaybeConsumer. + * + *

Example: + * + *

+   *     // log the name of the experiment with a given id
+   *     DataController dc = getDataController();
+   *     MaybeConsumers.buildSingle(mc -> dc.getExperimentById(id, mc))
+   *                   .subscribe(experiment -> log("Name: " + experiment.getName()));
+   * 
+ */ + public static Single buildSingle(io.reactivex.functions.Consumer> c) { + return Single.create( + new SingleOnSubscribe() { + @Override + public void subscribe(SingleEmitter emitter) throws Exception { + c.accept( + new MaybeConsumer() { + @Override + public void success(T value) { + emitter.onSuccess(value); + } - @Override - public void fail(Exception e) { - emitter.onError(e); - } + @Override + public void fail(Exception e) { + emitter.onError(e); + } }); - } + } }); - } + } - /** - * Given an operation that takes a {@link MaybeConsumer}, create a JavaRX - * {@link Maybe} that produces the value passed to the MaybeConsumer, or onComplete if the - * value is null - * - * Example: - *
-     *     // log the name of the experiment with a given id
-     *     DataController dc = getDataController();
-     *     MaybeConsumers.MaybeConsumers.buildMaybe(mc -> dc.getLastUsedUnarchivedExperiment(mc))
-     *                   .subscribe(experiment -> log("Name: " + experiment.getName()));
-     * 
- */ - public static Maybe buildMaybe(io.reactivex.functions.Consumer> c) { - return Maybe.create(emitter -> c.accept(new MaybeConsumer() { - @Override - public void success(T value) { - if (value == null) { - emitter.onComplete(); - } else { - emitter.onSuccess(value); - } - } + /** + * Given an operation that takes a {@link MaybeConsumer}, create a JavaRX {@link Maybe} that + * produces the value passed to the MaybeConsumer, or onComplete if the value is null + * + *

Example: + * + *

+   *     // log the name of the experiment with a given id
+   *     DataController dc = getDataController();
+   *     MaybeConsumers.MaybeConsumers.buildMaybe(mc -> dc.getLastUsedUnarchivedExperiment(mc))
+   *                   .subscribe(experiment -> log("Name: " + experiment.getName()));
+   * 
+ */ + public static Maybe buildMaybe(io.reactivex.functions.Consumer> c) { + return Maybe.create( + emitter -> + c.accept( + new MaybeConsumer() { + @Override + public void success(T value) { + if (value == null) { + emitter.onComplete(); + } else { + emitter.onSuccess(value); + } + } - @Override - public void fail(Exception e) { - emitter.onError(e); - } - })); - } + @Override + public void fail(Exception e) { + emitter.onError(e); + } + })); + } - /** - * MaybeConsumer is very similar to {@link CompletableObserver} in JavaRX. Both are - * looking for either a signal that a process has succeeded, or that it has failed with some - * exception. For the time period where we are still using both interfaces, we will find it - * useful to be able to switch between them. - * - * @return a {@link MaybeConsumer} that pipes {@link MaybeConsumer#success(Object)} - * to {@link CompletableObserver#onComplete()}, and - * {@link MaybeConsumer#fail(Exception)} to - * {@link CompletableObserver#onError(Throwable)} - */ - public static MaybeConsumer fromCompletableObserver(final CompletableObserver o) { - return new MaybeConsumer() { - @Override - public void success(Success value) { - o.onComplete(); - } + /** + * MaybeConsumer is very similar to {@link CompletableObserver} in JavaRX. Both are + * looking for either a signal that a process has succeeded, or that it has failed with some + * exception. For the time period where we are still using both interfaces, we will find it useful + * to be able to switch between them. + * + * @return a {@link MaybeConsumer} that pipes {@link MaybeConsumer#success(Object)} to + * {@link CompletableObserver#onComplete()}, and {@link MaybeConsumer#fail(Exception)} to + * {@link CompletableObserver#onError(Throwable)} + */ + public static MaybeConsumer fromCompletableObserver(final CompletableObserver o) { + return new MaybeConsumer() { + @Override + public void success(Success value) { + o.onComplete(); + } - @Override - public void fail(Exception e) { - o.onError(e); - } - }; - } + @Override + public void fail(Exception e) { + o.onError(e); + } + }; + } - /** - * Performs the opposite translation from - * {@link MaybeConsumers#fromCompletableObserver(CompletableObserver)} - */ - public static CompletableObserver toCompletableObserver(final MaybeConsumer c) { - return new CompletableObserver() { - @Override - public void onSubscribe(@NonNull Disposable d) { - // do nothing - } + /** + * Performs the opposite translation from {@link + * MaybeConsumers#fromCompletableObserver(CompletableObserver)} + */ + public static CompletableObserver toCompletableObserver(final MaybeConsumer c) { + return new CompletableObserver() { + @Override + public void onSubscribe(@NonNull Disposable d) { + // do nothing + } - @Override - public void onComplete() { - c.success(Success.SUCCESS); - } + @Override + public void onComplete() { + c.success(Success.SUCCESS); + } - @Override - public void onError(@NonNull Throwable e) { - c.fail(throwableToException(e)); - } - }; - } + @Override + public void onError(@NonNull Throwable e) { + c.fail(throwableToException(e)); + } + }; + } - private static Exception throwableToException(Throwable e) { - if (e instanceof Exception) { - return (Exception) e; - } else { - return new Exception(e); - } + private static Exception throwableToException(Throwable e) { + if (e instanceof Exception) { + return (Exception) e; + } else { + return new Exception(e); } + } - /** - * MaybeConsumer is very similar to {@link SingleObserver} in JavaRX. Both are - * looking for either a signal that a computation has succeeded and returned a value of type - * T, or that it has failed with some exception. For the time period where we are still using - * both interfaces, we will find it useful to be able to switch between them. - * - * @return a {@link MaybeConsumer} that pipes {@link MaybeConsumer#success(Object)} - * to {@link SingleObserver#onSuccess(Object)}, and {@link MaybeConsumer#fail(Exception)} to - * {@link SingleObserver#onError(Throwable)} - */ - public static MaybeConsumer fromSingleObserver(final SingleObserver o) { - return new MaybeConsumer() { - @Override - public void success(T value) { - o.onSuccess(value); - } + /** + * MaybeConsumer is very similar to {@link SingleObserver} in JavaRX. Both are looking for + * either a signal that a computation has succeeded and returned a value of type T, or that it has + * failed with some exception. For the time period where we are still using both interfaces, we + * will find it useful to be able to switch between them. + * + * @return a {@link MaybeConsumer} that pipes {@link MaybeConsumer#success(Object)} to {@link + * SingleObserver#onSuccess(Object)}, and {@link MaybeConsumer#fail(Exception)} to {@link + * SingleObserver#onError(Throwable)} + */ + public static MaybeConsumer fromSingleObserver(final SingleObserver o) { + return new MaybeConsumer() { + @Override + public void success(T value) { + o.onSuccess(value); + } - @Override - public void fail(Exception e) { - o.onError(e); - } - }; - } + @Override + public void fail(Exception e) { + o.onError(e); + } + }; + } - /** - * Performs the opposite translation from - * {@link MaybeConsumers#fromSingleObserver(SingleObserver)} - */ - public static SingleObserver toSingleObserver(final MaybeConsumer c) { - return new SingleObserver() { - @Override - public void onSubscribe(@NonNull Disposable d) { - // do nothing - } + /** + * Performs the opposite translation from {@link + * MaybeConsumers#fromSingleObserver(SingleObserver)} + */ + public static SingleObserver toSingleObserver(final MaybeConsumer c) { + return new SingleObserver() { + @Override + public void onSubscribe(@NonNull Disposable d) { + // do nothing + } - @Override - public void onSuccess(@NonNull T t) { - c.success(t); - } + @Override + public void onSuccess(@NonNull T t) { + c.success(t); + } - @Override - public void onError(@NonNull Throwable e) { - c.fail(new RuntimeException(e)); - } - }; - } + @Override + public void onError(@NonNull Throwable e) { + c.fail(new RuntimeException(e)); + } + }; + } - /** - * Allows a function that takes a MaybeConsumer to pipe a single success value to the given - * Observer (which may also be accepting values from other places) - * - * @return a {@link MaybeConsumer} that pipes {@link MaybeConsumer#success(Object)} - * to {@link Observer#onNext(Object)}, and {@link MaybeConsumer#fail(Exception)} to - * {@link Observer#onError(Throwable)} - */ - public static MaybeConsumer fromObserver(Observer o) { - return new MaybeConsumer() { - @Override - public void success(T value) { - // if value is null, just report empty - if (value != null) { - o.onNext(value); - } - o.onComplete(); - } + /** + * Allows a function that takes a MaybeConsumer to pipe a single success value to the given + * Observer (which may also be accepting values from other places) + * + * @return a {@link MaybeConsumer} that pipes {@link MaybeConsumer#success(Object)} to {@link + * Observer#onNext(Object)}, and {@link MaybeConsumer#fail(Exception)} to {@link + * Observer#onError(Throwable)} + */ + public static MaybeConsumer fromObserver(Observer o) { + return new MaybeConsumer() { + @Override + public void success(T value) { + // if value is null, just report empty + if (value != null) { + o.onNext(value); + } + o.onComplete(); + } - @Override - public void fail(Exception e) { - o.onError(e); - } - }; - } + @Override + public void fail(Exception e) { + o.onError(e); + } + }; + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/ParallelTask.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/ParallelTask.java index feafdf37..faef79ed 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/ParallelTask.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/ParallelTask.java @@ -17,14 +17,14 @@ package com.google.android.apps.forscience.javalib; import android.util.SparseBooleanArray; - import java.util.ArrayList; import java.util.List; /** * Easy way to wait for multiple asynchronous processes to complete before moving on. * - * Example: + *

Example: + * *

  *   ParallelTask task = new ParallelTask();
  *   doSomeTask(task.addStep());
@@ -41,54 +41,54 @@
  * All calls to {@see addStep} should come before the single call to {@see whenAllDone}.
  */
 public class ParallelTask {
-    private MaybeConsumer mWhenDone = null;
-    private final SparseBooleanArray mStepsDone = new SparseBooleanArray();
-    private final List mFailures = new ArrayList<>();
+  private MaybeConsumer mWhenDone = null;
+  private final SparseBooleanArray mStepsDone = new SparseBooleanArray();
+  private final List mFailures = new ArrayList<>();
 
-    public MaybeConsumer addStep() {
-        final int index = mStepsDone.size();
-        mStepsDone.put(index, false);
-        return new MaybeConsumer() {
-            @Override
-            public void success(Success value) {
-                done();
-            }
+  public MaybeConsumer addStep() {
+    final int index = mStepsDone.size();
+    mStepsDone.put(index, false);
+    return new MaybeConsumer() {
+      @Override
+      public void success(Success value) {
+        done();
+      }
 
-            @Override
-            public void fail(Exception e) {
-                mFailures.add(e);
-                done();
-            }
-
-            protected void done() {
-                mStepsDone.put(index, true);
-                checkForAllDone();
-            }
-        };
-    }
+      @Override
+      public void fail(Exception e) {
+        mFailures.add(e);
+        done();
+      }
 
-    public void whenAllDone(MaybeConsumer whenDone) {
-        mWhenDone = whenDone;
+      protected void done() {
+        mStepsDone.put(index, true);
         checkForAllDone();
-    }
+      }
+    };
+  }
+
+  public void whenAllDone(MaybeConsumer whenDone) {
+    mWhenDone = whenDone;
+    checkForAllDone();
+  }
 
-    private void checkForAllDone() {
-        if (mWhenDone == null) {
-            return;
-        }
-        int numSteps = mStepsDone.size();
-        for (int i = 0; i < numSteps; i++) {
-            if (! mStepsDone.get(i)) {
-                return;
-            }
-        }
-        if (mFailures.isEmpty()) {
-            mWhenDone.success(Success.SUCCESS);
-        } else {
-            for (Exception failure : mFailures) {
-                mWhenDone.fail(failure);
-            }
-        }
-        mWhenDone = null;
+  private void checkForAllDone() {
+    if (mWhenDone == null) {
+      return;
+    }
+    int numSteps = mStepsDone.size();
+    for (int i = 0; i < numSteps; i++) {
+      if (!mStepsDone.get(i)) {
+        return;
+      }
+    }
+    if (mFailures.isEmpty()) {
+      mWhenDone.success(Success.SUCCESS);
+    } else {
+      for (Exception failure : mFailures) {
+        mWhenDone.fail(failure);
+      }
     }
+    mWhenDone = null;
+  }
 }
diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Refresher.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Refresher.java
index f6ae2bea..52f9a6c1 100644
--- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Refresher.java
+++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Refresher.java
@@ -17,35 +17,36 @@
 package com.google.android.apps.forscience.javalib;
 
 public abstract class Refresher {
-    private final Scheduler mScheduler;
+  private final Scheduler mScheduler;
 
-    private boolean mRefreshScheduled = false;
-    private Runnable mRefreshRunnable = new Runnable() {
+  private boolean mRefreshScheduled = false;
+  private Runnable mRefreshRunnable =
+      new Runnable() {
         @Override
         public void run() {
-            mRefreshScheduled = false;
-            refresh();
+          mRefreshScheduled = false;
+          refresh();
         }
-    };
-    private Delay mDelay;
+      };
+  private Delay mDelay;
 
-    public Refresher(Scheduler scheduler, Delay delay) {
-        mScheduler = scheduler;
-        mDelay = delay;
-    }
+  public Refresher(Scheduler scheduler, Delay delay) {
+    mScheduler = scheduler;
+    mDelay = delay;
+  }
 
-    public void refresh() {
-        final boolean rescheduleWouldBeUseful = doRefresh();
-        if (rescheduleWouldBeUseful && !mRefreshScheduled) {
-            mRefreshScheduled = true;
-            mScheduler.schedule(mDelay, mRefreshRunnable);
-        }
+  public void refresh() {
+    final boolean rescheduleWouldBeUseful = doRefresh();
+    if (rescheduleWouldBeUseful && !mRefreshScheduled) {
+      mRefreshScheduled = true;
+      mScheduler.schedule(mDelay, mRefreshRunnable);
     }
+  }
 
-    /**
-     * Does the scheduler-specific work of refreshing
-     *
-     * @return true iff another refresh should be scheduled.
-     */
-    protected abstract boolean doRefresh();
-}
\ No newline at end of file
+  /**
+   * Does the scheduler-specific work of refreshing
+   *
+   * @return true iff another refresh should be scheduled.
+   */
+  protected abstract boolean doRefresh();
+}
diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Scheduler.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Scheduler.java
index f77f0fc3..dcadebfe 100644
--- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Scheduler.java
+++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Scheduler.java
@@ -17,13 +17,9 @@
 package com.google.android.apps.forscience.javalib;
 
 public interface Scheduler {
-    /**
-     * schedule a task to happen at a specified time in the future.
-     */
-    void schedule(Delay delay, Runnable doThis);
+  /** schedule a task to happen at a specified time in the future. */
+  void schedule(Delay delay, Runnable doThis);
 
-    /**
-     * Remove a previously-scheduled task
-     */
-    void unschedule(Runnable removeThis);
+  /** Remove a previously-scheduled task */
+  void unschedule(Runnable removeThis);
 }
diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Success.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Success.java
index 6305eee6..122125f4 100644
--- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Success.java
+++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/javalib/Success.java
@@ -17,13 +17,13 @@
 package com.google.android.apps.forscience.javalib;
 
 public class Success {
-    public static void succeeded(MaybeConsumer c) {
-        c.success(SUCCESS);
-    }
+  public static void succeeded(MaybeConsumer c) {
+    c.success(SUCCESS);
+  }
 
-    public static Success SUCCESS = new Success();
+  public static Success SUCCESS = new Success();
 
-    private Success() {
-        // don't allow instantiation
-    }
+  private Success() {
+    // don't allow instantiation
+  }
 }
diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AbstractReadableSensorOptions.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AbstractReadableSensorOptions.java
index d5119619..2ebf5a0e 100644
--- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AbstractReadableSensorOptions.java
+++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AbstractReadableSensorOptions.java
@@ -17,68 +17,67 @@
 package com.google.android.apps.forscience.whistlepunk;
 
 import android.util.ArrayMap;
-
 import com.google.android.apps.forscience.whistlepunk.sensorapi.ReadableSensorOptions;
 import com.google.android.apps.forscience.whistlepunk.wireapi.TransportableSensorOptions;
 
 /**
- * Implements general behavior of abstracting primitive types from strings.  Subclasses need only
+ * Implements general behavior of abstracting primitive types from strings. Subclasses need only
  * define #getString and #getWrittenKeys
  */
 public abstract class AbstractReadableSensorOptions implements ReadableSensorOptions {
-    public static TransportableSensorOptions makeTransportable(ReadableSensorOptions fromThis) {
-        ArrayMap values = new ArrayMap<>();
-        for (String key : fromThis.getWrittenKeys()) {
-            values.put(key, fromThis.getString(key, null));
-        }
-        return new TransportableSensorOptions(values);
+  public static TransportableSensorOptions makeTransportable(ReadableSensorOptions fromThis) {
+    ArrayMap values = new ArrayMap<>();
+    for (String key : fromThis.getWrittenKeys()) {
+      values.put(key, fromThis.getString(key, null));
     }
+    return new TransportableSensorOptions(values);
+  }
 
-    @Override
-    public float getFloat(String key, float defaultValue) {
-        String string = getString(key, null);
-        if (string == null) {
-            return defaultValue;
-        }
-        try {
-            return Float.valueOf(string);
-        } catch (NumberFormatException e) {
-            return defaultValue;
-        }
+  @Override
+  public float getFloat(String key, float defaultValue) {
+    String string = getString(key, null);
+    if (string == null) {
+      return defaultValue;
+    }
+    try {
+      return Float.valueOf(string);
+    } catch (NumberFormatException e) {
+      return defaultValue;
     }
+  }
 
-    @Override
-    public int getInt(String key, int defaultValue) {
-        String string = getString(key, null);
-        if (string == null) {
-            return defaultValue;
-        }
-        try {
-            return Integer.valueOf(string);
-        } catch (NumberFormatException e) {
-            return defaultValue;
-        }
+  @Override
+  public int getInt(String key, int defaultValue) {
+    String string = getString(key, null);
+    if (string == null) {
+      return defaultValue;
     }
+    try {
+      return Integer.valueOf(string);
+    } catch (NumberFormatException e) {
+      return defaultValue;
+    }
+  }
 
-    @Override
-    public long getLong(String key, long defaultValue) {
-        String string = getString(key, null);
-        if (string == null) {
-            return defaultValue;
-        }
-        try {
-            return Long.valueOf(string);
-        } catch (NumberFormatException e) {
-            return defaultValue;
-        }
+  @Override
+  public long getLong(String key, long defaultValue) {
+    String string = getString(key, null);
+    if (string == null) {
+      return defaultValue;
+    }
+    try {
+      return Long.valueOf(string);
+    } catch (NumberFormatException e) {
+      return defaultValue;
     }
+  }
 
-    @Override
-    public boolean getBoolean(String key, boolean defaultValue) {
-        String string = getString(key, null);
-        if (string == null) {
-            return defaultValue;
-        }
-        return Boolean.valueOf(string);
+  @Override
+  public boolean getBoolean(String key, boolean defaultValue) {
+    String string = getString(key, null);
+    if (string == null) {
+      return defaultValue;
     }
+    return Boolean.valueOf(string);
+  }
 }
diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java
index 1b9dd12e..e2223cb1 100644
--- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java
+++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AccessibilityUtils.java
@@ -18,133 +18,127 @@
 
 import android.content.Context;
 import android.graphics.Rect;
-import android.os.Build;
 import androidx.annotation.VisibleForTesting;
 import android.support.design.widget.Snackbar;
 import android.view.MotionEvent;
 import android.view.TouchDelegate;
 import android.view.View;
 import android.view.accessibility.AccessibilityManager;
-
 import java.util.List;
 
-/**
- * Class for general-use accessibility utils.
- */
+/** Class for general-use accessibility utils. */
 public final class AccessibilityUtils {
 
-    // For accessibility, snackbars with actions can time out only after 90 seconds.
-    public static final int SNACKBAR_TIMEOUT_EXTRA_LONG = 90 * 1000;
-
-    private AccessibilityUtils() {
-
-    }
-
-    /**
-     * General-purpose function to increase the TouchDelegate size up to the minimum size
-     * needed for accessibility, and centered around the existing center of the view.
-     * @param viewToDelegate The view whose touchable area needs to be increased by setting a
-     *                       TouchDelegate on its parent with a larger rect.
-     */
-
-    public static void setTouchDelegateToMinAccessibleSize(final View viewToDelegate) {
-        viewToDelegate.post(new Runnable() {
-            @Override
-            public void run() {
-                if (viewToDelegate == null) {
-                    return;
-                }
-                int a11ySize = viewToDelegate.getContext().getResources()
-                        .getDimensionPixelSize(R.dimen.accessibility_touch_target_min_size);
-                Rect rect = new Rect();
-                viewToDelegate.getHitRect(rect);
-                resizeRect(a11ySize, rect);
-                ((View) viewToDelegate.getParent()).setTouchDelegate(new TouchDelegate(rect,
-                        viewToDelegate));
+  // For accessibility, snackbars with actions can time out only after 90 seconds.
+  public static final int SNACKBAR_TIMEOUT_EXTRA_LONG = 90 * 1000;
+
+  private AccessibilityUtils() {}
+
+  /**
+   * General-purpose function to increase the TouchDelegate size up to the minimum size needed for
+   * accessibility, and centered around the existing center of the view.
+   *
+   * @param viewToDelegate The view whose touchable area needs to be increased by setting a
+   *     TouchDelegate on its parent with a larger rect.
+   */
+  public static void setTouchDelegateToMinAccessibleSize(final View viewToDelegate) {
+    viewToDelegate.post(
+        new Runnable() {
+          @Override
+          public void run() {
+            if (viewToDelegate == null) {
+              return;
             }
+            int a11ySize =
+                viewToDelegate
+                    .getContext()
+                    .getResources()
+                    .getDimensionPixelSize(R.dimen.accessibility_touch_target_min_size);
+            Rect rect = new Rect();
+            viewToDelegate.getHitRect(rect);
+            resizeRect(a11ySize, rect);
+            ((View) viewToDelegate.getParent())
+                .setTouchDelegate(new TouchDelegate(rect, viewToDelegate));
+          }
         });
+  }
+
+  @VisibleForTesting
+  public static void resizeRect(int a11ySize, Rect rect) {
+    int heightToShift = (int) Math.ceil((a11ySize - rect.height()) / 2.0);
+    int widthToShift = (int) Math.ceil((a11ySize - rect.width()) / 2.0);
+    if (heightToShift > 0) {
+      rect.top -= heightToShift;
+      rect.bottom += heightToShift;
     }
-
-    @VisibleForTesting
-    public static void resizeRect(int a11ySize, Rect rect) {
-        int heightToShift = (int) Math.ceil((a11ySize - rect.height()) / 2.0);
-        int widthToShift = (int) Math.ceil((a11ySize - rect.width()) / 2.0);
-        if (heightToShift > 0) {
-            rect.top -= heightToShift;
-            rect.bottom += heightToShift;
-        }
-        if (widthToShift > 0) {
-            rect.left -= widthToShift;
-            rect.right += widthToShift;
-        }
-    }
-
-    /**
-     * Returns the toast duration unless accessibility touch mode is enabled, in
-     * which case it returns a longer duration (90 seconds).
-     */
-    public static @Snackbar.Duration int getLongerToastDurationIfAccessibilityEnabled(
-            Context context, Snackbar bar) {
-        if (isAccessibilityManagerEnabled(context)) {
-            return SNACKBAR_TIMEOUT_EXTRA_LONG;
-        }
-        return bar.getDuration();
+    if (widthToShift > 0) {
+      rect.left -= widthToShift;
+      rect.right += widthToShift;
     }
-
-    /**
-     * Returns true if the accessibility manager is enabled.
-     */
-    public static boolean isAccessibilityManagerEnabled(Context context) {
-        AccessibilityManager accessibilityManager =
-                ((AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE));
-        return accessibilityManager != null && accessibilityManager.isEnabled();
+  }
+
+  /**
+   * Returns the toast duration unless accessibility touch mode is enabled, in which case it returns
+   * a longer duration (90 seconds).
+   */
+  public static @Snackbar.Duration int getLongerToastDurationIfAccessibilityEnabled(
+      Context context, Snackbar bar) {
+    if (isAccessibilityManagerEnabled(context)) {
+      return SNACKBAR_TIMEOUT_EXTRA_LONG;
     }
+    return bar.getDuration();
+  }
 
-    private static class TouchDelegateGroup extends TouchDelegate {
-
-        private static final Rect sRect = new Rect();
-        private List mDelegateList;
+  /** Returns true if the accessibility manager is enabled. */
+  public static boolean isAccessibilityManagerEnabled(Context context) {
+    AccessibilityManager accessibilityManager =
+        ((AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE));
+    return accessibilityManager != null && accessibilityManager.isEnabled();
+  }
 
-        /**
-         * Constructor
-         *
-         * @param delegateView The view that should receive motion events
-         */
-        public TouchDelegateGroup(View delegateView, List touchDelegates) {
-            super(sRect, delegateView);
-            mDelegateList = touchDelegates;
-        }
+  private static class TouchDelegateGroup extends TouchDelegate {
 
-        @Override
-        public boolean onTouchEvent(MotionEvent event) {
-            // Go through the list and see if any of the delegates could claim this event.
-            // Note: Assumes non-overlapping touchDelegates.
-            boolean result = false;
-            // Check against all the touchDelegates in the list -- this could be an
-            // ACTION_MOVE or ACTION_UP that impacts a view that isn't at the (x,y) of an event.
-            for (TouchDelegate touchDelegate : mDelegateList) {
-                result = touchDelegate.onTouchEvent(event) || result;
-            }
-            return result;
-        }
-
-    }
+    private static final Rect sRect = new Rect();
+    private List mDelegateList;
 
-    public static Snackbar makeSnackbar(View view, String message, int length) {
-        Context context = view.getContext();
-        Snackbar bar = Snackbar.make(view, message, length);
-        bar.getView().setContentDescription(message);
-        bar.setDuration(getLongerToastDurationIfAccessibilityEnabled(context, bar));
-        bar.setActionTextColor(context.getResources().getColor(R.color.snackbar_action_color));
-        return bar;
+    /**
+     * Constructor
+     *
+     * @param delegateView The view that should receive motion events
+     */
+    public TouchDelegateGroup(View delegateView, List touchDelegates) {
+      super(sRect, delegateView);
+      mDelegateList = touchDelegates;
     }
 
-    // TODO: ViewCompat.setAccessibilityDelegate isn't working on Kitkat. Look into this so that
-    // we can always use AccessibilityDelegates instead of work-arounds.
-    public static boolean canSetAccessibilityDelegateAction() {
-        // AccessibilityNodeInfo.addAction(AccessibilityNodeInfo.AccessibilityAction) was added
-        // in Lollipop.
-        return AndroidVersionUtils.isApiLevelAtLeastLollipop();
-
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+      // Go through the list and see if any of the delegates could claim this event.
+      // Note: Assumes non-overlapping touchDelegates.
+      boolean result = false;
+      // Check against all the touchDelegates in the list -- this could be an
+      // ACTION_MOVE or ACTION_UP that impacts a view that isn't at the (x,y) of an event.
+      for (TouchDelegate touchDelegate : mDelegateList) {
+        result = touchDelegate.onTouchEvent(event) || result;
+      }
+      return result;
     }
+  }
+
+  public static Snackbar makeSnackbar(View view, String message, int length) {
+    Context context = view.getContext();
+    Snackbar bar = Snackbar.make(view, message, length);
+    bar.getView().setContentDescription(message);
+    bar.setDuration(getLongerToastDurationIfAccessibilityEnabled(context, bar));
+    bar.setActionTextColor(context.getResources().getColor(R.color.snackbar_action_color));
+    return bar;
+  }
+
+  // TODO: ViewCompat.setAccessibilityDelegate isn't working on Kitkat. Look into this so that
+  // we can always use AccessibilityDelegates instead of work-arounds.
+  public static boolean canSetAccessibilityDelegateAction() {
+    // AccessibilityNodeInfo.addAction(AccessibilityNodeInfo.AccessibilityAction) was added
+    // in Lollipop.
+    return AndroidVersionUtils.isApiLevelAtLeastLollipop();
+  }
 }
diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSeekBarListeners.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSeekBarListeners.java
index bf840a59..b533e070 100644
--- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSeekBarListeners.java
+++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSeekBarListeners.java
@@ -17,58 +17,49 @@
 package com.google.android.apps.forscience.whistlepunk;
 
 import android.widget.SeekBar;
-
 import com.google.android.apps.forscience.whistlepunk.sensorapi.ActiveBundle;
 
-/**
- * Seek bar listeners that update an ActiveBundle based on computed values from progress.
- */
+/** Seek bar listeners that update an ActiveBundle based on computed values from progress. */
 public class ActiveSeekBarListeners {
-    private static abstract class StubSeekBarListener implements SeekBar.OnSeekBarChangeListener {
-        protected final ActiveBundle mActiveBundle;
-        protected final String mKey;
+  private abstract static class StubSeekBarListener implements SeekBar.OnSeekBarChangeListener {
+    protected final ActiveBundle mActiveBundle;
+    protected final String mKey;
 
-        public StubSeekBarListener(ActiveBundle activeBundle, String key) {
-            mActiveBundle = activeBundle;
-            mKey = key;
-        }
-
-        @Override
-        public void onStartTrackingTouch(SeekBar seekBar) {
+    public StubSeekBarListener(ActiveBundle activeBundle, String key) {
+      mActiveBundle = activeBundle;
+      mKey = key;
+    }
 
-        }
+    @Override
+    public void onStartTrackingTouch(SeekBar seekBar) {}
 
-        @Override
-        public void onStopTrackingTouch(SeekBar seekBar) {
+    @Override
+    public void onStopTrackingTouch(SeekBar seekBar) {}
+  }
 
-        }
+  public abstract static class FloatSeekBarListener extends StubSeekBarListener {
+    public FloatSeekBarListener(ActiveBundle activeBundle, String key) {
+      super(activeBundle, key);
     }
 
-    public static abstract class FloatSeekBarListener extends
-            StubSeekBarListener {
-        public FloatSeekBarListener(ActiveBundle activeBundle, String key) {
-            super(activeBundle, key);
-        }
-
-        @Override
-        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-            mActiveBundle.changeFloat(mKey, computeValueFromProgress(progress, seekBar.getMax()));
-        }
-
-        protected abstract float computeValueFromProgress(int progress, int max);
+    @Override
+    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+      mActiveBundle.changeFloat(mKey, computeValueFromProgress(progress, seekBar.getMax()));
     }
 
-    public static abstract class IntSeekBarListener extends
-            StubSeekBarListener {
-        public IntSeekBarListener(ActiveBundle activeBundle, String key) {
-            super(activeBundle, key);
-        }
+    protected abstract float computeValueFromProgress(int progress, int max);
+  }
 
-        @Override
-        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-            mActiveBundle.changeInt(mKey, computeValueFromProgress(progress, seekBar.getMax()));
-        }
+  public abstract static class IntSeekBarListener extends StubSeekBarListener {
+    public IntSeekBarListener(ActiveBundle activeBundle, String key) {
+      super(activeBundle, key);
+    }
 
-        protected abstract int computeValueFromProgress(int progress, int max);
+    @Override
+    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+      mActiveBundle.changeInt(mKey, computeValueFromProgress(progress, seekBar.getMax()));
     }
+
+    protected abstract int computeValueFromProgress(int progress, int max);
+  }
 }
diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java
index 72ef977f..f3b546f4 100644
--- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java
+++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActiveSettingsController.java
@@ -16,134 +16,141 @@
 
 package com.google.android.apps.forscience.whistlepunk;
 
-
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.res.Resources;
 import android.support.design.widget.Snackbar;
 import androidx.appcompat.app.AlertDialog;
 import android.view.View;
-
 import com.google.android.apps.forscience.javalib.Consumer;
 import com.google.android.apps.forscience.whistlepunk.sensorapi.ActiveBundle;
 import com.google.android.apps.forscience.whistlepunk.sensorapi.ReadableSensorOptions;
 import com.google.android.apps.forscience.whistlepunk.sensorapi.WriteableSensorOptions;
 
-
 /**
  * Controller for settings dialogs that make live changes to ActiveBundles.
  *
- * TODO: all SettingsControllers switch to use this API
+ * 

TODO: all SettingsControllers switch to use this API */ public class ActiveSettingsController { - private final Context mContext; - - // TODO: this doesn't really need to be a persistent object. - public ActiveSettingsController(Context context) { - mContext = context; + private final Context mContext; + + // TODO: this doesn't really need to be a persistent object. + public ActiveSettingsController(Context context) { + mContext = context; + } + + public interface OptionsCallbacks { + /** + * @param activeBundle contains both the initial options, and active methods for changing them + * in response to user actions + * @return a View with controls to change the given options. + */ + View buildOptionsView(ActiveBundle activeBundle); + + /** + * If possible, perform a light-weight refresh of the UI to adjust to the new options. This may + * be called many times while the user changes options, so this should concentrate on changes + * that can be done in a single UI-thread frame, without IPC, database access, or communication. + * + * @param newOptions + */ + void previewOptions(ReadableSensorOptions newOptions); + + /** + * User has committed to the new options. Begin any required changes, including expensive + * operations (IPC, DB, BLE). + * + * @param newOptions + */ + void commitOptions(ReadableSensorOptions newOptions); + } + + public void launchOptionsDialog( + final OptionsCallbacks callbacks, + String name, + String optionsTitle, + WriteableSensorOptions options) { + final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); + + final Resources resources = mContext.getResources(); + if (callbacks == null) { + builder.setTitle(resources.getString(R.string.no_options_title, name)); + builder.setMessage(resources.getString(R.string.no_options_message, name)); + builder.setCancelable(true); + builder.create().show(); + return; } - public interface OptionsCallbacks { - /** - * @param activeBundle contains both the initial options, and active methods for changing - * them in response to user actions - * @return a View with controls to change the given options. - */ - View buildOptionsView(ActiveBundle activeBundle); - - /** - * If possible, perform a light-weight refresh of the UI to adjust to the new options. - * This may be called many times while the user changes options, so this should - * concentrate on changes that can be done in a single UI-thread frame, without IPC, - * database access, or communication. - * - * @param newOptions - */ - void previewOptions(ReadableSensorOptions newOptions); - - /** - * User has committed to the new options. Begin any required changes, including - * expensive operations (IPC, DB, BLE). - * - * @param newOptions - */ - void commitOptions(ReadableSensorOptions newOptions); - } - - public void launchOptionsDialog(final OptionsCallbacks callbacks, String name, - String optionsTitle, WriteableSensorOptions options) { - final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - - final Resources resources = mContext.getResources(); - if (callbacks == null) { - builder.setTitle(resources.getString(R.string.no_options_title, name)); - builder.setMessage(resources.getString(R.string.no_options_message, name)); - builder.setCancelable(true); - builder.create().show(); - return; - } - - final OptionsConsumer optionsConsumer = new OptionsConsumer(callbacks); - final View settingsView = - callbacks.buildOptionsView(new ActiveBundle(options, optionsConsumer, new - ActiveBundle.OnErrorListener() { - @Override - public void onError(String error, View relevantView) { - AccessibilityUtils.makeSnackbar(relevantView, error, - Snackbar.LENGTH_SHORT).show(); - } - })); - builder.setTitle(optionsTitle); - builder.setMessage(resources.getString(R.string.options_message, name)); - builder.setView(settingsView); - - builder.setPositiveButton(android.R.string.ok, null); - builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface d, int which) { - d.cancel(); - } + final OptionsConsumer optionsConsumer = new OptionsConsumer(callbacks); + final View settingsView = + callbacks.buildOptionsView( + new ActiveBundle( + options, + optionsConsumer, + new ActiveBundle.OnErrorListener() { + @Override + public void onError(String error, View relevantView) { + AccessibilityUtils.makeSnackbar(relevantView, error, Snackbar.LENGTH_SHORT) + .show(); + } + })); + builder.setTitle(optionsTitle); + builder.setMessage(resources.getString(R.string.options_message, name)); + builder.setView(settingsView); + + builder.setPositiveButton(android.R.string.ok, null); + builder.setNegativeButton( + android.R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface d, int which) { + d.cancel(); + } }); - builder.setCancelable(true); - final AlertDialog dialog = builder.create(); - - dialog.setOnShowListener(new DialogInterface.OnShowListener() { - @Override - public void onShow(final DialogInterface di) { - dialog.getButton(AlertDialog.BUTTON_POSITIVE) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - final ReadableSensorOptions options = optionsConsumer.getOptions(); - if (options != null) { - callbacks.commitOptions(options); - } - di.dismiss(); - } - }); - } + builder.setCancelable(true); + final AlertDialog dialog = builder.create(); + + dialog.setOnShowListener( + new DialogInterface.OnShowListener() { + @Override + public void onShow(final DialogInterface di) { + dialog + .getButton(AlertDialog.BUTTON_POSITIVE) + .setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + final ReadableSensorOptions options = optionsConsumer.getOptions(); + if (options != null) { + callbacks.commitOptions(options); + } + di.dismiss(); + } + }); + } }); - dialog.show(); - } + dialog.show(); + } - private static class OptionsConsumer extends Consumer { - private final OptionsCallbacks mCallbacks; - private ReadableSensorOptions mSettings; + private static class OptionsConsumer extends Consumer { + private final OptionsCallbacks mCallbacks; + private ReadableSensorOptions mSettings; - public OptionsConsumer(OptionsCallbacks callbacks) { - mCallbacks = callbacks; - } + public OptionsConsumer(OptionsCallbacks callbacks) { + mCallbacks = callbacks; + } - @Override - public void take(ReadableSensorOptions bundle) { - mCallbacks.previewOptions(bundle); - mSettings = bundle; - } + @Override + public void take(ReadableSensorOptions bundle) { + mCallbacks.previewOptions(bundle); + mSettings = bundle; + } - public ReadableSensorOptions getOptions() { - return mSettings; - } + public ReadableSensorOptions getOptions() { + return mSettings; } + } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java index 67fdd893..3270d36d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityNavigator.java @@ -19,16 +19,17 @@ import android.content.Intent; /** - * Encapsulates decisions about which specific activity classes implement which features, - * allowing different builds to use different specific activities. + * Encapsulates decisions about which specific activity classes implement which features, allowing + * different builds to use different specific activities. */ public interface ActivityNavigator { - ActivityNavigator STUB = new ActivityNavigator() { + ActivityNavigator STUB = + new ActivityNavigator() { @Override public Intent launchIntentForPanesActivity(Context context, String experimentId) { - return null; + return null; } - }; + }; - Intent launchIntentForPanesActivity(Context context, String experimentId); + Intent launchIntentForPanesActivity(Context context, String experimentId); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityWithNavigationView.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityWithNavigationView.java index 4bafb18b..e0e009c5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityWithNavigationView.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ActivityWithNavigationView.java @@ -24,5 +24,4 @@ * activity, and need the accounts provider to add the account switcher to the NavigationView. */ public abstract class ActivityWithNavigationView extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener { -} + implements NavigationView.OnNavigationItemSelectedListener {} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java index 0d56eed0..3a2c1ce2 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/AddNoteDialog.java @@ -38,12 +38,10 @@ import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.Button; -import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; - import com.google.android.apps.forscience.javalib.MaybeConsumer; import com.google.android.apps.forscience.javalib.MaybeConsumers; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; @@ -54,471 +52,472 @@ import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciPictureLabelValue; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTextLabelValue; import com.jakewharton.rxbinding2.widget.RxTextView; - -import java.io.File; -import java.util.UUID; - import io.reactivex.Single; import io.reactivex.disposables.CompositeDisposable; +import java.io.File; +import java.util.UUID; -/** - * Dialog for adding new notes. - */ +/** Dialog for adding new notes. */ public class AddNoteDialog extends DialogFragment { - public static final String TAG = "add_note_dialog"; - - private static final String KEY_SAVED_INPUT_TEXT = "savedInputText"; - private static final String KEY_SAVED_PICTURE_PATH = "savedPicturePath"; - private static final String KEY_SAVED_TIMESTAMP = "savedTimestamp"; - private static final String KEY_SAVED_RUN_ID = "savedRunId"; - private static final String KEY_SAVED_EXPERIMENT_ID = "savedExperimentId"; - private static final String KEY_HINT_TEXT_ID = "savedHintTextId"; - private static final String KEY_LABEL_TIME_TEXT = "savedLabelTimeText"; - private static final String KEY_SAVED_VALUE = "savedLabelValue"; - private static final String KEY_SAVED_TIME_TEXT_DESCRIPTION = "keySavedTimeTextDescription"; - private static final String KEY_SAVED_LABEL_UUID = "keySavedLabelUuid"; - - private String mUuid; - - public static abstract class AddNoteDialogListener { - /** - * Called with a label that's about to be added. Listener can adjust the label by, for - * example, changing the timestamp - */ - public void adjustLabelBeforeAdd(Label label) { - // do nothing; - } - - /** - * Called when a label is being added to the database. Return value is passed to data - * controller during the label add. - * - * @return A MaybeConsumer of labels. - */ - public MaybeConsumer

diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/DefaultVoice.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/DefaultVoice.java index ce83d09a..70e4809a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/DefaultVoice.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/DefaultVoice.java @@ -17,10 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.audiogen.voices; import com.google.android.apps.forscience.whistlepunk.audiogen.JsynUnitVoiceAdapter; -import com.google.android.apps.forscience.whistlepunk.audiogen.JsynUnitVoiceAdapterInterface; -import com.google.android.apps.forscience.whistlepunk.audiogen.voices.SimpleJsynUnitVoice; import com.jsyn.Synthesizer; -import com.jsyn.ports.UnitOutputPort; import com.softsynth.shared.time.TimeStamp; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/NotesVoice.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/NotesVoice.java index 2127ce16..20c7a54d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/NotesVoice.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/NotesVoice.java @@ -17,7 +17,6 @@ package com.google.android.apps.forscience.whistlepunk.audiogen.voices; import com.google.android.apps.forscience.whistlepunk.audiogen.JsynUnitVoiceAdapter; - import com.jsyn.Synthesizer; import com.softsynth.shared.time.TimeStamp; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/PitchGenerator.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/PitchGenerator.java index 90b416e7..465a37e5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/PitchGenerator.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/PitchGenerator.java @@ -16,9 +16,8 @@ package com.google.android.apps.forscience.whistlepunk.audiogen.voices; -import android.util.Log; - import com.google.common.primitives.Ints; + import java.util.ArrayList; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SimpleJsynUnitVoice.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SimpleJsynUnitVoice.java index cc54cec1..27a40261 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SimpleJsynUnitVoice.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SimpleJsynUnitVoice.java @@ -15,11 +15,9 @@ */ package com.google.android.apps.forscience.whistlepunk.audiogen.voices; -import java.io.*; -import com.jsyn.*; -import com.jsyn.unitgen.*; -import com.jsyn.data.*; -import com.jsyn.ports.*; + +import com.jsyn.ports.UnitInputPort; +import com.jsyn.ports.UnitOutputPort; import com.softsynth.shared.time.TimeStamp; /************** ** WARNING - this code automatically generated by Syntona. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SineEnvelope.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SineEnvelope.java index 34895973..4d5f88c4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SineEnvelope.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/audiogen/voices/SineEnvelope.java @@ -26,14 +26,12 @@ ** Syntona is available from: http://www.softsynth.com/syntona/ */ -import com.jsyn.ports.UnitOutputPort; -import com.jsyn.unitgen.UnitVoice; import com.jsyn.ports.UnitInputPort; +import com.jsyn.ports.UnitOutputPort; +import com.jsyn.unitgen.EnvelopeDAHDSR; +import com.jsyn.unitgen.PassThrough; import com.jsyn.unitgen.SineOscillator; import com.softsynth.shared.time.TimeStamp; -import com.jsyn.unitgen.PassThrough; -import com.jsyn.unitgen.EnvelopeDAHDSR; -import com.jsyn.unitgen.Circuit; public class SineEnvelope extends SimpleJsynUnitVoiceBase { // Declare units and ports. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensor.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensor.java index 40261498..8e72ae74 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensor.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensor.java @@ -18,9 +18,9 @@ import androidx.annotation.NonNull; import com.google.android.apps.forscience.whistlepunk.AppSingleton; -import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.SensorAppearance; import com.google.android.apps.forscience.whistlepunk.SensorAppearanceProvider; +import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.metadata.ExperimentSensors; import com.google.android.apps.forscience.whistlepunk.metadata.ExternalSensorSpec; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java index 0c913619..2b0fc2c8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ConnectableSensorRegistry.java @@ -27,9 +27,9 @@ import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.DataController; -import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.LoggingConsumer; import com.google.android.apps.forscience.whistlepunk.SensorAppearanceProvider; +import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.SensorRegistry; import com.google.android.apps.forscience.whistlepunk.analytics.TrackerConstants; import com.google.android.apps.forscience.whistlepunk.analytics.UsageTracker; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java index 401cd53f..8a2f006c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceOptionsDialog.java @@ -17,10 +17,10 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; import android.app.Dialog; -import androidx.fragment.app.DialogFragment; import android.app.PendingIntent; import android.content.DialogInterface; import android.os.Bundle; +import androidx.fragment.app.DialogFragment; import androidx.appcompat.app.AlertDialog; import android.util.Log; import android.view.LayoutInflater; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentListItem.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentListItem.java index e1de70bd..c92bb3de 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentListItem.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentListItem.java @@ -17,15 +17,12 @@ import android.content.Context; import android.graphics.drawable.Drawable; -import androidx.annotation.Nullable; import com.bignerdranch.expandablerecyclerview.Model.ParentListItem; import com.google.android.apps.forscience.whistlepunk.SensorAppearanceProvider; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.InputDeviceSpec; import com.google.common.base.Preconditions; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentViewHolder.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentViewHolder.java index febac6a4..251c615d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentViewHolder.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/DeviceParentViewHolder.java @@ -19,12 +19,13 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; +import androidx.appcompat.widget.PopupMenu; +import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.PopupMenu; import android.widget.TextView; import com.google.android.apps.forscience.whistlepunk.AccessibilityUtils; @@ -113,7 +114,8 @@ private void openDeviceMenu(final DeviceParentListItem listItem) { return; } final Context context = mMenuButton.getContext(); - mPopupMenu = new PopupMenu(context, mMenuButton); + mPopupMenu = new PopupMenu(context, mMenuButton, Gravity.NO_GRAVITY, + R.attr.actionOverflowMenuStyle, 0); mPopupMenu.getMenuInflater().inflate(R.menu.menu_device_recycler_item, mPopupMenu.getMenu()); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java index a6848ebf..0e3c0681 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ExpandableServiceAdapter.java @@ -15,9 +15,9 @@ */ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import androidx.fragment.app.FragmentManager; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentManager; import android.util.ArrayMap; import android.view.LayoutInflater; import android.view.View; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java index 09819834..89082a72 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesActivity.java @@ -17,9 +17,6 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; import android.app.Activity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; @@ -27,6 +24,9 @@ import android.content.IntentFilter; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import androidx.appcompat.app.AppCompatActivity; import android.view.Menu; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java index 645c5dc4..64c40a86 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ManageDevicesRecyclerFragment.java @@ -16,9 +16,9 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import androidx.fragment.app.Fragment; import android.os.Bundle; import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java index 7620a834..2d75bd70 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/NativeBleDiscoverer.java @@ -16,16 +16,16 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import androidx.fragment.app.FragmentManager; import android.content.Context; import android.graphics.drawable.Drawable; import androidx.annotation.VisibleForTesting; +import androidx.fragment.app.FragmentManager; import com.google.android.apps.forscience.ble.DeviceDiscoverer; import com.google.android.apps.forscience.javalib.FailureListener; import com.google.android.apps.forscience.whistlepunk.PermissionUtils; -import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.R; +import com.google.android.apps.forscience.whistlepunk.SensorProvider; import com.google.android.apps.forscience.whistlepunk.api.scalarinput.InputDeviceSpec; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorSpec; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java index 62e45128..c058c4af 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ScanDisabledDialogFragment.java @@ -16,15 +16,10 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import android.Manifest; -import androidx.fragment.app.DialogFragment; import android.bluetooth.BluetoothAdapter; -import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.os.Bundle; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; +import androidx.fragment.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java index 071e6b86..57d71fdc 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorDiscoverer.java @@ -16,9 +16,9 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; -import androidx.fragment.app.FragmentManager; import android.content.Context; import android.graphics.drawable.Drawable; +import androidx.fragment.app.FragmentManager; import com.google.android.apps.forscience.javalib.FailureListener; import com.google.android.apps.forscience.whistlepunk.SensorProvider; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java index 445f399a..dc8459c4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/SensorTypeProvider.java @@ -26,7 +26,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.Arrays; public class SensorTypeProvider { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java index ac0b7f5b..6974fad8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/devicemanager/ServiceParentViewHolder.java @@ -16,11 +16,11 @@ package com.google.android.apps.forscience.whistlepunk.devicemanager; import android.annotation.TargetApi; -import androidx.fragment.app.FragmentManager; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentManager; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java index 1632bc65..4aec56d4 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/Label.java @@ -110,8 +110,11 @@ private Label(long creationTimeMs, String labelId, int valueType) { protected Label(Parcel in) { int serializedSize = in.readInt(); - byte[] serialized = new byte[serializedSize]; - in.readByteArray(serialized); + // readByteArray(byte[]) appears to be broken in robolectric currently + // createByteArray() is an alternative + // byte[] serialized = new byte[serializedSize]; + // in.readByteArray(serialized); + byte[] serialized = in.createByteArray(); try { mLabel = GoosciLabel.Label.parseFrom(serialized); } catch (InvalidProtocolBufferNanoException ex) { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValue.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValue.java index 8deb3c7c..263f9b12 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValue.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/LabelValue.java @@ -17,9 +17,6 @@ import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabelValue; -import java.util.HashMap; -import java.util.Map; - /** * Interprets a label */ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ScienceJournalDocsProvider.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ScienceJournalDocsProvider.java index d8e34b63..48f8639b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ScienceJournalDocsProvider.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/ScienceJournalDocsProvider.java @@ -16,29 +16,23 @@ package com.google.android.apps.forscience.whistlepunk.filemetadata; -import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.database.MatrixCursor; -import android.graphics.Point; import android.os.CancellationSignal; -import android.os.Handler; import android.os.ParcelFileDescriptor; import android.provider.DocumentsContract.Document; import android.provider.DocumentsContract.Root; import android.provider.DocumentsProvider; -import androidx.core.content.FileProvider; import android.text.TextUtils; import android.util.Log; import android.webkit.MimeTypeMap; import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.R; -import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciExperiment; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciUserMetadata; import java.io.File; import java.io.FileNotFoundException; -import java.io.IOException; import java.util.List; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTrigger.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTrigger.java index 091e65af..fc31592e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTrigger.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/SensorTrigger.java @@ -17,18 +17,18 @@ package com.google.android.apps.forscience.whistlepunk.filemetadata; -import com.google.android.apps.forscience.whistlepunk.ProtoUtils; -import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTrigger; -import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation.TriggerInformation; - -import com.google.common.primitives.Ints; -import com.google.protobuf.nano.InvalidProtocolBufferNanoException; - import android.os.Bundle; import androidx.annotation.VisibleForTesting; import android.text.TextUtils; import android.util.Log; +import com.google.android.apps.forscience.whistlepunk.ProtoUtils; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTrigger; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation + .TriggerInformation; +import com.google.common.primitives.Ints; +import com.google.protobuf.nano.InvalidProtocolBufferNanoException; + import java.util.Objects; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TextLabelValue.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TextLabelValue.java index 44091513..e02d5776 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TextLabelValue.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TextLabelValue.java @@ -15,9 +15,7 @@ */ package com.google.android.apps.forscience.whistlepunk.filemetadata; -import android.content.Context; - -import com.google.android.apps.forscience.whistlepunk.metadata.*; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabelValue; import com.google.common.annotations.VisibleForTesting; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStats.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStats.java index 3ac8cb29..93ed96ab 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStats.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/filemetadata/TrialStats.java @@ -18,10 +18,8 @@ import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java index 9c1ccbfe..8f1bd17e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/intro/AgeVerifier.java @@ -29,7 +29,6 @@ import com.google.android.apps.forscience.whistlepunk.MainActivity; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; -import com.google.android.apps.forscience.whistlepunk.performance.PerfTrackerProvider; import java.util.Calendar; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerActivity.java index 4bb42465..91c562ac 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerActivity.java @@ -17,7 +17,6 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; -import android.text.TextUtils; import com.google.android.apps.forscience.whistlepunk.R; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerFragment.java index 57a337a6..172a6971 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/EditTriggerFragment.java @@ -15,7 +15,6 @@ */ package com.google.android.apps.forscience.whistlepunk.metadata; -import android.Manifest; import android.content.Intent; import android.os.Bundle; import androidx.annotation.NonNull; @@ -49,7 +48,6 @@ import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.DataController; import com.google.android.apps.forscience.whistlepunk.LoggingConsumer; -import com.google.android.apps.forscience.whistlepunk.PermissionUtils; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.RecordFragment; import com.google.android.apps.forscience.whistlepunk.SensorAppearance; @@ -58,9 +56,9 @@ import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation + .TriggerInformation; import com.google.protobuf.nano.InvalidProtocolBufferNanoException; -import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation.TriggerInformation; - import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/ExperimentRun.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/ExperimentRun.java index 1d21d8d9..d976dafb 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/ExperimentRun.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/ExperimentRun.java @@ -16,12 +16,9 @@ package com.google.android.apps.forscience.whistlepunk.metadata; -import android.content.Context; - import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; - import java.util.List; @Deprecated diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/Project.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/Project.java index f453c9ec..e2ffd7b0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/Project.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/Project.java @@ -16,10 +16,8 @@ package com.google.android.apps.forscience.whistlepunk.metadata; -import android.content.Context; import android.text.TextUtils; -import com.google.android.apps.forscience.whistlepunk.R; import com.google.common.annotations.VisibleForTesting; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/RunStats.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/RunStats.java index 88fc8596..22bde8d5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/RunStats.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/RunStats.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.metadata; -import android.text.TextUtils; - import com.google.android.apps.forscience.whistlepunk.StatsAccumulator; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; import com.google.android.apps.forscience.whistlepunk.sensorapi.ZoomRecorder; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelper.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelper.java index ef4757b6..db51a667 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelper.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerHelper.java @@ -18,22 +18,20 @@ import android.app.Activity; import android.content.Context; import android.content.res.Resources; -import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.SoundPool; import android.os.SystemClock; import android.os.Vibrator; -import android.support.v4.graphics.drawable.DrawableCompat; import android.text.TextUtils; -import android.widget.TextView; +import com.google.android.apps.forscience.whistlepunk.AndroidVersionUtils; import com.google.android.apps.forscience.whistlepunk.AppSingleton; -import com.google.android.apps.forscience.whistlepunk.ColorUtils; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.SensorAppearance; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; -import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation.TriggerInformation; +import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciSensorTriggerInformation + .TriggerInformation; import java.util.ArrayList; import java.util.Arrays; @@ -72,7 +70,7 @@ public void doAudioAlert(Context context) { private SoundPool getSoundPool(Context context) { if (sSoundPool == null) { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + if (AndroidVersionUtils.isApiLevelAtLeastLollipop()) { sSoundPool = new SoundPool.Builder().build(); } else { sSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListActivity.java index 70af08ac..9ecf7050 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListActivity.java @@ -18,11 +18,8 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; -import android.text.TextUtils; import com.google.android.apps.forscience.whistlepunk.R; -import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; -import com.google.android.apps.forscience.whistlepunk.analytics.TrackerConstants; import java.util.ArrayList; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListFragment.java index 32551962..5f16f65f 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/metadata/TriggerListFragment.java @@ -25,9 +25,11 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; import androidx.appcompat.widget.SwitchCompat; import android.text.TextUtils; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -36,7 +38,6 @@ import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.ImageButton; -import android.widget.PopupMenu; import android.widget.TextView; import com.google.android.apps.forscience.javalib.Success; @@ -385,7 +386,8 @@ public void onBindViewHolder(final ViewHolder holder, final int position) { @Override public void onClick(View v) { Context context = holder.menuButton.getContext(); - PopupMenu popup = new PopupMenu(context, holder.menuButton); + PopupMenu popup = new PopupMenu(context, holder.menuButton, Gravity.NO_GRAVITY, + R.attr.actionOverflowMenuStyle, 0); popup.getMenuInflater().inflate(R.menu.menu_sensor_trigger, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/ContextModule.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/ContextModule.java index 6d449c1a..af573264 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/ContextModule.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/ContextModule.java @@ -19,8 +19,6 @@ import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; -import javax.inject.Singleton; - import dagger.Module; import dagger.Provides; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/NativeBleDiscovererModule.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/NativeBleDiscovererModule.java index f1e66101..4e8b236b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/NativeBleDiscovererModule.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/modules/NativeBleDiscovererModule.java @@ -18,8 +18,8 @@ import android.content.Context; -import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorDiscoverer; import com.google.android.apps.forscience.whistlepunk.devicemanager.NativeBleDiscoverer; +import com.google.android.apps.forscience.whistlepunk.devicemanager.SensorDiscoverer; import com.google.android.apps.forscience.whistlepunk.metadata.BleSensorSpec; import dagger.Module; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java index 829dbe70..f5444f75 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/ExperimentListFragment.java @@ -16,7 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.project; -import androidx.fragment.app.Fragment; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -25,6 +24,7 @@ import android.preference.PreferenceManager; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; +import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.GridLayoutManager; import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; @@ -43,6 +43,7 @@ import com.google.android.apps.forscience.javalib.Success; import com.google.android.apps.forscience.whistlepunk.AccessibilityUtils; +import com.google.android.apps.forscience.whistlepunk.AndroidVersionUtils; import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.DataController; @@ -570,12 +571,13 @@ private void showArchivedSnackbar(GoosciUserMetadata.ExperimentOverview overview } private void setCardColor(ViewHolder holder, int color) { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { + if (AndroidVersionUtils.isApiLevelAtLeastLollipop()) { //holder.cardView.setBackgroundColor(color); } else { // Setting the color of the CardView in KitKat has a side-effect of making the // drop shadow disappear around the card. Instead, we set the background color // of the content of the card, which looks almost as good. And has UX approval. + // See b/70328251 holder.cardView.findViewById(R.id.content).setBackgroundColor(color); } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java index 94bc71c1..e9f0f5b6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsFragment.java @@ -16,7 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.project.experiment; -import androidx.fragment.app.Fragment; import android.app.TaskStackBuilder; import android.content.BroadcastReceiver; import android.content.Context; @@ -25,15 +24,18 @@ import android.os.Bundle; import androidx.annotation.NonNull; import android.support.design.widget.Snackbar; +import androidx.fragment.app.Fragment; import androidx.core.app.NavUtils; import androidx.core.content.ContextCompat; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; import androidx.appcompat.widget.Toolbar; import android.text.TextUtils; import android.util.Log; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -43,7 +45,6 @@ import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.PopupMenu; import android.widget.ProgressBar; import android.widget.TextView; @@ -55,6 +56,7 @@ import com.google.android.apps.forscience.whistlepunk.ColorUtils; import com.google.android.apps.forscience.whistlepunk.DataController; import com.google.android.apps.forscience.whistlepunk.DeletedLabel; +import com.google.android.apps.forscience.whistlepunk.DevOptionsFragment; import com.google.android.apps.forscience.whistlepunk.LoggingConsumer; import com.google.android.apps.forscience.whistlepunk.MainActivity; import com.google.android.apps.forscience.whistlepunk.NoteViewHolder; @@ -313,8 +315,15 @@ public void reloadAndScrollToBottom() { } public void scrollToBottom() { + // Doing this here lets the initial layout NOT stack from end, and keeps the view + // at the top of the list. + ((LinearLayoutManager) mDetails.getLayoutManager()).setStackFromEnd(true); if (mDetails != null && mAdapter != null && mAdapter.getItemCount() > 0) { - mDetails.smoothScrollToPosition(mAdapter.getItemCount() - 1); + if (DevOptionsFragment.isSmoothScrollingToBottomEnabled(getContext())) { + mDetails.smoothScrollToPosition(mAdapter.getItemCount() - 1); + } else { + mDetails.scrollToPosition(mAdapter.getItemCount() - 1); + } } } @@ -723,7 +732,8 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { noteViewHolder.menuButton.setOnClickListener(view -> { Context context = noteViewHolder.menuButton.getContext(); - PopupMenu popup = new PopupMenu(context, noteViewHolder.menuButton); + PopupMenu popup = new PopupMenu(context, noteViewHolder.menuButton, Gravity.NO_GRAVITY, + R.attr.actionOverflowMenuStyle, 0); setupNoteMenu(item, popup); popup.show(); }); @@ -758,7 +768,8 @@ private void setupTrialHeader(DetailsViewHolder holder, final ExperimentDetailIt holder.menuButton.setOnClickListener(view -> { Context context = holder.menuButton.getContext(); - PopupMenu popup = new PopupMenu(context, holder.menuButton); + PopupMenu popup = new PopupMenu(context, holder.menuButton, Gravity.NO_GRAVITY, + R.attr.actionOverflowMenuStyle, 0); setupTrialMenu(item, popup); popup.show(); }); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java index 8279dbab..a0260920 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/NameExperimentDialog.java @@ -16,20 +16,19 @@ package com.google.android.apps.forscience.whistlepunk.project.experiment; -import androidx.appcompat.app.AlertDialog; import android.app.Dialog; -import androidx.fragment.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.Nullable; import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputLayout; +import androidx.fragment.app.DialogFragment; +import androidx.appcompat.app.AlertDialog; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.ViewGroup; import android.widget.Button; -import android.widget.EditText; import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.DataController; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentActivity.java index 51a83150..83b8d59a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentActivity.java @@ -16,7 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.project.experiment; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentFragment.java index 28f71857..1a1a7c82 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/UpdateExperimentFragment.java @@ -26,9 +26,7 @@ import androidx.fragment.app.Fragment; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import android.text.Editable; import android.text.TextUtils; -import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/CoordinatedSeekbarViewGroup.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/CoordinatedSeekbarViewGroup.java index 235e7788..1c44f625 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/CoordinatedSeekbarViewGroup.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/CoordinatedSeekbarViewGroup.java @@ -18,12 +18,9 @@ import android.annotation.TargetApi; import android.content.Context; -import android.content.res.Configuration; import android.os.Build; import android.util.AttributeSet; -import android.view.LayoutInflater; import android.view.MotionEvent; -import android.view.View; import android.widget.RelativeLayout; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java index df8e6cbd..16173400 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/DeleteMetadataItemDialog.java @@ -16,10 +16,10 @@ package com.google.android.apps.forscience.whistlepunk.review; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; +import androidx.fragment.app.DialogFragment; +import androidx.appcompat.app.AlertDialog; import com.google.android.apps.forscience.whistlepunk.R; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java index 6a7206e6..961888db 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditLabelTimeDialog.java @@ -16,9 +16,8 @@ package com.google.android.apps.forscience.whistlepunk.review; -import androidx.fragment.app.DialogFragment; import android.os.Bundle; -import android.util.Log; +import androidx.fragment.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -26,12 +25,9 @@ import android.widget.TextView; import com.google.android.apps.forscience.whistlepunk.AccessibilityUtils; -import com.google.android.apps.forscience.whistlepunk.ProtoUtils; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.RunReviewOverlay; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; -import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciLabelValue; -import com.google.protobuf.nano.InvalidProtocolBufferNanoException; /** * A dialogfragment for editing a note's timestamp. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java index 9a173c3d..0c558aa1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/EditTimestampDialog.java @@ -16,11 +16,11 @@ package com.google.android.apps.forscience.whistlepunk.review; -import androidx.appcompat.app.AlertDialog; import android.app.Dialog; -import androidx.fragment.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; +import androidx.fragment.app.DialogFragment; +import androidx.appcompat.app.AlertDialog; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java index ff346933..f1769142 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/ExportOptionsDialogFragment.java @@ -16,13 +16,11 @@ package com.google.android.apps.forscience.whistlepunk.review; -import androidx.fragment.app.Fragment; import android.content.Intent; import android.os.Bundle; import androidx.annotation.Nullable; import android.support.design.widget.BottomSheetDialogFragment; import android.support.design.widget.Snackbar; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java index ee3301ee..a0ac9725 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/PinnedNoteAdapter.java @@ -17,17 +17,17 @@ package com.google.android.apps.forscience.whistlepunk.review; import android.content.Context; +import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; import android.text.InputType; import android.text.TextUtils; import android.text.format.DateUtils; +import android.view.Gravity; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.EditText; -import android.widget.PopupMenu; import com.google.android.apps.forscience.whistlepunk.ElapsedTimeFormatter; import com.google.android.apps.forscience.whistlepunk.ExternalAxisController; @@ -171,7 +171,8 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (mEditListener != null) { noteHolder.menuButton.setOnClickListener(v -> { Context context = noteHolder.menuButton.getContext(); - mPopupMenu = new PopupMenu(context, noteHolder.menuButton); + mPopupMenu = new PopupMenu(context, noteHolder.menuButton, Gravity.NO_GRAVITY, + R.attr.actionOverflowMenuStyle, 0); mPopupMenu.getMenuInflater().inflate(R.menu.menu_note, mPopupMenu.getMenu()); if (!label.canEditTimestamp()) { mPopupMenu.getMenu().findItem(R.id.btn_edit_note_time).setVisible(false); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java index 59c124e1..67fb9c52 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewActivity.java @@ -16,20 +16,16 @@ package com.google.android.apps.forscience.whistlepunk.review; -import androidx.fragment.app.Fragment; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import androidx.fragment.app.Fragment; import com.google.android.apps.forscience.whistlepunk.PermissionUtils; -import com.google.android.apps.forscience.whistlepunk.PictureUtils; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.RecorderService; import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; -import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; -import com.google.android.apps.forscience.whistlepunk.performance.PerfTrackerProvider; import com.google.android.apps.forscience.whistlepunk.project.MetadataActivity; -import com.google.android.apps.forscience.whistlepunk.project.experiment.ExperimentDetailsFragment; public class RunReviewActivity extends MetadataActivity { public static final String EXTRA_FROM_RECORD = "from_record_activity"; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java index e67b826a..ec1149bf 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/RunReviewFragment.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.review; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -27,6 +25,8 @@ import android.support.design.widget.AppBarLayout; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; import androidx.core.app.NavUtils; import androidx.core.util.Pair; import androidx.appcompat.app.AppCompatActivity; @@ -52,6 +52,7 @@ import com.google.android.apps.forscience.javalib.Success; import com.google.android.apps.forscience.whistlepunk.AccessibilityUtils; import com.google.android.apps.forscience.whistlepunk.AddNoteDialog; +import com.google.android.apps.forscience.whistlepunk.AndroidVersionUtils; import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.Appearances; import com.google.android.apps.forscience.whistlepunk.AudioSettingsDialog; @@ -1416,7 +1417,7 @@ private void setUiForActionMode(View rootView, boolean showActionMode) { // by clicking in the grey overlay to simulate a normal dialog. View notesOverlay = rootView.findViewById(R.id.pinned_note_overlay); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + if (!AndroidVersionUtils.isApiLevelAtLeastLollipop()) { // On Kitkat devices, the pinned note list is shown over the AppBarLayout // instead of under it. We can manually adjust the layout params to show it // in the right location and at the right size to cover just the pinned note diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java index 7934e3d7..b1860da5 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/LabelDetailsFragment.java @@ -16,9 +16,9 @@ package com.google.android.apps.forscience.whistlepunk.review.labels; -import androidx.fragment.app.Fragment; import android.content.Context; import android.os.Bundle; +import androidx.fragment.app.Fragment; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import android.text.InputType; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TextLabelDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TextLabelDetailsFragment.java index efe2ed7d..d7ce29b0 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TextLabelDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TextLabelDetailsFragment.java @@ -17,6 +17,8 @@ package com.google.android.apps.forscience.whistlepunk.review.labels; import android.os.Bundle; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import android.text.TextUtils; @@ -32,12 +34,14 @@ import com.google.android.apps.forscience.whistlepunk.filemetadata.Experiment; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTextLabelValue; +import com.jakewharton.rxbinding2.widget.RxTextView; /** * Details view controller for TextLabel */ public class TextLabelDetailsFragment extends LabelDetailsFragment { - private EditText mNoteText; + private TextInputLayout mNoteTextLayout; + private TextInputEditText mNoteText; public static TextLabelDetailsFragment newInstance(String experimentId, String trialId, Label originalLabel) { @@ -58,14 +62,19 @@ public TextLabelDetailsFragment() { public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bundle savedInstanceState) { setHasOptionsMenu(true); - mNoteText = (EditText) inflater.inflate(R.layout.text_label_details_fragment, + mNoteTextLayout = (TextInputLayout) inflater.inflate(R.layout.text_label_details_fragment, container, false); + mNoteText = mNoteTextLayout.findViewById(R.id.note_text); mNoteText.setText(mOriginalLabel.getTextLabelValue().text); mNoteText.post(() -> mNoteText.setSelection(mNoteText.getText().toString().length())); + RxTextView.afterTextChangeEvents(mNoteText).subscribe(events -> { + verifyInput(mNoteText.getText().toString()); + }); + // TODO: Transition - return mNoteText; + return mNoteTextLayout; } @Override @@ -84,12 +93,11 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_save) { mExperiment.firstElement().subscribe(experiment -> { - String newText = mNoteText.getText().toString(); - if (!verifyInput(newText)) { + if (mNoteTextLayout.isErrorEnabled()) { // No-op. Shows an error, doesn't exit. return; } - saveTextChanges(newText, experiment); + saveTextChanges(mNoteText.getText().toString(), experiment); returnToParent(false, null); }); return true; @@ -106,10 +114,12 @@ private void saveTextChanges(String newText, Experiment experiment) { private boolean verifyInput(String text) { if (TextUtils.isEmpty(text)) { - mNoteText.setError(getActivity().getResources().getString( + mNoteTextLayout.setError(getActivity().getResources().getString( R.string.empty_text_note_error)); + mNoteTextLayout.setErrorEnabled(true); return false; } + mNoteTextLayout.setErrorEnabled(false); return true; } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TriggerLabelDetailsFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TriggerLabelDetailsFragment.java index 59795971..70b0b71b 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TriggerLabelDetailsFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/review/labels/TriggerLabelDetailsFragment.java @@ -21,7 +21,6 @@ import android.os.Bundle; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartController.java index 74bddeb5..4d7abbad 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartController.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartController.java @@ -26,6 +26,7 @@ import android.widget.ProgressBar; import com.google.android.apps.forscience.javalib.FailureListener; +import com.google.android.apps.forscience.whistlepunk.AndroidVersionUtils; import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.CurrentTimeClock; import com.google.android.apps.forscience.whistlepunk.DataController; @@ -38,7 +39,6 @@ import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; -import com.google.android.apps.forscience.whistlepunk.metadata.ExperimentRun; import com.google.android.apps.forscience.whistlepunk.review.ZoomPresenter; import com.google.android.apps.forscience.whistlepunk.sensorapi.StreamStat; import com.google.android.apps.forscience.whistlepunk.sensordb.ScalarReadingList; @@ -473,7 +473,7 @@ public void setShowProgress(boolean showProgress) { mChartView.setVisibility(showProgress ? View.GONE: View.VISIBLE); } if (mProgressView != null) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (AndroidVersionUtils.isApiLevelAtLeastLollipop()) { mProgressView.setIndeterminateTintList(ColorStateList.valueOf( mChartOptions.getLineColor())); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartOptions.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartOptions.java index dd07c900..6062c57c 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartOptions.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/scalarchart/ChartOptions.java @@ -22,7 +22,6 @@ import com.google.android.apps.forscience.whistlepunk.AxisNumberFormat; import com.google.android.apps.forscience.whistlepunk.R; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; -import com.google.android.apps.forscience.whistlepunk.metadata.ApplicationLabel; import com.google.android.apps.forscience.whistlepunk.wireapi.RecordingMetadata; import java.text.NumberFormat; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/AbstractSensorRecorder.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/AbstractSensorRecorder.java index cd9e5512..9fbe6d6d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/AbstractSensorRecorder.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/AbstractSensorRecorder.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; -import com.google.android.apps.forscience.javalib.MaybeConsumer; -import com.google.android.apps.forscience.javalib.Success; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/BlankReadableSensorOptions.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/BlankReadableSensorOptions.java index c7dd5721..ffc2a77d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/BlankReadableSensorOptions.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/BlankReadableSensorOptions.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; -import com.google.android.apps.forscience.whistlepunk.sensorapi.ReadableSensorOptions; - import java.util.Collection; import java.util.Collections; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/DelegatingSensorRecorder.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/DelegatingSensorRecorder.java index 25275fd3..01b0d069 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/DelegatingSensorRecorder.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/DelegatingSensorRecorder.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; -import com.google.android.apps.forscience.javalib.MaybeConsumer; -import com.google.android.apps.forscience.javalib.Success; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.common.base.Preconditions; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/FrequencyOptionsPresenter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/FrequencyOptionsPresenter.java index 12bf456a..f4e45840 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/FrequencyOptionsPresenter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/FrequencyOptionsPresenter.java @@ -18,7 +18,6 @@ import android.annotation.SuppressLint; import android.content.Context; -import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/NewOptionsStorage.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/NewOptionsStorage.java index 836afe44..e9b7734a 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/NewOptionsStorage.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/NewOptionsStorage.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; -import android.content.Context; -import android.os.Bundle; import android.support.design.widget.Snackbar; import android.util.Log; import android.view.View; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/OptionsListener.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/OptionsListener.java index e54e7f89..3dad6897 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/OptionsListener.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/OptionsListener.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; -import android.os.Bundle; - /** * Interface for an object that can receive new options */ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensor.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensor.java index d9f75826..38cd89b8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensor.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/ScalarSensor.java @@ -19,7 +19,6 @@ import android.annotation.SuppressLint; import android.content.Context; import android.hardware.SensorManager; -import android.os.Bundle; import androidx.annotation.NonNull; import android.util.Log; import android.view.LayoutInflater; @@ -39,10 +38,10 @@ import com.google.android.apps.forscience.whistlepunk.audiogen.SimpleJsynAudioGenerator; import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorConfig; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; +import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; import com.google.android.apps.forscience.whistlepunk.filemetadata.TrialStats; import com.google.android.apps.forscience.whistlepunk.metadata.nano.GoosciTrial; -import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; import com.google.android.apps.forscience.whistlepunk.scalarchart.ChartController; import com.google.android.apps.forscience.whistlepunk.scalarchart.ChartData; import com.google.android.apps.forscience.whistlepunk.scalarchart.ChartOptions; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorEnvironment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorEnvironment.java index 41aea766..4cd2cfb2 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorEnvironment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorEnvironment.java @@ -17,6 +17,7 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; import com.google.android.apps.forscience.ble.BleClient; +import com.google.android.apps.forscience.whistlepunk.AudioSource; import com.google.android.apps.forscience.whistlepunk.Clock; import com.google.android.apps.forscience.whistlepunk.RecordingDataController; import com.google.android.apps.forscience.whistlepunk.SensorHistoryStorage; @@ -41,5 +42,10 @@ public interface SensorEnvironment { */ Clock getDefaultClock(); + /** + * @return the common audio source that can be used by multiple sensors simultaneously. + */ + AudioSource getAudioSource(); + SensorHistoryStorage getSensorHistoryStorage(); } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorPresenter.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorPresenter.java index 027848b5..30e2531d 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorPresenter.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorPresenter.java @@ -17,13 +17,10 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; import android.content.Context; -import android.os.Bundle; import android.view.View; -import android.view.ViewGroup; import com.google.android.apps.forscience.whistlepunk.DataController; import com.google.android.apps.forscience.whistlepunk.ExternalAxisController; -import com.google.android.apps.forscience.whistlepunk.data.nano.GoosciSensorLayout; import com.google.android.apps.forscience.whistlepunk.filemetadata.Label; import com.google.android.apps.forscience.whistlepunk.filemetadata.SensorTrigger; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorRecorder.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorRecorder.java index 1f8a4342..61566d88 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorRecorder.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/SensorRecorder.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; -import com.google.android.apps.forscience.javalib.MaybeConsumer; -import com.google.android.apps.forscience.javalib.Success; import com.google.android.apps.forscience.whistlepunk.filemetadata.Trial; /** diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/WriteableSensorOptions.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/WriteableSensorOptions.java index cdd230d0..8d6d5a8e 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/WriteableSensorOptions.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensorapi/WriteableSensorOptions.java @@ -16,8 +16,6 @@ package com.google.android.apps.forscience.whistlepunk.sensorapi; -import android.os.Bundle; - /** * Writeable interface for sensor options. */ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java index 761438e6..e64476a1 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensordb/SensorDatabaseImpl.java @@ -29,7 +29,6 @@ import com.google.common.base.Joiner; import com.google.common.collect.BoundType; import com.google.common.collect.DiscreteDomain; -import com.google.common.collect.Lists; import com.google.common.collect.Range; import java.util.ArrayList; diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreview.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreview.java index 61a5b308..cb1a54f8 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreview.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/CameraPreview.java @@ -17,6 +17,10 @@ /* Custom SurfaceView that receives Camera preview frames and displays them. */ package com.google.android.apps.forscience.whistlepunk.sensors; +import static android.support.media.ExifInterface.ORIENTATION_NORMAL; +import static android.support.media.ExifInterface.ORIENTATION_ROTATE_90; +import static android.support.media.ExifInterface.ORIENTATION_UNDEFINED; + import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -48,9 +52,6 @@ import io.reactivex.Maybe; -import static android.support.media.ExifInterface.ORIENTATION_NORMAL; -import static android.support.media.ExifInterface.ORIENTATION_UNDEFINED; - public class CameraPreview extends SurfaceView { private static final String TAG = "CameraPreview"; @@ -366,6 +367,17 @@ private void takePicture(String experimentId, String uuid, boolean chopInHalf, onSuccess.success(FileMetadataManager.getRelativePathInExperiment(experimentId, photoFile)); startPreview(); + // If the original, uncropped photo was rotated in EXIF, we have to re-rotate it + // by getting an ExifInterface to the new JPEG and writing the rotation + // EXIF tag. We can't write this to the uncompressed bytes earlier on, + // unfortunately. + if (getOrientation(data) == ExifInterface.ORIENTATION_ROTATE_90) { + String path = photoFile.getPath(); + ExifInterface exif = new ExifInterface(path); + exif.setAttribute(ExifInterface.TAG_ORIENTATION, + Integer.toString(ExifInterface.ORIENTATION_ROTATE_90)); + exif.saveAttributes(); + } // NPE occurs when data == null (unclear what causes that case) } catch (IOException|NullPointerException e) { // Delete the file if we failed to write to it @@ -388,28 +400,43 @@ private byte[] getRightBytes(byte[] data, boolean chopInHalf) { } int orientation = getOrientation(data); - if (orientation != ORIENTATION_NORMAL && orientation != ORIENTATION_UNDEFINED) { - // don't try to chop in half if the EXIF is rotated. - // We need to figure out how to fix this further (see b/67335604) - if (Log.isLoggable(TAG, Log.WARN)) { - Log.w(TAG, "Not chopping photo in orientation: " + orientation); - } + switch (orientation) { + case (ORIENTATION_ROTATE_90): + // Chop off the right half. + try { + Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); + Bitmap halfBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth() / 2, + bitmap.getHeight()); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + halfBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); + return stream.toByteArray(); + } catch (Throwable t) { + if (Log.isLoggable(TAG, Log.ERROR)) { + Log.e(TAG, "exception when chopping image, storing in full size", t); + } + return data; + } - return data; - } + case (ORIENTATION_NORMAL): // Intentional Fallthrough. + case (ORIENTATION_UNDEFINED): + // Chop off the bottom half. + try { + Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); + Bitmap halfBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), + bitmap.getHeight() / 2); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + halfBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); + return stream.toByteArray(); + } catch (Throwable t) { + if (Log.isLoggable(TAG, Log.ERROR)) { + Log.e(TAG, "exception when chopping image, storing in full size", t); + } + return data; + } - try { - Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); - Bitmap halfBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), - bitmap.getHeight() / 2); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - halfBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); - return stream.toByteArray(); - } catch (Throwable t) { - if (Log.isLoggable(TAG, Log.ERROR)) { - Log.e(TAG, "exception when chopping image, storing in full size", t); - } - return data; + default: + // If rotated in EXIF, but not 90 degrees, don't crop. + return data; } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/DecibelSensor.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/DecibelSensor.java index 9548e97b..85e28e44 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/DecibelSensor.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/DecibelSensor.java @@ -17,12 +17,11 @@ package com.google.android.apps.forscience.whistlepunk.sensors; import android.content.Context; -import android.media.AudioFormat; -import android.media.AudioRecord; -import android.media.MediaRecorder; -import android.media.audiofx.NoiseSuppressor; +import com.google.android.apps.forscience.whistlepunk.AudioSource; +import com.google.android.apps.forscience.whistlepunk.AudioSource.AudioReceiver; import com.google.android.apps.forscience.whistlepunk.Clock; +import com.google.android.apps.forscience.whistlepunk.audio.SoundUtils; import com.google.android.apps.forscience.whistlepunk.sensorapi.AbstractSensorRecorder; import com.google.android.apps.forscience.whistlepunk.sensorapi.ReadableSensorOptions; import com.google.android.apps.forscience.whistlepunk.sensorapi.ScalarSensor; @@ -31,10 +30,6 @@ import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; import com.google.android.apps.forscience.whistlepunk.sensorapi.StreamConsumer; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicBoolean; - /** * Displays sound pressure levels in uncalibrated decibels (I have not tried to figure out the * 16-bit integer corresponding to 20 micro-Pascals, nor am I convinced it is the same from @@ -42,101 +37,38 @@ * necessarily between devices. */ public class DecibelSensor extends ScalarSensor { - private static final int SAMPLE_RATE_IN_HZ = 44100; - private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; - private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; public static final String ID = "DecibelSource"; - private AudioRecord mRecord; - private final ExecutorService mExecutor; - private final int mBytesInBuffer; - AtomicBoolean mRunning = new AtomicBoolean(false); public DecibelSensor() { super(ID); - int minBufferSize = - AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG, AUDIO_FORMAT); - mBytesInBuffer = minBufferSize; - mExecutor = Executors.newSingleThreadExecutor(); } @Override protected SensorRecorder makeScalarControl(final StreamConsumer c, - final SensorEnvironment environment, Context context, - final SensorStatusListener listener) { + SensorEnvironment environment, Context context, final SensorStatusListener listener) { final Clock clock = environment.getDefaultClock(); + final AudioSource audioSource = environment.getAudioSource(); + final AudioReceiver audioReceiver = buffer -> { + long timestampMillis = clock.getNow(); + double uncalibratedDecibels = + SoundUtils.calculateUncalibratedDecibels(buffer, buffer.length); + if (isValidReading(uncalibratedDecibels)) { + c.addData(timestampMillis, uncalibratedDecibels); + } + }; return new AbstractSensorRecorder() { @Override public void startObserving() { listener.onSourceStatus(getId(), SensorStatusListener.STATUS_CONNECTED); - if (mBytesInBuffer < 0) { - // If this is the case, AudioRecord.getMinBufferSize returned an error. - listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, - "Could not connect to microphone"); - return; - } - mRunning.set(true); - // Use VOICE_COMMUNICATION to filter out audio coming from the speakers - mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, - SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG, AUDIO_FORMAT, mBytesInBuffer); - if (mRecord.getState() != AudioRecord.STATE_INITIALIZED) { + if (!audioSource.registerAudioReceiver(audioReceiver)) { listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, "Could not connect to microphone"); - return; - } - mRecord.startRecording(); - // Check to see if we actually started recording before continuing. - // AudioRecord#startRecording() logs an error but it has no return value and - // doesn't throw an exception when someone else is using the mic. - if (mRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) { - listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, - "Microphone in use by another application"); - return; } - mExecutor.execute(new Runnable() { - @Override - public void run() { - short[] tempBuffer = new short[mBytesInBuffer]; - - while (mRunning.get()) { - int readShorts = mRecord.read(tempBuffer, 0, mBytesInBuffer); - if (readShorts > 0) { - sendBuffer(tempBuffer, readShorts); - } - } - } - - private void sendBuffer(short[] tempBuffer, int readShorts) { - final long timestampMillis = clock.getNow(); - double totalSquared = 0; - - for (int i = 0; i < readShorts; i++) { - short soundbits = tempBuffer[i]; - totalSquared += soundbits * soundbits; - } - - // https://en.wikipedia.org/wiki/Sound_pressure - final double quadraticMeanPressure = - Math.sqrt(totalSquared / readShorts); - final double uncalibratedDecibels = - 20 * Math.log10(quadraticMeanPressure); - - if (isValidReading(uncalibratedDecibels)) { - c.addData(timestampMillis, uncalibratedDecibels); - } - } - }); } @Override public void stopObserving() { - mRunning.set(false); - if (mRecord != null) { - if (mRecord.getState() == AudioRecord.STATE_INITIALIZED) { - mRecord.stop(); - } - mRecord.release(); - } - mRecord = null; + audioSource.unregisterAudioReceiver(audioReceiver); listener.onSourceStatus(getId(), SensorStatusListener.STATUS_DISCONNECTED); } @@ -146,12 +78,11 @@ public void applyOptions(ReadableSensorOptions settings) { } }; } - /* Some devices (mostly Samsung) seem to spit out - some -Double.MAX_VALUE points when the mic starts - which mess up graphing/audio due to an absurd yMin - so we drop them since they are bad data anyways. - */ + private boolean isValidReading(double reading) { + // Some devices (mostly Samsung) seem to spit out some -Double.MAX_VALUE points when the + // mic starts which mess up graphing/audio due to an absurd yMin so we drop them since they + // are bad data anyways. return reading > -Double.MAX_VALUE; } } diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/ExperimentalPitchSensor.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/ExperimentalPitchSensor.java new file mode 100644 index 00000000..aac40151 --- /dev/null +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/ExperimentalPitchSensor.java @@ -0,0 +1,117 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.forscience.whistlepunk.sensors; + +import static com.google.android.apps.forscience.whistlepunk.AudioSource.SAMPLE_RATE_IN_HZ; + +import android.content.Context; + +import com.google.android.apps.forscience.whistlepunk.AudioSource; +import com.google.android.apps.forscience.whistlepunk.AudioSource.AudioReceiver; +import com.google.android.apps.forscience.whistlepunk.Clock; +import com.google.android.apps.forscience.whistlepunk.audio.AudioAnalyzer; +import com.google.android.apps.forscience.whistlepunk.sensorapi.AbstractSensorRecorder; +import com.google.android.apps.forscience.whistlepunk.sensorapi.ReadableSensorOptions; +import com.google.android.apps.forscience.whistlepunk.sensorapi.ScalarSensor; +import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorEnvironment; +import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorRecorder; +import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; +import com.google.android.apps.forscience.whistlepunk.sensorapi.StreamConsumer; + +/** + * An experimental sensor that displays the pitch in Hertz (Hz). + */ +public class ExperimentalPitchSensor extends ScalarSensor { + public static final String ID = "ExperimentalPitchSensor"; + + public ExperimentalPitchSensor() { + super(ID); + } + + @Override + protected SensorRecorder makeScalarControl(final StreamConsumer c, + SensorEnvironment environment, Context context, final SensorStatusListener listener) { + final Clock clock = environment.getDefaultClock(); + final AudioSource audioSource = environment.getAudioSource(); + final AudioReceiver audioReceiver = new AudioReceiver() { + private final AudioAnalyzer mAudioAnalyzer = new AudioAnalyzer(SAMPLE_RATE_IN_HZ); + private final short[] audioAnalyzerBuffer = new short[AudioAnalyzer.BUFFER_SIZE]; + private int audioAnalyzerBufferOffset; + private Double mPreviousFrequency; + + @Override + public void onReceiveAudio(short[] audioSourceBuffer) { + int audioSourceBufferOffset = 0; + while (audioSourceBufferOffset < audioSourceBuffer.length) { + // Repeat the previous frequency value while we collect and analyze new data. + if (mPreviousFrequency != null) { + c.addData(clock.getNow(), mPreviousFrequency); + } + + int lengthToCopy = Math.min(audioSourceBuffer.length - audioSourceBufferOffset, + audioAnalyzerBuffer.length - audioAnalyzerBufferOffset); + System.arraycopy(audioSourceBuffer, audioSourceBufferOffset, + audioAnalyzerBuffer, audioAnalyzerBufferOffset, lengthToCopy); + audioAnalyzerBufferOffset += lengthToCopy; + audioSourceBufferOffset += lengthToCopy; + + // If audioAnalyzerBuffer is full, analyze it. + if (audioAnalyzerBufferOffset == audioAnalyzerBuffer.length) { + Double frequency = mAudioAnalyzer.detectFundamentalFrequency(audioAnalyzerBuffer); + if (frequency != null && mPreviousFrequency != null) { + // Avoid drastic changes that show as spikes in the graph between notes + // being played on an instrument. If the new value is more than 50% + // different from the previous value, skip it. + if (Math.abs(frequency - mPreviousFrequency) / mPreviousFrequency > 0.50) { + frequency = null; + } + } + if (frequency != null) { + c.addData(clock.getNow(), frequency); + } + mPreviousFrequency = frequency; + + // Since we've analyzed that buffer, set the offset back to 0. + audioAnalyzerBufferOffset = 0; + } + } + } + }; + + return new AbstractSensorRecorder() { + @Override + public void startObserving() { + listener.onSourceStatus(getId(), SensorStatusListener.STATUS_CONNECTED); + if (!audioSource.registerAudioReceiver(audioReceiver)) { + listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, + "Could not connect to microphone"); + } + } + + @Override + public void stopObserving() { + audioSource.unregisterAudioReceiver(audioReceiver); + listener.onSourceStatus(getId(), SensorStatusListener.STATUS_DISCONNECTED); + } + + @Override + public void applyOptions(ReadableSensorOptions settings) { + // do nothing, no settings apply to collection + } + }; + } +} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java deleted file mode 100644 index 17fbc5f3..00000000 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/sensors/SoundFrequencySensor.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.forscience.whistlepunk.sensors; - -import android.content.Context; -import android.media.AudioFormat; -import android.media.AudioRecord; -import android.media.MediaRecorder; - -import com.google.android.apps.forscience.whistlepunk.Clock; -import com.google.android.apps.forscience.whistlepunk.sensorapi.AbstractSensorRecorder; -import com.google.android.apps.forscience.whistlepunk.sensorapi.ReadableSensorOptions; -import com.google.android.apps.forscience.whistlepunk.sensorapi.ScalarSensor; -import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorEnvironment; -import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorRecorder; -import com.google.android.apps.forscience.whistlepunk.sensorapi.SensorStatusListener; -import com.google.android.apps.forscience.whistlepunk.sensorapi.StreamConsumer; -import com.softsynth.math.FourierMath; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicBoolean; - -/** - * Displays sound frequency in Hertz (Hz). - */ -public class SoundFrequencySensor extends ScalarSensor { - private static final int SAMPLE_RATE_IN_HZ = 44100; - private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; - private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; - public static final String ID = "SoundFrequencySource"; - private AudioRecord mRecord; - private final ExecutorService mExecutor; - private final int mMinBufferSize; - private final int mBytesInBuffer; - private final int mShortsInBuffer; - private AtomicBoolean mRunning = new AtomicBoolean(false); - - public SoundFrequencySensor() { - super(ID); - mMinBufferSize = - AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG, AUDIO_FORMAT); - int bytesInBuffer = 0; - int shortsInBuffer = 0; - if (mMinBufferSize > 0) { - shortsInBuffer = mMinBufferSize / 2; - // Increase mShortsInBuffer to power of 2, if necessary. - if ((shortsInBuffer & (shortsInBuffer - 1)) != 0) { - shortsInBuffer = Integer.highestOneBit(shortsInBuffer) << 1; - } - bytesInBuffer = shortsInBuffer * 2; - } - this.mBytesInBuffer = bytesInBuffer; - this.mShortsInBuffer = shortsInBuffer; - mExecutor = Executors.newSingleThreadExecutor(); - } - - @Override - protected SensorRecorder makeScalarControl(final StreamConsumer c, - final SensorEnvironment environment, Context context, - final SensorStatusListener listener) { - final Clock clock = environment.getDefaultClock(); - return new AbstractSensorRecorder() { - @Override - public void startObserving() { - // TODO(lizlooney): Extract common logic from here and DecibelSensor to a place it - // can be reused. - listener.onSourceStatus(getId(), SensorStatusListener.STATUS_CONNECTED); - if (mMinBufferSize < 0) { - // If this is the case, AudioRecord.getMinBufferSize returned an error. - listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, - "Could not connect to microphone"); - return; - } - mRunning.set(true); - // Use VOICE_COMMUNICATION to filter out audio coming from the speakers - mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, - SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG, AUDIO_FORMAT, mBytesInBuffer); - if (mRecord.getState() != AudioRecord.STATE_INITIALIZED) { - listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, - "Could not connect to microphone"); - return; - } - mRecord.startRecording(); - // Check to see if we actually started recording before continuing. - // AudioRecord#startRecording() logs an error but it has no return value and - // doesn't throw an exception when someone else is using the mic. - if (mRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) { - listener.onSourceError(getId(), SensorStatusListener.ERROR_FAILED_TO_CONNECT, - "Microphone in use by another application"); - return; - } - mExecutor.execute(new Runnable() { - private FftAnalyzer fftAnalyzer; - - @Override - public void run() { - short[] tempBuffer = new short[mShortsInBuffer]; - - fftAnalyzer = new FftAnalyzer(tempBuffer.length); - - int readShorts = 0; - while (mRunning.get()) { - readShorts += mRecord.read( - tempBuffer, readShorts, tempBuffer.length - readShorts); - if (readShorts == tempBuffer.length) { - sendBuffer(tempBuffer); - readShorts = 0; - } - } - } - - private void sendBuffer(short[] tempBuffer) { - final long timestampMillis = clock.getNow(); - double frequency = fftAnalyzer.determineFrequency(tempBuffer); - c.addData(timestampMillis, frequency); - } - }); - } - - @Override - public void stopObserving() { - mRunning.set(false); - if (mRecord != null) { - if (mRecord.getState() == AudioRecord.STATE_INITIALIZED) { - mRecord.stop(); - } - mRecord.release(); - } - mRecord = null; - listener.onSourceStatus(getId(), SensorStatusListener.STATUS_DISCONNECTED); - } - - @Override - public void applyOptions(ReadableSensorOptions settings) { - // do nothing, no settings apply to collection - } - }; - } - - /** - * Determines the frequency by using FFT (Fast Fourier Transform) and looking for the frequency - * with the largest magnitude. - */ - private static class FftAnalyzer { - private final int length; - // Preallocated arrays to hold complex numbers (a + bi), and frequency magnitudes. - private final double[] a; - private final double[] b; - private final double[] magnitudes; - - private FftAnalyzer(int length) { - // Make sure n is a power of 2. - if ((length & (length - 1)) != 0) { - throw new RuntimeException("FFT sampling size must be power of 2"); - } - - this.length = length; - a = new double[length]; - b = new double[length]; - magnitudes = new double[length]; - } - - private double determineFrequency(short[] samples) { - if (samples.length != length) { - throw new RuntimeException( - "Samples length is " + samples.length + ". Expected " + length + "."); - } - - // Copy the samples into the a array, converting shorts to doubles. - for (int i = 0; i < length; i++) { - a[i] = ((double) samples[i]) / Short.MAX_VALUE; - b[i] = 0.0; - } - - // Use FFT. - FourierMath.fft(length, a, b); - - // Calculate the magnitudes of different frequencies. - FourierMath.calculateMagnitudes(a, b, magnitudes); - - // Find the frequency with the maximum magnitude. - double maxMagnitude = 0; - int indexOfMax = 0; - for (int i = 0; i < length / 2; i++) { - if (magnitudes[i] > maxMagnitude) { - maxMagnitude = magnitudes[i]; - indexOfMax = i; - } - } - // Convert index to frequency. - return ((double) indexOfMax) * SAMPLE_RATE_IN_HZ / length; - } - } -} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_1.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_1.png index 95893e09ea04deef8b617c9f68b1c92d6344c954..b977c93de95255a93a0b7d417477cb4d89f25251 100644 GIT binary patch literal 743 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|Q$t;uunK>+NmtqC*A(4vu&K zUpi?t)s@Le>a54*^368ZHJ_bI34?_?!_5*PjY4}D0v(`UdwA;2l}PqdK`^OOK5&Zn}= z-_88)!1?rBzK+Ji7NJw~G}7N&uXkZo1MpWvDC?!^z?oviFr0;ajW)Li&X!~W*U ziOUPl2Rr?&P`3UYOsE-hy2Kora(;x-JhYB>< zmLAeL{^S4FtU03dH@?~&-n+l5a&^!2wxX|ndjwOrf9!MqnZ=s#JhS#f+I-odz;o;V zykcJTsN(&a@5?(@^_JghJ$FjfhWF>0n-8yim#zLP+qmi0CR@pTG54b%7XU-T%i8W$ ziBRdqEsye7^|Pm536wTD%k)%H-0JE+)%4}=3-&Oi9*J##k@|;4ZOYL=H(yp)-RC?} z8vHJiwRuLb4m51iICbK7!`1pOhe(0cFSRdUiRT80IaeOibq#tZy4N6|{$arNd0}k?Colmsc)I$ztaD0e0sti2 BIK%(| literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9^X;uunK>+LOXzC#8)4vzQ# zU)tcJBjBsBE%dy{8?7i)e_#7fb`xPg#zicFN?ro0P^v>Hut`Hu6;8QyYB)~m5CT&Q zUM`%AT&BP&xF(=p6iq-LToX_)iY6crVd1Gvb)~rdtNw<`HfzjgpDB8Dxx`V;Q#{JetqaYrFYr89tjuCQ)?aVMGv3*@5f`z zqUjZAw%==BkK>d@B1<*i8BT!Gws)+f3QYA+V* z&lGCcaJ^~ewYsIv{pV?g`Ew4fT`uzUo5K8_OQ(thr@8MGdgh{d;?{NJB$+P-RqSXch4vydU zzr1t*PDm1WW}3;N+Et&X9%;z{QTwxA$vaZry8DG zBm4XIlxv!=`BIsuEVkb9SW^TVGSF~=2OTI}P=XGqfUK~E1U@AAHJruj{{G+m>%aDV z)7^7kzcSSed>yfKZ*IW4oHy1gfz9T-=A4*o`g>>K>+rom(RoH0<$>$;%D;V9x}JYr ze52^8`ON~ABAqTXYb7@s=_#L{=Qy*lExY^E^J8Zg<&+o7Rq&ecTC44T;Kknxom2PC zQm!uu%Z-1wV@=F2ho6tG7&LEs8*)tP)b9DLsh8Yb<}dSemNeB9oi5Su^fQaui0!|~ zl&g=08b2A9-(OtbrtLoYZb5k8B*Di<##c96U7cb!ZFl)Ko>Oy$cL%!ncNET?D-`8A z({A4GemP_J7CwJjBgb_MdSqt1`^|H|8+u=Ig4dMQ{ho{U*xxDi>|18@%1ym!Rr=S! zNcRbn!3oOo_xkt#?yK{fT-x=9%P9M=f90y;P#M>-_2pIz&s3~k^GZtc)PsZX8;m~7 z9?hDvd)dJSJ~ihzp5F1s%1f@@=yzMjb7{lS;stjZm+pI6&voiz z#a8l{#*~SZ4_{n^mmT@yY#=rl=o}~MK_l(sM)^mqIt?o lwS7y{kTV96Imc>uz56_&-r1A00)d&8!PC{xWt~$(69AfBu`>Vw literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU{d#VaSW-r_4bx`(IEo?2gm#W zFKtLYc-+Hy@x;5aN3|HWuW`E_I?g=Hat@OV=OULW3SLl3Ky?vIppqAy>JSQS(hyVy zQ;t(Qgj_l`;1paFP%nxmAP=qyq!(EekcVWUD7*c?`W~6&r}r;pu1PEbTQa)^qu(d}>8<%Kq&2JWf+w1Kr}LY3UU% z+EXw^k}=e0mWIAq>NEE5t6Cd0^hKU-&senhjGg?VJ2~DNPg=Tyrg$$pb5H13`JuFb zJ6$wST?-7$%j({g;jQsXLVMAgf7@I^2Kr`P&EAujSzEPF!@Sq%m+Ug5Q~vhiPmcwb z-CaH>_C-h0W{v%=H=at%2HvwcwI+93$81BF%!R^IPjhA%2S(L)7yVd#=*|1}QBOKH zS)6)Pn0~Kvo~YMR+5d}l`i!!Z?&oH{H7W}<>-hABrF>6I7fRqzAw(4raR-eQTv2#3 b)|QbuuyBIOa)Wuml*8cZ>gTe~DWM4f5q9Q2 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_11.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_11.png index eb7b25d8ecea6f3c3764d1db454454658c8ba3ff..4e0bb9214e6dc6ea81a526393538bb379309f26e 100644 GIT binary patch literal 809 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEW+c;uunK>+S7}MT-r194`L( z@4x;0*)6;rp3@%QnYri9lC~S_EH|EfRpou1%EhvjW$A(`3q+;}O=$`O!2quSE-y|m zM@>gf4OJjyMJRwM0Vz0j+yBt(|HoIob>@7$(Ea(gg)Eyy)usg0u@pZ0dGmL{llu#6 z1Wuf|U;b8pibLORcMbWrOLk5#H8@qL?A9}z5^&33<9pfI#uZIt+7ysUD!+GcEY^BcB)eXwjG@FV{(Ujo%G%O60t=MLZ=M+ zcJI?faz4;)xSfyTKd=w6`VSZY@F0LHfQFILo`=`ZAD_Cvw`bzU^WodAYxlewkG=y(Q^TUr%}3?90bb z$8FaQ*tdVii6`^#x*gwnS@uKNn%fmq_V1k#8<1vG|Eogu^)}v9CtMtN%B3Ea(RclM zy?clDDgWntgpaR|*uGI?v)Z=TEpn&s04?8?^w9eK$<+I@GtAAB32K<5q)VI;d*$yhwwIB$1{W5c%LQfu N22WQ%mvv4FO#pu-Z-M{- literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF;C;uunK>+Nkvz7_=@hroCB znR^+T6qnxkE@UpOF7)g8QJ34yCrzRoG#saN2)T4ZD9%MLQxv>h;1o-sl9zz$A_&zX z6xgI8s0ycGnm~GyHGzzPYXa&;(FEinEZlTSZOgyHSHBjCJiZ`UnH$JuWa1Op^~tzn z=I8SDiBF0H#kh)|{tkRCyj0=x+Q2DC7j1D1+~wUBG-W$q^pr(g`~vS8zX|@Y2ozW( zvQ)!W^VHhIVqn@Ta2;RFltn(~1%X{gckcq_eZ-e(xJrsWd-EBnHZ@{~WPIm}A11rX zOZeOry#n=)f4nZ=isUjOL>QoZ2NWXkFhKDRBp8u{0ww$~g5nkv!j>ho#I=`JE@@HU RRtk(n22WQ%mvv4FO#pqts`vl^ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_12.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_12.png index a8b9b3603fe7fb0bf10c9a2ab83f1e7db7100e7b..8d7420f9822626f28458c4362060bd4bc1e5dfab 100644 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV0QF$aSW-r_4fAZqQwRx4vzo+ zFHirr@(A0K-%WO*H&q*+n2F7h`M)Ghc9}zfR{)n6r@830Q%T<%Gwd&!797(!2Qa$GLOAhcEuqR`|We)$d1N@>vE!+vAG^?=kMQ z$_#MY`IdE$apwNNaaUU2S2b=9d>2#I<2JL@>?e2Xkt6@_}Tw}@jm|c{>}axlLOP{t8NziXnj2+Ky1;PL-Id2@~TeR{!MuAv=~|ADQ5%M z-Sci1I(2=aO|i}D<1t(L+KnWiuIt=i{P_PV!}R*wOsR*=7M-`6sA0c%;er~5QyrUq zuYCWOK8-0r?XF#?ljPTr;+>!PA~d+!>z=*0cU)oTJlso8|VL{bxSKP-C%r zy3wf&o`Ad=OLpIW^W)>Uw@zz*U9=-QXdz(_34LhT!=ncpIf&>1DnN-pkOE-*+4N=G zTW_0dlqmgu?#8uKD_72XZm3ayxKG0WS=qZY#YaCnS|;dB)llE_^KyV&o_^J)b9)rZ z1K&v;-@ZSx@^Z?#&mL1me@9v}m(5;3H#SLZ`kjjMC@HvC7Z+^t(;u?=*{C-zZo^c+2{P7a^Xs})8uE8UK$H)xKF*yPS%KTC^~dY;uO2y z0rmdmE3BzcSW5PX7CyZ_tMBm)qw{M6!faOUf82O&>ff}!mdK II;Vst0L=@HG5`Po literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV2bi|aSW-r_4c-B(IEp72gm#W zFKt+U;KU{Qlo#tx>3vj?+hlO=W5ZdQHip0^4MEioAt>e2so^-KLkLE3E^?Wo;N=3L z1XLHX1S)yKDYzz}USv%mBjB2VdQmh1c?b(rzc$J|x1acXrB%Ode}2iG|5m5+4c+)7 zo;A43WV;I7Os;vYk=_&|YZBOH^oDhgKBwwndsdg?H*}5yQa%1`9b{l z-NjQPUq8I<7FjvdVm7CX=Ba7I_2M4K>g;pt)8;SI>DyE_ZB5h>_jMOtZc3zv|Cu>G zH?XTH%l>Be$*aX;PoD*@yXP&uRO7$isfmvxZJ(_x-J#LFxJT;8OzHpOeLH{M77G;1 zQLesrvggwqUe#0b9Y)F9PX4-Am!hd~YSC@=$iTGNe@2VvaE49kRk!=}JzcTn{3PY$ zdZ&(Qq{|=MA(VP-`TMEwx4Q03oU%IcU4i!sWv}`Bqz~=+Ws@2{B`|-*<{wsRo`Guh z5gl_xS6@F8%6~8Hzx1ixMQ7yZSi8@ZZPs9B%PgC19d~bEt-$NLE&eE>3yL6kl%Rwz vBvz4Q1|>StV+J`oK`8>322i52?yB(2Jn3g)l}|ST6B~o4tDnm{r-UW|m74=I diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_13.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_13.png index fee7a753ba9abd3c153f02f49378aebca55eaaaf..748318a71c416a5df29590680fc3536ca1717090 100644 GIT binary patch literal 660 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV2bv1aSW-r_4d}mb%zuL90LFS zUtaoh)v^{wwr6*aT>b33)pldjZM&dNvtkuAR5e(avMgONWr4^PAs}oDY6=SQ3gGhM z^m5b$L4*Q`5}<;jV|^L>kN4%iyJ0t_yXzsi3$ocfXEANzmWxuA}X=MRQwtSisTz?R znCg3lzEWVxnhDzP<(e*)pA<=0&;m5<^W0tGfAyyX_*uW0n6XKB6Ik#u-@6{m0I~QN z98d=Xor~flkbiLc2*b+|Pa{l#dl?ocPzCXPdA0plKQFpJy)r=0U2^Z;tj`N_w%$8k zD$k%DkT%D>Y18-jSD!oXlvwiI*TUFQa{JwT&5?<6z)-5RK6NoP`)j59x_#y6nuSg! z`dHU3YS?6OYR&$+j+L6Hgk=Sjf|EV#R-Ik%n=7loO{aP`9M*X;E2V zSZ$I!F|T#D(}xdoFZFtsswy85}S Ib4q9e0M331!~g&Q literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF#9;uunK>+LOXt_A}hhlBV2 zU)og?8kjMw$xpYD(&P6U$6ueyE6ic9zmw@Ub2-P7J z*rXw-3a4P2KzflifsBA_0_sK41mqzs{Io^daGvhtS(4YqQzt7dK0KpU!z-{WXv*HE zo}T2gy1=d?Dd#YmMIuWzTyG}7TDM6^e5r=_p8K6aQ`UD&1$J$^5^SU`1k$kRjdAJ! zo9wA{nQt}3hE!DWrn|GwrrSgXpJHpKf$3g-L*`p|-gYHq}&;bT8JV>DdjG`AFq=ARR Z%-z~&wyfXQn+uFe22WQ%mvv4FO#s(zuf_lX diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_14.png index 1efeefdb18473209c61746160d18a014ba60da8c..e9dde2834a253395461ea33c366913d612d18283 100644 GIT binary patch literal 927 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU{3RNaSW-r_4fAZvQ-Wu4vzo- zFF$J_EGl)5d&S-`H*+Pk)RyM&U#GQw-Ne!q)D#rp6~N`i>E);if*PtCtV>yzE|{`F zWQq_FA}N3<0Vznmd2Y|YdZTT!d;6>FR(*f}=5<3+^2B!yMenm$G6?=uYx=~dv3;KW zsYH#%;x8{hHVSatcX3r<*j%%_OsPkdYMmuFesDi8uD;-n#q{=1ry2YHbToZp)Y#u> zxjA5dL3vG$b0zZ>LGG!wLi|t92L5v@{`R2$R^0bizwcMgr!aPJ+!e9E?*1I1Q({xD zDla^-+bV$1VdwJ$uJ<YuHh5}|*8eZN}Y{K-i}{jBEqMR%%nrZ79c`^oXAw4K9C!<+xrwf7F3sobYt zO$_+*V>S1g#ewrIk6TxtUdR3P=KJ7T!TZwp|KR*S(fEA3_JWky7^lj>DXWv$X#TE` zo-+0DYfp{kwJlDF;DiS#G&m6<4h&9|5CY zK3Oi4*&e-UP0X4X*C%vt%9fY!-&A#Q5o7AYIlIh{^wlf^E-FtUwyrOm)_Ll zZw)n8&;Na5_Oh&K_y1nbKN+S>JU{zu)WQ}aFOBz&M!)~$zc%c5oM||F&8`P8TxNc( zS)CnGdek;gWy;38tDEQa7*+S)y(n4ov^Fj8cH^f_#iv9=?p{#uZQ2#+Cb!*CV==$W z7n?kz6Mj=-#Wy7fy7g*#ovRkg&-API`8vD)NceT5V&SL?5Kez=A zI~zVN)Yxpd$tZpM%xtDq<5Qgq3v>4Tva`0D#bqRw`ZVNGQTToL{XS89f814G*0b>U z%=f`*GTRF^)c=Gxt+?FwCjV0Sy7H%myLC>jdwY-d>8X8XGTQ^6Pl?pmVy-kjwJNx& vM}O~<`1CzX6Y(Z{L>NQz1te$eDyxsy-|(PDdVd@+<1u);`njxgN@xNAtm&j( literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVDj^HaSW-r_4bx$*&zoW2gi5y znVZfWQ(immN!iuvH4;g;=HEC`v+u&0<3b8v0;-Ex0+k?ClZK#bhfpA#a-7m3~;x88mHf%9}O zaRtWJ>PtGh)OEP*beNJ}A3x>nqMo=VYoDL(F#6OyO*Zvf=4GKkH=RpyQv|vHzy6uj zuAzPIsq4)-4+;a%o0JujVat7~PkqSE3u5}bdH zY|ihyrF5!EW4_69n_mu{MjtQOzW$SQtbTS!;MI$N%ijw>ZC>=oWcePcr#FjTZyKD? zZa=VC+hvhR>MK9n>K+Z(NTJkk9vW4DLPgK4UMypITzYRxxaiXt?={bA?%#XArv3E^ zeJu!rBk1M*cCkGF5f~bL=n&kc)X%V5ir8w@roKnEPYH=#iLO1cyAqhd7(8A5T-G@yGywpX>H=T@ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_15.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_15.png index 5d0a3793ecdede5498a07f925f691b0c06191f32..8d55eef07ff02bda2147bda66ede81b209c47f49 100644 GIT binary patch literal 777 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV7lPx;uunK>+S8^e$5Ud4i|s^ zpMNbpIf?u0nVme@>a~VksSyD)9{rj$Yb#IVf+-6`rU*@G3Tg@p@B%_EFHSEuf2V$|j|; zutmrVLd-8-%&a=)srCIS0#jCMSlieBJF@)Z!kmBgRsl{kyBNK|?t{7x?g5zd;T`}g zK=C0+0d5~+27#ggEOh>*r@nq4ex%6g{`=kGUnAbgEPnequJ_}sW2wA9@}^vD*c7;| zr&@eMz_Iy-i;rvM-r4N9@7LYcr+0n&{N?q6+3ew0W@;4wu3z_@W6I>~frY(Sd7r-j z+T*hGx5$0b)T=Yit9yOPmX7qhi=G%Lo%NO6-x;8c-Eavq3mjPA_*EsC^-1qyc zQJ>?^>RCy*B8{r&89hq=Eion3z4-g)l;`;+_x_&!k$tLX@lTa0^J{AEN4g&=lWi{g z?*1Ut+(Pv8yzm9`%|+Mw-Zgw$BE5pI{BQ2E7PWvO?~M8V~OT> zn;NN|UOfNU`nrTAvZt(>!}kVTFFF%M_`LdB&;Ny%Y}k_%IK3f9 i7$`x)WAv3|EwfO@1Z^Qvk(t0G&fw|l=d#Wzp$PyAu26&k literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|j9#;uunK>+S78J_iF4*Msls zFTZgJ*-;ypE_6SG-*f3P#-lvW4H}M9I)q$0Ar$8#mnjNfE^vw^P{~U`brFQ>5DIM4 z5LAUzFijx6$eKV#z%>E&qG$s05EgFw-P^x2`RLY;peYwE!tFU0<%m3u-U#GP547QY zvHEj&(3IfG^Euq6ED~9&;i~Bs*cCLTTBl@{t+S7>MT-qYTpj=Z z_xInnd4@`J#iiYweuY#{zu{4mC{Xcd;vuPJ4gp>PTwa`Bj+%~|8md6Zx|C(R4I63U2f|qp()!$y{x6YH2m+M3~SOXkb~MDyB35?%O$2Heck_E9V-aQ}wy0xg4%mSRa$_Hv0H?)xK?$1JwG=*`B^i z?bx#TiI>CF=ksAcoZm!2I|AkFit|wdi?u6u&(AV=~#pm4) zc(*I+z0KB#D|}64_4Jli>sBn}afmE@S0;2y^!ci_8tG*Rcr}Fk z_60a`rfQv9$31s$sjcdl&d++Nkvz6J#zhJ*k9 zU;f1;%-EQeE|f1Nb+bG0aZ}16U56>LNJRq#>x}cLq(k+#I=cnnt}) z%ITlV+1t*kooaIY7Bj!rEl`ZB==z#PIzme$T{9QEYM#1m9yw)^$!d++S8+c}omL9321s zU!MMLqE+VM+M8DlhkEGn* zO^+1(9e=*H^Krh}_<0sf(bMPQd|7O#cC*)Wox1whUM}_7`p5nni`V(SpSLo6Urq4( zkNvJQZ7XYlP>SgnpK8tE>-ZsD0{?R$9Q_~lo*%#37@-tI9Ky2|EmYcPU zi_4`0$ozCl z>8a2u`)halu~nL!>M`~aJ!SpBoa;o<6j1~JxaDsm{F;p<9&eGJyWGD->sjuRx&Jl2 zc`skrRGwFxe(vUquNSBB=T>;H5KcW3?KE?`(&KqbTWdc&d>?#o@6A;^PR``nB>FVp zT-Er`-38IPx{^E92eFlRVHsh6XV_ z7NBu}hy|bmlxPAez!^;#@d$}YjsJf(y#Bm@MQ-T(@0ZWl>^i&uTW;#^)wfU0`o3EF z@v8$`>KdO9gq&la!q0ZAQ{|I_Z`+ruDcaWitrE-YpPl=+zHf7p%+2X~vh%CoZg_l= zeeWag2-Cim$+DeBuhSO%j{ftc*!bAR-lEmJ->=EG)>tT0SXE!;Ud423MXulftFcX+ zlB@GwBa6~w4Aw8zSUfFY(Yqh3`NNJ`SWQ2%&28q!ZQF|))c$&P%egE; z&#ft~cbBL4zbL#j(_BON`n$T{b0)`S`~Y>!tBuw5Eur&%Tt}t^Lm-y-)cQ z>x?g_7izNSEa(2TiTmHPrCZls<*tvCmcfVtedA>dfr=bh~+HmwAz`-Y?BFr}nt?DF5aRzy0`@*OaOGIqq{< zH;KKmzArMrZkmt#PNTxBw{J0~ex3f$ROA1w10GK&0T#ws>&#!&@UYb4K{buz7 z_p*qvDax<+Saoy=XTR1^<|~@2Q6Jl$6_|G9rWWhX&p+oi?@~H-u{mD#)V;6vcBiJ+ z_sw54r!?QHYUw-6pR4XYmY06|iuZ5Kvp0;FXA5V3@rqYHqrE6*>z~k%=OrS$KW)+o zzrW&q&!bs9Z>d8)Ku(s}oM+=d({QfZ zsgs6b(l7SZE)w2&->c`3|IDlvcK()+Z+<^j8vKu>J3U%=+imlWR4=6v*J|>gTe~DWM4f;VBj- diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_18.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_18.png index bfebad5921c81b27b6177c7dd17d33c4be5b1be0..355edb2abe6e3309f306d0db52a71b2f3c2ce07a 100644 GIT binary patch literal 826 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU}p4maSW-r_4c-BQL}-FgX6pU zmnrXEWq9i+ya=Bf+r+rNQ{dBQWz*M%Tr5jjmM)mGKxB&0l%^mM4Dbrz^5XPz)O6I; zPz6F(gaU{Xpn`QWAB?{R@3jwbn#s20c02Pa=fHPIEn%BXy8nYLDnIU*8 zOymAO4dzp68f%4`Hi=3pEX*mL$^uk=eqUqDrmI?t3JYb}ChWWr9w4{#)1A%v8nfe=LS%jUx z_^SGg)D-JPclp<^c6Qpm-+j+qV}6}MdYpCEeeH9FS9a>j2lwrpxqDrN_4nFm7IyXd zsr%g@o}Ksj>cdll8p?cn+)tmsezWINsqHhJ8My&v_ny_qE#^v{{?TNLZ@{~nyRsVj z75}{g-D(dlzQ3fy@Zp>L;r^Ymy_zpQ-9xKOuaVe(bQlkN#Ub6f8S2@nQ8cNu945Kk8J8$wS;o##E72R~BC44L_+dWAp0iR{orG4Zeo7eQLQLDY-e-=Y7fooyZqVPj_mBPb_7b z*|jO@E8mprV<%pozmmVtD{SqolYf49NYDLre7gFb2WRx=o&B?*By!g_E7dCxwbjmN zhEJUP-)wcjJG*(SuKsnm|9#Fa(s0QN7t2j&R~UW?)Y!alY53lx-BM4t=epm&A#1Iw o0#1k6;t?g9KnmdTxNCoWR85b*v{v7BV4h&`boFyt=akR{06;-%*#H0l literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBG5I;uunK>+S78u0sX_4hQf2 zzf{%c;TeBN@`L@f>rHn{YZcOVvUCW!bZR(Gfl>-yE}V;8robry)kQ3UN?u^9NkdSz zLnshV!8HN(qG$s0;F>^sku`ygKv?+yEBE@n=Wjn3T&mH}8noNer80Ah|FOUwhAxsl zpRO0ovpN1w(#6u|l$XrqLn2RG6T5<@bXvG*p1N~6Xv(59tV&*i%a}gCj-Im8V~>zf zs@AEM!LosFi%rr*fb5svl8bs=Grc{gtju81Jar{FXu=|&v-?fhoDtxo~t Ok-^i|&t;ucLK6T}W3A}` diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_19.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_19.png index 634eb95ed30457dcb6e3fcb85c2202660e3e623b..70a0d0ea7d97616ed0c9011ae2cd8d10d9f3d7b8 100644 GIT binary patch literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV3zQ7aSW-r_4f9~pu-9R4uSvv zFaH|remg*{>}GL#O^~p&U#9b;ACo4T@-!}(vOr{t(3Ga2rl0^XAmsAm^m5d6)YMSb zU|q@rgh&d&O27&vH$DFNMmy=hdf(%#hP@M$|17j&*rI*v^5lbCHNttsrc@R#bFj3Y zFrT5vVP+;<{nzhyvc($W{MX`vvK6LNE+*dsuguHb+e)apKT!+Z#r=(9YY4|^|s109kdg_h0 zllr@LJI+>cq_&ox`XA?E-kj5J^h&Pkh|uNB@9#2gGC8H*Tyfee^+|F~q(fZuC(dIh zxaW3hY;M%)E_#-Cu5b1GEDhr(oz9}C!A?^H-0I$Vl#8$AI`!^+a2exFw$v|^FIZ0x z470D4vvp3Z`L*Zh{}&-HlC6xVTAPJSKTZ&QdhV+SG^C*61P@A3IH3e3PytFljj64cw^+f@3-~p>pI$JCmjzco2!~WE#BziP1AG71IuQs-ak6C(5I}|cnbTs z-N}hkUio)V*T28~xU1%2eD9{;I*~75RX?}r4^{`VXL8nWE0hyWo8GrMC2UIcF>x=A z+l#jFga|*K*zX=N&(ZQTgZ>m=y@Gjp%8%m3jPyBWcTad@<6YNObhXp&qss4dk6Sk} zoRV}Ayb!(k%%8}j>rUTvmYuk1u6^RIw-fGQMoF>ANqXh)-)u6vH;)=Qq{#uZ3WKMs KpUXO@geCy?C3e05 literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU^4S`aSW-r_4f9~JSIf}hroaT zmw&x`B-Sx)W@GUryR8?kcII)fdCPjzMA>1Af|m>DA{Pk75~$=Qpt=Z7HE9T{b_fMR zD3?wR$0;2`Fbb{-q!(Ee$OyP5pk8E6AR`bKO8z~v_PzF_pW%D@c3-~|)%UZz$Z^4P zx1GO|Hsnq*Zc{zAr*K(EQOSh=EE0mL%d~&oeSh1!IM7e-+IEd}o;^`hE^f9nIyEt| z_TQN^iSK1nkG#HZc50&i|G@V(fnA$^XMI1S6*pzkpPz>7lth+lOn0A|>%HQZ)A3i; zpOQN^ojVmhg>_Mk;PF?%a~Cf@vrl!)qmrYBj~8iZzX^`pJF$%K(+-Wr=PoF3n^CoY zyZ3~pi{D5-()&GS;`WcJoJF%Ws*`$RUWD`*MNddwEMs}LGU;oq?x`NfX+1^HVx6Wg z>iM%>`L1TrR1N?A^FK{dxa=ZXtNvy3ZH>+EZTj~)rS19sr{g?GyB1rZpN!v?M~cZ) z{NK5E!2=gHoH!9N0*xP(hzXQpL{)$s`k)AeMH#xOC^4sA$sD}sfbsOOoLFE&V(@hJ Kb6Mw<&;$VL%K2dc diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_2.png index 734aba280ee92e1a2de34afe0ca95b809ff672a7..eae4c1b4dc7f6f748a177581cc58f13e3ae7ee31 100644 GIT binary patch literal 956 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~cwwaSW-r_4c-R-eLz4hrsvs zm+v0-SZfmS>@U~3sYWN;XFN(+aA3aur44p%4gp>PTwa`Bj+%~|8md6Zx|C(1vU~3)EDg8r8iY#QMrbOxohRO z|EmR3_FlH0*Q=iDC_cUU;5xhabDN4%*-s;oqxS!sAuDLj|VxCdO z`uPR&mY-{OJo@nRWU6wecmn4eEN?`vMJmAG(_kE!XsXJa zuAR4!FE}$#rS6dR(^ES_WG%gpm9bA)ZJ-|8;o>lNm+;b`H&~y%N_?*yen0ea+^+|x z^AzqIsZQZ7);bY1Wp4ir$De;ct#X{UQ0M+-xdQierc-`0iF-zgy+DH*1^=zMd1cy(hfw_K8YF)&PYo?yP~Fcdl6f;(nqs?bp7X S16P2#lEKr}&t;ucLK6T8KeT)R literal 672 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU`qFNaSW-r_4fAZyk-Lt2giT^ zmtRg@+Qr28J@HJ>l+amXbDWcTZrT~lJS(8!C7`;9B~S@MHE9T{b_fN+DaR=tLN1*e zV2X2*%M=AK7dQpi1k#JF31kFJ6G$(zCXf*b3*X$B@%H<~kGmId|9EO~)o-P5u2a~V zw>V7+|Gw0y?FF;f6#m{%Z{CNyPWU>%Zl}g#_SE;Kl7Vh=8L@$VcK=UlC_kH)-W+TD zey-}NiOfrk&xE^3TAo<#aQ=l7<*S95qR|cl#elH4? zb1g0x_+A(Pz0>dc&Fvb^WmP2s=gw(aPj6W@ZH#vH=U1R?BO}dNbsc9Okr?)JczJJr> zg6RPt&fVLaa$WT4-QSvv4;R>{eh9QbT>9k9&w``Jms_8AwcK-7)bU53--n6!Yo#Ne zZI@h~{2|v35tb~7SVNBhV06G^4K)HFaflpw$T5x?d2I{`TPkPEA6!*auJU8{9bn31 N@O1TaS?83{1OR2?7?}V7 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_20.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_20.png index 636c984cd134b30ecdd3689b1438a4ab20e06d49..50dcac1d652aa4846c00085085ccfd37e97f3a01 100644 GIT binary patch literal 825 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU}o@iaSW-r_4c-7QL_P$L*Tpm zmnHKvrEhyo^SL+w(Udf}gM%dG;;tUt&ZJKcQsfSEH@o58{9 zCYS1jfNf5kDpS@5Fad?8K!x}ozxeZPXZn4hX{taYksJ(i4Q>ac`v~GEY(4^c8SZJQ z0%)krxq0#HZ~r4^VcVu!ZoB*0$k<=>_*&Uh{uA8TEO+&C%~}2XyoC1?GwtU;Uom{T ztdPEaGxzgXb;id8ckX>vxlil7!eZu_xo2WE?ticS{=UcI%l-HF<{oxm(DUc6p27X^ z8>=*h4Exq(UtCpLCv&RjZEub}bAZXc7nRMM6i-d9OQ{LijwMW~NB78f8fDwA`=zt<^Wrkr)GI*&S7ht0rWjQ~9;}9A<8m3*TxcSsK2VJN20R=lI{2VyVwcALvb3zMyB$ zYQZnZ7xc{g^G?A(O33Qr%bOcD%5D7i6xWKDhBbZ?m?C<9`(nL+tIzM7+WofQb?4XA zV2$iBYpwTtwBKD>o&RRh@u;t9=aug*f5Wlq)nc9BwWm1t7|)kGzG%;8hS^&e+-6PP zZhmz2{de_Wt}E_ZG)FS{OHBBm+_eFHd`6$!7XO}`@rCjHKe5Nt*3aCtBn>%rVnjA5 hqL39plCRZnd0zK=y+P*Tt_B4W2FLgH zFLyby*@?|*+_yG{Y3o;qGoQEwR6B$Mn=}L=l;e~RA(u`KIHlm_!nw$03YcOERPqu~ zT?D7#nm~GyH34~WO(4C5#_q<9B+) zr!4ZRJL#(F^+S8pqQwRRu7Th7 zXI3+NN=}IS%kn(zXZ9qq!!1S? z$DKKsmNsANYZvm;Sa^p&_0n6(@cRL73roB?PH9ZpceT-oi(vwg&msimIygzT3VCQO z4q)O;74cG7*yF^hG9^%>vBik%>0R~nwcmMFrvx~0s)C(~bF8s|D&CVR})SUqj3)%2+*l;?z`wIdEVEYCU&o zSJC!|>tp_F|1Up&@y$hz^LZ)PGgGd~XM~%E@+}6DKb`m|HAtCl=i&L?XBB@ PDVo94)z4*}Q$iB}YTiOO literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4Ume;uunK>+P+BoDBv73TWzf~p-tfe^~2Q^Rpe zhY*Z{YXa#-)&w#Ft_i3YSrf+S8^MY9b=90LFS zUw-+z-*Qg}EAuB?(?4Ai>4`YzVR3!B$(qvw9A2DWj+%~|8mbzsOId($!IT9eQ-r28 z1vLc)cmW|7LIFexSV5-s{(1k`yjlENLT&H0p6fhM6{bk8-}{@_gjIct>-yj4Ue9ma z#Qj`iO5p9&b{DlTEL&Jp)f1q$py!tRx6t2GCU4)gRGOSR(YV&a^ZJIZ0vgQzS!@fs zgjt>@Y8dBVS#5V}fept~|BOX}Y5nX|^rMBMByBYAvwo78a?{(%-~Yn7*{?6B-wWV# zzuB04C|LIO6z9M)o7j&tKEAenJtg$^k801?yZ_f)ok$LJi%--Fto#1{X7{&!s#7|O zURgbT=c3Mi#$>|r1%EgnO;NWJ4)kNGR5`UKby|mhvX7Ic=#%4T_NmV~Av@*fcFW66 zMjyfwzkk07kR1b@NCXgiW=|dy*T%=0TO7S zAR{YOA;As~cv!H*V+I;8@R;E`wLv!a|NqV#$4+fC>R($GW3>JI?H&7tp5{+@Cv#(N zZpp)#yY*iRQ+j-_SH#~{crSD3^4pMyb3Un^mY9C7aNjDw8|RMSdv$W9)6e(&Rv&x% zZt5@1CCkNo!WZ0;Y&iFO_tn35TxS~Utq#A^aliViOZxN0i<18f-tK3cvhnN-bG|9e zfoV*$8a}O1U3ho)tCJf0Z!vi?4Q_hX~9PTo^9-j*%wIbz261uy=#hzd3dYrCn^xv)1kooA6UV5T(e$6;n= z{`a&gk>B@CeV+HkHud-de|Je!J^$mHMYC6??OT$FJFcL~0a*bgn^l$9GaNJZcI$8a RCI-yF44$rjF6*2UngEL-(ait= literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~=$uaSW-r_4d}mq9y~8wu^iI zd*5Cg`-0=iy+19*X}ea5s>n}cImUg6r=20NNkdSzLkLQ_bZR(G=@5cZoQqthD0sO* zC;`<)EP+a1a0;#os25oi$OyP5pk5SBKpw)v)Z@pFf1Gc8JL0G0q;Ff3=DSLYq#oV3 z-mWp|kx1(0y8oO0X9lk8GFCek`99qCLb{W8_oo->BB_p3Hg603yVka8*<9_zcdSm$ zWZ#xN!RgP0?NslgKVoO!XsqsU*T~hYYduTFkm*O_qZ^7BPGG7pTs zqslF2x=0E=UC+GtQw80k02K9BEC}mBk@w-gd^)f7F_*(f{D4V{!PC{xWt~$(69C`& B{apY6 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_23.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_23.png index 3b1a96be72aea80824d28669710232027429187d..53e24d15f9ef833de258793f76eba47c3afaf267 100644 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU>5LnaSW-r_4ambP_u!AL*Tdl znRgvZrGET#Iyd*_Y$iqbTWovkmL$gdH7=O4KxB&0l%}Ajpa3r*m|0-*N7zrycz)@-*UmE)_bz)Z$c~l0Pd#V`0gifOB*1aAvnnYgr)E`svATs{lTi zmuAXS7Tevg)L=dpsL^O6@$@d|c^2j;jT*`UsS6o}PPy|ZyBucxR4~O~Fvb4OYUjYZ zLmPhCq#kSDXC?DA{=zc*%6Iq7XC(h~XZNzWtmwdr-T4szL3{}HA3O+P0RRsIpaPUI z0x7^2Mwjw5*1!Jz`sDk%&$CSUZc8^AF`Z+Xa`E@88~09`S^s7F^mhb@7@#yGr9r!_{oF z{zqz9pEI8l;574Zn8Cx(FHfcK?m54Cu7-2C)xD0QR~DPjd0$CCnjGL(Q=MaNdGdaf z@_FwgpM1aW$=#?T(pdD%V$*r=FN-Rl?b*8cOia()9cwGff%d3=`qQ_g`rG6irxF(B zt$%CKcjB$9URU_JXz5c^PuH@Xx_eA;Sy=6ZFzdT zT=mr4Zx_x`%e8nCA>|X*Y>RM zSMdfbP0l+XkK D1-E;P literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9gL;uunK>+S7Cu4V(ChKu+9 zUwX%6wZhEA_g?eg+Zh|>lQYcpJkoZsbO^b0YB)}TQVL!!oQqthz$pRMMJ$0zUSO(8 zLr}FtC=gD;H39XaXae%!nm~GyHGzykSZE#F^6`IYZfu~OOmc{Z^)->yiwfbco3eod zVo%Qe4qt1(+dt5Z^V8Yq{$#Nd7P#zJZMuf@l$DD_QXXsEm#auIXv&dz+O=ZQBEcmZ_Poh! z_}nL)UHnJN@yiB%-^F{n6U*iqC0&^QEYPlXTJ5JhoAVQw{p|14I4UXEq~SVnVU*Y} ZA8zG*D?#p05-@rhJYD@<);T3K0RSq;xOo5o diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_24.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_24.png index a001bbcbe2cc11523d082ee723eaf70004c20d51..b3c01467164f4083d7fc9e84346a3df812690613 100644 GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBX;A;uunK>+S86ljax*I5__M zzx;OiaToolRbE0*x<4G9C#E3OwzPKdlC!&f8W&7iATmX0N>fl%P=FT@a(QujIchp; zYN%?kE@c5iBn4n4U#O$lyZp>9TBNR1d`S7))=vvg&U>vK z*w-*;u8ziQf0pA5-rW5#(X;A%aip-!R_E0L-}27C4Gf#>Yq#*sj2HVKzw6pmWG~yi zsmS?%-~63#tQVcJ>DcZXxp7Sw^TW$Olux&8l1Tj;x#`uSzn5x^gD4W>N5Tj?CR;c?paO4h!s`K5B5Mp>KO<^FtM^SNug zc7OF*iLbK?rf>FBJC)CVWv-(gTk5f!YOnX!o?d!juA`o-<>#yGE`HxWQFvZw5zCuc zhiQv@ETXs7{F83EntpOx>3Wx)(kGs3xbN?|*lhIpUG=lQ-~2SnS$48KeUtL$gGUDI zsW+$l=URRHJ!N%(n{2@S52^E2%h`5{q&_?A^dxfQuUQt4{{B2=X)pKmh052STCG!E z?`xebEh85vzhl|-)osnEN)<$0fC3tKTwq3)rT`wjz*xi<(Lak7um85U?)jNHXZ4GM z-iUA8b31PIy|Uc3O1-+QIqF!h)BMgN7TGJ!0Besr)&K!Y393L8T-5MJRB)>>cH$~;eszZ<*5Pt&ei%w zeqFu$*Hfk`>p$Orkz%tm!?s{SOv$o4UmsRJTfAVYzW9Qi`;M#6MTK5JYWrY8$@kcz z#b&=(iJfxt(QZ6nr}n!zz-i_$4enFU_g>6tG5TdC;-#_NPPnv|{pqsuwULj{-s640 zt*?LI#mu=a_vT9c_0SNyu&Q}O>6v7CPFMSu*q^;`S1{{+dRTJp@Vlw}=lY#*8b9mu zw14w0{KJ1`f09n>hHWgt}{OzJS$i1Dsy$U z)%u>Is|o!zAM2mb&<+ca+kR$8*31p3*9c2Ky~+CZi9)<^>X97bt$FoN!ycS;oaScv zIqUk1UvEz__V*O2+*r;sQ|@Wk%}=N9&uKowB&OB>nbox0xUBE!R+I&n}rgw`tEWg=s%)m!L!n(J?8wRMCOR=mRDjSVDm& g8@Me`eCrsmBtGMfn;P~Um?{}OUHx3vIVCg!0C=DyEdT%j diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_25.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_25.png index e7e285df51d0c4900f7deb20d68aa4eca626bb68..fa1e6e25b5895ac5ba59fed56ae6f88ceb3e424e 100644 GIT binary patch literal 670 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU`q9LaSW-r_4f9~z9s_^*NgxD z`&;)PYe{LicUvy??UCt{xm(vLX!K1Nxwe6&DX1wZz$<{ui_^HCUIjEL|{V zfyfjgAVg9CQ36z8Eta$=U;DY$F2|Lr2LBFos89K*F~6&rVJF|=n}rKoJ|#b1o={=r zqv0I5%vM~({C%&`_h|ukCHkDIQ#KyY32>6!d9b{>;2UqM2$wu(E5~$JGQY7W1s-&<`=l1PT z2QQn??LuA}3)k4Ht!d$1Y728Y$lWMj1G*cx*Uz-c<2$wYkIBJue@-F0%Rj{pw>`-G5jA zhcBEn*SvPm58=75#Dlj!pS$<|y2{J%*;6k+-W3pb$Gp}?0~n0af$OS#z5{hS0s}6< z2^;a#Rb#!~IdiMm4j}238nLQd>SGt!?A%~{UGd$l>tCmc$KQDqdS>_W*G?}_6>H@8 z-mKj7!rUq#POAE;yItMc9WQ5~h7xfJ;Op(bj2j*Oa)qUO<^t0lgQu&X%Q~loCIIc0 B4k-Wt literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9vQ;uunK>+Q|kTn-K*Z5J#5 zPk$EVC0KndzIts@_m5kT4a_)K(DzHud4r~U-DTAl0pUXO@geCw@c(z>t diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_26.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_26.png index 8feaddad6b908c18fdbfe7d3310f2d89eb3a7462..210343ad921e5dbdaa63b604c211808a823ce725 100644 GIT binary patch literal 919 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV2<;2aSW-r_4c;+q}c`{4uRkH zzf76I`7n8Jf6KYGpHyVIb^N3SPJVQswdSx0hZm=pqo$*#hN=eZQWhXwFlB+r6rm|i zK}|scUO>o&PykT^R*-64{HHp#M|N+&f85pI=DYp}-1E669$@!Z=cdA@x|s`NB%a>= zmhODB^YaYRCnuK7*{jc-`b0lU^wjp>JWmCSbAQ@T5fuLW`fHN;sfqfW8o~i?exLX> zHs@O{cmHW`pgg&#ZTI6ZyieH!+Au~ zum4_pD%7ElFZJuBfG1J+P5gt);)JR`Jye#zxprH{y~gBe%dLVJoY}GQgq3P*2=K8vYWehjlj9!aWlr=0?w@F(0>eci7`fsKa=DS&5wt5;orTqO} z#uV;Tf)o7x8pHiN7R-@Pu|D(mrp+2`vckL{NJZt>~4Qt|HneKT#vpK1U-{+XeS>Eyj< zw+&Z6V?3pxvU=g4)HAsOc0WJA`gpIdJ7vL|T{%^o@Ag#A`{$=5?G4bzE-#{AoOW+ai18DZU!o z(;SSZH?O&obuQC z^GqCfzMOQS=l-;d%PTY%^0>~d?d3^5SP|gFsX8UVZQh~X`6X!*{HGRuTr|C9UZ3br zBZj9B9OZ52mh@jQ-1YW{QO4c#cLVoHZhkDa;WZCys`07a8;$vDj{k3j20kccQL+Fq g;BaSwt*P~lPE+L?o$rXR0%kY{Pgg&ebxsLQ0Gl6|cK`qY literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU@Gu*aSW-r_4d}mvL*uohroaT zm)~A0-IAa-({smnneZ^~kC6#4KC&N`nZ^*xak-o^N)9Y@4I(w+VMAUU*D|@yr*-G zFL2wt(=QaoZRzEEcHU4ee8_Y^Xq@lDVnOVy}Rg}hepx0@Mn3aX1hD-TFY0S&fEI1 z(oH7x-K!}bMMqkXu5b=Iuj%@_)$iC{(e0Az?mI8d`SgnWYn#I5MKYxvHoqGdi`yiH zlz#nl`FR<4(Q6IuvzpP1_f)@?Zu05eq<&(W^Mk9hN`cq-jciZ7xPEqC@H(l~r%-#V z{)q03Tg_%^dukr*%e|@7MN{AZ58kJH;);fQ|HM`Eg#Q~Ii+cDdXiB%+&yt?4myRT# z)JW%BukC7CT}xpcfub26u_$o_NgK%Vi;^gS_O`tL$0)$K!h2CuXFf0qGI+ZBxvX+P-6c}olg90LFU z_gBBIqx4a0_o_F=OLN?$GR`bKn0Kr{WKALm%Tku53#Kd(nIbf$DF_4uyaKqqIK3P- z9W^ynfshrU0HOq_z)j{y#kc7nB^R_5NuJ{pXPF|su*YFirK7`5mZ#D#g1_r_#cM3& z`DuUg{;B|{nSDmZ`vaUfRi^|v?Y!u+{4gs^YVnk*(^JpvTd2b=Q{$H2(-_IWX^>xqInJ>=R?a1&r?RRWOyV0+k(x;x(rqtfc zI?nKPp@z0R^Az@lbN=#(f3;vv-I(8YRUv(0&c~d+zg^U`PG&yM-TkVS_35L@6E?}2 zUt5&3nQNo)Dg6au`V#iBN7^4n^E!62Od*I?-j1G^9xYpExTeK z_GMDQHzA*Ix3ajW1a4pc;&yC%`p)$l+H=e`)bsSKcXFR%4!CzW@0sqpQ`^6kAt$6Z k2h`xl6}p^WbFb<*G2Fj>vheb4VCrV@boFyt=akR{04Huv4FCWD literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9XI;uunK>+P*TzGejh*T8T4 zU+!vQYd$yo0eo zflV5Ms&ERX38WWU6UYd-CZJvvO+X&P!lGaN@zwLY-Ya+o?h{Kt)FSY7frh_Jkfox_ zO_fvDf^#LR%VPq&KAkXJ{(jXWk<`j5Qy+H)O<5$eRKwLWW8vjQrp`^3Q%>GC3cJ6k zhZiWJ)BpLjf2qsPPf8zW1WpP3|9;OD#Zzy&|ECx1K_;GVY&|FZK2+({C0#|w zu21+S8tvegO#4T0bG zzbs+S?K;83eCPd~f0bv0o3=}>$(3IjaaM%Gi_^12){X6@4tz)IY5e}2c-;JM?CgdMX`N!Z;$#6n_ef{qHk&l}` z1x!%>Z(rOKz!aG`Cm^onlEuQ34GUX}jx*V>HP49bXtuphDePzVtSFa_{X0$KqIr69{GYybW;EskD$ zRWf<&&Xp$Ty#wp2gO&5wrB_e99cyTB`}=O{y!Gxkcfak(O?zM7Ua8l)>G}QY?cY<3 z=F2rKzdxV#)7k2qiSthDmmKo{-<&>U`}*#R|M}mdQ|B#|ahYkErm?U^=#;Hmb_$Q+ z_IV3zWS+k0Dm}X6|LtpUe)p_?_ET$$@%y)HtxjCr9;0=}c*?;8o6gy2+wD&4e|yUK zso(VXD>kRLR(_jVbcpx)n^wOke=l-<&iR@Pgt4MeFJFDT>U83lI&GlF0H>YCr_P+# z05UjJ-|{~&4%3IYCfmy*<#Hp{`o@R|LN^`HTk*n zjZO3H;w{ey=>3tNtKp)4=5wJ&^>%T?YbU&)t@*zBvd#2AK8VBx4K{e<0);E~)MvF_ Z-rMc+bN2EbiNI9N;OXk;vd$@?2>_GORB!+Q literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBG8J;uunK>+S78u4V%f*Mo2B zFYjVKi}xGGq6K@(Ml=zDUOc&c$a-* z5qQexX!rBq?ZW-DrfZn<7CrkuwOC}S!tJxcQyc?lE!WW9rs4YYcx%~r-BV@$3^vO} zQcr74?%ecq>ZSYJHEy?Qc?Hf|t)aWcpm}l0R*|KxVoNpB^Hf|kPw5_7b5B*})CB|W zZ^7q!9>0s8;a%PmzQ0QG)B=Om$GT$pJ@54|`{dFQ$1DjAkpT#ph$k$!G?tgSCEr)4O+F(LUB{+!=If+crIJjJnvR+psv4|IS(YxC0)!${gr+nF zH3bED1#o$B0wIzDuoAF>O*!f7zT5k6pS`y}@OMq@>;CVbG~Um9F_Ce0Yf;L4ZHJWj z2=B#fEKbG-)a~ZK8*r|nvXrUv`SHZ~d+b=Rc4cz=*Yl>{z{nZO>>gH~Gl(4YJ(emp|sZ;kfw8OOf;%w%37JZv^f#X!9 zM_-i9{KieEt)9kCnXjj}`MqmkTFl!}4flWf>NBGC=DpwL$N4mg{U_%mz4cG4ED?-2K9^(>_HQeTc66&BJ#U1MC z(E^DWtkD9AHxvcHsC{~$eb>ML!aLW#ezm!O@o)K$KSY!F>YRGPc;0Gaq{XU0x7^i5 zI(<%(l}wBL-M&AzV0&u*|KHnh?|7cwJy^f%tomc2)|xNno6g-95}x~}x!UT-&EIpj zuH7x3xcxKR(>9IG^3q-!3tK+fOz~Hn6|nCUn@v%ZL2@Y5DK`!O$mM6|0E4o{h}rwu z$MAza`zjXt)Nsz(St0ker|i4Lf;m6t8D-sF_vvy^N9T=vj)f+_=b06r{^i1ZYRT~x zGhUX-XzSk(aN<;*GV^w`(5Vl{OPt*%clupXH#JUsFn6Bn!apC(?@n*ow^u@`|MByD zrS02IPpx3R+td26hxNJS@xt=mQ=bEkdcW0WUHUn@zE_{OnV!nuK7H%_i~5C<#{)n1 vp3sG+b8v9-Hlk(#lz;@~5O@Z#T5aFT$}@Szh20B)Igi29)z4*}Q$iB}ED@(I literal 676 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV9NG%aSW-r_4c-R-eChC2gm#W zFTGqfo5?dPN=Y-5?Zv9rhvzqEYo7Yrl%}_wA+Sk9P_;t{O1X4uI8Nyhf>E4{T&5^^ zxj-lZ)kQ3UN?vdZt_i3YSrfb3{Zi1wTJ z-pXI|)KR`q!5zD67Ac=vGW|u*jCPll>{zpH zo{`m!S+*xS=e$WInp;@m)VI zwRX0laz~%xwjOw7L8Fc;aR!QZctoSb86>TM+S8pqQeS24vzQ# zUwX@ViA`CN@psy%t5;UO<>kClTel?5malQalm#MFgr+nFH3bED0U?(crl=_{M;4b#Hl)^dcm4HXNSrMF6rL`rB3k%tc#o0D0IqT%JQ1|t)Dhb zymZ`rO0JsKM1zGbm)=O9Dh_me*dXMkv9QIc%6i=k2ao}NB}#$2yg5#VYuxqcd>S-G zR?mFbXPHxC|M?6*mB*CVE%&U#9ubx7faO>yOAvjfx?{V7|%iZA5rJ_pGfC3n6TFFIxZ zR*IasSu5EpzE@s$`}M3vpTD`Bv(tb4VE@hOSC3o#n&BYXvzY1WtInHwi&dr^)z~eY ztTEX?m6Dlb&iA zH!fYfkaewZ9rxdDft${H?7V!ueEHEl4RMFJb{A*HzM8pnSJ7$r?KjImzOjDQbkK8g z3ip)7>cvkTd+P3XykEGye^NkPL(%rYBIzj?`}IP z^z){$tj7PF6IZA%%=ZsEHg!>tx%0J27v2faQPtRezjEHr2YZX`{iIZHFF13f?1|(0 zn&!Kk%yz!9e!A-QuGM}?-1K^oMZfZ8geSc2ziuL2v4SSFYDK?y>_kMVYNIk P=`(n``njxgN@xNAS4UuS literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9dK;uunK>+S7Cp(X`^hQN3A znYPS34!!$y&u9NEuh)~63T-Bw`5>m?C7`;9B~S@MHE9T{b_fN+DaR=tLN1*eV2X2* z%M=AK7dQpi1k#JF31kFJ6G$(zCXf*b3*YRyocyjVtJ+2L)Z4-|OAVJui&G~YHuYXx zv?h2Z+NF=pa!(U!tQI5sMm3Cg;n;fR> z{y$A{sm9?&Z$4FrO*!l46@Pz`kMYG$p5Q5qOn!@{-q%?CNMNaktEN|=n|;5r)gqCl z8rgm&N{hF6c}(#RjPln!wKg!#;%>&%of^S0e1@B4uh-fwDluIQ@jLB;fCUlQ(4dEh c`JG3s35XraSW-r_4f9~z9k9*4uSvv zFHgUxK3DEYlh%VfDe+~(F1ESa-?quGj5w<(FhyueQ&3Y-fL8#Q7bg%pYC39asA{k- zWm&pl3J{7Q6hM@K74+YF`0b7Vw>b-1iZmx=$@6KLyGZsfeiSNwDrL&zj785srTh+v z>-!`)6?riG#2W#7H!wInZmy4%VHi4@40uh6c)A=-P+`HK4Myn zp3BUir$2N3mt{W19FTVI@v35$R6RC{h1gvU@fO%)a0ON@NZtqe4cYr3RRqK55}!u& z??36^$`(Dl8TB_=*z$XR^44vJr~a4eR6W1fbKm&7=x5oRY40sACZ9c2$#cs5ar&H= z6O-p#UYo-IT5F1Jz5K?t%OBfY9tiyW_U5z8m0$lT}N8;;D1@$(bkaRL!3I_1E(E>ftjds(*{U|6~ZY5PMOK0TC4zh~8xSN*J=>r_*A zp|SXn>VE$#g>fGpc7C;mBuZG^!BZ_X(%`8UCE8xysbl;X#ISq*oQdCod4$2!)z4*} HQ$iB}8|HB9 literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9#S;uunK>+S78z9s_!*NgA! zFYjPxZaOpjoMq?!sE1KG%&!{^PAfW0QSfr%T;u|wSOS&21XLHnsU{6U)efOR2<6hL z;W(v32u8s*f%GD40vQ3<1k{VH31kGq!kw?h^s_eX1V zPd(D8?|t@iW6aN*K)(J@(F(H1bWWXJyoM)u%Ay`_7a%cP*H!b>439PYTqC8HzEud^ z)>)(!Xf{(bcAu-{&-s^}+@~0>P7LfaGMeO>*!Ag|YA8@o*QVP%`lomomjt(IEcVOu zny^UZ>HTe~=k`q3UDy~HcCT{Y2a7fh^NvkLGK!eP38OQBxcQ@laFni5)&V^S#P;RfL8#Q7pIq_rlY2YDiE?RWm&pl$^wxo zLQ|T8KoCg*SP58x&&>~}-zIPT+x7Uz`x)z2AFpOeWxQa%c+DOOnQo&;DULVA)3~Q> zR{zL(fM?3wbq~tFRX(Y4wq*Fid8$KrpYo|y$<|^|dCtsV-?@j&f%EB?xAs!XQv&?r zb;Hj*TG;aGo5XwpC&}M;_@1(y%JX)L4TxGE(^K?y(gjZq@AX##zPasu^f;{hd2c{j zywEDAq>pL#YS(DJI z3(a$Xnxr3nBYkT6qMkp~F8FD97sLcC(+!@}VpOb@>Y4G-{JgP$);A!jp0=-Y-k-F2 zZARR#+kIa zlh5?Y+QwZi?8!@hD)BbJZGM5q<70id>@^m~G_8EKN5{SL`S;C_UEkk7XX+g`U((oD${tDyO>m~(=oqM)>y;sQnZQEzphA)tj z+@5t)IXm+8IkQFIO^+U5sd0ak-_OsbtKX@uv@3Iw+*%j5RZe{8-M|Nu<&(n~nk~OviUakX>a4Trv!HIy4ZbKTWt2~ZNF2_tohr#>4WmItH%wE%Z^rB z3O&91anbkutHlY=Hpj7j2r&kxTzCS-7OKENN2FkQsJ^{xzB25{nUcFDUcjuv;OXk; Jvd$@?2>>w_c@+Qv literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU{d#VaSW-r_4bxy(IEpKhrs*) zFKtK{6iSZVRFU5nYQ5BOe#6uraS>x3#zicFN?ro0P^v>Hut`Hu6;8QyYB)~m5CT&Q zUM`%AT&BP&xF(=p6iq-LToX_)iY6crVd1G4>T>7h1kcYel)2xR*(0^SQA3#N?{f`f zf41DkF&iTmt&vXa)JPZqIGsUx(V7yr{h#gaBl838IKE8R2-o@18JH#;eOn{_(4RkZ zr=~Lob`|}4TwmI=NaX34n?=X<;-)Ox^VfWxlE~9r@82$()3NE6#|p10&!)^?e8*Pk zl}PHVnNd@=F1}N^^Xi8^0aLEJJ4H^En5XVid1%h3SG_6U?`oV{k^MqYdD(LN*CJ`Z zEmOZ7e{gQ%1P%VKqG!7&YPjzFl90ac*_#`+-Jkpy$5c+g;2F5=h@p$5*|HZRsZZQa zd1O4E`+Q=zRPFQ1C&$jreST0sZM(+eMJwc<1O~e0%4xanRPN|9T;`4vJjh`RiWYc8 vpoJ+YTHq0Z5~h&2M2QdNNJNg0C40@~BTs1C^Q_JXrW^)OS3j3^P6+Q|xywwIG4uR+E zFKw4SFqP|vjYUPSru|f@196HsBL6R$zLlqO!IT9eQ-r281vLc)cmW}o7pIq_rlY2Y zss`&)79d1Y09FE4@bhMO{Q3Bs$J>QY1x>m7V_}QYpB({mU7H^7D8Jyux%6}Mr6tas zs#5}Hm1r!Kv3(hKKVVzl#T$H0MLee#KW9BveqXb;wt893+jdqjjk)qu)MR}$7Pee! z0qb#!+{gtq_e%1;gBf3IHBPPK{qpW?mBzw5cF!h$W=cJOm)i~OG^oSiZil%X?slL8 z6wiSa;PxE4?;-wQFlE_-nAiW;ulXLU{d~`TJF}U|ftGr!rIL;ujj4Qp_u#2{cUEMd zkZXTcDB1bxRZ7}|^=y?-cTCkd{qBgU#`-_Dzk;P2i@w*)k2`$#b&uThzQWAd7cL9e zSnc7gCw|d$c{-=ZO>(Pip{U2#X^~j^7*={wsJSSC$HJPGyT+(-sh*> z+fQV_sFG{_bS%Zz@#fb1<)xQai(AP){=_+Dx3GMr`QJ;gc4x=*-4N=EvMjTI9{TQe zSugjL+2>bWJzp8Cp?y46<&^q=c3=!TRhpgZX!W~VcmG`F+Zgxf>l2PIsM)k?UECa( zysssBoV8M^&(g|ohI<;F>MN`~tnW78vGTdC^*fGOc|DEUf&aeVn;Rc&-Mz7AV*@0K gkroR}@7FP$yB3z3{%P|)U;=0GboFyt=akR{00Yle7XSbN literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|ito;uunK>+Ov|p=Jdhhl6+i zU#emYm}GEs?nmj|xLifK47D1T4k4FL4aX@^O2Ny8bCJswI3=LEh$T?T3rsa>2n z1;Qz~CZJvvO+X%86G$(zCXf*b3)O9E-o!7zF1}PFc=4IO_$iD2)W!z#^=?YKJ2k^q z)9bssmorcf$O2L8<#yfOuHoIEA;aGJX_kijdDkg>?@y`Q_jh^D?^MC18h7Vw@W#$q zB(hY4H)aZma-F%68>p{;-A+S8+d9Msa90LFU z_ut;LnlH&hfA&^YwQw%axvkDJ?|w~e+sf0pV9ElKDMC}4f|`N?ynv9)i_^0ONAYx*QHCBEKo!5r)0T{X^@-<+9Lr}S}qsmuFlENl_-f)Lv8 z4lQgkDvh_6xLfNSY4tnOru~z}l=y1D1#8?HlwmFfIRnL|KzEYm6^LIUzJ;0q3l8;# zF|Yq$Uw+%Z(p9ef>yJ0@jFWk+j-{6JeBsov_Iqbt@BEE@b85_jH!}+t{cH1@l4@MY zdP@EOyuJ6!?t@otq!; z>SV7}trBHArMNl8?9{5G|9jpp^r8YN#n*!77ANWa3Umf6P<2}D_&s2@w$DT$_3BCVTss4qbWa@E$)`c;D?K_)48BGZ^ zXAE$%%qpz-mF0N6_gu?&d!eUS(oamhVKu#Fo!d;)zy7stGC#9FmVb{fo!JW1V4Zx~ z@>~F4g#7D>-KYP=_aG%BctS#t9*p?=@=E;5anFY1W|H2(l+57i>gTe~DWM4fj}JM7 literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4UUY;uunK>+Ow;oDBv%4hP@t z-*QeM<8sTL#`~h5LvH<8F!KY4fNF`7j0jCtaTsRlGOaW6Yfl6Ki zs*B(hToXtyvL+x8t_h?USrfxG2gker zFMYdaP&MI%{e&Rf1G81uZuIHgQvAoGyL1OjQ&3Y-fL8#Q7pIq_CJ1V%YOpS4S-N1# z0+A^~K!~IOq6DNM_13xm*YV1~U)Z!y?fd$s(0Qlksh;HZ3==EYF3fSUEV`54S8qBc z)?m7$bg3IDF`{c9}YyP~cPOE%$d4FTkpI_T|?qELkMs?w8^Q>pHvs+)^ zw~KP#sdp+zN9?@xw3bERE;erB?mYV0_nPMFZ6C`$U*COxcAvScUy}F#Hi`PiFZmRpdCrc^g;~zGS&3PYItFAqloL9`4`mQ&wFlnRKF;%311cnky zK!Spi_>gvdDZ~Md5vVcn7=aoCjIvYLt*zqf*KRwT|NF+nTW50K-%USXliO(Y+GUkq zkm-+`e_eCMCUTI7^*y_{i@YyUChcCZ{nKlM)IHIATNm1V+^I7~@V{ME_1(oPQ{v@r2RPmAGx{ZKA$4(k`HNM@^S&9~ z4AWTOCnKn^aE+|$c9)r3{Um>OoSF4vPGs(kyK&z&cIuvbvGvG{@7sD*7v5a%e06Kp zpU2i!7k9pLbI}h7*Q;>0{P9Afa!Kg@4($x3dZFOLzi0PxyB)YP^I4~$&ZFbKSFisU z)UZy!5^BCUsiZ4nZo?*q)bIKVZ`zFh&RKYe{i)u1KVZUnD(rqTH?VKdhxH~=lB&9# zQ{~=ImHazZ^2^M>Zh7mIn}XYnK5e}5b;emI$;v;G*B3w5+$ef#;@i;vHy57^*3K=j zD80$|^yb^Ly?HKw_s@Efz4z+wFa290;MoCp;3HxO63yS+!DFNOKNM&_q+bQpke%N zuTsaEV%<~6G{V3Ap8I#cSZer;uU9_x z_4EB}M>zx2`djSw23VV4Z~1)x-xjf_cQiI98`|VcaJuF$Rz9`PgXg@w(egD_z5A8d zhX2q1`uBpy;`iT9X~h5Cr#xYuL4SAAt2ssG3zbi`%YKRN2)4T@_*C3|rfFK|52H2> z-4dt8cX*4{PxVGe9GclsI(%%^I}CdEcSZO?QDw Oiow&>&t;ucLK6Un-u&_a diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_35.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_35.png index 6b5475cd36e27d99c080daa2943c86dba0f8e4f3..2b0946373fd21b44947bab2d8cae7d112493da07 100644 GIT binary patch literal 808 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV0!QA;uunK>+S96NlgX<4uRkH zXQne-NnM)zuBCYOvvjV*uR9tl_AW__HEUcjWr4^Pp(#y4O+f)(K*;6A>E)>DsHvf< z!McuSm@OsLjGVBF|PW zKcHRT#`v_+K>OM69e+OsNpeXnB*Q-t4@0~R^)Nh4U?Bnz6R-kk$X(*oSpWKO{L>lp z*_YmfTrSly!>SQ`Wj)shFC7<844+-IA1=#Jis WRrc;Vxeu5F7(8A5T-G@yGywpRC2Z9I literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9XI;uunK>+S8^yv+szu8!aD zo0K$EoGiaSZ{iQ{6mCC-2m?Niv>U7)LN1*ej#HqNf|m>DB9|#}NAR`bKmfzxhT;<)X>t%TFmQZqc(1c(m&%Y8bH#JVE z&;MV{SARBe3ODP|XTMke>OEBR z%jW5I3!&t$O_?(`&tvl6*QR)i^{`LR?z@GS9j=OQFn{Csf+HfZprJr)n00ErWkL-& egwB?oe*f*fFHM;}V+Alu89ZJ6T-G@yGywpadb0)q diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_36.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_36.png index 84fc40805211c76a1c12302b0d4309f52d145951..36029a4c1ff99e89975aad9f140f667db541b791 100644 GIT binary patch literal 1009 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBX>B;uunK>+S8+MT-qY9321s zUvAv}CMcQ5>AT{^p@#p&g!>8Pop zs=>OH1qhK8fR%t1%-p1O{O9>I=TF}1>w8^ZdM3X2lk~Bh%wm=gjIWt8yIhOV?<`_@ za`|AB(RY;%BByps+ZzS^|GjsGc;>Pvd=>q_O&gdtL7Prca^e_eC`p zm;c(HJIgRRz|uCPD4@jcXUTyDGV+fv8JkYo7+>sv-SW5E+tSI;V*}1fy_wkg-}-e- z>yyyQ&o|2nms!4cS!83q;7)CRgVCcC{Z)DOPlFP^XD)pDO!NJso?lvBE|yGUrw;Y* z`Sd+qVAc6a;n!qOIZautpM1wrvhe%gCp*oi@CMqo-c0mb!Ia9`_t;g#JxZv_~R)EF=G!Ed=1dAkiGyxT$>E*-|kC2Eyb-z{qxxL`&c^l&b zU)yZ5+q`{g)&8jqd+uB`o_3Qp_2{;cx7(ivq|Fz#TJVNr<>~G28mD$!KYRJ!ohMA} z#OC{FqxP@(yX{WzxfeHelMfi3n(s`~;_tQM(bxJ;S$MDOGWxW6p^nQBs$^R{03 zy`>uN>ZRq5mcJbj%su~xXA{rU$(tQb)^r{3TJ0mN`*%j+x3xt?*FTGzF?+) zs?1%-v_(Ao!@R5%!he0!aJ77Wc0peKX6sWq6EZc@b0Urj&+RL&o~ohkux!Dct%gTe~DWM4f)VRw# literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~2SqaSW-r_4fANq9y}@hQNFO zm%iN_{L^#OZcfYeW#zh$zA-Dl`q+3<#;rlaaY~1fODBZlT;wuE!OI0su>>l438*fD zP#r>nO&Wr#a0;dgq!(Ee$OyP5pk5SBKpw(EqiXlQ&+{ktPyT9?c4z-?pR!g|^ z>l8gu{${G&u_jVqGSz#+-orwv?>rM$YRtF$InD9!_v%1rxv&0bdyGCkh|)W?X7kDQ z8p>>c_uiek_{=W5IJHw}ls{Dep4hK@YP!qJj}emWht|K{ZnI2d^5Qdg-f6Kr{@>cB zA>O@7>)(m#Z@0Vbyn46Xb;`y6UsgXiNjkcqsB*=V1v4y9-D~XJRC{b`dRE}EeP_PD zEB@wttE~I^W*5t>8@k;8{lD$hnzUBzy!&2Xi_?+nMyED2pSt^96Dd&{c4nWN+{b@EU(8%y z{!vrRa>>-iXMWsS{{BS?-|EuY#&KWb?{OSc*^s~&VhnpX8 z$s{;Q?q+J+^l_>6&*~TJ3>LNsor-l_cYtx}`ALNq3tEh-MEO#iy}xrQEY_}Dou7X4 z`1xtpI_nm+2%T7`kuLi}{aEA1pHA*begOLds~>=#gnJXJ01*yA6HvkdqyQzLpb9i4 zo)+$@Un}?i)Qx`mhLg8_he>nZ6VF4r6D|CiUznl3bD zv30!Zy{r4zJI&lCzxtVK+Ct-M_V@E@?f?E=dfxlatLks(di}DV{+_+}?w5~1ubqkw z{8w%owR3*B{cY7gcGW2XWjjlpZ}OxbIwj_%F})e6!eRm_h=sf~9y>U3rpkC|EbL*f zOgE}s9L&CnB~{5oLwd0ftEJJjV2{Hlk)eYT7^!SCn7_B_4RVUR|6oJn7Y; UrTxpF1Cu9%r>mdKI;Vst09jKa-v9sr literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9vQ;uunK>+MZPu4V%f*NboJ zFPCa;S;1ji`RN?va;|5SzTE!UXmD8DVTyv63+Eyi2*nbpLtStOGB?BZOJ77bTP@fMA@lMEea>~pQ$@qu%Gd)9TgDV2fO z_~-Y%D?PrV|M{Xld%4$jIL}zrGq=GtvZh4+KmT2+Wg4!Ur?#{0RN@Q#r7J1k4m8KM zwR_Wp7jc3o?sne)k~_VoW_!)y0#&a-u1%(=>UF;ee-}*txu6;0c7&rL{zmpNN+_Xu s7$uZ|0SymYXh5Urg#~S=M&c^o)s5MkT=q6c0^^jy)78&qol`;+0DA+NmNqT2={4vzQ! zUpje7+E?Ts%Zm7^;e`r(z7rdsyq<5e=Cq=~6rm|iK}|scUIAQQoIvQP>8Pops=>OH zW$A(`Kq!Jx08s)~aN6wIuiqyntgEE$f3Cc@?`mzsr?ZV#j8B*U4q{Y#oYYj5Jmq~{ zz0@hc8P`K5XtO`N`2VznWaYxpMQ^H-Z-}KH+5FUaiXi*1+s}`3YN*@XcK-Q9mcdIS z|L!9tzB9^qWVh#Q@HdVWrkdsRes-ZN)?+Ht)7gqo3 z5qj$Pddhk|jm__mwZB>Md~=VsebUNTSNGrlyInX@uDj@x)zjq~_y5Lgus6m0bYh$m zFm3*o^8L)JQ*<>}Pj6W?egCotFXlDI$0~%|U%tos^woFG#p)T;TAJ4X;+(IXZpWX# z&pFLkYvCQ4r*~7=oO}E3%`Mg^cRA0COu4KkHra5SZ;1*lXh8vs684~g#ToV(kpqq% z?2)4ii@zG1A76i|SDoQ}?7Fw^d4=TjwX#ol&;6CAzPx{WX^+I>Cbn!ji5 z^|NG5u|D;p_0fvA9@aNHHMGA!y`j4BO#i`M$6xQMO@Hrwa(V3T#y!PJYQ5ox7ds=q zzhS%CRP;#q(wl0&6Gc-}!*2!5xTv8$FL1Tvv_(35FD>wyZ80^%lJ|+{_75kbzrT7N z-}?Q^Ym*59$M)2TpD39kyzk`R*A?aavc&$LyUuAOntJS$&lMrRFBKQxJ89oven&P% z>Qw&zgMVIHJAK`LWB*JMmwk1|Hmxak;6&gUK}cF%u2_x78&uWNZ1?YR+X z?Na%D>lu!uBL`JZwJzTC>;Kh7XLvS;@@`5$E@PYLGG!wBtuq>%{di8hNfze*)IHT9 z`}g(Nq*e{>nA_c-PD?sWSyb~yP<&%@-=lLseuzC~3v_!k@ z({V3S*6&l^{#`WCO=e^Ick|^n->iam-_SgDQ+eTu%J``o-Z6F||5kMTIhD8d;m;Ql zJm;;?HBAgm>uITzoR{wU>DR-bXEefR1<#WW2)o}YelzfTx^my2j=-xo@6Z32d)#1q z@1{$0KIKgb?-xxys8C%Opx_ngS0B9oow8TpG8fBg6%pHitAyOYaqUTEz4?3YH?6>L z|K=H0HKwVE)LaSwAy@h2>xUD@Pgb}t)e!Ih^io2*c(?J^(59MQ4^|4LZf$jaDsfrN oinuTa#w{#1p>a!jq{cm#m#*009Ba^N0ZelYp00i_>zopr068iW761SM diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_39.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_39.png index 50f71fb3405e4b20bf299566b5819c5468988b35..f7b73bfd82d5d33b5b19734ddd2b5e15033f6054 100644 GIT binary patch literal 850 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV3zcBaSW-r_4c-B&=CV3hl_Xq zU)qp*(N%q$&dGDXL*KmcsY@xC_1Zn_+EW1zFHSE0Qn=g{DHlx$scdZyH=Wg6}bu50a!=LX2N z6g@K*z0IjQCBO+nr2c20+jW!C|GvI+q^)VP700Q>DK~F_y0x)!lic!?#TxB$3Y#X* zuxY<^*?da%A{JpUjfE{jVB*vXcG>*01v>7MosZ8M`Ec%)N&UuBwS2p0fLxPN_1*Q- z(i*jb%m}BF;unZ#!QO>=79JkZ(13>rNC7m!?DhWq`k(&wm(q6g-x8s6)87<&JO0dF z9`@$RnIhxupHEtC?)N^rW2>v>?#afdS4*_4JFZ%N$17mnzB_eM_ur(x+JFD-t|?)% zKz-T27YJ9%TQqOFy)R5|dQV~Y|1Y+?is#!+H+>=bJF+mw=-69P4fknNc{edVef78X z)3bE9ycgvTmfVu34jG>ap0fMR^Eb9eQ#{j8UVM7ja(0RjtLs@F7uo523a10z;^w6V zgq;h#$7)&KFSAqsxF6?Q2Foh{nU;ZjlJ3sjt|R&V@pV0g{ju|u0@8R73AY4JzNdXp zK=<=T=@X$E+H8-{$-7@ktt|U(oUXHOvctMLLaXLE&8l70_vhP{Pk-O>6@9aNb1wKB zr$+c)<>`BVzTzvodhkAP>b1g^Y%`mTl8)c&C`x;!@vGDBuc~wTgp29ZC+6OMcv^b( zyVL8Ne$ITYGC`ZK?g`7c`}ezNNv`;le3vVA`pK6s-o}`IxS2o6s!w_f^X*-qa;E&X zcMLFd|Cu{m``o3_?WXRF5vdd<;(*B*DU}K#5;7>__HK{&Vp-1i=7RhxU|wPHboFyt I=akR{0405GoB#j- literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF>D;uunK>+P*Xz9s{nhKqOq zUn*dg@QuFqU8w%mvYJ_IcIaiK{p1i(?GOrV(h!7Dj#D~>Tsk%2l!BKF=OULWV2UMB z$xA?W5uAc+0_jE81mwXrf%GD40vUm@aNfUT*LS-gwR6!tb;ZKEM$x6xV@lw}lAlY( zQZH+iGj&DT7yAavi9DVDJmgLAltm&-HC#2l0=t5y{N=Y2z0A1$ePUo(e_Bto%TC$U zZ*j-sqyw)V&#cfpwU*hXOr`DlqLN=?Pwf|rEQ4tSnV`&X_3ll_CYw_yEavTLn|R@a z#%A^xbKj|Tewv`M`MO+ruFK1Q34||E9Srd^vS*P)2;H+NAp{I$c(9^}5HP&p!D@7r ZcSjAMKnmlF7GPvDc)I$ztaD0e0su}lt-1gJ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_4.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_4.png index fff2a550b3b043f89d863c6e481eeec601af2e4c..2a3af33f1803146db6c0341ea591d23c4fa40a9c 100644 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU^?pQ;uunK>+S96pk@aFhl@A= zFDqr8!gP84!#k_~M9gw1R&hA-YvQb}Jq`h00bE|3UXGfMni{G=$hwqe>4GT>M5YK$ zX$k^CBn4n4UtB&O6mv+xhrdXRNh;(>O5#9XK>iIN{|4|2D>e}N=EalscURf%C zn>6#aVdgntU_8y#n7^+yeLeS-tH)JbHI%2le!I(O&gWGO6-p=gH2h~4Yo79~zAr1i zjO*zZ%k4LU-C|z6tFVdLyL^t(bF<@9^20X#-g?sS_!Qx1Hviu2eib}NCn5ISKI7+i z9$nkIT>CcT6Ok#CpV^2#opOHX^2IuqCbK#=2|bC{2%Z1JXVzznDU%)joFaeuUEzGP z&N|1>!f^GTDZ&5x<##?Ti(Azp5pwnR&2_&um!H`wdg_(+qVoF+f`ygO&RY4*{OmDB z@Pzf^J)8a1&+NQvnEJ*1pHX1iof{ioTP1C`?6>(n4W6E$v4Ij{DDeT0u(_A@kAKlz V&?-5}4VbPOJYD@<);T3K0RYD1P0j!S literal 480 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 e)vnz9n@K9GS+LO1zC#8gE{^yA zU)tc>p(y6Jt9O;kv_C8r7JUhK7M%GYrr;%@x`-uE2|_h#2n1;Q!EDIG#Cof=?@ zbCJsw1uqvk1=j@9i>wJ`1WXf1FR~_(5eN(aTo<=_CYSqM+bhtmIpfcyj!inJv=?W@ z?sTpE)P7gy*yD{Znx}r;d-u~~kw~h^nefl9nx}&2+ZW#yTdMJR_0!!ufx;#w@mdMwKV%;PdGKIB x^${dckV6AG2+>0WB?y7B01tPhAiTDNc~+PlLt{|sd|>o4c)I$ztaD0e0swh~y`TU9 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_43.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_43.png index f5b975c13de31bdc4eae5b37b0946a5550288c55..1133b68cdc412972850271f05c36e777c7a8486e 100644 GIT binary patch literal 853 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV3zT8aSW-r_4c-B(Om-`2gker zFP*#hQC@>l!Q5@QkSnjF_~!lKYBsWJOz#8$5>JseSlQ4%&9k> zzg|}x2b5Vg+spbNyRpsb=a;zWqNh4I?{hwVztLeP$LH_gUE*eyIsUwEvA}2FpY*jF z<<2uLw=E9XciZi#R$b|o^~V@e51HLlZ29#0Jb$Xusl5J{T?^M(JXkR2gGYwx6o0-f z4Su(oUj?ea)XAJunsQg3GgRk-)^WDfi#OG|pYCQ}ne}d=j>F8a)?Zc`M|^c;d3v~d zr}g*R)wV)iZkC^Q*S-zxt6`YQEekZI^7(d4(bf4H{H~Her(N*UNWXJ`=kh&;E%rYb zguCv%l~fWr<>vGWXFSi=eXbGX(U|-`Gt9+OSa}Mo`SsNc=k$JzKn*)c=wS^zFQnjw zDu9PSC~#52AE*FZ1pV9J{Q7J77qi_t>#O#^e^!xFJ%8KekCD?B^~eQ$ITGSua;$Fg zLx-6Li2-)E{~2nyt39~Q|6q2#{7(nvZRW}Q%lTiNDa_e;q0(x{RJH17b;^lp@qr6$ zSW=(ZUE){JSlA+TYH8p!9X9KPo>?jy*@4Uc&M{_4yIbPC^Iv3<)u}%DXMGyGie-t$ILS zi_z;IHq|Na%{kjIG#WiS`}v(e>#_whwf05RuYT|OAI(}MJ;nH+%A_?Z^Ny!GBJH+?YQDgtyEjQB>G=4YcZ2mP3oM4fH3nj==LKGO_kQDv)vi*jb^XHkX SJS>6Pg~8L+&t;ucLK6UDc6TBG literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6yUbaSW-r_4d~7bxj5$u7Usl zFaLU1W7&aQdwVC&F<-pAlu5T}Pl7?aro$8kFBi^5E)a?(P{~U`brGCu(hyYb5DJ7) zE}a^VQ#yoT6kHQXFR~_(5pYdFy~vtCMj$Ml`R~EvxB4G{+8+Cu?{i#XdFPiu`hrg{ z3#**kX4tt&!6$HAZ~AVH%fesZZtc`?w`#sG>z|b4?OIvB_OtdWb+wwM8urJPP9@Bk zzrOO*r7d1l?jKV;_2H@g*2OWpr=Hx{*7fO)tybB`&F(+5c^2{PIUd=v=+FQE-9|D` zGq$(5b#HpqAe`DB?X=mo^7#U>r^f=9)Z4^IO??f%}=Z<=2naDSe(+{|19Lq zKG&U@Q~d2zO@gP`UMs&gMZE8Wb^Mn#f#gTe~DWM4fBa{H% diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_44.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_44.png index f151087e967f1eac6fa84db34fc4baac2ad1da2f..6020b9d770ef6567b0469209326e8169a35bc339 100644 GIT binary patch literal 826 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU}p4maSW-r_4c-BQL}-FgX6pU zmnrkR*bmNU`MYY9ccS902#s?em3dzqur>uX1qFBoaCvchIckEShN=eZQkJC)rYsPd zA_Rm;3Lr{=3Y7i+So{yRHPcv_<9hR>T7%H3r-qI{9j079W>Q)cV8`?H{znJSr#m(R zi5dO5Kvnx+tUt!6I_2>(hNp)E%W~QGTB}V7n6~&&iI2uY9oL^{KQ7p^ET{ffo6xCk z-T&Ucb^>a?-Xe7B;_DmB8C!+CG!_CmzSncEO$m^apR!r+*OC4JkQhjUbk{?@2k{`( zdx#K#`X3$wAO(mZs(i-Ucin#CajU*Lh0|hMx}TS9ue7vMtNO|k-nZ2%@#68*GZwG> zJjv8tIiSvJ=hbB2192ah?R~sw%7PfnkDHHIm7ZC>f41q*)z9x)>i_>+_e*+PZJ=~b z(#0D_YWu6s?kbW?f4?Fi&gR)v_D(IC*kWE_aQV&2)-ZReOr0~g+*4z={sle__4^FF zF)e}#(MXbm&RX}HvE)q{D*_X_GDV<@p8-E->SFY7V5eubM972-#vwMR`X9) zuDo|gzT1eoQl+nJ>&JEZ*WUhHG`Vo2_QCR;+|+-T1()hQ`|5v91E)izIDn@@P&}eU h6EGb^;_>eC_)~G4e#wR?YzF2D22WQ%mvv4FO#q7^aZvyO literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|i?v;uunK>+KCgzGedfSI7JR zFI`Y(Y)ksyoURhJxl{ho$r}o1K8PxK38*e&2~>hmO&Wr#9YTR{%5h4EkV~fqnBrXI zGDX451x~>=f%GD40vQ3*1k#JF31kGq!au*+<=?M=b<;)j)HMxjIi|p_Pal02#TcC0 zGBfD8@YAF~x#xmQH6Et{iR8H3i$qd?FPnc>(JS!SS%p(a7r*&s{UXaZuxpdesokco znx`&lq+b(WYMlCeeJ)Ti_j3AsZJ^S-!BZCX*d1RdwnD>I(<`tmXo|e;X3OBNOErtm z-1>4P94?IPJ%ke>zC`vOa+sid4<$^1!3qyZ^e_R25Ii7VrUc}(v;FZuH+#+NY+wX3 Nc)I$ztaD0e0suN7t_A=A diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_45.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_45.png index 407e8c5ef5ce7b9490c4bbdee1b699a2be9a3e19..492b141a2b76ccb6f7547d7a403ebd2cfd4e935c 100644 GIT binary patch literal 819 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEX0h;uunK>+P-EMNI}G4uSvv zFTY*BT$JNE+Zx-)(Y^*crUBdKGb3iJ3QQ52(iGGb6yO!W<;4kvj+%~|8mbzsOIemK zm;!_%2n7%&Kn0RtA8r5K|0=mj=v3Gg*?cCAg*LT10sADLPD!3w789^fiQ?uVrm_LssfyVM6&-5TM+Z*6K9wZ)CX_}!h8Vs z1I!0-PeQ#2_asOGN+^I7;0y(>Q)@W4{g=O4>?)J~b=I0QlD2WzcP&|bCwj#T@f}uq zS3k~;ovi%Xt$(}Gx8%UGy|cCZ3sd*)tz3Nkb=35tDHrGGR2R$2zCUp%Qe*Kp#fy(+ zZS`*&+}1Byw{OGw=j&?@rMwN^{q4Bmh4V@6pH3Gq7Pl+@xcYhPCV|vvhnzW|K7F3L z_{}e__M#v2UcOM1IkolUDt(6NfV8_heLqY(c1YC+`OB7u(D9)MbL~?>Dz&YTf_ey}5qH zEBVZl-sjT-KG+#%FI4-#YbAHetE&6FsmJXMzOK%C;mSM3-05e?gn)Y-saNy0)qB`e z51w4PM_{-0iK&H`?roTPVNpJ3YK(2#olUFuOf`C_p0|C+uXlSC=YHjW{VvzzXhrz3 z8ktjlzvrd*6(72{gDds>Pw)G|+x{5ae~8bTtan2zux#Fb!|?kgLF literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBGBK;uunK>+LN^uEPdAu8#Nr zUwUh|rE_lU7f0g>xog7K3pib8Kco}SxQHcC$xA>LN_7YYHfac|!YP+d4aX@RLSRb4 z%Y}21%M>^T*96pyq6x@@YXa&;(FEinEIh?2UpF`Ys&Qw~l(m6ne>hw;Pd$!wv9vff zCGyfUp{Ex#))#jGrB44hZPsv=6ij`U+^W&;`tyBFVArP9pXKS@K~r?sH@|zQ=@mH5 z{bz|kP}t#eqdM7ltm&-fd=j_ zI1gs&#zO>v#z2FDJnsO55gu^R5FtMNPJUtKKD9nC=UTiuFcuj+UHx3vIVCg!08c)x ARsaA1 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_46.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_46.png index 19e37819fe24e3d3a72d590ba7e452eca73e0a8e..917342365e4d93e94e908e5aa9862e372347dbe9 100644 GIT binary patch literal 975 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4mjb;uunK>+S8+MT-qY9321s zUp_ZiEA_a--FBARRcX@|RBoAR%zLb=do7WZWhu+j1ydG?Oc9#W6a<0+UIAQQoL-Ka zj+z>(K*)+v08s)`aB9oJ{@4HAj=h+3*z38KmAZzxZ}~rO zN?>-K^pwEkr}te@zEI{ovoLpokCgK7*xkZU?^im`Y%%(jyyB7aTJER2D;*_!jFd%cuA8SwXO_^CAyK~n|{#1oiE4ZUdd+tX^DNj&(&XoGeF7?Uf z+N18zUhIy3Vza>K#)G)r`9bic-1*dTW6_LChmJczGiA-IN;?wDtnH%-RZS$_# zEP9{5y?VJ!<<#?eBIz>5S-NQfZtH!o>Rz4neTs5}k)4u#Z}3<1-xCWr_k~x^-~ab= z`ImXmB)?3p&y$fge^e36Ki_-do?QV~tGgwmgJK`M*`0OfOtn1K_xtVIfOGFohQ7}Z zTj%|(TmF=5pxx70p;L`V;~&npEw7s%lNsB0hPC&W(5%X>_11CMeunl-SMG^k+*5b^ z{hwoHPg-BaOb@+(ayl@jzIm0Ly5LR3M4 gg>b~J{QZS_=j%ud_9egiff<#-)78&qol`;+03`doCjbBd literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~=?yaSW-r_4bxy-ys7Yhl}_A zU)tcx!RY(uM&|v=Y23cQ+Ji1XW;`pijUli}Lr}Ft2uithYB)~m5Q0&hi(IBCc)36* z0o6q;fl6L*3a$yL7g-a?2)HJoUKCA09>T(>UFP=Z{`c;2e=21q`})N!mz|zdB#+-y zJk?<^ki({0^TJ;lnWmV7_)@5;KKPqnd&e7cN2 z8EttqDNOX~^3qNti&H%fVRM$e(gHD!^{e7QNX{Tj2+Yich#^QZLbn+x$%8Ux+t zUI<Er)H7vBAGrd) zKXvzM2sA=Xy2dYaiWFMGh!n1i_*N8bP#;nVrq*6XXpqaB4l51*RzmPgg&ebxsLQ E0J3`gfdBvi diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_47.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_47.png index bd1475ba4d40d5859f8762e0b8f41ce8847f869e..c63ae31b4cd9edaa7afd7979cc87f75195819f1e 100644 GIT binary patch literal 822 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEXIn;uunK>+LPiqC*Zm4j1?R zUwU$$(gVk=m3QBVr%qNnHZ9)fV1?&dDK`ZTRSnjqEK3(mSs*e+2nd^knt}qn0=T?5 zy&N?`5TO8~1gyZWj^puf|LI?wgpLI*nETIiK@LxmSYMudj)t^c>#Bf#`^~4!ZrJnb z`{rx>UJB7`?{B~F_%mS2-0S&EOWTSzFIJh-H%a$8ub0N{IolSte0u)U?)8`d*)s#2 zEJdGAeCo)V%6V$)dRz@uFI}E=WU)A(053V_d@a?)OYXz z0Q*j=krd@9;RQ5rsn?X`KmR9hyz?qGbpQ9ePit?-Z%#AOGPrkh!-}V&yf&}@rk_jY zo+8S;+C|cK_RZo*xu-LG?Ty#0UjOsUE#>{^nIw10&Mdz9%I*0Hfkov(SN&c#y?wD} zA&<-zE)C_l`G(>eKp(nKDSww_z3|T$bIIbHQmN05nolXbzEbpjzB}uI-TgM__FWgw zE2&%9Gt2wy;{`=iZuST5T6pG0-7{B>uVxtuJ(G=@ zYj<&Hk@5`F=_{vOYTv1ix0Ee)o4FO}md-shbNY>#ot|GVf7*9GMs7-g(@vvPe%HOU z&$FI7wAfL6%H94+{cbnkPPrub)X)8-$&|?Xd(KqUnLXB!-YXk;diKZ8NXt{F^5=!G zNk6uIcltTi-_4y%1KjktznZUJ_5A!iZ}tf+P-6e1{Z7Tm%38 zU;g%vqx_Ns3(MCY>Fo4)CAKQ}x8saw0t#LNs*6|xl^|4;hM;PPP#~OgoYEoW(y0Na zI2XB0QSfqsQ*ccny~vtCM!+d`nqGm&T6g|Ri+?_)^-xWf{ZgPgx@V584W4qS$9lT( zQj5oRAwYk@y^rb>NMN9Z!cyl3NWf7k{65TMzOvEs$z|mq;=p)j@O1TaS?83{1OUcK B!tMY7 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_48.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_48.png index a7f87aa5f18c5608ff76540d1af82e5f2cb1bc0b..3b722c19c8d6fec47f91ead14f1fb12ff0bbdca0 100644 GIT binary patch literal 981 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4maY;uunK>+S8^lNK3>I0XLt zzkKfVjX5m^dYzHGSH&+Aaf&FqY#DbcMRu7(fL8#Q7pIq_rlY2YDiE?RWm&pl$^wxo zLQ|T8KoCg*SP58xj^v5Lf8smmt$I77ux9b^WbG;U4cwT|&Uw(W@mzz^=LH6~rvxYX zt8<>(Si6b!)NW}zBhUG9(@hTs$}flvaEs~EY2EZHBbwFG_EGI`bYJ+i0VrYyEUR#9|4qSDvQs!T(=>euCU@7$eaHLTaY z|1YfUmQ9f<2)+xW9+l%*f6_?C3 zez!!jekL=Xa7T|ANYr4Bm?=nc2UP%%Tu{tGBX@gv-Jk#FzxM5ZZy)V;WYhe0_Q^X} zpYhfPMwNuEW9;PlThFaX&Fd~oVJ>&6EZsZt^c}gUzg1%9uF?Kqm+oGcTYW_G$*I%} z8mDsCY2G*g^-^U`n^9Fw_`%*idE8Uxn@OCqm?C)kj#%mw6$j4LA1cm~+%IldZ*#2t zsm=zX|7oo|Y_ z-SRa%Hq>=};+yeGIraI=-KBB6{BGaXNZ+ftYxCvRee14%E(-B^w|>EzJwGEkQ@`wy zx$8dtW?-3}+Q}Vq{dcCN2KN1Pr6iT}A?;P#?DyY{TfJ$dJ* s=z+_=dzPF;$r|WUggx(UE&I>F@BC>V^GCJ=!0gK4>FVdQ&MBb@0CX(EeEE}E@BB(f>2Ewf~p-tfpE%kN{5h3rv{kf zT;wuE!OI0s!8L*OB5MK}0n-H1i>wJ`1j52K^G+206W=*^)p^6mf84$w4-5R)ZD@7j z3~S$v*F1q~^F)^Q7pa_B-mP+KW9=r_DdqM*PAJv>-oJ*m&#ED<)96uH%1VvZ=hXHu zIur5Yd|`Nx(JNye@zkfO4~zet$z3n^boO-gSx@8^eY*(k}2J*!8e|GFZzD)xsq!qdp^Bsm{oXhk<5*QGacRj z<<&n8TaYDR;Wu;7ipc5vdoIl~<>D)JKr|mH+4>WVL{AF}(a(?gB z?G8jFzo)pr`Je78S?VzN==9QQBB_t3x1QLX^wsvGj=pP- z^wW$P<;UVoPo0z4-v23U&f?^AJ0_>q7`vl{I7&1DV;UZ}=+Oj>GW(;{Tl8IEVr1}i^>bP0l+XkKos%Bk diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_49.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_49.png index 21c22e7d58494f1354676f0cd17ff32f20c9c847..cac64f490a53b74a0d85c6c5c8aa0ac4ebc1e5a0 100644 GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVA|;E;uunK>+S8+Ma>2Ru8#ly zFQ1z#G(G-+NAbkpA(ieb0=Wepo9`~!VCJo$p{l{Ulx69HDGNlV2mxVJP*YHVR{)n6 zr%L)hTZ!g1#|( zY0N*z2^3P0JIks%C09Y{8{?@DtDpD?tbf*cDRdL7>-RqaPLki3HGERq{?7Jx4-@Co z)lW(!<`z41rrwceI>miw*Y`bXjV(f_#HPglW_aqPpdH}AnR-)K&`V>w>r6ZKDQCC8 zi?jz?ci7KpN`Mp4uFL?SKj6*;`2*n-s6XId1$h+3t3U-Lhegr(Be(yDKd<<1AHCIo z^K)N$eW}#1jdHT@Z!YS$^_yRLgI9Hmv!By(_EL?7 zI{$M^o=G#FY7GdppSAK1-zj~UotHLSXo$O1elg9q(OB5yVEO3P@80r>-hW-$y)+ij z4?bsSa9`-uExuFH=e`TexRnMU_iQNtT0I5EN-p0uvLW^ai&@+RKpT+I#wE(ibq zpKo@&!hkXHZr)a|J*sCG_?PDdr0rns5OV3%aGV0A6uewG7r9J-j5MoqEV|ly?x>wU9Z4vdj%HlIe4-5SrkyzRkG7)YqN&D$deuo7tK?d?u#^B zf8Nlzo!(_sQ?mZodJWggo6cfOHC#2l9JjTiyByiOpb&$H5xRGQo`;7Ks&~Ogpad0i f_##<&<~!rZ(#Rt@Yg&&0W0b+u)z4*}Q$iB}YMHPK diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_5.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_5.png index 241fad550107b41dbc16697db2d2296a14248ac8..37315deeccfcfc7616d6a35471c8b9cf589ce6a1 100644 GIT binary patch literal 990 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|#C!;uunK>+S8Ed5aAs8UpYA zUz)y7tJlq!Y1{v!=YB4U+ZxH!e$-*Teb8pTZifJ`04^_1FGo#BO$}8bWL?U#bitGb zB2$E>GzEbmk^-<2umYdoM%Q1@zxloQU)}0`pG&_+Jd5xB^s-AXG9gsMeP1zK#|qw8 z98)BriT0Ra+y;n4u901vih8_`}ZsUX8ZW8 zyVg5N*3PKd{xy8zoV%Bucm6z3f6tuhf7eXYDe-MazmC+Zo(g}@m}+#&XTnwCxfj1T zdE^ph0#gFyx{W?BGMjQzW3@hK?}9V?ZZo9{ozlCmIe$^j_Cm*pyzh9k;(>bn@|L2_jr*G`PRYt@2(#@g`fzuB@VXt}c~g^TSljF}v%2U1d~$%= zA)B|Ar!JlhyQ;!|ihuH?nd*x-e^ZI{pO-$bxx7;9?~eZ$Uv?Een{FVm zKA(Lfdh@3M7g3=I31&z@LxUL}6VP}-!~{?QN>qUqK%;8A-Gi#X!ha)o_q}{qz3;c& z{JON`yHrnguzvaSdDXEgrhOh$X1-nr6cF86)tK7z^yP2Yg=b>QRW*#i<^11gmy~GR zdZ|#xSYdO&*HhuSHyi){|CKQ%@^s?U^uBkhtEZj5rcqy=dv!_jSECN6$gkVu+l`7G zQ{SmBwi7?KWa__HrJ?P6uRiXd#o{En<#U(|VG>-AXxntSXdYj_j4YtkX7% zzqaWMmHuaVT~j&i(dD%kMQ(dO`FXOP;(ML9+V<&PN4vcX=6u|nuJ4!L*d_CQn#Oy+ znr8*mJBzMvJ#eCM&93XQhMafOzR4DTEdSc}StMWV6yNmzZB9FX{aN*E(uGx$UsuiM z(mr3jIU%pz=vUxcohcI^pSa=e6xmXgve21Rb&6yA-}P=gtHi>8I=EdiUKIIweyzX` z(^H}6-@2|pvm&ze>anSna(nNpEGaSW-r_4c-RQL}-7gX7)* zm%eH3Zg9+SQ@$8Gb!xE4q5k;?-ZCFGnavQ`q#>xs`qzLojt>P07qb4nZ!+t-u(2L(#pQ?v&~Wsap@nC9lLEV3Z@=9;Lf-2m(A0T z^!tl+WS()YU-z}|`}MC&G=vY|d0Ttx-t4uJ=9Y{86b65Ka`wd#cNB$JiLWDR<-~l5I7ERDdqke4Ve_;*zV13MY TV>B>TF)(<#`njxgN@xNAW#+S7}eRC`X94`L* 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 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_54.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_54.png index 1bac19a2a5bf6b64c27eb9121838e847344f3b83..5425f4ad380aa70a87040400a7c359ccb5294517 100644 GIT binary patch literal 783 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV7lh%;uunK>+S96pcVrGhl_9O zFYjPjJITF#*W@|TPp6-9usNh+@OaWJQ=Y~JQx=F!5t`Bz)D#rp1%zB)oL-Kaj+z>( z8mvoMfDlOmSP59c&Z~_5>G8|oa8Kc0c*ccMb;|rex5EuWr{V?fEn0a){JrMFKjIow z0=8LLyB=;4Iwimn;B-^!X}C{-lO&rW^V65cc^cwQl}dgZ;*Obfg-)&1n7^P^=#-eS zh{nR4-cKwu0`!WWH3^+6OVxi9^Y-so zYybWADyJgX+kUPMnf|f5dTZk*hNoX7Gnl7@K4w;(60ojm)2Bxej5aTzP65wR{ zQE1;C*|}E(%9uG*KR5Q*eaYIo`N)Up!U%tJ3ze;ssdu5*9 o%1Go$!boQ5=@1f&*WR&z-^;aelH>gAz=Y1=>FVdQ&MBb@073Fk7XSbN literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9jM;uunK>+S8+ybTH>u8zO* zqqqwm@;`Yr+w+dp72zhA+iZ!mq8l_Er*sIpbV4Z3MJ`hmyjvZr(l{udXY7OjDTwb>P686$@L&M>Zz&DJ@%~N5$8#mv Uw%E-#21Y7_r>mdKI;Vst0J0CR5&!@I diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_55.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_55.png index 9992de551a37b1f49012effa86ffcff3257ad0a5..575a47fa89847c0d2a3aab20083f146ae15dbccc 100644 GIT binary patch literal 879 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU^eq~aSW-r_4d~3qSXch4vv5S z``_PPel+3WnHN`=Ywc!Hy7)}-@;}eXSA7~6Oj#f@MQBP>P*YHV7Z7rJae6swI%;aD zYOpS40YW4NU?pG$GdDfH_I>ik|ALQqNC#*CKL6KDW3f7?mxeQc+7TB=&Zke0*vvg* z&R`sHu7qv3r_D9?nxrQ#R{!_SzLYMs^gn zmY!P8f2kumWY_)40co}Eaiy8EMc0~)o(JzaZKXPedtpt{VLsI<3!7^{<@z1HY(AxZ zQBRF`hU%1g`_yGVynG+*W{m05&G&82&$;r({JgRJnVQ9uYYfVrXSODlP4HfL zrmA9wU@9v|KBp&g=s>~;8anU*gascw0D%fnLKvg~cL*b*;O5@V-~K*-dw;vw@BdrO z(&VbXS8re2W0-nASi1M)^n#|FZoU6%V@OTKZ5;*Wz_5IM?x*^{*UC6w66 z@rpWw)i?5^S=pvM4h(y{J=I@rO7`ME+x{*M?0XS1<)Z)b@Y^@oQjbnLu~Pf`<`*rH#1Poq;DoOX(MDJ+!PbdBxFkI6^M zzE828ykGdlt3sRDnD(LvvmZ%LUl}<4_=>k@tDfmP-!v|qxMN|=d)eloDdoa53Xj>c vK3#u1_Mu!U2c7^%Bwq{JtanF)$V+d^05LE3Df>JJ>8je#sgkTisB9|!&UM>(y zKy?vIppqAyf@=cmMb-o|0 z%F8a+aJ8)6zGlYJ?w~35^~XY67QHcjY-e;T&)ezl;uy*2*8;=zIp0bwE%gdqwoas` z?%CX8q13=Bcc-_6-QVdFDe+YJn&$d_9@^^yUl#gz8NHURy1KaZWUTiT%lnUFuW7pe zT%eKuFHwA{hO>X!vs}NUZ=$EPyGic!e&HE7tJd7+;pOkaZvJOB9jltHvAKL+I$zee zbDz(2&NR0=DPFu?WAmaHa!(d7Iy1|rq-T>7$L+NmFqGkgghroCB zFH5GzS|4?rl=|nNPq{C{@2L%*>-(>)IW559#p&g!>8Pops=>OH1qc^RSs*e+Xi8I1 zQ&4~x5ON_DK$L(LthfD<{cm~E?f@rF)hR&Y>3R#l8+srXmU~_PS3mha>-7^o)uX!bRbgK5rpLc-o|zPIbLJtd)PD=yWS*Qk z9`V&~-440)Qq!l-mszT@TUWMMLFeZUuQ_k#=5?G32=jG&QX29!HuKlb=TYAol5VRm zT*v*^y6NWM9M06m{Z~)DzWO-8E|%LS?SuHetIj(OPpx_%7RHj=EIoG}GyfB%Ddp_- zPs)|v|Jc92vu^*z(tRBtd!?r9`R_Qj|H@QR(urXWP9$ RPXMNC22WQ%mvv4FO#o1;O{V|= literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4UOW;uunK>+MZPzQYPU437W* zUw*=D`Jh8$Li&<9im9QZ=4>)*H7p%ME}a^VQ=pWBmkZ}2mnm>cKy?vIppqAuYSIu? z?GOrtQ*cc{y(pT1JhUSv%mBM=r^@2RP&*SapcRKr!%E3hkQ%KE~Ri0~vUN zd%K3~%t+(n*J7!cHCD5|ux|UhNaX1y)988K8t4D~-~Dwb530M6Jp&34cnF|-2Iw_- p2%vffYy?U`Acr1OK>T^ksQ1zHiulq?;lSu(@O1TaS?83{1OVW4pThtE diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_57.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_57.png index 32f735617b8a1039ecef65eaf71e6cb6de3cc4c8..cf468634c721a0c33269a99560c6ea41cda6fb02 100644 GIT binary patch literal 817 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEW+S8+MT-qY9321s zUp{%S_O`&1c!&9`ZZb`i>UnbJqcZPn1D2+srl0_?04^_1FGo!f)KJx6UCOd_!IT9e zQ-pvJNdZI&NWs&!><=RThgaHZENl_-0urB;Ct1(q2eH6hFi~_QOWsSvdwWI>yJKbM zly8~~bzFBA*#=ZCFNqD9^~c!XM`K}0ZosSxn668&q`fr4&u!iGs!izBrsAKj?5DgJ z)x4SG5ZTY*hSOE(&W1P~tFwXrg8K}r0O56@zhGWp*YU~X-v4f^urFJ;`kXpsS|fFN z#d+b{J%Sp_>^fBsjMa^^*6a!>>pg48`eY`*xGkfo|I9bbORuHBkeQx*Dt5os56SrI z-TrG=e5|tle)GIx;XSv-Z>o-W?byaOW&QIRO`pQJ=blhMbFTWiXu!YHKYCM?#i}mP zpXBfKbAEB!qCHoq1$?=?ZMW0>o=8-TYhPF2 z$Q8G;*4~$Ye0AK%_c?aqcVi}6D@uMglS+LW-<4iF)z3xp@7Mc(#eXLMvv&EqaZ~=R zPL18qa%E2C%Nq$*UhBR5QBLCLmH7tw%7Iwp1v5#aME<;s`cGG_W{QcO^AVU87(8A5 KT-G@yGywn*9%R)3 literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4ULV;uunK>+Q{hybTHht_R=l z&wSgkWBPd|Cfn7mU7KuDHnq=Rn4&^M>aD|8~ z`~6-dlKQ3VSm^|f{=Q4LOEne;mOWGUxCGsN|Q}QVr|m zQop-EjX65?B`%dIQ?9@3)c7pe5eV}u`ObDk1Q68cM26G13dXsXD@)W`ZfpQX6N9I# KpUXO@geCwrm7K-^ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_58.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_58.png index 5394d4c1fc5f79471cb93899bd0630b4d9b6459c..650819a573a51c89989f539844dddd53436261bd 100644 GIT binary patch literal 931 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV9xS%aSW-r_4c-B(P{$`hrsvs zmrs7-uZvOG%U75e>Q#E|V_P2G~jTAs!QQx=F!5t`Bz)D#rp1%zB)oL-Kaj+z>( z8mvoMfDlOmSP59c%x#~}|D8XzwB+64CAqPZ#TxQ0M#;Aqwrncdy*|f&%HaSvUH#t< z>m6oyT{2BoKDDAWW&YNMHH@cD^e^h_H`U;Go5{H1QG!#Y#HlmgUsrY4Yw$b$y+uVX{H}+m^{FG?@m-o>W zb*q4V5~1FTJ|+Y_8sdGqx9m*FUcD_CN#%Ftp&|1q>~e00o5>?f^v(aY&dWnEdinp&M3oh;GagE%0W^Vt_ zQ-9yO+${aGphf6Z*X4S%Q!8Fh?RkCPZ_2{sAEs=6^6Kk_%Yklj+WVxQzB}jQU-{pQkAT2tdC z#H#X3%A#oR#L18DJ~m={I^}76<@0d6yfeF!&+QPYusOAf{a0`Kx2cb}{$`W;y|VmL zq>z_Jd}q<63STG5UH6wa)||SjP?fc;DyQ#OR{P*<0^djoVurp!P@J>)6+*>vbtMAr&g8PN^$i zJbmWQ^`7R~ul*S>(|~yaISN5J0-h&eIRaS$B#x`f_D_xKWvP|sybH{H44$rjF6*2U FngC(!vFZQ- literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVAA$qx?fa)TaKqW6Q z)ubV)+94DOr{J1^dQmh1d2mf2y~vtCMj$NI=BtbOFKKz~)b|USYm}eIOfl~=N`A9Q zB=zNv|C0MPX1hv${k}>6i$_N6Vw2@D5~)`VH@&~L=#Ijv6YhaWlYOV~_ZcZK=<3!y z)$TgeGIIT_Ki!`k1LwI4%cg$&`C`K_vD5?Kj@-<4v8+4iI&;gU6Q zEcIE_+fz5rYBtN)3m%UUeEQ0Iy2kAH!C`-U&+D#TUB2VZ@);WHi+lDR4srYW`n&fd zfz*34TMx%3mn~F2HGA*N%>uh?7Ac?VU3}(NTIUa=HVxepr^R!4i`BeV=Lhoni>AfT z-+Q7{ZoLNk;x#w)PX2mUdDZEHx)pzi(QBsq+n1s&pQXlj7=3ptpL6`@Gy&uQqC%)T kBH|AkF}R{}QtV#FzT4W@mdCoQ08mdKI;Vst00;8$d;kCd diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_59.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_59.png index 08dd72f45ea2a060a3c92e32c67ec80c28a11560..e44295b9a8c9a61a3514720600de255cc8028e56 100644 GIT binary patch literal 794 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV0!53;uunK>+S7>Wz7l#4uSvw zFTY$Xp4&1rvElc*m*L<^bL+68Tv3s%rj)nHx9vUI_e1tL>~fUqg3DJZ}zfXj>1 z%TW^q5egtmzzXE-InUp>*ZvmyQEI^*fn+s4jfFgnlAJ7F8vj{8ru}|#eZlF#b4<-b zr@|CA$8|5rVPy2uxE*WZz?o{zvTn!1J3>#_S}c@t3GTd9>!slxxbLR@lz?p!I~TNU zlARzO?yX@Sv30>7hNmx1whEmpQx^wnUOO$o=_cQ@)%hBy6ZZYJd#W=*^mj{9@QhIZ z@UVZE5vZwK)drl&cCr! ziqAgD$#JjzNyX}Csn%1jK2Dk2^5U;s@AfRaZLT*<*Sz_;Qs#Zcl*Q^V-lp{Ce6GGd z^RH`z%-v;4dnSI~VtcCN+88;sAkODsCRTPn5vw!60fF>~#RBae^0`gxx#^@!Ha z!)xd8iMOoVC%tx3fD>ox=iMTKk7YYIRXLTp-^`raVwB*t+y3Uw+^IG~smFNV&3wCQ zUc;WsT|#^Bzln}^U)-~=HmLNlS7~?6TG6HMEO=bdR(~ezopr07>puh5!Hn literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9#S;uunK>+S78uEPo6Bdc2hD^vm%Npp`qTm&HELO%v^VANGJ3Cw}Q>Mf|7I}I$Lu>ID z>!ljri|0tjPg&Gsu@j`g!D`;LMK%wv2&Fb_yw6*w;VQX(C(xujnVLW|T3>$CJ+;Xo z{r>VAsS|yMu9X=xLjA+b{_#3bsh4=xS9tsF>7&~;j%Xl-2a2D7K7+S9AvO@|24T0bH zzbs>{)ktiUd{FoN$7(U%VfOz!G!R@Euqjb*nq7u*p^H4)NS_=j=fFXgZ64Hve2x)`|j zv6)k)`&QlBrjoHBjEm+ko) z(YiZ!w=Brn{6N(Fo>Qgasn~z2kGAc;xKQU9gX)yG3=W(yH-lV^;%1TfsM;{P)^NUq$j?1z zel`~sJ@mi1alsvq)ZN|^0r%RArY}x8*7x;Y`GPwchW`SX;Id#HYZhp`0 z!sDl0EQ=yDj-K0YdTP1wrH4_sCbyn)nYnjyT=|loeK+=GG3{OuW2hcpx4g#a3k+>0f!%`f`oz#!q289tXO`UpTub zx%%m$kb6hxnLaDjFg|w9A?)LNv8&dv4K?g*izSo8=az)*>wodnPKwlI21+S78J_iE<*NgA! zFY7qe2+XWBeXdf+x>sxAHO9ng-VGX#Q#yoPIw2J2B9|!&UM_HoB~ZyrKy?v>>JSQS z(hyXIQ!q^+y~vtCM!+=z^`dA3@(>n&TCcumUhduFs$PN9*k+XkcNAUL*x%+NmFqQwRR4uS9L zGtZZ4O}!!XD$M-T@6bq9<>o&76+OAXzd4|G zipKSUUozE|kDrn;PR=WP@BVbpl0`B%f6SDX`TO_Olk@-Viu3;c zzdiT2;iv8H3wr+CUa>LFo@Zjd!?l0w-npB^X^01uxr7*=*IsTPAlJ0%wvBV-k7euQ zdhI@HSboY6(-)C1|2lVXaQXT6RRLjhXV=-DT2p%9gla#Z#_l)AUkTk!4p`?`b1Wh@ zz-`^#cYnT}id$cE=F!hLJMIR$ojJ=lMYQ|HZL#y4&wIbqIa2N@S$O2sE`dKSA2w>l z*50?~pS?49^51*i9%twxn^&)-y)+j3{Nq|5^P%rgL+QSDe$^?t z{ga{t+-#~sE3eM4%r1DIoFbc7D7RH*N@=^|ugX)a(#4FwDHqMVy{IQj<=vkrl~;qm zOntocMy0BlY2?guu}u@+*W5kx*W%s(7d`KuyemvQcCWJW`pbIxu!K8ZsQC$;qoDZ- kk>#Lq3Xk@$wtt!JJRUCmTX%auFjF&ly85}Sb4q9e00S7n+a literal 685 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU@Gx+aSW-r_4d}uNsAqL9321u z_uu`#FKwl3P+*GNnOvz26~}Vs>+3vAX6X=e>C|wX0;LqZTsRlGOo3AZs*6|xmAt@I zlZK#bhfpA#f@=cmMbQN0!8L*OB5MK}fv|A1`IF**`Om60*&Xk?U7mg|aC5!Sl(o!K zvO!NKr01;G=wAGWv#2Csk;v06vNw!Z{Qnn!WkUMfD{nOB2J^98+x)n1QO^y<{ij8r zHZMB!C-X;a-IHCeJ3XgJzCQIsNk(^n`rJi6eMY}EW|lsx+maJ#r*mr659Ru8^Cg~Y zh2L4k_#K3vA3(NLIf7+#?+-DYe{_XoYTyH80cezYaUSGD=Me^%s zamm#8I~Qnl+dY}P-=2HnFOACd+pduksqarq=mxsQ)b`t47kk6-|+RUt9If z)?&@Q)O8horKO5tf3xndz9+;4i!AhTM~*B|e8XcHJ+gpN2ajQBd?V|{8PT7#>aG7> VlT|dE*9T0744$rjF6*2UngFL+76bqQ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_61.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_61.png index 13f6861f60d3b5aa4da80773f772f3cb3adf4bfc..2b1a665fec2fb10b1525b996b1ee403c88d86526 100644 GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV5;+UaSW-r_4c-75tE{TL*Tpm zmnk!Qr6i;?UVL92lX}SF$x7zbTm4hkq;at1%Td!& zQ$rO9SrG~#N{40~VCTT3It8f2U;eK4 z0|(Bh$_fEaGhf9Psd{PWX|z8$>y%{8acXhkt>s@X+SZ&ge=g_9y|nzKNVky2LZ9AE zQfI;>Q@;JS)>zmgbZWE1y910%t523#ENC$jN*rCPRbsBrU{pz1vB^I)( zPH_lxmHgU1&ycU@sJIo97vP?NdI8}}pchbl2~t3OFu=m8eL>FKuaB>NJmZ}-<-Ojk zm#%5@=l7_%->gpDD?X#v=JO<()bo?&cOH20F;3S0*XI>Ge}3C@^SF1X(W4tPAG^wk zvwqt4c)=Zud6kWz(3|xqKYX$Fvn9{VH}y}i`zl))FJvk=r8O|^u6^?+i&Os%-b(O$ z$=`ozR=QB9%jokz$teL*waz=`m!34&4{+jq`f{@U<8P1JZqJ(g85sUs1JnMzy4n-^ zpLe&A_4B2Frd{X~cU~sG@O|*U%10BW?*&SKGB*ESKKHu$dHoq{B9qtJyytwp)bVC@ z8bg=d#Wzp$Pzr C#UsxE literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBGEL;uunK>+KCkJ_iEh3!7ULi0~cIp2q+upq^zISK0 zdQ@PPYA}!LB9YWr8mn7xYO&A!``Zs}=y$FnSD8g$bZ6@E0SyV2S@ymu`g@n>j`Bz1 zOGAxnp598_A+%J3HPZCd`nZxKrAH!aE+DxZ;b4fLkv)qXLg=1F2_ax0!-EwX$jEx( f!Rj)_;40^5mf%xN3i&62vB}`+>gTe~DWM4frJk;B diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_62.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_62.png index a248c8974be1007e2a03e45f87b21544eb040fa2..6b733242e25af762dafb4d9e7b8ca461a148692b 100644 GIT binary patch literal 952 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6OLcaSW-r_4bzIq{Rk24uS9L zU(QU;U%?`Ma?;%ItE1EV{mLkhj`TONh zrD-fSfA;Qw>Vlp>&e6S>Y@a?zOI_HrLt*px?f|EsA4R#nG}`YyQZoC%SAO)i`4sjA zJvR=#kuKNZcmK(G_I7uD`JPwob7kl4Tli;_o7X7;p%lg(Wc*D6VNj5-DZ%t9f{mh=tzxp3YOt~4)e_J%=sMUg) z4_Z5aNqdFXuL<>k9r=5@oluuVZAy(%$VaZdhpqbLIYa9XTm7n#oG)1(P6NBG6G>?WTC!5ntP_-P0NVLK({#)mVb5)?E3Uc+Iz~P zH@l9w@;r#VBRV}lFi#-$2t%6x9oLZ`f6)*T>9_Hby}w`{?=S9p0PK0wZH4ky}esr z&G~WCEbMAwxZqPIYxcnJliXy>mp;~Y{H9kC)>*W*a?b7+2Uy@E0uT}h$bpX%V|W9f o6A{hONJr5Ni)K)a)!elI!7wA*VX6EPU>alaboFyt=akR{05rP_VgLXD diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_63.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_63.png index 70f9c631fb015f1b3752c9fdc2b0aa7a700ce416..7e714ed7f104e20838a279b8660ef34e920c13f7 100644 GIT binary patch literal 814 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEXFm;uunK>+S96u)_vC4vz2Z zFK=MX_&h=N=DcdY`U_iLJy2QJBfm28FbB(0mZb}(ED)I@G^HsB1OvPRxV$*M95o#^ zHB^C+6`=s41f<}UZv2lO-?!fWxbO}`stKRQLLO&HRu(S}`$ZK@8lQix(_HA&$f7zW zz=;z~JiTdd6r;vP`cRvD_4d_IvybsC>i_+vaMiO(eMZF( z?zY?i-jOf=nq$gEeVtby%UpJTin$aJS9vKve7pMn&(BJi#D(u=`T4SX^Za=3Dft^* z_j^XJUz}AZy5C~+bE8%Dr`Oljo1O{{JDGQ$|J32YvYNW+1$&DA&NSR2>Ua0*>L(vH z*4w;WW1YG><(=W}yDwbc8qTX}HqO4SmaVsTTZ@ueS9m0ET1y*{nQfJG@Zt2!j%D>Afvq^2-I*B#s+WxkZ+1}PuLg!npkKnbEF)w<&=gpgoj8F9r zueUKh_m6!`Za|&%wKe7ovOdV#Jrp*5tu-NcTZ;;Esv|P~et+SXTqU;j@Il3szFVdQ&MBb@0NHwEQUCw| literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF#9;uunK>+Q`zzGejh*T8T4 zGw(JE8rz*H@Vj*X(yQLo7dsM+534#%QSfr%T;u|wSOS&21XLHnsU{6U)efOR2<6hL z;W(v32u8s*f%GD40vQ3<1k{VH31kGq!kd4)`*((K|LS^E;nXV&7tK?fG*&YSF4d4< z{6i?9sJ7ZG(9KC`sfMejS72Arltm&>Z#Mg7{Ste6Fz{WSA5hTkQGp*&lX~jc^WV=r z7hY=n^!;xy=7}2HXYJc>chObz)Z0TMNZM29JF1Izyo{bQQQ`ic_Tp2A7yHOBSpU!5 za|-WbpY^qO_6k1TWpG4;*5M(z)Vl#CP>@1$LMiipzi*OUla&I1QOV%x>gTe~DWM4f D_OP)R diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_64.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_64.png index ca664a71e647a23f97a76711f5c6c41fcdea20f2..761a21bbfc0b0af95c224cf55357b01e3b97b37d 100644 GIT binary patch literal 817 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEW+S8pqGkgg2gi5y zFTXM6Hf>Znop#@+-YQce&3S|8dij-+(-j4#2u*1UY6=SQ3gGhM1VTqmM@p{|LxWD#82@mra7;?CpV?Nsi$evBVUH6Z3^yk@mq5>;<-MZ zyzibHAE5U?!(?LPrn`|`9vaaL3#PSPiWKtFn4fn)NMK5CK-A)vO`@kl%O@^q`SkI) z$&>&+=ge(3=R1~ZHud`cGNSPE}bVRzWv>K zpKqHj`es;UZ=b82v|IFXOq)@1gBzdIv47>akNZrSx;`;`%FXoFj?K0kbyn9~hNb)Xzb;H5(XP><5&LSJ->5U6=nm)b!e8=*1 znC^%34_Y>Hp33j9ZrW6ot6$_Rc#2KKST1<)hd(Lz7u;b;Re3kjIDh+6WexGgJ%2oA z|D3U=$?{iQ+Q`zz7_=@2gi5y znYN9c3foxICjGtbD_q;nc$@X8$#jOmCJjN=4k0Mz(y8G%r9%itaV~P1qTuBMp#)SH zu>>l4!6~>Vpk8E6AS2+KfO=6h0eJ`upLU8bwyiIlqkW3i`H%IK7nO_dn4E}QnDU3y zWoN7<)Z$vbL}TrwMIujM)VMn?(h**2 z>=ihz%jmW4Bn?-~KQqLZYFu8lC0aanrN-MEt~2W?uL-sUENTGWg qIix^=4GUiMkOBoZGfl%P=FT@a(QujIchp; zYN%?kE@c5iBn4n4U{neE!2o_1*F@%rDLe#dk+ z2%VZae|gWI%{En@FWxM9a?UC5%Ne`hlb_FAf3Q~e(Xmdsy<5X;gyu$GirQ=cQZ24^ z)xV>w*W?>7yRXMxE3sGxHS~dDPge9m;tvvoNG2fS52yeb#r6L$eEhfkR7LEzk8kc< zd@fFZvrQviX2yw+>*n1EeVn>@4yW`f<$p`k`om>YSRQ^_dG$rTgx9yd_h_sI$`k<7LJ#*aJF7H{PQ+#04i><(X$l&Sf=d#Wz Gp$Py-lddEH literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~2GmaSW-r_4c-RU$cRLgX6pU z%uW4HDLuRInuT6kW8_pLCm>xkC*Vw?xPq5}>LQjvB?#4|A*k9R6bPprr*sIpbZUSp z&P6U$6ueyE6kHQXFR~_(5im_4y~vtCMj$Mlv(f1I*ZY^Bx~;#zqSUT$@3+5`0`J*g zu(i$%n_~NVj;!Mo&TT1EB-wX*OAvDmsq)R&`AZh%bKgHLW1CP_q!hYS>#W>~DSbv+KLf4nj-1#P zHDy`LxgV=jo``>)7#OFkY&GRo_{lFC#?5nVFT9L(OPdm!E1BAQ@q1Qa*i4K2TBovt zomRU<=Jo|m;dZgKny`jlY*9`}(YGl9{!;?qGj7ofp5h2pxqOfG)BTgPOQu|PdwttY zvherGu1(K3pU_;mcJY}T2j)K4bln*-<-gONr=924X#ZQiNM`56tIsvvZGMZTJ~Rlg zC|z4#9qo2#=I{F7jef^8HUv#kzQ4R@&*nWgU=d4YX7I=y?J}`y(5txU*+Rc|IRY}TNe2uwWkOXiO?veN?ZbC7M=i5;}Vh_!0F)T aDR$AX$8^sy7##*CNd`|>KbLh*2~7auF&*Ln diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_66.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_66.png index ac4478e7be420502661af062bd42185ab57db641..e4f326bcfd10b56a6e59efc0bb79b9703dbe7697 100644 GIT binary patch literal 797 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV0z-|;uunK>+S8xqDKZI4uS9M zFP~)N*tpjGrq%YY`Rf#HWLT!XeC#fD?V$jN7pIq_rlY2Yss`&)79dRJ=$G4I%eRJeY)$CfCFQn1F_>7Zb<+HX;5>I1wZYu2mt2<@( z;y-Q6tE(5Z7_mNECvFtLcHSpagEf`ol&DXdr-pO-a?NB1&eW35;Ho5{7Z)1cDIAqYm z#YE<5VNG30@AvDU&)X>VJAeJS@As_8!joHWlefe|d zZ@5j~7T!)XP2O#Po~BrJT8A_Blg`Y&d(+b%Yp)l# zm7C(cF71DHp4zFarbl0VTp-i%>CLXVYvl*7vc6w;dwqafUCI5Ky+#4|?yd*Q+B`cy zNmL{JUctr3jyHFx2o)LzZrvLmu&uVX$*64Fn?DQLrvz+Uyl3;-i>sLf)cVA?^025* zQ4X+6-Ky|w)vZ>)M-@}Q*BI+{S#7W_^VIm2tn)f~bP0 Hl+XkKJ9}Ep literal 515 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9mN;uunK>+P*ru0sX_ZWrIw zUoK^Dopt8RWlQ#&$pK%bPMqJRaORV!f|r2mB9=fU2-Tz^sM;YE2&WvUbO^b0YJe%u zMJ`hmyjC^{})r&ml z?R32<^K|>h5cbONae;jOpY-N!pYJ|pkq&3^D<`)p?di)_X$U@@s8OC|SsP3#Yv5*WBlzP78VVv3mSqMoixS+PKosEys9)W2)GYM%OJ;G%iz zt^Br6Z=$Cx>e->1vQYWd+nXyN+dciFaNK?7hQi#(F;gb0Yc`3bzB%*6=-371P(k(? q(4X+&fCdf~LWKnp{(`Doelkq=c%go#j?WnwxeT7JelF{r5}E+l>Alqe diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_67.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_67.png index bf11ed2284d659e672f7dfc22234739dac585a35..36c080a50d30a7121e8b519de43545374fbfb95e 100644 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV0QF$aSW-r_4bxy(P9GuhroCB znd!5=EX{=Ot`*x8KlN;n@`egNh2lL+(qxx81b78-d2xC$amt2@qoN@+nr-&^}Btdm)u-ZBoYp0asz zIcoyjDZl!I>CZ~O+U2%>x||Z{DB1XuPvh+xr2I2C?du6fh#Nde|lV#Uto_iw85%y6G_ z_nOASI}EAErn719_iX;eed?XJlca^){@A8X98dXPPnmD$aZzLU-L>{ysn^P1NP7D$ z{y%-E3QOvtC-+k43Z3c=I5%h2yso0O`3rgeYzbcg3l8-PMB@E@TUK~^o1{W73|YJb>j7wbsE|ZB`iBdPpz5V-luWee|oRn zv4}2Qp#}+7NWema6&~`?a7TnZPytHRfD~Yfnp6MHOZNQllu9q#bMbAd^!qb&Vs55g zwVA%KXU>8%o$@!+mVeyzY*|*FeEX+YPfF$aPc@vh`uslq*eWaAfB*jWJ&v7we%0e` zXM6p=&F{OF^`PbQtR{ZUiTYq_vb0mimSKyb|Rx!66ZVEhE6nQ$@ae+j?dhB{8hXA zf}AF!-#dLY7V5Bas!qui-h8;RrlAz&yp^>FVdQ&MBb@00Q5X A@c;k- literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~=(vaSW-r_4bxy(P0H1hroCB zFH7dP#&R%m-kbe$)m*iM_JtGf+D-7;%+ev`(y8G%1xhJ+xo|FWnF6N-R2Q)XDtUpa zCJjN=4xvCe1=j@Bi=qk0gKGlmMb-o|0%74|`5j;Xy4d{dyZ-Uptfgrhh{naE5ao5O1zn@>+ zX33^*yZb9N&@I-vU&8R~KfNLql~WBzZBzX;PdNql%~_S#TlB=TyXevG+OKnhrc8IU z{H(XoE6}a4HK#;vPjvpC`9)_tjrbc?5|7oeGT?$5Q zky@u#oOM2?F@3(C@ZFw`rjUTAUHCg9Vj3ES@CZNtoB8I_hGGp93148cV(@hJb6Mw< G&;$S~iS_dU diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_68.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_68.png index b8d71b8cd59e647bf2de379280aebe67533f02a8..71bcf6b28071b1fccc99ab32c3eb8999d53ab039 100644 GIT binary patch literal 712 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVCwgDaSW-r_4amb&|w7$hrn<9 zGw(XAo$%pr%N*;+-O0jE{h14`>XxMO1}kW&YOpS4S-N1#0+A^~K-d)26cpeUz~#m1 z<){gQ2n7%&UD)|M&)1(L~%+oFe~TRGV@ySZ}|NGiR!# z*XmM@=!IL7+J(F{7Tzh0(^%LdbgF#umJ5xW&dQ#cCNL$~zv`LWw%%fm+Y4hX|7*{e z*2sPzW8j3{nGkVYkl6^ddlkACpXWRO#kP7Bs9nRSmmKT4wau% z%hea%{Xgr&lS)gWr*A&4I=;Pn&hoR~x4)yN4{TurPeAY_w6gd&Yq#M9?FW8a4+2vt NgQu&X%Q~loCID3~EMEWs literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBG5I;uunK>+Q`*p=JdUSI2Mr zGh-W>`SwI#h$0;2`E}amHbCJsw1uqvk#S*CGC7`+pLUjlQ zHfac|!YP<0kX~d>AS2+KfO=6h0eJ`ui@xdKnuw}SY==U(VneL|EjB>y{OG$?KD#Js-Ci_r)$%% z^}d0>d~g1pA+}WG^r9_M;;A81!rm+rS*qds^XLvRy|ZkJnAM`5nTPD=GJ1%KDp!gaksL*|l98|#2hKDa|P_-16)p<&>Y@PS> R4=^4XJYD@<);T3K0RT|suIK;& diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_69.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_69.png index 524a58fcad44a324b40885c21e3a00097189a764..4b8b508a0fba420d3cbc17d11d4a636b17fddc3e 100644 GIT binary patch literal 779 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV7lb#;uunK>+S8pqQ?pX4vz2Y zUp`^#W6oe>ySQGE)>D zsHvd}gscb!5G5c5r>^Vm>#bkAhfQN)Ojpr$ea0yPc6Rzx#24TB+5O>d^}?1!(#d$WBDXH=* z2`$Jj2D=%ni-BH(dkU%m;cK9mP<#zifD$YLx0t{IvNSkg+qa+EpCZ;?-FfUy_T9bL zk1zUD=A0&Wy?D=>$7yS9e?4=XoBy>mzS-y#TZ&xq)41>RzDrH9t-n{jXX06zn}2S; zpSibf#cb)leJ_5O9clLa_NdCyThhPw4O8kv~vC_jar4pCz}0CPObPn@54i04eNTfWR)qFNnJ;F z7s;-7lQg|>R*EP5ze@F!XVLAUzl%&y-FxgBpM31r=6|Q| ue3ZZ6=K@Jo;PBtVik8}N#@(xRb&NZVB9a-Zn&W_poWax8&t;ucLK6U^%ujXz literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU|i?v;uunK>+Q`zzGejxSI2Mr zGh-W%iBBn4Hun5KE9tBt>v6`!w%`U0$0;2`E}amHbCJsw1uqvk#S*CGC7`+pLUjlQ zHfac|!YP<0kX~d>AS2+KfO=6h0eJ`ui`wn&U(KI-T)`_)uXodHC4r?H%a4mbJr-CN z$5DP?bg4$YAsW|3lxjm*c~)wk;qf&$DLsMUSQOV4x==+O{yxVerV**={9;a x(|5w6o>-5LKw5`_lGkzu)Sy6wU*cNf)ekC{+`h2>E-(TaJYD@<);T3K0RXxEtT+Gw diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_7.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_7.png index 51a24906e6c09e259809c3a23ee279b552627282..4921601122fe24d0b02d69d72c2333b136db8394 100644 GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV7ByhaSW-r_4fAZqQwRx4vzo+ zFQ5EY=NMndZ=o+MPi4h0O_7s6`Q*pMw$d3)j+%~|8mbzsOIemKm;!_%Q-r281vLc) zcm;5IaRMQd0MJe8RI(s05gVK<5PX+jmH=F%rMbd_{Yld zro7?*>Rh%{p6?%MKj(S+h-J-zKP^UX9PT9sYNdrEZ1{d zB($L`)MiS+Jh{ixP8thy+%0pxIZjPqwC0{rlhCQ~1#9kHX)9tl^)lM&>iumFH#>^j zYft6>pSYk#;MAJ;7mT;fSocqQ3bWb+u64`b1Uu~%Jf$sREN&IBPvYsR?Utge^EKkT zj6P{DoEs2T%kT2@+jGsg!D5Tg)P36X>aObJlb>}oV(Z&JMNFCaJu^5kExExcA!w5r zzi?n!eTXwzp#%v=NI*h^5gyX8aE6C8NC6}&o*rkGnO|>o?CmbO$GHukq>ovP&oE3o zUby_c_i>qir^;_k#>d`Ryt{o&y8Y9s*7&(Ab|V6~7w0M@pKrhGl%Be2 z(Xk$z{l@Eij|u+W)$_TzNO?-&@p*N10ZyE%Q%d)L+5b*dd7b*NKiixu%fH52c{(0% zEfVnhJ>|Q&&{YlPbNSv=E+1QC@$Qt?4zAQMKXd>3{akkT^XlZ%#W^$IYkr?{^>^9D z@B1VT7Qbf<5BpMn?)URP2|Ww&R4josMHq&g+QDYE|c zh0^HBUoY}LO_(An{mFWdcVG025ZhBzO+QBd-f+2G^^k9h)9ih!A%8P&>|ftIYx?T% z^U{xZ+w2e2u%6#`&M9(l<2=Lr6CW@AF|%P)_MJ8PiHp`LC!bq=T&moEW@(`0iPh`V rf5lgpCCF_3HI2xGj2uO_%j4%QySegS`4lZ+USjZc^>bP0l+XkKtXGdL literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU=s6maSW-r_4alk-ysD72gi5y znR^?;6yIz*;PYtuv8bA`gz$pbU7tTd4Q@|8U zpput>>LNG=*96jwtO>}2YXa#-)&w#FVWC_8j<0u>w(U={uX`JuZF-MAP>a~3_!cRSB_`9#z{Rrv%00M>(ZOu2~)Pm`)AHIvOM)d`~2oUJ;CsK?yZ|%r$4b3#Kd( znIbf$DF_6S6o8e074-Pl-Tf~)Gx@3An=NaVe=|I74p7^+SK9H_4CkE>T>5jqtKYuQ zsZe>Q-!alO?w3oy!)@NDb88!nS~g|%eF?2*_0qRGtD&9mEW3RRpNjRK6MKYG9~~&4 zb0Tlbw3b8c8b24@D=mE)x39^lD4rHkn-hI>XTTec=5UDgj~kD}XN4wNrm)TlUeWbJJ_DIe)VB zcFwah&QHqy7BOX|`NO{SOYicxr9J!lZSTR^1<#{XzuS~Q_nkjGIZ$o>?OSqB7Pb_n zPqCJ*)-ZSe`E9kz6yN=Cc0InDeSP(l6YOf=elHBTR(H7Qc~<<+M**hqKYBaek?L$aTm@catf$+2n9B22tp{wDIG#Cof>dT!OMknk;@b? z#S*CGC7`+pPQf*S^df5l^5B|4dXY7Oj6hfz_U4bpf8$O4bDv*$8R34;af*1CQQ@1b zf=jN&Op(_6a-#76^B>yG9_xPQE{fT@_e-lB=i2Bg=|FW0HNxL2*IvITxKw=ZBaQGn z-q4z*p)Qvmx;~p2s3x}WkyDs^riw`1f+x*YSMM&Zs!=_aFy+2jb?KCsUn_paekxL4 zIPs|1)AyfWm{{!ho$_+xg`3=_pC7L3+4Q(4Xv*2eKK9b(vI}MhoAnwA9-o=pwdv=a zOG33lHblxNy`@hDSf_5jJ;x}C(hK9&o60~Pg&4X#4S06-@Wqd5hu>4JFXfDu}ukRTQe=d$&xQk%uC!#-(9ls zt2FE3X#!LJJFUKVU|S(yD#w|1$rV>Ce`c_7NGybT1L_I5KS7>A@h4CLSpfkFDNtC= z>iT5y?_Z~ca?%^){mP$il=T}|uQNWL?J8O8WaR(t-3;LXzuCeX=EwRZHcO{|d7l&i zRy$zc&+n@ryUst8-+y+_^cBwwz8Y#5PvYJD$0=RwRNwh)Qy<4he%<}-{ZT=)@7xs* z_*AyNLH*UwTQ>R?)~B07D+5cP9ews{_e+)3HFbjDukMcCS$kvGYKBzaQ=E>L5>MaB z-3NNBt}j4s;hx)CoT;C$et#8RarJiX_dW0H-hT?!Fn$*ivo~n{o&%AU7hTSte!RV9 zky*)Rvz^-e&feSjD!lHs%&Et6_1#9Isn;sG%Zu5kq#r+RaqZmsGlAMM*M52zf1cRJ niku$N;|U`o!3p-&y}t~5zaD!QA8X|b%oYruu6{1-oD!M+MZPp+gD+u8!~O zU+ySh=qmGI_RDoe%O`rxb2+g?;Y`7j0jCtaTsRlGOaW6Y zfl6Kis*B(hToXtyvL+x8t_h?USrfnuWq}>f14Acg>(Kn zb{JWlnE8FaM7xGGYvuFL+Q*zOYfR2-pDS*(h-dCh7EQ0sOEk_-O7je~Q}U92zG%*_ zqhW2I>SU^?Eb8epde}Kh!_~6XC$OvN^#4m!)V&soJoTU0`RQTcy}cV2iKO1iiIi;9 zaE&yI?h2Yxn7FR%lGF0aDWa?IuQJHt?EI9SvDs9JuJ=gcP`IzBB#GVUc1pGH(Y)FN3G6pUXO@geCwt61A-W diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_72.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_72.png index 054b9c231eb17962c9c0fcc2b5e5eacad40e8c3d..77d2fe98b3a4f0445e72cd7e12680594dd05828b 100644 GIT binary patch literal 981 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4maY;uunK>+P+JeX|V&94`L( z@1HNPz1EC##>a|dcHytQuSym8aj?bN2W^a7<`Cc&z~#m1<*4bXsi6vltV>yzE|{`F zWQx#~rXUbRQUF#0R^W4U;`QhD6K|ii>g)P#ZuI~7!ar?>Rg=>EijM3{Q$8`{bC`y^ zgWX&ejpNV$b4)4cuSuEo?^pR|HH%lwXPFAp?fV^OmYP+z7aiOF|ND-)0do5_BE{dnKen!8)33-P%~PSm_Mg*t zOP^Ym+h6pp{omUeO7A36=3fmztlRtPOB)HuXWyg?jOG*W6IUA*X|4Ed<-^uo&Mp}Ozq#(E*NUe z-*c;!{pp(Q#WOYB4>;}okW=}UwaMQ<&iFZW(z%EifIrg7|3?tfFR+H*-`{hz-t+CRL!pVnvoxMKag|92msky?M& zNuBHItJ;-YdME0aZ2cIu=#A0J(7>{vLEBw#a&k|Zz35HVw3bf-Q|>NssFXO>@w-s) zacT66kbj%Dx=L318z${}rC}ZWZ_D0gHC4&xReMfp?2hf&?Q(8&Xdv zpX`=fuXJkL_tNrxswM1CePXl&w(VaRyB}k0z{mm}3?ZAabpPd=N?8@Nj>gTe~DWM4fMzzS9 literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4Cdd;uunK>+LPaNzDoZ4uS9M zU!Jium15bI`E>89o4%6G_8PA~HYV{oH)uFc=@4@1gixG|T&5^^xxguwKqW5$)kP4h zLnyFGLr@h?!8C#NB5MK}0oMf7i=qk0Ls)23?cVo#|IGQ5zuIcOi$DJ(U;OEMiFE#; zCkp3pTz|u1bnH)H;5QaaE00BQr2p$K+VlHpHQUSm|GT9gM6#P`H(3AP={hBH^U265 zg8Toye`}|C>aDod%;l}`-@4a*o4hDy?*vWR)MM$XGA*0mey>R@n{xZU(5ZQec2amo&n8Yo28O&I}Cu`b%Rm|F8A$O&<3-ep|E8>dvLWzI)cfPxrFkoaSG0 zPb~HHzn*uW-#CQXY!FCwo+8LzaqYWZ^xpF|XKwBC4P?tvF1|K%@A+{16*mLJqSxjN zrXE?T@yg_eQE}>hp<8OFCWh~R=OS5}DJ>b*6x zHyRX&o!O^0@8chvq&LC4f9Qz)OnG=RFpVY9@Pts{Hok!OX4+S8^dCdj_4vzo- z`)}``x=8ELw{_*h=O=!;)XiwD>hR*n#95|3jSHqM5Sb!0r75T>D8LH{xx6^N95o#^ zHB>cNm$CpMk^-<2u!72?E1{cPmSq~a~w1^mN%v_RDE)1(3`SU~ z{XDxcuK&{$%LhCb8VhxtUuMaky0rbm)Q<~VguFED*;CkjG#19(I~d?p$?GL2<`#&vOl*2dFJrBc)x` z9(K<2l>80ODgOKB?Y*;n^8a_~>BndPtrIzQ_i0$J`_0yKC%12y{Mx8__vfP3+a7aG zx!ACI+TGlpp|=@R4^=sEKD{<^{U;4cOa6BMP;T0$lWv)41Wz&QJbCq{RNlml!wWVoT=7R1jFB0 zKmO_R+&l1HAG7L|wSjImIxjUBo(@d2eKo(={Pkp|^TBy+LN^u4V@whl@M^ zFTK6=LhFnvD!P^YceGxV&ylpz|6zDs*I|l+mkZ}27YM}?sN^M}x(H4+X$Y!z2n9kY zmrf1GDIG#E3a$yH7g-a?2)HJoUSv%mBM=tueCsyn^^85=o-2AeZaY>W{`i@JtEI@( z%L=ZVC#Fd#T^CxqGo^Y;N0E&ew`AZlrj-8rg+Zl#c$>?yEO?f)i}OrOO*K27wRU(c7a_%Qx^T1ub_QM zWU0nw{)j1yVuY8rp8KS+zw&@^v3InS+sTU;FCE*daeQ%4%g&2}Phw`27v?=v*Fppl l`M%{ugex?Zi3#4&dl?s%f1Ow|%?TL044$rjF6*2UngCm)xOe~n diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_74.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_74.png index 5b33ddfe77604b947020082ac072dcbe4364cfa0..054746c0503bad725a2775ee6e49bc823b94c18f 100644 GIT binary patch literal 1026 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_R;T;uunK>+S8cVa)~t4T1Om zFMWN<_ozdfn(&VMmU&k$O^U0V^y=fpS)~$8j+%~|8mbzsOIemKm;!_%Q-r281vLc) zcm;5IaRMQd0B-ru&pYSHGR zZ+p2@^>&(=U3*ny_qsqmS4$&?iSjq!ZmW>vRe4=% zFP3`jh|=qMS#tYL^g($e*3)I z{&b8`laWN~^3qd*Q~ukEooZ8X*K16lFR)iK^^4H$d;i{9L!=(WRTU4`oidX|o5`drR%)Uu{*! zSXp}LGHdGBA1-fBzxs23`z=;bOd!PrBqp%N12CfCQ3X{1k4umVC~*l=fEw9XP6x^z z|GqwUTcwQU;{e-x<@1fJV@?Ikd+TwH;qKkCV`lF2l8?@aue{e)cvJ4_3x(L5bzi=% zI```4??6L6@4&tq`$s;-r3cpisbe`c^Y8jQ{i_NyjW2dONPgXY^?SLfhIJnQsq;Ss z=hYqlm-_pzx_{_oLk;oys^wOz*RuVLnzH)bq>K5#gwIckUf6SF8&`_jspWH2w>wL2 zEi)?;>$a%abpOYTzbE9TA79iXv0}4i;ghCf(^D^+OOHxDy*B;*Ovc^2=AKYpcBcBk z&A%t4ric5Kq)o3%ySHNZ^tWD9?jAe(=67-ahjji9QSNUSe@`^j>vxs>JEPcv^a9x4$1#|B9Pvw3dz3`0GnpchIqwK0q{ePa*UR1Js z;`-93Z@pEPz4&f$^{jiA7;>gUj|hyI0_VDwdw(;k6mPsZZ}n4eVBTi%boFyt=akR{ E0L&-l)Bpeg literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~2JnaSW-r_4f9`vL*uohroaT zm)~A0eKaA>NO;G0neZ^~m(Cs=j?0@AOE9@`E^?Wo;02`wR2Q)XDtW=F4xzv%4M9~f zTU6z_Wk`v)d8y( z$=scORnSE~WYHaiQ~CSrQyC=Zf7#w`R26Vg_Z!yLR>BH@n;- zrJkN(aJjeXcJ48_zD=)l z{;uFN`ut1hafryqkkW5|u0A)K-r^!Dle)b0)J2W`d&8#iHp^JD&bzBvRW#+Ich2@+ zqhF<~uWPz$o?6-ZLT|g|dbgQ7by5}??_9ij`)XTU zSnbxI)4l29DaR}2p32`Bp4#X=Aza-ic2SJ2o#5}Fv;S)^_rc+S7}MNI|*4uSvv zFMqo`SoBa@x%0WXAD1p(cu3GQqksC9HHY;CrU*@G3Tg@p@CxAa;sioRO-D@)RSnjq zEK3(m0YVXk0*Df@0{QRD`m_6A-RJbu2rex7mEf>b;Z%mq-E-Fh%p5J5(#1~XpKld9 zHQ{ENWrfYJX+Vu70cf+-TPL;2H zER&z*GRmG>_`iTT`EJSm)mEn>+0~L_G?I@se+p&iIAt>< zQ{()fKd;V7)%soeEm0eHt!|(7J<%TXN-E}u2Zp`5pDKQSby?K6@aSXq`KdYErJhXEsPB!eT^sr}vGS07(v-Mh nq!grzNMu+;9G(j2-InLj7g{-MmnADOg)?}%`njxgN@xNAT=zd| literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV7%bz;uunK>+S7}T!##J94`L* z@Be!DgOu1=OTNi`@NM6f9ce71pON;1OF*?lD6mOG5JEXl=@4@1)PPe8UM`%AT&932 zmOv#h0o6rt3a$yH7g-aK2iFABi>wJ`1j539pWEfW%Uyl%Ic1Sg@8Zk+&Qqk_BxT*V zUyYjLyJ!w)dgz4k^P)>NoZ}`}+5~nPl}vS+vKHu^r-4zbu9EvMZuIIZs+@8&d1n4` zV=kf8n>C+4&q$lHsAfyhx*L_!3%ZM5?b0*qvp(1vG(~my`}pJ5hCYF6@8_f|2`|-f z)jYL%QB9SvwpUpDQ1D&0W!r m`rdCs1T-`RafJ7Yk8Jg3$2|ELUH=1&Vg^rFKbLh*2~7aT`nv@H diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_76.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_76.png index 6947b997e89548957b3a7d852cf475056ce7f6ca..2fb63311d5e2b5bf8065a4b95fc6c5663ac3641c 100644 GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU^?OH;uunK>+S8pqGkgg2gi5y zFSm(%9Nd_4vf{qazaa55Vo6Tx;pPzFTEhz%4rs*^=pb8s@H*MPQj_K$!ri zozkcHI2u}vSkhD!G#38h*!-x{i(5uR{$R{c6^jW0Z3jzUwrye!01AOz33eyUm2i(h zy#eD%_tdzQTQ zW}o6;zTtDl%=!-N^WN4|7F*l@{wL|O`F8pDd1sm>E%hZI=Wf4HxvP2N`|e}E-~M}N zRe#eUdd)s}^~AD0GtYO=4J@0TuCcJCNcGgstH~;-PDDqF9#DR+%B?n~J0Puwt+{Bj z_xBf1>Wf#Wf17sd)XwIjgQpB1zxn;ecC&`|zXc0@cFkGqu=Ce5<0)qY&dEGk)6ZJo zu*g0*>V=7uk-_}m@w@?52H)x6=KYNJ$AHVNf3w3NZ1UTK~dh+J!jx5KEABEmY z&wa4j=W0r6q^a{wo+l?F@+(&@&x(utJ0;+oq}r>U2RouIwD(Cy+3K&ao@ey>Sjki2 zYZre@S5Eu(q*C$J#Er_^H@{K{JL`R{V!d1CcWb5Xrd9jH?|=GuzXu-nNQp=lk+P*Xt`-G>hQRmr zFRdD<7~Q(DhyCyE*tTC6M6<+IF5h8t;auc0MZpV738*e&2~_feQyoHqO&Wr#V9Iey zhmcFB2AqOx0_sK41mwXrf%GD40`ib749)j=9lyH%|4X5z0@GQPyaJbXyG&Um!&|Mo0V9vW)78&qol`;+0C*Rr^Z)<= diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_77.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_77.png index 07d93e67708cab7b15ebd995f67d8626cc80f16c..fc05e85e6a3f80a2d5d900762450fbeac052d691 100644 GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6OIbaSW-r_4fAZyxRsM4vv5S z`!D~!z*FbdK994En=+X~CmlEOynTJT$(qx;0#k&hGzB#U1$YH;d2s@vqo$*#hN=eZ zQkJC)rU0P`LIFexSixz(XTN?ve_6Qsy#A{>>sP;*OOH7}O+!1+PyE!>;D}&sU-JKd-_0{+HGiG?sWq?f%B4O#{n1}z@v~*CmA}qazklTC--{ZX z^}qc#TrBS6KhI;e^55BRC(EWp9zTCbe&eRLPpKN4)n883sJA-CGG(s*-KQGbj%E5K zVf}`@si*(fE1lw8{XRCZtbdaG!a3ViOPEe=D{d$ zU#=;^-!$JZ`t$Z==_id!lT$r{%ebDNdhaKxdO9%dfKBE6O|SNqmh+stuQ2aZAK#SO zzRQ-s4|d!0{qDx&zqzIe8kGNdaqHFBf2Q+WHVHh-oWDFKHYZfSNKLokR^Y#F8kL_k zU!1Dl)8#)eT#sjY$({0&Ws7PyE#3M#@5D3>``Qc2&t_lMSgt&iqezD6fQG~bI4)o@ z0go(bRKX()s{+TB;*0mJyI;Sn|NHgA#pkpi&zT<+|D^UlTk03)$sZlun`ZWGdbF$0 z<>&RIsWuPt9cKPra#twz%4x4JANT!#tNwo;_M zD_ygw=Itx%Uutg}HvOtw=a;>p#VGgJmy#&vr;Qq`-4>`9KjmDkGR0TJ`rYH$DQo2# z&eSKYazA{d_f%!h`=oY&HRW!Jl60!d9c$(H z-!#;l=U5!?wfd)Zs!#n6Yl_^WFW)74B@JB3f2m>sj1m*wd~g>vVadljtm7H(EPq2VL^-DiHyyiXmv3t#x&SmS$ljqjt* z#kt?F`vcuwvhK$z{l2*^MXz4fevQz*uls9K8!IUJ!$K68JCG7Tt~kkh|Bvy;tHr7r9JP@PbkTs*6|xmAv3ohfrXXhM+2# za-7m3$~cYor#*F-(B?8_177V z^VUkxFh!6i;kkr-7jCgo?`s2Hhs;cxAAxAbSy?|55rBnLF((b#i-;wbHracBvS3j3^P6EvPn^hWlF%mj)$6aPX6Y3`b?vq z`IhNsXUgo>%d*t?0*_QY8-!_GHV_X)Q&9Q;yG7)>zmgu%!MvIseDpxtE)Z zPFxpQ&{A~edt!r)49pK8AE5XF=mQi_VkkiNBt|Ge!U16dG!#Ca?v3C7-zDF;`oHqG z&B<%j=WH*VGN13&Nk_N*_b2an-#Wi;<2#G|(~JH*Q_yD5SvvWa<+0506+TlYPCxFy zU)VC@|Gs}OIeYiXu8^4C^Lg8oX1_0tZud6V?cQs?Iq_^IdwZ&_q`fh!5RL_!B`NV1V+fhCH z*{T@%yRTmUez_oZuk)9*5A$_6Ll?$me#>>8`B5zH7_jo%9q-tqd}**vZqGZcx7BN z^7!&M{usMmSkz06o9FL3tZOU!^eOtb{rNnF<%{1~UCfui<@LQdeS)xEsY&6qIlnxY zl}wSGzI)Zue)G-V$0l7}E@@vBv&(VW!k&FPevuRUY~HQAJ>k@6wxD;9rWUlp^! x=ZF8iA4jDAE_{5Z@TL^0i4>HIU)}k~WH2`--i^udFfe;Cc)I$ztaD0e0stShczOT; literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBF#9;uunK>+S78t`-9UmxFiy zU)n7`p;ffkwoLSg{8vLk#n;S<)7%?09H(>$xpYD(&P6U$6ueyE6ic9zmw@Ub2-P7J z*rXw-3a4P2KzflifsBA_0_sK41mqzs{Iu45&%fP4*ES~mE|L*?8f(}QG-djcf>eP; zB2N=}(hqyaZPtjFd%E6X{;W4Zp~sC|ST#>EP6Vn7yu7LKwOHzpFIhZ6Qx0z2;^!I2 z*SYDPY-iAvMIuYrMo-ziI7j8whKyUwmuN6A&g2i8vMn#rum92%k<^eW*89G?Xr2l- z{Kczs>UMnHqnUHd7V%iNDR>3C&21MFVdQ&MBb@0FQgHKmY&$ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_79.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_79.png index 5c9c542326295fbfffbfa9269df55edc55d69767..c8ebbb6d88dcd056dcdab4442957556ab410b905 100644 GIT binary patch literal 955 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~cksaSW-r_4bxy(P9GuhroCB zFV9p3iRJ{9uU6d~Z@SvEr!{Va>W;c4X|aBd3#Kd(nIbf$DX1wZzzYbuyg0oaH61lI zR5e(avH&5H0iz)7;INXbuNO2EB& zbGEA&u_Uma@(cgamwcP+sq6*8DT3-X;ZruRo8-Nyrub0Zf1f9u_KZ&_u72Ou|9{Q? zI*o-jHCtCl9DUzb^vwPHC5`=+y}KuKr=DN^Bv4~_E@!E$wx?d{F1#DySIr;r z%`LL_X;YEWsdv#%SIfh!YD(n0i&|?>?Y3Vscm1T}3(xFopSSVomoNXzc6#acemd!S zCw2ZNuBTsgSIP$19h|ZALgS}|Df#c7g{;{Z?s}8+$s`Ts`9e{gso#Qs1pM36T>9zr z6j6nRIyIm66y@vxI{7)r;I4ySx6!BSsPHMF5esByoLO_!*?o%o-JqOSNC3iu4<3Nf z;Dd)SNC8R+0~L@Q1*iVU|Jn6_dhMQ$?^3qkzHstdqFL_{VE=r#`FLd_2%J-+e*N=O|zt+wIt2mu@;G zkb95hgav;-Jx{L*Zz+1*>UZQ--7&kTFXA3_X>5BJ0y_(N2;I z?sofDzi(U9wdu*bD_RQnwK@GdC5yg&pQjKb`1I0tNn^*f1!rP9dfy3^I7a>qIJQ;z zL{I;ZH=(b&G`3fGX;dXB-@m?SUC{DHYuF;&j6VJQmZzZ|pUpZ!RYRF=oA9YK?8=+! zzG=l(#@uyG^SSh*cv9@TNuj$ro_0T+>ri$>sH$k|da2W13YP=U-SCi`d*T)Emzl{g zE%F1{{GVOEKHGBIy3cG+4}X_7{RR}a%Mbph3CRVdMPm9F{!)Q-Ej^9Dzkr#N!PC{x JWt~$(695KIw*~+J literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6yUbaSW-r_4bxyQL_P$L*Tpm zmnHLAS00>{`g8Bhb+Tsk$t z6z3wBDGFXLa0;#oq!(Ee$OxDwkX~d>AR`bK_S8Mhexv>9Yq-qu^~t-|MHTng@Nerc z`c~kgd1~e1nT861U7yM<{Mmo19q7=|Ui(0_e{JZL^2U9gMaK^8cH5aX^^Vagb>`py zX3k``S3IS>exI@5|G@cmfn7xvTTk!kdN20$RPgs}f&ZSD-{B3PVj6yO@uD@`R6|Tp zU0t2>TVwO~mR+tp-{cFVzSY(iuT)O8(L1%G z`h{S$&*J;9H+kjBK0P6@`%Q3~>&_bQRnAkC4c+2ibbNZCG5^lllRJLhGd<5!H8v*+KJ7L) ze)VW!(iHW(K{}!+fr%Ug=z)n61HedxM;m$!0OJE5ZKyE-F#;BQlfM09FuTRXaLDcA R5@2Ft@O1TaS?83{1OSj6{>A_R diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_8.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_8.png index 02cebee80de314a0d5b96f5d30e7f5e0544ad9cd..45d8a49dd0578ca5e8b11f9b5b0f5e302c037060 100644 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU^?pQ;uunK>+LOXzb6JF4uS9M zFB>dtae1^S{>)CH$zo5E=lktkvqnEN;|mxyEX~gP6=@0OqJ>5eBLT_s*qzri;$PbLO9_p zSdufxnNt;{NOj6J2nA-N5KmVJhUG8tzqO?usvGVsxUDc}fgJ{O7To1fcf(x{QUEst zpT9iQ zx;ACv>oqU#ua;W=qEfo~({^b~)~8pqZ`Lj634h-5SAB~A z_Wf1?Wow>#2gJo*ah_>y7pTzh6uFVX{^{c1FOSzgX{$NDWBqnp+hq&y{B(=$EPAwO z>%ud$R(NWZoA0uoHzoXhv|;{R4ejsemo?4Vv}{lD+_{hUZBl>ZG9}V~!MptXp`XM0 zHWlfwV@^GC+gJ9x_)fnX(^G4vOYI6s%iZYXJkvHmfRDlQVJ6GdM2*Gww=`}lod2oC zH1(Nvr|9!DcK23qYgxAV&4I$FGs+*j<#RgD{Bi8t<=oyi{To*#Z>`(oR4I1K`uMs7 wysA^CpA-CfwCK^MY!lRIATEVnsjOxGGi~>O{nCg`V7g}TboFyt=akR{0G+`~3jhEB literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~KbraSW-r_4dYYP6h=Yhl6kS zZxPE=Fm&6)oNd3yNr-tCr+Qt_-Eqi10tO0P6S|K; mfdUT(6dyrC5;-(lQkk;z`unDC7Tynx7zR&QKbLh*2~7aTQ;zBY diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_80.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_80.png index 24a1b26d924daf5cad65e1fe77a38f7a62939c72..b79b101e462b3305bbc108c4f884591e64a1664a 100644 GIT binary patch literal 788 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV7l$;;uunK>+S96pk@aV2gh&w zGw(Wz6wP;@ul0Y*feU^KPV3||Bc>|~Oc9#W6x0+H;1$5-#R-ItnvR+psv4|IS(YxC z0)!$61rQ}b1(Ky7u795IyPi{ZN`MoPXkWCYKEUdwd3uP(!Y%m$Rv!bLEPox@|8uSM zDOQd6%D4q{wwiqY7AbVD!kXC?*ox&8bGlF(=b z5erM2nNt-y`dCX87D5Dxav+zNvjW2HAeWXl>b&)d(uJ%3a08^a&( z_xV`m>uPNF_c>Cg{5_xP)GNc2M=Y71&Ta0w758Lc>EfQMvxb{%)lThh{+aT@{_i{U z-w})&*+Lao=OUly-t9eiS#o9af31Ggs@XTMe?ESFRsF!1KX=3^Ut| zvN!Jj%=x-6`y}t18oyp}=lrSVuOhR%BJbB*{X1Dq kTxx?QM{t6?V)>WpSKbQY+RjM_fvKIr)78&qol`;+0LwF7PXGV_ literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV4URX;uunK>+Ox3ybT6CE{@;t zn_LlSIWlYR#2;!8mKU61O+2RSFh#-3g>#V$gklL)@)A&81gDxb1XVkP0wI)3r-tK{ z4j~u?*96jwtO;ZUToX_)vL=ub2n%l(eEj_9Mu}fwSJ0G2B1<*urIvo}ymW!TJS4E| z(k++F4~s-nzdV>Ne|J%gK+S8Eg-Z=Y92}p{ z-!k`Lk7N1d7r{^CE1b^eUF$bllPb*N#p&g!>8Pops=>OH1qc^RSs*e+Xi8I1Q&4~x z5ON_DK$HL#^xR>1{WJdQuCnW#s#5}-fW-90Uv@7r`B`tX$cc05eHK-Q04GbS1K0iU z2JpH6ylL53bZ)VvyQhZx;y+*JH~`hJ)113&p$-4j=g(PA)$#OA3g~mw)L7Ue1ewmniR>h>qhL;gyBg|dxT`@5P`m|HfZJQB{w^wi`1*c*;OUbw?oVcT zt9@xIT*KGn&pxx$h^y>a-=vLam-i?0ochme#QpS2YN;HH)$zclPcM)4%v*4`bpOmV z>XYZP7Ny^feJoMBSlIHwcK3UyWS3{F_r!g_s-evOgDvVS3&{Tg-*`W~)!g}6i1`%% z!k)NzmQ$;Czt_C}_WGR{A-OB=x~uH&&rq{p{zlH-`qT<|djWqMsHz&__le^nr zx48IF=`GIu&P~UJcHYSj@Y{K;(x_9?eeS8;nT27yp1GwzI{ae44C|fR_^R)7IgP#^ zs(ukY_ipf~kQuK-Cfuyn21eHzt3{;?=4`RiXl(h!Hf3(Up`V3Un0=+i)3fKSWS_i? zEkCljzsuZNw7+H3F+--*Z|0_v)zw$)v)%iQi>%Y@m|0Ulyzi0A|FYEidb)aM`pwG$ zVKsgeKC(V|_etye{nm|tEK$=EaS``Q`Y+S+Y0odO552trn3NejUHx3vIVCg!09=|t ABLDyZ literal 454 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVC?mDaSW-r_4Y;}SA&9x%f;>g zeXoo4D5yV|c@cfFJFM7o#zvM7A(u`K$0<-s!OMknk;@b~C7`;9B~Zx=Of_i;s&)tk z!YQ~Wpk5SBKptEZNH4M`kP!$Aqs0>D*~j;NE%OQN3YxM=WT^&!|D`=HnV-e|Ljt=l z&2iCW2<$SlYWTJ~ddkDVYwtQWitEl=sJcqZrhc8*0o3uu@8v78r~enNxi1{}uK%E> z=BXDNf=e}AHN6}m2J*`U$_cB2Om@}ufcXU7QOG_41qR&v=sp4Z3+{bXpMZ@(2?gY! eQ}Vj;p3PG5w^DsWJRdNA7(8A5T-G@yGywpwPn8=0 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_82.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_82.png index 0ee49ccce989b2103bde4da7b9801638582f4eee..20c78463feb93df47d80d35b09b53131ffc3eaf8 100644 GIT binary patch literal 949 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6O3WaSW-r_4fAdyg3FU4uSvv zFTZ>|Y~m!oA9r%DP5We`$+r1WLwZ%M=iyyGjSHqM5Sb!0r75T>D8LH{xx6^N95o#^ zHB>cNm$CpMk^-<2u!5OpKT7{UKPfTy_=d~-+|F4~;Z?UvzQ3@g=+4R3B8gKg-loof zp?+c6f;Tqi0cyPyYp>30+Vokg(&p5OlWQ#kg#-8fdTIS>NgBf{i@*T6HlxpKdtbfH zVLJ70`@7_Te`XUeYHWV~_-**fx6@kY`KU~(j#cea-m~u5- zPhcn-MTK^s2qa0^)vY$E|Xjj?M z6=AcUfiqR{RM+yWYx3uX*M#Otd1!Pe*6sQ~b^cc8N`X`Ug?_F^qAAvRLJd7wApwgu zSV7_LOGK3X+5PeL_xU}!?r(3u+LtC%e0@jc^9>@Y&p7*U#a**YV|XuR{+hpxd&+#d zm?z(i0@C7Zm&=_F(|9lU-~ zuYJu%N!2qojO+Fn-Fd}stg%pMuDFJH9;a2{x*mDkcP*<`rf{BiSiT_VtAXs3SG<3@ zPIZO0XiO1&{O?QDS9ZqhA`>LNodPu$Cxq49+GOuWxj?yRm-a<8}M2b2>M@ar^ly z_R~xweo=3y=*4Sn1OuEb->IZ1&Dybd&C~74fo1h4OQjaA3_p2&!5a(4b(69m%l%z2 zx%6mPMEIFsPgINUe%4#Erm#O!=u}k8+h5lzuW#SF`uWqBe_DQ93Z`CPlAgD|=+2s4 zxz11ZxBKp$f02BC&;L2U_Pe>S4@SufC~*eQEwH=-&n@>Z%KO+&`*kUoEex0)89ZJ6 KT-G@yGywo7q_-si literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6ygfaSW-r_4d|9zrzMR4j2FZ z_wNsHG1;KSs%*0MskA`1y>Z`M?sKm7o}&HSZHnjd6LDL2yX-8QDkGozB zuJkl$sd-H~yy(mx&-J_Jly($-U0Urki=Vwub;FiM=tg2Db-Wg?S4S|f4=Owec}CH8v0F$en8wp3Nlya7y244$rjF6*2Ung9s# B|4{${ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_83.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_83.png index 9d834fd861f4bc9973e75d9661c11f81685db8ed..865d350cc5e9259e2daf58c30ba64dfb15852e58 100644 GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVEXCl;uunK>+S8pqGkgg2gi5y zFTXJPcK4>7thnz}ZSJe$enQ&MjjdqTZFvw?*_1)w_6=J zPijimsv{m;ib1vuRleD>n+l#2y14;+4qMqRyo z-@)l8$1-jijpzq&_9!vncQwRYV2{DQWyONzeURUfy$@1_CwzSF9{BoK{gWPL{<1+W+ic{nQRPw=ZMYz5@$tBu}k4zJ8ZNv(PEcDeGf} znl`DQy8mz4VV%e>qvW%jifXQ&cDShFt-gw@A(DId)W@qMoGObJ8aEaF6la*KVZGnye{Ma? z9qqt7>QSr*GY_Y_VzE?^&t~*BrgR;(4#!{jR^gx9W}+ z@_oO|_%!Ry?myZtCZ~FeXFN)O`uu3<{}UpmM%HiNPtHxBb2!9Yeq|&$IU>adYOHxd h(<@W~Bx1k4V>cAe2#)6}oeRth44$rjF6*2UngGJeWq<$x literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeVBG8J;uunK>+P**zGejx*T84? znX-+?oc6PZx0D9)zEh> zeExUyu~+7)9uxfS_MeJyl@xe#=Hsnec9+aOi?(>}D($|crRgPpQ%m#I{>5{C?lG|R z2*wf>y{Y$5;bh)V^u{xz-iobqE>Xegz7At!NuG-V#Q_o|DBeO23k+{v5>Y^e8hQW#g99FF ir~v>DLv&jXm0F8Lwaz#v#e5zZpA4R^elF{r5}E)sN3qKQ diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_84.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/frequency_piano_84.png index 9383e00604d8db367f7ec09d7d6c7ac3ca71af52..a50902ce7a4ff7b2d6e1c6b2289dfef5fa126763 100644 GIT binary patch literal 952 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV6OLcaSW-r_4d~7qSXdG4uSvv zFTefWPx0W1NjcZ%y}WIy)F|5S-6y{?vOQKoLsf%yDa+CYQx=F!5dy-dpr)VzuK+GD zPA^AI5JV_|C;=;2wr9fQU;0JXk?$A(e!ctmcd02it<#^K>#bNDAhvkT4aWc{$ub7_ zvJ3V9^RAuiwVL6+c=I2w38@;J!zLR~F)sUZf9LAOYob)W1Jd^0-2XW}uR49o?fBaC zeK-F%oVoGt=AVhVPBVLqs;8c@O0=K7SL@WN_3whFgj$zAyZ)_D!+YC)>r*$`|6Z={ z+L8QWS?DI)Q_H`fT@aH$wZ$kgwDQ-i&Ea|)-2rZIzf6?=UmjQdZSqvU_`BZog3F>x z(-!Ud&EMg{)jz)ai)*`!{yc+ zv*k3mxuFC!Mod8B0&7foAw?Ec0X#NAQH2tlKn1|)etN!e&i~N!yJuZZytgL#LT;SY zDS!4C?`C(+DNheOy65Kcg_rki)7Z@a=WgWuG`I7!Yk78^(RP;n+SxtF{Fmd2S>}%= zTo(1ry8g{c{ny#EbG9G)dE;hXht2f%O%?aF)_=VGX9f3;p6?7#k7+F4CTYumYWhN( z*|xjRzNlOqxUOW~Hm*~vcPiiRnRlJ*=_&J-;W4UW&ML)esx2SlgQuq(_C(HK3k`- zdf%gkJbV6bJoWgpToXtyvL=uba7{qH$eKV#AS|4@SMm7Q<AUfjO#%A2>oxss=3YP?`dj>- z!~oYRqU$}kcWrw5EP2ZFDSP(?gntY@JL$H&WaZ`y#bIamslEI7ujX0gCYw{&4Cd=p zU(;~^G55f>z+NmNpu+|N4uN<7 zU)qqus5o(L*!HXM!&BKmEeN0Ys7HTg#9=*wDMC}4f|`N?yaKqqIDybn(@|4HRfBaY z%hCl?fKUXX0HOq_KystIpZZ0m3g?~(c&eYg7e^>P4Klz_lFUYYr54d*lp$2Da=9IPitLN-`Ewgn& z%cr+b-n%@y!V46 zmq;#qv*z#LC2u7pC6pP?_DC|;fCOS|txqlZlk(UoFm26a&ELCJPR-=~U*hh%{`Tt9 zJ-@&24zMe=K6U3s%7Pfnhk^CswSScoopxr(u9xd9d%OSDZAPGH=kW_0i{7sLxTq}aNp)}JY1?PDr>^FghD+!_P8SoMR()pn^Q+}SBBy3< zT&(Z<$L;x}w$xtn&QEuZ%It4_%65aNBb1OtNouGeIb}h}?|qC6+dPUNOLnXQCS?Xs LS3j3^P6+P+BT+Id|E*Jm& z_kX>qTg+AE<%>DY>$vxM$2nV@aTxDma^YO$GDX1)N(rbgVhL38f>RwrflV5Ms$j}- zN{5h3rv{vYYXa&;(FEkdHG%XZYXb6+EX>tUs+lJ`zwoPIYT*Q9Wr3v{u9~O5v&I#;Mw!}X`>pL(~8`*y8fY$H|YHD&8&!BjsPKhHon z_sG9nPrW*4xz$DU)a8fkdyc#kOD&o5)~$Gg=6-u?RaZ$_)zrXyoJCjnw`=qnsY*F^ z1x;CWCiX6;xS+U9;615-Z!`pf*8hB?knW=5p^g*|D1HI@3?2ZeegOvuN;n_~9(p(+ j2OcQ=;UT`LgTe~DWM4f)aVIbx89w3JV|=W&E|`(pDx!n3Y{us7eAG# zv6%hI`unFHBr6x$vfcG4ZIbCUN(xvP;KuW1{rB$O3*PMWy2qCK#Nj^Y)7<&{)*o2I zb1r^|wcWmjHVmmp9;DpgFu$khkbAlHsqp3vRUiIW?SIEU_uTULvFj!+2AXkc_4WI; z^NOagep0BhdU=b|^Pg%9bM`0s+ZiiQe^WNwX8pb*$De=RCAcnpGehWC>Zd(bsi~LT zzvl+LGx7iVs%6*V&`rFl->lwTwMjj)z}+Ww@2~Iq|KDy|{p6yC`q|*Ru1|O0-+QQa zv#E&niMo8_`ml}#Et|e9*jLRvrMkg}FZJt`fG=OdO=UF1^H+sWf3quKUETamOe#~l z<2_%;xu4r3ziv;LFDvKM1v8shyr1NB(}3e{JoD*4*~hH)H2W$pOazBFG_(=n4GnF0 zgn$&FLrC(oHO)OMhb-=oC z&cd2=Qakbk{HzZIIB}{@F_rJ0sj)i2>1IKK5qoa>6v^Ug?hDS$OM0=#Yn|N-m%RL| zNe6&odvAJ}A7|*oIX1_V*G~~X|L9%l^32CIr>jqONPjrB^Q7pEsqB`?b8KtH`NNKN zUfS#Q=;iK$_VTKPSM!9TT3J&MJG`~eLT@a78u|Zvj3WbJ-Ouj;~X>R+w}pnB7>)^pUXO@ GgeCw|IIzS3 literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeV9NA#aSW-r_4fAZNlgX<4uSvv zFE4$`Cg7`n*Yn)UqNj`J6z~enc+7fKri~%6NkdSzLkLQ_bZR(G=@5cZoQqthD0sO* zC;`<)EP+a1a0;#os25oi$OyP5pk5SBKpw)v)ML{v?fT{B%l?&}Z{t?Kf5rQ|#nC>( zsqYV-==${XzLHnqwA(ut>4>F%X_&Kjz5A4j_FEQTXbef4pt`t6V#;a_Wwu}UA0Lfe zbY`CF_D-Xs1?62uw>Q6Eoe;(LT<2ZS-R&CU9Y#q7Rq`9w%cQo(mRC(FZ@#eW<9R#% z-!AH(-&9YF+!QiJu({;>ue;YZ(`Twq?=Jc>Dd34!{8Ej}>2FT$KXbynY_smX{&_oH ze*Vf$c6FV(QRU0|M?YU^Yfmk^d)vkGvenbO{8{ahM!Ki&T~AzpO;ef8HfiOncR%Cj zN9Rt9u{!1TdW!$zKi}@jrk$Lk5#3a?iF?m(Cl#+izPl^#$0?t(Y>Lr4b080VrkqJr+S7}LCppN4uSvv zFaLV?;zpI-H+_rV_2hFk$~iN?{j6&Gx{!-yDa+CYQx=F!5t`Bz1cCux0bE|3UXGfM zni{G=$cj(^Q36!pCiCO-yX8gqBOf;u6;GL{v7lv>ERV**KjOzY7WF-D`J^-@)FE$< z>cTr5ORt(w32@?E>TNzHm|J$U$`tRkMSj~;^5&^7%&F@CkTxN}Y_9IYmQ7bxzkUO% z;SImPy}706!O`6EaauJkVWX!l2*Pc0n--8{QSzHu~27!BcIBY%Nn`` z3vwDa-EQKBIvDI^sDlxHg8B&VCy)XZPXiU;_B2MQIIh$Vv^#&_Uh;OY#Pv53#(m{S z_uZd2c};S)mO3qhiSI)i^oU++iZwmYV<)po7%fRYuedgHmOIiTV4tbtNXO)_YbA{KhtgJu41^!minb^cfbDQW{sQo+i%G| zU9PTGHT&x0)h<8pOYGV!p11$kG+S78zGejh*T8T4 zGh>?=S>?`IdhXA@JzLTFQkmn7XW9-^6uewG7r8(vmOv#h0o6rts!2mowL>TnLb-Hm zI8Nyhf>CfyAic<%Kt{kd0retl0vUm@@aK2_d%xnW?^jL>hBA&)Cb>UZ9M|{{`@drY^drgDVv%K)~)Fg=oeMuqIv3V;JQE6 zEgG&n|1!l+SX3jsl+}HTVBj*{7^vro^8hCzsGtEyNr*Y^mp+NmFqQwRR4uN<7 zUz%AOB+0(;U0CzI^{3QQm6^}8rP%CSlEypRA;2qu%Zt;?QPWXVLlp>Fm$EEfFlB+r z6rm|iK_G~v0IUS8z$PuZ=l}oEeoobn;QFbLoj6lCr^)6sX~=UGJ^MKG@jSj_hRXLp z1(V(F#7;Fky7lp^PSGthnG)c{sX9S${o$+TQ*zh+^JRCu`RUMUbE|-D|E84uXe;7A zarL+(=hD^r8uwd2o%^AF$i$yh6{IP3F*k?CLZ9YJ@e^-$ERSp4J-_Jl-zg4GKh@8? z;e0DwzRS6i;mj+;{@d#DyIN9@OFz2tw_y>IFMxhP@g~R*xV?!U4v>&QG64||Q^1y7 zQV!_*`1k$0&uR1bSI<2aoaeF7FkiH0R>8Z9ueQI>@=syaSpDprR=LlW>lG8NB~KkG-a55d zS7Tv|QHEIJ@ye$c@4s;1OnqH>>fQ4x<#{!+v1!llzKu+F`nf@KA=e)5$8Pr*@;`l) z>G(y{?aAxYGs0H?@^pFSZ|&zgbE9$kw4K?vQ(}c3B6&1FC9VHeWBIu~f4wUtIl>d8 hStBvAd1d!6_T)JVvz_j;TmohX22WQ%mvv4FO#mOlYmoo| literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU_9#S;uunK>+P*XJ{JRlhKu+9 zUz+2Pv2||ZJ?}rtn;&kT9rd;$Wma&5hU1hDA(u`F#kt63ih`F5oMH)7@)A&81fe>F z0-H1hRpAs&6G$(zCXf+uO+dXUnt(ing_|Co%(#C0-ONQIN!Pa(uhU@NsXDD=w!;*8 z-c9NMrxvenzsX`*_NV8j@psYGhYIQE#FuIW$7BR{1x;Bb@}%c{;#b{MCadfFn_XrW zJ$x!J8@TM>v@f4^Pfbv`|4!X2FsiouQ+#0Gne`IOo&z;3)o|53<-*Mo*i{rcV{zk` zb8B}oeYZ>f@Ow&=$kW^ztK~D?_q^0Q#gzDNUgW!3GB#bRkJ>b+P-6d4~){91i~Z z@4x-^A})iS`j0JzyqzBTG`}tS>v4D&Pve3q3q+;}O=${h3JUN7LM|^(FGo#BO$}8I z)}<^!h@=3l1gPND3C11Q;&0C9Rh_a_L;IpLr|Oh|V~gMXvC&v4)6VFnv9Lu5P8hK| zKQH5*65s?<e7uyqp!Fu7*mW=mmKS z?kzOE#~18bw|~9=z0JS=^?Z)AY)^l`x7auE@ubqa=mjx*54>xPvTQ#!Th3PR_@X%l z#+x1d+;09Ie`BVxJFNPq#%i(X%irCD#nb01Xou~%%DkU@$w~jyB~vaI8)+=G zk$S3rya^ObZ|2sQ=?m-Hq)$ literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+umYeU~KVpaSW-r_4dX_E(Qe-2gm>a zmuKhbdhqUQPIJ5`aIE2Yi>QK^fa)TaKqUy(q#>x$xpZoPDb7VMQxv>h z;1paFNH4M`kP$FVAic<%Kt>=e{FBO9_-|8schHojfnjd?UV&XfQ@$^LGe_Mk&`!Kr z!&MV3vPfhpn7Qo8h01k;5H?WZzbP;YAP1ef({l6g42Xe?L=dhc&RHOzX*-~}8^yE0 o@PdaBx@Uo2hldczvk__^*1p&Kdd=k;Fj^QqUHx3vIVCg!03&~oSO5S3 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_visibility_black_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_visibility_black_24dp.png new file mode 100755 index 0000000000000000000000000000000000000000..329e617e9c7e4036e3a16f19beea3b37531cb538 GIT binary patch literal 470 zcmV;{0V)28P)9Rm6Jm=-`T+Ve0Iitsry1F4fPDI(brtey9^UbnxU5-tk zr+#S_%%LZG9Z9E${%9RBzdg|T|GT^iM}BHrFl)(vaMoQ?z@V?W=$?iQKxV>j&fhjb z%C!*ts9&UNBbV86MWF0cxJ^HxX3C5@px0h5x1}V<%g{grRIL0{)>Ob`NIuubXi{+o zR&wep$dcM`0d)8ftR|>wg{gt%puPjRn;cjGQ;9we<`Vr*(V|%}Q?O`0(MN#}?}M=f z>dAp&&MM}>5z;rc@gkTLpklRcO*d$S}T>(|=N$tz#%xfkUzjlFQI^9qH zj_Dk_=bR&{dhDQZ$$>{MIyNO^7DH!WEE-dCBD&o$V#J`bQ^y&90R)t%5-bJZl>h($ M07*qoM6N<$f(1_1<^TWy literal 0 HcmV?d00001 diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_visibility_off_black_24dp.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-hdpi/ic_visibility_off_black_24dp.png new file mode 100755 index 0000000000000000000000000000000000000000..b21a6862977bfb79d5621df754b90e2915fdf3ee GIT binary patch literal 507 zcmVAi)KVUe zz$xNZs6{~u5yS}^F1(MNM7mpj-_7UYBju9)HRgwW>+{Vm`~0y=Ar;@IDZ41H-_L{^RWs|lX>&FL z_S9Yl9aXEZ#j{f~VJ)HF=z&;|^<-^Hq^Md>cHTKC)NZvtj#P`wh5%jR->qnsbT1&E z5^BVEPn5xA*t`P(XTxwqRVGpkpd_CC6hMd&*sFng~7-;fB{4^MnixfO8`ZR{cW0$~!NYP|1Y@Y;xyJ0v1${vdp z=ab*yZArVmPM|eaz%f@{ktNhn4=|?DsiP zs}3os>RCLyc{64_@}>T_OebhooMuxtUgMS!y*7DZ~_NT-~D|S`JH)OY*8(p4 zdXZxdxWv{o3og5Bx+UByv~MR%;5I%f$!z`LCZ5^NT$#Xaj0SGA`4_k(Tm{;S-DHPJ z_Oc21%rD(LyBsD*SB%?T@~XI4TnXnQ^CGzFlbNcoYq|W#I@*zJ7#H-`6GhbMB#ax= QF#rGn07*qoM6N<$f*gUh00000 delta 228 zcmcc2e1d6$iZQ>Zi(^Q|t+zJ=xta|`Tn}#l@B4bW!lGj?A79C6h-|4#@p0aw<{H+< zFy{cLj76icMFG>qK&ko%2RP>(0P?^B>IDy2{2s9IL6z)Snf0@0-@OyBn|2H4aqDuf zzjWc+efN6|o)!DsvTfPc6}Npk(__5f`@rfgH?LXmcyOSxy2zG^olj;*|G~Gplh)_W zI@rj3{Zq-~SCwWD^doLpvENo+AFyNb{)ZiVbFFS=?3uEM$%A*|With!8^Dg*5pT*| XU8XKqf3xZ~0}yz+`njxgN@xNAhdX9T diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_10.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_10.png index b6c804ce8f39e8311d50532871711f1b919f9231..a8b18c45de732378ccca3ff00be5aa2a5c1fad41 100644 GIT binary patch literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~=+waSW-r_4e-RNzDoZ4uSvw zFHip#rn699;PKATNL8%@W|O@c{q{DK4hsmdKXQ;MRNy-z2x4?7^Brll05O;gfs8jI z^k|DO+@*u1uyZ>xQ-C%a24eR{+rDP#4U4>Uf_?&3MO`e>=!w#7S7 zb=muy-TbFjxY@noMbYozM;rJa0iCPRX94sJhynErhyn2n*i!=TP)|V^Q03kCpLATk zbn4pQ6>AiQG&Mz6&JPOn+ZYtJh56>A+?&78Ub)&6qWwxEY_sc~tL2-|zl~x{yImhH zpX2f>sPH+{jf++Pb*mi~OuBbMA^dy(>>cm=)(V&#Tdzv{X;x^Qza>I9_sh(wwG}Np zRzF&>cy3<(d!K^+QM!4R1(R;JSbH;`JGX6Bt&Z?iJ!`&{#moDeuHIBNGFrVT_1AV8 z_C?;F-*khum$)ij>@pA6z4_Sfe_?pF`|=$=*A{1~t=aQV{YdKN+^I9?y!$r&nU?ms zLhE?@ZP_2>Ro5xcioV(YDkQF=?Y+eZx5XRZDIZ&>^7+%0@X&$@mLJyNTW<9BepTP$ ia-?`i3#&Ol*w^c`F6HtnnA&zKb$zxUQj&_8$e zv*(VhrZ>g%z7z|Emz-pp&#-;dRuwUhJCDS|E4Mas&waA}d&BR|D>r3Xyp;8LcaA-V zA@9lQWe+DU{$m*Y^i0#zxcN7>^~?IL`p=N5W5=nJ+rG!8K03a+YV%)>9T)dAY`*<=@q;hB;T{5c5ub;!hJ^Jh Zb3a?huLlqO*#Qh<22WQ%mvv4FO#oDls$>8F diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_11.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_11.png index 82a751c4d92351f71509269a752085d506d4d457..cccb04b8934e428fe6260722b0c936dea72faf7b 100644 GIT binary patch literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU_9*U;uunK>+Ri}d4~)H90LFU z_usx=bZUp~ypKY2wZC>+2*{ssT6&?bB=xLFgRn&-vw8s&yWayAzXu06=NxDRiU?a2 zFfBJfy!G4v^+|gla2+&Kvo4N(u+Qh+WuuFw=hv~{VevTD(tMkt{PE|#LV3qknwZ)1 zo=PfO6g&v?v$81AV|QEk_<$_ib>o>2^o|r46*0y=6F(dJnl-$JlL2TE-<$)SG9X)U zSgl?FatuNl&@t5yl(y%c+SBh*GI#ZH*XL_k)|E4t-I07TrSPKVZ9engKQ0%$&(FWQ z4~|K8{;#BrB1-7+i)-F?ygaA@x5pdB}lSD(95)gP#RJeK?V z?$amk@w&!)f7`M8;lA9OYs-I5tA8oOx_m3#`=9`UgghuNmiN~&{@J@I>$ufqJ7BCb Nc)I$ztaD0e0szTZ<2C>Q delta 240 zcmeyvyqRf&vO2>rPZ!6Kid%1Qcyl!v@Hia2^Z(LUhNk^$S5Md!s0$j+z9x|s8NoR5 zzSzWI;d*BE0w(o>2P}RM4sgynz$s(VC~N@|QBL|Fa)vdWW7@_yXCfc)O{@NP?()se z#Rq&FQgmeQa2Lq#|L(oRd>RLz%#Nw*P6ZDRtc|g)`0u} zFP$`d^(7!6RATr2>6<)LjBWTGRBHa5P%VDJRKVnSpi#JhiEmB=jC{ZXVgt!HOyx5F z>(kB$M@|=gy7yJ{+K2NRQ>6-AcXXBMw|0jZefoZ??@x5x5@zj(i*oHm^Oh7XE|}>y zpKm(9=h-G0aa}?qf@JzeuubisVU&x zG1D#mp;r5+?Uf;J4~=A}H@==T>5i0M^;UN=#<;n^ufAV(f9v$Q$M?QoaC~>U?X*RKmq{dR7B+|HdWcTOa)%9ab|oIbZJL~q;n!)JXM zt<>)iW%%vkRO@VVWf-&BajUy4{(CmAd=k=NP>a~LN<2GPr0*yadP>G zo3$>RO6T8g(Azuxl-G`Fy-{MfWjMHy+eVkShYQ3{*_lXss`U+0pwu?ULqrO&dPRW7Lnm3u2F-Jw?c*9M% z$9&y&gX>+-#5>Ea&sgUb@5qr{?SATk+3M4(56@K`Z}jfb2=CEyxBGCx)MozQX$Q>; zu5z!v*sto^_IGaS$`$oDWh$PY@?^jBW{%cp>v^>ufoE@+ZPWp!i0L^-mMxCtI*` UBzopr00QP5%m4rY literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KYqaSW-r_4bBiUbBIKL*Tpm zmnqVM9>>l|Y^aQXwJh}D57wr=drVTgH5t?knArUuu<*?}z&YnYqp(FIGf+gm-~o%@ z1CR)(j0I2-CIVIl76B^*YBZ6!v#I94jIH0(h;tVA@5$Ve%H!54W>h{D8uNW+!9+*5 ze{q%*=RfcENl=aXGE2WTTQWvF=Gmh44X4kXUHec;IQ(Nrq`dMkmkOSkrw6vF?JkOW zV0AZl>ixn8lbEwBPp@kFUEcTN=Rws6eK93s>pq3n&2mo_(K9ZT+%eC4(#nUM=6^e( zcHrK|?{(pSW3AsyoCS& diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_13.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_13.png index d869f8cf928fec30a6774b0f4ab1b820b474c77a..101198e14ac343298848b9f1be96a6410bea1444 100644 GIT binary patch delta 356 zcmdnZw1#P76ZRA5Yl${LrCGuAVkILZ2^u z3_9JW$}llOG(o-K0ZZP$hU3rGtM?fmu$6nq#kP*&?XTZ=cN#ro4rlq!Ep%s@_mg$i zvO9YJ=UR(N%UBc`chB1T;K6}L=IavgZo64lf9Bzn*%3K~$ELvb`?fc&?AKY=J^J)} zdcnljZinWHdGhrvd~*(P%2+fCTNE&<7cjB=JphZ$ne<>${EMKEtXZo+mr9na#FU)V zdwl8Ps$*yMj-7da_n0hy`K$YVEzvt|N@c>!`fr=^-AUwEf560TR{i;`1bg0RHk+=3 za+w{A*xR-+v$ONbSbVpT{@}9XYPePT@xNA<>-S9hR$$Ct=kc8N?W;Q%iz_efxR&py rH2e39oi>GczO@TqWyRqzy}gWTmrprue6To<0SG)@{an^LB{Ts55=W%r delta 243 zcmZ3(yqjr)iV>5ii(^Q|t+&@5xf%?37!LmVf4S;|0!PwH&kYvbP0N)eb24+HHW@G# zFsTihWnKA()!XS(zJ;ktweQWw^}&%b^ufq+*)%h==ZUB?^T%AiInB1Bp!+~+ z&i?%^vnB8Fm{>FlTfi)2;hS@SQwAi`$gEz##O?=i#he3;!uk*)n8RS|3YeC!DqHp6 V?_1)DHVFnG@O1TaS?83{1OUmwVA%iw diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_14.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_14.png index 9c4465474b2b95e8cab5758803423c1009a795b4..0df7b58c410aaf1692183a7082155f98c2a9ff5b 100644 GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU{dpRaSW-r_4e+?qGkmF)`0*2 zm)|~KHb+Hiw~oiTxhK7awToQLY$iN*mz(J<-XL7S#5V^>K45{7%<3REkW3NX@%Tse zS2=mh=c~iN{fxTJsK@dBWqn#n!Fk@zB6t3?Z8!V(XC_C?`Q9m<*DuXm`|w>{$>|kR zoaNhXy${ZP|7Lfw&l5pry`3A^7Ni#xbRXVp{VcQiPV&Pjt96SkW`>3~af_)7?l=?l z@AZQ!Ydx#usXf1rAKZH9?b_lCD^`8FoPO`G?xl~n5AUtY7u~Ve{m$I?S!+YpcR1}h zk*@tcgjFBU@jjfIe`nH8@Azw_HcacbPp-aKU+(k%XVv<* zS;9N-?X{ZTe)`}3t8d>NWi;O~S90;QEc`aPH^*yl%8375x}xWMx_w;rv^_@Ce>xQyi_KhbrM>Ia{HyFYuiMr>ee&wZ zyonRHo|3OU;bP0l+XkK DBwHM& literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU`+OOaSW-r_4c~AP?LdxgX6pU z%-F2JrpadnIKHe-TC8DsR$Wiu_hu5;0nRxG8ig$ynbixJ)C(T4_&orLaLQN!1wkTA z?0yee_+TPnWgroVGN2k?w(UCe*M9#zGx^`GRsG_!>^oHM+$#_BDLBtrthwVoqdWWl zd+N;BiM{cIT?TmTcMcOCMZIFMDmQR@}`PZgWH9j+D%uqYt;)8Q(U} zi`sGGNN>cPIa^n;Oplq9@<40)r~c;Gb9cNkUiWC#d_KLRZSM0O-PdY;|8}!V*ZAZ1 z_TOLcg+9ouJ-YQzc=tN1gS;)L-&ixfyB`{F`?9~q`cs)~q)e~fzk(gBuHNU^(RKT8 j?t>Dz56JVn?J9Fs%Rf4wC%IVyL!H6X)z4*}Q$iB}$$+cz diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_15.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_15.png index f5ad4b38a8668c7db9635ae8adb98e8237b8a3e7..1ca5b54537904cf9b307f0e0e50de55315350a6e 100644 GIT binary patch delta 442 zcmZ3^^p1Igay{c#PZ!6Kid%2*-t}vC5NQp(_kZc@wV7J2mev1KYCFTD)}$v&8qSo{ z&%K$*@_@zf!2!-W2O5PffT(~;y#OS_!Z+u@T>F!c|0vhi6f{4GYQOv1h2gu|gZ#tm z<;3qe?09nEU?Vg8Ia9tn^^u`XAl5s_f|U!Knc4a7s4}lBd|(z68ul)$dPPlVrONVm%+ud| zHT!nSjw7qGrcXcl>d}+S*Lm8#*Q~2L5E@<{-gf`jrJ8Ry9u`bh-=tL^Q@Z@7_4#bB zn9>UE1FHQOo0#(&TZ5nS|6BH+{T*XLd03n=n=N@($Zvu!xt?#+o~TlY18fn34W`jskmZJOrXakq@Xp@t=`Ln>~)y(XcV?+WL7U=QZIPG;`aa~!YN|`6a z;e&~Qm4QSc%7AK2+q!?$ZMx6Dj^o|?8@ugT3JxFG{4xAK_c{T+;(~$)2O5iyHST^I z#>ppRkshPGW6i~bjm+%p4ob4WI}rW!)c#Xl(%L(YBpxKz6$r>_)|cn?#db$+ Ro(c3hgQu&X%Q~loCIB0OaRvYY diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_16.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_16.png index ab72809a827a6dd1e271042e7d0490b498fa3c92..0db67d87b8155eb31a57fb123c9aa496c1f71cfa 100644 GIT binary patch delta 447 zcmV;w0YLt=0*nNZBYy$YNklQiY*JR|{E zGVMoK)(inSffG1z0w-|b1Ww=t4xGRV95{g!IDrEvaQb$**8cxFwHD}JSbAbz?^?=MgC%DT75!|H%2=3yu4V=p)IB4LmMjiuqDVmQ1m!duX1Ng0I zSHSh+&CXZenn~tMCz>Dmk=rbWvh9mB|eJ_ar|_^%$5f=g_#?Hc?Y z_qIy7^x1Y4Zud<+F~}*n(fv=q7+T`2>3vt3eoOpryA^P=FTnJrcL^?ku_KAE5<3Bx zc+Mkm$@^gXZ>r&TUbep$ZuIhX3NF1OEx0GZt$w(zn6pdoBPam-Nklyz;!XD}Q?tn&y3xGlk-#`1ffG1z g0w-|b1WsRc0=v8;uil@1bn(B91s9D? zi^BR2eVya5zU_3zne_CqL%nx49pugX@3!Odu^nr)--SQun;9B*Fx1zt>cOVvA8uyv zRDPIdt;4PN_|$0LC+to6AL*4q;GrgVh^nm#q(bJ7LO`qj$NfvvsI(@441Fefe z58dQ6ZC_3d|5_hW&2r~z#8u<6P`jz~YftQX?f4z&aOM}bm$e^+=}eO6SLfdy%4NaG z?stIG0_1-P2?_gO{~B5_adjG7p1bd9v)hWBH?Q9PKE|-@%r@2RqNzcLt(eS> zH%z}?=o8WJdae2R;nX`~`|p;8pSxsq`%~49P1XMnMdzl>)~ygtTK!;NUzttJ)udlb z#Eo2T*&A)kYo0xGj*GhR%y9Q_i}y?ozb$g-O_f?y(7#u;46AQVGUT>>lpCh~f9Yi2 z={NsPH9jd~aZ?(U1fbq#1bZGx0>g??UH&I~)25@APo-V57=Xaj)z4*}Q$iB}_#QBh literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU~KVpaSW-r_4dZaO-%|S4uSvv zFMqxFvC}2`A z0Ew{h%{jm+0}}x&1BpPC0X16jtlRp&e&YG_x6)E>uYGI(O}C)DdAenT?d^TP?_Fe^ zSNg~MVO80?SAWl6cYEOWJ->vJB~?6M4gP z9~pc4>hChXx#Qh!jk+)9E4YZG!x6a5$Nn_N?0DV2-(W=l^V4vv<9$5bEsxKD%RZTE z2bY0f0T+GG%yPKZNs7GhWYjigErp_Y+H2sVU#%5z760=pxUl2=f8z2Z0`Bxl&bR?B z`jxx#YOaI}+0nt(!i8OEIJtJaaVOaQyU4?LI^61+-^@;s{l*{h1%p*+<#0QPv}lNo zPdRojGMBC6qCN)6It$B$n_Y`u1*fxt11E3-2TtGw4xGRVoWOw-IDrEvZ~~`qeE~7G WEAN&%J}v+N002ov22Mn-LSTZ_=GKz{ literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2KRsO>Ln>~)z3Ir;q9EXMao_)? zAK5aPe1ksK8AXeI71IiKo;a2B0OyIDy2{2qWrIAtt=f*=tlcE1NK zd@vEPGLQ&F8Bk3uSGei_(z*QWB=b^VtSdg)`<*e|?VXkQoga2_$4@-qJM>mY>dwNC z2O2;3c(;EJlVq9xL6==mfHy{C*83d+CIt&K_BY%vjh{Kq``Lx=XRH5TV??r(9H(8m a$?W~XR6v47`vEWz7(8A5T-G@yGywo*Y;f=Z diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_19.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_19.png index 15a37fea28caab5dea681bc6df7b050183aa6a5c..2a713255ac6a6c342027a008184e48bd7c5bdb58 100644 GIT binary patch delta 500 zcmbQuyozOlO8rMq7srr_TW{~4&TBRha0vYOfBEgurK`NSZan_zV-fyJ&9~#>lf=ym z$EQb?S+G1{@q2K9bIyTAVGAHCU{WstiLmg^IgqJ-r|{2z^UZf(Y}_M#xp0j&U+zP< z@&&?oy8ik%@7@$#z98*^QJhM+ynN?$u5$JYu|)AZs|u&qH&vJ4pMN{uKJK8d#1+Xq z@BcSvGkkyb&A&1Gzijza+3AL>@33Ca3$tW4x3ZLM?VfkYef`r@hkNDrobdF$a%pO2euT4#V@qSLq zIh&oaQhLRLHq7FNl9?>5%l90Z7@<%P@&l&~%vVh8AYa}2IhT2ztWfFO{*K(fzQk{q zPI^Y)U3R=UKDB+f(SbF`d-Fc?ox544T*s08gUijowOb;%dPhh9?u;$33NBygslK#( zt5=Iy^17g^s~zA)9t&nrezEGE@?hhO$~tpe3` zC+Gak>yDUxH+I4L7VgT8cD(O$+$^h$tcvD5EU>P7ua+cM!I~sibJSw`T+6^Zcx*7M g!(syzKQI07ujvlhym;nepUHx3vIVCg!0N$U+S@&g|;Z+#3n z-R8~U_ke|O&H+vti^*z?3iSs#!R$t1ivlL~0w#8d>`KNv67%yXUY}d5Q+?dz*sj+X z#NNH)ENO}^{Fhna?)Qo(ghlVMbJ3Ug>5rBkn#WXn{W3%oT}HPTwvTbF|6Pew~PhUCl6TQ{sf9NGDH35_WJYD@<);T3K0RU&>qtXBX diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_2.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_2.png index 9f7999266660605a4b65ab12867a12cce8a29314..350c2e3f281308688f14900048433dcfe221334a 100644 GIT binary patch delta 614 zcmdnQ{EuaVay^r)r;B4q#jUq@9VZ=95MaG<=l`X1MLMTl7VPGH@jG<0WG|x}XA7&P z+@@4MUk1MeoE8O4eg_(bVI<$21|S$dh~ZhvxWb?%a&^9>Kg+O4hAmK)|}?>J#=C;YB2QguhmNl%u%5-xr{1INz3!ilTv zqIXQYch8C~^sLtUeZ}AQUn}~fa%cDXu*To7wAVe4Tw8i=r}Uj^{0}6zPmwH`zwXzW zlNZIj<3tOlZhu`r?PQ>2|V_V(*+@p!oS_8oV##WMrj zPy7se7^PMEweo#oy)MW6a~Fg9JY-kh%DE-+oilxjq4Bx-U!_%l7u7P~>DfE+;9rB7 zXHQ<0?U)vu5Z*r9_Fz;}kF@OZcW?Ge=I>o~&wZDOUbfUeraNo2)xSuT9Dh)C&BMB< zF!H!>J;VArscV_UE8|{A*3R7bWUJOKzJkoB(Ts1UA5={{9ds-En?ykT-C*N;?NwWO z|8iwG7u;N*_%c@FoQD4~Y0pjKGf&Tdyr@+|w?OUA^2eLx<)<}FHU-5r(2Fc{z@Y;n d!C~}7wZ1iNb@2PdWycwSz|+;wWt~$(69BV6BDw$o literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRV660XaSW-r_4bChP?LdxgX6pU z%vi6;CeJh`$+zK8kI6T-3EY*_y7^3?LD-^^S-pUX-R}X5--833a}G2DMT9L1nA8hE zA}oA!4sgoAM8L{GA`oRjjaqEmbJrh#@m%@#pD!ow#hte}!200aKI7L9`sP`9A9%}t z%j(7V?=BDA{Fd}ES8wT+tnfbk^H{G$b-^7MRc&@0U{bB>?~eJJ`Y`I;w`*?{>Vs4NFwQev8pHVg?W*%JGE;w?&StxF z=H;%`LX%{kmD~rlFK$|XEN(~7%eoSom-Qt!Ax2Rc!5AwoFp8bgm zIGD?}{r2-lW_G@qjiN7QwpWDwT(*}tCeWn))S`?BU5gsEyF|ZL?O2tuzHN2SxA4WM z-poF;?(u=W;uBxX)x(Tt;R9MW=K#>MMrNR8>ILsxUe_)-y{i4dmowJC70r$9^?A%c zxy-xD&()jbG4bWOWpg*aaesEL=G(7T&;M*+H(~Yrn^tdcX4_tNnO4i8_iJ8H=DKHs zu|Jj9_v%USP|kmP|E;3&gI&*m^B3&De7-^Yo^e^j>`IM#NjuN-bx(A5-243Ualu5v zn``#!RzKb)y`!g3OL_5wwGTG&Pt<*%Rle$ zPMY81Eqh^Y+w9Vfv7+mal-^m@9%5h0xX(7`z3zIATQ7JYyorvRc+m4(+n%$&&(7%H z^nG@YwPRj?*rBg_&Lz7{-^9E8nGj_H4{%TbKmr^T1z#?U|Lxfl;rRbrKLZeWy85}S Ib4q9e0FK@5oB#j- delta 222 zcmeBRS;;g(*?{4Lr;B4q#jUqDPVzPw@VGjDzi%>Sf{f0S{^y=C%})|JuPi=sisJz1 zoCA%*7LCm66aA&?S@`B0;FPg|2ox}}`#oUsdjM6U+qQa_wbeBibBT4ol^Dt;N}gAl zuXxaQ(AQetqTs=SR^Ch2?;giKUACJyMq`$Hs)p2#0F#1+8LuA(T?{*{y7+Ha_|3nQ zZ=Eo5I|Axf9a%85hU0JR=hvs%40|HYz3=8 z?MEeRrT~%N8DqHqfwul5;{CuK3>W<&0QX?Bqu%QYD!9YoPWoHmz<~o-a5DXmTfC~g z>DvabD4J7cQ8aKx(ZCf&yB@A8+SPEC(XNGia*^5ZIB<8v2^=_q6F6`JCvXA>PT&L% zoWKbjIFV`}f8Ye}PPjLlx@2t%ld+Y3<`|+j!D&%oy#vaCi=M>Z>t@Cfy?arcK^uAg zzt@Z&OXP9Reu$nvzYQ)DV#i*TqtBf(=IwBqo1XPf+dIeb8Mu^{*J8NLZ)oV^+KzzLkd2^=_q6F6`JCvf`HF9fk+xy>ck`2YX_07*qoM6N<$f_l`+_y7O^ delta 176 zcmV;h08jtj1E&IzBPIauNkljrG7ShP!8aN&?qPX0000~IDFoetg&n=jE zK9uKy&bjsf*EgJgb6fjC*!JK;xBh3=|FRz%)ofwpFdOtj7TloUn$T=nYtm__VvG3!4 zyW-K4&ud=)c^A6l@`bqI&~(n z{d{?)oB=yM>g#moyy3PeVDdZAC|tnAH>UwcK41Z{K_oNK*ANoj?|E;VJLQzt=H6vq zyHF|i*5c!VrfiFua+W2ZpSDald9Uu3toXC*&gV5p&wRQ2)~@w@k6sy`@jEy5{T`|L zLOXo?|DP$V58o~*dqDEanI-$)%1wXivzLTJF!~g`Iu6{1-oD!M=`@Xa~EIp;v5utg&?P(;1p0gK-Q zkO-%Y1yB$s0#*hV0V@M)+`<@hn@|1fcBb%xnbPsC+pZLRs=N|f zSEhd_E91D&)V<4ZWbMe>vUL8Okls7C!B2ZGe+w*_Iyv|C=2L63ORqLRd;Fj(pV26P x()QNNd*FTr`5xj|kngei736!gK>EG<-kfwZ#=@Gd|A2wc;OXk;vd$@?2>{5Evnl`p diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_23.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_23.png index d34c47d9f4cfa131b4ab806b58f7cca9b9ce78fc..9413c5cd41cd1f9f27f5027f1d52340ce1278bc6 100644 GIT binary patch delta 480 zcmcb>G>v6~O8s3=7srr_TW{}r=QSIMI0U}0zg%)p%lD6+8vk7F(lCu5DlFDQvD4kQ z@i1C63R@H~sTVw8@q56+H|GGS3`nGrS-qgj=uT99{i^TV#dd^kc#}~6M)*!QW8HV_ z-M`QN@hu4F_4umLENxZspp8#v$HDhz1-u1w%bVV5u^;lan0eavSx}^+R1-oCgv*CLmYta zq|4tAy|ocu@_VMz#aiE+>sa)Re#91B{9BqUZu@_6!GGD9qyMb>RX5$`^ZPy{_i(B0 z|NW0wmhWz!arfQT_a!}%(lJkF-Dee-J#qK#rh?o0Kk^$^@9}A3-u~5m^Ymw7JN)f4 ztmnUoD%6=-Tz}$DZ`$!SrB(&(ciwGGIkzxd>LTCwcUOyq^s04s-*(lTIyL#)t|y{@ z1@a@swDu&wwON1r;k%0MbES^x?NI)_<5aoyj>82rvunPdbOkynw(R8U8mo|6^>V3m zO2tC&*Oi{M-j{T8Pr~Vci$5)$2nuH=c4)}YIRFfKS+LOZ_`eMON9PpWjnqhF00K`} KKbLh*2~7Z&b>yP} delta 242 zcmbQna)D`rijladi(^Q|t+zKFxmpYaTo3O1zw|Mq%N3QqKNiZJ$?Ldqv`6h)KuRjh z0~Wsr2RP>(XcV64FE#O=Y<=&l-|640LLWpO3~Rr;QEf*%h!UVB2v{-O+z)V}WM%&g6eu<#{J^4>UiRbfNF|@w0q(yt-`fP6ved z@4IC6>O}Ul8>^k}_sbNYu<4#wbwTETRQlI_Y<>?|_~snol(A?OwrFHlFJNNl2MWPl l1QMP2UQC{e9indKYHqz&TMp;fu2&d-OM~{mv76u7a6l0X|xb zeP7p?_1D@i_jt$bmv2_>_#$X0d%8Ad<(jT&$sMAFa}`g9cSp~CJ5}LF%^GNFEkMFK`?|x-6%Y$bgkLbRjnCtgu10)rIk^>+AABHbemWNL+isAsKF$PapKbLh*2~7aDd^BwU literal 453 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRVC?a9aSW-r_4elJpu+|Nu8#lz z`yaMTknk=S;rtb{vGEZ9*0mAmzAjYW&BJKXC~Q%{q+alV#qR+N-<$)SG9ZygX7vIl zcA$vgg9Ds%4!}ep%0MCzWd%&j4?kG<`t|u2Ws{C?s;b}od_T{-cMIJ8ADHa;@>9QY zwM@*@_p;29H_Nl?JGnC??@VT{;xaE@wEE$s$6I7$QXdF~KYwku%J|U!#_n@>@AH&> z+Ht`2ZtltRJMKQ%_Pb}b-Gq>N>w*gQzg@iRzwG;M$q(H8%Ea{ka?FoAy*G8$nnP!K z?(oDspY+84@Y%SxQ(ZsY-S)ojx?!sP&c5H74RP;x$v!A^%5Ge}FKkuZP383`R&l?5 z_3u*f*Nf}-?3$;Q{{GLA!-3{eGVe~BT;1B|b*R+u^6i7YI*eB0cl`gWe>A;vvA`;4 tl?b-Lz!qkpPy~k=C={V#wtVhymc^A^x)0)gD}d3%;OXk;vd$@?2>_^f&1L`q diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_25.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_25.png index fe65acef832f9f761464f1632264453dcdb5bc32..78ad268939b95483fd9b1e88624ea043ca0e6188 100644 GIT binary patch delta 360 zcmV-u0hj*C0=EN@BrSePL_t(|+U?v?YQr!PKtbLA(#dDQAh1`vau&^lLQ5j0_24*i zLF1#A4Tk`c{270^`@it`ePzv)H7B@YxEWd}z|j%y`h8@c>N6T#0o;?<0hjz1S$SrF zD?XUuz`4flzUE{fWS=Ss4~qT9c(Y#YCNW4B_?wl|q~!p+97 zp4CVFTSxB)4lSI(2^=_q6F6`JCvXA>PT&L%oWKd3E`0$Ke)hSFZHM}K#_&I#Z(<}L%u*MYv8cXtz1r`q%J0=YE#6kA8@XM&8)jST zgv*{-+~>CXup<6cw*R{jBafzxLf_~Qo-E$c9<>zicE~*o5aYi33dg< dSx{y1TbS?iIx~5irA9FTfv2mV%Q~loCIE$HYLfr} diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_26.png b/OpenScienceJournal/whistlepunk_library/src/main/res/drawable-mdpi/frequency_piano_26.png index 8baf0566a283fc23f4af94dbf505fcb16c2e1ae8..a9c73924e66fa1e6366cda0253ef8a06a916b4d7 100644 GIT binary patch literal 606 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU{dvTaSW-r_4e+?qGkmF)`0*2 zm)|~KGG_+EZtjTlb5A-42ObV|l)v`aJ#VJ7c!O{O6W<&l`G5sRGOL5wKr%&q$K#4x zx7+U9e!iQ$cki{g&D@7-qtdrDE8o7y_U?V(ws&7DXL8&*(Kv-Myj0*m-@5PZ+vbFZ z7F?{2<}0_`RdsyEiHn?imF&?E&pmix*1kKdc)8)aqD5hR*Dn|>*Iza%qO7U;THzm^CwUHxavnXBa!**TU@zc2gX-rs!j z9kLfMJ*awjH7b2>dF$-PX?)_5Wo&o0Z{GLoNO1)}pX;fbl zy8BJvxtMr=+cRgHOci&m-oN>FZFE`c#w~F>*1Yv!|J3x-x+Ny>CPsUdeDPu3&XHGA z`(JL|nq`HTZm_M}+f56yoS!{p zXDDynoi*P!E;P1uTf^k9jO>0ukHGwmzopr0NI}y A_y7O^ literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNmtRU@Z4^aSW-r_4bA%Uz34=L*Tpm z%-F1s7YEKvG21tPN8pwd+Cg{ZqBfmXWKb_)V)uK%!Z+st=bQtL!WNCpKoRwV2P}RM zKq8zn7C=Fm2v`|d1gs3Gaf`&AZF}Xy@6VU~e0g!zo)H9ODta;UR`rYlf1;1~Wev_I!bMAw#as#gI?Cj>2cP>_k z?K)PfcjeYYCHA}{kDl~}K0UEHw`#}g?#VncUxoI)j?44fv6@}4x_7n3Yxf0H54omQ zf04Sfb=9A3XD=4dv=@k~uS;+E{pFTUf$^fL2j}h#?_OsW-YVS~#y9>m zKYM?}>pwgDbo$)-YPn;so{?d^UO9P>%$#?GJPQpI9HF#h|0_=C$sa771D13GV}ilc L)z4*}Q$iB}m)5