                    e-Mail Tools (MAILTOOL) v14.00
--------------------------------------------------------------------
                         Installation

**Please Note**
If you are upgrading from a version prior to 12.50 and using the ILE
functions, please be aware that with this version the names of the 
functions no longer start with the hashtag (#) symbol.  You will need 
to update your function calls and recompile where necessary.

1. If you are installing MAILTOOL for the first time, skip to step 2.
    If you are installing MAILTOOL as an upgrade to a previous release,
    rename your MAILTOOL library to MAILTOOLOL.  Do this by issuing the
    following command:
    
    RNMOBJ OBJ(MAILTOOL) OBJTYPE(*LIB) NEWOBJ(MAILTOOLOL)

2. Issue the IBM i command: 

    CRTSAVF FILE(QGPL/MAILTOOL)    

3. FTP the file MAILTOOL from your PC to the IBM i in BINARY mode
    into the save file MAILTOOL in library QGPL.
   
4. Issue the IBM i command:

    RSTLIB SAVLIB(MAILTOOL) DEV(*SAVF) SAVF(QGPL/MAILTOOL)

5. If you are installing MAILTOOL for the first issue the following commands:
	
    RST DEV('/qsys.lib/mailtool.lib/ifsconfig.file') 
     OBJ(('/bvstools/mailtool/*')) CRTPRNDIR(*YES) 
     PRNDIROWN(*PARENT)

    CHGAUT OBJ('/bvstools') USER(*PUBLIC) DTAAUT(*RX)
    CHGAUT OBJ('/bvstools/mailtool') USER(*PUBLIC) DTAAUT(*RX)	
    CHGAUT OBJ('/bvstools/mailtool/config') USER(*PUBLIC) DTAAUT(*RX)
    CHGAUT OBJ('/bvstools/mailtool/config/*') USER(*PUBLIC) DTAAUT(*R)
	
6. If you are installing MAILTOOL for the first time skip to step 7.
    If not, you will need to copy any data from the old library to the
    new library.   

   You should also check the size of your current log files and clean 
    them up if needed.  The files with a new version come with a limit 
    of 10k records and we find most users current log files are much 
    larger.  So, you should either clean up the log files or change 
    the maximum records in the new library before running the MLTUPDATE 
    command.

   If you use SQL or a program to delete records to clean them up, 
    please be sure to use RGZPFM to remove deleted records.  If 
    you use CLRPFM then things should be ok.

   The log files are as follows:
    MLTLOGAPF 
    MLTLOGDPF 
    MLTLOGPF  
    MTPLOGDPF 
    MTPLOGHPF 

   Run the following command after verifying the names of the old 
    and new libraries and checking the size of the old and new
    log files:

    MLTUPDATE OLDLIB(MAILTOOLOL) NEWLIB(MAILTOOL)
   
7. Add the library MAILTOOL to your library list and try out the 
    command.  Type MAILTOOL and press F4.    

8. Because MAILTOOL has log files we do not set to *NOMAX, you will 
    need to review the following article so you can set up your 
    own archival/clearing procedure of the log files. 

    https://www.fieldexit.com/forum/display?threadid=67    

9. If you are using any of the MAILTOOL ILE subprocedures in your
    programs, be sure to recompile those programs so that any new 
    /copy and/or /include members are brought into your new 
    programs and new versions of any modules and/or service programs 
    are bound to your applications.

10. Compare the defaults for all of our parameters on the old MAILTOOL 
     command vs the new version.  Defaults will NOT carry over to your 
     new version and you will need to change those after the upgrade.
     Pay special attention to at least the SENDWITH, MAILRTR, and
     USERTR parameters if you're using MAILTOOL Plus.  See this article
     for more information:
     https://www.fieldexit.com/forum/display?threadid=139

11. If you are installing MAILTOOL in order to use SNDDST and/or
     SNDSMTPEMM commands from IBM you will need to perform actions
     so that the versions of these commands that are located
     in the MAILTOOL library will be used.

    For SNDDST:
      CHGCMD CMD(QSYS/SNDDST) PGM(*LIBL/SNDDSTRG)
       or
      RNMOBJ OBJ(QSYS/SNDDST) OBJTYPE(*CMD) NEWOBJ(SNDDSTX)
       or
      Prefix SNDDST command with the MAILTOOL library when calling it:
      MAILTOOL/SNDDST
    
    For SNDSMTPEMM:
      RNMOBJ OBJ(QSYS/SNDSMTPEMM) OBJTYPE(*CMD) NEWOBJ(SNDSMTPEMX)
      RNMOBJ OBJ(QTCP/SNDSMTPEMM) OBJTYPE(*CMD) NEWOBJ(SNDSMTPEMX) 
       or
      Prefix the SNDSMTPEMM with the MAILTOOL library:
      MAILTOOL/SNDSMTPEMM

     You will also need to make sure these changes stay in place after  
      applying PTFS, installing new OS versions, etc.
     
     You will also need at least MAILTOOL in your library list.  If you
      are using G4G or G4MS, you will also need that library in the 
      library list as well.
   
     The data area SDCONFIG in the MAILTOOL library should be updated to
      either include a fully qualified path to a configuration file to use
      with either G4G or G4MS or the value of *DFT.  
      The value of *DFT will attempt to look for a configuration file named
      /bvstools/mailtool/config/[userid]/defaults.json. If a specific
      file for the userid isn't found then MAILTOOL will look for a
      file named /bvstools/mailtool/config/defaults.json.

     Example config file for G4MS:
     {"variables":
       [
         {"name":"send_with_server_type","default":"*G4MSMAIL"},
	 {"name":"debug","default":"*NO"},
	 {"name":"debug_file","default":"mailtooldebug_/%id%/.txt"},
	 {"name":"debug_smtp_file","default":"mailtoolsmtp_/%id%/.txt"}
       ]
     }
---------------------------------------------------------------------
                          Requirements

MAILTOOL was created on a IBM i running V7R5. 
MAILTOOL requires at least V7R3 of the operating system.

If you will be using the OAuth 2.0 validation for sending email with 
 Google APIs (*G4GSMAIL) you will also be required to install 
 G4G v15.60 or higher as well as GETURI (which is included in the G4G
 distribution).

If you will be using the OAuth 2.0 validation for sending email with 
 Microsoft Outlook Cloud Service or Microsoft Office 365 API you will 
 also be required to install G4MS v11.10 or higher as well as GETURI
 (which is included in the G4MS distribution).

G4G - https://www.bvstools.com/g4g.html
G4MS - https://www.bvstools.com/g4ms.html
---------------------------------------------------------------------
                          Registration

A variety of registration options are available.  Please go to:

           https://www.bvstools.com/mailtool.html
           
---------------------------------------------------------------------                     
                              Updates 
v1.00  - Original
v2.00  - Added ability to email an attachment, such as an HTML file,
          as the body of the message.  This is done specifying the
          special value *ATT for the Message, and then listing the
          attachment(s) you want to use as the body.  All attachment
          files are treated at "text-only" type files when being placed
          into the message body. 
         NOTE:  There is also a new paramter named 
          "Body Content Type (BDYCT)" that should be changed to the 
          appropriate content type.  For example, if you are sending
          an HTML file as the body, or using HTML in the message text,
          this value should be "text/html".
v2.01  - Fixed bug when attaching a file larger than 32k as the body
          of the email.
v2.02  - Internal updates.
v2.03  - Fixed bug when sending attachments.  Attachments could be
          corrupted.
v2.04  - Added logging.  The file MLTLOGPF in the MAILTOOL library
          will keep track of certain parameters when MAILTOOL is used.
         Changed the Subject line from 256 to 1024 characters.
         Changed the Message line from 512 to 4096 characters.
v3.00  - Updated to integrate with SPLTOOL and AFPTOOL.  
         Added ATTNAM (Attachment Name) parameter.  This parameter
          can be used to name the attachment in the email something
          different than the real file name.  Default is to use
          the real file name.
v3.01  - Fixed bug when emailing more than one attachment.  The 
          2nd and latter attachment file names became corrupt.
v3.02  - Changed the limit of attachments from 20 to 50.  If using
          with SPLTOOL you should use at least v8.02 of SPLTOOL.
v3.03  - Allow blanks for attachment names that will be ignored after 
          the first paramter entry.  If attachments are used, the 
          first attachment parameter must be used.  
v3.04  - Removed name of day formatting from date.
v3.05  - Added Importance (IMP) parameter.  Can be used to specify normal,
          high, or low importance.
v3.06  - Added DEBUG parameter.  When *YES is specified, the MIME file used
          to send the email is copied to /tmp/mailtooldebug.txt for viewing.
v3.07  - Updated date routine.  Was causing errors in date when the language
          was non-US.
v3.08  - Added a Mail Disposition Notification (MDN) option.  This allows you to
          specify an email address in which to send a notification when the email
          is received and read.  Please note this is not foolproof and does not
          always work.  This option can be shut off at the client and server levels
          of the receipient.
v3.09  - Updated To: and Content-Disposition: headers.  They weren't including
          quotes around the names if specified which caused problems with some
          email servers.
v3.10  - Updated method of getting MIME file name.  On newer (fast!) machines running
          multiple jobs the MIME header file names could clash.  An update was added 
          to fix this problem.
v3.11  - Added the ability to use the special value *USER for the From Address
          (FROMADDR) parameter.  This will instruct MAILTOOL to use the SMTP name
          from the directory entry of the user the is running the command.
v3.12  - Updated processing to convert to and from addresses to CCSID 500 before
          calling QtmmSendMail API.  This requirement was recently added to the
          IBM documentation for this API.  This update is supposed to fix problems
          that people have with having to use characters other than "@" in their 
          email addresses (for example the   or   characters).
         Updated to retrieve default CCSID instead of job CCSID.
v3.20b - Changed attachment processing... *PLEASE READ*
          If specifying *ATT for the message parameter, this will now ONLY use the
          FIRST attachment specified as the body of the message.  All other attachments
          listed will be treated as normal attachments.
         If you are currently using the *ATT special value for the message body 
          parmeter and are specifying more than one attachment to be the body of the
          message, you will need to update your procedures before applying this
          version of MAILTOOL.
v3.21  - Added the Recipient Separator (RECSEP) parameter.  This is used to specify the
          character to use to separate multiple email addresses.  In the past this was a
          semicolon.  On very few machines this caused problems.  I added this parameter
          and defaulted it to a comma which seems to be the norm with most email clients
          today.
v3.22  - Added double quotes around name or email address (if no name).  Some systems had
          problems with special characters in email addresses if not in quotes.
v3.23  - Added error checking for CPF3C17 that will be returned on V5R2 if a bd
          recipient address is used.
v3.24  - Added option to control the newline characters that are used and solve
          issues on machines not using a US code page.  If \n is not working use
          the following command:
          CRTDTAARA DTAARA(QGPL/MLTNEWLINE) TYPE(*CHAR) LEN(2) VALUE('\n')
          You can then use the \n character for newlines.  If you want to use
          another 2 characters, you can change what is used using the CHGDTAARA
          command.
v3.25  - Added Reply-To parameters.  You can now specify up to 10 addresses that
          will be used for reply to recipients.  If no addresses are specified
          replies will automatically go to sender.  
         NOTE: If you use the Reply-To parameter and want a reply to go to the
          original sender you must include the original sender's address in the
          reply to list.
         If using this version with SPLTOOL, you will need SPLTOOL v8.06 or higher.
         Added parameter to name the debug file.  Defaults to mailtooldebug.txt.  
v3.26  - Fixed bug with timestamp placed in MIME header file.
v3.27  - Fixed debug file parm to be Mixed case instead of MONO.
v3.28  - Fixed bug with attachments over a certain size. (#B64ENCODE error)
v3.29  - Fixed bug with attachments.  Was inserting @@ into files.
v3.30  - Removed use of double quotes around email address when no "name" is specified.  This
          was causing some problems on servers.  NOTE: If you are using any special characters
          in your email address(es) and are experiencing problems, please contact me.  
          Also, be sure to test this version of MAILTOOL before moving it into production
          if you know you are using special characters any email address.
v3.31  - When sending emails with special characters in the subject or message and 
          including an attachment the special characters would be corrupted.  Removed
          the default encoding from the MIME header which caused this problem.
v3.32  - Fixed rare bug when sending attachements as the body of the message.  Trailing blanks
          from buffers were truncated.
v3.40  - **NOTE**
         Updated registration to use Serial Number and Model number.
         Removed nag message from emails in unregistered version.  Instead, temporary 
          keys will be issued to allow unlimited testing for a period of time.
         -- Current Users --
         Email me a note with your serial number(s) and model number(s) before you
          install this version so I can get you a new key.  
         -- New Users --
         Email me and I will get you a temporary key.  This temporary key will allow you
          to use MAILTOOL with all functionality for a limited period of time.  You
          need a temporary key or a permanent key to use MAILTOOL.
         Updated logging portion of application to use system date instead of the
          job date.
v3.41  - Fixed small bug with temporary registration key checking.
v3.42  - Fixed bug with debug paramater.  On versions prior to V4R5 of the OS
          the REPLACE parameter on the CPY command was not valid.  Change processing
          to first remove the debug file if it exists, then create the debug file.
v4.00  - Added MAILTOOL Plus! option as described below.  MAILTOOL Plus! requires
          a seperate registration only for the functionality described below.  If
          you are still using the IBM SMTP server to send emails with MAILTOOL,
          registration of MAILTOOL Plus! is not required.
         -- MAILTOOL Plus! Update --
         Added option to bypass the standard IBM SMTP server for sending of email.
          The new parameter added for this is SENDWITH.  The default value of 
          *IBMSMTP will act as it normally did using the IBM SMTP server to send
          the email message.  The value of *MAILTOOL will use MAILTOOL's own internal
          communications to send the email.  With this option you do not need to have
          MSF or the SMTP server running at all unless it is your only SMTP server.
          The *MAILTOOL option will look up the MX records for the domain of the 
          "from" address to determine which mail server to connect to in order
          to send emails.
         When using *MAILTOOL for the SENDWITH parameter you have the option to
          specify a mail router that can be used if no MX records are successful
          or if you want to only use a mail router.
         Added new parameter for SMTP Debug File (DEBUGSMTP).  When the DEBUG(*YES)
          option is used the file specified will be created to show the communications
          MAILTOOL has with the SMTP servers found on the MX records of the from 
          address.
         ----------------------------
v4.01  - Added the MAILTOOL Plus! Log (MTPLUSLOG) command that will allow you to see
          and work with a log of emails that were not 100% successful in transmission.
          From this display you can display properties of the emails such as the
          recipients and which recipients received the emails and which did not.
          See the MAILTOOL Plus! documentation for more information on this feature:
          https://www.bvstools.com/docs/mailtool/
v4.02  - (SPMT091004) Changed timout for socket from 20 to 30 seconds.
         Fixed bug when reading continued responses from mail server.
v4.03  - Added CCSID parameter that will be used for conversions between
          EBCDIC and ASCII.  This parm is only valid using SENDWITH(*MAILTOOL).
v4.04  - Updated MIME file name creation so that it will only use value from 
          data area.  In the past if the data area wasn't available a timestamp 
          would be used.
v4.05  - Updated MAILTOOL Plus! so that if EHLO command fails HELO is tried for
          compatibility with older systems.
v4.06  - Fixed bug when resending email with MTPLUSLOG command.
v4.07  - Changed conversion method for addresses before calling QtmmSendMail API to
          use iConv() instead of API.
v4.08  - Added processing for MAILTOOL Plus! to look up MX records for the mail 
          router that is specified (if used).
         Fixed bug when trying to connect to servers after the first failed.
v4.09  - Fixed bug that would cause looping on MX servers if the first one
          couldn't be used to send email.
v4.10  - Added MTPBIND parameter to allow user to bind outgoing communications
          when using MAILTOOL Plus! to a specific internal IP address.
v4.11  - Fixed small bug.  MAILTOOL Plus! wouldn't log errors during the message
          portion of the email.  Updated so these errors would be logged in the
          MTPLUSLOG command.
v4.12  - (SP050531) Added processing to handle double quotes for CCSID 1026.
         (SP050615) Added more error reporting for attachment not found errors
         Fixed small bug when using MAILTOOL Plus! and a out of range error occured.
v4.13  - Added more error checking to MAILTOOL Plus! when socket connections are 
          broken.
v4.14  - When using MAILTOOL Plus! and socket error occured previously it would
          simply abort.  Now it will continue to try other mail servers if available.
v4.15  - Updated application so "from" email address would appear correctly in outlook
          when a "from name" was used.
v4.17  - Added Timeout parameter for MAILTOOL Plus
v5.00  - Added distribution lists for MAILTOOL Plus.  Use the MLTDSTL command to 
          work with distribution lists.  To use a distribution list, specify the
          distribution list preceded by a * on the To, CC, or BCC address
          parameters.
v5.01  - Added PLAIN and LOGIN authentication capabilties.  If your mail server
          requires plain or login authentication you can use the new parameters
          AUTHUSER and AUTHPW to enter the userid and password values.
v5.02  - Added PRIORITY parameter that allows a user to set a priority of Urgent,
          Normal or Non-Urgent.
v5.03  - (MT060823) Update on MAILTOOL Plus processing for non-US code pages and
            the @ symbol.
         (MT060823) Update on priority processing.  Added X-Priority header to
            emails for systems that use them.
         (MT060823) Fixed bugs when using MAILTOOL Plus! that could possibly close
            obscure TCPIP ports causing malfunctions in other software
         Added option to send text and html versions of an email.  Both versions
          must be created in the IFS first.  Then for the subject specify the
          special value of *MULTI and specify the two files created in the first
          and second attachment parameters.  The first file must be the text version
          and the second version must be the HTML version.
v6.00  - Registration updates
v6.01  - Registration fix.  If you aquired keys for v6.00 of MAILTOOL, please contact 
          us for new keys for this version.
         (SP070103) Fixed MAILTOOL Plus Authentication.  When sending to multiple 
          recipients with different domains the authentication strings
          would get corrupted.
v6.02  - (MT070103) Fixed MAILTOOL Plus Authentication.  When sending to multiple 
          recipients with different domains the authentication strings
          would get corrupted.
         Added ability to use multiple "names" for TO, CC and BCC Addresses.
v6.03  - Added new parm MXLOOKUP.  This parm is used when using MAILTOOL Plus and
          specifies when you are using a mail router if you want to perform an 
          MX Lookup on the mail router itself.  This fields defaults to *YES so
          it performs as before the addition.
         Added more debugging to debug file for MAILTOOL Plus listing all entries
          used to try and send the email.
v6.04  - Added SENDADDR and SENDNAME parameters to allow the use of the Sender: header.
v6.05  - Added ability to specify a user id for the TO, CC or BCC addresses.  If the user
          id specified has an SMTP address set up in a directory entry, that address
          will be substituted for the user id.
v6.06  - Added SSL Support for MAILTOOL Plus.
         Added parameter to specify SMTP port when using MAILTOOL Plus.
         Updated processing for MAILTOOL Plus so when using USERTR(*ONLY) it doesn't also
          try to send directly.
v6.07  - (v6.06 SP) Removed BCC header from MIME text.
         (v6.06 SP) Fixed bug when running on non-US code page with @ (at) symbol
          in email addresses.
         Added FOOTER parameter to allow user to specify the path to a stream
          file in the IFS to be used as a footer text in the email (for example
          a company disclaimer).
v6.08  - Added options to MAILTOOL Plus distribution lists so you can define
          what "type" of address each entry is in a specific distribution list.
          The valid types are as follows:
           *DFT - Default, which uses the address type that the distribution
            list is specified on (ie, TO, CC or BCC)
           *TO  - The address will always be used as a TO address
           *CC  - The address will always be used as a CC address
           *BCC - The address will always be used as a BCC address
v6.10  - (v6.08 SP) Added colon ":" as a valid character in a recipient email address
          for compatibility with fax email servers.  This option will 
          only work with MAILTOOL Plus when using a mail router that
          is acting as a fax server.
         Added ability to use wildcard in the attachment file name.  The
          valid wilcard methods are wildcard*, *wildcard, and wild*card.
          Examples:
          /myfiles/*.txt
          /myfiles/invoices*.txt
          /myfiles/invoices*
          /myfiles/*
v6.20  - (v6.10 SP) Fixed bug when sending to similar domains would send 
          multiple times to some of the recipients.
         Updated logging.  Instead of a single MLTLOGPF log file, there are 
          now 3 log files.  
          MLTLOGPF - Header information for email
          MLTLOGDPF - Recipient detail information
          MLTLOGAPF - Attachment detail information
          Records can be matched between the files by the "from" email address
           as the email id that is included in each file.
v6.21  - (v6.20 SP) Fixed bug when editing email addresses in MAILTOOL distribution
          lists and getting error that says "Address already exists for list"
         Added command MTPRESEND that will automatically cycle through records
          in the MTPLUSLOG display and try to resend them.
         Some emails that were erroring out when using MAILTOOL Plus were not 
          getting added to the MAILTOOL Plus Log display.  Fixed.
         Added Date/Time to MAILTOOL Plus SMTP Debug file.
         Added object MAILTOOLV type *DTAARA which contains the version of the
          software.
v6.22  - (v6.21 SP) Bug when sending mail with MAILTOOL Plus and get past RCPT command
          but failed after would not log an error.
         (v6.21 SP) Updated MAILTOOL Plus Error log so F12 worked the same as
          F3.
         (v6.21 SP) Fixed bug in mailtoolsmtp.txt file where the last line of the email
          was being concatonated with the next debug description line.
         (v6.21 SP) Added email address to completion message (ie sent to xxxx@xxxxx.xx)
         (v6.21 SP) Changed AUTHPW parm to not show in job log.
         Added NOATTACT (No Attachment Action) parameter that will allow you to specify
          what happens when a wildcard attachment is specified and no files are found.
          The default value of *NONE will act as it did before and send the email, but 
          you also have the option of creating a file named /bvstools/mailtool/noattdft.txt
          that can be used as a default attachment.  This file can contain anything you
          like such as a message saying "no attachments found."
          The value *ERR will tell MAILTOOL to stop and send an error instead of 
          sending the email.
v6.23 -  (v6.22 SP) Updated option 5 (display) from MTPLUSLOG command to use 
          DSPF instead of copying to file in QTEMP and DSPPFM.  The
          DSPF command wasn't available before but now that the min
          release is V5R2 it shouldn't be an issue.
         (v6.22 SP) Fixed bug when specifying *ATT for message along with another
          attachment it would attach the wrong file.
         (v6.22 SP) Fixed bug with wildcard attachments in QDLS file system not 
          working.
         Added new parameters MSGID (Message ID) and MSGIDDOM (Message ID Domain).
          These are used to add message IDs to your emails.  The default is that 
          MAILTOOL will function as it did before, with no message ID.
v6.24 -  Added TLS support for MAILTOOL Plus.  To use TLS instead of SSL, simply
          specify *TLS for the Use SSL parameter.
         SP110811 - Fixed bug when sending emails with invalid attachments it 
          a file descriptor was being left open and after a few 
          attempts other applications would have errors opening new
          stream files.
         SP111015 - Fixed bug when using Wildcard with QNTC file system.  It 
          wasn't picking up any files.
         SP111027 - Fixed bug when MAILTOOL Plus key was invalid the 
          MTPLUSLOG file didn't work right to resend email.
         SP120410 - Fixed issue when using Yahoo Mail.  The Base64 conversion
            routing being used was rejected by Yahoo (but not for other
            email clients such as Gmail).
         SP120410b - Same as above, small bug fix
         SP120606 - Found issue when emailing using a distribution list that was 
            empty no way to add a recipient.  Added the ability to do this
            using MTPLUSLOG.  Also found bug if emailing an attachment
            the attachment would be corrupt, fixed as well.
         SP121003 - Updated MAILTOOL Plus to give a 10 minute timeout value after
            the DATA portion of the email via RFC 5321
         SP121112b - When *USER is specified as the FROM address and no directory
	    entry was found the email was still trying to send.  Added
	    more error checking for this case.
	   Changed method of looking up directory entry name to use 
	    system tables.
         SP130215 - Updated application so that if you're using a mail router and multiple
	    recipients from multiple domains it will only connect once to deliver
	    all the emails intead of once for each domain.
	 SP130923 - Fixed issue when recipient domains were different case, treated them as 
	    different domains.
	 SP140115  - Added the CLOSECON (Close Connection) option to the MAILTOOL command.
	    This option is used if you are using MAILTOOL Plus and a mail router and sending
             multiple emails.  Specify *NO to leave the connection open so you are not logging on
	     to the email router each time an email is sent.
v7.00  - Added ILE Subprocedures to use to send emails more easily in programs.  See the MAILTOOL documentation
          at https://docs.bvstools.com for more information.
         Fixed a few bugs.
	 Changed default debug files so that they use a unique ID number so their are not overwritten each time
	  the program is run.  If you have your defaults set to DEBUG(*YES) you can override this by using 
	  debug file names that do not include the /%id%/ replacement value.
	 If the program errors out, a debug file will be created no matter if debug is turned on or not.  This makes
	  things easier to debug as recreating the issue isn't always possible.
	 Using configuration files for defaults for ILE subprocedures.  See documentation at https://docs.bvstools.com 
	  for more information.
	 SP140212 - Fixed bug when sending large attachments and they were corrupted.
          Fixed bug when using wildcard attachments. 
	 SP140212b - Fixed bug when using reply to address and it would not clear them before sending the next email.
         SP140219 - Fixed bug with timeout value when using ILE functions.
         SP140220 - Added "Close Connection" variable to debug dump.
          Removed MIME data from the SMTP trace debug file.  Replaced with one
           message stating the size of the MIME file.  MIME data is already in 
           it's own file and this will keep the size of the trace files down.
         SP140220b - Fixed bug when sending multiple attachments and the names of the 
            2nd attachment and on were corrupted.
         SP140326 - Fixed bug when mail server was capable of using authentication and
            username was left blank it still tried to use authentication.
         SP140401 - Removed the message saying which configuration file was being used
            when debug was turned off.
         SP140410 - Fixed bug when specifying a distribution list.  Would say either
             there were no recipients or that distribution lists were not 
             valid when not using MAILTOOL Plus (and you were using Plus).
v7.10  - Added Configuration and Save parameters to the MAILTOOL command.  See docs for more 
          info on these new parameters.
         Added the MTPSAVE data area which is a default value for saving emails send using
          MAILTOOL Plus.  See documentation for more information.
         Updated the MTPLUSLOG command so that not only will it show emails that errored, but
          also emails that were sent with the save option (MAILTOOL Plus only).
         Updated the MTPRESEND command with the option to send only errored emails, all emails,
          and also the ability to specify a configuration file to use when sending the emails.
         Added the ability to specify a pre-created MIME file to use when sending the email.  When
          using this information you also will need to make sure you are specifying the recipient
          (ie TO, CC, BCC) addresses.  This applies to MAILTOOL Plus only.
         SP140708 - Updated MTPRESEND to show the number of emails that will be sent if process
            is completed.
           Updated MTPLUSLOG display to show subject and allow viewing of config file
            that is attached to the email.
         SP140714 - Fixed bug when using *ATT as the body any other attachments would be corrupted.
         SP140721 - Fixed bug when job CCSID was non US.  Wasn't recognizing email addresses 
            because the @ sign wasn't being converted.
         SP140722 - Fixed issue with multiple SMTP files.  Made sure it was using the file in 
            QUSRSYS.
           Fixed issue when using a configuration file and an a distribution list entry.
            It would say you can't use them without MAILTOOL Plus because it hadn't yet
            loaded that information from the config file.
         SP140722b- MAILTOOL command was sending completion type error messages instead of escape
            as in previous versions.  Updated so it worked the same as the prior version.
           Updated #mailtool_addAttachment() to return an error message if one exists.  This
            updated the /copy member P.MAILTOOL as well.
           Updated maximum number of attachments to 100 from 50.
         SP140724 - Updated JSON Parsing routine to not ignore data like CR and LF that are in 
            quotes of the data (for newlines in message field in config file).
         SP140728 - Fixed issue with MAILTOOL Plus not recognizing that the server was using
            authentication because the information was sent in separate pieces for each
            option the server allowed.
         SP140804 - Updated the MTPLUSLOG command to allow start date and time to subset the list
            of items.
         SP140805 - Fixed issue when using distribution list and MAILTOOL Plus the MIME header wasn't
            being built correctly in all cases.  Also, the debug file wasn't being removed.
         SP140918 - Fixed bug with CCSIDs and JSON parsing.
         SP140922 - Added return parameter to #mailtool_sendMail that returns the unique email ID.
           Updated #mailtool_sendMail so that it returns the number of recipients the email
            was delivered to when using MAITLOOL Plus instead of zero.  When using
            IBM SMTP this will still return zero when there are no errors.  For both cases
            -1 will be returned when there is an error.
         SP140924 - Fixed issue when sending email and it errored JSON config file that is created
            was the wrong code page/corrupt.
         SP140926 - Fixed bug when message started with an asterisk (*) and it wasn't a special value
            like *ATT it would convert the message to upper case.
         SP141117 - Updated #mailtool_sendMail so that it will always return a unique message ID, even
            when there is an error.
         SP141118 - Fixed bug with the FROM, TO and CC Names getting corrupted in certain instances.
         SP141118b - Temporary directory setting wasn't being used for _debug_ file.  Fixed.
         SP150107 - Fixed bug when sending a blank email address on the command it would try to look up
            a distrubution list entry.  Fixed
         SP150209 - Fixed bug when specifying an extra attachment without a leading / process would error.
         SP150210 - Fixed issue when sending with *MAILTOOL and no mail router the TO addresses weren't
            being processed.
v8.00  - Updated to allow the use of OAuth 2.0 for authentication for GMail Accounts.  This will also require
            that G4G and GETURI are also installed and that the *GMAILSMTP server is registered in G4G for
            each user that is using this feature.  GETURI and G4G will also need to be in the library list.
            To specify the use of OAuth 2.0 for authentication use the value *G4G_XOAUTH2 for the SMTP
            Auth User ID paramter and leave the SMTP Auth Password blank.
         SP150226 - Updated application so the special value for the SMTP Auth User of
            *G4MSXOAUTH2 will allow OAuth 2.0 Authentication to be used for
            Microsoft Cloud accounts (such as outlook.com).  This option requires
            G4MS v1.20 or higher and GETURI v4.09 or higher
v8.10  - Updated to use latest version of JSONTOOL JSON Parser for Configuration Files (v3.0).
         Updated configuration file processing when using the MAILTOOL command so that if a 
          configuration file is used any value in the configuration will override the values on 
          the command (if they aren't blank and the values exist in the configuration file).
         Updated the configuration processing so if *DFT is used for the configuration file and not
          a unique name, it will first try to use /bvstools/mailtool/config/<userid>/defaults.json.  If
          that file isn't found it will attempt to use /bvstools/mailtool/config/defaults.json.  Previously
          if a unique name was specified and that file wasn't found it would try using the defaults next.  Now
          if a unique file isn't found it will error out and stop.
         Added data area MLT002DA which will hold the SSL Protocol Version to use.
         Added MLTUPDATE command to make updating from a previous version easier.
         *** Added a procedure named #mailtool_loadDefaults() that can be used when using the ILE subprocedures
          to load defaults from the configuration file set using the configuration_file keyword and 
          #mailtool_setValue().  This is different in that before the #mailtool_init() subprocedure would
          load the defaults.  Now YOU WILL NEED TO UPDATE your PROGRAMS to use the
          #mailtool_loadDefaults() subprocedure.


         Old Method:
         ===============
         rc = #mailtool_setValue('configuration_file':             
                                 '/bvstools/bvstone_mailtool.json');                
                                                          
         if (#mailtool_init() >= 0);                                
           rc = #mailtool_addTORecipient('bvstone@bvstools.com');  
           rc = #mailtool_setValue('subject':Subject);             
           rc = #mailtool_setValue('message':Message);             
           rc = #mailtool_sendMail(errMsg);                        
         endif;                                                    

         New Method:
         ================                                                          
         if (#mailtool_init() >= 0);                                
           rc = #mailtool_setValue('configuration_file':             
                                   '/bvstools/bvstone_mailtool.json');                
           rc = #mailtool_loadDefaults();
           rc = #mailtool_addTORecipient('bvstone@bvstools.com');  
           rc = #mailtool_setValue('subject':Subject);             
           rc = #mailtool_setValue('message':Message);             
           rc = #mailtool_sendMail(errMsg);                        
         endif; 

         See https://www.fieldexit.com/forum/display?threadid=171 for more details on the
          updates included with this version.                                                   

v8.20  - Added #mailtool_setMsgPtr() procedure.  This procedure allows you to set the message
          of the email by specifying a pointer to the message and the length of the message.
          see https://www.fieldexit.com/forum/display?threadid=173 for an example.
         SP150709 - Fixed bug when using MAILTOOL Plus and no mail router.  If there
          were multiple recipient domains the 1st would work find but the 
          subsequent would not be delivered properly.
v9.00  - Added licensing by date (SaaS) option.
         SP151028 - Added option for MAILTOOL Plus to override the host name that is
          sent in the EHLO/HELO conversation.  By default the system host
          and domain is used from CFGTCP option 12.  If you wish to override
          this use the following command:

          CRTDTAARA DTAARA(MAILTOOL/MLTHOSTDA) TYPE(*CHAR) LEN(128) VALUE('<newhost>')

          Replace <newhost> with the hostname you wish to use.
         SP151113 -Included YAJL objects.
          Fixed bug when configuration file specified doesn't exist.  Now it
           throws an error
          Updated log so when SSL handshake error happens the return code is
           in the log file.
v9.10  - Added #mailtool_clearRecipients() subprocedure.  This allows you to clear all,
          TO, CC or BCC recpipients so you can reload them and resend the email.
         SP151211 - Included objects compiled against new service program
v10.00b- Added options to Base64 encode the subject and/or the body of the message.  
          This option was added to handle non-ASCII characters in the subject or 
		  message body.
          When using these options you'll need to make sure that the CCSID and Code
		  Pages used are UTF-8 (1208).  Any attachment, footer or external files must 
		  have a code page of 1208 in order to work properly.
		  The parameters are B64SUBJ and B64MSG.
		  The configuration names are base64_encode_subject and base_64_encode_message.
         Updated JSON parsing to use YAJL port.
         Fixed wildcard attachment logging.
         When using *ATT for the message body and a wildcard attachment in the first
          attachment parameter the results may be unpredictable as to which file it 
          will use for the body.  It's best to supply a fully qualified name on the
          first parameter and any wildcards following.	
         Chaged CCSID and Code Page defaults from 819 to 1208.	
         SP160216 - Updated Base64 Encoding to use apr_base64_encode API  
         SP160217 - Fixed error when sending with *IBMSMTP when TO and FROM
          were different lengths.
         SP160218 - Fixed bug when adding attachments and specifying a 
            name for the attached.  Was not using the name.
         SP160219 - Fixed bug when sending attachments the first attachment
            name would be *ATT instead of the file name if an 
            actual filename wasn't provided.
         SP160331 - Added subsetting by Sender Domain in MTPLUSLOG command.
         SP160404 - Fixed issue with non US code pages where the email would be 
            corrupt in some cases using special characters.
         SP160408 - Fixed issue when using Distribution Lists when a CC was before 
             TO in the file.  Caused a display issue with the headers.
         SP160411 - Fixed issue when using wildcard attachements and the default
            no attachment file (noattdft.txt) didn't exit.  An extra
            boundary marker would be put in the email causing some
            clients to show an extra attachment (sometimes named
            att00001.txt or something similar).
         SP160507 - Fixed bug when using OAUTH 2.0 and Outlook.com service.
         SP160509 - Fixed issue when using OAUTH 2.0 and CCSID 1208.
v10.10 - Added Send With (SENDWITH) option to specify *G4MSMAIL in order to send 
          the email using the Microsoft Office 365 Mail API using OAuth 2.0.
          This option requires that the G4MS software (www.bvstools.com/g4ms.html)
          is installed an the G4MSMAIL addon is licensed.
          Note: Not all MAILTOOL parameters will affect the email when sending mail
          using the *G4MSMAIL option.  If there is a parameter not working that
          you wish to use, contact us and we will see if it's possible to add.  
v10.20 - Added logging to MLTLOGPF, MLTLOGDPF and MLTLOGAPF when using the
          SENDWITH(*G4MSMAIL) option.
         Fixed bug when using SENDWITH(*G4MSMAIL) and MESSAGE(*ATT).  If the first
          attachment was blank, but the 2nd wasn't (which was intended to be
          the body) it would throw an error.  Now it will use the first non-blank
          attachment as the body.
         Changed use of YAJLR4 service program to use bindy by copy instead.
         Added Send With Type to MLTLOGPF file to see which method an email was
          sent with.
         Created command MTMRESEND command which is similar to the MTPRESEND command.
          This command allows you to enter a Microsoft ID or the value *ALL in order
          to resend emails in error that were sent with SENDWITH(*G4MSMAIL).
         Created MTG4MSLOG command in order to view and optionally delete or resend
          individual emails that were in error and sent with SENDWITH(*G4MSMAIL).
         Changed requirement of G4MS from v3.00 to v3.10.
         SP160615 - Updated F.MAILTOOL service program to use YAJLR4 as a module
           (bind by copy) instead of service program.
         SP160616 - Fixed bug when sending with G4MSMAIL and specifying *ATT for
            the message.  The email was using the 2nd attachment instead
            of the first for the body.
v10.30 - Updated applciation so SENDWITH(*IBMSMTP) will use distribution lists
          in MAILTOOL (MLTDSTL) just like when using MAILTOOL Plus.
v10.40 - Updated to work with G4G v10.20.
v10.41 - Updated to work with G4MS v4.10.
         SP161026b - Updated so that MAILTOOL can be run in "test" mode.  When in 
          "test" mode no emails will be sent.
          To go into test mode create a data area named MLTMODEDA with a
          length of 10 and a value of *TEST.  This data area does not 
          need to reside in the MAILTOOL library.
v10.50 - Updated with the option to turn strict SSL off.  The data area
          named MLTSSL01DA contains the value *YES or *NO depending if 
          you want to ignore most SSL Handshake errors or not.
         SP170112 - Updated so when sending with G4MSMAIL it will process any
          distribution lists specified in any of the recipient
          parameters.
v10.60 - Updated MLTUPDATE so it will use the new library name instead of MAILTOOL
          (in case the library is NOT MAILTOOL).
         Updated option when sending with *G4MSMAIL option that you can now use a
          G4MSMAIL configuration file.  Any settings in the configuration file will
          override any of the paramter values.
         Updated MTPRESEND command.  Added a PROMPT(*YES|*NO) parameter so you can
          bypass the prompt when resending emails. Default is *YES so that it acts
          like it normally did.
10.70  - Added option to use a list of mail routers instead of just one.  See
          https://docs.bvstools.com/home/mailtool/docs/mailtool-defaults for
          more information.  Examples of how to use the new feature will be 
          posted at:
            https://www.fieldexit.com/forum/thread?groupid=bvstools&forumid=mailtoolannouncements
         Updated so timeout value also applies to connect, not just send and receive.
         SP170427 - Bug when binding to local IP address.  Fixed.
         SP170428 - Incresed max size of authorization user and password fields
            from 64 to 256 bytes.
         SP170520b - Added option on MTPLUSLOG command to display email messages
            with errors only.   
         SP170602 - When an email would be sent with MAILRTR(*NONE) and there were
             no MX records to be found for the recipient the FROM address
             in the MTPLOGHPF file would be blank.  Fixed.
10.80  - Updated to latest YAJL objects.
         Renamed YAJL type *SRVPGM to YAJLBVS so it won't interfere with any other 
          versions of YAJL that may be installed.
         Changed default value of MLTSSL01DA from *YES to *NO so that strict SSL is
          off by default.
v10.81 - Updated to work with G4G v11.00 and higher.
v10.82 - Added Return email and name so the Return-Path can be set for each email.
v10.85 - Added Bad Address Action (BADADDACT) paramter on the MAILTOOL command as well
          as bad_address_action settable variable to the ILE functions.
          The value of *DFT for these will use the value in the MLTBADAA data
          area (which defaults to *WARN).
          The value of *WARN will issue a warning about a bad email address
          or invalid or empty distribution list.
          The value of *FAIL will issue an error and stop processing if an 
          invalid email address or invalid or empty distribution list is 
          encountered.
          SP180831 - Added option to use *USER for the From Address when specifying
            *G4MSMAIL as the send with server type and using Office 365
            to send the email
          SP181106 - Changed MLTDSTL to allow mixed case for distribution list name
            since distribution lists are case sensitive.
           Added F12 to Entry List Maintenance screen.
           Updated MLTDSLT so when you're working with an entry and finish
            you will be positioned to the last entry worked with.
          SP181108 - Updated MLTDSTL so when you add a new entry the cursor will be 
            placed on the record just added.
v10.90 - Updated MTPLUSLOG and MTPRESEND commands so if an invalid configuration file
          is entered processing would stop and not remove the entries in the log.
         Added command MTPREBUILD which can be used to rebuild the MAILTOOL error
          log in the case that there is an issue with resending and new entries
          aren't placed in the log file.  This will only work if the MIME files in 
          the IFS still exist in the /tmp directory with the basic naming format.
          Before using this option, please feel free to contact use with questions.
v11.00 - Added the ability to use the IBM Global Security Kit (GSKIT) for SSL/TLS
          communications.  By default MAILTOOL will use the Standard IBM SSL APIs.
          If you update data area MLTSSL02DA to the value of *GSKIT, the GSKIT will
          be used for SSL communications.
         SP190620 - Added configuration file to debug data when using MAILTOOL
           plus.
v11.10 - Added option to use SENDWITH(*G4GSMAIL) to send email using the GMail RESTful
          APIs.  This requires licensing for G4G, G4GSMAIL and GETURI.
         SP191124 - Updated MTG4MSLOG processing program to find the message and
           subject since the labels in the JSON changed when moving to
           the new MS Graph APIs.
         SP200428 - Updated MTG4MSLOG program so that if for some reason YAJL 
           returns an error message with an invalid character we 
           convert it to blank.
         SP200428b - Added Commit *NONE to MLT009RG.
v11.20 - Changed service program usage to *DEFER for better performance.
         Updated application so that you can specify the following in a routers
          file to specify to use G4GSMAIL as an option to send emails if a 
          previous method fails:
              {
                "mail_router": "*G4GSMAIL",
                "sequence": nn
              }
         Added more debugging to smtp trace file that is created.
         SP210116A - Added message ID and message ID domain when using send with
           *G4MSMAIL.
         SP210316 - Updated MLT008RG to set commit to none for SQL operations.
v11.30 - Added LSTUNSUB and LSTUNSUBP parameters to MAILTOOL command to allow 
          specifying values for List-Unsubscribe and List-Unsubscribe-Post
          headers.  These can be set using the ILE functions using the #mailtool_setValue()
          function and the list-unsubscribe and list-unsubscribe-post labels.
         Added the option to specify up to 50 user defined headers and values
          using the MAILTOOL command, and up to 100 using the ILE functions.  The
          ILE functions will use the new #mailtool_setUserValue() function.
v11.50 - Updated so if the SSL Handshake error 415 (GSK_ERROR_BAD_PEER) happens, MAILTOOL
          will attempt to resend the email up to 5 times before issuing an error.
         Updated MTPLOGHPF file to include locations of debug files.
         Updated MTPLUSLOG to include the email ID so matching up debug files
          is easier.
         SP211022 - Added more debugging info when there is an error writing
          to the debug file.
         SP211128 - Updated on GSK_WOULD_BLOCK read to ignore error.
v12.00 - Updated ILE functions and removed the leading # (hashtag) from the 
          names for compatibility with other code pages.
         SP220107 - Added subject back to MTPLOGHPF file.  In the past I was leaving
          it blank and retrieving it from the MIME file.
         SP220202 - Added options to MTG4MSLOG command to edit the config file as well
          as view details, such as the full path to the config file.  
          *NOTE - If you choose to edit the config file using option 2 it
          could corrupt the file as it uses the EDTF command.  We strongly
          recommend instead using option 5 to view the full path the the 
          config file and edit it using a proper text editor such as Notepad++.
         SP220330 - Updated MAILTOOL command so when a critical error is reported when
            sending email with *G4MSMAIL that it will cause a hard error in
            MAILTOOL as well so that it can be monitored.
         SP220713 - When specifying NOATTACT(*ERR) and an attachment wasn't found, 
            MAILTOOL was not throwing an error.  Fixed.  Made sure LR was on when
            sending error.
v12.50 - Added ability to specify send_with_server_type of *G4MSMAIL when using the
          MAILTOOL ILE functions.  This requires G4MS v9.12 or higher.  This method
          uses the g4msmail_sendMailMime() function which at this time (August 2022)
          is limited to 4MB in size (before Base64 encoding).
         When sending with G4G or G4MS with a MIME file added processing that if 
          debug is off to remove the MIME files.
         SP221102 - Updated a few errors that were using the wrong return code
          variable when reporting errors.
         SP221104 - Updated check for Username: and Password: when using user
          authentication.  This was because for some reason the 
          Microsoft Office 365 servers would randomly send the wrong 
          prompt during negotiation.  If it doesn't find the proper 
          prompt it will retry hoping that Microsoft's server sends 
          the proper response.  Yes, I am coding around Microsoft's
          bug.  *shrug*
         SP221109 - Updated code to ignore blank from email addresses if they 
          are in the routers config file.
         SP221129b - Updated objects that work with G4MSMAIL to use the latest version.
            Requires G4MS v9.15 sp221129 or higher.
         SP221129c - Fixed issue with GSK_WOULD_BLOCK error was encountered and RC > 0
            to treat it as a re-read for the operation.
         SP221204 - Updated so that the temp directory would affect the debug and
           trace files instead of always putting them in the /tmp directory.
          Added email ID to job log message.
          Added trace file location to job log if debug is on or the email
           encounters an error using MAILTOOL plus so that we can easily
           find it.  Example:
           Trace file:/tmp/mailtoolsmtp_127721.txt
         SP230223 - Fixed bug in MTPLUSLOG where in some cases resending didn't do 
            anything and reported no errors.
v13.00 - Added ability to redirect emails.  This can be done using the MLTREDIR 
          command which will force redirects system wide or at the command level.  
          See docs for more details.
          https://docs.bvstools.com/home/mailtool
         SP230329a - Updated so that if you are sending email with G4MS and using a
          footer the footer will be also used in this case.  This will
          required G4MS v9.15 SP230329b or higher which includes
          G4MSMAIL v7.60 or higher to function
v13.20 - Updated MLTLOGPF file to include a cross reference ID for emails sent with
          G4G or G4MS.  Using the MAILTOOL unique ID could have caused issues with
          G4G or G4MS and duplicate IDs so now MAILTOOL will always use it's own 
          unique ID and will reference the ID for G4G or G4MS.
         G4G v15.50 or higher is needed to return an ID when using G4G.  
         SP240930 - When using a mail router file and sending with *G4GSMAIL the
          original MIME file was not removed from the /tmp directory.
          Fixed.
         SP250228 - Changed check for at least one recipient to a warning only.  This
           is so that you don't have to specify a recipient when sending
           emails using a MIME file (G4G and G4MS mainly as MAILTOOL
           Plus will still require you to specify all recipients when sending
           with a MIME file.)
          Added option to NOT delete a MIME file if sending an email with
           a pre-created MIME file.  The default is to NOT delete the MIME
           file.  This value can be set setting the delete_mime_file value
           with the mailtool_setValue() function.
          SP251111c - Added option to set a "Sent With SNDDST" flag.  Used internally
           only.  
          SP251114b - Added option to set a "Sent With SNDSMTPEMM" flag.  Used internally
           only.  
v14.00  - Added ability to override the IBM commands SNDDST and SNDSMTPEMM so 
           that MAILTOOL will process the emails.  This is mainly for customers
           that require the use of OAuth 2.0 authentication to send emails with
           Google/GMail or Microsoft Office 365.  See installation instructions
           for details.
-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                   DISCLAIMER OF WARRANTY

 THIS SOFTWARE IS SOLD "AS IS" AND WITHOUT WARRANTIES AS TO
 PERFORMANCE OF MERCHANTABILITY OR ANY OTHER WARRANTIES WHETHER
 EXPRESSED OR IMPLIED. BECAUSE OF THE VARIOUS HARDWARE AND SOFTWARE
 ENVIRONMENTS INTO WHICH THIS PROGRAM MAY BE PUT, NO WARRANTY OF
 FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.  GOOD DATA PROCESSING
 PROCEDURE DICTATES THAT ANY PROGRAM BE THOROUGHLY TESTED WITH
 NON-CRITICAL DATA BEFORE RELYING ON IT.  THE USER MUST ASSUME THE
 ENTIRE RISK OF USING THE PROGRAM.  ANY LIABILITY OF THE SELLER
 WILL BE LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF
 THE PURCHASE PRICE.

       If you do not agree, please do not use this product.
-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
YAJL Copyright (c) 2007-2018, Lloyd Hilaiel <lloyd@hilaiel.com>,            
   Florian Forster  <ff at octo.it>,                                   
   Scott Klement <yajl@scottklement.com>                               
                                                                       
Permission to use, copy, modify, and/or distribute this                
software for any purpose with or without fee is hereby                 
granted, provided that the above copyright notice and this             
permission notice appear in all copies.                                
                                                                       
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL          
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED          
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL           
THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR             
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING              
FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF             
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF          
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.         
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=