UPDATED: Stable: SMath Studio 0.99.6671 (07 April 2018) - Messages
Application can be easily extended based on your needs. Built-in Extensions Manager tool allows to get access to hundreds official and third-party resources of the following types: usage examples, plug-ins, SMath Viewer based applications, snippets, interface translations, interactive books, handbooks and tutorials.
It provides numerous computing features and rich user interface translated into about 40 different languages. Application also contains integrated mathematical reference book.
List of changes(between 0.99.6626 and 0.99.6671 versions)
Improvements
- Functions stack(..) and augment(..) improved to automatically expand scalar arguments to the vectors of appropriate size;
- SS-3506: Trailing zeros option is now available even if Significant digits mode turned on for the answer;
- Equations breaking improved to support any applicable operator including the following ones: definition and equal;
- Scrolling made smooth in Pages layout view;
- Step Into toolbar button made available even if evaluation is not paused - in this mode it allows to start evaluation and pause it in the first available action (no need to set Breakpoint to start debugging);
- SS-3513: It is allowed now to use vector-based expressions as indexes for matrix definition;
- New function added: round(3) where 3-rd argument allows to specify rounding type;
- Rounding type option added to context menu of Math Region;
- Support for Shift+Enter keystroke (in addition to Ctrl+Enter) added for equations breaking;
- F11 keystroke handles Step In functionality now;
- Close button added to Debugging/Output panels;
- SS-2322: Ctl+A keystroke enabled into Output window;
- The following internal setting support implemented: NumbersOutputFormatDisambiguation=CurrentPreset (can be added into settings.inf content as a separate line) - it allows to open legacy files using new numbers format set into program options;
- Added ability to install plug-in using drag'n'drop of downloaded zip-archive into SMath Studio window;
- Added support for Taskbar progress introduced in latest versions of Windows OS;
- SS-3526: Vacuum permittivity added to built-in units set;
- Splash screen updated with several random slogans.
Corrections
- SS-3504: Global settings do not apply to the existing Worksheets on file open anymore (happened in some cases);
- SS-3505: All text entries created with current language set instead of default one;
- Automatic scrolling on worksheet cursor move improved to make cursor always fully visible in Pages layout view;
- Critical error occurs on attempt to override read-only file fixed;
- Errors handling improved on save Worksheet to file;
- SS-3508: Page elements invalidation related issues fixed;
- SS-3509: Localization specific functions names formatting corrected;
- SS-3510: Rounding issue happened sometimes when Significant figures mode is turned on fixed;
- Numbers rounding normalized: when a number is halfway between two others, it is rounded toward the nearest number that is away from zero;
- Inactive page area is invalidated when required now (in Pages view);
- SS-3512: Focused region behavior after using Step In functionality fixed;
- SS-3514: Zero decimal places setting handling when significant digits mode is turned on improved (context menu and settings dialog);
- Displayed error occurred on incorrect break/continue usage fixed;
- Rendering of range(..) functions corrected;
- Slow performance of el(..) function in some cases when working with complex numeric expressions fixed;
- Inserting 'i' char after apostrophe symbol or as a first function's name letter fixed;
- SS-3511: Rendering of boolean equal operator improved;
- Result matrix resize symbols made agnostic to fonts available on the machine;
- Symbolic engine error causes evaluation abort fixed;
- Refactoring of the Calculation logic in a separate system thread performed (errors related to manual termination of the evaluation fixed);
- Mouse wheel handling by regions in Pages View mode fixed (it was impossible to use mouse wheel over some parts of the focused region);
- Replacing of function existing on the worksheet with another one using Dynamic Assistance list fixed;
- Select All (or Ctrl+A) inside a Worksheet allowed now when Calculation is in progress;
- Loading of the program became faster on some environment configurations;
- Vectorization operator improved to support more different cases;
- Fixed unwanted scrolling on copying Region using Ctrl+Move by mouse taking Region by it's border;
- SS-3517: Setting of matrix elements using linear indexing fixed;
- SS-3519: German units names translations updated;
- SS-3520: It is made easier to remove the grey area on the bottom of page by doubleclick;
- Display of current Region fixed when using Step In functionality in Pages View;
- Fixed issue with numeric equal operator accidentally inserted into equation for evaluation;
- SS-3525: Additional checks added to operation of filling matrix/vector elements by index;
- SS-3524: Multiple rename behavior improved to handle arrow keyboard buttons correctly;
- Worksheet invalidation corrected for Pages View when Regions deleted as a result of Undo action;
- Worksheet invalidation corrected when Regions deleted as a result of Undo action with non-default worksheet zoom;
- Handling of input into Region Description improved;
- Incorrect default print page size on program loading fixed;
- Change of print page size on Worksheet printing avoided;
- Unexpected pagebreaks and invisible Regions in some cases on print out fixed;
- SS-3531: Rendering of int(2) function corrected;
- SS-3519: Inserting units in german language fixed;
- "No printers are installed" exception avoided on Page Setup dialog usage.
Miscellaneous
- Refactoring;
- Function round(2) changed to use rounding to even;
- Interface translations updated;
- Errors handling logic reworked;
- Loading speed of the program increased;
- Region can be moved pressing on it's border only when Region is focused.
Download
SMathStudioDesktop.0_99_6671.Mono.tar.gz (1 MiB) downloaded 4770 time(s).
SMathStudioDesktop.0_99_6671.Setup.msi (2 MiB) downloaded 42096 time(s).
- Desktop (Windows):
Framework: .NET Framework 2.0 or higher - Desktop (Linux):
Framework: Mono 2.0 (libmono-winforms-2.0-cil package) or higher
- [ARA] Arabic / العربي
- [BEL] Belarusian / Беларуская
- [BUL] Bulgarian / Български
- [CAT] Catalan / Català
- [CHS] Chinese (Simplified) / 简体中文
- [CHT] Chinese (Traditional) / 簡體中文
- [CPP] Portuguese (Brazil) / Brazil (Português)
- [CZE] Czech / Čeština
- [DAN] Danish / Dansk
- [DUT] Dutch / Nederlands
- [ENG] English / English
- [FAS] Persian / فارسی
- [FIN] Finnish / Suomi
- [FRE] French / Français
- [GER] German / Deutsch
- [GRE] Greek / Ελληνικά
- [HEB] Hebrew / עברית
- [HUN] Hungarian / Magyar
- [IND] Indonesian / Bahasa Indonesia
- [ITA] Italian / Italiano
- [JPN] Japanese / 日本語
- [KOR] Korean / 한국어
- [LAV] Latvian / Latviešu
- [LTH] Lithuanian / Lietuvių
- [NOR] Norwegian / Norsk
- [POL] Polish / Polski
- [POR] Portuguese / Português
- [RON] Romanian / Română
- [RUS] Russian / Русский
- [SCC] Serbian (Latin) / Srpski
- [SCR] Croatian / Hrvatski
- [SLK] Slovak / Slovenčina
- [SPA] Spanish / Español
- [SRP] Serbian (Cyrillic) / Српски
- [SWE] Swedish / Svenska
- [TUR] Turkish / Türkçe
- [UKR] Ukrainian / Українська
SMath Studio tutorial by Bernard Liengme.
SMathPrimer.pdf (Date: 11.11.2011. File size: 2.06MB) - to open in Adobe Acrobat Reader
Introduction of the use of SMath Studio by Gilberto E. Urroz, Ph.D., P.E.
SMathStudio.0_85.Article.Eng.pdf (Date: 23.09.2009. File size: 828.96KB) - to open in Adobe Acrobat Reader
SMathStudio.0_85.IOFiles.Article.Eng.pdf (Date: 27.09.2009. File size: 453.24KB) - to open in Adobe Acrobat Reader
SMathStudio.0_85.NumericFunctions.Article.Eng.pdf (Date: 18.10.2009. File size: 622.45KB) - to open in Adobe Acrobat Reader
SMathStudio.0_85.Programming.Article.Eng.pdf (Date: 18.10.2009. File size: 411.74KB) - to open in Adobe Acrobat Reader
SMath Studio icons (
SMathStudio.Icons.zip (Date: 12.04.2010. Size: 63.74KB)
I have a few questions
- Can a snippet be nested? I have a function "snippet" that relies on another snippet. This file is an example and I want to reference only this snippet function which will embed the other snippet function
- Do Snippets need to be saved as SM? I had an issue with my SMZ files which I default to saving everything out of habit. I have not tried this version
- Equation wrap does not work on exponents. I know this feature is a work in progress. I even posted a work around
Split not work exponent.sm (14 KiB) downloaded 90 time(s).
User error on the Snippet. Because snippets are static, you can embed one Snippet that calls on another Snippet. I thought it was more of a reference like rfile. I like to go back and update documentation/clarifications as time goes by.
Jean,
The sheet I posted is the second half "liquid" equation, per ASHRAE, to calculate the water vapor pressure. It's parabolic and the numbers are within calculation error due to the coefficients being converted from SI to IP. Disclaimer is in the 2017 ASHRAE Handbook. The sample values that I ran, I was within 0.002 psi of most values published in the handbook ... well within engineering tolerances
WroteThe sheet I posted is the second half "liquid" equation, per ASHRAE, to calculate the water vapor pressure
What's that second half liquid equation ?, I must have missed something in so many years.
My point [previous reply] was to use Sigma instead of Gyzma.
Inst_Water bar Saturation [tdegC].sm (51 KiB) downloaded 94 time(s).
Has this been figured out or do I need to add it to the wish list?
Postfix operator (dB scale in my case)
I was trying to transcribe some old MathCAD sound calculations
WroteAndrey,
Has this been figured out or do I need to add it to the wish list?
Postfix operator (dB scale in my case)
I was trying to transcribe some old MathCAD sound calculations
I've missed this thread. Please add it to https://smath.info/bts/ - it is easier for me to manage requests there.
Thanks in advance!
FYI, There appears to be a bug in the forum software as I could not post a hyperlink to the forum page. The URL pop-up came up and it would then lock up my web browser (IE and Firefox). Clicking OK or Cancel did nothing
Hopefully you can make some of this terminal message i get and fix it eventually.
QuoteWARNING: The runtime version supported by this application is unavailable.
Using default runtime: v4.0.30319
(mono:960): Gtk-WARNING **: 22:55:52.067: Unable to locate theme engine in module_path: "adwaita",
(mono:960): Gtk-WARNING **: 22:55:52.086: Unable to locate theme engine in module_path: "adwaita",
Unhandled Exception:
System.Drawing.Printing.InvalidPrinterException: No printers are installed.
at System.Drawing.Printing.PageSettings.get_PaperSize () [0x00018] in <020b17b0944a400f98b947de862cf1c4>:0
at SMath.Manager.AppSettings.Initialize (SMath.Manager.PluginsStatusEventHandler loaded) [0x00013] in <357f5ddcf7854e8d98f4122101e9db1b>:0
at .. (System.String[] ) [0x00059] in <2824d45d6dcf4ff891701e290e7054bb>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Drawing.Printing.InvalidPrinterException: No printers are installed.
at System.Drawing.Printing.PageSettings.get_PaperSize () [0x00018] in <020b17b0944a400f98b947de862cf1c4>:0
at SMath.Manager.AppSettings.Initialize (SMath.Manager.PluginsStatusEventHandler loaded) [0x00013] in <357f5ddcf7854e8d98f4122101e9db1b>:0
at .. (System.String[] ) [0x00059] in <2824d45d6dcf4ff891701e290e7054bb>:0
WroteUnfortunatly 0_99_6670 has an issue to start for me on linux, something about the printer seems to be required.
Hopefully you can make some of this terminal message i get and fix it eventually.QuoteWARNING: The runtime version supported by this application is unavailable.
Using default runtime: v4.0.30319
(mono:960): Gtk-WARNING **: 22:55:52.067: Unable to locate theme engine in module_path: "adwaita",
(mono:960): Gtk-WARNING **: 22:55:52.086: Unable to locate theme engine in module_path: "adwaita",
Unhandled Exception:
System.Drawing.Printing.InvalidPrinterException: No printers are installed.
at System.Drawing.Printing.PageSettings.get_PaperSize () [0x00018] in <020b17b0944a400f98b947de862cf1c4>:0
at SMath.Manager.AppSettings.Initialize (SMath.Manager.PluginsStatusEventHandler loaded) [0x00013] in <357f5ddcf7854e8d98f4122101e9db1b>:0
at .. (System.String[] ) [0x00059] in <2824d45d6dcf4ff891701e290e7054bb>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Drawing.Printing.InvalidPrinterException: No printers are installed.
at System.Drawing.Printing.PageSettings.get_PaperSize () [0x00018] in <020b17b0944a400f98b947de862cf1c4>:0
at SMath.Manager.AppSettings.Initialize (SMath.Manager.PluginsStatusEventHandler loaded) [0x00013] in <357f5ddcf7854e8d98f4122101e9db1b>:0
at .. (System.String[] ) [0x00059] in <2824d45d6dcf4ff891701e290e7054bb>:0
Do you have any printer installed? Can you try to install a virtual one (if it is possible on Linux)?
I have problem with new version (6670).
Assigning a variable value with the appropriate unit before the "for" loop causes an error, where the older version (6622) worked correctly.
example.sm (5 KiB) downloaded 105 time(s). - example


Regards
Rafal
WroteI have problem with new version (6670).
Assigning a variable value with the appropriate unit before the "for" loop causes an error, where the older version (6622) worked correctly.
example.sm (5 KiB) downloaded 105 time(s). - example
This is by design. In the example you are trying to set element of scalar by index. This is an error. In previous versions of SMath Studio program just lost value of the scalar, which was wrong.
You have three options here:
1) Remove σ:=100*MPa line at all (actually it gave nothing to you in previous versions of SMath Studio as well);
1) Add Clear(σ)=... before the for loop;
2) Use another name for σ variable.
Best regards.
Wrote
This is by design. In the example you are trying to set element of scalar by index. This is an error. In previous versions of SMath Studio program just lost value of the scalar, which was wrong.
You have three options here:
1) Remove σ:=100*MPa line at all (actually it gave nothing to you in previous versions of SMath Studio as well);
1) Add Clear(σ)=... before the for loop;
2) Use another name for σ variable.
Best regards.
The change was introduced because issuing an error message was preferred over the danger of silently doing unintended things (SS 3525)
The real problem is in the useless error message "cannot calculate". It is misleading, as not the calculation does fail but the assignment by index to an existing scalar.
A message like "element assignment is only possible for empty or matrix objects" would help. I am not aware of other situations where such an assignment might fail, thus this message could be used by default in failing element assignments.
Sorry for inconvenience!
Best regards, Andrey Ivashov.
anyway 6671 gives an even larger exception notification
QuoteUnhandled Exception:
System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542
at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x00028] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.TermInfoReader..ctor (System.String term, System.String filename) [0x0005f] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.TermInfoDriver..ctor (System.String term) [0x00055] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.ConsoleDriver..cctor () [0x0004d] in <2dfe84a36ef4410ca18642993b51b799>:0
--- End of inner exception stack trace ---
at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x00007] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Console..cctor () [0x0008e] in <2dfe84a36ef4410ca18642993b51b799>:0
--- End of inner exception stack trace ---
at System.Windows.Forms.XplatUIX11.HandleError (System.IntPtr display, System.Windows.Forms.XErrorEvent& error_event) [0x0009a] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at (wrapper managed-to-native) System.Windows.Forms.XplatUIX11.XPending(intptr)
at System.Windows.Forms.XplatUIX11.UpdateMessageQueue (System.Windows.Forms.XEventQueue queue, System.Boolean allowIdle) [0x00166] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.XplatUIX11.UpdateMessageQueue (System.Windows.Forms.XEventQueue queue) [0x00000] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.XplatUIX11.GetMessage (System.Object queue_id, System.Windows.Forms.MSG& msg, System.IntPtr handle, System.Int32 wFilterMin, System.Int32 wFilterMax) [0x0001c] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.XplatUI.GetMessage (System.Object queue_id, System.Windows.Forms.MSG& msg, System.IntPtr hWnd, System.Int32 wFilterMin, System.Int32 wFilterMax) [0x00000] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.Application.RunLoop (System.Boolean Modal, System.Windows.Forms.ApplicationContext context) [0x00331] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.Application.Run (System.Windows.Forms.ApplicationContext context) [0x00011] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.Application.Run (System.Windows.Forms.Form mainForm) [0x00006] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at .. () [0x0000a] in <2b5e52884bc94eee85ddd10306fe74aa>:0
at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00014] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x0002b] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ThreadHelper.ThreadStart () [0x00008] in <2dfe84a36ef4410ca18642993b51b799>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542
at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x00028] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.TermInfoReader..ctor (System.String term, System.String filename) [0x0005f] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.TermInfoDriver..ctor (System.String term) [0x00055] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.ConsoleDriver..cctor () [0x0004d] in <2dfe84a36ef4410ca18642993b51b799>:0
--- End of inner exception stack trace ---
at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x00007] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Console..cctor () [0x0008e] in <2dfe84a36ef4410ca18642993b51b799>:0
--- End of inner exception stack trace ---
at System.Windows.Forms.XplatUIX11.HandleError (System.IntPtr display, System.Windows.Forms.XErrorEvent& error_event) [0x0009a] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at (wrapper managed-to-native) System.Windows.Forms.XplatUIX11.XPending(intptr)
at System.Windows.Forms.XplatUIX11.UpdateMessageQueue (System.Windows.Forms.XEventQueue queue, System.Boolean allowIdle) [0x00166] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.XplatUIX11.UpdateMessageQueue (System.Windows.Forms.XEventQueue queue) [0x00000] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.XplatUIX11.GetMessage (System.Object queue_id, System.Windows.Forms.MSG& msg, System.IntPtr handle, System.Int32 wFilterMin, System.Int32 wFilterMax) [0x0001c] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.XplatUI.GetMessage (System.Object queue_id, System.Windows.Forms.MSG& msg, System.IntPtr hWnd, System.Int32 wFilterMin, System.Int32 wFilterMax) [0x00000] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.Application.RunLoop (System.Boolean Modal, System.Windows.Forms.ApplicationContext context) [0x00331] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.Application.Run (System.Windows.Forms.ApplicationContext context) [0x00011] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at System.Windows.Forms.Application.Run (System.Windows.Forms.Form mainForm) [0x00006] in <620961265dcd4ef2bef9e70169cb6e5a>:0
at .. () [0x0000a] in <2b5e52884bc94eee85ddd10306fe74aa>:0
at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00014] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x0002b] in <2dfe84a36ef4410ca18642993b51b799>:0
at System.Threading.ThreadHelper.ThreadStart () [0x00008] in <2dfe84a36ef4410ca18642993b51b799>:0
WroteIn regards to the previous error, i've tried installing cups with a pdf but haven't completed it yet.
anyway 6671 gives an even larger exception notification
It looks like this is a Mono issue fixed several days ago. Please see here for a workaround: https://github.com/mono/mono/issues/6752
WroteA message like "element assignment is only possible for empty or matrix objects" would help. I am not aware of other situations where such an assignment might fail, thus this message could be used by default in failing element assignments.
=========================
"element assignment is only possible for empty or matrix objects" ... I like it
"can not calculate" is much more real because there is nothing to calculate.
If some wish list would ask for Mathematica style zillions error messages,
that will not replace reading the Smath Handbook.
"for loop can not index a constant"
"not a scalar assignment" [typical Mathcad style]
As it looks, the matter was to replicate a value.
Wrote
It looks like this is a Mono issue fixed several days ago. Please see here for a workaround: https://github.com/mono/mono/issues/6752
thanks! indeed xterm solved it and also the application link in menu opens smath without issues.
Last plugin issue was fixed with this AppVersion 0.99.6671. I am now wondering if this caused an issue with the X-Y plugin. I posted a bug report there, but wanted to bring this to your attention
WroteUPDATE: Plugin opens fine on 0.99.6661 portable version
WroteI posted a bug report there, but wanted to bring this to your attention
Can't reproduce this issue. Dialog opens correctly for me.
UPDATE: I see you found a reason and described it here: https://en.smath.info/forum/yaf_postsm47855_-XY-plot-region--dialog-prompted-on-missing-screen-lock-the-program.aspx#post47855
Not an issue of SMath Studio. Thanks.
-
New Posts
-
No New Posts