Beta v7.83.5171 changes:
1.Item 36, fixed.
2.Item 37, updated. Needs testing as it affects core functions for all
  features that load/display images not just /drawpic.

Beta v7.83.3857 changes:
1.Item 29 & 32, changed. The local info HTTP request was using POST
  instead of GET, which caused some sites to not reply. After changing
  it to GET, almost all sites return valid results. The only sites that
  don't work are those that use javascript to fill in the details on
  the page after it has loaded.
2.Item 17, updated.
3.Item 35, added.
4.Fixed PCRE UTF support being disabled in the betas:
  https://forums.mirc.com/ubbthreads.php/topics/273885
5.Item 15, updated.

Beta v7.83.2820 changes:
1.Item 29, added.
  This will scan the reply from the server for the first valid IPv4 or
  IPv6 address it can find.
2.Item 26, updated TagLib.
3.Item 30, changed.
4.Item 31, added.
5.Item 32, added.

  To minimize requests made to the IP website: if multiple status
  windows or /localinfo request an IP lookup, only one call will be
  made to the website and the result of that call is applied to any
  queued requests. Also, the result is cached for 60 seconds and
  re-used. The cache is cleared if mIRC notices that your Windows
  network state has changed.

  mIRC defaults to icanhazip.com. You can find more sites at:
  https://www.wiki.balug.org/wiki/doku.php?id=system:what_is_my_ip_address

  There's a great story about icanhazip.com at:
  https://blog.apnic.net/2021/06/17/how-a-small-free-ip-tool-survived/

  Notes:
    1) Some sites will not reply to WinINet requests.
    2) Some sites may fail to reply on occasion.

6.Item 33, fixed.
7.Item 34, fixed.

Beta v7.83.1582 changes:
1.Item 28, changed. Experimental.

  The installer now starts up in non-administrator mode. When the user
  clicks the Install button on the final screen, it checks if it has
  write access to the chosen install folder. If it does, it continues
  in non-administrator mode. If it does not have write access, it does
  the following:

  1) The current installer hides its own window.
  2) A new installer is started using nsExec::Exec, with command line
  parameters, that requests administrator access.
  3) The new installer tries to complete the install and, once it
  finishes, and the user closes the window, the success/failure return
  code is returned to the hidden installer.
  4) The hidden installer exits with that return code.

  The same method is used by uninstaller.

  This required some tricky changes to the NSIS script. The difficult
  part was maintaining the flow of the install/uninstall process both
  visually for the user and internally for the script when switching
  to the elevated installer. The only difference from a user's point
  of view should be that administrator mode is not requested the
  moment they run the installer but only once the install process
  begins, if needed.

  Tested on XP to 11.

Beta v7.83.1573 changes:
1.Item 21, fixed gpf bug.
2.Item 26, updated.
3.Item 27, fixed https://forums.mirc.com/ubbthreads.php/topics/273809
4.Item 10, Microsoft has renamed "Trusted" to "Artifact" signing.

Beta v7.83.1558 changes:
1.Item 1, added. Required changes to how optional text is parsed in
  custom dialogs. Also required changes to the (optional) feature
  that is used by all dialogs.
2.Item 2, updated. A single secure RNG function has been created that
  attempts in this order: BCryptGenRandom(), CryptGenRandom(), and
  RtlGenRandom(). There are many online discussions about these APIs,
  how they work on different versions of Windows, etc. BCryptGenRandom()
  is the current recommended method, CryptGenRandom() is a deprecated
  method, and RtlGenRandom() works on XP.
3.Item 3, fixed. This was resulting in a wave file being left in the
  Windows Temp folder each time mIRC exits.
4.Item 4, changed.

  The standard editbox performs better than riched20.dll at font
  linking/fallback on Windows 7 onwards. mIRC did, at one point, switch
  to using msftedit.dll, which is a newer richedit control, but this
  was reverted in a subsequent release due to some users experiencing
  backward compatibility issues.

  The reason mIRC started using the richedit control was because 1) it
  allowed more than 30k of text, which used to be a limitation of
  standard editboxes, and 2) it handled Unicode characters better.
  Technically, mIRC could switch back to using a standard editbox
  except that richedit has one really useful other feature: undo
  history. This beta is now using the more modern msftedit.dll
  again for testing.

5.Item 5, fixed. This only happens if richedit editboxes are not
  being used.
