Jump to content


Popular Content

Showing most liked content since 05/15/2017 in all areas

  1. 3 points
    Let's all get along? It's been rare for our forums, but on occasions I have had to step in to keep the peace and harmony of the site. At times personalities clash - and the typed repsonses are often done in haste - and the sort of thing that wouldn't be said if we were all in same room together. I am encouraging everyone to re-read https://fmforums.com/guidelines/ our guidelines. Let's please keep threads on topic. - and not abuse the "reporting" system. Please be courteous of others and if you have offended someone please extend a sincere apology. The least thing I enjoy doing is to put people in 'timeout' or ban them from the site. Thank you.
  2. 3 points
    Aleesha, another thing which fits for you right now is making it easy on yourself in future to know specifically which table occurrences have Allow Creation turned on. It looks obvious here but as your solution grows, it won't always be obvious and we can forget as well. What many developers do is use the text tool to create reminders such as the A or a - if 'deletion' or S for sort.
  3. 3 points

    Version 1.0.0


    This technique was inspired by @Claus Lavendt in a tweet. Now with offset new card style mode you can now create a tool pallet to interact with a document in preview mode


  4. 2 points
    Hi riadh2002 Thanks fo posting this mod. I love it, when someone can extend on what I start. Really glad that my tool seems to have been helpful to you and others. In case someone has only had their hands on the first version, I released, the most recent version of the tool, let's you both import, "make FM ready" SVG - but the most useful feature of the newest version, is that you can take a found set, press the button to "copy" all found icons and paste them into your solution all at once. So say you have a standard collection of SVG icons, that you normally want to use. Find these icons in the tool. Copy them. And then you use the paste shortcut, which will insert a button bar object, that you can delete immediately after you pasted it. Now, all your icons appear in the tools palette of your file. Newest version can be found here: http://thebrainbasket.com/?p=404 (completely free and open)
  5. 2 points
    For anyone who have pale icons in filemaker after importing here is how to change the colour to red Many thanks to Claus Lavendt, of DataMani for providing the tool for free Using SVG icon Helper, can be downloaded here for free: http://www.filemakervideos.com/filemaker-14-svg-icon-helper-tool-filemaker-14-training/ And this code takes into account all shape elements of SVG such as circle, rectangle, polygon,,,etc. and Works Great with IonIcons.com Library It removes existing fills and fm_fill class and substitutes with new values so it works with SVG with or without fill attribute. You can also change the color at the top of the code 1. Open SVG icon Helper FM database and open Script Workspace 2. Go to Script “Edit SVG files - mini icons….” 3. Go to the comment “#make changes” 4. Open the Set variable script step just below 5. replace the existing code by the following: 6. save and go back to the main layout and click the button with the blue pen, select folder and validate You’re done :-), now you can re import the icons into filemaker Let ( [ ~content = $content; ~color = "#FF0000"; // We need to search for all existing fills and remove them ~content=If ( PatternCount ( ~content ; "fill=\"" ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "fill=\"" ; 1 ; 1 ) ; 14 ) ; "" ) ; ~content ); // We need to search for all existing fm_fill and remove them class=\"fm_fill\" ~content=If ( PatternCount ( ~content ; "class=\"fm_fill\"" ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "class=\"fm_fill\"" ; 1 ; 1 ) ; 15 ) ; "" ) ; ~content ); // Then add the fills in the appropriate positions covering all possible SVG elements //<path ~content=If (PatternCount ( ~content ; "<path " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<path " ; 1 ; 1 ) ; 6 ) ; "<path fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ); //<rect ~content=If (PatternCount ( ~content ; "<rect " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<rect " ; 1 ; 1 ) ; 6 ) ; "<rect fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ); //<circle ~content=If (PatternCount ( ~content ; "<circle " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<circle " ; 1 ; 1 ) ; 8 ) ; "<circle fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ); //<ellipse ~content=If (PatternCount ( ~content ; "<ellipse " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<ellipse " ; 1 ; 1 ) ; 9 ) ; "<ellipse fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ); //<line ~content=If (PatternCount ( ~content ; "<line " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<line " ; 1 ; 1 ) ; 6 ) ; "<line fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ); //<polygon ~content=If (PatternCount ( ~content ; "<polygon " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<polygon " ; 1 ; 1 ) ; 9 ) ; "<polygon fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ); //<polyline ~content=If (PatternCount ( ~content ; "<polyline " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<polyline " ; 1 ; 1 ) ; 10 ) ; "<polyline fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ); //<text ~content=If (PatternCount ( ~content ; "<text " ) > 0 ; Substitute ( ~content ; Middle ( ~content ; Position ( ~content ; "<text " ; 1 ; 1 ) ; 6 ) ; "<text fill=\""&~color&"\" class=\"fm_fill\" " ) ; ~content ) ]; ~content )
  6. 2 points
    There is a file called permittedlist.txt. It is located in the /Users/{username}/Library/Application Support/FileMaker/Shared folder. This Library folder is normally hidden. To view it, go to Finder and open the Go menu while holding down the option key. The option key allows you to select the Library folder. Drill down to this file, permittedlist.txt and delete it. Or, to be ultra-cautious, just rename it. Now, when you try to upload a database to FM Server, it will alert you to any SSL certificate issues. When you choose to connect anyway, it will generate a new permittedlist.txt and it will allow you to freshly enter your FM Server admin name and password and upload the file.
  7. 2 points
    I'll counter that. One of our standards is to always an explicit "Exit Script" and to explicitly pass an empty string "" when no real value needs to be passed out of the script. The main reason is that the Get(ScriptResult) will remember the last explicit returned result. If you don't use Exit Script in the sub script but expect Get(ScriptResult) to be empty because you didn't pass anything back then you may be surprised to see a value if a previous script did use Exist Script with a return.
  8. 2 points
    Come to think of it, that's not entirely true. Suppose you add a field that cannot be empty (such as ClientID) into the portal and give it an object name. You could then use the GetLayoutObjectAttribute() function to get the object's content - and hide the portal when it's empty.
  9. 2 points
    I don't think playing 20 questions is a good method to get to the bottom of this. No one can tell why something fails without being able to reproduce the problem on their own first. The proper way to present this would be to attach the two files - preferably reduced to the absolute minimum that still shows the problem. Without this, all we can do is generalize and/or guess. In general, I can think of two possible reasons why records will not be imported: 1. There are no records to import; 2. There are records to import, but they do not pass validation. Now for the guess part: First, I don't know what you mean by "the autocomplete box on import". I am going to guess it's actually the "Perform auto-enter options while importing" option. And I am going to guess further that one or more of your fields is defined to auto-enter a value and validated as Not empty, Validate always. And I am going to guess that the source file contains no data to import into this field.
  10. 2 points
    Apparently, the issue is fixed in FileMaker 16.0.2!
  11. 2 points
    I'm not sure which topic this belongs in but... I really just wanted to let everyone on these forums know how thankful I am for your support, advice and guidance. Over the past few years as my small business has grown into a bigger business I've needed filemaker to do more advanced things and as I am not a developer and simply a business owner, I've turned to these forums and to you all and I couldn't have built my database without your help. From the bottom of my heart thank you so much!! Matt
  12. 2 points
    Extra step: yes. Hassle: after a while it doesn't feel that way because that new Layout Object inspector brings so much goodness that you'll use it all the time anyway and it won' feel like a hassle to have to move over to it. It'll become a very natural flow of your layout design. But it definitely is a change and requires a bit of mental retraining and so there is a bit of 'who moved my cheese'. I certainly scoffed at it in the beginning, now I can think of all the bigger hassles I had to go through before having this.
  13. 2 points
    Not sure if "master list" = client cache. I've not heard that term. However, I've read that some are seeing bad data (outdated) because of cache! Several desperate posts on TechNet. https://community.filemaker.com/thread/168254 But good reviews here: https://blog.beezwax.net/2016/06/15/performance-optimizations-make-compelling-case-for-filemaker-15-upgrade/
  14. 2 points
    I doubt very much you need or want to do that. What would be the purpose of this? You will end up with several numbered Category fields. Numbered fields are a prime example of poor database structure. You won't be able to find a record by its category, unless you search all the fields. You won't be able to define a relationship matching on category. You won't be able to produce a report of records grouped by category. I suggest you either split the field into individual records in a related table or just substitute the > character with a carriage return, so that your field contains a list of the relevant categories (same as a checkbox field would).
  15. 2 points
    Not sure I follow entirely, but in your script, just before the "Show Custom Dialog" just do a Set Field [Examples::MASTER CODE ; "" ]
  16. 2 points
    Here's one way. RowCalc.fp7.zip
  17. 1 point
    Hi Ocean West, The functions are the same between 2 and 3 so you should not have to change any of your scripts when upgrading
  18. 1 point
    Barbara! Looks great, and excellent refinements. I want to implement something like this in a future version as well. Thanks for sharing your code.
  19. 1 point
    Newbies to the forum (those with less than 6 posts) will be highlighted now in a different color box. This will be useful for all members, so they will now know they are new to the Forum, and we can greet them appropriately, encourage them and inspire them, make them feel welcome and a part of our community!
  20. 1 point
    Hi Phil, I reported your support issue to Jesse and he is currently looking into it and will be in contact soon. I'll update this thread for anyone else that is running into this issue.
  21. 1 point
    Well, that is unless you're willing to use a plugin: BE_RegularExpression ( "AlphaBravoCharlie" ; "(\p{Lu})" ; "g" ; " $1" ) will return: " Alpha Bravo Charlie" and will recognize any uppercase characters, in any language.
  22. 1 point
    I don't think there's a shorter way = Trim ( Substitute ( text ; ["A" ; " A" ] ; ["B" ; " B" ] ; ["C" ; " C" ] ; ["D" ; " D" ] ; // ... ["X" ; " X" ] ; ["Y" ; " Y" ] ; ["Z" ; " Z" ] ) ) Hopefully you don't have any accented or Greek capital letters.
  23. 1 point
  24. 1 point
    FQL is executed on the server as a rule. It is executed on the client if that client has an open (locked, uncommitted,...) record in the target table, any table that is part of the SQL query. Only the client's open record state counts. If other users have open records then that does not matter. Obviously their data will not be in the result set since neither server nor the executing client knows about that data yet, it has not been committed yet. When the server executes the FQL, nothing is cached on the client because no actual record data was sent down. If the client executes the query then server sends *ALL THE DATA FOR ALL THE RECORDS* in the target table, and that is cached at the client as much as the client's cache allows. It is that sending of all the data from the server to the client that is responsible for the slowdown. You can actually see this in action by looking at the FMS stats log, the "Network KB Out" counter. If there are not a lot of record in that target table then the penalty is not high, but it is very linear with the record count. In that demo file I linked to earlier I have two tables to test with, one with 100,000 or so records and one with 1.5 million.
  25. 1 point
    Well, if you don't mind having a tall footer that will be empty on every page except the last one, then it can be quite easy: place the information in the footer part, select the parts you want to show only on the last page and set it to hide when: Get ( PageNumber ) < $lastPage Then make you printing script do: Enter Preview Mode Go to Record/Request/Page [ Last ] Set Variable [ $lastPage; Value:Get ( PageNumber ) ] before calling the Print step.
  26. 1 point
    Would this work for you: Let ( postcall = Leave - timesheets::wrap - ( Camera + 2700 ) ; If ( Leave and postcall > 0 ; Ceiling ( postcall / 1800 ) * 1800 ) ) Note: you must be careful not to name your variables with a name already used as a field name - otherwise you might get unexpected results.
  27. 1 point
    Field names are included when you export in one of these formats: dBase FileMaker Pro HTML table Merge Excel XML Additional formats can be created by exporting as XML and using an XSLT stylesheet to transform the output.
  28. 1 point
    It would be helpful to see the original calculation, before you tried to "force" it. What you gave us is difficult to read, esp. when we don't know what the calculation's purpose is. I think you want do: If ( Cash Sales Total Sales Value ; Round ( ( Cash Sales Total Last 7 Days - Landed Cost * Cash Sales Total Last 7 Days * 1.2 ) / Cash Sales Total Sales Value ; 2 ) ; 0 ) This tests that your divisor is not empty or zero and if so, performs the division and rounds the result. Otherwise it returns 0. Note that 0 does not require rounding. -- P.S. IMHO, outputting an artificial zero result is bad practice. The correct result in case of division by zero should be either an error or nothing.
  29. 1 point
    There are several ways this could be accomplished. A simple one would be to add a calculation field to the Participants table, along the lines of = If ( not Inactive ; NumberOfChildren ) then change your existing calculation to sum this field instead of the NumberOfChildren field. I don't see why you need the summary field; you could do simply: Count ( Participants::ClassID ) - Count ( Participants::Inactive )
  30. 1 point
    That a Girl. Let us know what you find. Lee
  31. 1 point
    I have now. The 16.0.2 update does not change the performance characteristics of the JSON functions relative to return-delimited lists or repeating variables.
  32. 1 point
    You can calculate the date of last Wednesday using = Get ( CurrentDate ) - Mod ( Get ( CurrentDate ) - 3 ; 7 ) Note that this will return the current date when the calculation is performed on a Wednesday. I am afraid I did not get this part: The calculation looks only at the weekly cycle and ignores year boundaries. If you like, you can use = Get ( CurrentDate ) - Mod ( Get ( CurrentDate ) - Weekday + 1 ; 7 ) where Weekday is a number between 1 (Sunday) and 7 (Saturday).
  33. 1 point
    You have titled this as "quick portal filter question", but I don't see anything "quick" about it. The method you use (taken from here) relies on a list of all related values in order to remove the duplicates. If the relationship does not exclude non-active records, they too will be included in the list. You cannot use such list to filter only active records. The idea here is it pass a value only if it's the first time it appears in the list - but the first occurrence may have been a non-active record, so this becomes utterly unreliable. The simplest solution, IMHO, is to modify the relationship so that it only includes active records. Otherwise you would have to find an alternative way to produce the list - e.g. by a recursive custom function. Or devise a completely different method. None of these will be "quick".
  34. 1 point
    OK I figured it out ... I had the interface file opened by default with an account, but I have set up the data file to asks for the login and password (when accessing from FM Pro). I have removed the auto-login for the interface file and now it works perfectly: one user can open two files now
  35. 1 point
    Something like this? http://www.briandunning.com/cf/1429 of http://www.briandunning.com/cf/776 Maybe
  36. 1 point
    If you just want to "highlight" your search result, you could just add Conditional Formatting to your fields, so if they match what you entered in QuickFind they will be highlighted. Of course, then you want to replace QuiCkFind with a scripted QuickFind so you can temporarily store your search criteria. 360Works' Scribe plug-in also does highlighting text.
  37. 1 point
    I can't figure out what your question is. What is "a calculated list field"? And what exactly does "filtering by a calculated list field" mean? You speak of filtering portals, but then you say "My usual technique is to do by relationship" which makes no sense to me. Most often you filter a portal in order to avoid adding a relationship. Why don't you back up a bit and explain what you're trying to accomplish here, not how.
  38. 1 point
    Yes. FileMaker parses the JSON for every single query. The MBS Plugin can parse once and than reuse the same structures in memory to query. So the plugin will always be magnitudes faster.
  39. 1 point
    I think the 25 is list view only, LR. Also, I dare not mention the client cache.
  40. 1 point
    Hi Charity FileMaker fetches data as it needs it, and it's beyond the scope of most developers to understand how the internal database engine works, and when data is fetched. You don't need to tell FileMaker when to fetch data. If you display a field in a tab on a form view, or in a column in a table view, then FileMaker will fetch and show the data. When it does fetch the data, it will be downloading from the server, or wherever the file is physically located. Usually we don't worry about it too much (as we have little control over it), but if you have very large images stored in the database, or are paying for data transfer (such as when using FileMaker Cloud), or even when using WebDirect where performance is a big consideration, it can be worth considering. If you could explain why it is important to you, perhaps we could give a bit more detail?
  41. 1 point
    You don't. A stored value will never change on its own just because time has passed. But you can - and IMHO should - use a third field, an unstored calculation field, to display the current age, calculated from the stored age and the date the record was created as = Age + Div ( Get (CurrentDate) - DateCreated ; 365.2425 ) or, if you want it more accurately, as = Age + Year ( Get (CurrentDate) ) - Year ( DateCreated ) - ( Get (CurrentDate) < Date ( Month ( DateCreated ) ; Day ( DateCreated ) ; Year ( Get (CurrentDate) ) ) ) I believe this is the best solution for you because (a) it leaves your original data as entered, and (b) it does not modify your records spuriously when no real modification has occurred (this is specially important if you keep track of record modification dates). Keep in my mind that a yearly script has to run every year, and - no less importantly - must not run more than once in the same year. IOW, there should be a record of each run, and the script needs to check it before it acts. I don't think that's a good idea because it requires the script to run every night, with absolutely no exceptions: no weekends, no holidays, no power outages, no floods. If you miss a day, there's no record of that - and your data is skewed forever.
  42. 1 point
    I get exactly where you are at. My first dive into development was taking a system from FMP 4...and reworking the workflow, and adding a ton of features. With the capabilities of the modern versions of FM, there may be some opportunities to consolidate that down into a single UI file that reaches out to the other files and uses there data. Classic separation model use-case. Good luck with whatever you decide to do, and if you need tips or have questions. You know where to find us!! lol
  43. 1 point
    Hi Cable, The FM Forums is not part of FileMaker Inc., and no one here works for FileMaker Inc. Our members are all volunteers donating their time, knowledge and skills to help other members overcome things they run across when developing files. To continue to express your frustration to us about this change isn't going to accomplish anything. You need to take this up with FileMaker Inc. Lee
  44. 1 point
    "-H Authorization: ShippoToken " & $token & " -H Content-Type: application/json -d " & $json I believe above should make a valid string.
  45. 1 point
    Whilst I really like the new behaviour on PCs, I too have clients for whom having multiple windows visible will be at best a confusing change and at worst - well who knows (it depends how well I programmed things in the past!) I guess you could mimic the old behaviour by hiding all windows except the one you want to be active. Perhaps a script something like this would help Script: Hide Other Windows Set Variable [ $activeWindow; Value:Get(WindowName) ] Set Variable [ $allWindows; Value:WindowNames ] Set Variable [ $iMax; Value:ValueCount ( $allWindows ) ] Set Variable [ $i; Value:1 ] #loop over all windows and close all but active window. Loop Set Variable [ $window; Value:GetValue( $allWindows ; $i ) ] If [ $window ≠ $activeWindow ] #Remember to uncheck "Current file only" for multi file solutions Select Window [ Name: $window ] Adjust Window [ Hide ] End If Exit Loop If [ Let( $i = $i + 1 ; $i > $iMax ) ] End Loop
  46. 1 point
    I move it to Managing Scripts I deleted your duplicate post. Please do not double post your questions.
  47. 1 point
    No. Try the Open URL[] script step to open a non-Filemaker file in its native application. I don't know of a way to do that natively from Filemaker. Perhaps with a plugin.
  48. 1 point
    OK - I did it myself. Over a couple weekends of spare time, I wrote a few dozen scripts that interface between Filemaker and the Amazon Marketplace Web Service API. Sad to say, this is non-trivial. Amazon's documentation is poor: there are a surprising number of mistakes, misspellings, and obsolete/outdated sections. The one bright spot is the Amazon MWS Scratchpad, which provides a direct sandbox to allow testing different calls. Most of the documentation and online help is aimed at PHP & Java & Python developers; it's not too difficult to map this into Filemaker land. I wrote scripts to gather my orders from Amazon Market Place, and to send confirmations to buyers. Like most API's, there are many gotcha's. Here's a few hints, mainly to save time for others in my position. 1) A simple Filemaker WebViewer is *not* going to work, unless you do screen-scrapes from the Amazon MWS Scratchpad. 2) I used cURL to communicate with Amazon Web Service via POST. The information to be POSTed is the Amazon parameter string (which includes the hashed signature). The Monkeybread Software Filemaker functions (www.mbsplugins.eu) are just the ticket. 3) The outgoing information must be signed with a SHA256 hash. Again, this is available in the Monkeybread software functions. Use MBS("Hash.SHA256HMAC"; g_AWS_Secret_Key; g_AWS_Text_to_Sign_With_NewLines_Replaced; 1) 4) Getting the correct SHA256 signature requires very strict observance of line-feeds ... carriage return / linefeeds in OS X and Filemaker will cause a bad signature. Before making the SHA256 hash, do a complete replace so as to generate only Unix-style line-feeds. Within the "canonical parameter list" there aren't any linefeeds (but there are linefeeds before that list) 5) The Amazon API demands ISO-8601 timestamps, based on UTC. Filemaker timestamps are not ISO-8601, but there are several custom functions to generate these. The Filemaker function, get(CurrentTimeUTCMilliseconds), is very useful, but its result must be converted into ISO-8601. Notice that Amazon UTC Timestamps have a trailing "Z" ... when I did not include this, the signatures failed. 6) The Amazon API must have url encoded strings (UTF-8). So the output from the SHA256 hash must be converted to URL encoding -- again, the Monkeybread software comes through (use MBS function Text.EncodeToURL) 7) The Amazon "canonical parameter list" must be in alphabetical order, and must include all of the items listed in the documentation. 8) Errors from Amazon throttling show up in the stock XML return, but check for other errors returned by the cURL debug response. At minimum, search through both responses by doing a filemaker PatternCount (g_returned_data; "ERROR") 9) When you're notified of a new Amazon order, you must make two (or more) cURL calls to Amazon MWS: 1) first, do cURL request to "list orders", which will return all the Amazon Order Numbers (and some other info) for each order since a given date/time. 2) Then, knowing an order number, you do another cURL to get all the details for a given order. Repeat this step for every new Amazon order number. Each of these calls requires your Amazon Seller_ID, Marketplace_ID, Developer_Account_Number,_Access_Key_ID, and your AWS_Secret_Key. Each also requires a SHA-256 hash of all this information along with the "canonical parameter list" If anyone wants my actual scripts, drop a note to me (At this moment, my scripts do the all-important /orders /list orders and /get order. I'm almost finished writing a /feeds filemaker API to send confirmations. I probably won't build scripts to manage inventory or subscriptions, but once you've built a framework for the scripts, it's not difficult to expand to more functionality) Best of luck all around, -Cliff Stoll
  49. 1 point
    Robot "machine" is also misleading, in that it's perfectly fine to have the robot user be another account on the same machine as the server - we've been doing this with great results for years on our OS X servers. We set up the robot user to have very limited permissions, so it can't do any harm to the administrator account that is in control. YMMV of course, but it's a technique that's worth a consideration if you only have one machine.
  50. 1 point
    Rockin, dude. That gave me the direction I needed. I was trying to access an event without telling which calendar it should be looking in. I was able to combine your "select calendar" code into one line by changing it to "set theEvent to item 1 of (every event of theCalNum whose uid is theUID)" --- bingo! Happy code. -- GET or MAKE new calendar # if need be set allCalendarTitles to the title of every calendar if allCalendarTitles contains theCalendarTitle then set theCalNum to (first calendar whose title is theCalendarTitle) else set theCalNum to (make calendar at end of calendars with properties {title:theCalendarTitle}) end if -- find and select or make event if exists theUID then set theEvent to item 1 of (every event of theCalNum whose id is theUID) --delete (every event of theCalNum whose uid is theUID) else set theEvent to make event at end of events of theCalNum end if I also tried both "id" and "uid" for iCal references --- Leopard iCal works with both. Rumor has it Tiger and before only likes "uid" -- but I haven't tried it. I'm going to stick with "uid" since all versions of OSX seem to like it. I may post the rest of my code when it's completed...if anyone is interested that is. Thanks, Fenton!
This leaderboard is set to Los Angeles/GMT-07:00

Important Information

By using this site, you agree to our Terms of Use.