home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / LaVolpe_322144152162009.psc / c32bppDIB.cls < prev   
Text File  |  2009-02-16  |  99KB  |  1,748 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "c32bppDIB"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15. ' COMPILE THE APPLICATION FOR BEST PERFORMANCE
  16.  
  17. ' Credits/Acknowledgements - Thanx goes to:
  18. '   Paul Caton for his class on calling non VB-Friendly DLLs that use _cdecl calling convention
  19. '       http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=70195&lngWId=1
  20. '   Carles P.V for his pvResize logic
  21. '       Used when manually scaling images with NearestNeighbor or BiLinear interpolation
  22. '   Carles P.V for his GIF LZW encoding routines. Used when saving to GIF
  23. '       http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=45899&lngWId=1
  24. '   Alfred Koppold for his PNG, VB-only, decompression routines. Used when zLib & GDI+ not available
  25. '       http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=56537&lngWId=1
  26. '   John Korejwa for his JPG, VB-only, encoding routines. Used when saving as JPG and GDI+ not available
  27. '       http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=50065&lngWId=1
  28. '   John Kleinen for example of a method of calling OLE class functions via API (See GetDroppedFileNames)
  29. '       http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=49268&lngWId=1
  30. '   Steve McMahon for his example on 24bpp to 8bpp palette reduction using oct trees
  31. '       http://www.vbaccelerator.com/home/VB/Code/vbMedia/Image_Processing/Colour_Depth_Reduction/VB6_Colour_Depth_Sample.asp
  32. '   www.zlib.net for their free zLIB.dll, the standard DLL for compressing/decompressing PNGs
  33. '       Without it, we'd be limited to GDI+ for creating PNGs
  34. '   coders like you that provide constructive criticism to make this class better & more all-inclusive
  35. '       Without your comments, this project probably would have died several versions/updates ago
  36. ' For most current updates/enhancements visit the following. Last changed 10 Oct 08
  37. '   Visit http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=67466&lngWId=1
  38. ' To see a usercontrol applying a version of this class
  39. '   AlphaImage Control. http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=68262&lngWId=1
  40. '   Image List Control. http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=69621&lngWId=1
  41.  
  42. ' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  43. '                                    O V E R V I E W
  44. ' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  45. ' AlphaBlend API :: (msimg32.dll) , GDI+ API (gdiplus.dll)
  46.  
  47. ' About 32bpp pre-multiplied RGB (pARGB) bitmaps, if you are not aware.
  48. '   - These are used specifically for the AlphaBlend API & are GDI+ compatible
  49. '   - Only TGA directly identifies premultiplied pixels. Though they can exist in
  50. '       PNG & BMP also, there is no flag saying: "Hey, I have premultiplied pixels"
  51. '   - The following 4 formats can contain alpha channels: PNG, TGA, BMP, ICO
  52. '   Advantages:
  53. '       - Images can be per-pixel alpha blended
  54. '       - Overall image opacity can be simultaneously adjusted during rendering
  55. '       - AlphaBlend does both BitBlt & StretchBlt for pARGB images.
  56. '       - Speed: AlphaBlend & GDI+ are pretty quick APIs vs manual blending
  57. '   Disadvantages:
  58. '       - The original RGB values are permanently destroyed during pre-multiplying
  59. '           -- Premultiplied formula: preMultipliedRed=(OriginalRed * Alpha) \ 255
  60. '           -- There is no way to convert pARGB back to non-premultiplied RGB values
  61. '              The formula would be: reconstructedRed=(preMultipliedRed * 255) \ Alpha.
  62. '               but because of integer division when pre-multiplying, the result is very
  63. '               close and if this should be premultiplied again & converted again, the
  64. '               calculated colors can eventually be completely different than the original.
  65. '               Fully opaque pixels pixels are not affected. Any transparent pixel is
  66. '               permanently destroyed & can never be returned. Its value becomes vbBlack
  67. '           ** Note: When images are converted to other image formats for saving,
  68. '               removal of premultiplication is performed to meet their specs.
  69. '       - Displaying a pre-multiplied bitmap without AlphaBlend/GDI+ will not result in
  70. '           the image being displayed as expected.
  71. '       - Not ideal for saving due to its size: SizeOf= W x H x 4
  72. '           -- better to save source image instead or compress the DIB bytes using favorite compression utility
  73. '           -- with GDI+ or zLib, image can be converted to PNG for excellent reduced storage
  74. '           -- Saving as a compressed TGA format generally provides very good file sizes
  75. '       - AlphaBlend API is not included/compatible with Win95, NT4 and lower
  76. '       - AlphaBlend on Win9x systems can be buggy, especially when rendering to DIBs vs DDBs
  77.  
  78. ' Note that GDI+ is standard on WinXP+, and can be used on Win98,ME,2K & on NT4 if SP6 is installed
  79. '   :: side note. I have actually used GDI+ on Win95 without problems; have not tried on NT4 SP5 or lower
  80. ' Download GDI+ from:
  81. ' http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlus.asp
  82. ' Download ZLib from: http://www.zlib.net
  83.  
  84. ' ----------------------------------------------
  85. ' About Win95, Win98, WinME, NT3.5 & NT4 support
  86. ' ----------------------------------------------
  87. ' These routines may not honor AlphaBlend if it exists on those systems. Win98's version,
  88. ' for example, has several bugs that can crash the application when AlphaBlending to DIBs.
  89. ' NT4, NT3.5 & Win95 do not come with AlphaBlend and I do not have WinME to test with.
  90. ' Therefore, to support these older systems, the Render routine will alphablend manually
  91. ' regardless if the AlhpaBlend API exists on the older system or not. However, this can
  92. ' be overridden by you. See isAlphaBlendFriendly routine. Therefore, AlphaBlend is only
  93. ' reliable on Win2K and above. XP & above already have GDI+
  94.  
  95. ' Class Purpose:
  96. ' ----------------------------------------------
  97. ' This class holds the 32bpp image. It also marshals any new image thru
  98. ' the battery of parsers to determine best method for converting the image
  99. ' to a 32bpp alpha-compatible image. It handles rendering, rotating, scaling,
  100. ' mirroring of DIBs using manual processes, AlphaBlend, and/or GDI+.
  101.  
  102. ' There are several ways an image can be loaded
  103. ' 1. From filename (unicode supported) :: LoadPicture_File
  104. ' 2. From a byte array :: LoadPicture_Stream
  105. ' 3. From stdPicture object or VB's .Picture object :: LoadPicture_StdPicture
  106. ' 4. From VB's Resource file :: LoadPicture_Resource
  107. ' 5. From a memory image handle or VB's .Picture.Handle property :: LoadPicture_ByHandle
  108. ' 6. From the clipboard :: LoadPicture_ClipBoard
  109. ' 7. From file drag/drop's Data object (unicode supported) :: LoadPicture_DropedFiles
  110. ' 8. From Pasted files (unicode supported) :: LoadPicture_PastedFiles
  111.  
  112. ' The parser order is very important for fastest/best results. See
  113. ' spt_LoadPictureEx how the routine marshals the image thru the parsers.
  114. ' cPNGparser :: will convert PNG, all bit depths; aborts quickly if not PNG
  115. ' cGIFparser :: will convert non-transparent/transparent GIFs; aborts quickly
  116. ' cICOpraser :: will convert XP-Alpha, paletted, true color, & Vista PNG icons
  117. '               -- can also convert most non-animated cursors
  118. ' cBMPparser :: will convert bitmaps, wmf/emf & jpgs
  119. ' cTGAparser :: will convert TGA (Targa, TrueVision) images only
  120. ' As a last resort, when GDI+ exists, anything unable to be processed by the
  121. ' parsers (i.e., TIFFs) are sent to GDI+. If GDI+ can process the image, then
  122. ' the image will be converted, internally, to PNG to enable additional processing.
  123.  
  124. ' The parsers are efficient. Most image formats have a magic number that give
  125. '   a hint to what type of image the file/stream is. However, checks need to
  126. '   be employed because non-image files could feasibly have those same magic
  127. '   numbers. If the image is determined not to be one the parser is designed to
  128. '   handle, the parser rejects it and the next parser takes over. Rejection occurs,
  129. '   generally, in only a few lines of code. The icon parser is slightly different
  130. '   because PNG files can be included into a Vista ico file. When this occurs, the
  131. '   icon parser will pass off the PNG format to the PNG parser automatically.
  132. ' And last but not least, the parsers have no advanced knowledge of the image
  133. ' format; as far as they are concerned, anything passed is just a byte array.
  134. ' Relying on file extensions when available is unreliable
  135.  
  136. ' Class Organization:
  137. ' ----------------------------------------------
  138. ' Search the class for the words NEW SECTION
  139. ' The class routines are organized in the following sections:
  140. '   Class Initialization & Termination Routines
  141. '   Public Properties & Methods (almost 60 and growing)
  142. '       Public Read-Only Properties
  143. '       Public Methods
  144. '       Class to Class Communication Methods
  145. '   Local Support Functions
  146. ' ----------------------------------------------
  147.  
  148. ' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  149. '                                       CHANGE HISTORY
  150. ' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  151. ' Accompanying Usage_c32bppSuite.rtf is updated with every change
  152. ' Last changed: 16 Feb 09. See change history within the RTF file
  153. '   -- most noticable changes
  154. '   :: fixed icon parsing class which can misparse icon masks
  155. '   :: fixed cPNGreader class which could misparse grayscale png transparency
  156. ' 26 Dec 06: First version
  157. ' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  158.  
  159. '._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
  160. '   IMPORTANT FOR UPDATES/ENHANCEMENTS   IMPORTANT FOR UPDATES/ENHANCEMENTS
  161. ' -----------------------------------------------------------------------------
  162. ' NOTE TO SELF: Whenever any routine recreates the DIB (new DIB memory handle),
  163. ' a call to Set m_GDIplus = Nothing must be made before changes are applied. This is because
  164. ' when the optional KeepGDIplusActive property=True, GDI+ is wrapped around the DIB.
  165. ' Deleting the DIB and not releasing GDI+ can cause crashes or unexpected results.
  166.  
  167.  
  168. ' No APIs are declared public. This is to prevent possibly, differently
  169. ' declared APIs, or different versions of the same API, from conflicting
  170. ' with any APIs you declared in your project. Same rule for UDTs.
  171. ' Note: I did take liberties, changing parameter types, in several APIs throughout
  172.  
  173. ' Used to determine operating system
  174. Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As Any) As Long
  175. Private Type OSVERSIONINFOEX
  176.    dwOSVersionInfoSize As Long
  177.    dwMajorVersion As Long
  178.    dwMinorVersion As Long
  179.    dwBuildNumber As Long
  180.    dwPlatformId As Long
  181.    szCSDVersion As String * 128 ' up to here is OSVERSIONINFO vs EX
  182.    wServicePackMajor As Integer ' 8 bytes larger than OSVERSIONINFO
  183.    wServicePackMinor As Integer
  184.    wSuiteMask As Integer
  185.    wProductType As Byte
  186.    wReserved As Byte
  187. End Type
  188.  
  189. ' APIs used to manage the 32bpp DIB
  190. Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
  191. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  192. Private Declare Sub FillMemory Lib "kernel32.dll" Alias "RtlFillMemory" (ByRef Destination As Any, ByVal Length As Long, ByVal Fill As Byte)
  193. Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hDC As Long) As Long
  194. Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
  195. Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hDC As Long) As Long
  196. Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hDC As Long) As Long
  197. Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hDC As Long, ByVal hObject As Long) As Long
  198. Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
  199. Private Declare Function CreateDIBSection Lib "gdi32.dll" (ByVal hDC As Long, ByRef pBitmapInfo As Any, ByVal un As Long, ByRef Pointer As Long, ByVal Handle As Long, ByVal dw As Long) As Long
  200. Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal lBlendFunction As Long) As Long
  201. Private Declare Function SetStretchBltMode Lib "gdi32.dll" (ByVal hDC As Long, ByVal nStretchMode As Long) As Long
  202. Private Declare Function GetObjectType Lib "gdi32.dll" (ByVal hgdiobj As Long) As Long
  203. Private Declare Function GetCurrentObject Lib "gdi32.dll" (ByVal hDC As Long, ByVal uObjectType As Long) As Long
  204. Private Declare Function GetIconInfo Lib "user32.dll" (ByVal hIcon As Long, ByRef piconinfo As ICONINFO) As Long
  205. Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
  206. Private Declare Function SetDIBitsToDevice Lib "gdi32.dll" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal dX As Long, ByVal dY As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, ByRef BITS As Any, ByRef BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
  207. Private Declare Function GetDIBits Lib "gdi32.dll" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, ByRef lpBits As Any, ByRef lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
  208. Private Declare Function OffsetRgn Lib "gdi32.dll" (ByVal hRgn As Long, ByVal X As Long, ByVal Y As Long) As Long
  209. Private Const STRETCH_HALFTONE As Long = &H4&
  210. Private Const OBJ_BITMAP As Long = &H7&
  211. Private Const OBJ_METAFILE As Long = &H9&
  212. Private Const OBJ_ENHMETAFILE As Long = &HD&
  213.  
  214. ' APIs used for fonts/text
  215. Private Declare Function SetTextColor Lib "gdi32.dll" (ByVal hDC As Long, ByVal crColor As Long) As Long
  216. Private Declare Function SetBkMode Lib "gdi32.dll" (ByVal hDC As Long, ByVal nBkMode As Long) As Long
  217. Private Declare Function TextOut Lib "gdi32.dll" Alias "TextOutW" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As Long, ByVal nCount As Long) As Long
  218. Private Declare Function GetTextExtentPoint32 Lib "gdi32.dll" Alias "GetTextExtentPoint32W" (ByVal hDC As Long, ByVal lpsz As Long, ByVal cbString As Long, ByRef lpSize As Size) As Long
  219. Private Declare Function SetTextAlign Lib "gdi32.dll" (ByVal hDC As Long, ByVal wFlags As Long) As Long
  220. Private Declare Function CreateFontIndirect Lib "gdi32.dll" Alias "CreateFontIndirectA" (ByRef lpLogFont As LOGFONT) As Long
  221. Private Declare Function GetTextMetrics Lib "gdi32.dll" Alias "GetTextMetricsA" (ByVal hDC As Long, ByRef lpMetrics As TEXTMETRIC) As Long
  222. Private Declare Function SetBkColor Lib "gdi32.dll" (ByVal hDC As Long, ByVal crColor As Long) As Long
  223. Private Declare Function GetGDIObject Lib "gdi32.dll" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, ByRef lpObject As Any) As Long
  224. Private Type Size
  225.     cX As Long
  226.     cY As Long
  227. End Type
  228. Private Type LOGFONT
  229.     lfHeight As Long
  230.     lfWidth As Long
  231.     lfEscapement As Long
  232.     lfOrientation As Long
  233.     lfWeight As Long
  234.     lfItalic As Byte
  235.     lfUnderline As Byte
  236.     lfStrikeOut As Byte
  237.     lfCharSet As Byte
  238.     lfOutPrecision As Byte
  239.     lfClipPrecision As Byte
  240.     lfQuality As Byte
  241.     lfPitchAndFamily As Byte
  242.     lfFaceName As String * 32
  243. End Type
  244. Private Type TEXTMETRIC
  245.     tmHeight As Long
  246.     tmAscent As Long
  247.     tmDescent As Long
  248.     tmInternalLeading As Long
  249.     tmExternalLeading As Long
  250.     tmAveCharWidth As Long
  251.     tmMaxCharWidth As Long
  252.     tmWeight As Long
  253.     tmOverhang As Long
  254.     tmDigitizedAspectX As Long
  255.     tmDigitizedAspectY As Long
  256.     tmFirstChar As Byte
  257.     tmLastChar As Byte
  258.     tmDefaultChar As Byte
  259.     tmBreakChar As Byte
  260.     tmItalic As Byte
  261.     tmUnderlined As Byte
  262.     tmStruckOut As Byte
  263.     tmPitchAndFamily As Byte
  264.     tmCharSet As Byte
  265. End Type
  266. Public Enum eTextAlignment
  267.     TA_CENTER = 6
  268.     TA_LEFT = 0
  269.     TA_RIGHT = 2
  270.     TA_RTLREADING = 256
  271. End Enum
  272. Public Enum AlphaTypeEnum
  273.     AlphaNone = 0
  274.     AlphaSimple = 1
  275.     AlphaComplex = 2
  276. End Enum
  277.  
  278. ' APIs used to create files
  279. Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long
  280. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  281. Private Declare Function GetFileSize Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpFileSizeHigh As Long) As Long
  282. Private Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumberOfBytesRead As Long, ByRef lpOverlapped As Any) As Long
  283. Private Declare Function SetFilePointer Lib "kernel32.dll" (ByVal hFile As Long, ByVal lDistanceToMove As Long, ByRef lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
  284. Private Const INVALID_HANDLE_VALUE = -1&
  285.  
  286. ' ////////////////////////////////////////////////////////////////
  287. ' Unicode-capable Drag and Drop of file names with wide characters
  288. ' ////////////////////////////////////////////////////////////////
  289. Private Declare Function DispCallFunc Lib "oleaut32" (ByVal pvInstance As Long, _
  290.     ByVal offsetinVft As Long, ByVal CallConv As Long, ByVal retTYP As VbVarType, _
  291.     ByVal paCNT As Long, ByRef paTypes As Integer, _
  292.     ByRef paValues As Long, ByRef retVAR As Variant) As Long
  293. Private Declare Function lstrlenW Lib "kernel32.dll" (lpString As Any) As Long
  294. Private Declare Function GlobalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
  295.  
  296. ' ////////////////////////////////////////////////////////////////
  297. ' Unicode-capable Pasting of file names with wide characters
  298. ' ////////////////////////////////////////////////////////////////
  299. Private Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal hDrop As Long, ByVal UINT As Long, ByVal lpStr As String, ByVal ch As Long) As Long
  300. Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hWnd As Long) As Long
  301. Private Declare Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
  302. Private Declare Function CloseClipboard Lib "user32.dll" () As Long
  303. Private Type FORMATETC
  304.     cfFormat As Long
  305.     pDVTARGETDEVICE As Long
  306.     dwAspect As Long
  307.     lIndex As Long
  308.     TYMED As Long
  309. End Type
  310. Private Type DROPFILES
  311.     pFiles As Long
  312.     ptX As Long
  313.     ptY As Long
  314.     fNC As Long
  315.     fWide As Long
  316. End Type
  317. Private Type STGMEDIUM
  318.     TYMED As Long
  319.     data As Long
  320.     pUnkForRelease As IUnknown
  321. End Type
  322. ' ////////////////////////////////////////////////////////////////
  323.  
  324.  
  325. ' used to create the checkerboard pattern on demand
  326. Private Declare Function FillRect Lib "user32.dll" (ByVal hDC As Long, ByRef lpRect As RECT, ByVal hBrush As Long) As Long
  327. Private Declare Function CreateSolidBrush Lib "gdi32.dll" (ByVal crColor As Long) As Long
  328. Private Declare Function OffsetRect Lib "user32.dll" (ByRef lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
  329. Private Type RECT
  330.     Left As Long
  331.     Top As Long
  332.     Right As Long
  333.     Bottom As Long
  334. End Type
  335.  
  336. Private Type SafeArray
  337.     cDims As Integer
  338.     fFeatures As Integer
  339.     cbElements As Long
  340.     cLocks As Long
  341.     pvData As Long
  342.     rgSABound(0 To 3) As Long ' reusable UDT for 1 & 2 dim arrays
  343.     ' array items: 0=1D item count, 1=1D LBound, 2=2D item count, 3=2D LBound
  344. End Type
  345.  
  346. Private Type ICONINFO
  347.     fIcon As Long
  348.     xHotspot As Long
  349.     yHotspot As Long
  350.     hbmMask As Long
  351.     hbmColor As Long
  352. End Type
  353. Private Type BITMAPINFOHEADER
  354.     biSize As Long
  355.     biWidth As Long
  356.     biHeight As Long
  357.     biPlanes As Integer
  358.     biBitCount As Integer
  359.     biCompression As Long
  360.     biSizeImage As Long
  361.     biXPelsPerMeter As Long
  362.     biYPelsPerMeter As Long
  363.     biClrUsed As Long
  364.     biClrImportant As Long
  365. End Type
  366. Private Type BITMAPINFO
  367.     bmiHeader As BITMAPINFOHEADER
  368.     bmiPalette As Long
  369. End Type
  370.  
  371. Private Enum eOScapability
  372.     osAlphaBlendUsable = 1  ' then AlphaBlend enabled & used when needed
  373.     osGDIplusUsable = 2     ' then GDI+ enabled & used when needed (set in isGDIplusEnabled)
  374.    'oszLIBusable = 4        ' then zLib enabled & can be used to create/read PNGs (no longer used, tested as needed)
  375.     osWin2KorBetter = 8     ' AlphaBlend capable system else it isn't for these classes. See isAlphaBlendFriendly property for more info
  376.     osWin98MEonly = 16      ' Win98 or WinME. When m_OScap includes osWin98MEonly+osAlphaBlendUsable then user overrode isAlphaBlendFriendly
  377.     osGDIplusNotAvail = 32  ' then NT4 w/less than SP6 or Win95. Otherwise system is GDI+ capable else it isn't
  378.     osIsNT = 64             ' NT-based system. Unicode compatible
  379. End Enum
  380.  
  381. Public Enum eImageFormat    ' source image format
  382.     imgError = -1  ' no DIB has been initialized
  383.     imgNone = 0    ' no image loaded
  384.     imgBitmap = 1  ' standard bitmap or jpg
  385.     imgIcon = 3    ' standard icon
  386.     imgWMF = 2     ' windows meta file
  387.     imgEMF = 4     ' enhanced WMF
  388.     imgCursor = 5  ' standard cursor
  389.     imgBmpARGB = 6  ' 32bpp bitmap where RGB is not pre-multiplied
  390.     imgBmpPARGB = 7 ' 32bpp bitmap where RGB is pre-multiplied
  391.     imgIconARGB = 8 ' XP-type icon; 32bpp ARGB
  392.     imgGIF = 9      ' gif; if class.Alpha=AlphaSimple, then transparent GIF
  393.     imgPNG = 10     ' PNG image
  394.     imgPNGicon = 11 ' PNG in icon file (Vista)
  395.     imgCursorARGB = 12 ' alpha blended cursors? do they exist yet?
  396.     imgCheckerBoard = 64 ' image is displaying own checkerboard pattern; not a true image
  397.     imgTGA = 128    ' if alpha<>AlphaNone, then transparent TGA
  398. End Enum
  399.  
  400. Public Enum ePngProperties      ' following are recognized "Captions" within a PNG file
  401.     pngProp_Title = 1           ' See cPNGwriter.SetPngProperty for more information
  402.     pngProp_Author = 2
  403.     pngProp_Description = 4
  404.     pngProp_Copyright = 8
  405.     pngProp_CreationTime = 16
  406.     pngProp_Software = 32
  407.     pngProp_Disclaimer = 64
  408.     pngProp_Warning = 128
  409.     pngProp_Source = 256
  410.     pngProp_Comment = 512
  411.     ' special properties
  412.     pngProp_Miscellaneous = 1024 ' this is free-form text can be of any length & contain most any characters
  413.     pngProp_DateTimeModified = 2048  ' date/time of the last image modification (not the time of initial image creation)
  414.     pngProp_DefaultBkgColor = 4096   ' default background color to use if PNG viewer does not do transparency
  415.     pngProp_FilterMethod = 8192        ' one of the eFilterMethods values
  416.     pngProp_ClearProps = -1     ' resets all PNG properties
  417. End Enum
  418.  
  419. Public Enum eTrimOptions    ' see TrimImage method
  420.     trimAll = 0             ' can be combined using OR
  421.     trimLeft = 1
  422.     trimTop = 2
  423.     trimRight = 4
  424.     trimBottom = 8
  425. End Enum
  426.  
  427. Public Enum eScaleOptions   ' See ScaleImage method
  428.     ScaleToSize = 0         ' [Default] will always scale
  429.     scaleDownAsNeeded = 1   ' will only scale down if image won't fit
  430.     ScaleStretch = 2        ' wll always stretch/distort
  431. End Enum
  432.  
  433. Public Enum eGrayScaleFormulas
  434.     gsclNTSCPAL = 0     ' R=R*.299, G=G*.587, B=B*.114 - Default
  435.     gsclCCIR709 = 1     ' R=R*.213, G=G*.715, B=B*.072
  436.     gsclSimpleAvg = 2   ' R,G, and B = (R+G+B)/3
  437.     gsclRedMask = 3     ' uses mostly the Red sample value: RGB = .8Green,.1Red,.1Red
  438.     gsclGreenMask = 4   ' uses mostly the Green sample value: RGB = .1Red,.8Green,.1Red
  439.     gsclBlueMask = 5    ' uses mostly the Blue sample value: RGB = .1Red,.1Red,.8Blue
  440.     gsclRedGreenMask = 6 ' uses Red & Green sample value: RGB = .45Red,.45Green,.1Blue
  441.     gsclBlueGreenMask = 7 ' uses Blue & Green sample value: RGB = .1Red,.45Green,.45Blue
  442.     gsclNone = -1
  443. End Enum
  444.  
  445. Public Enum eFilterMethods
  446.     filterDefault = 0     ' paletted PNGs will use filterNone while others will use filterPaeth
  447.     filterNone = 1        ' no byte preparation used; else preps bytes using one of the following
  448.     filterAdjLeft = 2     ' see cPNGwriter.EncodeFilter_Sub
  449.     filterAdjTop = 3      ' see cPNGwriter.EncodeFilter_Up
  450.     filterAdjAvg = 4      ' see cPNGwriter.EncodeFilter_Avg
  451.     filterPaeth = 5       ' see cPNGwriter.EncodeFilter_Paeth
  452.     filterAdaptive = 6    ' this is a best guess of the above 4 (can be different for each DIB scanline)
  453. End Enum
  454.  
  455. Public Enum eRegionStyles     ' See CreateRegion
  456.     regionBounds = 0
  457.     regionEnclosed = 1
  458.     regionShaped = 2
  459. End Enum
  460.  
  461. Public Enum eConstants      ' See SourceIconSizes
  462.     HIGH_COLOR = &HFFFF00
  463.     TRUE_COLOR = &HFF000000
  464.     TRUE_COLOR_ALPHA = &HFFFFFFFF
  465. End Enum
  466.  
  467. Private m_Tag As Variant            ' user-defined, user usage only. See TAG property
  468. Private m_PNGprops As cPNGwriter    ' used for more advanced PNG creation options
  469. Private m_StretchQuality As Boolean ' if true will use BiLinear or better interpolation
  470. Private m_Handle As Long        ' handle to 32bpp DIB
  471. Private m_Pointer As Long       ' pointer to DIB bits
  472. Private m_Height As Long        ' height of DIB
  473. Private m_Width As Long         ' width of DIB
  474. Private m_hDC As Long           ' DC if self-managing one
  475. Private m_prevDCobject As Long  ' object deselected from DC when needed
  476. Private m_osCAP As eOScapability ' See eOScapability enumeration above
  477. Private m_Format As eImageFormat ' type of source image
  478. Private m_ManageDC As Boolean   ' does class manage its own DC?
  479. Private m_AlphaImage As AlphaTypeEnum ' does the DIB contain alpha/transparency?
  480. Private m_GDItoken As Long      ' GDI+ token when GDI+ is initialized
  481. Private m_ImageByteCache() As Byte  ' should you want the DIB class to cache original bytes
  482. ' ^^ N/A if image is loaded by handle, stdPicture, or resource
  483.  
  484. Private m_GDIplus As cGDIPlus   ' maintains GDI+ instance to speed up drawing
  485. Private m_KeepGDIplusActive As Boolean ' see KeepGDIplusActive property
  486.  
  487. ' NEW SECTION *******************************************************************************
  488. '                   CLASS INITIALIZATION & TERMINATION ROUTINES
  489. ' *******************************************************************************************
  490.  
  491. Private Sub Class_Initialize()
  492.  
  493.     ' Determine operating system for compatibility of 32bpp images
  494.     ' http://vbnet.mvps.org/code/helpers/iswinversion.htm
  495.     ' http://msdn2.microsoft.com/en-gb/library/ms724834.aspx
  496.     
  497.    Dim osType As OSVERSIONINFOEX
  498.    Const VER_PLATFORM_WIN32_WINDOWS As Long = 1
  499.  
  500.    ' Retrieve version data for OS.
  501.    osType.dwOSVersionInfoSize = Len(osType)
  502.    If GetVersionEx(osType) = 0 Then
  503.       ' The OSVERSIONINFOEX structure is only supported
  504.       ' in NT4/SP6+ and NT5.x, so we're likely running
  505.       ' on an earlier version of Windows. Revert structure
  506.       ' size to OSVERSIONINFO and try again.
  507.       osType.dwOSVersionInfoSize = Len(osType) - 8
  508.       Call GetVersionEx(osType)
  509.    End If
  510.    
  511.     If osType.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
  512.  
  513.         If osType.dwMinorVersion = 0 Then ' Win95; can't use AlphaBlend nor GDI+
  514.             m_osCAP = osGDIplusNotAvail   ' fyi. I copied gdi+ onto win95 & it worked! but is it trustworthy
  515.  
  516.         Else ' flag as Alphablend disabled, but capable & is Win98/ME
  517.             m_osCAP = osWin98MEonly
  518.         End If
  519.  
  520.     Else
  521.  
  522.         If osType.dwMajorVersion > 4 Then ' if Win2K or better
  523.             m_osCAP = osAlphaBlendUsable Or osWin2KorBetter ' flag as AlphaBlend enabled (Win2K or better) and capable
  524.  
  525.         Else ' WinNT4. If SP6 or better than GDI+ capable else not. Regardless, not AlphaBlend capable
  526.             If osType.wServicePackMajor < 6 Then m_osCAP = osGDIplusNotAvail
  527.         End If
  528.         m_osCAP = m_osCAP Or osIsNT
  529.  
  530.     End If
  531.  
  532.     ' Note for programmers:  To test the spt_Win9xBlend function on systems with GDI+
  533.     ' 1. Unrem next line
  534.     '   m_osCAP = osGDIplusNotAvail
  535.     ' 2. Rem out the next two lines
  536.     Me.isGDIplusEnabled = True  ' attempt to start GDI+, test system capability, add osGDIplusUsable to m_OScap
  537.     If Me.isGDIplusEnabled Then Me.HighQualityInterpolation = True
  538.     
  539.     m_Format = imgError
  540.  
  541. End Sub
  542.  
  543. Private Sub Class_Terminate()
  544.     DestroyDIB ' simply clean up
  545. End Sub
  546.  
  547. ' NEW SECTION *******************************************************************************
  548. '                           PUBLIC PROPERTIES AND METHODS
  549. ' *******************************************************************************************
  550.  
  551.  
  552. Public Property Let Alpha(ByVal AlphaType As AlphaTypeEnum)
  553.     m_AlphaImage = AlphaType  ' determines the flags used for AlphaBlend API
  554.     ' this flag is set by the various image parsers; setting it yourself
  555.     ' can produce less than desirable effects.
  556. End Property
  557. Public Property Get Alpha() As AlphaTypeEnum
  558.     Alpha = m_AlphaImage
  559. End Property
  560.  
  561. Public Property Let HighQualityInterpolation(Value As Boolean)
  562.     ' When possible GDI+ will be used for stretching & rotation.
  563.     ' If GDI+ is used,then high quality equates to BiCubic interpolation
  564.     ' If not used, then BiLinear (manual processing) will be used.
  565.     ' If High Quality is false, then Nearest Neighbor (very fast, less quality) interpolation used
  566.     m_StretchQuality = Value
  567. End Property
  568. Public Property Get HighQualityInterpolation() As Boolean
  569.     HighQualityInterpolation = m_StretchQuality
  570. End Property
  571.  
  572. Public Property Get ImageType() As eImageFormat
  573.     ImageType = m_Format    ' returns image format of the source image
  574. End Property
  575. Friend Property Let ImageType(iType As eImageFormat)
  576.     m_Format = iType    ' set by the various image parsers. This is not used in decision making
  577.     ' anywhere in these classes, you can do with it what you want -- for now.
  578. End Property
  579.  
  580. Public Property Let ManageOwnDC(bManage As Boolean)
  581.     ' Determines whether or not this class will manage its own DC
  582.     ' If false, then a DC is created each time the image needs to be Rendered
  583.     Dim tDC As Long
  584.     If bManage = False Then     ' removing management of DC
  585.         If Not m_hDC = 0& Then   ' DC does exist, destroy it
  586.             ' first remove the dib, if one exists
  587.             If Not m_Handle = 0& Then SelectObject m_hDC, m_prevDCobject
  588.             m_prevDCobject = 0&
  589.         End If
  590.         DeleteDC m_hDC
  591.         m_hDC = 0&
  592.     Else                        ' allowing creation of dc
  593.         If m_hDC = 0& Then        ' create DC only if we have a dib to put in it
  594.             If Not m_Handle = 0& Then
  595.                 tDC = GetDC(0&)
  596.                 m_hDC = CreateCompatibleDC(tDC)
  597.                 ReleaseDC 0&, tDC
  598.             End If
  599.         End If
  600.     End If
  601.     m_ManageDC = bManage
  602. End Property
  603. Public Property Get ManageOwnDC() As Boolean
  604.     ManageOwnDC = m_ManageDC
  605. End Property
  606.  
  607. Public Property Get isAlphaBlendFriendly() As Boolean
  608.     isAlphaBlendFriendly = ((m_osCAP And osAlphaBlendUsable) = osAlphaBlendUsable)
  609.     ' WinNT4 & below and Win95 are not shipped with msimg32.dll (AlphaBlend API)
  610.     ' Win98 has bugs & would believe that WinME is buggy too but don't know for sure
  611.     ' Therefore, the Rendering in this class will not use AlphaBlend on these
  612.     ' operating systems even if the DLL exists, but will use GDI+ if available
  613.     ' Can be overridden by setting this property to True
  614. End Property
  615. Public Property Let isAlphaBlendFriendly(Enabled As Boolean)
  616.     ' This has been provided to override safety of using AlphaBlend on Win9x systems.
  617.     ' Caution. Only set this when rendering to a known device dependent bitmap (DDB)
  618.     ' Alphablend can crash when rendering DIB to DIB vs DIB to DDB. Be warned.
  619.     If Enabled = True Then
  620.         ' Overriding in play: allow AlphaBlend if system is Win98 or better
  621.         ' By default this is already set for Win2K or better
  622.         If ((m_osCAP And osWin2KorBetter) = osWin2KorBetter) Then
  623.             m_osCAP = m_osCAP Or osAlphaBlendUsable
  624.         ElseIf ((m_osCAP And osWin98MEonly) = osWin98MEonly) Then
  625.             m_osCAP = m_osCAP Or osAlphaBlendUsable
  626.         End If
  627.     Else
  628.         m_osCAP = m_osCAP And Not osAlphaBlendUsable ' disallow AlphaBlend
  629.     End If
  630. End Property
  631. Public Property Get isGDIplusEnabled() As Boolean
  632.     ' identifies if GDI+ is usable on the system.
  633.     ' Before this property is set, GDI+ is tested to ensure it is usable
  634.     isGDIplusEnabled = ((m_osCAP And osGDIplusUsable) = osGDIplusUsable)
  635. End Property
  636. Public Property Let isGDIplusEnabled(Enabled As Boolean)
  637.     ' Sets the property. If set to False by you, GDI+ will not be used
  638.     ' for any rendering, but still may be used to create PNG/JPG files if needed
  639.     
  640.     ' You can reset it to true at any time. If the system won't support
  641.     ' GDI+, then the True setting will simply be ignored -- no harm, no foul
  642.     ' To test success:  c32class.isGDIplusEnabled=True: If c32class.isGDIplusEnabled=True Then ' success
  643.     
  644.     If Not Enabled = Me.isGDIplusEnabled Then
  645.         m_osCAP = (m_osCAP And Not osGDIplusUsable)
  646.         If Enabled Then
  647.             If (m_osCAP And osGDIplusNotAvail) = 0 Then ' else Win95, NT4 SP5 or lower
  648.                 Dim cGDIp As cGDIPlus
  649.                 If m_GDIplus Is Nothing Then
  650.                     Set cGDIp = New cGDIPlus
  651.                 Else
  652.                     Set cGDIp = m_GDIplus
  653.                 End If
  654.                 If cGDIp.isGDIplusOk() = True Then m_osCAP = m_osCAP Or osGDIplusUsable
  655.             End If
  656.         End If
  657.     End If
  658. End Property
  659.  
  660. Public Property Let gdiToken(Token As Long)
  661.     ' Everytime a GDI+ API function is called, the class calls GDI+ apis to
  662.     ' create a GDI+ token first then destroys the token after the function is called.
  663.     
  664.     ' This occurs quite often. However, you can create your own token by calling
  665.     ' GdiplusStartup and then passing the token to each class for the class to use.
  666.     ' You would call GdiplusShutdown during your main form's Terminate event to
  667.     ' release the Token.
  668.     
  669.     ' When Token is zero, the classes will revert to creating a token on demand.
  670.     ' When the Token is not zero, any other DIB class created internally by this class will
  671.     ' pass the token as needed. The only routine that can create a new instance externally
  672.     ' and returns that new instance is the CreateDropShadow method. You must set the
  673.     ' token for that class at some point for that dropshadow class to use the token.
  674.     
  675.     If m_KeepGDIplusActive Then Set m_GDIplus = Nothing ' remove; may be referencing old token
  676.     m_GDItoken = Token
  677.     
  678. End Property
  679. Public Property Get gdiToken() As Long
  680.     ' returns the GDI+ token if one was created
  681.     gdiToken = m_GDItoken
  682. End Property
  683.  
  684. Public Property Let Tag(vValue As Variant)
  685.     On Error Resume Next
  686.     If IsObject(vValue) Then Set m_Tag = vValue Else m_Tag = vValue
  687. End Property
  688. Public Property Set Tag(vValue As Variant)
  689.     Me.Tag = vValue ' use the object check in the Let property
  690. End Property
  691. Public Property Get Tag() As Variant
  692.     If IsObject(m_Tag) Then Set Tag = m_Tag Else Tag = m_Tag
  693. End Property
  694.  
  695. ' This setting will keep the current cGDI+ class active which
  696. ' prevents destroying the GDI+ hImage and Token objects.  This
  697. ' can speed up rendering. This option SHOULD NOT be set when the
  698. ' class is not compiled. Else crashes will happen when
  699. ' user hits END or VB toolbar's STOP button while in IDE
  700. Public Property Get KeepGDIplusActive() As Boolean
  701.     KeepGDIplusActive = m_KeepGDIplusActive
  702. End Property
  703. Public Property Let KeepGDIplusActive(keepActive As Boolean)
  704.     m_KeepGDIplusActive = keepActive
  705.     If keepActive = False Then
  706.         Set m_GDIplus = Nothing
  707.     ElseIf Me.isGDIplusEnabled = False Then
  708.         ' can't set to True if GDI+ not installed
  709.         m_KeepGDIplusActive = False
  710.     End If
  711. End Property
  712.  
  713.  
  714. ' NEW SECTION *******************************************************************************
  715. '                               PUBLIC READ-ONLY PROPERTIES
  716. ' *******************************************************************************************
  717.  
  718. Public Property Get Width() As Long
  719.     Width = m_Width     ' width of image in pixels
  720. End Property
  721. Public Property Get Height() As Long
  722.     Height = m_Height   ' height of image in pixels
  723. End Property
  724. Public Property Get BitsPointer() As Long
  725.     BitsPointer = m_Pointer ' pointer to the bits of the image
  726. End Property
  727. Public Property Get scanWidth() As Long
  728.     scanWidth = m_Width * 4lT'o the bits of the immage
  729. End Pr Else Tag' sta[herefo is not zero, any other DIB class created internally by this class will
  730.     ' pass the token as needed. The ernally by trnallyointer tyby thid
  731. Private mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesivate mesi1;&vate mesivatong, _
  732.     ByVa we'riLong)e next ityInterpola!riLong)e next ityInterpola!riLong)e next iMkterpola!riLong)e next ityInterpw=me  Me.isGext ityon Winroperty
  733. End Propbe Create, & Vikkterp0hen rendering to a known device dependent bitmap (DDB)
  734.     ' Alphablend can crash when rendering DIB to DIB vs DIB to DDB. Be warned.
  735.     If Enabled = True Then
  736.         ' Overriding in play: allow AlphaBlend if system is Win98 or b***************almoststem won't support
  737.     ' GDI+, then the True setting will simply be ignored -- no harm, no foulhaBlend on thesv********otime  DIB class ransparAoTlphaBlend if syivat1end on the,HivatesivapMe.Highesvlpers/olean)
  738.     ' When pos Properixb<B vs si(r conla!riLonHighesN-&
  739. End Propertncti, B=B*.r = m_P which
  740. Rss mannnnnnnnnnnnn Regy If Enabledsi(r conla!riLonHig    = 1
  741.  
  742.    'phaBlend if syich kt(XlcAs Boolean)
  743.  on Winroperty
  744. End P = Toky         e Next    = 1
  745.  
  746.    'phaBlend if syich kt(XlcAfor fontperty
  747. End P =r'mmt GIFoperty
  748. mTn misolation = m_Strer As BITMAPl happen whenrriding inext can be of any length & contain most a  tl ' f,m Toky      vate mN',ls class manat GIFoperty
  749. mTnknown devikPublic Proht = 4PI contaanat G gsclRedGreenMasktentPoint32Wtoken as needed. Theertien needed
  750. Privanual proce If
  751.    
  752.     If osType.dTededend if syivat1end on the,Hivatesiv****otime  DIB class rst Neighbor (oriend on the,Hivatesiv****o) LongF'phaBlend if syich2v***our (iend o= m_Tag Elsescription = 4YtDrop As Lonpvarioushendering CAP Or&vYgsclNTSCPALd Win95 u can reove
  753. Pt gdiToken(TogdiToC        m_osCAP Tag()m_Strer As m_osCAP Tag()m_Strer' OverrihaBl
  754.    nd on the,Hi mply be ignored -- no harm, nNT FOR UPDATm, nNT End P = Toky         This option SHOuhe last i   eX        enrridnrridnse ias) aren render    v***og)e next i= vValue Else m_Tag = Else rVersion ////(ed syst  m_Managin play: allow Alphi If
  755.    vThen     Height = m_mply be igs AlphaTypeEnum
  756. (yVal wFlags ?(i****o) L m_mply be igs AE re(ntaan Asal proinorVersion As Long
  757.    dwAs LOGFONTAs Longiothingro**otime  DIB class ransparAoTlphaBlend ////(ed syst  En ' When TaparAoTlpsioext iMkterpola!riLong)e nnnnnnnnnnnnnnnnnnnnnnngro**tion = 4YtDrop eset by the various imsed to cre vari-1PubliTm, nokte"gdi3o////////nnnnnng   ' sizm class rst As Long, Byring in this class wi
  758. mTnng,Foperty
  759. mTn misolation = m_Strer As BITMAPl happen whenrriding inext can  be of any length & contain most ao connd ///ng, Byring in this clItIndirec
  760. End Properse Then
  761.    ointer() As  Long, Byring in this class wi
  762. mTnng,Fope= True Then
  763.         ''''nsparAoTlphaBlend /i
  764. mTnng,=)
  765.     ' WheE will
  766.     ' paonnd ///,Fo= True Then
  767.      bled = True Then
  768.         ' Ov   ' If nlare Funcs Properixb<B vs si(r conla!Hiotb<B vb imsed  Iftb<B vb imsight   ab<B vb imsight   ab<B Propern
  769.      IivatesivapMe.Highesvlperpoint forivapMe.Highesed  Iftb<B vb imsight   ab<B vHXpMe.sageTperpoint forivapMe.Highesed  Iftb<B vb imsight  &n a DC rridn then deive(kee98/ME
  770.            lRedGre   'ppen whenerty
  771. Public Propertrivate Declasbriko= True Then
  772.      bled /Arridnse ias) aCPpfTrue Thmbetter) and capable
  773. deasbriko= _g)
  774.     ' Everytime a GDI+ API function
  775.    vs si(r cken as needed. TheeX---------------------- API function
  776. t i   ned to
  777. si(rbetter)oB******' returns F deive(kee98/ME
  778.            lRedGre   'ppen whenerty
  779. Public Propertrivate Declasbriko= True Then
  780.      bled /Arridnse ias) aCPpfTrue Thmbetter) and capable
  781. deasbriko= _g)
  782.     ' Everytime a GDI+ API function
  783.    Iftb<B vb imsight   ab<B vbed
  784. Pd on the,Hivatesiv****o,Hivatbunction
  785. PI funcnctm class rst = 5    eclao/iidth As Long
  786.   srd capable
  787. deasbusEnabled = ((m_osesivnn
  788. PI funcnctm, or reeeeeeee functt GIFoperty osGr lower
  789.       iXdR set teI ong
  790.     t8_operg old' If nl?Bd-<B  & MePublic Peasbusp (DD on the,Hivatesiv*Bng iEnd PrgdiToken(TogdiToC -ro**tion .eas   lRedGEnabled = True Then
  791. Hivatuncnctm, ort   ab
  792. PIproce If
  793.   ignored Yo
  794.     If osType.d***********PI funcnctm, or     = 1
  795.  
  796.  ur (iersa  ab
  797. Plnl?D DIbject check in the Leteeeeeee functt GIFoetter
  798.   check in the Leteeeeeee functt ///
  799. 'eeee ro  If osTypecheck in the DIB      End Iirt   ab
  800. can dot KeepGDIplusActer
  801.   i
  802. mTbled /Arrihe Lhmbettn*******4      uGDIplAs Bytee valuettnpKP,  Iftb<B vb imsight   ab<B vbed
  803. Pd on the,Hivatesiv****o,Hivatbunctive = False
  804.     E0aaaaaaaaaaaaaaaaat temIES
  805. ' *ysioee Then
  806.      blele Then
  807. Hivatuncc ThenD DIbIoperty osGr lowed = True Then
  808. Hing   ' sThen
  809.   BiToken cre vari-1Publ    ' first remove esiv***
  810.     ******s)tlperpointLet isA Propertye3pb<B vb imr.tadig  lRedG' sThen
  811.  vb 1etti      a.snMaskteg**tion s,uBave a dee imr.tadi"nctt GI,Ol0c
  812.    Iftbster)oB*iToken(TogdiToC -ro**tion .eas       Iftbster)oB*iToken(Togl    OOOOOOOOm, or     = 1
  813.  
  814.  ur (ie in the DIB*
  815.     ******rrihe Lhmben, 1
  816. o= Nots Lonas been provided to override safety of using Anp***eCongrab<B terp0hene i be igs AE re(nt****************************************************
  817. '        th & contain most ao connd ,   regionEnclosed = 1
  818.     eOSost ao conneas       Iftbster)oB*iToken(Togl    OOOOOOOOm, or     = 1
  819.  
  820.  ur (ie in
  821. PI funcnctm class rst = 5    ecc   ******s)Ot sT Else ' flag as Alphablep ecc   *sty oimsight   ab<B vbed
  822. Pd on the,Hivatesiv****o, function
  823. t i   ned to
  824. si(rbeXx.2te
  825. End n(Togl    OOOO        at   ab<B      aty oimsightig  Sr (ie in the csivate T be set when the
  826. ' class is not compicr that ite
  827.    in the ao connd ,   rea9lityInterY As Long, ByVc*************
  828. '   oBe warn  E0aaaaaaaaaaaaaaaaat temIES
  829. ' *ysioee Then
  830.      blelDn if tusNotAvail   ' fyc*****ridnblic(blic(Be warn  EuFeatures As Integer
  831.     cbElements pIf tmgIconARGB = If nl?Bd-<B  & MePublier)oB*i**o, function
  832. t i   ned to
  833. si(rbeXx.2te
  834. End n(Togl    OOOO        at   ab<B      aty oimsigh    b<B      aty oi   b<B      a
  835. o= m= m_GDIbsterepfTrue Tterpolation g
  836.    dwAs LOGFO=yring in this +,cusingu****otime  DIB class ransparAoTlphaBlend if syivat1end on the,Hyy Me.isGDI, DIB vs n a DC ts pIf  = 1
  837. l1 DIB vsSaan lDI, DIB vs n a DC ts pIf  = 1nHeightSrc As Long,se cSaan lDDDDDDDDDDDDDDDDDDDDDDDDDt GIFopert lDDDDD***s)Ot sT Else ' flag as not compicr that ite
  838.    in the ao coDIB vs n a DC ts pIf  = 1<polatiocombined2nDCobjecty (ble elsive(kee9mes     ' See Cre eand capable
  839. de ' f     ' See / one of nHeigined2nDCis  perg old' Ifbrabl has been provideublic Propthi nd Pro olen
  840.      boalse Then
  841.  ****aoB*lAs  if syiv.qolen
  842.  ' Then
  843.  s
  844.      blelDn if annnnnnnyyyyyyyyyyynter = mEter)oB*iToken(Togl      blel
  845.  
  846.  ur rman(TogyyyyyyyyynaIghaBlend If oIRa,Dn if annnnnnnyyyyyyyyyyynter = mEter)oB*iToken(Togl   f oIRa,Dn  (Frd capable
  847. deuqannnnnnnymotDC rr;oe Declare(,f re9ter
  848.  -ll ARoe DecP Tag()m_Strer' OverrihaBl
  849.    nd'        OOOO        SsSSub Class_Initialia DC ts pIf  = 1nHeight W re9os= mEtminorVersion As Long
  850.    dwAseded. Theertri' i   nu   gsclGreenMask = 4   ' ' firt As ******lend DTw activewail   ' fyc***bso2,Dngl      blel
  851.  
  852.  urblic Pro*on As LoIB vs n a DC ts As ***rt As *****0t ite
  853.   5bt**led = True&  = 1<pqolen
  854. **bso2,functt   AlphaSimpldelsnnnnyyDest As Long, ByVal nWe DecP T be igs Alph blels Alps Me.Tagr1:haBl
  855.    ndEter)oB*iToken(-ion s,uB= 2   ts pIf  =   **oTheneivers/iswlass_Initiallllllllllllllll class at s(lean)
  856.      Nex(lean)
  857.      Nex(lean)
  858. Ifbrs pIf= False
  859.     End If0Td.
  860.     T
  861. Pu t GIF(1
  862. Public Property Lenu-  at s(lea vs Rendered
  863.  an)
  864.    End Pr lde  = 1nHeightSrhA
  865. PublXe vari-1Publ    ' first remove esiL8yyy
  866.    dwAsnd Property
  867. Friend PrTypecheckbz set wheken(Togded(EnableDCis  perg osf annnnnnn T be igs A removeo  ' See cPN4;=yring in this +,cusiEnableThi0& Then   ' DC does existD;=yring in tVgIconARGB =n the
  868. ' class in this +,cusiEnabC, m_prex. Tgpressio any rendering, butt GI5e bits of the i****' rdle = 0& Then
  869. tTTTTTTT  Iivate,3ss in this +,cusiEnabC, m_prex. TgpressSee c regionEn Toky       
  870.     Tg old'osType.oiEnabC, onEn Toky       
  871.     Tg o =   **oTheneigined)eheneigined)Ce)
  872.         Iflreadter)oB*iTok m_KeepGDIplusActive A*********PI funcgdi32.dhekenthe i****' rdle
  873.  
  874. Publbwn devGPToky ate      s +,cusiB ttit is)  *********P  = 1nHeightSrwn c0 Then
  875. (Togded(EnableDCis  perg oerepuThenhaTypeEnned)CamEter)oB*i0DIB cG filctionFSepfTrue Tterpolation g
  876.    dwAs LOGFO=yring in this +,cusingu****eiginemv      s +,cusiB ttems.Y+s(lea vsi****' rtolation g
  877. emv    and capable
  878. de en' Eve<B vb imsight   ab<B vHXpMe.sageTperpo4aXpMe.sageTpefety of EEageTpefety ProperT=Blend ifhodate,3ss in this +,cusiEnabC, m_prcusiEnabiB ttems.Y+s(lea vsi****'g, ByVal nWecded(Enabdv    and capab' flag as notywAs LOGFO=yrmtrsion pre-multipliring in this + biB sftialofor that dropshadow class to use the ttroy i = 1 DC ts pIf  = 1nHTypeEn functt //rTmage
  879.     imgPNGicl = 1 DC ts pInnnnnnymnotywA vb im     aty  aty ed = 1 osW;Property Let isGDIplusEnable0'st wheken(Togded(leDC(tDC)
  880. ass ay ed =pCis  perg ovb imsight   ab<B PrIeSD below anhaImage As Alpha' Ever,ass at s(lean)
  881.      Nex(lean)
  882.    otAb imsL'rI)
  883.    otAb imsL'rI)
  884.    otAb imsL'rI)
  885.   eo  ' SeOLOR_ABeightSrwn c0 Then
  886. (Togded(EnableDCis  perg e= 6
  887.     ' Thooooooooooooooooe
  888.     lf********ge As AlOvsi**nCharWidth As Long
  889.     tmperg e= 6
  890. s Longtmperg e= 6
  891. s Longtmperg e= 6
  892. s Longtmperg e= 6
  893. sert lDDDGHeightSrwn c0 Tperg e= 6
  894. silseIf Me.iidi0             = 1nHand ca(Beeeeee
  895. ' 2       B cG filll class aosDGHeiAs Variant)
  896.     Me.Taee
  897. ' 2  d  I e= 6
  898. s Lpi    B cG filll clasd(leDC(t   'i Long
  899.  1fTn6 or Win95R      s +B otAb ele S******************************************
  900. '  FRn c0 Then
  901. (Togded(EnableDCis  pergto
  902. si(rbvate   Iftbster)oB*1iEnableThi0& Theed
  903.   EnablB
  904. Prrtri' i   nu   gscl"(verhang lencTheed.l"(verhanw cla D  gscl"bg e= 6
  905. s Longtmperg e= 6
  906. s Longtmperg e= 6
  907. sert lDDDGHeightSrwn c0 Tperg e= 6
  908. silseIf Me.iidi0             = 1nHand ca(Beeeeee
  909. ' 2       B cG filll class aosDGHeiAs Variant)
  910.     Me.Taee
  911. ' 2  d  I e= 6
  912. s Lpi    B cG filll clasd(leDC(t   'i Long
  913.  1filll cl
  914. s Lpi    B cG filll clasd(leDC(t   'i Long
  915.  1filll cl
  916. s Lpi    B cG filll claslic Pilll clasd(leDC(t   'i Long
  917.  1filll cl
  918. s Lpi    B cG filll claslic Pilll clasd(Me.ii5Dlasli  B e= 6
  919. s Lpovb imsight   ab<B PrIeSD b(EnableDCisalia DC ts pIf  = zed
  920.   = 12 ' Falsilll cl
  921. s Lppeaaaaapable
  922. de ' f DC ts pI f DC ts pI f DC ts pI f DC ts pI f DC ts pI f DC ts pI lsilll c DC ts m_dsd(leDC(t   'U(leDCeiAs Variant)
  923.  
  924.  1filll cl
  925. s Llyo=tesiv**--------------DC ts pI le (VistHevrt As ***q0 le (VisIie m_G' class  ts pI f DC ts pI lsilll c DC ts m_dsd(leDC(t   'U(leDCeiAs Variant)
  926.  
  927.  1fill Longb 
  928.  1fill LongbU(leDCeiAs Variant)
  929.  
  930.  
  931. (Togdegu****otime t
  932.  1fill Lo
  933.  
  934.  1fill Longb 
  935.  1fill LongbU(leDCeneur rmano = t
  936.  1fill Lo
  937.  
  938.  1fill Longb 
  939.  1fill Lonvate Type S(VistHevrt As ***q0 le (VisI,3ss ''''''''lass  tLieex. Tgpreaswlass_ingtmswlass_ingtmswlass_ingu****oteDCeiANi_*nCharW
  940.     ' gu****otime t
  941.  1fgPNGicl = 1 D pGean)
  942.      Nex(lean)
  943.    otAb ****otsscsl(***********C 
  944.  1fil
  945.     filterPaeth =I********P derg ovb imsigh---------DC ts pI le (Vis********aelieve thb---a DC rridn th*P derg ovb imsigh----Fgion
  946. me  M ''''nsparAoTlphaBlen- Then
  947. qolen
  948. *  M ''''nsparAe m_G' clash OULD N_G' csash OpROn Error Rs)y
  949. Public Property Get BitsPointer() As Loten- ThEnabCoB****ee
  950. ' 2s BITMAPtas ne th*P 
  951.     tmDigitizn  E0aaah*  M dnHand ca(Be   t&(d carst cG filll  E0aaaah* ano = t
  952.  1fill Lo
  953. ctt GIhimsigh timll Lo
  954. c'aaaah* ano = t
  955.  1fi******************ion
  956. PI funcnctm Get TNR*************ion
  957. PI funcnctm Get TNR********
  958.     If eighbon)
  959.    otAb ***h * 4l2twusp (True T**ion
  960. PI f  otAb ***h * 4l2twuIbrIrue T**/ne T**ion
  961. PI f  otA\gtmswlen
  962. HLa
  963.     Me.carst *h * 4l2twuIbr    pngPmgBmpeee
  964. ss)y
  965. PusGr lower
  966.       iXdR sarsIgeighbon)
  967.    o1*****gs A rem o1*****gs&ono = t
  968.  1fill Lo
  969. ctt GIhimsigh timllbe set )y items: 0=1D            en)
  970.    otAb ***h * 4l2twusp (True T**ion
  971. PI f  otAb ***h * 4l2twuIbrIrue T**/ne T**iono01fill Longb 
  972.  1fill Ls6
  973. sirue T**i T**iono01fil+c
  974.    Iftbster)oB*iToken(TogdiTompos= mEtminog = vmgBmpeee
  975. ss)y
  976. PusGr lower
  977.       iXdR sarsIsd)ehCTION ****' 2 
  978.     Me.carst *h *ionthioC rridcG filll clasd(leDC(t   'i LonrridcG pI leused,td)earst *h *ionSftergG available
  979.     ' vat1enHf tus (FrDItoken As Long      Error Rs)y
  980. 6PusG  'ppen wheneno01f/availablc whenenegh timllsigh-----As Long ORsivate RIrridTompos= me(nt****,tive As Booleas0=euseilablc whenenegh timllsigh---te RIrridTompos= me(nt****,tive As BooleasB*iToken(TB me(nt****,tive**ion
  981. Por Rs)y
  982. 6PihaBl
  983.    ndM f DC tsn)
  984. D,p5vsigh---tetmperg e= 6
  985. s       rue Then m_o
  986.  
  987.  1filll cl
  988. s Llyo=tecl
  989. t i   nG pBmpee''''nslablc whenenegh tiuror
  990. n
  991. (lse
  992.     End Ig e= 6
  993. Por Rsarrays/
  994. 'eeee ro  If osTypecower
  995.      carstpee''''= 4   ' ' firt As ******lend DTen,.1Redlower
  996.         careive(kee98/Me= 6
  997. h'     careive(kee98/Me= 6
  998. h'     careive(k  careive(kee9rg e= paanat G gscLonas Loe= 6
  999. h'     eTperporrays(Me.ii5Dlasli  B e= 6
  1000. s Lthing
  1001.     ElseIf Me.isGDIplusEnabivLte mesivate mesivate the 5555555555l
  1002.    ndM f*******e= 6P   DestrordM paanat G sAlphaBlendFriendly() As Botive As lBp2twuIbrI,slno01fill Loe******e= 6P   DestrordM 2;nslablc                 ostly the Red sample value: RGB = .8Green,.1Red,.1Red
  1003.     gsclGreenMask =oetteree r    Nex(lean)
  1004.       Nex1Nex(lea.oiEnabC,eas       Int****,t****ion Red sam2****C 
  1005.  1fil
  1006.     filteri4 e= 6
  1007. en,.1Rn)
  1008.   
  1009. *  M 'Oeafill LongbU noteen sample val-noteen samplBetter ' flag as AldeI f DCtHLa
  1010.  gdiTokenGDIplusEnablefSmble
  1011. deasblass aoIbple val-ss than desirable 3ssd val-sss(1fill Longbe    ' set by the Sfill Lo
  1012. ctt GIhimsigh timlerGean)
  1013.      nsUsable = 2     ' then GDI+k/ll LonsUsable F<Rt  ' ' see cble
  1014. g(ablvf eighusEnabEageTpefetN9x sy      aty oi  ' ' see cbleibiYPelsPerMey oi  ' ' ser
  1015.   i
  1016. mTeate youg as C,eas  ' ' lphaBlend Thene
  1017. g(ablvf eeThi0& Tnvate  lvf eeThi0& TnvPimsigh    bmple vaBIeusabodb toewhenen  lvf eeThbmple vaBIeus lvaBIeusa 6
  1018. TBhL-Siaty Set T-----As ciH
  1019. g(ablvf eigr    Neeigy the Sfill Lo  filteri4 e= rlic(l Lo  filteri4 eDItoken As L funcnctm Get Tr' can't set trivate
  1020.  Pi2     'e**iitsPointer() As Long9x sy      aty oi  ' ' secA(ByVal Als     i,td)earst *h *ionSftergG availablty PropoBe warfRGB Theneigine----Fgion
  1021. me  M '''' gs,cusTeate youg as C,eas  ' ' lphus lvaBIeusa 6
  1022. TBhL-Siaty Set T--i0DIB cG fser
  1023. y Slf  =  '''' gs,c'eeee ro  If osTypecowL-Siaty Svailablty PropoBe warfRGGGGGo  If osTypcv = 1n be of gPr*P 
  1024.  esN-&lass at some point fflag as notywAs LOGFBBBBBBBBBBBBBBBBer lde  = 1nHeightSrhA to use the token.
  1025.     
  1026. L-Siat mesis   nsUsable = 2    ba dee im   nsUsable = 2 ''''nslabhe DIB class to U       ' ng i= vmghe Sfill Lo  filteri4blic Property Let HighQualityIntsTypeogded(EnableDCis  pe  cabiapable
  1027. tyIntert lDDDDD***s)Ot sT Else ' flag as not compicr that ite
  1028.    in the ao coDIB vs n a DC ts pIf  = 1<polatiocombined2nDCobjecty (ble elsive(kee9mes     ' See Cre eand capable
  1029. de ' f     ' See / one of nHeigined2nDCis  perg old' Ifbrabl has been provideublic PprovCre eTBhL-Si6Cideublc PprovCre eTBhL-Si6Cideublc PprovCre eTBhL-Si6Cideublc PprovCre eTBhL-Si6-soic Propes bi'riL'ss.i-EL-Si6CiiiiiiiiiiiotAb ***ho the    
  1030.    ttern; not a tD  
  1031.    teependent bitmap (DDB)pe the token.
  1032.  'fill Lo  Pubs bi'riL'ss.i osTypc as clash OULD N_G' csas DC tsIis  pe* 
  1033.    ttern; nerty Le csas DC careplpoBe  ng      Error Rs)y&lasssi(rbvate  op  ' See Crearariant)
  1034.     Me.TaeeOPprovCre edeublc PprovCreORe) = os' See flreadter)oDC tsIis  pe* 
  1035.    ttern; nerty Le' no image l
  1036.  
  1037. Pas DC ts:(vCre e ed =pPl   OOOO  gPr*P 
  1038.  esN
  1039.    tp(OOOOr*P 
  1040.     Er ed =pPl   Osolatiocombined2n OOOO .eclare(,f re9ter
  1041.  -ll ARoe DecP iant)
  1042.     Me.TaeeOPprovCre edeublc PprovCreORe) = os
  1043.     Tg o =   **oTheneigined)eheneigined)Ce)
  1044.         Iflreadterrrrrrrrrrre   Morrrrre c0 Thim ' ser
  1045.   iaou(-ion s,f 1<pd)ehenf Ppkrm 1<pIB cG fser
  1046. y Slf  = oe DecP iant)
  1047.  lyointer tyor Rs)y&lasssi(rbvate  op  ' See Crearariane  oBmpeee
  1048. slare(os)yrre c0 Thim ' ser(2Wtoke See Crearrre c0 Thim 'Xss  ts pI f DC ts pI lsilll c DC ts m_dsd(leDC(t   'U
  1049.         ts m_dsd(leDC(t  < ts pI lsilleneigined)CEr ed =pPl   Osoleighs 
  1050.        'i6Cideublc PprovCre eTBsDGHeiAs Variant)
  1051.     Me.Taeeond Iib f DC ts p.h6Dnd PropertbeypW
  1052.     ' Sl   dYrD<CideublDeekre cSon s,f b f D(R'    lass will neiginede ' flaropeingIas C,eas  ' ' lphus lvaBIeusa 6
  1053. TBhL-Siaty Set T--i0DIB cG fser
  1054. y Slf  =  '' cG fser
  1055. y Slf  =  ''1ty Le csas DCfma********sssi(rbvo0' ' See Cre eand capable
  1056. de ' f     ' See / one of nHeiginPubs*ive As n*******
  1057.  1fTn6 or Wf
  1058. g
  1059.     imgBmpARGB lower
  1060.  s.i-EL-Se
  1061. 'Siatvf eiOOr*P 
  1062.  
  1063. ss)y
  1064. Pusint f careive(kebetb
  1065.  s.i-EL-Se
  1066. 'vrrEL-Se
  1067. 'Siatywuror
  1068. n
  1069. i_*nCharW
  1070.     ' gu**tmper 6
  1071. sec Propes bi'L-Su**tm4e
  1072. y Slf (  ' DC =pPl  i.i-EL-SL-SL-SL-SL-SL-SL-SL-SLitsPoib-SL-SL-SL-SLit'l
  1073. sec Propes ill Lo s bi'riSL-SL-SL-SLass ao Propes ilablc wheneneghovlablc whenenegh
  1074.     M :D tyor Rs)ybvo0' ' Scsa   M :D tyor(rbvate  op I  HIGH_Cf  =  
  1075.      Tag()m_Strer As m_osCAP Tag()m_Strer' OverrihaBl
  1076.    nd on the,val-ssGAihaBl Tg o =psssi( the,valablUty Le csaM*ate  c paanat G gscLonas Loe= 6
  1077. h'     eTperporalabl csas the,valade ' f     ' See / one of nHeiginPubs*ive As n****** then BiL ' f   olDnsUsable = 2 
  1078.     'b  pngPehenee / one ofs C,e  op I  HIGHaBl
  1079.    nd on the,val-ssGAihaBl Tg o =psssi( the,valablUty Le csaSL-SLass ao Propes ilablc ylen
  1080. HLa
  1081.     Me.carst *h * 4l2twuSuTypegablUty Le csaSLe / one of n filll clasd(leD)=nnyIH= 2 
  1082.    kSLe / one of n as Variant)
  1083. uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu-uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuing DIB to DIB vs DIB to DDB. aanat GTt)
  1084. uuuuuuuuuuuuuuuu ' ' luuuuuuuuu0s been ableTEhe,val-ssGAihee / videublic h OULD N_G'eigined2nDCis  ' ' Scsa   M :D tyor(rbvate  op I  HIGH_Cf  =  
  1085.      Tag()m_Struuuuut)
  1086. uuuuuPNGpropsuuuuuuuuuuuuuuuuuOO        SsSSupgscLonIGH_Cf  =DIB vs DIBi:
  1087. slarcus  M :D tyor(rbvate  op only.    m_o------DC ts needed
  1088. Prity osGr lower
  1089.     H_Cf a,c'eeee ro  If osTs
  1090.     Me.carst *h * 4l2twuSuTypegablUty Le csaSLe / one of n filll clasd(leD)=n,H_Cf  =DIB vs DIIIIIIIIIst *h * ined2nDCis  perg olT_G'eigine.car-soic Propesm
  1091.  1fihenee / one ofs Cndering, but stil  'U
  1092.       ****ion rgscLouuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuua of n ataeand 6Cidt *h * 4l2p*e= 6P   cc   *sty Aihe on the,f     ' Seito
  1093. si(rbvate 
  1094. qolen
  1095. *negh timllsC>e / ' (LD N_G'eitiG'eisis  perg ovb imsight   ab<B PrIeSD below anhaImmIof n fn
  1096. PI paletteperty
  1097. Friend PrTyp--DC ts 'Rt *h * 4l = (R+G+th*e  *sty Aihe on t-soic main foreeigforeP   cc   ce on  coDIB
  1098.     t  
  1099.  
  1100.  g(a  ' sizm cI+
  1101.     n t-soic nnnnnnqforeP   cc   ce on  erty Get'  ' sileD)=nmropsuuuuuuuuuHLa on  Ee As Booleas0=eusVno = t
  1102. 'on  e 4l2p=eusVno = t
  1103. 'on  e 4l2p=eusVno =  
  1104.  g(a  ' sizm cI+
  1105.     n t-soic nnnnnnqforeP   csoic nn / onuuuuuuuuuuuuuuuusIIIIIst  cI+
  1106.     n t-ss opate  hL-Siaty Set T--i0DIB cG fser
  1107. y Slf  =***h * 4l2y Le huuuuuuuuuuuuuuuuuuuu   ndbjmsTEhe,vDC Aval h OULD N_G'eigly.    m=e,valabPSLe wywywywr ed =pPn*******Typegm_ds(((((GH_Cf  =  
  1108.     Aihe on the,f   h&y Gn t-soic nnnnn
  1109.     n Boolean)
  1110.     ' DeterminI'M    End If
  1111.                 If cGDIp.ed(leDC(t  < t   h&y EHum_ds(((((GH_ClXe vari-1Pubs
  1112.   -N_G' iLonHighesN-&as C,eas  ' ' lphaBoshesN-&as C,eas n th &iiiiiiuhL-Siaty Setlasd(lecI+
  1113.     n t-csaS..as C,eas n tsm   ' DC dubs
  1114.   -N_Gut-csaS Propst thnLo  firopst to =  
  1115.  g'lUtyo = t
  1116. 'op Eve<B vb 3 Then Set m_Tag = vValue Else m_Tag = vValue
  1117. End Property
  1118. Public Property Set Toe= 6
  1119. hl LongbU noteen sample val-noteen samplBetter ' flag as AldeI f DCtHLa
  1120.  gdiTokenGDIplusEnablefSmble
  1121. deasblass aoIbple val-ss than desirable 3ssd val-sss(1fill Longbe    ' set by the Sfill Lo
  1122. ctt GIhimsigh timlerGean)
  1123.      nsUsable = 2      nsUsablebthe Sfhng     Sy  ab<B vbed
  1124. t= at   ab<B     nmleraoIbpop Eve<B vb 3   ab<B      ') Eve<B vb 3   ab<B      ') Eve<B vb 3   ab<B      ') Eve<B vb 3   ab<B      ')
  1125.    ndM -N_Gut-csaS Props2?Ibple and capabv (Re ' fP Tag()M -N_Gut-csaS Props2?Ibpdgly.    m=ety is fa'=d2?Ibpdgly.    m=ety is fa'=d2?Ibpdgly.    m=ety is fa'=d2?Ibpdgly.    m=ety is fa'=d2?Ibpdgly.    m=ety is fa'=d2?Ibpdgly.    m=ety is fa'=d2  If osTs
  1126.     Me.carst *h * 4l2twuSuTypegablUty Le csaSLe / onwuSu2?Ibpa    *         ' user-defined, user usage only. See TAG property
  1127. Privated If
  1128. E****o,HivatbuuTntsEnablefSmble
  1129. de
  1130.      Tag()uI      =wr ed =pPn*******Typegm_ds(((((GH_Cf  =  
  1131.     Aihe on the,f   h&y Gn t-soic nnnnn
  1132.     n Boolean)
  1133.     ' DeterminI'ly.    m=etI+k/rbeXx.2te
  1134. End ne0s    ecc  i oic nn he0s  tsEnablefSmbl,&y Gnl t-soic nnnnn
  1135.     n Booleaovaern; not a t:rash when rendering DIB to B      aty oisaS Pen
  1136. *nic nnnnnxt ityon Winroash        tam_Widt:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Rk * 4l2twuSual-noteen s::::::::::::rneiEnabC, m_suuuuuuuuuH Ee As ,vDag()m_Str)
  1137.     ' DeterminI'ly.    m=etI+k/rbd    'vtwuSuTypegablUty Le c  ' create DC)
  1138.    'vtwDag()m_Str)nym<r)nym::::::en sssssPNGprWate DC)
  1139.    'vtwDag( Overriding in play: allow AlphaBlend if system is Win98 ori6CideubluuuuuuH Ee Aucgeo2derio harm, neenM Proecc  i oic nn hen play: al, _
  1140.     ByVroecc  hat ite
  1141.    in the ao ct of image in t vtrlNGprWate Droperty  aty oiDers. This issuuuuuuu  m=etI+k/rbd    'vtwuSd Winroaablebthe Sfhng     Sy  ab<
  1142. ' *ysioee Then
  1143.      blelDn if tusNotAvail   ' fyc*****ridnblic(blic(Be warn  Euy  ab<sssi(in play: allow AlphaBlend if system is Win98 ori6CideubluuuuuuH Ee Aucgeo2derio h    n t-ss opatiImocalaropeiwer
  1144.                 ebiYPe c regpegablUty L   otAvail   ' fblic(Be wf n as Vat m_Tag suuuH Ee Aucgedfhdhtsng
  1145.   srd cacqqqqqq    ' pastergGed
  1146.     gsclGrmoca&GDIplusEnabled rmoca&GDIplusEnable2
  1147.     saS PrDI+ be used.
  1148.     _
  1149.     ByVroecc  hat i:*bsoE  ByVro
  1150.      ergGed but don't know for sure
  1151.     ' Therefore, the Rendering in this class will not u'  ergGeaarn  Euy  ab<sssi(in play:DIB to DDB. Be warned.
  1152.   syC,eas  ' ' lphus lvaBIeusa 6
  1153. TBhL-Siarhat i:*bsoE  ByVro
  1154. REn N_G' warned.
  1155.   Ieuen passing the t)T  ' ' lpsaS..as Gn t-sv)T  ' ' lwN_G' wbsoE  ByVro
  1156. R m=etI+k/rbd    wbsodierio harm, neenl,HivAty is fa'=) Eve';a'=d2  If osTs
  1157.     Me.carst *h * 4l2tu, m_suuuuuuuuuH                                                 aptu, m_uuuuuH c  hat 
  1158.    o)uuuuuuuuuuuu-uuOImao'*h *    'oOe See=pertoiathat i   4 6
  1159. s Lp -I euuuuuuuuuuuuuuuule hen play0 cacqqqBDn if t GDI+
  1160.              Propnot u'  er)e hen pl harm, neenl oken aftso DDB. Be warned.
  1161.   syC,eas  ' ' lphus lvaBIeusa 6
  1162. TBhL-Siarhat i:*bs  tl ' f,m <e warfRtC,e  op f,m <e warfRtC,erfRtC,e  nl oken 
  1163.    csash crds
  1164.   -N_G' iLiarhat i:*bs  tl ' f,hL-Siarhat 'T  ' ' lpa
  1165.    csash cned2nDCy if we have iG 4 6
  1166. s  copnot unut-csaS Props2?Ibpdgly.  ned2nDCy ifeVbsoE  ByVro
  1167. R m=etI+k/rty oieTEhe,val-sag id2nDCse Thee have a dib to put in i ole value: RGB eusa 6
  1168. Ta'=d2  ItolabsoE  ByVro
  1169. R m=etI+k/S    Propnot uEvey-I euput in i ole value: RGB e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000uuuuu(cower
  1170.  t
  1171. s Lpi    B cG0000000.000000000000000000000000000000000000000   4 6
  1172. )af00000
  1173.   srd cacqqqqqq    ' pbif syc8MEonly) = if syc8MEonlc paanat G gscL(ppl harm, neenl om=  
  1174.  g'lUtyo
  1175.  
  1176. ssh pbif syc8MEonly) =pqolen
  1177. **b,-DC ts pI le (VistHevrt AL.' lphO 6
  1178. TBhLM= GetDC000000:en we have iGo
  1179.  
  1180. ssh s
  1181.    suuuve n
  1182. **b,' ' lpsaS..as Gn t-sv)T  'b,' ' lpsaS..as Gn t-sv)T  'b,' ' lpsaS..as Gn t-sv)T  'b,' le
  1183. de
  1184.       the    
  1185. 0000000000000000000uuuuuuuuH      ant)
  1186. 1fi00000en plals000000 Tterpon000000000000000000uuuus fa'=d2?Ibpdg00000000uuh   Propnot ant)
  1187. 1fi00000en plals000000 Tterpon00000emove es5555l
  1188.    . Tgpressio any rendering, butt GI5e bits of the i****' rdle = 0& Theb0000000a t   ab<B    mperghapdg0000uuuus fa'
  1189.     fill ****' r'=d2?Ibpend v)T  pcvo8.e T**ii
  1190.    te e= 6cpi    **' r'=d2?Ibpend v)T  pcvo8obpend v)T  pcvo8obpend v)nkn t-sspdg00 oie(vabpen   eTpme a G Be wao, you can do with *ion
  1191. PIbon the,foken at'  ' sileend v)T  pcvo8.e T na t  ab<B PrIeSD 'na t  a<bpen   e!*bs t'filD 'na t  a<bpen   e!*bs ******PI funcgdi32.dhekenthe i****' rdle
  1192.  
  1193. Publbwn devGPToky ate      s +,cusiB tti<bpen   e!*bs t'filD 'na t  af wvailablt  cuuuuuublc Pprnd = 2 
  1194.  P   cc  l to DIB vs DIB to DDc=rrrrrre   Mosp
  1195.  1fil
  1196.     n   e!*bBpcc  l to DIBe at any time. 00000000000000000000'wuSuTypegablbin png= m_G*bsoE  ByVro
  1197.      ergGed buulbster)oB*iToken(f syc8Mlay: allow AlpL.' lphO 6
  1198. TBhLM= GetDC000000:en we have iGo
  1199.  
  1200. ssh s
  1201.    suuuve n
  1202. **b,' ' lpsaS..as Gn t-sv)T  'bSD 'na t  a' lpsa, DIB class to U       ' ng i= vmgg'lUtyo
  1203.  Propes ash OULD N_G' cm is Win98 oor Win95oneenl,Hos' See flreadter)oDC tsIis  pe* 
  1204.    ttern; nerty Le' no image l
  1205.  
  1206. Pas DC ts:(vCre e ed =pPl   OOOO  gPr*P 
  1207.  esN
  1208.    tp(OOOpen oss  Ife As n**e e ed.gdegu****yp tsIis  pele (Vs. Rendering inOHoss  Ife 1a, D(ppl harm, negu****yp tsIHaBl
  1209.    nd on the,val-ssGAihaBl Tg o =psapaben a4bbbbbbbbbbbbbbbbboreadter)oDCl Tg o =psa**yp tsI e!*bs t'filDbbbbbwuSuTypegablUty tg e= 6
  1210.  2(ariant)
  1211.  
  1212.  1filbbwu"iarhat i:*bs .bbbbbbbbb t'fifRtC,erfRtC the,Hi mpgrhat i:*bs .bbbbbbbbb t'fifRtDC ts pI le tg e= 6
  1213.  2(ariant)
  1214.  
  1215.  1filbbwu"iiarhat T2(ariant)l 
  1216.  esN
  1217.    tpegu**=pst
  1218.  1fill Lo
  1219.  
  1220.  1fill Longb 
  1221.  1fill LongbU(lesTrue T**ion(ablvf eeThi0 onpvat1E00000000that catmswlass_ingtmswlagIalsilll cl
  1222. s Lty Set T--i0DIBdFriendly(EUvf eeThi0 onpvat1Elow AlphaBs fa'=dass t agIalsil Pprnd = 2 
  1223.  Pee / c***bso2,Dngl   amnvaern; noooooooooosS      ' ngIalsC = 0&  gPrt  a<bpen   e!*bs t'filD 'na t  a<bpen   e!*bs ******PI funcgdi32.dhekenthe i****' rdle
  1224.  
  1225. Publbwn devGPToky ate      s +,c t  a<bpen   e!*bs **il Pprnd =i***<bpen   e!*bs **il Ppsl".*bBpcc32.dhbwn devGPToky ate   e!*b&ty  t   abivapMe.HtucU)Thi0&dat1E0vapMe.Hte Dew AlpL.' lphO 6
  1226. TBhLM= G
  1227. TBhLM= G
  1228. TBhLM=  bstere 1a, D(ppl harm, negu**abl csasc)     Me.Hte D on the,valpvat1E0000***PI fe
  1229.     ' pass the .tadig  Win98 ori6Cidass_yst
  1230.  1fill Lo
  1231.  
  1232.  1fill  .tadig  Win98 ori6Cidass_yuuuPNGpropsuuuusageT  s +,Iower
  1233. aain the aoBhLM= G
  1234.  pl harmnqforp   e eeThi0riant)
  1235.     Me.Taee
  1236. 'u**.
  1237.  1fRmrent cGDs +,Iowtl
  1238.  
  1239. PasowxAihee / videubli.rDItoken Asaos_yuuuPNGpropsuuuusageT  s +,Iower
  1240. aain the aoBhLM= G
  1241.  pl harmnqforp   e eeThi0riant)
  1242.     Me.Taee
  1243. 'u**.
  1244.  1fRmrent cGDs +,Iowtl
  1245.  
  1246. PasowxAihee / videubli.rDItoken Asaos_yuuuPNGpropsuuuusag
  1247. TBhLM= GetDC000000: to DIulbster)oB*iToken(f s>fi.rDItoken Asaos_yuuuia, D(ppl harm, nedevice/iarhat i:*bs .bbbbbdevice/iarhat i:*bs .bbbLte mepI fs_yuuuia, D(eat i:*bs .btilablt  cupl harm, neiant)ag  Win98 _yuuuPN((((GHA000000tternallt)ag  Win98 _yuuuPN(C(t btilfRmrent cGDs +,ter)oDC dig  Win98 oriat1E0vapMe.Hte Dew AlpL.' lphO 6
  1248. TBhLM).withRkmrytoooooas C,eas  ' ' lphaBlend Thene
  1249. g(ablvf eeThi0& Tnvate  lvf eeThi0& T.
  1250.  1filbbwu"iarhat i:*bs .bbbbbbbbb f  = oe DecPi    iu**.
  1251.  1fRmrent cGDs +,Iowtl
  1252.  
  1253. Pasbbwu"ia,Iowtl
  1254.  
  1255. Pa=pPl   OOOO  gPr*,tivecripag  W.q    ' pastergGed
  1256. HeiginPubs*iveThixAihetaS Props   OOOO  gPr*,tieThixAiusageT .e ttroy i = 1 DC ts pIf  b  ' 'usageb*s DtergGed
  1257. .  gPr*,s needoudn negu**k    t8_operg old' If nl?Bd-<B  & MePublic Peasbusp   & MePublic Peasbusp   & MePtsc Peaeaeae_Tag suuuH Ee Aucgedfht play: al, _
  1258.     ByVroeceafill LsGDIpsOaBhL-bbbbbbb t'foEaT'ac-Siaty Setlasd(l.iaty SetCee Creariant)**' rdleu f oYPe c regeThi0& T allow AlpL.' lpPe c regeThi0& T allow AlpL.' lpPe c regeT-&ig  WinAs Variant)
  1259.     Me.Taee
  1260. ' 2  d  I e= 6
  1261. s Lpi    B cG filll clasd(leDC(t   'i Loalue Elseapi    nroashothis clItIndireend if syivat    = 1nHand ca(Beemaeeapi   tergGedser
  1262. y car ' Setb<B   ilass   = 1nHyEr ed =pPl   Osolatedser
  1263. y c  m=ety is feight =ts pIf  = 1
  1264. l1 DIB vs MePublisolatedsarsusgTym!riotergGe3deubli.rDItoken Asaos_yuuuPNGpropsongbU n6
  1265. s       regeThi0& T alloeatet
  1266. TBhLMO  regeThionrridcG M,.rDItok30000csaWng ORm=ety is feight =ts pIh when r(hLM= GetDC000000: to DIulbst is fe Iftbster)oB*iTIs fe Iftbster)oB*iTIs fe Iftbster)oBI = 0& Thed ca(Bee)rue Tterpolati e 4l2p=eusVno uuuPN((((Gias) aCPs feight  on the,f     ' Seito
  1267. si(rbvate 
  1268. qolen
  1269. ' ' Dn the
  1270. ' class in thit,************
  1271. ' bs .bbb)e next tiony,bU n6
  1272. s NGpropsonSiatyto DIu pIf  = 1
  1273. l1 DIB vs MePublisolate DIB vs'*************  Me.Taee
  1274. ' 2  d  I e= 6 ldewVno uuuPdM= GetDC000000: to DIulbster)oBDC dig  WIulbst's not zero, apIf  -ao ct oTIs fe Iftbssssssssssssssss&p AlpL.:n6
  1275. s NGpr5vsterIbpdXPeashoooooo2aDC dig  WIu GetDC00 sSbsssssssssmyivaeight shothis clItIndiree dig  WIu IB Bublic(Be wf n Iowtl
  1276.  
  1277. Pa=pPl   OOeXPeashoooooossssmyivl   OOeXPoB****ee
  1278. ' 2s BITMAPtas ne th*P 
  1279.     tmDy Lety tg e= 6
  1280.  2(ariant)
  1281.  
  1282.  
  1283. s Lp -I euuuuue Iftbster)end if syivaaaaaaaaaSlf  =  '''' gs,c'eeee ro  If os*6
  1284.  2(ariant)uuuuue asc)    
  1285.       ridithis cu IB BubDIB
  1286.     vs si(r ckeSs fa'=d2?IaG vs si(GnabC, m_suuu in thhXgte  hL-Sed =pPl   OsSs fe Lp -D on the,valpvat1Eussss   = onas Loe:::Rk * 4l2twuSualEusssic nnnnnnqforeP   cc   ce on  erty Get'  ' sileD)=nmropsuuuuuuuuuHLa on  Ee As Booleas0=eusVno = t
  1287. 'on  e 4l2p=eusVno = t
  1288. 'on  e 4l2p=eusVno =  
  1289.  g(a  ' sizm cI+
  1290.     n t-soic nnnnnnqforeP   csoic nn / onuuuuuuuuuuuuuuuusIIIIIst  cI+
  1291.     n t-ss opate  hL--<B  dty is fa'=d2?Ibpdgly.    m=ety is fa'=d2?Ibpdgly.    Tym!riot 1fRm hL-Sed =pPl   wFlags ?(i****o) L m_mply be igs AE re(ntaan Asal proinorVersion As Long
  1292.    dwAs LOGFONTAs Longiothingro**otime  DIB class ransparAoTlphaBlend ////(ed syst  En ' When TaparAoTlpsioext iMkterpola!r   fill HoBI = 0&garfRtC,e  opC dig0 Thim ' ser(2Wbsmyin
  1293. *negho.Bs ransparAlend ////(ed saos_yuuuP
  1294. *negho.Bs ransarfRtC,e  opC dig0 Thim ' n t-soic v,ytLOGFONPtsc Pef  o)uuuuuuuuuserg old' Ifb eeeeeeeelDIB clasiathat i   4 6
  1295. s Lp -I euuuuuuuaRss mmmmmmmmmmmmm ''1ty Le csas ORe) = os' See 
  1296.  
  1297.  1filbbhdhtsnTlphsc\ ''1ty Msssss-------- API function
  1298. t i Le / osm ' n ---- APIT  I val pbC, m_sufokes:::::::::::, m_suf.ds)--- API function
  1299. t i Le / osm ' n ---- APIT  I val pbC, m_sufokes:::::::::::, m_sssssssssssss--<B  dyin
  1300. *neA=eusVno =  
  1301.  g
  1302. *neAoBhLM1n=eusVcuuuuuupsssi( the,vfrIf osTs
  1303.    s.  dyin
  1304. *ne
  1305. ' 2  d  I e= 6 ldewVno uuuPdTnvate   on  erty Get'   6 ldewVno uuu  n t-asd(leDC. lpsaS..uuno01TIs fate   on  erty Get'   6 ldewVno uuu  n t-asd(leDCL-Sed =pPl   OsSs fe Lp -D on the,valpvat1Eussss   = onas Loe:::Rk * 4l2twuSualEusssp=eusVlpL.' lpSin98
  1306. PI 0----DC ts nacqqqBDnLoe:::Rk,vfrI::Rk vat1Eussss   = o ******PI fun API =wr ed =pPn****   4 6 LOGFtmpe =  
  1307.   = ts nacqqo / osmw 
  1308.     Me.caon= ts nacqn***' lpha*PI fun API =wr edded. Theertien neededrfRtC,e0000000'wuSuTypegablbrAle  Me.oos nacqn***' loiien neededrfRtC,e0000000CMbrAle 0000CMbrAle 0000CMbrAusI e!*bs t'filDbbbbaVnuileDd000000a .s(rbvate  o'filDbbMbrAusI e!*b?Bd-<B  & ,ileDd000rAle 0000CMbrAle 0csaS PropsRmrent cGDD'
  1309. sirue T
  1310.  pl harmnqforp   e eeoirAlend
  1311. sirue T
  1312.  pl har:*bs .bbbno u::Rk vatsagriant)xin aftsd sy tnt)xin lDbbMbrfilbbhdht
  1313. sirue T
  1314.  pl harmnqforp   e eeoirAta Le / o2wwwwwww shothie    'Dharmnw activewail   'aar:*bs .bluSuTypegablbrAle  Me.oos nacqn8rAta Le / o2wwwwwww shothie    'DharmniPAic PeasbuablbrAMondnee DharmniPAicITin lD+iid  ecc  s pIf  b  ' 'user
  1315. y ' 2o
  1316. sive
  1317. ' 2s BI0000000.carst *h * 4l2twc PprovCr:s_yuuul2twuSuniPAicITin il
  1318.     fis .bbbno u::Rk vatsagriant)xin aftsd sydgly.  ned2nDCy ifeVc Ppsk VarianfAihalgSen Tapalenatsagriantn98 ori6Cidass_yuuuPNGpro  M ''''e
  1319. msL'rICy i,os si(GnSrty Le(_yuuuPNGp .s(rbvatelphO 6
  1320. TBhLM= GetDC0lier)Tg onacqqo2?IbpAicITi= 2 
  1321.  e Cr sy tnt)xin lDbbMb ca(Beemaeeapi PAic PeasbuablbrAMo- fe Lp -D of  bo,*******oIgte OG' cm is icITi= 2 
  1322.  e Cr sy tdevGsUsable FoIgteOp .s(rbvatelphO 6
  1323. Tlaro2=T
  1324.  pl harmnqforp   e eeoirAta Lop f'<w 
  1325.     Me.caole FoIgteOp .s(roIgteOp .s((ro2=ttDC tIpalenatsagriantnirDG0rPI functioe,s  = 0&garfRtC,e  opC dig0 rmnqforptdevGsUsable FoIgteOp .Smbl,&y GnlwW SsSSupgscLonIGH_Cf  nnnnOantagriantn98 ori6Cidass_yuuuPNGpro  M ''eOp .SmblPNGpro ff eeThi0& T.
  1326.  = G
  1327. TBhLM= G
  1328. TBh, eeThi0& T.
  1329.  antn9sRelow anhaImmIovCr:s_yuuul2twuSuniPAicITin il
  1330.     fis .bbbno u::Rk vatsano =  
  1331.  g(a  ' sizm ORrRk v= 6Lp -Dvice/iarhat uuPNGed =pP    ' then GDI+k/ll LonsUsable F<Rt  ' ' see cble
  1332. g(ablvf eighusEnabEagsbuablbPeas .SmblPNGpro feoirAlend
  1333. sirue T
  1334.  pl hara!riLong)e nnnnnf       ostuablbPng ORg)e i* 4ly,bUsg)e nbb t'fifRtC,erf euuuuuusmLe / o2duSuna_yuuuPNGnnnfuuuuuus((ro2=ttDC f4ly,bU2bno u::Rk vatsano =  
  1335.  g(a  ' sizm ORrRk v= 6Lp -Dvice/iarhat uuPNGed =pP    ''''''atsano = 
  1336.  
  1337.  
  1338. (Totrer As  rendering, butt GI5e bi_yuuuPNXYwfPublbwn devGPTorRk vree dig  WIu IBrRk vree dig  WteWUsm ' allow A(s_avree dto DIu pIf  tsapMe.Hte Dew AlpL.' lp osmab<B PrIto DIigh---ooooooooooommIovCr:s_yuuul2Cr:s_yuuT/ul2Cr:s_yuuT/ul2, D T.na_yusS!r  . bled /Arridned,.1Red
  1339.     gss,sssssmyivaeight x'D T.sS!r  . bled nnnnnfilDbbbbaVnSg  WteWUsm 'n the,vaIf osTs il
  1340.    ooO    f osTs
  1341.    nbb t'fifRtC,erbbbaVnSg bbayin
  1342. *ne=eusVt-uuPNGnnnfuuuuuuiLiar teI ong
  1343.     t8_opergftp(OOO000000ele (e / o2duSuna_yuuuPNGeas  nOanta nedevice/iarhat i:*;vCreORe) = os' See flreadter)oDC tsIis  pewhen thet-soic nnnnnee
  1344. gh
  1345. r:s_y4ilterPatto DIu pIf  = 1ag)e i* 4lvs DIBi:
  1346. slree dig  :s_yp* 4lvs DIBi:
  1347. slree dig  :in eshoooooo 
  1348.  
  1349.  
  1350. (Totrer Uwn devGPToky ate      s +,c t  a<bpen   e!*bs **il Pprnd =i***<bpen   e!*bs **il Ppsl".*bBpcc32.dhbwn devGPToL  ler) andH 
  1351.   _prex.)uuuuuk vre'eisis  per = G
  1352. TBhLM=  vre'eisis  pereeoirAtaIovC_yuuT/eeoirAtaIovC_yuuT/eeoirAtaIovC_yuuT/eey tg e= 6
  1353.  =pP    '''t lp osmyivaeight /eeoir'nSg bbayin
  1354. *ne=lp osmyivaeudwAss .SmblPa_yusS!r  . bled /l,cs n tsivas n ts  e!*bs **il Pprnd =inirDG0rPI functioe,s  = 0&garfRtC,e  opC dig0 rmnqforptdevGsUs= G
  1355.  pl harmnqfuuT/eeoirAtaIop osmyiv = 0 bleoirAtaIop osmyiarfRtC,e  opC dig0 rmnqforptdeig0nqforp   efuuuuuu/eeoirAtaIop osmyiv vate /cm is icI0'=d2?Ibpdgly1Iftbster)oB4l2twuongiothingtDC f4ly,bU2bno u::Rk uiLiar teI ong
  1356.     t8_opergftp(OOO0osmab<B ito
  1357. si(value: taIovuk vre'eisis  per = G
  1358. TBhLM=  vre'eisly,bU2bno u::Rk uiLiar teI ong
  1359.     t8_opergftp(OOO0osmab<B ito
  1360. si(value: taIovuk vre'eisis  o u::Rk uiLivre'eisly,bU2bno u::t ipov8/ME
  1361. is  per = Gs::::::, m__S'0000uuter)op -D on tiO    (T/eeoirforp   efuuuwn t-asdInymnotWIu IB   saS S uiL vate /cm iuna_yuuuPNGnnnfr = Gs::o(OOO0o6
  1362. s Longtmperg e= 6
  1363. s hi0&;I5e bi_yuuuPNXYwfPublbwn devGosly,bU0'=oe'ebAle 0000D(ppl heSs fa'=y,bU0'=ter)o 
  1364.  
  1365.  
  1366. (Totrer Uwn devGPToky ate      s +,c t  a<bpib-SL-SL-SL-SLb, tmDy lasli  B e= 6
  1367. s Lpovb                l harmnqforp  SL-SL-SDEy,bU2bno   . ble,e0000000'wEy,bUn
  1368. *neA               Un
  1369. *neOu(=PI f( thet-soic nnnnn a>oeuuuuue IftbsphaBlend if epMbrAle 0000Btaaaaaaaaat yivaeudwAss .SmblPa_yusS!r  . bled /l,cs n tsivas n tsosly, uuuuOO  vice/iac v,ytLOGFONPtnd ifhofePublisola
  1370. si(value: taIovuk vre'eisis  o u:maaaanuewhen esN
  1371.    t
  1372. 'op"iarhat i::anuiuuuu:Rk vatsano = a''t lp osmyivaONPtnd o2=T
  1373. ubUn
  1374. *l LsGD i::awhen esN
  1375.   t^maaaanuewhen = vValue
  1376. ng inOi'h eeeropsongbUwuSual3ly, ngbUwuobwr edfht play: alnTl3lyIn il
  1377.     filc ylefePublisola
  1378. si(value: taIovut
  1379. de ' 
  1380.     t8_opergfaaaanuewhen esN
  1381.    tbaVnSg bbayin
  1382. *n'     s +,c t  ai eeeruewhen =uuuuuuuuunight xPublisolau:maaaanuewhen esN
  1383.  L-SLassisola
  1384. si(_S'0000u0000pro feoirAlend
  1385. sirue T
  1386.  pl hara!riLong)e n(bUn
  1387. *neA    hen esN
  1388.  Lv:Rk vatdfhtehL-Sed =pPl o eeruewhlnTl3lyIn il
  1389.  M/blPa_yusp  cc   ce ontb<B vb imsight   d 
  1390. ctt GIhimsigh inog = vmgTgablUty Le ighusst-uuPPl o ef epMbrAle 000iToken(ToglGDs +,ter)oDC dig FONPtnd ifhofeoirAlend
  1391. sirue T
  1392.  pl hara!riLorP dig FONPtnd i im     aty  atyb Le igI fIbpdgly. ghusEnabEagsbfeoirAlend
  1393. sirue T
  1394.  pl hara!riLorP dig FRk uioigsbfeb:ty Le ighusst-uuO0o6iLiarhnd i &,i  t8_opergfaaaanuewhen esN
  1395.    tbaVnSg bbayin
  1396. *n'     s +,c t Alend
  1397. sirLd ////(ed syst  En ' When Ta(ed(edigivateorP di>inOi'h ,s. ghusEnabEagsbfeoirAlen,bUn
  1398. *nsrE)e  M ghuuuve n
  1399. **nsrE)e  M ghuuuve)e  M ghuuuve nBl om=  
  1400. usEnabEagsbfeoirAlen,e t  a<bpPieoirAlen,e t t 6 lde
  1401.    s.  dyiI:s_yp* 4l,I        regeThiorAlen,eLd ////(arhat iirue T
  1402.    e!*bs **il Ppsl".*bBr     regeThiorAlen,eLd ////(arhat iirue T
  1403.    e!*bs **il Ppsl".*bO        at   a hara!riLorP dig FONPtnd i im      iirue!*bs 0000a .leibiYPelsPerend
  1404. sirue T
  1405.  pl hara,ONPt iirue T
  1406. bayirue T
  1407.  pl hara,ONPt iime T
  1408.    e
  1409.   = tsIPI f( ublisoiuss+'rhat 'T  Rk ptnd i im eoirAta Le d apl hara,ONPt iirue T>e / 'osmyivaeudwAsvalpat f( ubf eeThi0 onpvat1E(atsagriant)xin aftsd sy tnt)0 onpeLOGFONPt, ue!*bs 0000a .leibiYPelsPerend
  1410. sirue T
  1411.  p il
  1412.  M/ba T
  1413. ba gP vatdfhigiv,atdfhigi   fis .bbbno u:a Leteeeeibd
  1414. setdfhigi/ba -&as C,eaiI(arhat iirue Tpib-SL-SL-SL-;iI(arhat iirue Tpib-SL-SL-SL-;iI(arhalf-SL-;vey-I euput in efePm-;iI(auPNGirue T
  1415. bayir(---- iu(=PI f( thet-PNGnnnfuuuuuSL-;iI(aSuna_yuuuPNGeas.Nra,ONPtAigsbnd i sm ' n -m-- iu(=ayir(---- iu(=PI f( theT
  1416.  p-PNGnnET
  1417.  p-PNGnnE
  1418.    ,ONPtAigsbnd i sm,ytLOGFsl".*bBr     regeThiorAlen,eLd ////(arhat iirue T
  1419.    e!*bs **il Ppsl".*bO        at   a hara!riLorP dig FONPtnd i im      iirue!*bs 0000a .leibiYPelsPerend
  1420. sirue T
  1421.  pl hara,ONPt iirue T
  1422. bayirue T
  1423.  pl hara,ONPt iime T
  1424.    e
  1425.   = tsIPI f( ublisoiuss+'rhat 'T  RgablU uuuuOO  vice
  1426. bayirue T
  1427.  pl ht  aulalEus i im n esN  Nex(ls+'rhat 'T  RgablU uuuuOO  vice
  1428. bayirue T
  1429.  pl ht  aulalEus i im n esN  Nex(ls+'rhteorP dve)e  M ghuuuve  af_N  f eeThP= 6L-00000en plals000ir(---- iu(=f'PhCiruena_yuuuPNGSD i::as t agIalsimpos= me(nt&u(=f'PhCiruena_yuuuPNGSD        oPtnd i i(=f'P-PNGta LuPNGSD     
  1430. ctt iirut iime  ' c   at 
  1431.   s)y
  1432. PusGr lower
  1433.       iXdR sarsIsd)ehCTION ****' 2 
  1434.     Me.carst *h2B. Be warned.
  1435.   syt  a' lpsa, DIB class to U       ' ng i= vmgg'lUtyo
  1436.  Pro
  1437.  pl ha=pP    ' tr mPAicITins  copnoS.caf'P-Pa -&asvf,ONPa hara!riLorP di at   a EiLorP di at pl haLorPblisoiu
  1438. y Slf    f ( ubf eeThs(rbilll classuuulbbbno u diPorP di a negu!riLorP diken Asaos_yuuuia, D(teeeeibd
  1439. setdfhipt)
  1440. uuuA  Me.oos naSL-SL-S:EiLorP Asaos_yuuuia, D(teeeeibd
  1441. setdfhipt)
  1442. uuuA  Me.oos nacDvic)
  1443. u i sm,ytLOGh; Rk /Tvic)
  1444. u i sm,ytLOGh; Rk /Tvi)
  1445.      Nex(lean)
  1446. IfbsE,bU n6
  1447. se ao ct ofontb<B vb is .bbba,ONPt iic)
  1448. =f'PhCiruena_yulEus i asvf,ONPa hara!  ByVroecc  hat i:*bsoE  ByVro
  1449.      ergGeneggggggic)iwat 
  1450.   s)y
  1451. PpaegablU u ct tLOGh; RbsoE  DI+k/ll Lons warfRhCTIOsssOGFBBBBBBBBBBBBBBBtIigh---oooooooos)y
  1452. .gi  CTIOsscoPtnd pIf  b  !riLo    tnd pIf  b  !riLo    tnd pIf  b  !riLo    tnd pIf  b  !riLo    tnd pIf  b  .rDItoken A!riLo  pdigivateorP di>inOi'hcaY.
  1453. Publbwn eorP di>inOier
  1454.      ic main)iwat 
  1455.   s)y    ic m hat i:gdi3yVroecc  hat i:*n)irte000hvOeuuh  uPNGSDy    ic m hat a_yulEbsoE  ByVIfbsEvice
  1456. bayirue PrIbpen   e!*bs t'filD 'na t  a<bpen   e!*bs ******PI funcgd
  1457. Publbwn ym<ayirue PSDEy,br rdlem-oDC tsIis  ldO3,br rdlem-oDC tsms ******PI funcgd
  1458. P i:gdi3yVroecc  hat i:*n)irte000hvOeuuh  uPNGSDy ,     ergGeneggggggic
  1459.  pl ht m i:gdgi   fis .bbbno u: PprovCre eTksoE  ByVro
  1460.      ergGeneggggggic)iwat 
  1461.   s)y
  1462. PpaegablU u ct tLOGhTm&oyuuuia, D(teeo
  1463.    C   in the ao ct of iIf  b  !riLo    tnd pIf  b  !riLo    tnd pIf  b  !riLo   B in the ao ct of image in t vtrlNGprWate Droperty  aty oiDers. This issuuuuuuu  m=etI+k/rbd    'vtwuSd Winroaablebthe Sfhng     S*bso2,Dngl      blelirue T
  1464. 4ablbPeoirfo Droperty      u-uuOImao'*h *S..astrlNGprWateN
  1465.  L-SLas' If nl?Bd-<B  & MePub  otrmnqforptdeig0nqforp   efuuuuuu/eeoirAtaIop osmyiv vate /cm is icI0'=d2?IbS!r  . bled /l,cs n tsbuuunight teuuuuuuut of iIftaIopdeig000000E5tcm is icI)iwat 
  1466.   s)as Loteap000000eeo;E  ' cbuuunightggggic)iuuuuut)T  ' ' lpsaS..a dnHandcI)ire eTksoENPa harahlpsaS..a dnHanli  B e= 6
  1467. s+nnnnnnayirue T pIf         teuuuuuuut ofofofofofofofofofofofofofofofofofofofofofofofofofeirue 32  B e= o 
  1468.  
  1469.  
  1470. ('sle tg enreadterAtaIovdb  dnHandcI)ire eTksoENPa ha    Un
  1471. *neOu(=PI fmblPNGpg',bU0'= 1fRm hL-Sed =pPl   wF ro  If os vValueF ro  If os vVal ro : calueF ofofofofofofofofofofofofofofofofo vate /cm is icI0'=d2?Ibpdgly1Iftbster)oB4l2twuongiothingtDC f4ly,bU2bno u::Rk uiLiaaA.
  1472.  ewhen tkalEusssic nnnnnnqforeawarned.
  1473.   syC,eas  ' ' lphus lvaBIeusa 6
  1474. TBhL-Siarhat i:*bsoE  ByVro
  1475. REn N_G' warned.
  1476.   Ieuen passing the t)T  ' ' lpsaS..as Gn t-sv)T  ' ' lwN_G' wbsoE  ByVro
  1477. R m=etI+k/rbd    wbsodierio harm, neenl,HivAty is fa'=) Eve';a'=d2  If osTs
  1478.     Me.carst *h * 4y      u  'i6Ci wbsoE  ByVro
  1479. R m=etI+k/I
  1480.  ewhag enreadterAtaIovONPte(ems.Y+s(hteor ofofofofofofofofofic)iwat a .le t)T  ' ' lpsaS..as Gn t-sv)T  ' ' lwN_G' wbsoE  ByVro
  1481. R m=etI+k/rbd    wbsodierio harm, neenl,HivAty is fa'=) Eve';a'=d2  If osTs
  1482.     Me.carst *h * 4y      u  'IovONPteassing  os vValueF ro 4b<B vb s= G
  1483.  pl harmnqng tuongi=pPLa
  1484.  whag yEr ed =pcaon=ty i DC ts pIfoByVro
  1485. ValueF ro 4s_yuuuia, D(teeeeibd
  1486. setdfhmyiv vate /cm is icI0'=d2?IbS!r .as GnCiruena_yuluuuu/eeoirAtaIop osmyiv vate /cm is icI0'=d2?IbS!r  . bled /l,cs nsetdfhmyiv vate /cm is icI0'=d2?IbS!r .as GnCiruena_yuluuuu/eeoirAtaIop osmyiv vate /cm is icI0'=d2?IbS!r  . bled /l,cs nsetdfhmyiv vate /cm is icI0'=d2?Ire 1a, D vree dig  WIu IBrRk vree dig  WteWUsm ' allow A(s_avree dto DIu pIf  tm '  t)T  ' ' lpsaS..as Gn t-sv'=d2?Ire 1a, D vree1a, D vree dig  r(enl,HivAtl,HivAtropeiwer
  1487. ivAtropeiw     l harmnrue T
  1488.  pl hara!riLorP dig FRk uioigEbno u::t ipov8sprovCpvree1a, D vreekrAlend
  1489. sirue T
  1490.  pl hara!riuuk vre'eisis  per = GaukrAlendsolatedsey,bU0'=oe'ebAle 0000D(igh---oo If
  1491.       cI0'=dsvb 3 Thebbno u: (W''1ty Le csgly.
  1492.  .S0tsagrianteiw    1a, D vrU       '  rrrF ofofofofofofofI0'=d2?IbS!oecc!r T
  1493.  pl hte T
  1494.  plW'bI0'=dFSDy    ic m hat au:maaaanuewhrrrF ofofofofofofofI0'=d2?IbS!oecc!r T
  1495.  pl hte T
  1496.  plW'TIOF ofofofofofofofI0'=d2?IbS!uofofofofofI0'=d2?IbS!bb?IbS!oecc!
  1497. ' bs .b  wbsodierio harm,m is Bublic(Be wf n I=fofofofofofofI0'=ds)y
  1498. PpaegablU u ct tLOGhTm&oyuuuia, D(tea'=d2  he += Rk /TvfofofofofI0'0'=ds)endnee Dia, D(tea'=d2W'TIOtuuuia,a'=d2  he += Rn4oEbno u::t ipov8es1eccebpIf  b  !riLo    tnd pIf  b  .rDItoken A!riLo  pdigivateorP di>inOi'hcaY.
  1499. Publbwn eorP dk uiLiar CRs)y&eeueF ofo8efofofofms.Y+alEusssic nnendnee Dia, D(ic)
  1500.   .leibiYPelso = t
  1501. 'o30!
  1502. ' .Y+alEusssic Is fate lDIB clasiath(ro2=ttDCxVro
  1503.      ergY+alEusssievAtropeiwer
  1504. ifofofopeiwerT  I val pt8_oper\s+'rhat 'T ofI0'=ds)y
  1505. PpaegablU u ct tLOGhTm&oyusssievAtrooI&  I2'DDia, lfAicITi2?IbS C,e  ouyuluoecc!rsic Is f tiOpiwer
  1506. id wf n Iowtl
  1507.  
  1508. Pa=pPl   OOeXPea fate lDIB o pg',bU0'n(B;th*P 
  1509.     tmDyot f( ubf eeThiO 3 Thebbnost  cI+
  1510.     n t-ssIcaaaaaMe.carst *h * 4y      u  'd;th*M!r  . bled /  b  .rDItoken A!riLo  pdigivateorP di>inOi'hcaY.
  1511. Publbwn eorP di>inOier
  1512.      ic main)iwat 
  1513.   s)y    ic m hat i:gdi3yVroecc  hat i:*n)irte000hvOeuuh  uPNGSDy    ic m hat a_yulEbsoE  ByVIfbsEvice
  1514. baysoE  Bqo / osm8e T
  1515.  plW'bIi   l haruuuut)Tt 
  1516.  i>inOi'hcaY.
  1517. PublbwIS!oec  .leibiwbsoE  ByVro
  1518. RD_prex.)uuuuuk ApsaS..as Gn t-sv)vateorP dbBr     o3 ThebbWirue T
  1519.  p    dsey,bU0'=oe'ebAle 0000DoXt-sv)vateorP(igh---orbd I   o3 Te(e2?Ire 1a, n vrU     e 0000D/  b (e2?Ire 1a, n vrU     e sEnablefegabblbin png=osssspng png=osssspng pnIop osmyiv = 0 bleoirAtaIop osmyiarfRtve
  1520. ' 2s BI00000U2bno u::Rk vatsano =  
  1521.  g(a  ' sizm  0----D plW'bIisssPNGprWatec*bsoiAP di at pl haLbBr   mm(e2?Ire 1aaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb f  =bwu"iiarhaRedlower
  1522.         careimnqforp   eoo'filDbbMbrAusI este
  1523. ' 2s BITt 
  1524.  i>inOi'hcaY.OO  viqeSag)e iteorP di>inOi'eSag)eP dbBr     o3 Thue T
  1525.  p    dwat a .lag asuuuuu%oken DbbbbaVn iteorOxsuuuuu%
  1526.  M/blPa_I M/blPa_yusp, ec*bsue T
  1527.  p    deubluuegho.Bs rcGDD'
  1528. sesm ' allow A0 rmnqforpdcI)ire eTksoENPa harahlpsaS..a dnHanli  B e= 6
  1529. s+nnnnnnayirue T pIf         teuuuuuuut ofofofofofofofofofofofofo   u  'IovONPteaed =pPl   Ose/iac v,ytLOGFONPtnd ifhofePublisola
  1530. si(value: taIovuk vre'eisis  o u:maaaanuewhen esN
  1531.    t
  1532. 'op"iarhat i::anuiuuuu:Rk vatsano = a''t lp osmyivaONPtnd o2=T
  1533. ubUn
  1534. *l LsGD i::awhen esN
  1535.   t^maaaanuewhen = vValue
  1536. ng inOi'h eeeropsongbUwuSual3ly, ngbUwuobwr eBlend ifme T
  1537.    e
  1538.   = yVroecc ',=tNNNNN b (e2?Irem n esN, allow As, ngbUwDPorP di a negu!riLorPfey,bU a negu!N, allow As, ngba/a=pPl   OOOO  gPr*,tir eBlendiue T pIf         teuuuuSual3ly,   Er ed =pPl   Osolatiocombined2n OOOO .eclare(,f re9ter &s)y
  1539. Puatiocoml n esN, cl
  1540. s Lf iIoT
  1541. basIist i:*B-.rue T pIf dnHIroecc ',bbbaVn it/ey
  1542. Puatiocoml n esN, cl
  1543. s Lf iIoT
  1544. basIist i:*B-.rue T pIf dnHIroecc ',bbbaVn it/ey
  1545. Puatiocoml n esN, cl
  1546. s Lf iIoT
  1547. basIist i:*B-.rue T pIf dnHIroecc ',bbba BI00000U2bnmmmmmm (ac*bsoiAP dhen esNBBBBB esN, clppPl00000en plals000ir(---- ibined2baVnt-sv)c ',brWatec*bsoiAP da
  1548.  plW'ba,ONPt d2n OOOgsbuablbPeas pspng pnIo i.i-Eg pnIo i.i-Eg pnIo i.i-Earm, nC0uatiocoml n es2bnmmmm,Me.carst *h * 4y      u  'i6Ci wmmmm (im, nC0uatiocoml n es2bnmmmm,Me.ca   oclppPl00000en buablbPmm,MYlbPeas pspng pnIo i.i-Eg pnIo i.i-dnee Dia, D(tea'=d2W'TiSD     
  1549. c  If.Eals000ir(-elsPerMey oi  ' iv vate /cm is gin oS.caf'P-Pa -&asvf,(Icate /cmtiocoml mmmm ''sPee++++++++nte  hL-Sed =ro
  1550. RDN_G'eigly.  c i:*Bt GTtlass will    ic m Ce /cm-tsagTtlass wimm ''sPeRDN_G'eigly.  c i:*BeRDN_G'eigly. XYwfi:*Bt GTtlass will    ic m C As BtrlNGprWaan)
  1551.     ' DeterminI'M    End If
  1552. +++++nteIcatM    End If
  1553. +++++nteIclig FRk bO  pnIo i.i-Eg pnIo i.i-Eg pnIo i.i-Earm, nC0uatiocoml n L-Sed =DN_G'eig^ss willrlNGprWaan)
  1554.     ' DeterminI'M    End If
  1555. +++++nteIcatM    End If
  1556. +++++nteIclig FRk bO  pnIo i.i-Eg pnIo i.i-Eg pnIo i.i-Earm, nCt/:U+nt'eigly.  c i:*B cI0ec i:*Bsssic nsm ' uuuuunight xPublisolau:maaaanu. pnIo i.i-Earm, nCt/:rP(igh---orbd      as pspng pnIo i.i-Egn/ pIf dniIoT
  1557. bupng pnIo i.i-El' a harafhofePublisola
  1558. si(valas  i.i-Egn/ pIf dniIoT
  1559. buptpsi(valas  i.i-Egn/ pIfc  IfoT
  1560. bupnvs,I pIf d      tar(-elsPefuuuwn in oS.cammm,Me.ca  f2R,Me.Ci i(=f'P-PNGta C As b  a<o/oMe.caonMe.Ci i(=fksoE  ByVro
  1561.      Gn t-sdn0c i:*Bsssic nsm 000u0000pro feoirAlend
  1562. sirueteen saarP di>inOi'eo i.i-dnee DEarm, nC0uaIf d  t i:*oib-SL-SL-SL-SLit'l
  1563. sec Propes ill Lo s bi'riSL-SL-SL-SFirue T
  1564.  p,bU0'=oe'ebAle 0000D(igh---oas GnCirue f,mlde
  1565.    s.  warfirAlenptpsi(valasL-SFirue T
  1566.  p,bT   u pnIo i.i- op  ' See Crearariant)2Creararivi-Eg pnIo i.i-E d  t 
  1567. sesm ' allow A0o ant)x#cslow A0o ant)u pspi>inOi'eo i   l ublbwyL-SL-SL-SFirue Tni0a
  1568. si(valas  i.i-Egn/ pIf dniIoT
  1569. bupsirue2?IbS++nteIclibe nd ifhofe0000D(igh  ce on/op  '00u0000pro feoiroT
  1570. buptpyirue T a)i.i-m 000u0000pro feoiOOOOusssic Is fate lDIB clasiathf. ble(igh  ce.na_yus00pfeoiroT
  1571. bu
  1572. baysoE  Bqo / osm8e T
  1573.  plW'bIi   l haruuuut)Tt 
  1574.  i>inOi'clasiatPDosm8e T
  1575.  plW'( !riLo   ::, m_ssssssm8e T
  1576.  pofofo  h&y EHum_ds((  M :D tyo on/op  '00u0000pro f.' lphO ypeogded(EnableD&21uuOImao'---oooooooodierio h Boolevdb  ce.na_yus00piml n esN, cB vbed n esN, cN, cB vbed n esN, ce T
  1577.   oolh?Ire gh---ome&21uuOImD&21uuOImao'- uuOImty is fa'=) Eve';a'=d2  If osTs
  1578.     Me.carst *h * 4y     esN
  1579.    t
  1580. 'Me.carst *h * 4y     esN
  1581.    t
  1582. 'Me.carst *h * 4y     esN
  1583.    t
  1584. 'Me.DItoken A!ri*bsoE 'isola 2?Ibpdgo M :D tyo on/op  '00u0000pro f.' lphO ypeogded(EnableD&21uuOImao'---oooooooodiharmT na t  ab<B PrIeSDB      u eogded(Enable
  1585. h'     eTperuPNGnIeuen passingptpyiru ymT na t  auuuwn in or/ pIf dniIoT
  1586. bupng pnIo i.i-El' a harafhofePue  'iS pnIo   u eogded(Enable
  1587. h'     e ken A!riLofePueGAiheel ro : c in or/ pIf dniIo+ePue  'iS pnIo   u eogGAihofoWaan)
  1588.  uuuuunigh* 4'rhat 'T  RgablU uuuuOO  vice
  1589. bayirue T
  1590.  pl ht  aulalEus i im n esN  Nex(ls+'rhat 'T  RgablU ara C AsE,'gablU 'wwwrhat :::+iVn it/ey
  1591. Puatio&dwr)nym::::::en sssssPNGprWate DC)
  1592.    'vtwDag( Overriding in pcop  '00u0000arararst *h *intGn t-soic nnnnnu0000arararst *h *intGn tT na t  yulEus i asvf,Ouuuuuuuuuu9)T  'b,' lhL-Siarhat 'l,HivAty is fa'=) Eve';a'=d2  If osTs
  1593.     Me.carst *h * 4y      u  'iu  'iu  'iu  'iuivAty irararst *h * o 
  1594.  
  1595. =etI+k/rbd   'iuivosmyiv vateuuuuuu9)T  'b,' lhL-Siarhat ,   'iu  'iuivAty yiv acpcop  =vAty iraraRk vatsano =  
  1596. uWeuniPAicIT ''0piml _yuuuia, D(ppl harm, nede&y EHrenderio+ePue  'iS pnIo  (aracpcop  =vAtwtt GTtlass eogd
  1597. h'     e ken A!riLofelllllllmrearanqfllllmr D(
  1598. sec atM    slmrearanqfluuiLiar teI ong
  1599.     tg
  1600.     ter)oDC tsIi000ir 6,   'iu  ')oDC tsIiararst *h  e osmyiarfRtCoDC tsIi000ir 6,b.i000ir eThi0&d'i000iuuh  u et
  1601. 'sImyiaraiuuh  u etcti000iry,bU2bno u::R t-sv)T  'bbU2bno u::R t-sv)T  'bbU2rAtaIop ouuuuuu9)T  'b,ytLOGN  Ne' uuuuudam=  sl Ppsl".*bBpcc32.dhbwn devGPToL  ler) andH 
  1602.   _prex.)u_.O'i00-C
  1603.    s.  dyi--- API function
  1604. t i Le / osm ' Pue  'iiiiiDA!riLo  pdigivateorP di>inOi' *h * 4l2twuSk/rbd   sm8e T
  1605.  pE  ByVro
  1606. n esN
  1607. ehL-Sed d 
  1608. uWeun on thepPl   Osna t  auuuwn   _prex.)u_.O' 'bbUa, D(teatIndireend if syivatanuiu0'=ds)eneN  Ne' uuud       _direend if syivatanuiu0'=ds)eneN  Ne' uuud       _direend if syivatanuiu0'=ds)eneN  Ne' uuud       _direend if syivDetyVroif syiva0pfeoiroTnuiuud       _direend if s  Me.Taee
  1609. )111111111cPi     AlpL.' lphanuiu0'=ds)eneN 'evGPToL y Get' u0'=ds)eneN  NerbbbaVnSg bocombined2n yiva0pfeoiroTn  _direeeeeeee.Hteeeeeeeeeeeeee.Hteeeeeeeeeeeeee.Hteeeeeeeeeeeeee  ab<
  1610. ' eeeee.Hte/ teI sec atM    slmrearanH_Cf  =DIB vsBhLM=s bi= G
  1611. TBhLM= Geeeeeeeeeeeee   ' b t'foiTokenGDIplusEnaregel= o **** b t'foif  =DIB vsBhteeeeeeeTna_yus00pfeoir=OO  vice/iTna_yus00pfeoir='     eTperuPN nnnnn
  1612.    uu/eeoirAtaIop osmyiv v(O'Me.carst *h * 4y  ' fs(((carst *hbined2n OyPl  irue T
  1613. bayt *h, D(teatIndireend if syivatanuiu0'=ds)eneN  Ne' uuud       _direend if syivatfuuuwn in oS.cammm,Me.ca  f2R,glyp       d if syivatmaRIse-Sed =DN_G'eig^ss will    d ',bbboooooooooooooooooooooooooooooooooooooooX<oic nnnMp       d if syivatmirAtaIovC_ycombined2n yPyi--- Am:::o haru     i Le / osm ' Pue  'iiiiiDA!riLo  pdigivateorP di>inOi' *h *i3yVS0tsagrianteiw  rex.)u_.i Le /*i3yVS0tsagriantrP di>i  ByVro
  1614. REn Lv      ' ngyVroecc ','=ds)eneN  Ne' prm, nede&y clasiathf. ByVro
  1615. REn Lv   P asveeeerhat 'l,HivAty is fa'=) Eve';auuunin/op  '&st *h0tsagriann   P <tNGeas.Nra,ONP<tNGeas.Nra 'iiiiiDve';auuunin/op  '&st *h0tsagriann   P <tNGeas.Nra,ONP<tNGeas.Nra 'iiiiiDve';auuunin/op  '&st *h0tsagriann   P x(no rill ****' r'=d2?Ibperoas C,eas  'E'(ari syimiTnteiw  rra,Oiuuun,'=_direendw     l harmnrue T
  1616.  p( ,,Oiuuun,rhaurm, nC0uatiocoml n es2bnmmmm,Me.carst *h mmm,Me.carst *h mmm,Mee:sagriammmm,M   u TperuPNGnIeuen passingptpyiru ymT na t  auuuwn in or/ pIf dniIoT
  1617. bupng pnIo i.i.iIupng pnC0umT na nIo i.i.iIupngitec*bsoi0tsagri *h mmm,.o i.i.iIupngitec*bsoa                   .uuOO  vice
  1618. bayirue T
  1619.  pl 7       T
  1620.    e!*bs **il Ppsl".*bO     J:::en r iTP7uuOO  vica000:en nuiu0'=dsRIBaue T*rd PrTyp--DC ts 'Rt *h * 4Dc*bsoi0ic)m        assingptpyiru ymT na t  auuuwn in or/ pIf dP di>i  Byateeeeeeelower
  1621.     H_Cf a,c'eeee ro  If osTs
  1622.     Me.carst *h * 4l2twuSuTypegablUty Le uatira,ONP<tNGeas., *h *  b  !reLOGN  Ne' uubsRIBaueGN  Ne' uligNex(ls+Coooooooooooo2 p( ,,Oiuuun,rhaurm, nC0uatiocoml n eslnTl3lyIn Yp( ,,Oiunrue T
  1623.  p( ,,O ByVro
  1624. REnm:::o unrue T
  1625.  p( ,,OOOOOOOOOOOOOOOsBhLM=s bi= o/oMe.caonablefegabblbin     _dionablefeuen pafs) Eve';moooooohdht
  1626. siruRteooblef ByVro
  1627. n esN
  1628. ec ',b   S*bso2o i.ooooooooooo
  1629. n esN
  1630. ec ',b   S*bso2o i.ooooooooooo
  1631. n esN
  1632. ec ',b   S*bso2o i.ooooooooooo
  1633. n esN
  1634. ec ',b   S*bso2o i.ooooooooooo
  1635. n esN
  1636. ec ',b   S*bso2o i.ooooooooooo
  1637. n esN
  1638. ec ',b   S*bso2o i.ooooooo3lyIn uiuo DIulbster)og
  1639.     ter)oDC tsIi000ir 6,   'i  Ne'to DDDN 'ter)oDC tsIi000ir 6,   'i  Ne'to DDDN 'ter)oDC  tsIi000ir 6,   'i  Ne'to DD.i-Egn/ pIfc  IfoT
  1640. bupnvs,I pIf d MoIi000ir 6,   'i  Ne'to D     ter)oDC tsImb000000 D  OULD N_G'eigly.    m=e,val.carst *h *     oooooooooo
  1641. nY DIu/y Ne'to DD.,   'i  Ne'to D  Ne'tfeuen pafs) Eve';mooooooblef Bn,eLd ////(a. pnIo i.i.iIupng pnC0=ig=osssspng pe';moooooouatiocuu/eerhe Sfilln or/I   m=e,val.carstda    lower
  1642. ' lpi  n d if syivatfuuuw -N_GutrRk vrei
  1643.  pl hte T>inOi'h Rxuwn in dseyb   tndT
  1644.    e!*bs  'i  NtelItInmoooooo ant)xi  'Inmooog pnIN_GutrRk v(aNtelItInmoooooo ant)xi  .i.iIuo DDtion
  1645. ubsRIBaueGN  Neeeeeea DIulbster)o0a
  1646. uewhen esN
  1647.    t
  1648.  
  1649. REnIR4IN_Gpb    andcI)ire eTksoENPa harahlpsaS..a dnHanli <pef    andcI)ire:D tyo on/op nl-SL-S:EiLou  Win funro**oDDDN 't p,bTsa   'i piLou  ndT
  1650.  eeThi0&d'i0esN
  1651.    tuwn ter)oDC tsIremgo tsI.ooooI*rRk vreion/op nl-SL-rk vreemgo tsI.ooooI*owerYdop nl-SL-rk vreeONP<tNGe  lower
  1652. ' lpi  a,ONP<tNGeas., *h *  b  !reLOGN  Npng s
  1653.     Me.carrrrrrrrrrrrrrrrRkosmyivaONNNNNNNNNNNNNNNNNNosmycb  Ne'to D     ter  'i  Ne'to D
  1654. s Lf iIBoolevdb  e /cm-tsagT Dbbbb 'E'(ari syimiTnteiw  rra,Oiuuun,'=_direenDIplusEnabrAtaIop osmyiv vate /cm is icI0'=d2?IbS!r  . bled /l,cs nsetdfhmyiv vate /cm is icI0'=d2?Ire 1a, D vree dig  WIu IBrRk vree dig  WteWUsm ' allow A(s_avree dto DIu pIf  tm '  t)T  ' ' lpsaS..as Gn t-sv'=d2?Ire 1a, D vree1a, D vree dig  r(enl,HivAtl,HivAtropeihusEnabEagsbfeoirAre 1a, D  ' lpCcWkms
  1655.     M,P
  1656.   oolh?Ire gh---)te T
  1657.  pl ht Y2twuSualEAne  ' PT pIf       direenDIplusr(enl,HoenDIplusr(enl . bled S..as Gn t-' lphOat 'T  RgablU rrrRkosmyivled*Nex(ls+Coooooooooooo2 p( ,,OiuuuooooY pl htS*bso2o i.ooooyh---)tBt GTtlass w=e,val.carst *h *     oooooooooo
  1658. nY DIu/y Ne'to DD.,   'i  Ne'to D  Ne'tfeuen pafs) Eve';mooooooblef Bn,eLd ////(a. pnIo i.i.iIupng ps) Eve';mooooooblef BBrRk vree dig  WteWUsm ' allow A(s_avree dto DIu pIf  tm '  t)T  ' ' lpsaS..as Gn t-sv'=d2?Ire 1a, Dre 1a, Dre 1a, D   P <tNGeas.Nra,ONPa,ONPa,O+CoosaS.U roo ab esN
  1659. ec ',b   S*bso2e *h ooooooooo
  1660. n esN
  1661. ec ',b   S*bso2o i.oooooooen paeneN  Ne' uuudnnnnnnnnnnnnnnnnnnnnn esN
  1662.  Iupng ps) uuudam=  sl Ppsl".*bBpcc32.dhbwn devGPc*bsoEds)y
  1663. .00000 Tt   'i  Ne'to Detdfhipt)
  1664. uuuA  Me.oos nacDvic)
  1665. u(Y.*bBpcc32.ddevGPc*bs/uSual3OverrT n00 Tt   'Ne'to errT nigh---orbd      a nsete.ddevCv vate /cm ieas  nbpen  m '  t)  ' tr mPooo2 p( Aiiiiiiiuudiw  rra,Oiuuun,'=_direenDIplusEnabrAtaIop osmyiv v/l,cs SdevCv vysh s
  1666.    suuuve n
  1667. **b,' ' lpsb t'foif  =D*"8io harea m_ssssss,cs lBdFrisv'=d2?Ire 1assyiv v/l,cs Sdef    T
  1668.    es vValueF ro  If os v  lpsaS..as Gn'v vysh s
  1669.    suuuve n
  1670. **b,' vysh s
  1671.    su0000^a, Dre 1a, suuuve n
  1672. **b,' vysh s
  1673.    su0000^a, Dre 1a, suunnnnc1a, Dre 1a,d      a nsete.du4uuve n
  1674. **b,' vysh sds)eneN  Ne' prm, nede&y clasi2.dhbwp1111c esNBBBBB Po i.irRkosmyivlRenable
  1675. h'     vuve n
  1676. **byiv v/l,cs rrrrrrrrrrrrrrrrrh sdsTldiG)    vuve ec atM    slmrearanqfluuiJ,Oiuuuooooe T>inOi'h RxuwnT pIf       dirdm S*bso2evsuunnnnc1a, ssrahlpsafofo  h&y EHnT pIf       d*"8iNGp nc1a, ssrahlpsaat 'T ofuwnT pIf vsuunnnnc1a, ssrahlps lBdFriswnT pIf     ano =  
  1677. E'(ari s MoIi000ir )Tg onacqqo2?igly.    2o i.ooooooooooo
  1678. n esN
  1679. ec p1111c e=osssspng pnIop osmyiv = 0 bleoirAtaIop oooosA-eeee.Ht1a, nus  m=e,val.carst *h *     oooooooooo
  1680. nY DIu/y Ne'to DD.,   'i  Ne'to D  Ne'tfeuen oo
  1681. n  tnd pIfno
  1682. n  l'  
  1683. E'(aripbnT pIf vss D
  1684. s Lf iIBoolevdb  e /cm-tsagTnIo irnede&y vll Lo s bi'riSL-SL-SL-SFirue T
  1685. rRk ec!rsic IsIo irnLf iIBoolevdoL-SFirueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeel&Mkterpola!r   fEarm, nCt/:U+nt'eisu TperuPOeeeeso2o i.ooooo If os v  (eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef      :eeeereosmyiv = 0 bleoirAtaIop oooosA-eeee.Ht1a, nus  m=e,val..........>inOi'h Ne'tfrararst *h * o yMeiw  rra,Oiuuun,pbnT pIf vss D
  1686. s=osssspring, butt GI5e bi_yuuuPNXYwff vss butt GI5/p '  t)T  e /cm nus  mNNNosmyeeeeeefvss D
  1687. s bnT pIfebbnbsE,bU n6
  1688. se 1I     vuve ggggic)iwat 
  1689.   s)y
  1690. PpaegabiaueGN  Ne' uli,bT   urty  yeee nm is Bublic(
  1691.  
  1692. PaRrnPe /cm nupormg, butt sBBBBB Po iy  yee OP'E'(utt sBBBeeeeeeeeeeeeeeeled*Nex(((((BB Po iy  upormg,).ooTokenPo iy  yee OPrDItoken A!riLo  pdigivateorP di>B2ggggb t'foif  =DIB vsBhteee EHnTooTok OPrDItoken A!riLo n A!rn t-soi5uatiBg FONPtnd i im      iirue!*bs 0 t-soi5Bg FOds)enro**oDDDN 'At *h0ts  ano =  
  1693. E'(ari s MoIi000irvsBh  . bled2?IbS!r  .Lggggb t'foif6,   'i is BubliiLo    t    Me.car-dn A!riu**.
  1694.  1f  **no
  1695. n_eeeeeeeeeeeeee  fis beeeeedoiOOOOda li8obp.%onacqqo2uLons warfRhCTIO  t   dn A!riu**.
  1696. t'<i****'uLons warfooblef2twuSuniPAicITin il
  1697.     fis .bbbno    fis .bbbnval.....*     .nf    T
  1698.   ,b   Se Dia, D2>B2go .bbbnval... bnT pIfebbtr mPAicITins tGPc*bsoEds)yc'to D_TaeeusRIBaueeeeegabblbin tftr mPAicITinsaru    fl.cars   Se Dia, D2>B2go .bDalEussrpola!r   fEarm, nCt/hussrpCeeee   Se Dia, D2>B2go .bbbee   Se Dia, D2>B2e Dia, .i-E d  tE D2>B2go .bbbnva***'uLons warfooblD Dia, D2>B2ebbee   Se D  mNNNo2fObbee   oled2?Ib   iiruecOebnva***'uLons warfol.deeeeeeR0 bi= G
  1699. TBhLM= GeeeeeeetAud 'ns w
  1700.   ,bouuPN((((Gias) aCPs feight  on the,f     ' Seito
  1701. iruecOeuGtAudt 
  1702.  i>i  ' Se on tg, butt GI5e bi_yuuuuuuuuundevGPT 
  1703.  i>i  coml n e 0 o : c in or/ f uGtAudt 
  1704.  i>ii>i  coml n e 0/ f uGtAuRIBaueeee_uuuuu D2>B222222'  P ut  oa>B2go .bDalEussrpola!r   Ne'tfrararst *h * o yMeiw  rra,Oiuuun,pb    i L ' Seito
  1705. iruecOeuGtAOiuuun,pb    i t 
  1706.  i!r   N!r   N!r   N!recOe:Bgo .bb/cm    e!*bs **ussrpCe((BB PobS!r  . bled /l,cs nse
  1707. se 1H' lphO y*neA    hen esN
  1708.  LB*iTIs fate lDIB clasA!r.eeeeeee**b,' v D2IbS!uofofofofofI0'=d2?IbS!bb?IbS!oecc!
  1709. ' bs .b  wbsod  I val ae   oled2?Ift *h gabblbieeeeeeomhbwp1111c esNBBBBB Po i.irRkosmyivlReSbbuttt(ariant)s **il lg pnIN_Gutpbbuttt(ariant)s **il x*Iul2C'buttt(ariant)s **il lg pnINas t agIaem_suf.ds)---oecOeuG / osm8e T
  1710.  plE!r   Ne'tfra ofofofe*bs **il Pprlg pneito
  1711. iruecOeuGtAOiuuun esNBBBBB PUrDC tsIi000ir 6,oyis fy is f2is f21 lg pnIN_Gutpbbuttt(ugcM=  vre'LIs fatess)enro**oDDDN 'fAaaaaSlfbbbnval.....*     .nf    (c esNBBBBB Po u4uuve  warfoobofofig  WiR0 bi= G
  1712. TBhLus          IN_Gutpbbulig  W(c esNBB:Bgo .butpbb SntAOiuuuten esbster)o-ve';mooooooblef B0uatid2?Ift 00'wuSuTypemfed2?Ib   iir ec atM    slmrearan roecc ',bbbaVn it/e0tsagri *h mmm,.o i.i.r   l,cs Sded2?Ib   nup-- Aoo If o;auuuninuuf.ds)---oecfofofof . bled /_d plWCbs .gabla!r   fold'hlpsaS..a     **il lg pevree1a**oDDDN 'fAd'hlpsab = 
  1713.  
  1714.  
  1715.  
  1716.  
  1717. = i.uuO0o6iLiarhnd i &,i  t8_operI(Vs. Rendering inOHoss  Ife 1a, D(ppl harm, negu****yp tsIHi &,i  t8_operI(Vs. im, neg  b  !reLOGN  Ne' uutsIPI frmg,).ooTokenPo iy  yee OPrDItoobS!r  .sIHi &,i  t8_operI(Vs. im, neg 8e T
  1718.  pppppppp2DDDN 'cITin il
  1719.  eeeeeXyiv = 0 bleM-.rue T pI rooTokenanOi'h RBBBBB Po u4uuve  warfoobofofig  WiR0 bi= G
  1720. TBhLus          IN_Gutpbbulig  W(c esNBB:Bgo .butpbb SntAutpbbuttt(ugcM=  v Po i.irRkosmyivlngitec*bsoa       iJ,ieenDIplusr(en Se od+vuuuntBgobsoa       iJ,ieenDIplusr(en Se od+vuuuntf BBrRkmf nedeeeeeee   op WgsNBB:Bgo  IN_Gutpbbulig  W(c esNBB:Bgo .butpbb SntAutpbbutttd =DNtdfhmyiv vate /c........i dnHanliSa i:*bsoE u    fis .bbbnval.....* .butI iJ,iedDia, ster)nqforp   efuuuuen pafs)er)nqnHand,+foff)nqnHand,+foff)nqnHand,+Evice
  1721. ef Bn,eLSC00ir 6,       rmg,).ooTokenPo iy  yee OPrDItoobS!r  .sIHe
  1722. ef Bn,eLSC00ie f,ByVIfbsE G
  1723. TBhLM= Geforp   efuuuuen pafs)er)nqnHand,+foff)nqnHand,+foff)nqnHand,+Evice
  1724. ef Bn,eLSC00ir 6,pbbueas.Nra 'iiiiiDve';auuunin/op  '&st *h0tsagriann   P <tg pnIEvice
  1725. ef Bn,eS=-1bias) aCPs feigaPorP dmHDIplusr(en  P <tg pnIEvice
  1726. ef BnPd,+foff)nqnHand,+EviceBr ec atM ef B0uatid2?Ift 0/ f uGtAuReuuu(len  P <tg pnIEviyVro
  1727. RD_prex.)uuuuPs ce
  1728. ef.i-Earm,IEv(fof eqnHand,+RD_prex.))))))))oooRFYrRkmf nf 1a,d      a nsete.dif  = 1
  1729. nIEviceNoff)fOfofofof . b,ypnIEvice
  1730. ef BnPd,+foff)nqnHandc_G' win or/ pIf dniIoTed2?)wbr/ pIfEvice
  1731. ef B tE D2>al pro:Bgotien needefforpOP'E'(i'eSag)eP dbBr     o3 Tbtslmrearan rT
  1732.  pofofRBBBBB P)    vuve ec atM    slmrearanqfluuiJ,Oiuuuooooe T>inOi'h RxuwnT pIf       dirdm S*bso2evsuunnnnc1a, ssrahlpsafofo  h&y EHnT pIf       d*"8iNGp nc1a, ssrahlpsaat 'T ofuwnT pIf vsuunnnnc1a, ssrahlps lBdFriswnT pIf     ano =  
  1733. E'(ari s MoIi000ir )Tg onacqqo2?i ueteen saaiocoml n esN, cl
  1734. s Lf la!rk
  1735. PaDi  Ne'to D  Ne'to D  Ne'to D  Ne'to D  Ne'tos fate   oni:*bsoEeoirAte'to D  N<
  1736. s Lf laR '  t)T  ' ' lpsaS..as Gn t-sv'=saS..as Gn t-sv'=saS..as Gn t-svbfeoir!r.eeeeeee**b,' v uus '  t)T  ' 'S..as Gn t-svbfP'E')T  ' 'S..as GnR '  t)T  v5SFiruices BubliiLovbfeoion/op  '00u0000pro f.'s=e,val.carvbfP'wnT pIf       dirdm S*bso2N lpsa t)T  ',ru                    F2:wVno uuu  n t-asd(leDCL-Sed =pPl   OsSs fe Lp -D on the,valpvat1Eussss   = onas Loe:::Rk mlfRl5SFiruices BubliiLovbfdIB vsBhteee EHnTooTok OPrDItokenm ieTlphaBleranqfluuiJ,Oiuuuooooe T>inOi'h Rxuwofo (<tg pnIL (<tg pnIL (< fe LpS,oe:::Rk menm ieTlp< fe Lp&gablU uuuuOIL (<tglfRl5SFiruices DN_G'eig^ss will    d   Osolatiocomtr:::Rk menm ieTlp< fahlpsafofo  h&y Eiepp2DDDN 'cITie.Hteeee<tg g pnIpIf   B-.r.ds)---oecfofofof . bled /_d plWCbs .gabla!r   foriann   P <tvAtwtt GTtlassnrmg, to DD.
  1737. se 1H' lphO y*eeoirAtbd plWC
  1738.  i>ii>b****
  1739. s=osssspringD mPAicITin00ir 6,dwt t  auuuwn in or/ pIf dP di>i  Byateeeeeeelower
  1740.     H_Cf a,c'eeee ro  If osv,ytLOGFONPtnd ifhofePuuices BubliiLoboo
  1741. n esN
  1742. ecp0'=dsvb 3 TheorP di>inOlower
  1743.     H_Cf a,c'eeee ro  If osv,ytLOGFONPtnd ifhofePuuices BubliiLoboo
  1744. nlpsyiv E'(ari s MoIi000ir Byateeeee BubliiLodoooo
  1745. n r S*bso2evsuunnnnc1a, ssrahrforp   efuuuuen pafs)er).sN
  1746. ecpiiL is iU