6.Item 6, updated. Experimental.

  Added a new switch for blowfish and AES encryption. The number of
  single-letter switches was running out, making it difficult to add
  future ciphers/options, so has been changed to use named options.

  The newer blowfish implemention is not compatible with the older
  one because it:

  1) Allows the use of both salt and iv, requiring changes to the
     way these are applied
  2) Performs many checks for incompatible switches/parameters

  The older $encode()/$decode() blowfish has been left in place for
  backward compatibility with scripts that use it but will no longer
  be documented.

  Openssl.exe and Perl's Crypt::CBC were used to test combinations of
  options + inputs/outputs.

7.Item 7, updated.
8.Item 8, fixed https://forums.mirc.com/ubbthreads.php/topics/273726
9.Item 9, changed https://forums.mirc.com/ubbthreads.php/topics/273732
10.Item 10, updated.

   The DigiCert code signing certificate was up for renewal. Due to
   the high cost + signing now requires a Token/HSM, I thought I'd try
   out Microsoft's Azure Trusted Signing. Setting up Trusted Signing
   is ... arduous. Thankfully, several online guides made the process
   simpler and it seems to be working. Notes:

   1) Newer versions of signtool.exe, which are needed for Trusted
   Signing, will not allow use of SHA1, which is required for XP. mIRC
   has been dual signed with SHA1 and SHA256 for many years. This means
   that, from this point on, mIRC will only be signed with SHA256.

   2) Azure issues Trusted Signing certificates with very short
   validity, so you'll notice that the Valid From/To date for the
   certificate is only three days long. The validity of the signed exe
   depends only on the timestamp counter signature which verifies
   that the certificate was valid at the time of signing.

11.Item 11, updated.
12.Item 12, fixed https://forums.mirc.com/ubbthreads.php/topics/273753
13.Item 13, fixed https://forums.mirc.com/ubbthreads.php/topics/273777
14.Item 14, updated.

  See the IRC URL draft at:
  https://datatracker.ietf.org/doc/html/draft-butcher-irc-url-04

  The fix in v7.55 for CVE-2019-6453 prevents the use of a channel
  password after the channel name, so the key= URL parameter is
  now used for this.

  Also, some browsers now actively block opening some URL types with
  some port numbers, ie. specifying :6667 after an address will
  not work, so a port= URL parameter has been added.

  Also added support for:
  1) isserver/isnetwork: if isnetwork is specified, mIRC will not try
  to connect if a matching group name is not found in servers.ini.
  2) ischannel/isuser: if isuser is specified, mIRC will open a query
  window to that user on connect and perform a /whois which is shown
  in the query window.
  3) channel name: if not prefixed with a known channel prefix ie.
  #&+%! mIRC will prefix the name with #.
  4) Support for IPv6 addresses enclosed in [] brackets.

  The parser can be tested by enabling Chat links in the Options/IRC
  /Catcher dialog and then using /run with various combinations of
  parameters, eg.:

  /run irc://user:pass@test.org:7001,isserver/#test,ischannel?key=test&port=1234
  /run irc://EFnet,isnetwork/test,isuser

  If a user/pass/port is specified, these will over-ride any settings
  found in servers.ini for a matching network/server.

  The old link request dialogs have also been updated. mIRC will now
  decide whether it needs to open a new server window based on your
  currently open status windows/connections.

15.Item 15, updated.
16.Item 16, fixed.
17.Item 17, updated.
18.Item 18, fixed.
19.Item 19, added.
20.Item 20, updated. It appears that irc.ircnet.com is now the official
   address for connecting to an open server.
21.Item 21, fixed.
22.Item 22, added.
23.Item 23, fixed https://forums.mirc.com/ubbthreads.php/topics/273804
24.Item 24, changed.
25.Item 25, changed. Tested on XP to 11.

Changes:
1.Added custom dialog editbox option 'optional' for grayed out optional
  text indicator. If followed by "quoted" text, this is used as the
  optional text.
2.Updated all features that use secure RNG to standardize on a single
  function that chooses between the best available method for the
  Windows version being used.
3.Fixed DirectShow temporary wave file not being deleted on exit.
4.Changed editbox in Script Editor and Status/Channel/Query windows to
  use the msftedit.dll richedit control editbox for improved Unicode
  support.
5.Fixed standard editbox displaying blue line under editbox on Windows
  11 in Script Editor.
6.Added $encode()/$decode() switch 'k' to support encryption using the
  format:

  $encode(&var,k,options,%key,%salt,%iv)

  where options can be a combination of:

  bf-cbc | bf-ecb | aes-cbc | aes-ecb | aes-gcm
  salt text | binvar
  iv text | binvar
  header none | salt
  hash md5 | sha256 | pbkdf2 iterations
  padding none | pkcs7

  For example, to use a binary variable, mime encoding, blowfish, cbc,
  random salt, iv, and pbkdf2:

  $encode(&var, bmk, bf-cbc iv hash pbkdf2, %key, %iv)

  Notes:
  1. For backward compatibility, the old $encode()/$decode() blowfish
  support has been left in place but is no longer documented.
  2. Salt and iv must be the correct length for the encryption being
  used, ie. salt 8 and iv 8 characters for blowfish, and salt 8 and
  iv 16 for AES. This is different from the older method that
  zero-extended/chopped salts/ivs of the wrong length.
  3. Hash, the key derivation method, can be md5, sha256, or pbkd2
  for blowfish, and pbkdf2 for AES. For pbkdf2, an iteration count
  can be specified (the default count is 10000 for OpenSSL
  compatibility).
  4. If a salt/iv is not specified a secure random salt/iv is
  generated.
  5. Incompatible/invalid combinations of parameters/switches will
  halt a script and report an error, unlike the older method.

7.Updated SSL certificate dialog to include OpenSSH fingerprint and
  extended $sslhash() with .ssh property.
8.Fixed $did().visible state not being set correctly for custom dialog
  icons.
9.Changed $urlget() to retry a connection without compression in the
  event of a WinINet decode error.
10.Updated code signing certificate to use Azure Artifact Signing.
11.Updated CA root certificates cacert.pem file.
12.Fixed Scripts Editor More dialog editbox display bug when in dark
   mode.
13.Fixed menubar display bug when in dark mode and restoring mIRC from
   its tray icon.
14.Updated irc/ircs link parser to support features in the IRC URL
   draft specification.
15.Updated OpenSSL library to v3.5.6 that includes RCE fix.
16.Fixed $crc() and $crc64() not allowing a $null parameter like other
   hash identifiers.
17.Updated ADA IDNA library to v0.5.0.
18.Fixed hotlinks not handling user@ipv6 address format.
19.Added hotlink support for more prefixes, such as signal, slack,
   spotify, steam, viber, and whatsapp.
20.Changed IRCnet default server to irc.ircnet.com due to issues
   with open.ircnet.net. mIRC will automatically update servers.ini
   if it includes the old server.
21.Fixed /server -a not preserving existing entry's codepage if not
   specified as a parameter.
22.Extended most features/identifiers to support sha224.
23.Fixed XP/Wine gpf bug when older file dialogs are used to select
   a file.
24.Changed irc/ircs links support so that, if enabled in the Options
   Catcher dialog, mIRC in portable mode will add irc/ircs links
   support to the registry on startup and remove it on exit.
25.Changed how mIRC handles signout/shutdown on Windows 11 to resolve
   possible issues with not cleaning up/saving settings on exit.
26.Updated libraries to TagLib v2.2.1 and Zlib v1.3.2.
27.Fixed Address Book nick colors "idle time" display bug.
28.Changed installer to no longer require administrator access on
   startup. The installer will only request administrator access if
   a user installs to a folder that requires it.
29.Added /localinfo -w [URL] switch that extracts the IPv4/6 address
   returned by a website.
30.Changed Find dialog to treat _ underscore as part of a whole word
   when opening the find dialog over a word.
31.Added /copyini <fname> [topic] [newtopic] to copy topics in an ini
   file.
32.Added Options/Local dialog lookup method via website that returns
   an IP address.
33.Fixed custom DLL LOADINFO mBytes being set to incorrect wide char
   byte length when it should be smaller char byte length since
   bUnicode is set to FALSE by default.
34.Fixed user Treebar icons that were incorrectly sized.
35.Added support for displaying an MDI window's System menu when you
   right-click on its titlebar.
36.Fixed editbox eye icon incorrect background color when editbox is
   set to read-only.
37.Updated /drawpic and $pic() to use improved caching of image
   properties, added real-time LZ4 compression/decompression to cached
   bitmaps, extended cache size from 50 to 500 bitmaps, and added a
   /drawpic -p switch for use with -c that pre-caches all frames in an
   image by adding them to the bitmap cache on first load.
