From a121148f71c34bf45e8a5ebae1a2d561e12affb4 Mon Sep 17 00:00:00 2001 From: Lynne Date: Sun, 21 Apr 2019 02:29:16 +1000 Subject: [PATCH] initial commit --- About.Designer.vb | 1500 ++ About.resx | 176 + About.vb | 74 + App.config | 205 + ApplicationEvents.vb | 10 + Changelog.txt | 215 + Changelog.vb | 77 + ChangelogViewer.Designer.vb | 64 + ChangelogViewer.resx | 120 + ChangelogViewer.vb | 14 + Customise Colours.Designer.vb | 310 + Customise Colours.resx | 134 + Customise Colours.vb | 10 + Extensions.vb | 196 + Find.Designer.vb | 159 + Find.resx | 120 + Find.vb | 100 + FindCommon.vb | 25 + FindReplace.Designer.vb | 196 + FindReplace.resx | 120 + FindReplace.vb | 103 + Form1.Designer.vb | 517 + Form1.resx | 138 + Form1.vb | 212 + LoadTimeWarning.Designer.vb | 119 + LoadTimeWarning.resx | 130 + LoadTimeWarning.vb | 23 + My Project/Application.Designer.vb | 38 + My Project/Application.myapp | 10 + My Project/AssemblyInfo.vb | 37 + My Project/Resources.Designer.vb | 123 + My Project/Resources.resx | 139 + My Project/Settings.Designer.vb | 786 + My Project/Settings.settings | 192 + My Project/app.manifest | 76 + Notepad Ultra.Designer.vb | 978 + Notepad Ultra.resx | 1266 ++ Notepad Ultra.vb | 1168 ++ Notepad Ultra.vbproj | 359 + Notepad Ultra.vbproj.user | 13 + Notepad Ultra_TemporaryKey.pfx | Bin 0 -> 1609 bytes Open Passed File.Designer.vb | 280 + Open Passed File.resx | 126 + Open Passed File.vb | 106 + Passed File Action Settings.Designer.vb | 91 + Passed File Action Settings.resx | 120 + Passed File Action Settings.vb | 14 + Preset Directory Manager.Designer.vb | 114 + Preset Directory Manager.resx | 123 + Preset Directory Manager.vb | 43 + Resources/FileIcon.ico | Bin 0 -> 45451 bytes Settings.Designer.vb | 462 + Settings.resx | 129 + Settings.vb | 88 + Settings1.vb | 11 + Splash Screen.Designer.vb | 121 + Splash Screen.resx | 139 + Splash Screen.vb | 64 + Status Bar Options.Designer.vb | 100 + Status Bar Options.resx | 120 + Status Bar Options.vb | 29 + Supported File Extensions.Designer.vb | 116 + Supported File Extensions.resx | 120 + Supported File Extensions.vb | 58 + Theme Editor.Designer.vb | 543 + Theme Editor.resx | 143 + Theme Editor.vb | 265 + bin/Debug/Build Installer.lnk | Bin 0 -> 2088 bytes bin/Debug/Changelog.txt | 215 + .../INSTALL DIR/RichTextBoxPrintCtrl.dll | Bin 0 -> 10752 bytes .../dependencies/RichTextBoxPrintCtrl.dll | Bin 0 -> 10752 bytes .../dependencies/file/bin/file.exe | Bin 0 -> 45056 bytes .../dependencies/file/bin/magic1.dll | Bin 0 -> 150016 bytes .../dependencies/file/bin/pong.txt | 11 + .../dependencies/file/bin/regex2.dll | Bin 0 -> 79360 bytes .../dependencies/file/bin/zlib1.dll | Bin 0 -> 72192 bytes .../dependencies/file/share/misc/magic | 15043 ++++++++++++++++ .../dependencies/file/share/misc/magic.mgc | Bin 0 -> 1751200 bytes .../dependencies/icon/npu alpha logo.ico | Bin 0 -> 53561 bytes .../dependencies/icon/npu beta logo.ico | Bin 0 -> 51478 bytes .../dependencies/img/imageres_5348-02.png | Bin 0 -> 3114 bytes .../dependencies/img/shell32_134-02.png | Bin 0 -> 4613 bytes .../dependencies/img/shell32_148-02.png | Bin 0 -> 3643 bytes bin/Debug/Notepad Ultra.application | 21 + bin/Debug/Notepad Ultra.exe | Bin 0 -> 381440 bytes .../Notepad Ultra.exe.CodeAnalysisLog.xml | 28 + bin/Debug/Notepad Ultra.exe.config | 213 + bin/Debug/Notepad Ultra.exe.manifest | 170 + bin/Debug/Notepad Ultra.pdb | Bin 0 -> 253440 bytes bin/Debug/Notepad Ultra.vshost.application | 21 + bin/Debug/Notepad Ultra.vshost.exe | Bin 0 -> 22688 bytes bin/Debug/Notepad Ultra.vshost.exe.config | 213 + bin/Debug/Notepad Ultra.vshost.exe.manifest | 170 + bin/Debug/Notepad Ultra.xml | 56 + bin/Debug/PostSharp.dll | Bin 0 -> 227408 bytes bin/Debug/PostSharp.xml | 11741 ++++++++++++ bin/Debug/RichTextBoxPrintCtrl.dll | Bin 0 -> 10752 bytes bin/Debug/Text files - Shortcut.lnk | Bin 0 -> 1171 bytes bin/Debug/app.publish/Notepad Ultra.exe | Bin 0 -> 382352 bytes .../dependencies/RichTextBoxPrintCtrl.dll | Bin 0 -> 10752 bytes .../bin/Debug/dependencies/file/bin/file.exe | Bin 0 -> 45056 bytes .../Debug/dependencies/file/bin/magic1.dll | Bin 0 -> 150016 bytes .../Debug/dependencies/file/bin/regex2.dll | Bin 0 -> 79360 bytes .../bin/Debug/dependencies/file/bin/zlib1.dll | Bin 0 -> 72192 bytes .../dependencies/RichTextBoxPrintCtrl.dll | Bin 0 -> 10752 bytes bin/Debug/dependencies/dimg/imageres_112.ico | Bin 0 -> 54506 bytes bin/Debug/dependencies/dimg/imageres_179.ico | Bin 0 -> 104822 bytes bin/Debug/dependencies/dimg/imageres_18.ico | Bin 0 -> 63913 bytes bin/Debug/dependencies/dimg/imageres_5304.ico | Bin 0 -> 50269 bytes bin/Debug/dependencies/dimg/imageres_84.ico | Bin 0 -> 168619 bytes bin/Debug/dependencies/dimg/shell32_16710.ico | Bin 0 -> 49198 bytes bin/Debug/dependencies/file/bin/file.exe | Bin 0 -> 45056 bytes bin/Debug/dependencies/file/bin/magic1.dll | Bin 0 -> 150016 bytes bin/Debug/dependencies/file/bin/regex2.dll | Bin 0 -> 79360 bytes bin/Debug/dependencies/file/bin/zlib1.dll | Bin 0 -> 72192 bytes bin/Debug/dependencies/file/share/misc/magic | 15043 ++++++++++++++++ .../dependencies/file/share/misc/magic.mgc | Bin 0 -> 1751200 bytes .../fileicon/res/pdn/npufile64.pdn | Bin 0 -> 5360 bytes .../fileicon/res/png/npufile16.png | Bin 0 -> 269 bytes .../fileicon/res/png/npufile20.png | Bin 0 -> 297 bytes .../fileicon/res/png/npufile24.png | Bin 0 -> 336 bytes .../fileicon/res/png/npufile32.png | Bin 0 -> 458 bytes .../fileicon/res/png/npufile64.png | Bin 0 -> 1025 bytes .../fileicon/res/png/npufile64stripeless.png | Bin 0 -> 992 bytes .../dependencies/icon/npu alpha logo.ico | Bin 0 -> 53561 bytes bin/Debug/dependencies/icon/npu beta logo.ico | Bin 0 -> 51478 bytes .../res/pdn/alpha/npu alpha logo 128x.pdn | Bin 0 -> 6291 bytes .../icon/res/pdn/alpha/npu alpha logo 16x.pdn | Bin 0 -> 3731 bytes .../icon/res/pdn/alpha/npu alpha logo 20x.pdn | Bin 0 -> 3500 bytes .../icon/res/pdn/alpha/npu alpha logo 24x.pdn | Bin 0 -> 3666 bytes .../res/pdn/alpha/npu alpha logo 256x.pdn | Bin 0 -> 12318 bytes .../icon/res/pdn/alpha/npu alpha logo 32x.pdn | Bin 0 -> 4056 bytes .../icon/res/pdn/alpha/npu alpha logo 64x.pdn | Bin 0 -> 4676 bytes .../icon/res/pdn/beta/npu beta logo 128x.pdn | Bin 0 -> 5962 bytes .../icon/res/pdn/beta/npu beta logo 16x.pdn | Bin 0 -> 3534 bytes .../icon/res/pdn/beta/npu beta logo 20x.pdn | Bin 0 -> 3561 bytes .../icon/res/pdn/beta/npu beta logo 24x.pdn | Bin 0 -> 3654 bytes .../icon/res/pdn/beta/npu beta logo 32x.pdn | Bin 0 -> 3822 bytes .../icon/res/pdn/beta/npu beta logo 64x.pdn | Bin 0 -> 4397 bytes .../res/png/alpha/npu alpha logo 128x.png | Bin 0 -> 276 bytes .../icon/res/png/alpha/npu alpha logo 16x.png | Bin 0 -> 132 bytes .../icon/res/png/alpha/npu alpha logo 20x.png | Bin 0 -> 133 bytes .../icon/res/png/alpha/npu alpha logo 24x.png | Bin 0 -> 179 bytes .../res/png/alpha/npu alpha logo 256x.png | Bin 0 -> 416 bytes .../icon/res/png/alpha/npu alpha logo 32x.png | Bin 0 -> 225 bytes .../icon/res/png/alpha/npu alpha logo 64x.png | Bin 0 -> 236 bytes .../png/alpha/upscaled/npu alpha logo 16x.png | Bin 0 -> 155 bytes .../png/alpha/upscaled/npu alpha logo 24x.png | Bin 0 -> 242 bytes .../icon/res/png/beta/npu beta logo 128x.png | Bin 0 -> 295 bytes .../icon/res/png/beta/npu beta logo 16x.png | Bin 0 -> 146 bytes .../icon/res/png/beta/npu beta logo 20x.png | Bin 0 -> 153 bytes .../icon/res/png/beta/npu beta logo 24x.png | Bin 0 -> 182 bytes .../icon/res/png/beta/npu beta logo 256x.png | Bin 0 -> 425 bytes .../icon/res/png/beta/npu beta logo 32x.png | Bin 0 -> 195 bytes .../icon/res/png/beta/npu beta logo 64x.png | Bin 0 -> 255 bytes .../png/beta/upscaled/npu beta logo 16x.png | Bin 0 -> 203 bytes .../png/beta/upscaled/npu beta logo 20x.png | Bin 0 -> 167 bytes .../png/beta/upscaled/npu beta logo 24x.png | Bin 0 -> 1565 bytes .../icon/res/png/npu alpha logo 128x.png | Bin 0 -> 276 bytes .../dependencies/img/imageres_5348-02.png | Bin 0 -> 3114 bytes bin/Debug/dependencies/img/shell32_134-02.png | Bin 0 -> 4613 bytes bin/Debug/dependencies/img/shell32_148-02.png | Bin 0 -> 3643 bytes bin/Debug/file/bin/file.exe | Bin 0 -> 45056 bytes bin/Debug/file/bin/magic1.dll | Bin 0 -> 150016 bytes bin/Debug/file/bin/pong.txt | 11 + bin/Debug/file/bin/regex2.dll | Bin 0 -> 79360 bytes bin/Debug/file/bin/zlib1.dll | Bin 0 -> 72192 bytes bin/Debug/file/share/misc/magic | 15043 ++++++++++++++++ bin/Debug/file/share/misc/magic.mgc | Bin 0 -> 1751200 bytes bin/Debug/m.vshost.exe.config | 187 + bin/Debug/unix2dos.exe | Bin 0 -> 61952 bytes npu alpha logo.ico | Bin 0 -> 53561 bytes npu beta logo.ico | Bin 0 -> 51478 bytes obj/Debug/Before-PostSharp/Notepad Ultra.exe | Bin 0 -> 326144 bytes obj/Debug/Before-PostSharp/Notepad Ultra.pdb | Bin 0 -> 206336 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 22412 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 11032 bytes obj/Debug/Notepad Ultra.application | 21 + obj/Debug/Notepad Ultra.exe | Bin 0 -> 381440 bytes obj/Debug/Notepad Ultra.exe.manifest | 170 + obj/Debug/Notepad Ultra.pdb | Bin 0 -> 253440 bytes .../Notepad Ultra.vbproj.FileListAbsolute.txt | 61 + ...otepad Ultra.vbproj.GenerateResource.Cache | Bin 0 -> 2356 bytes ...Ultra.vbprojResolveAssemblyReference.cache | Bin 0 -> 14406 bytes obj/Debug/Notepad Ultra.xml | 56 + obj/Debug/Notepad_Ultra.About.resources | Bin 0 -> 3060 bytes .../Notepad_Ultra.ChangelogViewer.resources | Bin 0 -> 180 bytes .../Notepad_Ultra.Customise_Colours.resources | Bin 0 -> 998 bytes obj/Debug/Notepad_Ultra.Find.resources | Bin 0 -> 180 bytes obj/Debug/Notepad_Ultra.FindReplace.resources | Bin 0 -> 180 bytes obj/Debug/Notepad_Ultra.Form1.resources | Bin 0 -> 180 bytes .../Notepad_Ultra.LoadTimeWarning.resources | Bin 0 -> 618 bytes obj/Debug/Notepad_Ultra.NPUWindow.resources | Bin 0 -> 65512 bytes .../Notepad_Ultra.Open_Passed_File.resources | Bin 0 -> 180 bytes ...ltra.Passed_File_Action_Settings.resources | Bin 0 -> 180 bytes ...d_Ultra.Preset_Directory_Manager.resources | Bin 0 -> 180 bytes obj/Debug/Notepad_Ultra.Resources.resources | Bin 0 -> 15232 bytes obj/Debug/Notepad_Ultra.Settings.resources | Bin 0 -> 180 bytes .../Notepad_Ultra.Splash_Screen.resources | Bin 0 -> 964 bytes ...Notepad_Ultra.Status_Bar_Options.resources | Bin 0 -> 180 bytes ..._Ultra.Supported_File_Extensions.resources | Bin 0 -> 180 bytes .../My Project.Resources.Designer.vb.dll | Bin 0 -> 20992 bytes packages.config | 4 + 203 files changed, 72275 insertions(+) create mode 100644 About.Designer.vb create mode 100644 About.resx create mode 100644 About.vb create mode 100644 App.config create mode 100644 ApplicationEvents.vb create mode 100644 Changelog.txt create mode 100644 Changelog.vb create mode 100644 ChangelogViewer.Designer.vb create mode 100644 ChangelogViewer.resx create mode 100644 ChangelogViewer.vb create mode 100644 Customise Colours.Designer.vb create mode 100644 Customise Colours.resx create mode 100644 Customise Colours.vb create mode 100644 Extensions.vb create mode 100644 Find.Designer.vb create mode 100644 Find.resx create mode 100644 Find.vb create mode 100644 FindCommon.vb create mode 100644 FindReplace.Designer.vb create mode 100644 FindReplace.resx create mode 100644 FindReplace.vb create mode 100644 Form1.Designer.vb create mode 100644 Form1.resx create mode 100644 Form1.vb create mode 100644 LoadTimeWarning.Designer.vb create mode 100644 LoadTimeWarning.resx create mode 100644 LoadTimeWarning.vb create mode 100644 My Project/Application.Designer.vb create mode 100644 My Project/Application.myapp create mode 100644 My Project/AssemblyInfo.vb create mode 100644 My Project/Resources.Designer.vb create mode 100644 My Project/Resources.resx create mode 100644 My Project/Settings.Designer.vb create mode 100644 My Project/Settings.settings create mode 100644 My Project/app.manifest create mode 100644 Notepad Ultra.Designer.vb create mode 100644 Notepad Ultra.resx create mode 100644 Notepad Ultra.vb create mode 100644 Notepad Ultra.vbproj create mode 100644 Notepad Ultra.vbproj.user create mode 100644 Notepad Ultra_TemporaryKey.pfx create mode 100644 Open Passed File.Designer.vb create mode 100644 Open Passed File.resx create mode 100644 Open Passed File.vb create mode 100644 Passed File Action Settings.Designer.vb create mode 100644 Passed File Action Settings.resx create mode 100644 Passed File Action Settings.vb create mode 100644 Preset Directory Manager.Designer.vb create mode 100644 Preset Directory Manager.resx create mode 100644 Preset Directory Manager.vb create mode 100644 Resources/FileIcon.ico create mode 100644 Settings.Designer.vb create mode 100644 Settings.resx create mode 100644 Settings.vb create mode 100644 Settings1.vb create mode 100644 Splash Screen.Designer.vb create mode 100644 Splash Screen.resx create mode 100644 Splash Screen.vb create mode 100644 Status Bar Options.Designer.vb create mode 100644 Status Bar Options.resx create mode 100644 Status Bar Options.vb create mode 100644 Supported File Extensions.Designer.vb create mode 100644 Supported File Extensions.resx create mode 100644 Supported File Extensions.vb create mode 100644 Theme Editor.Designer.vb create mode 100644 Theme Editor.resx create mode 100644 Theme Editor.vb create mode 100644 bin/Debug/Build Installer.lnk create mode 100644 bin/Debug/Changelog.txt create mode 100644 bin/Debug/INSTALL DIR/RichTextBoxPrintCtrl.dll create mode 100644 bin/Debug/INSTALL DIR/dependencies/RichTextBoxPrintCtrl.dll create mode 100644 bin/Debug/INSTALL DIR/dependencies/file/bin/file.exe create mode 100644 bin/Debug/INSTALL DIR/dependencies/file/bin/magic1.dll create mode 100644 bin/Debug/INSTALL DIR/dependencies/file/bin/pong.txt create mode 100644 bin/Debug/INSTALL DIR/dependencies/file/bin/regex2.dll create mode 100644 bin/Debug/INSTALL DIR/dependencies/file/bin/zlib1.dll create mode 100644 bin/Debug/INSTALL DIR/dependencies/file/share/misc/magic create mode 100644 bin/Debug/INSTALL DIR/dependencies/file/share/misc/magic.mgc create mode 100644 bin/Debug/INSTALL DIR/dependencies/icon/npu alpha logo.ico create mode 100644 bin/Debug/INSTALL DIR/dependencies/icon/npu beta logo.ico create mode 100644 bin/Debug/INSTALL DIR/dependencies/img/imageres_5348-02.png create mode 100644 bin/Debug/INSTALL DIR/dependencies/img/shell32_134-02.png create mode 100644 bin/Debug/INSTALL DIR/dependencies/img/shell32_148-02.png create mode 100644 bin/Debug/Notepad Ultra.application create mode 100644 bin/Debug/Notepad Ultra.exe create mode 100644 bin/Debug/Notepad Ultra.exe.CodeAnalysisLog.xml create mode 100644 bin/Debug/Notepad Ultra.exe.config create mode 100644 bin/Debug/Notepad Ultra.exe.manifest create mode 100644 bin/Debug/Notepad Ultra.pdb create mode 100644 bin/Debug/Notepad Ultra.vshost.application create mode 100644 bin/Debug/Notepad Ultra.vshost.exe create mode 100644 bin/Debug/Notepad Ultra.vshost.exe.config create mode 100644 bin/Debug/Notepad Ultra.vshost.exe.manifest create mode 100644 bin/Debug/Notepad Ultra.xml create mode 100644 bin/Debug/PostSharp.dll create mode 100644 bin/Debug/PostSharp.xml create mode 100644 bin/Debug/RichTextBoxPrintCtrl.dll create mode 100644 bin/Debug/Text files - Shortcut.lnk create mode 100644 bin/Debug/app.publish/Notepad Ultra.exe create mode 100644 bin/Debug/bin/Debug/dependencies/RichTextBoxPrintCtrl.dll create mode 100644 bin/Debug/bin/Debug/dependencies/file/bin/file.exe create mode 100644 bin/Debug/bin/Debug/dependencies/file/bin/magic1.dll create mode 100644 bin/Debug/bin/Debug/dependencies/file/bin/regex2.dll create mode 100644 bin/Debug/bin/Debug/dependencies/file/bin/zlib1.dll create mode 100644 bin/Debug/dependencies/RichTextBoxPrintCtrl.dll create mode 100644 bin/Debug/dependencies/dimg/imageres_112.ico create mode 100644 bin/Debug/dependencies/dimg/imageres_179.ico create mode 100644 bin/Debug/dependencies/dimg/imageres_18.ico create mode 100644 bin/Debug/dependencies/dimg/imageres_5304.ico create mode 100644 bin/Debug/dependencies/dimg/imageres_84.ico create mode 100644 bin/Debug/dependencies/dimg/shell32_16710.ico create mode 100644 bin/Debug/dependencies/file/bin/file.exe create mode 100644 bin/Debug/dependencies/file/bin/magic1.dll create mode 100644 bin/Debug/dependencies/file/bin/regex2.dll create mode 100644 bin/Debug/dependencies/file/bin/zlib1.dll create mode 100644 bin/Debug/dependencies/file/share/misc/magic create mode 100644 bin/Debug/dependencies/file/share/misc/magic.mgc create mode 100644 bin/Debug/dependencies/fileicon/res/pdn/npufile64.pdn create mode 100644 bin/Debug/dependencies/fileicon/res/png/npufile16.png create mode 100644 bin/Debug/dependencies/fileicon/res/png/npufile20.png create mode 100644 bin/Debug/dependencies/fileicon/res/png/npufile24.png create mode 100644 bin/Debug/dependencies/fileicon/res/png/npufile32.png create mode 100644 bin/Debug/dependencies/fileicon/res/png/npufile64.png create mode 100644 bin/Debug/dependencies/fileicon/res/png/npufile64stripeless.png create mode 100644 bin/Debug/dependencies/icon/npu alpha logo.ico create mode 100644 bin/Debug/dependencies/icon/npu beta logo.ico create mode 100644 bin/Debug/dependencies/icon/res/pdn/alpha/npu alpha logo 128x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/alpha/npu alpha logo 16x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/alpha/npu alpha logo 20x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/alpha/npu alpha logo 24x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/alpha/npu alpha logo 256x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/alpha/npu alpha logo 32x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/alpha/npu alpha logo 64x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/beta/npu beta logo 128x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/beta/npu beta logo 16x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/beta/npu beta logo 20x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/beta/npu beta logo 24x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/beta/npu beta logo 32x.pdn create mode 100644 bin/Debug/dependencies/icon/res/pdn/beta/npu beta logo 64x.pdn create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/npu alpha logo 128x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/npu alpha logo 16x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/npu alpha logo 20x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/npu alpha logo 24x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/npu alpha logo 256x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/npu alpha logo 32x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/npu alpha logo 64x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/upscaled/npu alpha logo 16x.png create mode 100644 bin/Debug/dependencies/icon/res/png/alpha/upscaled/npu alpha logo 24x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/npu beta logo 128x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/npu beta logo 16x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/npu beta logo 20x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/npu beta logo 24x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/npu beta logo 256x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/npu beta logo 32x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/npu beta logo 64x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/upscaled/npu beta logo 16x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/upscaled/npu beta logo 20x.png create mode 100644 bin/Debug/dependencies/icon/res/png/beta/upscaled/npu beta logo 24x.png create mode 100644 bin/Debug/dependencies/icon/res/png/npu alpha logo 128x.png create mode 100644 bin/Debug/dependencies/img/imageres_5348-02.png create mode 100644 bin/Debug/dependencies/img/shell32_134-02.png create mode 100644 bin/Debug/dependencies/img/shell32_148-02.png create mode 100644 bin/Debug/file/bin/file.exe create mode 100644 bin/Debug/file/bin/magic1.dll create mode 100644 bin/Debug/file/bin/pong.txt create mode 100644 bin/Debug/file/bin/regex2.dll create mode 100644 bin/Debug/file/bin/zlib1.dll create mode 100644 bin/Debug/file/share/misc/magic create mode 100644 bin/Debug/file/share/misc/magic.mgc create mode 100644 bin/Debug/m.vshost.exe.config create mode 100644 bin/Debug/unix2dos.exe create mode 100644 npu alpha logo.ico create mode 100644 npu beta logo.ico create mode 100644 obj/Debug/Before-PostSharp/Notepad Ultra.exe create mode 100644 obj/Debug/Before-PostSharp/Notepad Ultra.pdb create mode 100644 obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 obj/Debug/Notepad Ultra.application create mode 100644 obj/Debug/Notepad Ultra.exe create mode 100644 obj/Debug/Notepad Ultra.exe.manifest create mode 100644 obj/Debug/Notepad Ultra.pdb create mode 100644 obj/Debug/Notepad Ultra.vbproj.FileListAbsolute.txt create mode 100644 obj/Debug/Notepad Ultra.vbproj.GenerateResource.Cache create mode 100644 obj/Debug/Notepad Ultra.vbprojResolveAssemblyReference.cache create mode 100644 obj/Debug/Notepad Ultra.xml create mode 100644 obj/Debug/Notepad_Ultra.About.resources create mode 100644 obj/Debug/Notepad_Ultra.ChangelogViewer.resources create mode 100644 obj/Debug/Notepad_Ultra.Customise_Colours.resources create mode 100644 obj/Debug/Notepad_Ultra.Find.resources create mode 100644 obj/Debug/Notepad_Ultra.FindReplace.resources create mode 100644 obj/Debug/Notepad_Ultra.Form1.resources create mode 100644 obj/Debug/Notepad_Ultra.LoadTimeWarning.resources create mode 100644 obj/Debug/Notepad_Ultra.NPUWindow.resources create mode 100644 obj/Debug/Notepad_Ultra.Open_Passed_File.resources create mode 100644 obj/Debug/Notepad_Ultra.Passed_File_Action_Settings.resources create mode 100644 obj/Debug/Notepad_Ultra.Preset_Directory_Manager.resources create mode 100644 obj/Debug/Notepad_Ultra.Resources.resources create mode 100644 obj/Debug/Notepad_Ultra.Settings.resources create mode 100644 obj/Debug/Notepad_Ultra.Splash_Screen.resources create mode 100644 obj/Debug/Notepad_Ultra.Status_Bar_Options.resources create mode 100644 obj/Debug/Notepad_Ultra.Supported_File_Extensions.resources create mode 100644 obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 packages.config diff --git a/About.Designer.vb b/About.Designer.vb new file mode 100644 index 0000000..b1818d7 --- /dev/null +++ b/About.Designer.vb @@ -0,0 +1,1500 @@ + _ +Partial Class About + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(About)) + Me.Label1 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.Label5 = New System.Windows.Forms.Label() + Me.ToTheBestGirlfriendEver = New System.Windows.Forms.Label() + Me.Button1 = New System.Windows.Forms.Button() + Me.Label7 = New System.Windows.Forms.Label() + Me.Button2 = New System.Windows.Forms.Button() + Me.PictureBox3 = New System.Windows.Forms.PictureBox() + Me.PictureBox2 = New System.Windows.Forms.PictureBox() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.BlinkenlightsTimer = New System.Windows.Forms.Timer(Me.components) + Me.RadioButton1 = New System.Windows.Forms.RadioButton() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.RadioButton2 = New System.Windows.Forms.RadioButton() + Me.Panel3 = New System.Windows.Forms.Panel() + Me.RadioButton3 = New System.Windows.Forms.RadioButton() + Me.Panel4 = New System.Windows.Forms.Panel() + Me.RadioButton4 = New System.Windows.Forms.RadioButton() + Me.Panel5 = New System.Windows.Forms.Panel() + Me.RadioButton5 = New System.Windows.Forms.RadioButton() + Me.Panel6 = New System.Windows.Forms.Panel() + Me.RadioButton6 = New System.Windows.Forms.RadioButton() + Me.Panel7 = New System.Windows.Forms.Panel() + Me.RadioButton7 = New System.Windows.Forms.RadioButton() + Me.Panel8 = New System.Windows.Forms.Panel() + Me.RadioButton8 = New System.Windows.Forms.RadioButton() + Me.Panel9 = New System.Windows.Forms.Panel() + Me.RadioButton9 = New System.Windows.Forms.RadioButton() + Me.Panel10 = New System.Windows.Forms.Panel() + Me.RadioButton10 = New System.Windows.Forms.RadioButton() + Me.Panel11 = New System.Windows.Forms.Panel() + Me.RadioButton11 = New System.Windows.Forms.RadioButton() + Me.Panel12 = New System.Windows.Forms.Panel() + Me.RadioButton12 = New System.Windows.Forms.RadioButton() + Me.Panel13 = New System.Windows.Forms.Panel() + Me.RadioButton13 = New System.Windows.Forms.RadioButton() + Me.Panel14 = New System.Windows.Forms.Panel() + Me.RadioButton14 = New System.Windows.Forms.RadioButton() + Me.Panel15 = New System.Windows.Forms.Panel() + Me.RadioButton15 = New System.Windows.Forms.RadioButton() + Me.Panel16 = New System.Windows.Forms.Panel() + Me.RadioButton16 = New System.Windows.Forms.RadioButton() + Me.Panel17 = New System.Windows.Forms.Panel() + Me.RadioButton17 = New System.Windows.Forms.RadioButton() + Me.Panel18 = New System.Windows.Forms.Panel() + Me.RadioButton18 = New System.Windows.Forms.RadioButton() + Me.Panel19 = New System.Windows.Forms.Panel() + Me.RadioButton19 = New System.Windows.Forms.RadioButton() + Me.Panel20 = New System.Windows.Forms.Panel() + Me.RadioButton20 = New System.Windows.Forms.RadioButton() + Me.Panel21 = New System.Windows.Forms.Panel() + Me.RadioButton21 = New System.Windows.Forms.RadioButton() + Me.Panel22 = New System.Windows.Forms.Panel() + Me.RadioButton22 = New System.Windows.Forms.RadioButton() + Me.Panel23 = New System.Windows.Forms.Panel() + Me.RadioButton23 = New System.Windows.Forms.RadioButton() + Me.Panel24 = New System.Windows.Forms.Panel() + Me.RadioButton24 = New System.Windows.Forms.RadioButton() + Me.Panel25 = New System.Windows.Forms.Panel() + Me.RadioButton25 = New System.Windows.Forms.RadioButton() + Me.Panel26 = New System.Windows.Forms.Panel() + Me.RadioButton26 = New System.Windows.Forms.RadioButton() + Me.Panel27 = New System.Windows.Forms.Panel() + Me.RadioButton27 = New System.Windows.Forms.RadioButton() + Me.Panel28 = New System.Windows.Forms.Panel() + Me.RadioButton28 = New System.Windows.Forms.RadioButton() + Me.Panel29 = New System.Windows.Forms.Panel() + Me.RadioButton29 = New System.Windows.Forms.RadioButton() + Me.Panel30 = New System.Windows.Forms.Panel() + Me.RadioButton30 = New System.Windows.Forms.RadioButton() + Me.Panel31 = New System.Windows.Forms.Panel() + Me.RadioButton31 = New System.Windows.Forms.RadioButton() + Me.Panel32 = New System.Windows.Forms.Panel() + Me.RadioButton32 = New System.Windows.Forms.RadioButton() + Me.Panel33 = New System.Windows.Forms.Panel() + Me.RadioButton33 = New System.Windows.Forms.RadioButton() + Me.Panel34 = New System.Windows.Forms.Panel() + Me.RadioButton34 = New System.Windows.Forms.RadioButton() + Me.Panel35 = New System.Windows.Forms.Panel() + Me.RadioButton35 = New System.Windows.Forms.RadioButton() + Me.Panel36 = New System.Windows.Forms.Panel() + Me.RadioButton36 = New System.Windows.Forms.RadioButton() + Me.Panel37 = New System.Windows.Forms.Panel() + Me.RadioButton37 = New System.Windows.Forms.RadioButton() + Me.Panel38 = New System.Windows.Forms.Panel() + Me.RadioButton38 = New System.Windows.Forms.RadioButton() + Me.Panel39 = New System.Windows.Forms.Panel() + Me.RadioButton39 = New System.Windows.Forms.RadioButton() + Me.Panel40 = New System.Windows.Forms.Panel() + Me.RadioButton40 = New System.Windows.Forms.RadioButton() + Me.Panel41 = New System.Windows.Forms.Panel() + Me.RadioButton41 = New System.Windows.Forms.RadioButton() + Me.Panel42 = New System.Windows.Forms.Panel() + Me.RadioButton42 = New System.Windows.Forms.RadioButton() + Me.Panel43 = New System.Windows.Forms.Panel() + Me.RadioButton43 = New System.Windows.Forms.RadioButton() + Me.Panel44 = New System.Windows.Forms.Panel() + Me.RadioButton44 = New System.Windows.Forms.RadioButton() + Me.Panel45 = New System.Windows.Forms.Panel() + Me.RadioButton45 = New System.Windows.Forms.RadioButton() + Me.Panel46 = New System.Windows.Forms.Panel() + Me.RadioButton46 = New System.Windows.Forms.RadioButton() + Me.Panel47 = New System.Windows.Forms.Panel() + Me.RadioButton47 = New System.Windows.Forms.RadioButton() + Me.Panel48 = New System.Windows.Forms.Panel() + Me.RadioButton48 = New System.Windows.Forms.RadioButton() + Me.Panel49 = New System.Windows.Forms.Panel() + Me.RadioButton49 = New System.Windows.Forms.RadioButton() + Me.Panel50 = New System.Windows.Forms.Panel() + Me.RadioButton50 = New System.Windows.Forms.RadioButton() + Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components) + Me.AnimationCheckbox = New System.Windows.Forms.CheckBox() + Me.Button3 = New System.Windows.Forms.Button() + CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.Panel1.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.Panel3.SuspendLayout() + Me.Panel4.SuspendLayout() + Me.Panel5.SuspendLayout() + Me.Panel6.SuspendLayout() + Me.Panel7.SuspendLayout() + Me.Panel8.SuspendLayout() + Me.Panel9.SuspendLayout() + Me.Panel10.SuspendLayout() + Me.Panel11.SuspendLayout() + Me.Panel12.SuspendLayout() + Me.Panel13.SuspendLayout() + Me.Panel14.SuspendLayout() + Me.Panel15.SuspendLayout() + Me.Panel16.SuspendLayout() + Me.Panel17.SuspendLayout() + Me.Panel18.SuspendLayout() + Me.Panel19.SuspendLayout() + Me.Panel20.SuspendLayout() + Me.Panel21.SuspendLayout() + Me.Panel22.SuspendLayout() + Me.Panel23.SuspendLayout() + Me.Panel24.SuspendLayout() + Me.Panel25.SuspendLayout() + Me.Panel26.SuspendLayout() + Me.Panel27.SuspendLayout() + Me.Panel28.SuspendLayout() + Me.Panel29.SuspendLayout() + Me.Panel30.SuspendLayout() + Me.Panel31.SuspendLayout() + Me.Panel32.SuspendLayout() + Me.Panel33.SuspendLayout() + Me.Panel34.SuspendLayout() + Me.Panel35.SuspendLayout() + Me.Panel36.SuspendLayout() + Me.Panel37.SuspendLayout() + Me.Panel38.SuspendLayout() + Me.Panel39.SuspendLayout() + Me.Panel40.SuspendLayout() + Me.Panel41.SuspendLayout() + Me.Panel42.SuspendLayout() + Me.Panel43.SuspendLayout() + Me.Panel44.SuspendLayout() + Me.Panel45.SuspendLayout() + Me.Panel46.SuspendLayout() + Me.Panel47.SuspendLayout() + Me.Panel48.SuspendLayout() + Me.Panel49.SuspendLayout() + Me.Panel50.SuspendLayout() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 13.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(149, 187) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(165, 32) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Notepad Ultra" + Me.ToolTip1.SetToolTip(Me.Label1, "Click me!") + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 10.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(123, 219) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(216, 23) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Version 0.7 Beta" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label3 + ' + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(15, 242) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(436, 19) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "© 2016, 2017 Lynnear Software" + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Location = New System.Drawing.Point(12, 313) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(361, 17) + Me.Label4.TabIndex = 2 + Me.Label4.Text = "Programming, Design, Debugging etc. By Lynne Megido" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Location = New System.Drawing.Point(12, 330) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(223, 17) + Me.Label5.TabIndex = 2 + Me.Label5.Text = "Quality Assurance by Petra Morse" + ' + 'ToTheBestGirlfriendEver + ' + Me.ToTheBestGirlfriendEver.AutoSize = True + Me.ToTheBestGirlfriendEver.Enabled = False + Me.ToTheBestGirlfriendEver.Font = New System.Drawing.Font("Segoe UI Semilight", 6.0!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.ToTheBestGirlfriendEver.Location = New System.Drawing.Point(202, 280) + Me.ToTheBestGirlfriendEver.Name = "ToTheBestGirlfriendEver" + Me.ToTheBestGirlfriendEver.Size = New System.Drawing.Size(58, 12) + Me.ToTheBestGirlfriendEver.TabIndex = 2 + Me.ToTheBestGirlfriendEver.Text = "For Petra <3" + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(376, 395) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(80, 28) + Me.Button1.TabIndex = 1 + Me.Button1.Text = "OK" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Font = New System.Drawing.Font("Segoe UI", 7.8!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label7.Location = New System.Drawing.Point(95, 261) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(273, 19) + Me.Label7.TabIndex = 1 + Me.Label7.Text = "An advanced notepad for advanced minds" + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(279, 395) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(91, 28) + Me.Button2.TabIndex = 3 + Me.Button2.Text = "Changelog" + Me.Button2.UseVisualStyleBackColor = True + ' + 'PictureBox3 + ' + Me.PictureBox3.BackgroundImage = CType(resources.GetObject("PictureBox3.BackgroundImage"), System.Drawing.Image) + Me.PictureBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.PictureBox3.Location = New System.Drawing.Point(31, 35) + Me.PictureBox3.Name = "PictureBox3" + Me.PictureBox3.Size = New System.Drawing.Size(128, 128) + Me.PictureBox3.TabIndex = 0 + Me.PictureBox3.TabStop = False + ' + 'PictureBox2 + ' + Me.PictureBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.PictureBox2.Image = CType(resources.GetObject("PictureBox2.Image"), System.Drawing.Image) + Me.PictureBox2.Location = New System.Drawing.Point(164, 35) + Me.PictureBox2.Name = "PictureBox2" + Me.PictureBox2.Size = New System.Drawing.Size(128, 128) + Me.PictureBox2.TabIndex = 0 + Me.PictureBox2.TabStop = False + ' + 'PictureBox1 + ' + Me.PictureBox1.BackgroundImage = CType(resources.GetObject("PictureBox1.BackgroundImage"), System.Drawing.Image) + Me.PictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.PictureBox1.Location = New System.Drawing.Point(297, 35) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(128, 128) + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(23, 36) + Me.ProgressBar1.MarqueeAnimationSpeed = 1 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(410, 127) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 4 + ' + 'BlinkenlightsTimer + ' + Me.BlinkenlightsTimer.Interval = 200 + ' + 'RadioButton1 + ' + Me.RadioButton1.AutoSize = True + Me.RadioButton1.Location = New System.Drawing.Point(0, 0) + Me.RadioButton1.Name = "RadioButton1" + Me.RadioButton1.Size = New System.Drawing.Size(17, 16) + Me.RadioButton1.TabIndex = 5 + Me.RadioButton1.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Controls.Add(Me.RadioButton1) + Me.Panel1.Location = New System.Drawing.Point(4, 15) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(17, 16) + Me.Panel1.TabIndex = 6 + ' + 'Panel2 + ' + Me.Panel2.Controls.Add(Me.RadioButton2) + Me.Panel2.Location = New System.Drawing.Point(28, 15) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(17, 16) + Me.Panel2.TabIndex = 6 + ' + 'RadioButton2 + ' + Me.RadioButton2.AutoSize = True + Me.RadioButton2.Location = New System.Drawing.Point(0, 0) + Me.RadioButton2.Name = "RadioButton2" + Me.RadioButton2.Size = New System.Drawing.Size(17, 16) + Me.RadioButton2.TabIndex = 5 + Me.RadioButton2.UseVisualStyleBackColor = True + ' + 'Panel3 + ' + Me.Panel3.Controls.Add(Me.RadioButton3) + Me.Panel3.Location = New System.Drawing.Point(52, 15) + Me.Panel3.Name = "Panel3" + Me.Panel3.Size = New System.Drawing.Size(17, 16) + Me.Panel3.TabIndex = 6 + ' + 'RadioButton3 + ' + Me.RadioButton3.AutoSize = True + Me.RadioButton3.Location = New System.Drawing.Point(0, 0) + Me.RadioButton3.Name = "RadioButton3" + Me.RadioButton3.Size = New System.Drawing.Size(17, 16) + Me.RadioButton3.TabIndex = 5 + Me.RadioButton3.UseVisualStyleBackColor = True + ' + 'Panel4 + ' + Me.Panel4.Controls.Add(Me.RadioButton4) + Me.Panel4.Location = New System.Drawing.Point(76, 15) + Me.Panel4.Name = "Panel4" + Me.Panel4.Size = New System.Drawing.Size(17, 16) + Me.Panel4.TabIndex = 6 + ' + 'RadioButton4 + ' + Me.RadioButton4.AutoSize = True + Me.RadioButton4.Location = New System.Drawing.Point(0, 0) + Me.RadioButton4.Name = "RadioButton4" + Me.RadioButton4.Size = New System.Drawing.Size(17, 16) + Me.RadioButton4.TabIndex = 5 + Me.RadioButton4.UseVisualStyleBackColor = True + ' + 'Panel5 + ' + Me.Panel5.Controls.Add(Me.RadioButton5) + Me.Panel5.Location = New System.Drawing.Point(100, 15) + Me.Panel5.Name = "Panel5" + Me.Panel5.Size = New System.Drawing.Size(17, 16) + Me.Panel5.TabIndex = 6 + ' + 'RadioButton5 + ' + Me.RadioButton5.AutoSize = True + Me.RadioButton5.Location = New System.Drawing.Point(0, 0) + Me.RadioButton5.Name = "RadioButton5" + Me.RadioButton5.Size = New System.Drawing.Size(17, 16) + Me.RadioButton5.TabIndex = 5 + Me.RadioButton5.UseVisualStyleBackColor = True + ' + 'Panel6 + ' + Me.Panel6.Controls.Add(Me.RadioButton6) + Me.Panel6.Location = New System.Drawing.Point(124, 15) + Me.Panel6.Name = "Panel6" + Me.Panel6.Size = New System.Drawing.Size(17, 16) + Me.Panel6.TabIndex = 6 + ' + 'RadioButton6 + ' + Me.RadioButton6.AutoSize = True + Me.RadioButton6.Location = New System.Drawing.Point(0, 0) + Me.RadioButton6.Name = "RadioButton6" + Me.RadioButton6.Size = New System.Drawing.Size(17, 16) + Me.RadioButton6.TabIndex = 5 + Me.RadioButton6.UseVisualStyleBackColor = True + ' + 'Panel7 + ' + Me.Panel7.Controls.Add(Me.RadioButton7) + Me.Panel7.Location = New System.Drawing.Point(148, 15) + Me.Panel7.Name = "Panel7" + Me.Panel7.Size = New System.Drawing.Size(17, 16) + Me.Panel7.TabIndex = 6 + ' + 'RadioButton7 + ' + Me.RadioButton7.AutoSize = True + Me.RadioButton7.Location = New System.Drawing.Point(0, 0) + Me.RadioButton7.Name = "RadioButton7" + Me.RadioButton7.Size = New System.Drawing.Size(17, 16) + Me.RadioButton7.TabIndex = 5 + Me.RadioButton7.UseVisualStyleBackColor = True + ' + 'Panel8 + ' + Me.Panel8.Controls.Add(Me.RadioButton8) + Me.Panel8.Location = New System.Drawing.Point(172, 15) + Me.Panel8.Name = "Panel8" + Me.Panel8.Size = New System.Drawing.Size(17, 16) + Me.Panel8.TabIndex = 6 + ' + 'RadioButton8 + ' + Me.RadioButton8.AutoSize = True + Me.RadioButton8.Location = New System.Drawing.Point(0, 0) + Me.RadioButton8.Name = "RadioButton8" + Me.RadioButton8.Size = New System.Drawing.Size(17, 16) + Me.RadioButton8.TabIndex = 5 + Me.RadioButton8.UseVisualStyleBackColor = True + ' + 'Panel9 + ' + Me.Panel9.Controls.Add(Me.RadioButton9) + Me.Panel9.Location = New System.Drawing.Point(196, 15) + Me.Panel9.Name = "Panel9" + Me.Panel9.Size = New System.Drawing.Size(17, 16) + Me.Panel9.TabIndex = 6 + ' + 'RadioButton9 + ' + Me.RadioButton9.AutoSize = True + Me.RadioButton9.Location = New System.Drawing.Point(0, 0) + Me.RadioButton9.Name = "RadioButton9" + Me.RadioButton9.Size = New System.Drawing.Size(17, 16) + Me.RadioButton9.TabIndex = 5 + Me.RadioButton9.UseVisualStyleBackColor = True + ' + 'Panel10 + ' + Me.Panel10.Controls.Add(Me.RadioButton10) + Me.Panel10.Location = New System.Drawing.Point(220, 15) + Me.Panel10.Name = "Panel10" + Me.Panel10.Size = New System.Drawing.Size(17, 16) + Me.Panel10.TabIndex = 6 + ' + 'RadioButton10 + ' + Me.RadioButton10.AutoSize = True + Me.RadioButton10.Location = New System.Drawing.Point(0, 0) + Me.RadioButton10.Name = "RadioButton10" + Me.RadioButton10.Size = New System.Drawing.Size(17, 16) + Me.RadioButton10.TabIndex = 5 + Me.RadioButton10.UseVisualStyleBackColor = True + ' + 'Panel11 + ' + Me.Panel11.Controls.Add(Me.RadioButton11) + Me.Panel11.Location = New System.Drawing.Point(244, 15) + Me.Panel11.Name = "Panel11" + Me.Panel11.Size = New System.Drawing.Size(17, 16) + Me.Panel11.TabIndex = 6 + ' + 'RadioButton11 + ' + Me.RadioButton11.AutoSize = True + Me.RadioButton11.Location = New System.Drawing.Point(0, 0) + Me.RadioButton11.Name = "RadioButton11" + Me.RadioButton11.Size = New System.Drawing.Size(17, 16) + Me.RadioButton11.TabIndex = 5 + Me.RadioButton11.UseVisualStyleBackColor = True + ' + 'Panel12 + ' + Me.Panel12.Controls.Add(Me.RadioButton12) + Me.Panel12.Location = New System.Drawing.Point(268, 15) + Me.Panel12.Name = "Panel12" + Me.Panel12.Size = New System.Drawing.Size(17, 16) + Me.Panel12.TabIndex = 6 + ' + 'RadioButton12 + ' + Me.RadioButton12.AutoSize = True + Me.RadioButton12.Location = New System.Drawing.Point(0, 0) + Me.RadioButton12.Name = "RadioButton12" + Me.RadioButton12.Size = New System.Drawing.Size(17, 16) + Me.RadioButton12.TabIndex = 5 + Me.RadioButton12.UseVisualStyleBackColor = True + ' + 'Panel13 + ' + Me.Panel13.Controls.Add(Me.RadioButton13) + Me.Panel13.Location = New System.Drawing.Point(292, 15) + Me.Panel13.Name = "Panel13" + Me.Panel13.Size = New System.Drawing.Size(17, 16) + Me.Panel13.TabIndex = 6 + ' + 'RadioButton13 + ' + Me.RadioButton13.AutoSize = True + Me.RadioButton13.Location = New System.Drawing.Point(0, 0) + Me.RadioButton13.Name = "RadioButton13" + Me.RadioButton13.Size = New System.Drawing.Size(17, 16) + Me.RadioButton13.TabIndex = 5 + Me.RadioButton13.UseVisualStyleBackColor = True + ' + 'Panel14 + ' + Me.Panel14.Controls.Add(Me.RadioButton14) + Me.Panel14.Location = New System.Drawing.Point(316, 15) + Me.Panel14.Name = "Panel14" + Me.Panel14.Size = New System.Drawing.Size(17, 16) + Me.Panel14.TabIndex = 6 + ' + 'RadioButton14 + ' + Me.RadioButton14.AutoSize = True + Me.RadioButton14.Location = New System.Drawing.Point(0, 0) + Me.RadioButton14.Name = "RadioButton14" + Me.RadioButton14.Size = New System.Drawing.Size(17, 16) + Me.RadioButton14.TabIndex = 5 + Me.RadioButton14.UseVisualStyleBackColor = True + ' + 'Panel15 + ' + Me.Panel15.Controls.Add(Me.RadioButton15) + Me.Panel15.Location = New System.Drawing.Point(340, 15) + Me.Panel15.Name = "Panel15" + Me.Panel15.Size = New System.Drawing.Size(17, 16) + Me.Panel15.TabIndex = 6 + ' + 'RadioButton15 + ' + Me.RadioButton15.AutoSize = True + Me.RadioButton15.Location = New System.Drawing.Point(0, 0) + Me.RadioButton15.Name = "RadioButton15" + Me.RadioButton15.Size = New System.Drawing.Size(17, 16) + Me.RadioButton15.TabIndex = 5 + Me.RadioButton15.UseVisualStyleBackColor = True + ' + 'Panel16 + ' + Me.Panel16.Controls.Add(Me.RadioButton16) + Me.Panel16.Location = New System.Drawing.Point(364, 15) + Me.Panel16.Name = "Panel16" + Me.Panel16.Size = New System.Drawing.Size(17, 16) + Me.Panel16.TabIndex = 6 + ' + 'RadioButton16 + ' + Me.RadioButton16.AutoSize = True + Me.RadioButton16.Location = New System.Drawing.Point(0, 0) + Me.RadioButton16.Name = "RadioButton16" + Me.RadioButton16.Size = New System.Drawing.Size(17, 16) + Me.RadioButton16.TabIndex = 5 + Me.RadioButton16.UseVisualStyleBackColor = True + ' + 'Panel17 + ' + Me.Panel17.Controls.Add(Me.RadioButton17) + Me.Panel17.Location = New System.Drawing.Point(388, 15) + Me.Panel17.Name = "Panel17" + Me.Panel17.Size = New System.Drawing.Size(17, 16) + Me.Panel17.TabIndex = 6 + ' + 'RadioButton17 + ' + Me.RadioButton17.AutoSize = True + Me.RadioButton17.Location = New System.Drawing.Point(0, 0) + Me.RadioButton17.Name = "RadioButton17" + Me.RadioButton17.Size = New System.Drawing.Size(17, 16) + Me.RadioButton17.TabIndex = 5 + Me.RadioButton17.UseVisualStyleBackColor = True + ' + 'Panel18 + ' + Me.Panel18.Controls.Add(Me.RadioButton18) + Me.Panel18.Location = New System.Drawing.Point(412, 15) + Me.Panel18.Name = "Panel18" + Me.Panel18.Size = New System.Drawing.Size(17, 16) + Me.Panel18.TabIndex = 6 + ' + 'RadioButton18 + ' + Me.RadioButton18.AutoSize = True + Me.RadioButton18.Location = New System.Drawing.Point(0, 0) + Me.RadioButton18.Name = "RadioButton18" + Me.RadioButton18.Size = New System.Drawing.Size(17, 16) + Me.RadioButton18.TabIndex = 5 + Me.RadioButton18.UseVisualStyleBackColor = True + ' + 'Panel19 + ' + Me.Panel19.Controls.Add(Me.RadioButton19) + Me.Panel19.Location = New System.Drawing.Point(436, 15) + Me.Panel19.Name = "Panel19" + Me.Panel19.Size = New System.Drawing.Size(17, 16) + Me.Panel19.TabIndex = 6 + ' + 'RadioButton19 + ' + Me.RadioButton19.AutoSize = True + Me.RadioButton19.Location = New System.Drawing.Point(0, 0) + Me.RadioButton19.Name = "RadioButton19" + Me.RadioButton19.Size = New System.Drawing.Size(17, 16) + Me.RadioButton19.TabIndex = 5 + Me.RadioButton19.UseVisualStyleBackColor = True + ' + 'Panel20 + ' + Me.Panel20.Controls.Add(Me.RadioButton20) + Me.Panel20.Location = New System.Drawing.Point(436, 37) + Me.Panel20.Name = "Panel20" + Me.Panel20.Size = New System.Drawing.Size(17, 16) + Me.Panel20.TabIndex = 6 + ' + 'RadioButton20 + ' + Me.RadioButton20.AutoSize = True + Me.RadioButton20.Location = New System.Drawing.Point(0, 0) + Me.RadioButton20.Name = "RadioButton20" + Me.RadioButton20.Size = New System.Drawing.Size(17, 16) + Me.RadioButton20.TabIndex = 5 + Me.RadioButton20.UseVisualStyleBackColor = True + ' + 'Panel21 + ' + Me.Panel21.Controls.Add(Me.RadioButton21) + Me.Panel21.Location = New System.Drawing.Point(436, 59) + Me.Panel21.Name = "Panel21" + Me.Panel21.Size = New System.Drawing.Size(17, 16) + Me.Panel21.TabIndex = 6 + ' + 'RadioButton21 + ' + Me.RadioButton21.AutoSize = True + Me.RadioButton21.Location = New System.Drawing.Point(0, 0) + Me.RadioButton21.Name = "RadioButton21" + Me.RadioButton21.Size = New System.Drawing.Size(17, 16) + Me.RadioButton21.TabIndex = 5 + Me.RadioButton21.UseVisualStyleBackColor = True + ' + 'Panel22 + ' + Me.Panel22.Controls.Add(Me.RadioButton22) + Me.Panel22.Location = New System.Drawing.Point(436, 81) + Me.Panel22.Name = "Panel22" + Me.Panel22.Size = New System.Drawing.Size(17, 16) + Me.Panel22.TabIndex = 6 + ' + 'RadioButton22 + ' + Me.RadioButton22.AutoSize = True + Me.RadioButton22.Location = New System.Drawing.Point(0, 0) + Me.RadioButton22.Name = "RadioButton22" + Me.RadioButton22.Size = New System.Drawing.Size(17, 16) + Me.RadioButton22.TabIndex = 5 + Me.RadioButton22.UseVisualStyleBackColor = True + ' + 'Panel23 + ' + Me.Panel23.Controls.Add(Me.RadioButton23) + Me.Panel23.Location = New System.Drawing.Point(436, 103) + Me.Panel23.Name = "Panel23" + Me.Panel23.Size = New System.Drawing.Size(17, 16) + Me.Panel23.TabIndex = 6 + ' + 'RadioButton23 + ' + Me.RadioButton23.AutoSize = True + Me.RadioButton23.Location = New System.Drawing.Point(0, 0) + Me.RadioButton23.Name = "RadioButton23" + Me.RadioButton23.Size = New System.Drawing.Size(17, 16) + Me.RadioButton23.TabIndex = 5 + Me.RadioButton23.UseVisualStyleBackColor = True + ' + 'Panel24 + ' + Me.Panel24.Controls.Add(Me.RadioButton24) + Me.Panel24.Location = New System.Drawing.Point(436, 125) + Me.Panel24.Name = "Panel24" + Me.Panel24.Size = New System.Drawing.Size(17, 16) + Me.Panel24.TabIndex = 6 + ' + 'RadioButton24 + ' + Me.RadioButton24.AutoSize = True + Me.RadioButton24.Location = New System.Drawing.Point(0, 0) + Me.RadioButton24.Name = "RadioButton24" + Me.RadioButton24.Size = New System.Drawing.Size(17, 16) + Me.RadioButton24.TabIndex = 5 + Me.RadioButton24.UseVisualStyleBackColor = True + ' + 'Panel25 + ' + Me.Panel25.Controls.Add(Me.RadioButton25) + Me.Panel25.Location = New System.Drawing.Point(436, 147) + Me.Panel25.Name = "Panel25" + Me.Panel25.Size = New System.Drawing.Size(17, 16) + Me.Panel25.TabIndex = 6 + ' + 'RadioButton25 + ' + Me.RadioButton25.AutoSize = True + Me.RadioButton25.Location = New System.Drawing.Point(0, 0) + Me.RadioButton25.Name = "RadioButton25" + Me.RadioButton25.Size = New System.Drawing.Size(17, 16) + Me.RadioButton25.TabIndex = 5 + Me.RadioButton25.UseVisualStyleBackColor = True + ' + 'Panel26 + ' + Me.Panel26.Controls.Add(Me.RadioButton26) + Me.Panel26.Location = New System.Drawing.Point(436, 169) + Me.Panel26.Name = "Panel26" + Me.Panel26.Size = New System.Drawing.Size(17, 16) + Me.Panel26.TabIndex = 6 + ' + 'RadioButton26 + ' + Me.RadioButton26.AutoSize = True + Me.RadioButton26.Location = New System.Drawing.Point(0, 0) + Me.RadioButton26.Name = "RadioButton26" + Me.RadioButton26.Size = New System.Drawing.Size(17, 16) + Me.RadioButton26.TabIndex = 5 + Me.RadioButton26.UseVisualStyleBackColor = True + ' + 'Panel27 + ' + Me.Panel27.Controls.Add(Me.RadioButton27) + Me.Panel27.Location = New System.Drawing.Point(412, 169) + Me.Panel27.Name = "Panel27" + Me.Panel27.Size = New System.Drawing.Size(17, 16) + Me.Panel27.TabIndex = 7 + ' + 'RadioButton27 + ' + Me.RadioButton27.AutoSize = True + Me.RadioButton27.Location = New System.Drawing.Point(0, 0) + Me.RadioButton27.Name = "RadioButton27" + Me.RadioButton27.Size = New System.Drawing.Size(17, 16) + Me.RadioButton27.TabIndex = 5 + Me.RadioButton27.UseVisualStyleBackColor = True + ' + 'Panel28 + ' + Me.Panel28.Controls.Add(Me.RadioButton28) + Me.Panel28.Location = New System.Drawing.Point(388, 169) + Me.Panel28.Name = "Panel28" + Me.Panel28.Size = New System.Drawing.Size(17, 16) + Me.Panel28.TabIndex = 22 + ' + 'RadioButton28 + ' + Me.RadioButton28.AutoSize = True + Me.RadioButton28.Location = New System.Drawing.Point(0, 0) + Me.RadioButton28.Name = "RadioButton28" + Me.RadioButton28.Size = New System.Drawing.Size(17, 16) + Me.RadioButton28.TabIndex = 5 + Me.RadioButton28.UseVisualStyleBackColor = True + ' + 'Panel29 + ' + Me.Panel29.Controls.Add(Me.RadioButton29) + Me.Panel29.Location = New System.Drawing.Point(364, 169) + Me.Panel29.Name = "Panel29" + Me.Panel29.Size = New System.Drawing.Size(17, 16) + Me.Panel29.TabIndex = 21 + ' + 'RadioButton29 + ' + Me.RadioButton29.AutoSize = True + Me.RadioButton29.Location = New System.Drawing.Point(0, 0) + Me.RadioButton29.Name = "RadioButton29" + Me.RadioButton29.Size = New System.Drawing.Size(17, 16) + Me.RadioButton29.TabIndex = 5 + Me.RadioButton29.UseVisualStyleBackColor = True + ' + 'Panel30 + ' + Me.Panel30.Controls.Add(Me.RadioButton30) + Me.Panel30.Location = New System.Drawing.Point(340, 169) + Me.Panel30.Name = "Panel30" + Me.Panel30.Size = New System.Drawing.Size(17, 16) + Me.Panel30.TabIndex = 20 + ' + 'RadioButton30 + ' + Me.RadioButton30.AutoSize = True + Me.RadioButton30.Location = New System.Drawing.Point(0, 0) + Me.RadioButton30.Name = "RadioButton30" + Me.RadioButton30.Size = New System.Drawing.Size(17, 16) + Me.RadioButton30.TabIndex = 5 + Me.RadioButton30.UseVisualStyleBackColor = True + ' + 'Panel31 + ' + Me.Panel31.Controls.Add(Me.RadioButton31) + Me.Panel31.Location = New System.Drawing.Point(316, 169) + Me.Panel31.Name = "Panel31" + Me.Panel31.Size = New System.Drawing.Size(17, 16) + Me.Panel31.TabIndex = 19 + ' + 'RadioButton31 + ' + Me.RadioButton31.AutoSize = True + Me.RadioButton31.Location = New System.Drawing.Point(0, 0) + Me.RadioButton31.Name = "RadioButton31" + Me.RadioButton31.Size = New System.Drawing.Size(17, 16) + Me.RadioButton31.TabIndex = 5 + Me.RadioButton31.UseVisualStyleBackColor = True + ' + 'Panel32 + ' + Me.Panel32.Controls.Add(Me.RadioButton32) + Me.Panel32.Location = New System.Drawing.Point(292, 169) + Me.Panel32.Name = "Panel32" + Me.Panel32.Size = New System.Drawing.Size(17, 16) + Me.Panel32.TabIndex = 18 + ' + 'RadioButton32 + ' + Me.RadioButton32.AutoSize = True + Me.RadioButton32.Location = New System.Drawing.Point(0, 0) + Me.RadioButton32.Name = "RadioButton32" + Me.RadioButton32.Size = New System.Drawing.Size(17, 16) + Me.RadioButton32.TabIndex = 5 + Me.RadioButton32.UseVisualStyleBackColor = True + ' + 'Panel33 + ' + Me.Panel33.Controls.Add(Me.RadioButton33) + Me.Panel33.Location = New System.Drawing.Point(268, 169) + Me.Panel33.Name = "Panel33" + Me.Panel33.Size = New System.Drawing.Size(17, 16) + Me.Panel33.TabIndex = 17 + ' + 'RadioButton33 + ' + Me.RadioButton33.AutoSize = True + Me.RadioButton33.Location = New System.Drawing.Point(0, 0) + Me.RadioButton33.Name = "RadioButton33" + Me.RadioButton33.Size = New System.Drawing.Size(17, 16) + Me.RadioButton33.TabIndex = 5 + Me.RadioButton33.UseVisualStyleBackColor = True + ' + 'Panel34 + ' + Me.Panel34.Controls.Add(Me.RadioButton34) + Me.Panel34.Location = New System.Drawing.Point(244, 169) + Me.Panel34.Name = "Panel34" + Me.Panel34.Size = New System.Drawing.Size(17, 16) + Me.Panel34.TabIndex = 16 + ' + 'RadioButton34 + ' + Me.RadioButton34.AutoSize = True + Me.RadioButton34.Location = New System.Drawing.Point(0, 0) + Me.RadioButton34.Name = "RadioButton34" + Me.RadioButton34.Size = New System.Drawing.Size(17, 16) + Me.RadioButton34.TabIndex = 5 + Me.RadioButton34.UseVisualStyleBackColor = True + ' + 'Panel35 + ' + Me.Panel35.Controls.Add(Me.RadioButton35) + Me.Panel35.Location = New System.Drawing.Point(220, 169) + Me.Panel35.Name = "Panel35" + Me.Panel35.Size = New System.Drawing.Size(17, 16) + Me.Panel35.TabIndex = 15 + ' + 'RadioButton35 + ' + Me.RadioButton35.AutoSize = True + Me.RadioButton35.Location = New System.Drawing.Point(0, 0) + Me.RadioButton35.Name = "RadioButton35" + Me.RadioButton35.Size = New System.Drawing.Size(17, 16) + Me.RadioButton35.TabIndex = 5 + Me.RadioButton35.UseVisualStyleBackColor = True + ' + 'Panel36 + ' + Me.Panel36.Controls.Add(Me.RadioButton36) + Me.Panel36.Location = New System.Drawing.Point(196, 169) + Me.Panel36.Name = "Panel36" + Me.Panel36.Size = New System.Drawing.Size(17, 16) + Me.Panel36.TabIndex = 14 + ' + 'RadioButton36 + ' + Me.RadioButton36.AutoSize = True + Me.RadioButton36.Location = New System.Drawing.Point(0, 0) + Me.RadioButton36.Name = "RadioButton36" + Me.RadioButton36.Size = New System.Drawing.Size(17, 16) + Me.RadioButton36.TabIndex = 5 + Me.RadioButton36.UseVisualStyleBackColor = True + ' + 'Panel37 + ' + Me.Panel37.Controls.Add(Me.RadioButton37) + Me.Panel37.Location = New System.Drawing.Point(172, 169) + Me.Panel37.Name = "Panel37" + Me.Panel37.Size = New System.Drawing.Size(17, 16) + Me.Panel37.TabIndex = 13 + ' + 'RadioButton37 + ' + Me.RadioButton37.AutoSize = True + Me.RadioButton37.Location = New System.Drawing.Point(0, 0) + Me.RadioButton37.Name = "RadioButton37" + Me.RadioButton37.Size = New System.Drawing.Size(17, 16) + Me.RadioButton37.TabIndex = 5 + Me.RadioButton37.UseVisualStyleBackColor = True + ' + 'Panel38 + ' + Me.Panel38.Controls.Add(Me.RadioButton38) + Me.Panel38.Location = New System.Drawing.Point(148, 169) + Me.Panel38.Name = "Panel38" + Me.Panel38.Size = New System.Drawing.Size(17, 16) + Me.Panel38.TabIndex = 12 + ' + 'RadioButton38 + ' + Me.RadioButton38.AutoSize = True + Me.RadioButton38.Location = New System.Drawing.Point(0, 0) + Me.RadioButton38.Name = "RadioButton38" + Me.RadioButton38.Size = New System.Drawing.Size(17, 16) + Me.RadioButton38.TabIndex = 5 + Me.RadioButton38.UseVisualStyleBackColor = True + ' + 'Panel39 + ' + Me.Panel39.Controls.Add(Me.RadioButton39) + Me.Panel39.Location = New System.Drawing.Point(124, 169) + Me.Panel39.Name = "Panel39" + Me.Panel39.Size = New System.Drawing.Size(17, 16) + Me.Panel39.TabIndex = 11 + ' + 'RadioButton39 + ' + Me.RadioButton39.AutoSize = True + Me.RadioButton39.Location = New System.Drawing.Point(0, 0) + Me.RadioButton39.Name = "RadioButton39" + Me.RadioButton39.Size = New System.Drawing.Size(17, 16) + Me.RadioButton39.TabIndex = 5 + Me.RadioButton39.UseVisualStyleBackColor = True + ' + 'Panel40 + ' + Me.Panel40.Controls.Add(Me.RadioButton40) + Me.Panel40.Location = New System.Drawing.Point(100, 169) + Me.Panel40.Name = "Panel40" + Me.Panel40.Size = New System.Drawing.Size(17, 16) + Me.Panel40.TabIndex = 10 + ' + 'RadioButton40 + ' + Me.RadioButton40.AutoSize = True + Me.RadioButton40.Location = New System.Drawing.Point(0, 0) + Me.RadioButton40.Name = "RadioButton40" + Me.RadioButton40.Size = New System.Drawing.Size(17, 16) + Me.RadioButton40.TabIndex = 5 + Me.RadioButton40.UseVisualStyleBackColor = True + ' + 'Panel41 + ' + Me.Panel41.Controls.Add(Me.RadioButton41) + Me.Panel41.Location = New System.Drawing.Point(76, 169) + Me.Panel41.Name = "Panel41" + Me.Panel41.Size = New System.Drawing.Size(17, 16) + Me.Panel41.TabIndex = 9 + ' + 'RadioButton41 + ' + Me.RadioButton41.AutoSize = True + Me.RadioButton41.Location = New System.Drawing.Point(0, 0) + Me.RadioButton41.Name = "RadioButton41" + Me.RadioButton41.Size = New System.Drawing.Size(17, 16) + Me.RadioButton41.TabIndex = 5 + Me.RadioButton41.UseVisualStyleBackColor = True + ' + 'Panel42 + ' + Me.Panel42.Controls.Add(Me.RadioButton42) + Me.Panel42.Location = New System.Drawing.Point(52, 169) + Me.Panel42.Name = "Panel42" + Me.Panel42.Size = New System.Drawing.Size(17, 16) + Me.Panel42.TabIndex = 8 + ' + 'RadioButton42 + ' + Me.RadioButton42.AutoSize = True + Me.RadioButton42.Location = New System.Drawing.Point(0, 0) + Me.RadioButton42.Name = "RadioButton42" + Me.RadioButton42.Size = New System.Drawing.Size(17, 16) + Me.RadioButton42.TabIndex = 5 + Me.RadioButton42.UseVisualStyleBackColor = True + ' + 'Panel43 + ' + Me.Panel43.Controls.Add(Me.RadioButton43) + Me.Panel43.Location = New System.Drawing.Point(28, 169) + Me.Panel43.Name = "Panel43" + Me.Panel43.Size = New System.Drawing.Size(17, 16) + Me.Panel43.TabIndex = 23 + ' + 'RadioButton43 + ' + Me.RadioButton43.AutoSize = True + Me.RadioButton43.Location = New System.Drawing.Point(0, 0) + Me.RadioButton43.Name = "RadioButton43" + Me.RadioButton43.Size = New System.Drawing.Size(17, 16) + Me.RadioButton43.TabIndex = 5 + Me.RadioButton43.UseVisualStyleBackColor = True + ' + 'Panel44 + ' + Me.Panel44.Controls.Add(Me.RadioButton44) + Me.Panel44.Location = New System.Drawing.Point(4, 169) + Me.Panel44.Name = "Panel44" + Me.Panel44.Size = New System.Drawing.Size(17, 16) + Me.Panel44.TabIndex = 24 + ' + 'RadioButton44 + ' + Me.RadioButton44.AutoSize = True + Me.RadioButton44.Location = New System.Drawing.Point(0, 0) + Me.RadioButton44.Name = "RadioButton44" + Me.RadioButton44.Size = New System.Drawing.Size(17, 16) + Me.RadioButton44.TabIndex = 5 + Me.RadioButton44.UseVisualStyleBackColor = True + ' + 'Panel45 + ' + Me.Panel45.Controls.Add(Me.RadioButton45) + Me.Panel45.Location = New System.Drawing.Point(4, 147) + Me.Panel45.Name = "Panel45" + Me.Panel45.Size = New System.Drawing.Size(17, 16) + Me.Panel45.TabIndex = 24 + ' + 'RadioButton45 + ' + Me.RadioButton45.AutoSize = True + Me.RadioButton45.Location = New System.Drawing.Point(0, 0) + Me.RadioButton45.Name = "RadioButton45" + Me.RadioButton45.Size = New System.Drawing.Size(17, 16) + Me.RadioButton45.TabIndex = 5 + Me.RadioButton45.UseVisualStyleBackColor = True + ' + 'Panel46 + ' + Me.Panel46.Controls.Add(Me.RadioButton46) + Me.Panel46.Location = New System.Drawing.Point(4, 125) + Me.Panel46.Name = "Panel46" + Me.Panel46.Size = New System.Drawing.Size(17, 16) + Me.Panel46.TabIndex = 24 + ' + 'RadioButton46 + ' + Me.RadioButton46.AutoSize = True + Me.RadioButton46.Location = New System.Drawing.Point(0, 0) + Me.RadioButton46.Name = "RadioButton46" + Me.RadioButton46.Size = New System.Drawing.Size(17, 16) + Me.RadioButton46.TabIndex = 5 + Me.RadioButton46.UseVisualStyleBackColor = True + ' + 'Panel47 + ' + Me.Panel47.Controls.Add(Me.RadioButton47) + Me.Panel47.Location = New System.Drawing.Point(4, 103) + Me.Panel47.Name = "Panel47" + Me.Panel47.Size = New System.Drawing.Size(17, 16) + Me.Panel47.TabIndex = 24 + ' + 'RadioButton47 + ' + Me.RadioButton47.AutoSize = True + Me.RadioButton47.Location = New System.Drawing.Point(0, 0) + Me.RadioButton47.Name = "RadioButton47" + Me.RadioButton47.Size = New System.Drawing.Size(17, 16) + Me.RadioButton47.TabIndex = 5 + Me.RadioButton47.UseVisualStyleBackColor = True + ' + 'Panel48 + ' + Me.Panel48.Controls.Add(Me.RadioButton48) + Me.Panel48.Location = New System.Drawing.Point(4, 81) + Me.Panel48.Name = "Panel48" + Me.Panel48.Size = New System.Drawing.Size(17, 16) + Me.Panel48.TabIndex = 24 + ' + 'RadioButton48 + ' + Me.RadioButton48.AutoSize = True + Me.RadioButton48.Location = New System.Drawing.Point(0, 0) + Me.RadioButton48.Name = "RadioButton48" + Me.RadioButton48.Size = New System.Drawing.Size(17, 16) + Me.RadioButton48.TabIndex = 5 + Me.RadioButton48.UseVisualStyleBackColor = True + ' + 'Panel49 + ' + Me.Panel49.Controls.Add(Me.RadioButton49) + Me.Panel49.Location = New System.Drawing.Point(4, 59) + Me.Panel49.Name = "Panel49" + Me.Panel49.Size = New System.Drawing.Size(17, 16) + Me.Panel49.TabIndex = 24 + ' + 'RadioButton49 + ' + Me.RadioButton49.AutoSize = True + Me.RadioButton49.Location = New System.Drawing.Point(0, 0) + Me.RadioButton49.Name = "RadioButton49" + Me.RadioButton49.Size = New System.Drawing.Size(17, 16) + Me.RadioButton49.TabIndex = 5 + Me.RadioButton49.UseVisualStyleBackColor = True + ' + 'Panel50 + ' + Me.Panel50.Controls.Add(Me.RadioButton50) + Me.Panel50.Location = New System.Drawing.Point(4, 37) + Me.Panel50.Name = "Panel50" + Me.Panel50.Size = New System.Drawing.Size(17, 16) + Me.Panel50.TabIndex = 24 + ' + 'RadioButton50 + ' + Me.RadioButton50.AutoSize = True + Me.RadioButton50.Location = New System.Drawing.Point(0, 0) + Me.RadioButton50.Name = "RadioButton50" + Me.RadioButton50.Size = New System.Drawing.Size(17, 16) + Me.RadioButton50.TabIndex = 5 + Me.RadioButton50.UseVisualStyleBackColor = True + ' + 'AnimationCheckbox + ' + Me.AnimationCheckbox.AutoSize = True + Me.AnimationCheckbox.Location = New System.Drawing.Point(12, 402) + Me.AnimationCheckbox.Name = "AnimationCheckbox" + Me.AnimationCheckbox.Size = New System.Drawing.Size(92, 21) + Me.AnimationCheckbox.TabIndex = 25 + Me.AnimationCheckbox.Text = "Animation" + Me.AnimationCheckbox.UseVisualStyleBackColor = True + ' + 'Button3 + ' + Me.Button3.Location = New System.Drawing.Point(155, 395) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(118, 28) + Me.Button3.TabIndex = 3 + Me.Button3.Text = "View on Wiki" + Me.Button3.UseVisualStyleBackColor = True + ' + 'About + ' + Me.AcceptButton = Me.Button1 + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(463, 430) + Me.Controls.Add(Me.AnimationCheckbox) + Me.Controls.Add(Me.Panel27) + Me.Controls.Add(Me.Panel26) + Me.Controls.Add(Me.Panel28) + Me.Controls.Add(Me.Panel25) + Me.Controls.Add(Me.Panel29) + Me.Controls.Add(Me.Panel30) + Me.Controls.Add(Me.Panel24) + Me.Controls.Add(Me.Panel31) + Me.Controls.Add(Me.Panel23) + Me.Controls.Add(Me.Panel32) + Me.Controls.Add(Me.Panel22) + Me.Controls.Add(Me.Panel33) + Me.Controls.Add(Me.Panel21) + Me.Controls.Add(Me.Panel34) + Me.Controls.Add(Me.Panel20) + Me.Controls.Add(Me.Panel35) + Me.Controls.Add(Me.Panel19) + Me.Controls.Add(Me.Panel36) + Me.Controls.Add(Me.Panel18) + Me.Controls.Add(Me.Panel37) + Me.Controls.Add(Me.Panel17) + Me.Controls.Add(Me.Panel38) + Me.Controls.Add(Me.Panel16) + Me.Controls.Add(Me.Panel39) + Me.Controls.Add(Me.Panel15) + Me.Controls.Add(Me.Panel40) + Me.Controls.Add(Me.Panel14) + Me.Controls.Add(Me.Panel41) + Me.Controls.Add(Me.Panel13) + Me.Controls.Add(Me.Panel42) + Me.Controls.Add(Me.Panel12) + Me.Controls.Add(Me.Panel43) + Me.Controls.Add(Me.Panel11) + Me.Controls.Add(Me.Panel50) + Me.Controls.Add(Me.Panel49) + Me.Controls.Add(Me.Panel48) + Me.Controls.Add(Me.Panel47) + Me.Controls.Add(Me.Panel46) + Me.Controls.Add(Me.Panel45) + Me.Controls.Add(Me.Panel44) + Me.Controls.Add(Me.Panel10) + Me.Controls.Add(Me.Panel9) + Me.Controls.Add(Me.Panel8) + Me.Controls.Add(Me.Panel7) + Me.Controls.Add(Me.Panel6) + Me.Controls.Add(Me.Panel5) + Me.Controls.Add(Me.Panel4) + Me.Controls.Add(Me.Panel3) + Me.Controls.Add(Me.Panel2) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Button3) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.ToTheBestGirlfriendEver) + Me.Controls.Add(Me.Label5) + Me.Controls.Add(Me.Label4) + Me.Controls.Add(Me.Label7) + Me.Controls.Add(Me.Label3) + Me.Controls.Add(Me.PictureBox3) + Me.Controls.Add(Me.PictureBox2) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.ProgressBar1) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.Label1) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "About" + Me.Text = "About Notepad Ultra" + CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.Panel3.ResumeLayout(False) + Me.Panel3.PerformLayout() + Me.Panel4.ResumeLayout(False) + Me.Panel4.PerformLayout() + Me.Panel5.ResumeLayout(False) + Me.Panel5.PerformLayout() + Me.Panel6.ResumeLayout(False) + Me.Panel6.PerformLayout() + Me.Panel7.ResumeLayout(False) + Me.Panel7.PerformLayout() + Me.Panel8.ResumeLayout(False) + Me.Panel8.PerformLayout() + Me.Panel9.ResumeLayout(False) + Me.Panel9.PerformLayout() + Me.Panel10.ResumeLayout(False) + Me.Panel10.PerformLayout() + Me.Panel11.ResumeLayout(False) + Me.Panel11.PerformLayout() + Me.Panel12.ResumeLayout(False) + Me.Panel12.PerformLayout() + Me.Panel13.ResumeLayout(False) + Me.Panel13.PerformLayout() + Me.Panel14.ResumeLayout(False) + Me.Panel14.PerformLayout() + Me.Panel15.ResumeLayout(False) + Me.Panel15.PerformLayout() + Me.Panel16.ResumeLayout(False) + Me.Panel16.PerformLayout() + Me.Panel17.ResumeLayout(False) + Me.Panel17.PerformLayout() + Me.Panel18.ResumeLayout(False) + Me.Panel18.PerformLayout() + Me.Panel19.ResumeLayout(False) + Me.Panel19.PerformLayout() + Me.Panel20.ResumeLayout(False) + Me.Panel20.PerformLayout() + Me.Panel21.ResumeLayout(False) + Me.Panel21.PerformLayout() + Me.Panel22.ResumeLayout(False) + Me.Panel22.PerformLayout() + Me.Panel23.ResumeLayout(False) + Me.Panel23.PerformLayout() + Me.Panel24.ResumeLayout(False) + Me.Panel24.PerformLayout() + Me.Panel25.ResumeLayout(False) + Me.Panel25.PerformLayout() + Me.Panel26.ResumeLayout(False) + Me.Panel26.PerformLayout() + Me.Panel27.ResumeLayout(False) + Me.Panel27.PerformLayout() + Me.Panel28.ResumeLayout(False) + Me.Panel28.PerformLayout() + Me.Panel29.ResumeLayout(False) + Me.Panel29.PerformLayout() + Me.Panel30.ResumeLayout(False) + Me.Panel30.PerformLayout() + Me.Panel31.ResumeLayout(False) + Me.Panel31.PerformLayout() + Me.Panel32.ResumeLayout(False) + Me.Panel32.PerformLayout() + Me.Panel33.ResumeLayout(False) + Me.Panel33.PerformLayout() + Me.Panel34.ResumeLayout(False) + Me.Panel34.PerformLayout() + Me.Panel35.ResumeLayout(False) + Me.Panel35.PerformLayout() + Me.Panel36.ResumeLayout(False) + Me.Panel36.PerformLayout() + Me.Panel37.ResumeLayout(False) + Me.Panel37.PerformLayout() + Me.Panel38.ResumeLayout(False) + Me.Panel38.PerformLayout() + Me.Panel39.ResumeLayout(False) + Me.Panel39.PerformLayout() + Me.Panel40.ResumeLayout(False) + Me.Panel40.PerformLayout() + Me.Panel41.ResumeLayout(False) + Me.Panel41.PerformLayout() + Me.Panel42.ResumeLayout(False) + Me.Panel42.PerformLayout() + Me.Panel43.ResumeLayout(False) + Me.Panel43.PerformLayout() + Me.Panel44.ResumeLayout(False) + Me.Panel44.PerformLayout() + Me.Panel45.ResumeLayout(False) + Me.Panel45.PerformLayout() + Me.Panel46.ResumeLayout(False) + Me.Panel46.PerformLayout() + Me.Panel47.ResumeLayout(False) + Me.Panel47.PerformLayout() + Me.Panel48.ResumeLayout(False) + Me.Panel48.PerformLayout() + Me.Panel49.ResumeLayout(False) + Me.Panel49.PerformLayout() + Me.Panel50.ResumeLayout(False) + Me.Panel50.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents PictureBox1 As PictureBox + Friend WithEvents Label1 As Label + Friend WithEvents Label2 As Label + Friend WithEvents Label3 As Label + Friend WithEvents Label4 As Label + Friend WithEvents Label5 As Label + Friend WithEvents ToTheBestGirlfriendEver As Label + Friend WithEvents Button1 As Button + Friend WithEvents Label7 As Label + Friend WithEvents PictureBox2 As PictureBox + Friend WithEvents PictureBox3 As PictureBox + Friend WithEvents Button2 As Button + Friend WithEvents ProgressBar1 As ProgressBar + Friend WithEvents BlinkenlightsTimer As Timer + Friend WithEvents RadioButton1 As RadioButton + Friend WithEvents Panel1 As Panel + Friend WithEvents Panel2 As Panel + Friend WithEvents RadioButton2 As RadioButton + Friend WithEvents Panel3 As Panel + Friend WithEvents RadioButton3 As RadioButton + Friend WithEvents Panel4 As Panel + Friend WithEvents RadioButton4 As RadioButton + Friend WithEvents Panel5 As Panel + Friend WithEvents RadioButton5 As RadioButton + Friend WithEvents Panel6 As Panel + Friend WithEvents RadioButton6 As RadioButton + Friend WithEvents Panel7 As Panel + Friend WithEvents RadioButton7 As RadioButton + Friend WithEvents Panel8 As Panel + Friend WithEvents RadioButton8 As RadioButton + Friend WithEvents Panel9 As Panel + Friend WithEvents RadioButton9 As RadioButton + Friend WithEvents Panel10 As Panel + Friend WithEvents RadioButton10 As RadioButton + Friend WithEvents Panel11 As Panel + Friend WithEvents RadioButton11 As RadioButton + Friend WithEvents Panel12 As Panel + Friend WithEvents RadioButton12 As RadioButton + Friend WithEvents Panel13 As Panel + Friend WithEvents RadioButton13 As RadioButton + Friend WithEvents Panel14 As Panel + Friend WithEvents RadioButton14 As RadioButton + Friend WithEvents Panel15 As Panel + Friend WithEvents RadioButton15 As RadioButton + Friend WithEvents Panel16 As Panel + Friend WithEvents RadioButton16 As RadioButton + Friend WithEvents Panel17 As Panel + Friend WithEvents RadioButton17 As RadioButton + Friend WithEvents Panel18 As Panel + Friend WithEvents RadioButton18 As RadioButton + Friend WithEvents Panel19 As Panel + Friend WithEvents RadioButton19 As RadioButton + Friend WithEvents Panel20 As Panel + Friend WithEvents RadioButton20 As RadioButton + Friend WithEvents Panel21 As Panel + Friend WithEvents RadioButton21 As RadioButton + Friend WithEvents Panel22 As Panel + Friend WithEvents RadioButton22 As RadioButton + Friend WithEvents Panel23 As Panel + Friend WithEvents RadioButton23 As RadioButton + Friend WithEvents Panel24 As Panel + Friend WithEvents RadioButton24 As RadioButton + Friend WithEvents Panel25 As Panel + Friend WithEvents RadioButton25 As RadioButton + Friend WithEvents Panel26 As Panel + Friend WithEvents RadioButton26 As RadioButton + Friend WithEvents Panel27 As Panel + Friend WithEvents RadioButton27 As RadioButton + Friend WithEvents Panel28 As Panel + Friend WithEvents RadioButton28 As RadioButton + Friend WithEvents Panel29 As Panel + Friend WithEvents RadioButton29 As RadioButton + Friend WithEvents Panel30 As Panel + Friend WithEvents RadioButton30 As RadioButton + Friend WithEvents Panel31 As Panel + Friend WithEvents RadioButton31 As RadioButton + Friend WithEvents Panel32 As Panel + Friend WithEvents RadioButton32 As RadioButton + Friend WithEvents Panel33 As Panel + Friend WithEvents RadioButton33 As RadioButton + Friend WithEvents Panel34 As Panel + Friend WithEvents RadioButton34 As RadioButton + Friend WithEvents Panel35 As Panel + Friend WithEvents RadioButton35 As RadioButton + Friend WithEvents Panel36 As Panel + Friend WithEvents RadioButton36 As RadioButton + Friend WithEvents Panel37 As Panel + Friend WithEvents RadioButton37 As RadioButton + Friend WithEvents Panel38 As Panel + Friend WithEvents RadioButton38 As RadioButton + Friend WithEvents Panel39 As Panel + Friend WithEvents RadioButton39 As RadioButton + Friend WithEvents Panel40 As Panel + Friend WithEvents RadioButton40 As RadioButton + Friend WithEvents Panel41 As Panel + Friend WithEvents RadioButton41 As RadioButton + Friend WithEvents Panel42 As Panel + Friend WithEvents RadioButton42 As RadioButton + Friend WithEvents Panel43 As Panel + Friend WithEvents RadioButton43 As RadioButton + Friend WithEvents Panel44 As Panel + Friend WithEvents RadioButton44 As RadioButton + Friend WithEvents Panel45 As Panel + Friend WithEvents RadioButton45 As RadioButton + Friend WithEvents Panel46 As Panel + Friend WithEvents RadioButton46 As RadioButton + Friend WithEvents Panel47 As Panel + Friend WithEvents RadioButton47 As RadioButton + Friend WithEvents Panel48 As Panel + Friend WithEvents RadioButton48 As RadioButton + Friend WithEvents Panel49 As Panel + Friend WithEvents RadioButton49 As RadioButton + Friend WithEvents Panel50 As Panel + Friend WithEvents RadioButton50 As RadioButton + Friend WithEvents ToolTip1 As ToolTip + Friend WithEvents AnimationCheckbox As CheckBox + Friend WithEvents Button3 As Button +End Class diff --git a/About.resx b/About.resx new file mode 100644 index 0000000..a7ca3b0 --- /dev/null +++ b/About.resx @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 199, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAA9QTFRFAAAA + 0NDQ/0Hk/6jy////kCl+CgAAAIJJREFUaN7t07ERwCAMQ1FW8ApZISuw/0xJkUIhEI6jk78ac9i8ypRj + MwAeQJWUO3UxAL6AQjMUwBvoYQD5gBYCyAu0Z4BcwGfoZ6EAcgGjPoAvcD7R+6VFArABtI4eA/gDukht + X88A3oBWgLwAfwGg91hnXhCALbASAA8gNgNgAERcnnlze5/OTgMAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAA + AQABDg4ODw8P/wDc6Ojo////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Xoh9wAAAAlwSFlzAAAS + cwAAEnMBjCK5BwAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMzQDW3oAAAKOSURBVHhe7Zpb + biQxDAOzz/sfeeEiATENrQ1kJj1BoPoqkhO3DpC3Yfga/H4J/vjCzc344ws3N+OPL9zcjD++cHMz/vjC + zc3448Pwan4s/v4ffmR/Mjw9B8wBwk1H7KFFlCgowyajQkVL7KFFlCgowyajQkVL7KFFlCgowyajQkVL + 7KFFlCgowyajQkVL7KFFlCgowyajQkVL7KFFlCgowyajQkVL7CgoQ+RSLBQTkVGhoiV2FJQhcikWionI + qFDREjsKyhC5FAvFRGRUqGiJHQVliFyKhWIiMipUtMSOgjJELsVCMREZFSpaYi/FQrF4UBk2GRUqWmIv + xUKxeFAZNhkVKlpiL8VCsXhQGTYZFSpaYi/FQrF4UBk2GRUqWmIvxUKxeFAZNhkVKlpiDwUyRJYW1zIy + KlS0xB4KZIgsLa5lZFSoaIk9FMgQWVpcy8ioUNESeyiQIbK0uJaRUaGiJfZQIENkaXEtI6NCRUvsoUCG + yNLiWkZGhYqW2EOLKEMvsAg3CzcLNx2xhxZRhl5gEW4WbhZuOmIPLaIMvcAi3CzcLNx0xB5aRBl6gUW4 + WbhZuOmIPbSIMvQCi3CzcLNw03HaH4CnhZuO0/4APC3cdJz2B+Bp4abjtD8ATws3Haf9AXhauOnY7Ewt + /sGBn4vjH2x2phb/4MAcMAc85wD7e1iOZ8wBc8AnHiBO+xwwB3ziASy7V2EOmAO+yQEt/sGBOWAOeM4B + 9vewHM+YA+aATzxAnPY5YA74zgew7F6FOWAOeM4BLf7BgTlgDnjOAfaPMAfMAV/kgA/9Wy/lI9+GX4s5 + YA7QU8Pwcv68BH984eZm/PGFm5vxxxdubsYfX7i5GX984eZm/PFheClvb/8AP3vyrOtaVvAAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAABhQTFRFAAAA + BwcHCgAIGRkZIgAd/wDc0NDQ////gg3c7AAAAMpJREFUaN7t1sENwyAMBdC/gldgBVZgha7QFbx+D02I + RRSJ1gRQ+P8I+B2CgSCE5EgIDYCXK/ADyQekJwAT9IGekrQ+DQCcB/EDAAIECDweyOO41NETwDd9gX2l + rcJqwLZ0bcDUTgD808oNgEIxZQsBuZ1WBhQEVMsTZGZ0FGDP9p1AbQgQILAGsE9u18fxj2GKbgbKhy2/ + d2bo6QCKx+P4pr0A7kLZygOAmhAgQIAAAQJzAeIHRKIj0gCIb1ficAB+QMYDvm30AoIPHVzY4einv4cA + AAAASUVORK5CYII= + + + + 17, 17 + + \ No newline at end of file diff --git a/About.vb b/About.vb new file mode 100644 index 0000000..4efabd2 --- /dev/null +++ b/About.vb @@ -0,0 +1,74 @@ +Public Class About + Dim BlinkenLights(50) As RadioButton + Dim FirstLightFirstRound As Boolean = False + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + Close() + End Sub + + Private Sub About_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() 'so you can see the icon in the taskbar + For i = 1 To 50 + BlinkenLights(i - 1) = Controls.Find("RadioButton" & i, True)(0) + If (i Mod 3) = 0 Then BlinkenLights(i - 1).Checked = True + Next + BlinkenLights(0).Checked = True + BlinkenlightsTimer.Start() + AnimationCheckbox.Checked = True + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + 'Process.Start("Changelog.txt") + ChangelogViewer.Show() + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + Process.Start("http://25.60.11.62/wiki/index.php/Notepad_Ultra") + End Sub + + Private Sub BlinkenlightsTimer_Tick(sender As Object, e As EventArgs) Handles BlinkenlightsTimer.Tick + 'i regret nothing. + For i = 49 To 0 Step -1 + If BlinkenLights(i).Checked Then + If FirstLightFirstRound = True And i = 0 Then + FirstLightFirstRound = False + Else + BlinkenLights(i).Checked = False + If i <> 49 Then + BlinkenLights(i + 1).Checked = True + Else + BlinkenLights(0).Checked = True + FirstLightFirstRound = True + End If + End If + + End If + Next + End Sub + + Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, RadioButton4.Click, RadioButton5.Click, RadioButton6.Click, RadioButton7.Click, RadioButton8.Click, RadioButton9.Click, RadioButton10.Click, RadioButton11.Click, RadioButton12.Click, RadioButton13.Click, RadioButton14.Click, RadioButton15.Click, RadioButton16.Click, RadioButton17.Click, RadioButton18.Click, RadioButton19.Click, RadioButton20.Click, RadioButton21.Click, RadioButton22.Click, RadioButton23.Click, RadioButton24.Click, RadioButton25.Click, RadioButton26.Click, RadioButton27.Click, RadioButton28.Click, RadioButton29.Click, RadioButton30.Click, RadioButton31.Click, RadioButton32.Click, RadioButton33.Click, RadioButton34.Click, RadioButton35.Click, RadioButton36.Click, RadioButton37.Click, RadioButton38.Click, RadioButton39.Click, RadioButton40.Click, RadioButton41.Click, RadioButton42.Click, RadioButton43.Click, RadioButton44.Click, RadioButton45.Click, RadioButton46.Click, RadioButton47.Click, RadioButton48.Click, RadioButton49.Click, RadioButton50.Click + 'once again: i regret nothing. + BlinkenlightsTimer.Stop() + Dim modstep As Integer = Rnd() * 7 + 2 + For i = 1 To 50 + BlinkenLights(i - 1).Checked = False + If (i Mod modstep) = 0 Then BlinkenLights(i - 1).Checked = True + Next + If Not BlinkenLights(0).Checked Then BlinkenLights(0).Checked = True + BlinkenlightsTimer.Interval = Rnd() * 250 + 50 + BlinkenlightsTimer.Start() + End Sub + + Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click + For i = 0 To 49 + BlinkenLights(i).Enabled = Not BlinkenLights(i).Enabled + Next + End Sub + + Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles AnimationCheckbox.CheckedChanged + For i = 0 To 49 + BlinkenLights(i).Visible = AnimationCheckbox.Checked + Next + ProgressBar1.Visible = AnimationCheckbox.Checked + If Not AnimationCheckbox.Checked Then BlinkenlightsTimer.Stop() Else BlinkenlightsTimer.Start() + End Sub +End Class \ No newline at end of file diff --git a/App.config b/App.config new file mode 100644 index 0000000..692fd33 --- /dev/null +++ b/App.config @@ -0,0 +1,205 @@ + + + + +
+ + + + + + + + + Lucida Console, 12pt + + + True + + + ///FIRST RUN/// + + + True + + + 0 + + + True + + + True + + + 50 + + + 256 + + + White + + + Black + + + Black + + + 224, 224, 224 + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + RoyalBlue + + + White + + + Control + + + Black + + + Black + + + Control + + + Black + + + Control + + + + + txt + cfg + ini + log + + + + + Black + + + White + + + White + + + Black + + + White + + + RoyalBlue + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + 0 + + + False + + + True + + + False + + + True + + + True + + + True + + + True + + + True + + + + + + + + + + True + + + True + + + 0 + + + + diff --git a/ApplicationEvents.vb b/ApplicationEvents.vb new file mode 100644 index 0000000..748dc38 --- /dev/null +++ b/ApplicationEvents.vb @@ -0,0 +1,10 @@ +Namespace My + ' The following events are available for MyApplication: + ' Startup: Raised when the application starts, before the startup form is created. + ' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. + ' UnhandledException: Raised if the application encounters an unhandled exception. + ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. + ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. + Partial Friend Class MyApplication + End Class +End Namespace diff --git a/Changelog.txt b/Changelog.txt new file mode 100644 index 0000000..c979156 --- /dev/null +++ b/Changelog.txt @@ -0,0 +1,215 @@ +CHANGELOG + Really minor things (fixing typos, adding comments, minor restructures) aren't mentioned. + +Alpha 0.1 - Genesis + Initial version! + Reading files + Writing files + +Alpha 0.2 - The Basics + Support for displaying directories + Rudimentary encoding support + Scaling fixes + +Alpha 0.3 - Cementing the Basics + Complete (I think) encoding support + Full directory support! + UI enhancements + Started working on settings + +Alpha 0.4 - The Big One + Fixed numerous bugs related to file deletion (both internal and external) + Made Save As open the saved file after saving + Made "Change font size" options work + Added shortcuts for deleting files and for refreshing the file picker + Made font-change shortcuts work + "Couldn't detect encoding" message boxes have been replaced with a much less obtrusive warning in the bottom-left + Changed Save As from Ctrl-Alt-S to Ctrl-Shift-S (because Ctrl-Alt-S opens a System Information dialogue on my Spectre) (Suggested by Pet!) + Fixed issue where filepicker without scrollbar caused text to overflow from window (Spotted by Pet) + Fixed issue where deleting a file, or opening a new directory, followed by clicking on blank space in the file picker, would cause a crash (Pet) + Added insert time/date functionality + +Alpha 0.5 - When Things got *Really* Serious + Settings dialogue reads settings, but can't write them yet (It's 0049 and I'm tired) + Cleaned up changelog ;p + Added supported for 3 tiers of notifications + Changed font size changing mechanics, and made it into a dropdown instead of a split button + Moved notifications to the right-hand side, because avoiding text jumping around is more important than making sure they're visible in narrow windows (I think) + Added a FIFO queue for notifications! + Fixed an issue where the filepicker would be much too wide on low DPI screens + Added first settings tooltip + Created a form for theme customisation + Added file size and creation date info to the file info dialogue + +Alpha 0.6 - Tweaks and Features + (Partial) THEME SUPPORT! So far, saving is not supported. Themes can be edited, but not saved. Theme support was sorta Pet's idea (she thought it would be cool to be able to modify the night mode's colours, I took it from there) + Added a form to change supported file extensions + Added support for extensions other than txt + Replaced night mode toggle with support for 3 customisable themes + Added a directory watch feature. If any files in the base directory are deleted/renamed/created, the filepicker will automatically refresh. + Fixed some rather nasty bugs related to the directory watcher + Implemented a Find feature! However, when the textbox has been scrolled to the bottom, each click of the "next" button causes it to jump one line up or down. + +Alpha 0.7 - The Theme Update + Themes are now saved and remembered between sessions! + Fixed a possible bug where changing directories would not update the directory watcher + All options in the settings menu now have tooltips + Settings now save + (Very) small speed optimisations + HUGE speed increase to saving, restoring it to Alpha 0.5 speed. The directory watcher refreshed the file list over and over again while saving, and saving could take anywhere up to three seconds! + Added a warning that displays if you try to exit or change file without saving your changes + +Alpha 0.8 - Serious Business + Fixed an issue where using UNC paths would break upon going up a level + Converted the changelog from a .vb file to a .txt file, which is what it should've been all along + Moved a fair amount of functions into Extensions.vb so they can be accessed globally, which means less reinvention of the wheel + Added a form for editing the preset directories, I'll work on it when it's not 0340 + Added in the default colours for the standard theme. Fuck this, I'm going to sleep. See you in 0.9! + +Alpha 0.9 - It's the Little Things + Fixed a bug that caused notification theme settings not to be displayed in the theme previewer + Fixed bugs related to theme saving and loading + Added and implemented restoration of default themes + Started work on status bar options + +Alpha 0.10 - Slow Day + Status bar options are now fully implemented + Minor code cleanups here and there + [I thought I was going to sleep at this point, but my sleep schedule is already fucked badly, so I didn't] + Removed debug code in Find dialogue + Started work on replace (as in find & replace) dialogue + Added an option to highlight all instances of the find string. Sleep is for the weak. + Copied the highlight all code over to the replace dialogue. It's 0258, and I think I'll start being healthy and going to sleep before 0300, so I'm out. + +Alpha 0.11 - Fulfilling Promises + Fixed a bug that caused the find dialogue to count, but ignore the last character of the file when searching + Fixed a bug that made NPU fail to load the user's settings if an error occurred during startup + Implemented "Match Case" and "Whole Word" for the find and replace dialogues! + Fixed a bug that arose when the File Picker automatically reselected the file you were working on. If the file had unsaved changes, you would be asked to save those changes or discard them and reload from the disk, instead of just keeping them in memory. Thanks to Pet for telling me. + Replace dialogue is now capable of replacing + Duplication support + NPU now prevents you from going up from the root directory of a given path + Files can now be right-clicked in the sidebar, presenting the user with options to delete or reveal the file + +Alpha 0.12 - Some Semblance of Professionalism + Printing support! + Added a placeholder(?) icon + Added a shitty licence to stop people stealing the glorious, mountainous revenue I expect to make ($0.00) from this one-of-a-kind, expertly written divine experience in the form of a beautiful piece of perfect software. The licence, named with the exceptionally witty and clever title of "Lynnecence 1.0", is pretty much MPL's chill, unemployed cousin who lets you do irresponsible stuff while still worrying about you + File loading is now asynchronous, and there's even a dandy little progress bar! + Added a warning message for when a file takes more than 10 seconds to load + Fixed a crash upon right-clicking on empty space in the File Picker (thanks Pet) + Sorted TODO in Changelog.txt by importance (in my opinion) + Added PostSharp (https://www.postsharp.net/download) because I just discovered that you can add PostSharp + +Alpha 0.13 - The THICC Update + Added a splash screen! + Started working on handling "Open with" + Fixed a bug where anything typed the first second after saving a file would be deleted + Files save more quickly + Fixed a bug that caused the title bar to end up like "Notepad Ultra: file.txt (Unsaved) (Unsaved) (Unsaved) (Unsaved) (Unsaved)" when saving the same file multiple times + Open With now works, probably! ~u0 + You can now no longer get info, duplicate, or delete files that don't yet exist + Removed PostSharp because I decided to make my own undo function because I'm hardcore and doesn't afraid of anything + UNDO SUPPORT! \0u0/ + Partial undo settings support! + Changed a few " "s in the changelog to tabs + +Beta 0.1 - General Use, Maybe? + Default file open settings are now used + Updated the icon to reflect beta state + Added a changelog viewer to the About menu + Finally added the most important feature: The "about" dialogue has a cool light display! And just in time for Christmas, too! ;p + Disabled pasting of rich text (I didn't realise it was enabled) because Notepad Ultra isn't meant to replace WordPad + Lots of little changes! + +Beta 0.2 - User Friendlier + Improved saving of new files + Fixed a crash when using the find operation + Removed Unix2Dos dependency, increasing speed and reliability while reducing file size! 0u0 + Renamed RemoveEnding to RemoveLast + Main window is now titled "file.txt - Notepad Ultra" instead of "Notepad Ultra: file.txt" + Fixed a bug that made changing supported extensions not work + [NOTE: Development will be slowing down from now own, i'm working on some private projects ~u0] + +Beta 0.3 - Can she fix it? Yes she can! (So much for development slowing down...) + Fixed another bug related to supported extensions + Slight code improvements + Prevented removal of the txt file extension + Page setup + When closing with an unsaved new file, the prompt read 'Save changes made to ""?', which has been replaced with 'Save changes made to new file?' + Automatic insertion of bullet points (and dashes) is now possible! + Added a button to toggle overtype + Rearranged the file menu + Removed the border around the text file holder + Added the border back, because it looks terrible if your filepicker doesn't have a scrollbar (thanks pet) + Fixed yet /another/ bug related to supported extensions + Fixed a crash that would occur when you opened, closed, and reopened the settings dialogue + Fixed some inconsistencies between spaces and tabs in some files + Fixed a bug where cancelling the open file dialogue would leave NPU running in the background + If your working directory cannot be found when you open a passed file, disable the copy and move options rather than the set directory option + Fixed a bug that caused npu to close half a second after opening a passed file because I'm an idiot + Fixed a stupid, stupid bug with the GetFileExtension() function because I'm a moron + Fixed many a bug related to opening passed files + Updated Extensions.vb with the latest version from another classic Lynnear Software title, "Waifu2X GUI" + Commented the FUCK out of the main file! Now this is my idea of a fun Saturday night! And by night, I mean 0243! + +Beta 0.4 - Out, damned bug! + If a file fails to load, instead of freezing the program and requiring a taskkill (or similar), it resets to the default state + Updated the "copyright" to say 2017 + Removed pointless rgbColour function + Fixed many, many bugs and inefficiencies with automatic bullets + Also, automatic bullets now have an additional space behind them, to make them neater! + Fixed bugs with undo + Undo limit now defaults to 50 instead of 10, and is capped at 500 instead of 100 (unlimited is still available). Memory is cheap! ;p + Instead of defaulting to my personal text files folder on first run, npu now defaults to the user's documents folder! + Removed a goto statement of very questionable necessity + Trying to open directories that you can't open (e.g. C:\Documents and Settings\) no longer crashes npu + Theme editor's "Copy" buttons now work! + Fixed inconsistencies with sizing + Implemented a rather icky fix for auto bullets causing a crash when word wrap was on + +Beta 0.5 - The Breddy Gud Update + Now supports renaming files! + Also, added move functionality! + Some cheeky DPI fixes + Default theme buttons! + Rearranged theme customisation UI slightly + Redo is now Ctrl Y as it should be, and, not Ctrl Shift Z. Th-thanks, Microsoft + Fixed a small issue with the redraw function causing the text file holder to slightly overlap the status bar if the sidebar was hidden + Fixed a bug where trying to print without an installed printer would cause a crash, maybe? + Fixed an issue that caused newly moved/renamed files to be treated as new files + +Beta 0.6 - The PHP Era + Files can be renamed via the right click menu + Right click menu no longer works on currently open item (intentional) + Find & replace is now the standard Ctrl H, not Ctrl G + Updated the "copyright" on the about page + +Beta 0.7 - Unfuckery + Right click menu works on currently open item ~u0 + Added wiki link to about box + Added a cancel option to the "Save changes before closing?" dialogue + Very minor corrections + Clicking a notification now dismisses it and shows the next one rather than just turning it invisible and still having it be there + Working on fixing a bug that I can't reproduce within the debugger that causes NPU to crash when closing an unsaved file + NPU no longer clears the clipboard on exit + Files save faster now + Removed "no compatible files" notification + Added "Use notepad.exe" button to open passed file dialogue (In addition to Relocate/Move/Copy) + File extensions are now case insensitive + +TODO: + Custom path quick links! + Fix weird "Replace All" behaviour + Implement undo settings + Handle being located in Program Files, or anywhere else where you need admin for everything + Resizeable sidebar? + Show ellipses if name in filepicker is too long? + Encryption? + Make it so that you can't use NPU while any settings dialogues are open + Export/Import themes + Occasionally crashes on exit. Replicate, debug, fix + +COMMITS: + Style commit messages like this + [VERSION], [TRADEMARK WITTY DIALOGUE]. New/Changed: [NEW STUFF]. Fixed: [FIXES]. Removed: [REMOVED STUFF]. \ No newline at end of file diff --git a/Changelog.vb b/Changelog.vb new file mode 100644 index 0000000..37338f8 --- /dev/null +++ b/Changelog.vb @@ -0,0 +1,77 @@ +Module Changelog + 'CHANGELOG + + 'Alpha 0.1: Initial version. Open, save, delete. + + 'Alpha 0.2 + ' Support for displaying directories + ' Rudimentary encoding support + ' Scaling fixes + + 'Alpha 0.3 + ' Complete (I think) encoding support + ' Full directory support! + ' UI enhancements + ' Started working on settings + + 'Alpha 0.4 (The big one) + ' Fixed numerous bugs related To file deletion (both internal And external) + ' Made Save As open the saved file after saving + ' Made "Change font size" options work + ' Added shortcuts for deleting files and for refreshing the file picker + ' Made font-change shortcuts work + ' "Couldn't detect encoding" message boxes have been replaced with a much less obtrusive warning in the bottom-left + ' Changed Save As from Ctrl-Alt-S to Ctrl-Shift-S (because Ctrl-Alt-S opens a System Information dialogue on my Spectre) + ' Fixed issue where filepicker without scrollbar caused text to overflow from window + ' Fixed issue where deleting a file, or opening a new directory, followed by clicking on blank space in the file picker, would cause a crash + ' Added insert time/date functionality + + 'Alpha 0.5 (When things got *really* serious) + ' Settings dialogue reads settings, but can't write them yet (It's 0049 and I'm tired) + ' Cleaned up changelog ;p + ' Added supported for 3 tiers of notifications + ' Changed font size changing mechanics, and made it into a dropdown instead of a split button + ' Moved notifications to the right-hand side, because avoiding text jumping around is more important than making sure they're visible in narrow windows (I think) + ' Added a FIFO queue for notifications! + ' Fixed an issue where the filepicker would be much too wide on low DPI screens + ' Added first settings tooltip + ' Created a form for theme customisation + ' Added file size and creation date info to the file info dialogue + + 'Alpha 0.6 + ' (Partial) THEME SUPPORT! So far, saving is not supported. Themes can be edited, but not saved. + ' Added a form to change supported file extensions + ' Added support for extensions other than txt + ' Replaced night mode toggle with support for 3 customisable themes + ' Added a directory watch feature. If any files in the base directory are deleted/renamed/created, the filepicker will automatically refresh. + ' Fixed some rather nasty bugs related to the directory watcher + ' Implemented a Find feature. However, when the textbox has been scrolled to the bottom, each click of the "next" button causes it to jump one line up or down. + + 'Alpha 0.7 + ' Themes are now saved and remembered between sessions! + ' Fixed a possible bug where changing directories would not update the directory watcher + ' All options in the settings menu now have tooltips + ' Settings now save + ' (Very) small speed optimisations + ' HUGE speed increase to saving, restoring it to Alpha 0.5 speed. The directory watcher refreshed the file list over and over again while saving, and saving could take anywhere up to three seconds! + ' Added a warning that displays if you try to exit or change file without saving your changes + + 'Alpha 0.8 + ' Fixed an issue where using UNC paths would break upon going up a level + + 'TODO: + ' Bullet points + ' Undo + ' Replace + ' Make right-click on sidebar change file + ' Make right-click menu on sidebar actually do stuff + ' Status Bar options (Whether or not to show or hide certain things. Notifications CAN NOT BE DISABLED. They're really important!) + ' Show ellipses if name in filepicker is too long? + ' Make it so that you can't use NPU while any settings dialogues are open + ' Resizeable sidebar? + ' Export/Import themes + ' Put "Go Up" in filepicker + ' Default themes + ' Right click to restore defaults for theme options + +End Module diff --git a/ChangelogViewer.Designer.vb b/ChangelogViewer.Designer.vb new file mode 100644 index 0000000..fd9d793 --- /dev/null +++ b/ChangelogViewer.Designer.vb @@ -0,0 +1,64 @@ + _ +Partial Class ChangelogViewer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.RichTextBox1 = New System.Windows.Forms.RichTextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.SuspendLayout() + ' + 'RichTextBox1 + ' + Me.RichTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.RichTextBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.15!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RichTextBox1.Location = New System.Drawing.Point(1, 1) + Me.RichTextBox1.Name = "RichTextBox1" + Me.RichTextBox1.Size = New System.Drawing.Size(270, 197) + Me.RichTextBox1.TabIndex = 0 + Me.RichTextBox1.Text = "Reading..." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(316, 75) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(122, 17) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "no waifu = no laifu" + ' + 'ChangelogViewer + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(868, 473) + Me.Controls.Add(Me.RichTextBox1) + Me.Controls.Add(Me.Label1) + Me.Name = "ChangelogViewer" + Me.Text = "Changelog" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents RichTextBox1 As RichTextBox + Friend WithEvents Label1 As Label +End Class diff --git a/ChangelogViewer.resx b/ChangelogViewer.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/ChangelogViewer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ChangelogViewer.vb b/ChangelogViewer.vb new file mode 100644 index 0000000..a97c176 --- /dev/null +++ b/ChangelogViewer.vb @@ -0,0 +1,14 @@ +Public Class ChangelogViewer + Private Sub ChangelogViewer_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() + RichTextBox1.Top = 0 + RichTextBox1.Left = 0 + Redraw() + Refresh() + RichTextBox1.Text = My.Computer.FileSystem.ReadAllText("Changelog.txt") + End Sub + Public Sub Redraw() Handles Me.ResizeBegin, Me.ResizeEnd, Me.Resize + RichTextBox1.Width = Width - 20 + RichTextBox1.Height = Height - 47 + End Sub +End Class \ No newline at end of file diff --git a/Customise Colours.Designer.vb b/Customise Colours.Designer.vb new file mode 100644 index 0000000..a690ca1 --- /dev/null +++ b/Customise Colours.Designer.vb @@ -0,0 +1,310 @@ + _ +Partial Class Customise_Colours + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Customise_Colours)) + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.Button6 = New System.Windows.Forms.Button() + Me.Button7 = New System.Windows.Forms.Button() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.Button1 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.TextButton = New System.Windows.Forms.Button() + Me.BackgroundButton = New System.Windows.Forms.Button() + Me.ComboBox1 = New System.Windows.Forms.ComboBox() + Me.ColourChooser = New System.Windows.Forms.ColorDialog() + Me.MockTextBox = New System.Windows.Forms.Label() + Me.MockFilePicker = New System.Windows.Forms.Label() + Me.VScrollBar1 = New System.Windows.Forms.VScrollBar() + Me.Label3 = New System.Windows.Forms.Label() + Me.ComboBox2 = New System.Windows.Forms.ComboBox() + Me.Button3 = New System.Windows.Forms.Button() + Me.MockCaption = New System.Windows.Forms.Label() + Me.Label5 = New System.Windows.Forms.Label() + Me.Button4 = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.GroupBox3.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.SuspendLayout() + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.Label3) + Me.GroupBox1.Controls.Add(Me.VScrollBar1) + Me.GroupBox1.Controls.Add(Me.MockFilePicker) + Me.GroupBox1.Controls.Add(Me.MockTextBox) + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.GroupBox4) + Me.GroupBox1.Controls.Add(Me.GroupBox3) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.MockCaption) + Me.GroupBox1.Location = New System.Drawing.Point(13, 12) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(417, 387) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "DON'T TOUCH THAT" + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.Button6) + Me.GroupBox5.Controls.Add(Me.Button7) + Me.GroupBox5.Location = New System.Drawing.Point(198, 34) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(84, 100) + Me.GroupBox5.TabIndex = 3 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "StatusBar" + ' + 'Button6 + ' + Me.Button6.Location = New System.Drawing.Point(8, 21) + Me.Button6.Name = "Button6" + Me.Button6.Size = New System.Drawing.Size(67, 31) + Me.Button6.TabIndex = 0 + Me.Button6.Text = "Text" + Me.Button6.UseVisualStyleBackColor = True + ' + 'Button7 + ' + Me.Button7.Location = New System.Drawing.Point(8, 58) + Me.Button7.Name = "Button7" + Me.Button7.Size = New System.Drawing.Size(67, 31) + Me.Button7.TabIndex = 1 + Me.Button7.Text = "Back" + Me.Button7.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.Button4) + Me.GroupBox4.Controls.Add(Me.Button3) + Me.GroupBox4.Controls.Add(Me.ComboBox2) + Me.GroupBox4.Location = New System.Drawing.Point(288, 34) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(123, 100) + Me.GroupBox4.TabIndex = 2 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "Notifications" + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.Button1) + Me.GroupBox3.Controls.Add(Me.Button2) + Me.GroupBox3.Location = New System.Drawing.Point(108, 34) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(84, 100) + Me.GroupBox3.TabIndex = 2 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Sidebar" + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(8, 21) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(67, 31) + Me.Button1.TabIndex = 0 + Me.Button1.Text = "Text" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(8, 58) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(67, 31) + Me.Button2.TabIndex = 1 + Me.Button2.Text = "Back" + Me.Button2.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.TextButton) + Me.GroupBox2.Controls.Add(Me.BackgroundButton) + Me.GroupBox2.Location = New System.Drawing.Point(9, 34) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(84, 100) + Me.GroupBox2.TabIndex = 2 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Editor" + ' + 'TextButton + ' + Me.TextButton.Location = New System.Drawing.Point(8, 21) + Me.TextButton.Name = "TextButton" + Me.TextButton.Size = New System.Drawing.Size(67, 31) + Me.TextButton.TabIndex = 0 + Me.TextButton.Text = "Text" + Me.TextButton.UseVisualStyleBackColor = True + ' + 'BackgroundButton + ' + Me.BackgroundButton.Location = New System.Drawing.Point(8, 58) + Me.BackgroundButton.Name = "BackgroundButton" + Me.BackgroundButton.Size = New System.Drawing.Size(67, 31) + Me.BackgroundButton.TabIndex = 1 + Me.BackgroundButton.Text = "Back" + Me.BackgroundButton.UseVisualStyleBackColor = True + ' + 'ComboBox1 + ' + Me.ComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.ComboBox1.FormattingEnabled = True + Me.ComboBox1.Items.AddRange(New Object() {"Standard", "Night Mode", "Special"}) + Me.ComboBox1.Location = New System.Drawing.Point(21, 7) + Me.ComboBox1.Name = "ComboBox1" + Me.ComboBox1.Size = New System.Drawing.Size(141, 24) + Me.ComboBox1.TabIndex = 0 + ' + 'MockTextBox + ' + Me.MockTextBox.BackColor = System.Drawing.Color.White + Me.MockTextBox.Location = New System.Drawing.Point(107, 172) + Me.MockTextBox.Name = "MockTextBox" + Me.MockTextBox.Size = New System.Drawing.Size(303, 209) + Me.MockTextBox.TabIndex = 4 + Me.MockTextBox.Text = resources.GetString("MockTextBox.Text") + ' + 'MockFilePicker + ' + Me.MockFilePicker.BackColor = System.Drawing.Color.White + Me.MockFilePicker.Location = New System.Drawing.Point(6, 185) + Me.MockFilePicker.Name = "MockFilePicker" + Me.MockFilePicker.Size = New System.Drawing.Size(95, 196) + Me.MockFilePicker.TabIndex = 4 + Me.MockFilePicker.Text = "Apple" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Banana" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Cherry" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Durian" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Eggplant" + ' + 'VScrollBar1 + ' + Me.VScrollBar1.Location = New System.Drawing.Point(93, 185) + Me.VScrollBar1.Name = "VScrollBar1" + Me.VScrollBar1.Size = New System.Drawing.Size(14, 196) + Me.VScrollBar1.TabIndex = 5 + ' + 'Label3 + ' + Me.Label3.Font = New System.Drawing.Font("Microsoft Sans Serif", 4.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(6, 172) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(101, 13) + Me.Label3.TabIndex = 6 + Me.Label3.Text = "File Edit Format View" + ' + 'ComboBox2 + ' + Me.ComboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.ComboBox2.FormattingEnabled = True + Me.ComboBox2.Items.AddRange(New Object() {"Info", "Warning", "Critical"}) + Me.ComboBox2.Location = New System.Drawing.Point(6, 25) + Me.ComboBox2.Name = "ComboBox2" + Me.ComboBox2.Size = New System.Drawing.Size(111, 24) + Me.ComboBox2.TabIndex = 7 + ' + 'Button3 + ' + Me.Button3.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Button3.Location = New System.Drawing.Point(6, 58) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(51, 31) + Me.Button3.TabIndex = 2 + Me.Button3.Text = "Text" + Me.Button3.UseVisualStyleBackColor = True + ' + 'MockCaption + ' + Me.MockCaption.BackColor = System.Drawing.Color.Orchid + Me.MockCaption.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.MockCaption.ForeColor = System.Drawing.Color.White + Me.MockCaption.Location = New System.Drawing.Point(5, 155) + Me.MockCaption.Name = "MockCaption" + Me.MockCaption.Size = New System.Drawing.Size(406, 227) + Me.MockCaption.TabIndex = 7 + Me.MockCaption.Text = resources.GetString("MockCaption.Text") + ' + 'Label5 + ' + Me.Label5.BackColor = System.Drawing.Color.Red + Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.ForeColor = System.Drawing.Color.White + Me.Label5.Location = New System.Drawing.Point(383, 155) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(28, 17) + Me.Label5.TabIndex = 8 + Me.Label5.Text = "X" + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Button4 + ' + Me.Button4.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Button4.Location = New System.Drawing.Point(63, 58) + Me.Button4.Name = "Button4" + Me.Button4.Size = New System.Drawing.Size(51, 31) + Me.Button4.TabIndex = 8 + Me.Button4.Text = "Back" + Me.Button4.UseVisualStyleBackColor = True + ' + 'Customise_Colours + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(442, 411) + Me.Controls.Add(Me.ComboBox1) + Me.Controls.Add(Me.GroupBox1) + Me.Name = "Customise_Colours" + Me.Text = "Notepad Ultra - Theme Editor" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox2.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + + Friend WithEvents GroupBox1 As GroupBox + Friend WithEvents ComboBox1 As ComboBox + Friend WithEvents ColourChooser As ColorDialog + Friend WithEvents BackgroundButton As Button + Friend WithEvents TextButton As Button + Friend WithEvents GroupBox4 As GroupBox + Friend WithEvents GroupBox3 As GroupBox + Friend WithEvents Button1 As Button + Friend WithEvents Button2 As Button + Friend WithEvents GroupBox2 As GroupBox + Friend WithEvents GroupBox5 As GroupBox + Friend WithEvents Button6 As Button + Friend WithEvents Button7 As Button + Friend WithEvents Label3 As Label + Friend WithEvents VScrollBar1 As VScrollBar + Friend WithEvents MockFilePicker As Label + Friend WithEvents MockTextBox As Label + Friend WithEvents Button3 As Button + Friend WithEvents ComboBox2 As ComboBox + Friend WithEvents MockCaption As Label + Friend WithEvents Label5 As Label + Friend WithEvents Button4 As Button +End Class diff --git a/Customise Colours.resx b/Customise Colours.resx new file mode 100644 index 0000000..5d159aa --- /dev/null +++ b/Customise Colours.resx @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + To provide you with an idea of what your chosen colour scheme will look like, this mockup will automatically update to reflect your choices. + +Note that the text here is not the same size as it will appear. This is done simply to make it easier to visualise the final colour scheme, as using realistically-scaled font sizes would make the text incredibly small (as small as the menu bar on the top-left of the mockup). + + + Notepad Ultra + +If you are seeing this, I'm afraid your measly computer simply cannot handle the might and the majesty of Lynnear Software's finest creation yet: The futuristic, sleek, sexy, AutoUpdato-Realtimetacular SplendifferoPreviewBox 8000! +Or maybe the program fucked up. It probably fucked up. + + \ No newline at end of file diff --git a/Customise Colours.vb b/Customise Colours.vb new file mode 100644 index 0000000..e4135a5 --- /dev/null +++ b/Customise Colours.vb @@ -0,0 +1,10 @@ +Public Class Customise_Colours + Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged + Select Case ComboBox1.SelectedItem.ToString + Case "Standard" + Case "Night" + Case "Special" + End Select + MockFilePicker.BackColor = My.Settings.NiteTextBG + End Sub +End Class \ No newline at end of file diff --git a/Extensions.vb b/Extensions.vb new file mode 100644 index 0000000..3a77367 --- /dev/null +++ b/Extensions.vb @@ -0,0 +1,196 @@ +'DON'T FORGET TO COPY THESE BITS TOO! +Imports System.Runtime.CompilerServices +Imports System.Text.RegularExpressions + +Public Module Extensions + Public defaultStandardTheme, defaultNightTheme, defaultTertiaryTheme As Theme + Public ControlColour As Color = SystemColors.Control 'shorthand due to laziness and bad memory + Public FileToOpen As String = "" + Public Structure Notification + Dim Text As String + Dim Category As Integer + End Structure + + Public Structure Theme + Dim TextBoxFG, TextBoxBG, SidebarFG, SidebarBG, StatusBarFG, StatusBarBG, NotificationCriticalFG, NotificationCriticalBG, NotificationWarningFG, NotificationWarningBG, NotificationInfoFG, NotificationInfoBG As Color + End Structure + + '******************* + '***REUSABLE CODE*** + '******************* + 'everything between here and the "end reusable" section can be reused in future projects + + Public Function GetPath(file As String, Optional AppendBackslash As Boolean = True) As String + Dim FileArray As String() = file.Split("\") + Dim ReturnMe As String = "" + For i = 0 To FileArray.Length - 2 + ReturnMe &= FileArray(i) & "\" + Next + If Not AppendBackslash Then ReturnMe.RemoveLast(1) + Return ReturnMe + End Function + + Public Function GetFile(file As String, Optional StripExtension As Boolean = False) As String + If StripExtension Then + Return RemoveFileExtension(file.Split("\")(file.Split("\").Length - 1)) 'strips the file extension, including the period. returns "filename" for "C:\filename.png" + Else + Return file.Split("\")(file.Split("\").Length - 1) 'returns the last item divided by backslashes. returns "filename.png" for "C:\filename.png". + End If + End Function + + Public Function RemoveFileExtension(Filename As String) As String + Return Filename.RemoveLastInstanceOf("." & Filename.Split(".")(Filename.Split.Length)) + End Function + + Public Function GetFileExtension(Filename As String) As String + Return "." & Filename.Split(".")(Filename.Split(".").Length - 1) + End Function + + Public Function ValidFileName(NameToCheck As String, Optional AllowPeriods As Boolean = False) As Boolean + If Not IsNothing(NameToCheck) Then + Dim disallowedCharacters As String() = {"/", "\", "<", ">", ":", "?", "*", ",", "|", "."} + If AllowPeriods Then NameToCheck = NameToCheck.Replace(".", " ") + For i = 0 To disallowedCharacters.Length - 1 + If NameToCheck.Contains(disallowedCharacters(i)) Then + Return False + End If + Next + Else + Return False + End If + Return True + End Function + + Public Function ProgramIcon() As Icon + Return Icon.ExtractAssociatedIcon(Application.ExecutablePath) + End Function + + + Public Function RemoveLast(ByVal stringToModify As String, amountToRemove As Integer) As String + Return stringToModify.Remove(stringToModify.Length - amountToRemove) + End Function + + + Public Function RemoveFirst(ByVal StringToModify As String, AmountToRemove As Integer) As String + Return StrReverse(StrReverse(StringToModify).Remove(StringToModify.Length - AmountToRemove)) + End Function + + + Public Function RemoveLastInstanceOf(ByVal StringToModify As String, StringToRemove As String) As String + Return StrReverse(Replace(StrReverse(StringToModify), StrReverse(StringToRemove), "",, 1)) + End Function + + + Function BatchRemove(ByRef StringToClean As String, TextToStrip As String()) As String + Dim ReturnText As String = StringToClean + For i = 0 To TextToStrip.Count - 1 + ReturnText = ReturnText.Replace(TextToStrip(i), "") + Next + Return ReturnText + End Function + + Public Function RandomArrayObject(Array) As Object + If IsNothing(Array) Then Return "===ERROR: Passed array is empty!===" + Return Array(Rnd() * (Array.Length - 1)) + End Function + + Public Function RAO(Array) As Object + Return RandomArrayObject(Array) + End Function + + Public Function ValidURL(URL) As Boolean ' http://stackoverflow.com/a/3809435 + Dim URLCheckPattern As String = "(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)" + Return Regex.IsMatch(URL, URLCheckPattern, RegexOptions.IgnoreCase) 'WARNING: returns true for invalid/missing TLDs (such as: invalidurl/file.html) + End Function + + '****************** + '***END REUSABLE*** + '****************** + + Public Function ReturnThemeSettingsAsThemeObject(chosenThemeIndex As String) + Try + chosenThemeIndex = CInt(chosenThemeIndex) + If chosenThemeIndex > 2 Then chosenThemeIndex = 0 + + Catch ex As Exception + chosenThemeIndex = chosenThemeIndex.ToLower() + If chosenThemeIndex.Contains("standard") Then + chosenThemeIndex = 0 + ElseIf chosenThemeIndex.Contains("night") Or chosenThemeIndex.Contains("nite") Then + chosenThemeIndex = 1 + Else + chosenThemeIndex = 2 + End If + End Try + Dim themeName() As String = {"Standard", "Nite", "Tertiary"} + + Dim returnedTheme As Theme + returnedTheme.NotificationCriticalBG = CallByName(My.Settings, themeName(chosenThemeIndex) & "NotifyColourCritical", CallType.Get) + returnedTheme.NotificationWarningBG = CallByName(My.Settings, themeName(chosenThemeIndex) & "NotifyColourWarning", CallType.Get) + returnedTheme.NotificationInfoBG = CallByName(My.Settings, themeName(chosenThemeIndex) & "NotifyColourInfo", CallType.Get) + returnedTheme.NotificationCriticalFG = CallByName(My.Settings, themeName(chosenThemeIndex) & "NotifyTextColourCritical", CallType.Get) + returnedTheme.NotificationWarningFG = CallByName(My.Settings, themeName(chosenThemeIndex) & "NotifyTextColourWarning", CallType.Get) + returnedTheme.NotificationInfoFG = CallByName(My.Settings, themeName(chosenThemeIndex) & "NotifyTextColourInfo", CallType.Get) + + returnedTheme.SidebarFG = CallByName(My.Settings, themeName(chosenThemeIndex) & "SidebarFG", CallType.Get) + returnedTheme.SidebarBG = CallByName(My.Settings, themeName(chosenThemeIndex) & "SidebarBG", CallType.Get) + returnedTheme.StatusBarFG = CallByName(My.Settings, themeName(chosenThemeIndex) & "StatFG", CallType.Get) + returnedTheme.StatusBarBG = CallByName(My.Settings, themeName(chosenThemeIndex) & "StatBG", CallType.Get) + returnedTheme.TextBoxFG = CallByName(My.Settings, themeName(chosenThemeIndex) & "TextFG", CallType.Get) + returnedTheme.TextBoxBG = CallByName(My.Settings, themeName(chosenThemeIndex) & "TextBG", CallType.Get) + + Return returnedTheme + End Function + + Public Sub SetDefaultThemes() + '******************** + '***DEFAULT THEMES*** + '******************** + + 'Standard: + + defaultStandardTheme.TextBoxBG = Color.White + defaultStandardTheme.TextBoxFG = Color.Black + defaultStandardTheme.SidebarBG = Color.White + defaultStandardTheme.SidebarFG = Color.Black + defaultStandardTheme.StatusBarBG = ControlColour + defaultStandardTheme.StatusBarFG = Color.Black + defaultStandardTheme.NotificationCriticalBG = Color.Red + defaultStandardTheme.NotificationCriticalFG = Color.White + defaultStandardTheme.NotificationWarningBG = Color.Orange + defaultStandardTheme.NotificationWarningFG = Color.White + defaultStandardTheme.NotificationInfoBG = Color.Green + defaultStandardTheme.NotificationInfoFG = Color.White + + 'Night: + + defaultNightTheme.TextBoxBG = Color.FromArgb(30, 30, 30) + defaultNightTheme.TextBoxFG = Color.FromArgb(226, 226, 226) + defaultNightTheme.SidebarBG = Color.FromArgb(30, 30, 30) + defaultNightTheme.SidebarFG = Color.FromArgb(226, 226, 226) + defaultNightTheme.StatusBarBG = Color.Black + defaultNightTheme.StatusBarFG = Color.White + defaultNightTheme.NotificationCriticalBG = Color.Black + defaultNightTheme.NotificationCriticalFG = Color.Red + defaultNightTheme.NotificationWarningBG = Color.Black + defaultNightTheme.NotificationWarningFG = Color.Orange + defaultNightTheme.NotificationInfoBG = Color.Black + defaultNightTheme.NotificationInfoFG = Color.LimeGreen + + 'Tertiary: + + defaultTertiaryTheme.TextBoxBG = Color.RoyalBlue + defaultTertiaryTheme.TextBoxFG = Color.White + defaultTertiaryTheme.SidebarBG = Color.RoyalBlue + defaultTertiaryTheme.SidebarFG = Color.White + defaultTertiaryTheme.StatusBarBG = ControlColour + defaultTertiaryTheme.StatusBarFG = Color.Black + defaultTertiaryTheme.NotificationCriticalBG = Color.Red + defaultTertiaryTheme.NotificationCriticalFG = Color.White + defaultTertiaryTheme.NotificationWarningBG = Color.Orange + defaultTertiaryTheme.NotificationWarningFG = Color.White + defaultTertiaryTheme.NotificationInfoBG = Color.Green + defaultTertiaryTheme.NotificationInfoFG = Color.White + End Sub + +End Module \ No newline at end of file diff --git a/Find.Designer.vb b/Find.Designer.vb new file mode 100644 index 0000000..418661c --- /dev/null +++ b/Find.Designer.vb @@ -0,0 +1,159 @@ + _ +Partial Class Find + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.FindMe = New System.Windows.Forms.TextBox() + Me.NextButton = New System.Windows.Forms.Button() + Me.PreviousButton = New System.Windows.Forms.Button() + Me.FindStatus = New System.Windows.Forms.Label() + Me.MatchCaseCheckbox = New System.Windows.Forms.CheckBox() + Me.WholeWordCheckbox = New System.Windows.Forms.CheckBox() + Me.Button1 = New System.Windows.Forms.Button() + Me.HighlightAllButton = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'FindMe + ' + Me.FindMe.Location = New System.Drawing.Point(13, 17) + Me.FindMe.Margin = New System.Windows.Forms.Padding(4) + Me.FindMe.Name = "FindMe" + Me.FindMe.Size = New System.Drawing.Size(295, 22) + Me.FindMe.TabIndex = 0 + ' + 'NextButton + ' + Me.NextButton.Location = New System.Drawing.Point(316, 16) + Me.NextButton.Margin = New System.Windows.Forms.Padding(4) + Me.NextButton.Name = "NextButton" + Me.NextButton.Size = New System.Drawing.Size(77, 25) + Me.NextButton.TabIndex = 1 + Me.NextButton.Text = "Next" + Me.NextButton.UseVisualStyleBackColor = True + ' + 'PreviousButton + ' + Me.PreviousButton.Location = New System.Drawing.Point(316, 48) + Me.PreviousButton.Margin = New System.Windows.Forms.Padding(4) + Me.PreviousButton.Name = "PreviousButton" + Me.PreviousButton.Size = New System.Drawing.Size(77, 25) + Me.PreviousButton.TabIndex = 2 + Me.PreviousButton.Text = "Prev" + Me.PreviousButton.UseVisualStyleBackColor = True + ' + 'FindStatus + ' + Me.FindStatus.AutoSize = True + Me.FindStatus.Font = New System.Drawing.Font("Segoe UI", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FindStatus.ForeColor = System.Drawing.SystemColors.ControlDark + Me.FindStatus.Location = New System.Drawing.Point(13, 51) + Me.FindStatus.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.FindStatus.Name = "FindStatus" + Me.FindStatus.Size = New System.Drawing.Size(27, 19) + Me.FindStatus.TabIndex = 4 + Me.FindStatus.Text = "<3" + ' + 'MatchCaseCheckbox + ' + Me.MatchCaseCheckbox.AutoSize = True + Me.MatchCaseCheckbox.Location = New System.Drawing.Point(258, 80) + Me.MatchCaseCheckbox.Name = "MatchCaseCheckbox" + Me.MatchCaseCheckbox.Size = New System.Drawing.Size(104, 21) + Me.MatchCaseCheckbox.TabIndex = 5 + Me.MatchCaseCheckbox.Text = "Match Case" + Me.MatchCaseCheckbox.UseVisualStyleBackColor = True + ' + 'WholeWordCheckbox + ' + Me.WholeWordCheckbox.AutoSize = True + Me.WholeWordCheckbox.Location = New System.Drawing.Point(368, 80) + Me.WholeWordCheckbox.Name = "WholeWordCheckbox" + Me.WholeWordCheckbox.Size = New System.Drawing.Size(108, 21) + Me.WholeWordCheckbox.TabIndex = 5 + Me.WholeWordCheckbox.Text = "Whole Word" + Me.WholeWordCheckbox.UseVisualStyleBackColor = True + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(401, 48) + Me.Button1.Margin = New System.Windows.Forms.Padding(4) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(77, 25) + Me.Button1.TabIndex = 3 + Me.Button1.Text = "Replace" + Me.Button1.UseVisualStyleBackColor = True + ' + 'HighlightAllButton + ' + Me.HighlightAllButton.Location = New System.Drawing.Point(401, 17) + Me.HighlightAllButton.Margin = New System.Windows.Forms.Padding(4) + Me.HighlightAllButton.Name = "HighlightAllButton" + Me.HighlightAllButton.Size = New System.Drawing.Size(77, 25) + Me.HighlightAllButton.TabIndex = 2 + Me.HighlightAllButton.Text = "Show all" + Me.HighlightAllButton.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(13, 74) + Me.Button2.Margin = New System.Windows.Forms.Padding(4) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(77, 25) + Me.Button2.TabIndex = 1 + Me.Button2.Text = "Close" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Find + ' + Me.AcceptButton = Me.NextButton + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(488, 107) + Me.Controls.Add(Me.WholeWordCheckbox) + Me.Controls.Add(Me.MatchCaseCheckbox) + Me.Controls.Add(Me.FindStatus) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.HighlightAllButton) + Me.Controls.Add(Me.PreviousButton) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.NextButton) + Me.Controls.Add(Me.FindMe) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow + Me.Margin = New System.Windows.Forms.Padding(4) + Me.Name = "Find" + Me.Text = "Find" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents FindMe As TextBox + Friend WithEvents NextButton As Button + Friend WithEvents PreviousButton As Button + Friend WithEvents FindStatus As Label + Friend WithEvents MatchCaseCheckbox As CheckBox + Friend WithEvents WholeWordCheckbox As CheckBox + Friend WithEvents Button1 As Button + Friend WithEvents HighlightAllButton As Button + Friend WithEvents Button2 As Button +End Class diff --git a/Find.resx b/Find.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Find.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Find.vb b/Find.vb new file mode 100644 index 0000000..26c7176 --- /dev/null +++ b/Find.vb @@ -0,0 +1,100 @@ +Public Class Find 'TODO: will changing file in npu while find is open fuck things? probably + Dim StartBounds, EndBounds As Integer + Dim FindOptions As RichTextBoxFinds + Public Property npu As NPUWindow + Private Sub FindStuff(sender As Object, e As EventArgs) Handles NextButton.Click, PreviousButton.Click + If EndBounds = 0 Then EndBounds = npu.TextFileHolder.TextLength + If sender.name = "PreviousButton" Then 'BACKWARDS + FindOptions = RichTextBoxFinds.Reverse Or GetFindSettings() + StartBounds = 0 + EndBounds -= 1 + Else 'FORWARDS + FindOptions = RichTextBoxFinds.None Or GetFindSettings() + EndBounds = npu.TextFileHolder.TextLength + StartBounds += 1 + End If + Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower} + FindStatus.Text = ("Found " & CountFindMeAppearances() & " results").Replace("1 results", "1 result") + ResetFormatting() + If FindStatus.Text = "Found 0 results" Then + Beep() + Else + Dim findResult As Integer = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions) + If findResult = -1 Then + FindStatus.Text = "Reached last instance, looping" + StartBounds = 0 + EndBounds = npu.TextFileHolder.TextLength + End If + npu.TextFileHolder.[Select](npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions), FindMe.Text.Length) + npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Bold) + npu.TextFileHolder.SelectionBackColor = Color.Yellow + If StartBounds < 0 Then StartBounds = 0 + If EndBounds < 0 Then EndBounds = npu.TextFileHolder.TextLength + StartBounds = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions) + EndBounds = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions) + FindMe.Text.Length + npu.TextFileHolder.SelectionStart = StartBounds + If sender.name = "PreviousButton" Then npu.TextFileHolder.SelectionStart = EndBounds + npu.TextFileHolder.ScrollToCaret() 'TODO: Fix jumpiness + End If + End Sub + Public Sub ResetFormatting() Handles Me.Closed + Dim SelectPos As Integer = npu.TextFileHolder.SelectionStart + npu.TextFileHolder.[Select](0, npu.TextFileHolder.TextLength) + npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Regular) + npu.TextFileHolder.SelectionBackColor = npu.TextFileHolder.BackColor + npu.TextFileHolder.Select(SelectPos, 0) + End Sub + + Private Sub HighlightAllButton_Click(sender As Object, e As EventArgs) Handles HighlightAllButton.Click + StartBounds = 0 + EndBounds = npu.TextFileHolder.TextLength + Dim LastFound As Integer = 0 + Try + While True + npu.TextFileHolder.[Select](npu.TextFileHolder.Find(FindMe.Text, LastFound, npu.TextFileHolder.TextLength, RichTextBoxFinds.None), FindMe.Text.Length) + npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Bold) + npu.TextFileHolder.SelectionBackColor = Color.Yellow + LastFound = npu.TextFileHolder.Find(FindMe.Text, LastFound, npu.TextFileHolder.TextLength, RichTextBoxFinds.None) + 1 + End While + Catch ex As Exception + Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower} + FindStatus.Text = ("Found " & npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1 & " results").Replace("1 results", "1 result") + End Try + + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + Close() + End Sub + + Private Sub FindMe_TextChanged(sender As Object, e As EventArgs) Handles FindMe.TextChanged + HighlightAllButton.Enabled = FindMe.Text <> "" + PreviousButton.Enabled = FindMe.Text <> "" + NextButton.Enabled = FindMe.Text <> "" + End Sub + + Private Function GetFindSettings() + Return 0 + (4 * Math.Abs(CInt(MatchCaseCheckBox.Checked))) + (2 * Math.Abs(CInt(WholeWordCheckBox.Checked))) + End Function + + Public Function CountFindMeAppearances() + Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower} + Select Case GetFindSettings() + Case 0 + Return npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1 + + Case 2 'WHOLE WORD + Return CountWholeWordFindMeAppearances(FindMe.Text, FindOptions, False) + + Case 4 'MATCH CASE + FindMeCountable = New String(0) {FindMe.Text} + Return npu.TextFileHolder.Text.ToString.Split(FindMeCountable, StringSplitOptions.None).Length - 1 + + Case 6 'ALL OPTIONS + Return CountWholeWordFindMeAppearances(FindMe.Text, FindOptions, True) + + Case Else + Return npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1 + End Select + End Function +End Class \ No newline at end of file diff --git a/FindCommon.vb b/FindCommon.vb new file mode 100644 index 0000000..a0fe13a --- /dev/null +++ b/FindCommon.vb @@ -0,0 +1,25 @@ +Module FindCommon + Public Property npu As NPUWindow + + Function CountWholeWordFindMeAppearances(FindMeText, FindOptions, CaseSensitive) + If npu.TextFileHolder.Find(FindMeText, 0, npu.TextFileHolder.TextLength, FindOptions) <> -1 Then + Dim found As Integer = 0 + Dim punctuation As String() = {" ", ",", "?", "!", ".", "…", vbNewLine} 'TODO: make sure this is how vb's native "whole word" function works + Dim SearchText As String = npu.TextFileHolder.Text & " " + Dim SearchSubString As String = FindMeText + If Not CaseSensitive Then + SearchText = SearchText.ToLower + SearchSubString = SearchSubString.ToLower + End If + + For i As Integer = 0 To SearchText.Length - FindMeText.Length - 1 + For j = 0 To punctuation.Length - 1 + If SearchText.Substring(i, FindMeText.Length + 1) = FindMeText & punctuation(j) Then found += 1 + Next + Next + Return found - 1 'FOR YEARS I HAVE ENVIED / YOUR GRACE AND YOUR CHARM + Else + Return 0 + End If + End Function +End Module diff --git a/FindReplace.Designer.vb b/FindReplace.Designer.vb new file mode 100644 index 0000000..b1383f5 --- /dev/null +++ b/FindReplace.Designer.vb @@ -0,0 +1,196 @@ + _ +Partial Class FindReplace + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.WholeWordCheckBox = New System.Windows.Forms.CheckBox() + Me.MatchCaseCheckBox = New System.Windows.Forms.CheckBox() + Me.FindStatus = New System.Windows.Forms.Label() + Me.Button1 = New System.Windows.Forms.Button() + Me.ReplaceAllButton = New System.Windows.Forms.Button() + Me.ReplaceOnceButton = New System.Windows.Forms.Button() + Me.FindMe = New System.Windows.Forms.TextBox() + Me.ReplaceWithMe = New System.Windows.Forms.TextBox() + Me.ForwardsRadio = New System.Windows.Forms.RadioButton() + Me.BackwardsRadio = New System.Windows.Forms.RadioButton() + Me.ViewNextButton = New System.Windows.Forms.Button() + Me.HighlightAllButton = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'WholeWordCheckBox + ' + Me.WholeWordCheckBox.AutoSize = True + Me.WholeWordCheckBox.Location = New System.Drawing.Point(437, 48) + Me.WholeWordCheckBox.Name = "WholeWordCheckBox" + Me.WholeWordCheckBox.Size = New System.Drawing.Size(108, 21) + Me.WholeWordCheckBox.TabIndex = 11 + Me.WholeWordCheckBox.Text = "Whole Word" + Me.WholeWordCheckBox.UseVisualStyleBackColor = True + ' + 'MatchCaseCheckBox + ' + Me.MatchCaseCheckBox.AutoSize = True + Me.MatchCaseCheckBox.Location = New System.Drawing.Point(437, 15) + Me.MatchCaseCheckBox.Name = "MatchCaseCheckBox" + Me.MatchCaseCheckBox.Size = New System.Drawing.Size(104, 21) + Me.MatchCaseCheckBox.TabIndex = 12 + Me.MatchCaseCheckBox.Text = "Match Case" + Me.MatchCaseCheckBox.UseVisualStyleBackColor = True + ' + 'FindStatus + ' + Me.FindStatus.AutoSize = True + Me.FindStatus.Font = New System.Drawing.Font("Segoe UI", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FindStatus.ForeColor = System.Drawing.SystemColors.ControlDark + Me.FindStatus.Location = New System.Drawing.Point(13, 81) + Me.FindStatus.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.FindStatus.Name = "FindStatus" + Me.FindStatus.Size = New System.Drawing.Size(27, 19) + Me.FindStatus.TabIndex = 10 + Me.FindStatus.Text = "<3" + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(13, 111) + Me.Button1.Margin = New System.Windows.Forms.Padding(4) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(77, 25) + Me.Button1.TabIndex = 9 + Me.Button1.Text = "Find" + Me.Button1.UseVisualStyleBackColor = True + ' + 'ReplaceAllButton + ' + Me.ReplaceAllButton.Location = New System.Drawing.Point(315, 45) + Me.ReplaceAllButton.Margin = New System.Windows.Forms.Padding(4) + Me.ReplaceAllButton.Name = "ReplaceAllButton" + Me.ReplaceAllButton.Size = New System.Drawing.Size(115, 25) + Me.ReplaceAllButton.TabIndex = 8 + Me.ReplaceAllButton.Text = "Replace all" + Me.ReplaceAllButton.UseVisualStyleBackColor = True + ' + 'ReplaceOnceButton + ' + Me.ReplaceOnceButton.Location = New System.Drawing.Point(315, 13) + Me.ReplaceOnceButton.Margin = New System.Windows.Forms.Padding(4) + Me.ReplaceOnceButton.Name = "ReplaceOnceButton" + Me.ReplaceOnceButton.Size = New System.Drawing.Size(115, 25) + Me.ReplaceOnceButton.TabIndex = 7 + Me.ReplaceOnceButton.Text = "Replace once" + Me.ReplaceOnceButton.UseVisualStyleBackColor = True + ' + 'FindMe + ' + Me.FindMe.Location = New System.Drawing.Point(13, 13) + Me.FindMe.Margin = New System.Windows.Forms.Padding(4) + Me.FindMe.Name = "FindMe" + Me.FindMe.Size = New System.Drawing.Size(291, 22) + Me.FindMe.TabIndex = 1 + ' + 'ReplaceWithMe + ' + Me.ReplaceWithMe.Location = New System.Drawing.Point(13, 46) + Me.ReplaceWithMe.Margin = New System.Windows.Forms.Padding(4) + Me.ReplaceWithMe.Name = "ReplaceWithMe" + Me.ReplaceWithMe.Size = New System.Drawing.Size(291, 22) + Me.ReplaceWithMe.TabIndex = 2 + ' + 'ForwardsRadio + ' + Me.ForwardsRadio.AutoSize = True + Me.ForwardsRadio.Checked = True + Me.ForwardsRadio.Location = New System.Drawing.Point(437, 80) + Me.ForwardsRadio.Name = "ForwardsRadio" + Me.ForwardsRadio.Size = New System.Drawing.Size(87, 21) + Me.ForwardsRadio.TabIndex = 13 + Me.ForwardsRadio.TabStop = True + Me.ForwardsRadio.Text = "Forwards" + Me.ForwardsRadio.UseVisualStyleBackColor = True + ' + 'BackwardsRadio + ' + Me.BackwardsRadio.AutoSize = True + Me.BackwardsRadio.Location = New System.Drawing.Point(437, 113) + Me.BackwardsRadio.Name = "BackwardsRadio" + Me.BackwardsRadio.Size = New System.Drawing.Size(97, 21) + Me.BackwardsRadio.TabIndex = 13 + Me.BackwardsRadio.Text = "Backwards" + Me.BackwardsRadio.UseVisualStyleBackColor = True + ' + 'ViewNextButton + ' + Me.ViewNextButton.Location = New System.Drawing.Point(315, 78) + Me.ViewNextButton.Margin = New System.Windows.Forms.Padding(4) + Me.ViewNextButton.Name = "ViewNextButton" + Me.ViewNextButton.Size = New System.Drawing.Size(115, 25) + Me.ViewNextButton.TabIndex = 8 + Me.ViewNextButton.Text = "View next" + Me.ViewNextButton.UseVisualStyleBackColor = True + ' + 'HighlightAllButton + ' + Me.HighlightAllButton.Location = New System.Drawing.Point(315, 111) + Me.HighlightAllButton.Margin = New System.Windows.Forms.Padding(4) + Me.HighlightAllButton.Name = "HighlightAllButton" + Me.HighlightAllButton.Size = New System.Drawing.Size(115, 25) + Me.HighlightAllButton.TabIndex = 8 + Me.HighlightAllButton.Text = "Highlight all" + Me.HighlightAllButton.UseVisualStyleBackColor = True + ' + 'FindReplace + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(552, 146) + Me.Controls.Add(Me.BackwardsRadio) + Me.Controls.Add(Me.ForwardsRadio) + Me.Controls.Add(Me.WholeWordCheckBox) + Me.Controls.Add(Me.MatchCaseCheckBox) + Me.Controls.Add(Me.FindStatus) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.HighlightAllButton) + Me.Controls.Add(Me.ViewNextButton) + Me.Controls.Add(Me.ReplaceAllButton) + Me.Controls.Add(Me.ReplaceOnceButton) + Me.Controls.Add(Me.ReplaceWithMe) + Me.Controls.Add(Me.FindMe) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow + Me.Name = "FindReplace" + Me.Text = "Replace" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents WholeWordCheckBox As CheckBox + Friend WithEvents MatchCaseCheckBox As CheckBox + Friend WithEvents FindStatus As Label + Friend WithEvents Button1 As Button + Friend WithEvents ReplaceAllButton As Button + Friend WithEvents ReplaceOnceButton As Button + Friend WithEvents FindMe As TextBox + Friend WithEvents ReplaceWithMe As TextBox + Friend WithEvents ForwardsRadio As RadioButton + Friend WithEvents BackwardsRadio As RadioButton + Friend WithEvents ViewNextButton As Button + Friend WithEvents HighlightAllButton As Button +End Class diff --git a/FindReplace.resx b/FindReplace.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/FindReplace.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FindReplace.vb b/FindReplace.vb new file mode 100644 index 0000000..e156319 --- /dev/null +++ b/FindReplace.vb @@ -0,0 +1,103 @@ +Public Class FindReplace + Dim StartBounds, EndBounds As Integer + Dim FindOptions As RichTextBoxFinds + Public Property npu As NPUWindow + + Private Sub HighlightAllButton_Click(sender As Object, e As EventArgs) Handles HighlightAllButton.Click + 'StartBounds = 0 + 'EndBounds = npu.TextFileHolder.TextLength + Dim LastFound As Integer = 0 + Try + While True + npu.TextFileHolder.[Select](npu.TextFileHolder.Find(FindMe.Text, LastFound, npu.TextFileHolder.TextLength, RichTextBoxFinds.None), FindMe.Text.Length) + npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Bold) + npu.TextFileHolder.SelectionBackColor = Color.Yellow + LastFound = npu.TextFileHolder.Find(FindMe.Text, LastFound, npu.TextFileHolder.TextLength, RichTextBoxFinds.None) + 1 + End While + Catch ex As Exception + Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower} + FindStatus.Text = ("Found " & npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1 & " results").Replace("1 results", "1 result") + End Try + + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles ViewNextButton.Click + 'this code shares a lot with find.vb. in fact it pretty much IS just the find code from find.vb + If EndBounds = 0 Then EndBounds = npu.TextFileHolder.TextLength + If ForwardsRadio.Checked Then + FindOptions = RichTextBoxFinds.None Or GetFindSettings() + StartBounds += 1 + EndBounds = npu.TextFileHolder.TextLength + Else + FindOptions = RichTextBoxFinds.Reverse Or GetFindSettings() + StartBounds = 0 + EndBounds -= 1 + End If + FindStatus.Text = ("Found " & CountFindMeAppearances() & " results").Replace("1 results", "1 result") + ResetFormatting() + If FindStatus.Text = "Found 0 results" Then + Beep() + Else + Dim findResult As Integer = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions) + If findResult = -1 Then + FindStatus.Text = "Reached last instance, looping" + StartBounds = 0 + EndBounds = npu.TextFileHolder.TextLength + End If + npu.TextFileHolder.[Select](npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions), FindMe.Text.Length) + npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Bold) + npu.TextFileHolder.SelectionBackColor = Color.Yellow + If StartBounds < 0 Then StartBounds = 0 + If EndBounds < 0 Then EndBounds = npu.TextFileHolder.TextLength + StartBounds = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions) + EndBounds = npu.TextFileHolder.Find(FindMe.Text, StartBounds, EndBounds, FindOptions) + FindMe.Text.Length + npu.TextFileHolder.SelectionStart = StartBounds + If sender.name = "PreviousButton" Then npu.TextFileHolder.SelectionStart = EndBounds + npu.TextFileHolder.ScrollToCaret() 'TODO: Fix jumpiness + End If + End Sub + + Public Sub ResetFormatting() Handles Me.Closed + npu.TextFileHolder.[Select](0, npu.TextFileHolder.TextLength) + npu.TextFileHolder.SelectionFont = New Font(npu.TextFileHolder.Font, FontStyle.Regular) + npu.TextFileHolder.SelectionBackColor = npu.TextFileHolder.BackColor + npu.TextFileHolder.Select(0, 0) + End Sub + + Private Function GetFindSettings() + Return 0 + (4 * Math.Abs(CInt(MatchCaseCheckBox.Checked))) + (2 * Math.Abs(CInt(WholeWordCheckBox.Checked))) + End Function + + Private Sub ReplaceOnceButton_Click(sender As Object, e As EventArgs) Handles ReplaceOnceButton.Click + If npu.TextFileHolder.SelectedText <> FindMe.Text Then ViewNextButton.PerformClick() '~u0 + If FindStatus.Text <> "Found 0 results" Then npu.TextFileHolder.SelectedText = ReplaceWithMe.Text + ViewNextButton.PerformClick() + End Sub + + Private Sub ReplaceAllButton_Click(sender As Object, e As EventArgs) Handles ReplaceAllButton.Click + npu.TextFileHolder.Text = npu.TextFileHolder.Text.Replace(FindMe.Text, ReplaceWithMe.Text) 'TODO: make it work better than this + ResetFormatting() + End Sub + + Public Function CountFindMeAppearances() + Dim FindMeCountable As String() = New String(0) {FindMe.Text.ToLower} + Select Case GetFindSettings() + Case 0 + Return npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1 + + Case 2 'WHOLE WORD + Return CountWholeWordFindMeAppearances(FindMe.Text, FindOptions, False) + + Case 4 'MATCH CASE + FindMeCountable = New String(0) {FindMe.Text} + Return npu.TextFileHolder.Text.ToString.Split(FindMeCountable, StringSplitOptions.None).Length - 1 + + Case 6 'ALL OPTIONS + Return CountWholeWordFindMeAppearances(FindMe.Text, FindOptions, True) + + Case Else + Return npu.TextFileHolder.Text.ToString.ToLower.Split(FindMeCountable, StringSplitOptions.None).Length - 1 + End Select + End Function + +End Class \ No newline at end of file diff --git a/Form1.Designer.vb b/Form1.Designer.vb new file mode 100644 index 0000000..77a9b14 --- /dev/null +++ b/Form1.Designer.vb @@ -0,0 +1,517 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Me.FilePicker = New System.Windows.Forms.ListBox() + Me.MenuStrip1 = New System.Windows.Forms.MenuStrip() + Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.NewToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OpenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OneDriveTextFilesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.EDocumentsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator() + Me.SHOWRECENTSHEREToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SaveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SaveAsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.DeleteToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() + Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RestartToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.FormatToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.UndoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator() + Me.CutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.CopyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.PasteToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.DeleteToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() + Me.FindToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ReplaceToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.GoToToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator() + Me.TimeDateToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TimeDateToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.WordCountToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.EditToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.WordWrapToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.FontToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ViewToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SidebarToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.NightModeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.StatusBarToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog() + Me.FontDialog1 = New System.Windows.Forms.FontDialog() + Me.Label1 = New System.Windows.Forms.Label() + Me.TextFileHolder = New System.Windows.Forms.RichTextBox() + Me.StatusBar = New System.Windows.Forms.StatusStrip() + Me.statBytes = New System.Windows.Forms.ToolStripStatusLabel() + Me.ToolStripStatusLabel4 = New System.Windows.Forms.ToolStripStatusLabel() + Me.statChars = New System.Windows.Forms.ToolStripStatusLabel() + Me.ToolStripStatusLabel5 = New System.Windows.Forms.ToolStripStatusLabel() + Me.statDate = New System.Windows.Forms.ToolStripStatusLabel() + Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel() + Me.ToolStripSplitButton1 = New System.Windows.Forms.ToolStripSplitButton() + Me.ChangeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OpenToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripStatusLabel2 = New System.Windows.Forms.ToolStripStatusLabel() + Me.ToolStripSplitButton2 = New System.Windows.Forms.ToolStripSplitButton() + Me.chocolatePuddingOvenTimer = New System.Windows.Forms.Timer(Me.components) + Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog() + Me.MenuStrip1.SuspendLayout() + Me.StatusBar.SuspendLayout() + Me.SuspendLayout() + ' + 'FilePicker + ' + Me.FilePicker.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FilePicker.FormattingEnabled = True + Me.FilePicker.IntegralHeight = False + Me.FilePicker.ItemHeight = 17 + Me.FilePicker.Items.AddRange(New Object() {"Loading items..."}) + Me.FilePicker.Location = New System.Drawing.Point(0, 22) + Me.FilePicker.Name = "FilePicker" + Me.FilePicker.Size = New System.Drawing.Size(186, 472) + Me.FilePicker.Sorted = True + Me.FilePicker.TabIndex = 0 + ' + 'MenuStrip1 + ' + Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.FormatToolStripMenuItem, Me.EditToolStripMenuItem, Me.ViewToolStripMenuItem}) + Me.MenuStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow + Me.MenuStrip1.Location = New System.Drawing.Point(0, 0) + Me.MenuStrip1.Name = "MenuStrip1" + Me.MenuStrip1.Size = New System.Drawing.Size(841, 24) + Me.MenuStrip1.TabIndex = 1 + Me.MenuStrip1.Text = "MenuStrip1" + ' + 'FileToolStripMenuItem + ' + Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.NewToolStripMenuItem, Me.OpenToolStripMenuItem, Me.SaveToolStripMenuItem, Me.SaveAsToolStripMenuItem, Me.DeleteToolStripMenuItem2, Me.ToolStripSeparator1, Me.ExitToolStripMenuItem, Me.RestartToolStripMenuItem}) + Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" + Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) + Me.FileToolStripMenuItem.Text = "File" + ' + 'NewToolStripMenuItem + ' + Me.NewToolStripMenuItem.Name = "NewToolStripMenuItem" + Me.NewToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.N), System.Windows.Forms.Keys) + Me.NewToolStripMenuItem.Size = New System.Drawing.Size(198, 22) + Me.NewToolStripMenuItem.Text = "New" + ' + 'OpenToolStripMenuItem + ' + Me.OpenToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OneDriveTextFilesToolStripMenuItem, Me.EDocumentsToolStripMenuItem, Me.ToolStripSeparator5, Me.SHOWRECENTSHEREToolStripMenuItem}) + Me.OpenToolStripMenuItem.Name = "OpenToolStripMenuItem" + Me.OpenToolStripMenuItem.Size = New System.Drawing.Size(198, 22) + Me.OpenToolStripMenuItem.Text = "Set Working Directory..." + ' + 'OneDriveTextFilesToolStripMenuItem + ' + Me.OneDriveTextFilesToolStripMenuItem.Name = "OneDriveTextFilesToolStripMenuItem" + Me.OneDriveTextFilesToolStripMenuItem.Size = New System.Drawing.Size(293, 22) + Me.OneDriveTextFilesToolStripMenuItem.Text = "F:\OneDrive\Documents\Other\Text files\" + ' + 'EDocumentsToolStripMenuItem + ' + Me.EDocumentsToolStripMenuItem.Name = "EDocumentsToolStripMenuItem" + Me.EDocumentsToolStripMenuItem.Size = New System.Drawing.Size(293, 22) + Me.EDocumentsToolStripMenuItem.Text = "E:\Documents" + ' + 'ToolStripSeparator5 + ' + Me.ToolStripSeparator5.Name = "ToolStripSeparator5" + Me.ToolStripSeparator5.Size = New System.Drawing.Size(290, 6) + ' + 'SHOWRECENTSHEREToolStripMenuItem + ' + Me.SHOWRECENTSHEREToolStripMenuItem.Name = "SHOWRECENTSHEREToolStripMenuItem" + Me.SHOWRECENTSHEREToolStripMenuItem.Size = New System.Drawing.Size(293, 22) + Me.SHOWRECENTSHEREToolStripMenuItem.Text = "Other..." + ' + 'SaveToolStripMenuItem + ' + Me.SaveToolStripMenuItem.Name = "SaveToolStripMenuItem" + Me.SaveToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.SaveToolStripMenuItem.Size = New System.Drawing.Size(198, 22) + Me.SaveToolStripMenuItem.Text = "Save" + ' + 'SaveAsToolStripMenuItem + ' + Me.SaveAsToolStripMenuItem.Name = "SaveAsToolStripMenuItem" + Me.SaveAsToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.SaveAsToolStripMenuItem.Size = New System.Drawing.Size(198, 22) + Me.SaveAsToolStripMenuItem.Text = "Save As..." + ' + 'DeleteToolStripMenuItem2 + ' + Me.DeleteToolStripMenuItem2.Name = "DeleteToolStripMenuItem2" + Me.DeleteToolStripMenuItem2.Size = New System.Drawing.Size(198, 22) + Me.DeleteToolStripMenuItem2.Text = "Delete..." + ' + 'ToolStripSeparator1 + ' + Me.ToolStripSeparator1.Name = "ToolStripSeparator1" + Me.ToolStripSeparator1.Size = New System.Drawing.Size(195, 6) + ' + 'ExitToolStripMenuItem + ' + Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem" + Me.ExitToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.F4), System.Windows.Forms.Keys) + Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(198, 22) + Me.ExitToolStripMenuItem.Text = "Exit" + ' + 'RestartToolStripMenuItem + ' + Me.RestartToolStripMenuItem.Name = "RestartToolStripMenuItem" + Me.RestartToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.F3), System.Windows.Forms.Keys) + Me.RestartToolStripMenuItem.Size = New System.Drawing.Size(198, 22) + Me.RestartToolStripMenuItem.Text = "Restart" + ' + 'FormatToolStripMenuItem + ' + Me.FormatToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.UndoToolStripMenuItem, Me.ToolStripSeparator4, Me.CutToolStripMenuItem, Me.CopyToolStripMenuItem, Me.PasteToolStripMenuItem, Me.DeleteToolStripMenuItem, Me.ToolStripSeparator2, Me.FindToolStripMenuItem, Me.ReplaceToolStripMenuItem, Me.GoToToolStripMenuItem, Me.ToolStripSeparator3, Me.TimeDateToolStripMenuItem}) + Me.FormatToolStripMenuItem.Name = "FormatToolStripMenuItem" + Me.FormatToolStripMenuItem.Size = New System.Drawing.Size(39, 20) + Me.FormatToolStripMenuItem.Text = "Edit" + ' + 'UndoToolStripMenuItem + ' + Me.UndoToolStripMenuItem.Name = "UndoToolStripMenuItem" + Me.UndoToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.UndoToolStripMenuItem.Text = "Undo" + ' + 'ToolStripSeparator4 + ' + Me.ToolStripSeparator4.Name = "ToolStripSeparator4" + Me.ToolStripSeparator4.Size = New System.Drawing.Size(149, 6) + ' + 'CutToolStripMenuItem + ' + Me.CutToolStripMenuItem.Name = "CutToolStripMenuItem" + Me.CutToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.CutToolStripMenuItem.Text = "Cut" + ' + 'CopyToolStripMenuItem + ' + Me.CopyToolStripMenuItem.Name = "CopyToolStripMenuItem" + Me.CopyToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.CopyToolStripMenuItem.Text = "Copy" + ' + 'PasteToolStripMenuItem + ' + Me.PasteToolStripMenuItem.Name = "PasteToolStripMenuItem" + Me.PasteToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.PasteToolStripMenuItem.Text = "Paste" + ' + 'DeleteToolStripMenuItem + ' + Me.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem" + Me.DeleteToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.DeleteToolStripMenuItem.Text = "Delete" + ' + 'ToolStripSeparator2 + ' + Me.ToolStripSeparator2.Name = "ToolStripSeparator2" + Me.ToolStripSeparator2.Size = New System.Drawing.Size(149, 6) + ' + 'FindToolStripMenuItem + ' + Me.FindToolStripMenuItem.Name = "FindToolStripMenuItem" + Me.FindToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.FindToolStripMenuItem.Text = "Find..." + ' + 'ReplaceToolStripMenuItem + ' + Me.ReplaceToolStripMenuItem.Name = "ReplaceToolStripMenuItem" + Me.ReplaceToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.ReplaceToolStripMenuItem.Text = "Replace..." + ' + 'GoToToolStripMenuItem + ' + Me.GoToToolStripMenuItem.Name = "GoToToolStripMenuItem" + Me.GoToToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.GoToToolStripMenuItem.Text = "Go To..." + ' + 'ToolStripSeparator3 + ' + Me.ToolStripSeparator3.Name = "ToolStripSeparator3" + Me.ToolStripSeparator3.Size = New System.Drawing.Size(149, 6) + ' + 'TimeDateToolStripMenuItem + ' + Me.TimeDateToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TimeDateToolStripMenuItem1, Me.WordCountToolStripMenuItem}) + Me.TimeDateToolStripMenuItem.Name = "TimeDateToolStripMenuItem" + Me.TimeDateToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.TimeDateToolStripMenuItem.Text = "Insert" + ' + 'TimeDateToolStripMenuItem1 + ' + Me.TimeDateToolStripMenuItem1.Name = "TimeDateToolStripMenuItem1" + Me.TimeDateToolStripMenuItem1.Size = New System.Drawing.Size(139, 22) + Me.TimeDateToolStripMenuItem1.Text = "Time/Date" + ' + 'WordCountToolStripMenuItem + ' + Me.WordCountToolStripMenuItem.Name = "WordCountToolStripMenuItem" + Me.WordCountToolStripMenuItem.Size = New System.Drawing.Size(139, 22) + Me.WordCountToolStripMenuItem.Text = "Word Count" + ' + 'EditToolStripMenuItem + ' + Me.EditToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.WordWrapToolStripMenuItem, Me.FontToolStripMenuItem}) + Me.EditToolStripMenuItem.Name = "EditToolStripMenuItem" + Me.EditToolStripMenuItem.Size = New System.Drawing.Size(57, 20) + Me.EditToolStripMenuItem.Text = "Format" + ' + 'WordWrapToolStripMenuItem + ' + Me.WordWrapToolStripMenuItem.Checked = True + Me.WordWrapToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked + Me.WordWrapToolStripMenuItem.Name = "WordWrapToolStripMenuItem" + Me.WordWrapToolStripMenuItem.Size = New System.Drawing.Size(134, 22) + Me.WordWrapToolStripMenuItem.Text = "Word Wrap" + ' + 'FontToolStripMenuItem + ' + Me.FontToolStripMenuItem.Name = "FontToolStripMenuItem" + Me.FontToolStripMenuItem.Size = New System.Drawing.Size(134, 22) + Me.FontToolStripMenuItem.Text = "Font..." + ' + 'ViewToolStripMenuItem + ' + Me.ViewToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SidebarToolStripMenuItem, Me.NightModeToolStripMenuItem, Me.StatusBarToolStripMenuItem}) + Me.ViewToolStripMenuItem.Name = "ViewToolStripMenuItem" + Me.ViewToolStripMenuItem.Size = New System.Drawing.Size(44, 20) + Me.ViewToolStripMenuItem.Text = "View" + ' + 'SidebarToolStripMenuItem + ' + Me.SidebarToolStripMenuItem.Name = "SidebarToolStripMenuItem" + Me.SidebarToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F6 + Me.SidebarToolStripMenuItem.Size = New System.Drawing.Size(157, 22) + Me.SidebarToolStripMenuItem.Text = "Sidebar" + ' + 'NightModeToolStripMenuItem + ' + Me.NightModeToolStripMenuItem.Name = "NightModeToolStripMenuItem" + Me.NightModeToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F7 + Me.NightModeToolStripMenuItem.Size = New System.Drawing.Size(157, 22) + Me.NightModeToolStripMenuItem.Text = "Night Mode" + ' + 'StatusBarToolStripMenuItem + ' + Me.StatusBarToolStripMenuItem.Name = "StatusBarToolStripMenuItem" + Me.StatusBarToolStripMenuItem.Size = New System.Drawing.Size(157, 22) + Me.StatusBarToolStripMenuItem.Text = "Status Bar" + ' + 'SaveFileDialog1 + ' + Me.SaveFileDialog1.Filter = "Text File|*.txt|Batch File|*.bat|Other|*.*" + ' + 'Label1 + ' + Me.Label1.Location = New System.Drawing.Point(663, 156) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(192, 188) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "STATUS BAR WILL CONTAIN:" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Size (Bytes)" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Word count" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Creation date (if any)" + ' + 'TextFileHolder + ' + Me.TextFileHolder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.TextFileHolder.Font = New System.Drawing.Font("Lucida Console", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.TextFileHolder.Location = New System.Drawing.Point(184, -1) + Me.TextFileHolder.MaxLength = 0 + Me.TextFileHolder.Name = "TextFileHolder" + Me.TextFileHolder.Size = New System.Drawing.Size(433, 480) + Me.TextFileHolder.TabIndex = 4 + Me.TextFileHolder.Text = "Welcome to Notepad Ultra! Select a file from the left." + ' + 'StatusBar + ' + Me.StatusBar.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.statBytes, Me.ToolStripStatusLabel4, Me.statChars, Me.ToolStripStatusLabel5, Me.statDate, Me.ToolStripStatusLabel1, Me.ToolStripSplitButton1, Me.ToolStripStatusLabel2, Me.ToolStripSplitButton2}) + Me.StatusBar.Location = New System.Drawing.Point(0, 563) + Me.StatusBar.Name = "StatusBar" + Me.StatusBar.Size = New System.Drawing.Size(841, 22) + Me.StatusBar.TabIndex = 5 + Me.StatusBar.Text = "StatusStrip1" + ' + 'statBytes + ' + Me.statBytes.Name = "statBytes" + Me.statBytes.Size = New System.Drawing.Size(70, 17) + Me.statBytes.Text = "Size: 0 Bytes" + ' + 'ToolStripStatusLabel4 + ' + Me.ToolStripStatusLabel4.Name = "ToolStripStatusLabel4" + Me.ToolStripStatusLabel4.Size = New System.Drawing.Size(10, 17) + Me.ToolStripStatusLabel4.Text = "|" + ' + 'statChars + ' + Me.statChars.Name = "statChars" + Me.statChars.Size = New System.Drawing.Size(75, 17) + Me.statChars.Text = "Characters: 0" + ' + 'ToolStripStatusLabel5 + ' + Me.ToolStripStatusLabel5.Name = "ToolStripStatusLabel5" + Me.ToolStripStatusLabel5.Size = New System.Drawing.Size(10, 17) + Me.ToolStripStatusLabel5.Text = "|" + ' + 'statDate + ' + Me.statDate.Name = "statDate" + Me.statDate.Size = New System.Drawing.Size(97, 17) + Me.statDate.Text = "File Created: N/A" + ' + 'ToolStripStatusLabel1 + ' + Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1" + Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(10, 17) + Me.ToolStripStatusLabel1.Text = "|" + ' + 'ToolStripSplitButton1 + ' + Me.ToolStripSplitButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.ToolStripSplitButton1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ChangeToolStripMenuItem, Me.OpenToolStripMenuItem1}) + Me.ToolStripSplitButton1.ImageTransparentColor = System.Drawing.Color.Magenta + Me.ToolStripSplitButton1.Name = "ToolStripSplitButton1" + Me.ToolStripSplitButton1.Size = New System.Drawing.Size(119, 20) + Me.ToolStripSplitButton1.Text = "Working Directory" + Me.ToolStripSplitButton1.TextImageRelation = System.Windows.Forms.TextImageRelation.TextAboveImage + ' + 'ChangeToolStripMenuItem + ' + Me.ChangeToolStripMenuItem.Name = "ChangeToolStripMenuItem" + Me.ChangeToolStripMenuItem.Size = New System.Drawing.Size(124, 22) + Me.ChangeToolStripMenuItem.Text = "Change..." + ' + 'OpenToolStripMenuItem1 + ' + Me.OpenToolStripMenuItem1.Name = "OpenToolStripMenuItem1" + Me.OpenToolStripMenuItem1.Size = New System.Drawing.Size(124, 22) + Me.OpenToolStripMenuItem1.Text = "Open" + ' + 'ToolStripStatusLabel2 + ' + Me.ToolStripStatusLabel2.Name = "ToolStripStatusLabel2" + Me.ToolStripStatusLabel2.Size = New System.Drawing.Size(10, 17) + Me.ToolStripStatusLabel2.Text = "|" + ' + 'ToolStripSplitButton2 + ' + Me.ToolStripSplitButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.ToolStripSplitButton2.DropDownButtonWidth = 0 + Me.ToolStripSplitButton2.ImageTransparentColor = System.Drawing.Color.Magenta + Me.ToolStripSplitButton2.Name = "ToolStripSplitButton2" + Me.ToolStripSplitButton2.Size = New System.Drawing.Size(113, 20) + Me.ToolStripSplitButton2.Text = "Toggle Sidebar (F6)" + Me.ToolStripSplitButton2.TextImageRelation = System.Windows.Forms.TextImageRelation.TextAboveImage + ' + 'chocolatePuddingOvenTimer + ' + Me.chocolatePuddingOvenTimer.Interval = 250 + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(841, 585) + Me.Controls.Add(Me.StatusBar) + Me.Controls.Add(Me.FilePicker) + Me.Controls.Add(Me.TextFileHolder) + Me.Controls.Add(Me.MenuStrip1) + Me.Controls.Add(Me.Label1) + Me.KeyPreview = True + Me.MainMenuStrip = Me.MenuStrip1 + Me.Name = "Form1" + Me.Text = "Notepad Ultra" + Me.MenuStrip1.ResumeLayout(False) + Me.MenuStrip1.PerformLayout() + Me.StatusBar.ResumeLayout(False) + Me.StatusBar.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents FilePicker As System.Windows.Forms.ListBox + Friend WithEvents MenuStrip1 As System.Windows.Forms.MenuStrip + Friend WithEvents FileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents NewToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents OpenToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SaveToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SaveAsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents ExitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents EditToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents WordWrapToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FontToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FormatToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ViewToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SidebarToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents UndoToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator4 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents CutToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CopyToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents PasteToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents DeleteToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator2 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents FindToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ReplaceToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents GoToToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator3 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TimeDateToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents DeleteToolStripMenuItem2 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SaveFileDialog1 As System.Windows.Forms.SaveFileDialog + Friend WithEvents OneDriveTextFilesToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator5 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents SHOWRECENTSHEREToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FontDialog1 As System.Windows.Forms.FontDialog + Friend WithEvents NightModeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TimeDateToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents WordCountToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents StatusBarToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents TextFileHolder As System.Windows.Forms.RichTextBox + Friend WithEvents StatusBar As System.Windows.Forms.StatusStrip + Friend WithEvents statBytes As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents statChars As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents statDate As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents ToolStripStatusLabel4 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents ToolStripStatusLabel5 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents chocolatePuddingOvenTimer As System.Windows.Forms.Timer + Friend WithEvents ToolStripStatusLabel1 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents ToolStripSplitButton1 As System.Windows.Forms.ToolStripSplitButton + Friend WithEvents RestartToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripStatusLabel2 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents ToolStripSplitButton2 As System.Windows.Forms.ToolStripSplitButton + Friend WithEvents EDocumentsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ChangeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents OpenToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FolderBrowserDialog1 As System.Windows.Forms.FolderBrowserDialog + +End Class diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..bc276d4 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 132, 17 + + + 269, 17 + + + 387, 17 + + + 490, 17 + + + 700, 17 + + \ No newline at end of file diff --git a/Form1.vb b/Form1.vb new file mode 100644 index 0000000..9033507 --- /dev/null +++ b/Form1.vb @@ -0,0 +1,212 @@ +Imports System.IO + +Public Class Form1 + Dim basedir As String = "F:\OneDrive\Documents\Other\Text files" + Dim npuLocation As String = Application.StartupPath() + Dim currentFile As String = "" + Dim newFile, showSidebar As Boolean + Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load + TextFileHolder.Font = My.Settings.Font + TextFileHolder.WordWrap = My.Settings.WordWrap + WordWrapToolStripMenuItem.Checked = My.Settings.WordWrap + showSidebar = Not My.Settings.ShowSidebar + SidebarToolStripMenuItem_Click(sender, e) + NightModeToolStripMenuItem.Checked = Not My.Settings.NightMode + NightModeToolStripMenuItem_Click(sender, e) ';D + basedir = My.Settings.WorkingDirectory + + SaveFileDialog1.InitialDirectory = basedir + FontDialog1.Font = TextFileHolder.Font + redraw() + updateFilePicker() + updateStatusBar() + End Sub + + Private Sub updateFilePicker() + FilePicker.Items.Clear() + If Not basedir.EndsWith("\") Then basedir += "\" + Dim fileNames = My.Computer.FileSystem.GetFiles(basedir, FileIO.SearchOption.SearchTopLevelOnly, "*.txt") + Dim files As Boolean = False + For Each fileName As String In fileNames + FilePicker.Items.Add(fileName.Remove(0, Len(basedir))) + files = True + Next + If Not files Then MsgBox("No txt files were found in this directory.") + End Sub + + Private Sub redraw() Handles Me.Resize, Me.ResizeEnd + Select Case showSidebar + Case True + FilePicker.Height = Me.Height - 60 - StatusBar.Height + TextFileHolder.Height = Me.Height - 37 - StatusBar.Height + TextFileHolder.Width = Me.Width - 195 + Case False + TextFileHolder.Height = Me.Height - 37 - StatusBar.Height + TextFileHolder.Width = Me.Width - 15 + End Select + End Sub + + Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FilePicker.SelectedIndexChanged + TextFileHolder.Text = "Loading, please wait..." + Refresh() + Dim chosenFile As StreamReader + currentFile = FilePicker.SelectedItem + Dim fileToLoad As String = basedir & currentFile + chosenFile = New StreamReader(fileToLoad, encoding:=System.Text.Encoding.UTF8, detectEncodingFromByteOrderMarks:=True) + TextFileHolder.Text = chosenFile.ReadToEnd + Text = "Notepad Ultra: " & currentFile + newFile = "False" + chosenFile.Close() + updateStatusBar() + End Sub + + Private Sub WordWrapToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WordWrapToolStripMenuItem.Click + Select Case WordWrapToolStripMenuItem.Checked + Case False + WordWrapToolStripMenuItem.Checked = True + TextFileHolder.WordWrap = True + Case True + WordWrapToolStripMenuItem.Checked = False + TextFileHolder.WordWrap = False + End Select + End Sub + + Private Sub DeleteToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles DeleteToolStripMenuItem2.Click + If currentFile = "" Then + MsgBox("You can't delete the current file when there isn't a current file, you dunce!") + Else + If MsgBox("Are you sure you want to delete " & currentFile & "?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + My.Computer.FileSystem.DeleteFile(basedir & currentFile) + updateFilePicker() + End If + End If + End Sub + + Private Sub NewToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NewToolStripMenuItem.Click + currentFile = "unnamed" + newFile = True + End Sub + + Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click + If newFile Then SaveAsToolStripMenuItem_Click(sender, e) Else + My.Computer.FileSystem.WriteAllText(basedir & currentFile, TextFileHolder.Text, False, System.Text.Encoding.UTF8) + Dim startInfo As New ProcessStartInfo("""" & npuLocation & "\unix2dos.exe""", """" & basedir & currentFile & """") + startInfo.WindowStyle = ProcessWindowStyle.Hidden + Process.Start(startInfo) + End Sub + + Private Sub SaveAsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveAsToolStripMenuItem.Click + SaveFileDialog1.ShowDialog() + End Sub + + Private Sub OneDriveTextFilesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OneDriveTextFilesToolStripMenuItem.Click + basedir = "F:\OneDrive\Documents\Other\Text files" + updateFilePicker() + End Sub + + Private Sub FontToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FontToolStripMenuItem.Click + FontDialog1.ShowDialog() + TextFileHolder.Font = FontDialog1.Font + End Sub + + Private Sub NightModeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NightModeToolStripMenuItem.Click + Select Case NightModeToolStripMenuItem.Checked + Case False + NightModeToolStripMenuItem.Checked = True + TextFileHolder.BackColor = Color.Black + TextFileHolder.ForeColor = Color.LightGray + FilePicker.BackColor = Color.Black + FilePicker.ForeColor = Color.LightGray + Case True + NightModeToolStripMenuItem.Checked = False + TextFileHolder.BackColor = Color.White + TextFileHolder.ForeColor = Color.Black + FilePicker.BackColor = Color.White + FilePicker.ForeColor = Color.Black + End Select + End Sub + + Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click + saveSettings() + End + End Sub + + Private Sub SidebarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SidebarToolStripMenuItem.Click + Select Case SidebarToolStripMenuItem.Checked + Case False + SidebarToolStripMenuItem.Checked = True + showSidebar = True + FilePicker.Visible = True + TextFileHolder.Left = 185 + Case True + SidebarToolStripMenuItem.Checked = False + showSidebar = False + FilePicker.Visible = False + TextFileHolder.Left = 0 + End Select + redraw() + End Sub + + Private Sub updateStatusBar() Handles MyBase.KeyPress + statBytes.Text = "Size: " & System.Text.Encoding.Unicode.GetByteCount(TextFileHolder.Text) & " Bytes" + statChars.Text = "Characters: " & TextFileHolder.Text.Length + If Me.Text.EndsWith(".txt") Then statDate.Text = "File Created: " & My.Computer.FileSystem.GetFileInfo(basedir & currentFile).CreationTime Else statDate.Text = "File Created: N/A" + End Sub + + Private Sub opacify() Handles Me.Move + Opacity = 0.5 + chocolatePuddingOvenTimer.Stop() + chocolatePuddingOvenTimer.Start() + End Sub + + Private Sub chocolatePuddingOvenTimer_Tick(sender As Object, e As EventArgs) Handles chocolatePuddingOvenTimer.Tick + Opacity = 1 + chocolatePuddingOvenTimer.Stop() + End Sub + + Private Sub ToolStripSplitButton1_ButtonClick(sender As Object, e As EventArgs) Handles ToolStripSplitButton1.ButtonClick + Process.Start(basedir) + End Sub + + Private Sub toggleSidebar(sender As Object, e As EventArgs) Handles ToolStripSplitButton2.ButtonClick + SidebarToolStripMenuItem_Click(sender, e) + End Sub + + Private Sub RestartToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RestartToolStripMenuItem.Click + saveSettings() + Application.Restart() + End Sub + + Private Sub saveSettings() + My.Settings.Font = TextFileHolder.Font + My.Settings.WordWrap = TextFileHolder.WordWrap + My.Settings.NightMode = NightModeToolStripMenuItem.Checked + My.Settings.ShowSidebar = showSidebar + My.Settings.WorkingDirectory = basedir + My.Settings.Save() + End Sub + + Private Sub emergencySave() Handles Me.FormClosing + saveSettings() + End Sub + + Private Sub SHOWRECENTSHEREToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SHOWRECENTSHEREToolStripMenuItem.Click + currentFile = "" + FolderBrowserDialog1.ShowDialog() + basedir = FolderBrowserDialog1.SelectedPath + updateFilePicker() + End Sub + + Private Sub ChangeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ChangeToolStripMenuItem.Click + SHOWRECENTSHEREToolStripMenuItem_Click(sender, e) + End Sub + + Private Sub UndoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UndoToolStripMenuItem.Click + TextFileHolder.Undo() + End Sub + + Private Sub EDocumentsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EDocumentsToolStripMenuItem.Click + basedir = "E:\Documents" + updateFilePicker() + End Sub +End Class diff --git a/LoadTimeWarning.Designer.vb b/LoadTimeWarning.Designer.vb new file mode 100644 index 0000000..9488781 --- /dev/null +++ b/LoadTimeWarning.Designer.vb @@ -0,0 +1,119 @@ + _ +Partial Class LoadTimeWarning + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LoadTimeWarning)) + Me.WarningText = New System.Windows.Forms.Label() + Me.Button1 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.Label2 = New System.Windows.Forms.Label() + Me.RamCheckTimer = New System.Windows.Forms.Timer(Me.components) + Me.Gigalert = New System.Windows.Forms.Label() + Me.SuspendLayout() + ' + 'WarningText + ' + Me.WarningText.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.WarningText.Location = New System.Drawing.Point(12, 9) + Me.WarningText.Name = "WarningText" + Me.WarningText.Size = New System.Drawing.Size(493, 145) + Me.WarningText.TabIndex = 0 + Me.WarningText.Text = resources.GetString("WarningText.Text") + ' + 'Button1 + ' + Me.Button1.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Button1.Location = New System.Drawing.Point(430, 157) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(75, 23) + Me.Button1.TabIndex = 1 + Me.Button1.Text = "Restart" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Button2.Location = New System.Drawing.Point(349, 157) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(75, 23) + Me.Button2.TabIndex = 1 + Me.Button2.Text = "Kill" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Label2 + ' + Me.Label2.BackColor = System.Drawing.SystemColors.Control + Me.Label2.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(-18, 150) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(565, 62) + Me.Label2.TabIndex = 0 + ' + 'RamCheckTimer + ' + Me.RamCheckTimer.Interval = 1000 + ' + 'Gigalert + ' + Me.Gigalert.AutoSize = True + Me.Gigalert.BackColor = System.Drawing.SystemColors.Control + Me.Gigalert.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Gigalert.ForeColor = System.Drawing.Color.Red + Me.Gigalert.Location = New System.Drawing.Point(15, 161) + Me.Gigalert.Name = "Gigalert" + Me.Gigalert.Size = New System.Drawing.Size(209, 17) + Me.Gigalert.TabIndex = 2 + Me.Gigalert.Text = "RAM usage has exceeded 1GB." + Me.Gigalert.Visible = False + ' + 'LoadTimeWarning + ' + Me.AcceptButton = Me.Button1 + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(517, 190) + Me.ControlBox = False + Me.Controls.Add(Me.Gigalert) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.WarningText) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow + Me.Name = "LoadTimeWarning" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Load Time Warning" + Me.TopMost = True + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents WarningText As Label + Friend WithEvents Button1 As Button + Friend WithEvents Button2 As Button + Friend WithEvents Label2 As Label + Friend WithEvents RamCheckTimer As Timer + Friend WithEvents Gigalert As Label +End Class diff --git a/LoadTimeWarning.resx b/LoadTimeWarning.resx new file mode 100644 index 0000000..06cd31d --- /dev/null +++ b/LoadTimeWarning.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + It's taking a very long time to read this file. Bear in mind that Notepad Ultra has not been designed for usage with large text files. + +If you wish, you may restart Notepad Ultra (and cancel loading the file). The file will not be corrupted or modified in any way if you do this. + +Note that leaving the operation running may eventually cause Notepad Ultra to become unstable or freeze. + + + 17, 17 + + \ No newline at end of file diff --git a/LoadTimeWarning.vb b/LoadTimeWarning.vb new file mode 100644 index 0000000..7ad4bd1 --- /dev/null +++ b/LoadTimeWarning.vb @@ -0,0 +1,23 @@ +Public Class LoadTimeWarning + Private Sub LoadTimeWarning_Load(sender As Object, e As EventArgs) Handles MyBase.Load + 'Icon = ProgramIcon() + RamCheckTimer.Start() + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + End + End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + Application.Restart() + End Sub + + Private Sub RamCheckTimer_Tick(sender As Object, e As EventArgs) Handles RamCheckTimer.Tick + Dim c As Process = Process.GetCurrentProcess() + If c.PrivateMemorySize64 > 1073741824 Then + Beep() + Gigalert.Visible = True + RamCheckTimer.Stop() + End If + End Sub +End Class \ No newline at end of file diff --git a/My Project/Application.Designer.vb b/My Project/Application.Designer.vb new file mode 100644 index 0000000..312ad56 --- /dev/null +++ b/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterAllFormsClose + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.Notepad_Ultra.Splash_Screen + End Sub + End Class +End Namespace diff --git a/My Project/Application.myapp b/My Project/Application.myapp new file mode 100644 index 0000000..297739a --- /dev/null +++ b/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + Splash_Screen + false + 1 + true + 0 + true + \ No newline at end of file diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..53f1573 --- /dev/null +++ b/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +Imports System.Resources +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + +' + diff --git a/My Project/Resources.Designer.vb b/My Project/Resources.Designer.vb new file mode 100644 index 0000000..51a473b --- /dev/null +++ b/My Project/Resources.Designer.vb @@ -0,0 +1,123 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Notepad_Ultra.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property imageres_5348_02() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("imageres_5348_02", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property npu_beta_logo_24x() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("npu_beta_logo_24x", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property npu_icon_128() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("npu_icon_128", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property npu_icon_256() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("npu_icon_256", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property shell32_134_02() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("shell32_134_02", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property shell32_148_02() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("shell32_148_02", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/My Project/Resources.resx b/My Project/Resources.resx new file mode 100644 index 0000000..20c3bcc --- /dev/null +++ b/My Project/Resources.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\bin\Debug\dependencies\icon\res\png\beta\npu beta logo 256x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\bin\Debug\dependencies\icon\res\png\beta\npu beta logo 128x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\bin\Debug\dependencies\img\shell32_148-02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\bin\Debug\dependencies\img\shell32_134-02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\bin\Debug\dependencies\img\imageres_5348-02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\bin\Debug\dependencies\icon\res\png\beta\upscaled\npu beta logo 24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/My Project/Settings.Designer.vb b/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a82299e --- /dev/null +++ b/My Project/Settings.Designer.vb @@ -0,0 +1,786 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public Property Font() As Global.System.Drawing.Font + Get + Return CType(Me("Font"),Global.System.Drawing.Font) + End Get + Set + Me("Font") = value + End Set + End Property + + _ + Public Property WordWrap() As Boolean + Get + Return CType(Me("WordWrap"),Boolean) + End Get + Set + Me("WordWrap") = value + End Set + End Property + + _ + Public Property WorkingDirectory() As String + Get + Return CType(Me("WorkingDirectory"),String) + End Get + Set + Me("WorkingDirectory") = value + End Set + End Property + + _ + Public Property ShowSidebar() As Boolean + Get + Return CType(Me("ShowSidebar"),Boolean) + End Get + Set + Me("ShowSidebar") = value + End Set + End Property + + _ + Public Property DefaultEncoding() As Integer + Get + Return CType(Me("DefaultEncoding"),Integer) + End Get + Set + Me("DefaultEncoding") = value + End Set + End Property + + _ + Public Property GreenNotifications() As Boolean + Get + Return CType(Me("GreenNotifications"),Boolean) + End Get + Set + Me("GreenNotifications") = value + End Set + End Property + + _ + Public Property MoveTransparency() As Boolean + Get + Return CType(Me("MoveTransparency"),Boolean) + End Get + Set + Me("MoveTransparency") = value + End Set + End Property + + _ + Public Property UndoSteps() As Integer + Get + Return CType(Me("UndoSteps"),Integer) + End Get + Set + Me("UndoSteps") = value + End Set + End Property + + _ + Public Property UndoMaxMemory() As Integer + Get + Return CType(Me("UndoMaxMemory"),Integer) + End Get + Set + Me("UndoMaxMemory") = value + End Set + End Property + + _ + Public Property StandardTextBG() As Global.System.Drawing.Color + Get + Return CType(Me("StandardTextBG"),Global.System.Drawing.Color) + End Get + Set + Me("StandardTextBG") = value + End Set + End Property + + _ + Public Property StandardTextFG() As Global.System.Drawing.Color + Get + Return CType(Me("StandardTextFG"),Global.System.Drawing.Color) + End Get + Set + Me("StandardTextFG") = value + End Set + End Property + + _ + Public Property NiteTextBG() As Global.System.Drawing.Color + Get + Return CType(Me("NiteTextBG"),Global.System.Drawing.Color) + End Get + Set + Me("NiteTextBG") = value + End Set + End Property + + _ + Public Property NiteTextFG() As Global.System.Drawing.Color + Get + Return CType(Me("NiteTextFG"),Global.System.Drawing.Color) + End Get + Set + Me("NiteTextFG") = value + End Set + End Property + + _ + Public Property StandardNotifyColourCritical() As Global.System.Drawing.Color + Get + Return CType(Me("StandardNotifyColourCritical"),Global.System.Drawing.Color) + End Get + Set + Me("StandardNotifyColourCritical") = value + End Set + End Property + + _ + Public Property StandardNotifyColourWarning() As Global.System.Drawing.Color + Get + Return CType(Me("StandardNotifyColourWarning"),Global.System.Drawing.Color) + End Get + Set + Me("StandardNotifyColourWarning") = value + End Set + End Property + + _ + Public Property StandardNotifyColourInfo() As Global.System.Drawing.Color + Get + Return CType(Me("StandardNotifyColourInfo"),Global.System.Drawing.Color) + End Get + Set + Me("StandardNotifyColourInfo") = value + End Set + End Property + + _ + Public Property StandardNotifyTextColourCritical() As Global.System.Drawing.Color + Get + Return CType(Me("StandardNotifyTextColourCritical"),Global.System.Drawing.Color) + End Get + Set + Me("StandardNotifyTextColourCritical") = value + End Set + End Property + + _ + Public Property StandardNotifyTextColourWarning() As Global.System.Drawing.Color + Get + Return CType(Me("StandardNotifyTextColourWarning"),Global.System.Drawing.Color) + End Get + Set + Me("StandardNotifyTextColourWarning") = value + End Set + End Property + + _ + Public Property StandardNotifyTextColourInfo() As Global.System.Drawing.Color + Get + Return CType(Me("StandardNotifyTextColourInfo"),Global.System.Drawing.Color) + End Get + Set + Me("StandardNotifyTextColourInfo") = value + End Set + End Property + + _ + Public Property TertiaryTextBG() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryTextBG"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryTextBG") = value + End Set + End Property + + _ + Public Property TertiaryTextFG() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryTextFG"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryTextFG") = value + End Set + End Property + + _ + Public Property TertiaryStatBG() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryStatBG"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryStatBG") = value + End Set + End Property + + _ + Public Property TertiaryStatFG() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryStatFG"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryStatFG") = value + End Set + End Property + + _ + Public Property StandardStatFG() As Global.System.Drawing.Color + Get + Return CType(Me("StandardStatFG"),Global.System.Drawing.Color) + End Get + Set + Me("StandardStatFG") = value + End Set + End Property + + _ + Public Property StandardStatBG() As Global.System.Drawing.Color + Get + Return CType(Me("StandardStatBG"),Global.System.Drawing.Color) + End Get + Set + Me("StandardStatBG") = value + End Set + End Property + + _ + Public Property NiteStatFG() As Global.System.Drawing.Color + Get + Return CType(Me("NiteStatFG"),Global.System.Drawing.Color) + End Get + Set + Me("NiteStatFG") = value + End Set + End Property + + _ + Public Property NiteStatBG() As Global.System.Drawing.Color + Get + Return CType(Me("NiteStatBG"),Global.System.Drawing.Color) + End Get + Set + Me("NiteStatBG") = value + End Set + End Property + + "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&""&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" txt"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" cfg"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" ini"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" lo"& _ + "g"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"")> _ + Public Property SupportedExtensions() As Global.System.Collections.Specialized.StringCollection + Get + Return CType(Me("SupportedExtensions"),Global.System.Collections.Specialized.StringCollection) + End Get + Set + Me("SupportedExtensions") = value + End Set + End Property + + _ + Public Property StandardSidebarFG() As Global.System.Drawing.Color + Get + Return CType(Me("StandardSidebarFG"),Global.System.Drawing.Color) + End Get + Set + Me("StandardSidebarFG") = value + End Set + End Property + + _ + Public Property StandardSidebarBG() As Global.System.Drawing.Color + Get + Return CType(Me("StandardSidebarBG"),Global.System.Drawing.Color) + End Get + Set + Me("StandardSidebarBG") = value + End Set + End Property + + _ + Public Property NiteSidebarFG() As Global.System.Drawing.Color + Get + Return CType(Me("NiteSidebarFG"),Global.System.Drawing.Color) + End Get + Set + Me("NiteSidebarFG") = value + End Set + End Property + + _ + Public Property NiteSidebarBG() As Global.System.Drawing.Color + Get + Return CType(Me("NiteSidebarBG"),Global.System.Drawing.Color) + End Get + Set + Me("NiteSidebarBG") = value + End Set + End Property + + _ + Public Property TertiarySidebarFG() As Global.System.Drawing.Color + Get + Return CType(Me("TertiarySidebarFG"),Global.System.Drawing.Color) + End Get + Set + Me("TertiarySidebarFG") = value + End Set + End Property + + _ + Public Property TertiarySidebarBG() As Global.System.Drawing.Color + Get + Return CType(Me("TertiarySidebarBG"),Global.System.Drawing.Color) + End Get + Set + Me("TertiarySidebarBG") = value + End Set + End Property + + _ + Public Property NiteNotifyColourCritical() As Global.System.Drawing.Color + Get + Return CType(Me("NiteNotifyColourCritical"),Global.System.Drawing.Color) + End Get + Set + Me("NiteNotifyColourCritical") = value + End Set + End Property + + _ + Public Property NiteNotifyColourWarning() As Global.System.Drawing.Color + Get + Return CType(Me("NiteNotifyColourWarning"),Global.System.Drawing.Color) + End Get + Set + Me("NiteNotifyColourWarning") = value + End Set + End Property + + _ + Public Property NiteNotifyColourInfo() As Global.System.Drawing.Color + Get + Return CType(Me("NiteNotifyColourInfo"),Global.System.Drawing.Color) + End Get + Set + Me("NiteNotifyColourInfo") = value + End Set + End Property + + _ + Public Property NiteNotifyTextColourCritical() As Global.System.Drawing.Color + Get + Return CType(Me("NiteNotifyTextColourCritical"),Global.System.Drawing.Color) + End Get + Set + Me("NiteNotifyTextColourCritical") = value + End Set + End Property + + _ + Public Property NiteNotifyTextColourWarning() As Global.System.Drawing.Color + Get + Return CType(Me("NiteNotifyTextColourWarning"),Global.System.Drawing.Color) + End Get + Set + Me("NiteNotifyTextColourWarning") = value + End Set + End Property + + _ + Public Property NiteNotifyTextColourInfo() As Global.System.Drawing.Color + Get + Return CType(Me("NiteNotifyTextColourInfo"),Global.System.Drawing.Color) + End Get + Set + Me("NiteNotifyTextColourInfo") = value + End Set + End Property + + _ + Public Property TertiaryNotifyColourCritical() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryNotifyColourCritical"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryNotifyColourCritical") = value + End Set + End Property + + _ + Public Property TertiaryNotifyColourWarning() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryNotifyColourWarning"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryNotifyColourWarning") = value + End Set + End Property + + _ + Public Property TertiaryNotifyColourInfo() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryNotifyColourInfo"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryNotifyColourInfo") = value + End Set + End Property + + _ + Public Property TertiaryNotifyTextColourCritical() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryNotifyTextColourCritical"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryNotifyTextColourCritical") = value + End Set + End Property + + _ + Public Property TertiaryNotifyTextColourWarning() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryNotifyTextColourWarning"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryNotifyTextColourWarning") = value + End Set + End Property + + _ + Public Property TertiaryNotifyTextColourInfo() As Global.System.Drawing.Color + Get + Return CType(Me("TertiaryNotifyTextColourInfo"),Global.System.Drawing.Color) + End Get + Set + Me("TertiaryNotifyTextColourInfo") = value + End Set + End Property + + _ + Public Property CurrentTheme() As Integer + Get + Return CType(Me("CurrentTheme"),Integer) + End Get + Set + Me("CurrentTheme") = value + End Set + End Property + + _ + Public Property StatBarSize() As Boolean + Get + Return CType(Me("StatBarSize"),Boolean) + End Get + Set + Me("StatBarSize") = value + End Set + End Property + + _ + Public Property StatBarChars() As Boolean + Get + Return CType(Me("StatBarChars"),Boolean) + End Get + Set + Me("StatBarChars") = value + End Set + End Property + + _ + Public Property StatBarDate() As Boolean + Get + Return CType(Me("StatBarDate"),Boolean) + End Get + Set + Me("StatBarDate") = value + End Set + End Property + + _ + Public Property StatBarDir() As Boolean + Get + Return CType(Me("StatBarDir"),Boolean) + End Get + Set + Me("StatBarDir") = value + End Set + End Property + + _ + Public Property StatBarFontSize() As Boolean + Get + Return CType(Me("StatBarFontSize"),Boolean) + End Get + Set + Me("StatBarFontSize") = value + End Set + End Property + + _ + Public Property StatBarStatus() As Boolean + Get + Return CType(Me("StatBarStatus"),Boolean) + End Get + Set + Me("StatBarStatus") = value + End Set + End Property + + _ + Public Property StatBarMode() As Boolean + Get + Return CType(Me("StatBarMode"),Boolean) + End Get + Set + Me("StatBarMode") = value + End Set + End Property + + _ + Public Property UseRecycleBin() As Boolean + Get + Return CType(Me("UseRecycleBin"),Boolean) + End Get + Set + Me("UseRecycleBin") = value + End Set + End Property + + "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&""&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"")> _ + Public Property PresetDirectories() As Global.System.Collections.Specialized.StringCollection + Get + Return CType(Me("PresetDirectories"),Global.System.Collections.Specialized.StringCollection) + End Get + Set + Me("PresetDirectories") = value + End Set + End Property + + _ + Public Property UndoUnlimitedSteps() As Boolean + Get + Return CType(Me("UndoUnlimitedSteps"),Boolean) + End Get + Set + Me("UndoUnlimitedSteps") = value + End Set + End Property + + _ + Public Property UndoMemoryLimit() As Boolean + Get + Return CType(Me("UndoMemoryLimit"),Boolean) + End Get + Set + Me("UndoMemoryLimit") = value + End Set + End Property + + _ + Public Property DefaultFileAction() As Integer + Get + Return CType(Me("DefaultFileAction"),Integer) + End Get + Set + Me("DefaultFileAction") = value + End Set + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Notepad_Ultra.My.MySettings + Get + Return Global.Notepad_Ultra.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/My Project/Settings.settings b/My Project/Settings.settings new file mode 100644 index 0000000..457f9e3 --- /dev/null +++ b/My Project/Settings.settings @@ -0,0 +1,192 @@ + + + + + + Lucida Console, 12pt + + + True + + + ///FIRST RUN/// + + + True + + + 0 + + + True + + + True + + + 50 + + + 256 + + + White + + + Black + + + Black + + + 224, 224, 224 + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + RoyalBlue + + + White + + + Control + + + Black + + + Black + + + Control + + + Black + + + Control + + + <?xml version="1.0" encoding="utf-16"?> +<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string>txt</string> + <string>cfg</string> + <string>ini</string> + <string>log</string> +</ArrayOfString> + + + Black + + + White + + + White + + + Black + + + White + + + RoyalBlue + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + 0 + + + False + + + True + + + False + + + True + + + True + + + True + + + True + + + True + + + <?xml version="1.0" encoding="utf-16"?> +<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string /> +</ArrayOfString> + + + True + + + True + + + 0 + + + \ No newline at end of file diff --git a/My Project/app.manifest b/My Project/app.manifest new file mode 100644 index 0000000..d7b941b --- /dev/null +++ b/My Project/app.manifest @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Notepad Ultra.Designer.vb b/Notepad Ultra.Designer.vb new file mode 100644 index 0000000..fa4a3eb --- /dev/null +++ b/Notepad Ultra.Designer.vb @@ -0,0 +1,978 @@ + +Partial Class NPUWindow + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(NPUWindow)) + Me.FilePickerMenu = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.FilenametxtToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator9 = New System.Windows.Forms.ToolStripSeparator() + Me.ShowInExplorer = New System.Windows.Forms.ToolStripMenuItem() + Me.RenameToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.DeleteToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.MenuBar = New System.Windows.Forms.MenuStrip() + Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.NewToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SaveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SaveAsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.EncryptToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.EncryptToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.DecryptToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator11 = New System.Windows.Forms.ToolStripSeparator() + Me.DuplicateToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.DeleteToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() + Me.RenameToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.MoveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator10 = New System.Windows.Forms.ToolStripSeparator() + Me.PrintToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.PageSetup = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() + Me.OpenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OneDriveTextFilesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.EDocumentsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator() + Me.GoUpToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.SHOWRECENTSHEREToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SettingsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RefreshFileList = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator() + Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RestartToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.FormatToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.UndoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RedoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator() + Me.FindToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ReplaceToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.GoToToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator() + Me.TimeDateToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TimeDateToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.WordCountToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.EditToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.WordWrapToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.FontToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SansSerifToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ArialToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SegoeUIToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.MonospaceToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ConsolasToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.LucidaConsoleToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator() + Me.CustomToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ViewToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SidebarToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ThemeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.StandardTheme = New System.Windows.Forms.ToolStripMenuItem() + Me.NightTheme = New System.Windows.Forms.ToolStripMenuItem() + Me.TertiaryTheme = New System.Windows.Forms.ToolStripMenuItem() + Me.FileInfoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator7 = New System.Windows.Forms.ToolStripSeparator() + Me.AboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SoftwareUsedToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() + Me.BaseDirWatchPathToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.GoUpValidatorToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SaveDialogue = New System.Windows.Forms.SaveFileDialog() + Me.FontPicker = New System.Windows.Forms.FontDialog() + Me.StatusBar = New System.Windows.Forms.StatusStrip() + Me.StatBytes = New System.Windows.Forms.ToolStripStatusLabel() + Me.StatChars = New System.Windows.Forms.ToolStripStatusLabel() + Me.StatDate = New System.Windows.Forms.ToolStripStatusLabel() + Me.StatStatus = New System.Windows.Forms.ToolStripStatusLabel() + Me.StatDirectory = New System.Windows.Forms.ToolStripSplitButton() + Me.ChangeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OpenToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.GoUpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.StatFontSize = New System.Windows.Forms.ToolStripDropDownButton() + Me.MakeFontLarger = New System.Windows.Forms.ToolStripMenuItem() + Me.MakeFontSmaller = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripStatusLabel3 = New System.Windows.Forms.ToolStripStatusLabel() + Me.StatMode = New System.Windows.Forms.ToolStripDropDownButton() + Me.AutomaticBulletPointsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.BulletPointsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.DashesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OvertypeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.Throbber = New System.Windows.Forms.ToolStripProgressBar() + Me.Spacer = New System.Windows.Forms.ToolStripStatusLabel() + Me.Notification = New System.Windows.Forms.ToolStripStatusLabel() + Me.chocolatePuddingOvenTimer = New System.Windows.Forms.Timer(Me.components) + Me.FolderPicker = New System.Windows.Forms.FolderBrowserDialog() + Me.ShowNotificationTimer = New System.Windows.Forms.Timer(Me.components) + Me.BaseDirWatch = New System.IO.FileSystemWatcher() + Me.BaseDirWatchReenabler = New System.Windows.Forms.Timer(Me.components) + Me.PrintDialogue = New System.Windows.Forms.PrintDialog() + Me.PrintDocumentThingy = New System.Drawing.Printing.PrintDocument() + Me.PrintPreviewDialog1 = New System.Windows.Forms.PrintPreviewDialog() + Me.PageSetupDialog1 = New System.Windows.Forms.PageSetupDialog() + Me.TextFileHolder = New RichTextBoxPrintCtrl.RichTextBoxPrintCtrl.RichTextBoxPrintCtrl() + Me.LoadTimeWarningTimer = New System.Windows.Forms.Timer(Me.components) + Me.SplashKillTimer = New System.Windows.Forms.Timer(Me.components) + Me.OPFKillTimer = New System.Windows.Forms.Timer(Me.components) + Me.UndoTimer = New System.Windows.Forms.Timer(Me.components) + Me.FilePicker = New System.Windows.Forms.ListBox() + Me.MoveFileDialogue = New System.Windows.Forms.SaveFileDialog() + Me.FilePickerMenu.SuspendLayout() + Me.MenuBar.SuspendLayout() + Me.StatusBar.SuspendLayout() + CType(Me.BaseDirWatch, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'FilePickerMenu + ' + Me.FilePickerMenu.ImageScalingSize = New System.Drawing.Size(20, 20) + Me.FilePickerMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FilenametxtToolStripMenuItem, Me.ToolStripSeparator9, Me.ShowInExplorer, Me.RenameToolStripMenuItem1, Me.DeleteToolStripMenuItem}) + Me.FilePickerMenu.Name = "FilePickerMenu" + Me.FilePickerMenu.Size = New System.Drawing.Size(190, 106) + ' + 'FilenametxtToolStripMenuItem + ' + Me.FilenametxtToolStripMenuItem.Enabled = False + Me.FilenametxtToolStripMenuItem.Name = "FilenametxtToolStripMenuItem" + Me.FilenametxtToolStripMenuItem.Size = New System.Drawing.Size(189, 24) + Me.FilenametxtToolStripMenuItem.Text = "filename.txt" + ' + 'ToolStripSeparator9 + ' + Me.ToolStripSeparator9.Name = "ToolStripSeparator9" + Me.ToolStripSeparator9.Size = New System.Drawing.Size(186, 6) + ' + 'ShowInExplorer + ' + Me.ShowInExplorer.Name = "ShowInExplorer" + Me.ShowInExplorer.Size = New System.Drawing.Size(189, 24) + Me.ShowInExplorer.Text = "Show in Explorer" + ' + 'RenameToolStripMenuItem1 + ' + Me.RenameToolStripMenuItem1.Name = "RenameToolStripMenuItem1" + Me.RenameToolStripMenuItem1.Size = New System.Drawing.Size(189, 24) + Me.RenameToolStripMenuItem1.Text = "Rename" + ' + 'DeleteToolStripMenuItem + ' + Me.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem" + Me.DeleteToolStripMenuItem.Size = New System.Drawing.Size(189, 24) + Me.DeleteToolStripMenuItem.Text = "Delete" + ' + 'MenuBar + ' + Me.MenuBar.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.MenuBar.ImageScalingSize = New System.Drawing.Size(20, 20) + Me.MenuBar.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.FormatToolStripMenuItem, Me.EditToolStripMenuItem, Me.ViewToolStripMenuItem}) + Me.MenuBar.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow + Me.MenuBar.Location = New System.Drawing.Point(0, 0) + Me.MenuBar.Name = "MenuBar" + Me.MenuBar.Padding = New System.Windows.Forms.Padding(8, 2, 0, 2) + Me.MenuBar.Size = New System.Drawing.Size(1101, 28) + Me.MenuBar.TabIndex = 1 + Me.MenuBar.Text = "benis :DDDDDD" + ' + 'FileToolStripMenuItem + ' + Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.NewToolStripMenuItem, Me.SaveToolStripMenuItem, Me.SaveAsToolStripMenuItem, Me.EncryptToolStripMenuItem, Me.ToolStripSeparator11, Me.DuplicateToolStripMenuItem, Me.DeleteToolStripMenuItem2, Me.RenameToolStripMenuItem, Me.MoveToolStripMenuItem, Me.ToolStripSeparator10, Me.PrintToolStripMenuItem, Me.PageSetup, Me.ToolStripSeparator1, Me.OpenToolStripMenuItem, Me.SettingsToolStripMenuItem, Me.RefreshFileList, Me.ToolStripSeparator8, Me.ExitToolStripMenuItem, Me.RestartToolStripMenuItem}) + Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" + Me.FileToolStripMenuItem.Size = New System.Drawing.Size(44, 24) + Me.FileToolStripMenuItem.Text = "File" + ' + 'NewToolStripMenuItem + ' + Me.NewToolStripMenuItem.Name = "NewToolStripMenuItem" + Me.NewToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.N), System.Windows.Forms.Keys) + Me.NewToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.NewToolStripMenuItem.Text = "New" + ' + 'SaveToolStripMenuItem + ' + Me.SaveToolStripMenuItem.Name = "SaveToolStripMenuItem" + Me.SaveToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.SaveToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.SaveToolStripMenuItem.Text = "Save" + ' + 'SaveAsToolStripMenuItem + ' + Me.SaveAsToolStripMenuItem.Name = "SaveAsToolStripMenuItem" + Me.SaveAsToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Shift) _ + Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.SaveAsToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.SaveAsToolStripMenuItem.Text = "Save As..." + ' + 'EncryptToolStripMenuItem + ' + Me.EncryptToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.EncryptToolStripMenuItem1, Me.DecryptToolStripMenuItem}) + Me.EncryptToolStripMenuItem.Enabled = False + Me.EncryptToolStripMenuItem.Name = "EncryptToolStripMenuItem" + Me.EncryptToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.EncryptToolStripMenuItem.Text = "Encryption" + ' + 'EncryptToolStripMenuItem1 + ' + Me.EncryptToolStripMenuItem1.Name = "EncryptToolStripMenuItem1" + Me.EncryptToolStripMenuItem1.Size = New System.Drawing.Size(136, 26) + Me.EncryptToolStripMenuItem1.Text = "Encrypt" + ' + 'DecryptToolStripMenuItem + ' + Me.DecryptToolStripMenuItem.Name = "DecryptToolStripMenuItem" + Me.DecryptToolStripMenuItem.Size = New System.Drawing.Size(136, 26) + Me.DecryptToolStripMenuItem.Text = "Decrypt" + ' + 'ToolStripSeparator11 + ' + Me.ToolStripSeparator11.Name = "ToolStripSeparator11" + Me.ToolStripSeparator11.Size = New System.Drawing.Size(245, 6) + ' + 'DuplicateToolStripMenuItem + ' + Me.DuplicateToolStripMenuItem.Name = "DuplicateToolStripMenuItem" + Me.DuplicateToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.D), System.Windows.Forms.Keys) + Me.DuplicateToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.DuplicateToolStripMenuItem.Text = "Duplicate..." + ' + 'DeleteToolStripMenuItem2 + ' + Me.DeleteToolStripMenuItem2.Name = "DeleteToolStripMenuItem2" + Me.DeleteToolStripMenuItem2.ShortcutKeys = CType((System.Windows.Forms.Keys.Shift Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) + Me.DeleteToolStripMenuItem2.Size = New System.Drawing.Size(248, 26) + Me.DeleteToolStripMenuItem2.Text = "Delete" + ' + 'RenameToolStripMenuItem + ' + Me.RenameToolStripMenuItem.Name = "RenameToolStripMenuItem" + Me.RenameToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2 + Me.RenameToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.RenameToolStripMenuItem.Text = "Rename..." + ' + 'MoveToolStripMenuItem + ' + Me.MoveToolStripMenuItem.Name = "MoveToolStripMenuItem" + Me.MoveToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.MoveToolStripMenuItem.Text = "Move..." + ' + 'ToolStripSeparator10 + ' + Me.ToolStripSeparator10.Name = "ToolStripSeparator10" + Me.ToolStripSeparator10.Size = New System.Drawing.Size(245, 6) + ' + 'PrintToolStripMenuItem + ' + Me.PrintToolStripMenuItem.Name = "PrintToolStripMenuItem" + Me.PrintToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.P), System.Windows.Forms.Keys) + Me.PrintToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.PrintToolStripMenuItem.Text = "Print" + ' + 'PageSetup + ' + Me.PageSetup.Name = "PageSetup" + Me.PageSetup.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Shift) _ + Or System.Windows.Forms.Keys.P), System.Windows.Forms.Keys) + Me.PageSetup.Size = New System.Drawing.Size(248, 26) + Me.PageSetup.Text = "Page Setup" + ' + 'ToolStripSeparator1 + ' + Me.ToolStripSeparator1.Name = "ToolStripSeparator1" + Me.ToolStripSeparator1.Size = New System.Drawing.Size(245, 6) + ' + 'OpenToolStripMenuItem + ' + Me.OpenToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OneDriveTextFilesToolStripMenuItem, Me.EDocumentsToolStripMenuItem, Me.ToolStripSeparator5, Me.GoUpToolStripMenuItem1, Me.SHOWRECENTSHEREToolStripMenuItem}) + Me.OpenToolStripMenuItem.Name = "OpenToolStripMenuItem" + Me.OpenToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.OpenToolStripMenuItem.Text = "Set Working Directory..." + ' + 'OneDriveTextFilesToolStripMenuItem + ' + Me.OneDriveTextFilesToolStripMenuItem.Name = "OneDriveTextFilesToolStripMenuItem" + Me.OneDriveTextFilesToolStripMenuItem.Size = New System.Drawing.Size(356, 26) + Me.OneDriveTextFilesToolStripMenuItem.Text = "F:\OneDrive\Documents\Other\Text files\" + ' + 'EDocumentsToolStripMenuItem + ' + Me.EDocumentsToolStripMenuItem.Name = "EDocumentsToolStripMenuItem" + Me.EDocumentsToolStripMenuItem.Size = New System.Drawing.Size(356, 26) + Me.EDocumentsToolStripMenuItem.Text = "E:\Documents" + ' + 'ToolStripSeparator5 + ' + Me.ToolStripSeparator5.Name = "ToolStripSeparator5" + Me.ToolStripSeparator5.Size = New System.Drawing.Size(353, 6) + ' + 'GoUpToolStripMenuItem1 + ' + Me.GoUpToolStripMenuItem1.Name = "GoUpToolStripMenuItem1" + Me.GoUpToolStripMenuItem1.ShortcutKeys = System.Windows.Forms.Keys.F10 + Me.GoUpToolStripMenuItem1.Size = New System.Drawing.Size(356, 26) + Me.GoUpToolStripMenuItem1.Text = "Go Up" + ' + 'SHOWRECENTSHEREToolStripMenuItem + ' + Me.SHOWRECENTSHEREToolStripMenuItem.Name = "SHOWRECENTSHEREToolStripMenuItem" + Me.SHOWRECENTSHEREToolStripMenuItem.Size = New System.Drawing.Size(356, 26) + Me.SHOWRECENTSHEREToolStripMenuItem.Text = "Other..." + ' + 'SettingsToolStripMenuItem + ' + Me.SettingsToolStripMenuItem.Name = "SettingsToolStripMenuItem" + Me.SettingsToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.K), System.Windows.Forms.Keys) + Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.SettingsToolStripMenuItem.Text = "Settings" + ' + 'RefreshFileList + ' + Me.RefreshFileList.Name = "RefreshFileList" + Me.RefreshFileList.ShortcutKeys = System.Windows.Forms.Keys.F5 + Me.RefreshFileList.Size = New System.Drawing.Size(248, 26) + Me.RefreshFileList.Text = "Refresh File List" + ' + 'ToolStripSeparator8 + ' + Me.ToolStripSeparator8.Name = "ToolStripSeparator8" + Me.ToolStripSeparator8.Size = New System.Drawing.Size(245, 6) + ' + 'ExitToolStripMenuItem + ' + Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem" + Me.ExitToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.F4), System.Windows.Forms.Keys) + Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.ExitToolStripMenuItem.Text = "Exit" + ' + 'RestartToolStripMenuItem + ' + Me.RestartToolStripMenuItem.Name = "RestartToolStripMenuItem" + Me.RestartToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.F3), System.Windows.Forms.Keys) + Me.RestartToolStripMenuItem.Size = New System.Drawing.Size(248, 26) + Me.RestartToolStripMenuItem.Text = "Restart" + ' + 'FormatToolStripMenuItem + ' + Me.FormatToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.UndoToolStripMenuItem, Me.RedoToolStripMenuItem, Me.ToolStripSeparator4, Me.FindToolStripMenuItem, Me.ReplaceToolStripMenuItem, Me.GoToToolStripMenuItem, Me.ToolStripSeparator3, Me.TimeDateToolStripMenuItem}) + Me.FormatToolStripMenuItem.Name = "FormatToolStripMenuItem" + Me.FormatToolStripMenuItem.Size = New System.Drawing.Size(47, 24) + Me.FormatToolStripMenuItem.Text = "Edit" + ' + 'UndoToolStripMenuItem + ' + Me.UndoToolStripMenuItem.Name = "UndoToolStripMenuItem" + Me.UndoToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Z), System.Windows.Forms.Keys) + Me.UndoToolStripMenuItem.Size = New System.Drawing.Size(199, 26) + Me.UndoToolStripMenuItem.Text = "Undo" + ' + 'RedoToolStripMenuItem + ' + Me.RedoToolStripMenuItem.Name = "RedoToolStripMenuItem" + Me.RedoToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Y), System.Windows.Forms.Keys) + Me.RedoToolStripMenuItem.Size = New System.Drawing.Size(199, 26) + Me.RedoToolStripMenuItem.Text = "Redo" + ' + 'ToolStripSeparator4 + ' + Me.ToolStripSeparator4.Name = "ToolStripSeparator4" + Me.ToolStripSeparator4.Size = New System.Drawing.Size(196, 6) + ' + 'FindToolStripMenuItem + ' + Me.FindToolStripMenuItem.Name = "FindToolStripMenuItem" + Me.FindToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F), System.Windows.Forms.Keys) + Me.FindToolStripMenuItem.Size = New System.Drawing.Size(199, 26) + Me.FindToolStripMenuItem.Text = "Find..." + ' + 'ReplaceToolStripMenuItem + ' + Me.ReplaceToolStripMenuItem.Name = "ReplaceToolStripMenuItem" + Me.ReplaceToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.H), System.Windows.Forms.Keys) + Me.ReplaceToolStripMenuItem.Size = New System.Drawing.Size(199, 26) + Me.ReplaceToolStripMenuItem.Text = "Replace..." + ' + 'GoToToolStripMenuItem + ' + Me.GoToToolStripMenuItem.Name = "GoToToolStripMenuItem" + Me.GoToToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.G), System.Windows.Forms.Keys) + Me.GoToToolStripMenuItem.Size = New System.Drawing.Size(199, 26) + Me.GoToToolStripMenuItem.Text = "Go To..." + ' + 'ToolStripSeparator3 + ' + Me.ToolStripSeparator3.Name = "ToolStripSeparator3" + Me.ToolStripSeparator3.Size = New System.Drawing.Size(196, 6) + ' + 'TimeDateToolStripMenuItem + ' + Me.TimeDateToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TimeDateToolStripMenuItem1, Me.WordCountToolStripMenuItem}) + Me.TimeDateToolStripMenuItem.Name = "TimeDateToolStripMenuItem" + Me.TimeDateToolStripMenuItem.Size = New System.Drawing.Size(199, 26) + Me.TimeDateToolStripMenuItem.Text = "Insert" + ' + 'TimeDateToolStripMenuItem1 + ' + Me.TimeDateToolStripMenuItem1.Name = "TimeDateToolStripMenuItem1" + Me.TimeDateToolStripMenuItem1.Size = New System.Drawing.Size(163, 26) + Me.TimeDateToolStripMenuItem1.Text = "Time/Date" + ' + 'WordCountToolStripMenuItem + ' + Me.WordCountToolStripMenuItem.Name = "WordCountToolStripMenuItem" + Me.WordCountToolStripMenuItem.Size = New System.Drawing.Size(163, 26) + Me.WordCountToolStripMenuItem.Text = "Word Count" + ' + 'EditToolStripMenuItem + ' + Me.EditToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.WordWrapToolStripMenuItem, Me.FontToolStripMenuItem}) + Me.EditToolStripMenuItem.Name = "EditToolStripMenuItem" + Me.EditToolStripMenuItem.Size = New System.Drawing.Size(68, 24) + Me.EditToolStripMenuItem.Text = "Format" + ' + 'WordWrapToolStripMenuItem + ' + Me.WordWrapToolStripMenuItem.Checked = True + Me.WordWrapToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked + Me.WordWrapToolStripMenuItem.Name = "WordWrapToolStripMenuItem" + Me.WordWrapToolStripMenuItem.Size = New System.Drawing.Size(160, 26) + Me.WordWrapToolStripMenuItem.Text = "Word Wrap" + ' + 'FontToolStripMenuItem + ' + Me.FontToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SansSerifToolStripMenuItem, Me.MonospaceToolStripMenuItem, Me.ToolStripSeparator6, Me.CustomToolStripMenuItem}) + Me.FontToolStripMenuItem.Name = "FontToolStripMenuItem" + Me.FontToolStripMenuItem.Size = New System.Drawing.Size(160, 26) + Me.FontToolStripMenuItem.Text = "Font" + ' + 'SansSerifToolStripMenuItem + ' + Me.SansSerifToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ArialToolStripMenuItem, Me.SegoeUIToolStripMenuItem}) + Me.SansSerifToolStripMenuItem.Name = "SansSerifToolStripMenuItem" + Me.SansSerifToolStripMenuItem.Size = New System.Drawing.Size(161, 26) + Me.SansSerifToolStripMenuItem.Text = "Standard" + ' + 'ArialToolStripMenuItem + ' + Me.ArialToolStripMenuItem.Name = "ArialToolStripMenuItem" + Me.ArialToolStripMenuItem.Size = New System.Drawing.Size(144, 26) + Me.ArialToolStripMenuItem.Text = "Arial" + ' + 'SegoeUIToolStripMenuItem + ' + Me.SegoeUIToolStripMenuItem.Name = "SegoeUIToolStripMenuItem" + Me.SegoeUIToolStripMenuItem.Size = New System.Drawing.Size(144, 26) + Me.SegoeUIToolStripMenuItem.Text = "Segoe UI" + ' + 'MonospaceToolStripMenuItem + ' + Me.MonospaceToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ConsolasToolStripMenuItem, Me.LucidaConsoleToolStripMenuItem}) + Me.MonospaceToolStripMenuItem.Name = "MonospaceToolStripMenuItem" + Me.MonospaceToolStripMenuItem.Size = New System.Drawing.Size(161, 26) + Me.MonospaceToolStripMenuItem.Text = "Monospace" + ' + 'ConsolasToolStripMenuItem + ' + Me.ConsolasToolStripMenuItem.Name = "ConsolasToolStripMenuItem" + Me.ConsolasToolStripMenuItem.Size = New System.Drawing.Size(184, 26) + Me.ConsolasToolStripMenuItem.Text = "Consolas" + ' + 'LucidaConsoleToolStripMenuItem + ' + Me.LucidaConsoleToolStripMenuItem.Name = "LucidaConsoleToolStripMenuItem" + Me.LucidaConsoleToolStripMenuItem.Size = New System.Drawing.Size(184, 26) + Me.LucidaConsoleToolStripMenuItem.Text = "Lucida Console" + ' + 'ToolStripSeparator6 + ' + Me.ToolStripSeparator6.Name = "ToolStripSeparator6" + Me.ToolStripSeparator6.Size = New System.Drawing.Size(158, 6) + ' + 'CustomToolStripMenuItem + ' + Me.CustomToolStripMenuItem.Name = "CustomToolStripMenuItem" + Me.CustomToolStripMenuItem.Size = New System.Drawing.Size(161, 26) + Me.CustomToolStripMenuItem.Text = "Custom..." + ' + 'ViewToolStripMenuItem + ' + Me.ViewToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SidebarToolStripMenuItem, Me.ThemeToolStripMenuItem, Me.FileInfoToolStripMenuItem, Me.ToolStripSeparator7, Me.AboutToolStripMenuItem, Me.SoftwareUsedToolStripMenuItem, Me.ToolStripSeparator2, Me.BaseDirWatchPathToolStripMenuItem, Me.GoUpValidatorToolStripMenuItem}) + Me.ViewToolStripMenuItem.Name = "ViewToolStripMenuItem" + Me.ViewToolStripMenuItem.Size = New System.Drawing.Size(53, 24) + Me.ViewToolStripMenuItem.Text = "View" + ' + 'SidebarToolStripMenuItem + ' + Me.SidebarToolStripMenuItem.Name = "SidebarToolStripMenuItem" + Me.SidebarToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F6 + Me.SidebarToolStripMenuItem.Size = New System.Drawing.Size(208, 26) + Me.SidebarToolStripMenuItem.Text = "Sidebar" + ' + 'ThemeToolStripMenuItem + ' + Me.ThemeToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.StandardTheme, Me.NightTheme, Me.TertiaryTheme}) + Me.ThemeToolStripMenuItem.Name = "ThemeToolStripMenuItem" + Me.ThemeToolStripMenuItem.Size = New System.Drawing.Size(208, 26) + Me.ThemeToolStripMenuItem.Text = "Theme" + ' + 'StandardTheme + ' + Me.StandardTheme.Name = "StandardTheme" + Me.StandardTheme.ShortcutKeys = System.Windows.Forms.Keys.F7 + Me.StandardTheme.Size = New System.Drawing.Size(188, 26) + Me.StandardTheme.Text = "Standard" + ' + 'NightTheme + ' + Me.NightTheme.Name = "NightTheme" + Me.NightTheme.ShortcutKeys = System.Windows.Forms.Keys.F8 + Me.NightTheme.Size = New System.Drawing.Size(188, 26) + Me.NightTheme.Text = "Night Mode" + ' + 'TertiaryTheme + ' + Me.TertiaryTheme.Name = "TertiaryTheme" + Me.TertiaryTheme.ShortcutKeys = System.Windows.Forms.Keys.F9 + Me.TertiaryTheme.Size = New System.Drawing.Size(188, 26) + Me.TertiaryTheme.Text = "Tertiary" + ' + 'FileInfoToolStripMenuItem + ' + Me.FileInfoToolStripMenuItem.Name = "FileInfoToolStripMenuItem" + Me.FileInfoToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) + Me.FileInfoToolStripMenuItem.Size = New System.Drawing.Size(208, 26) + Me.FileInfoToolStripMenuItem.Text = "File Info" + ' + 'ToolStripSeparator7 + ' + Me.ToolStripSeparator7.Name = "ToolStripSeparator7" + Me.ToolStripSeparator7.Size = New System.Drawing.Size(205, 6) + ' + 'AboutToolStripMenuItem + ' + Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem" + Me.AboutToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1 + Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(208, 26) + Me.AboutToolStripMenuItem.Text = "About" + ' + 'SoftwareUsedToolStripMenuItem + ' + Me.SoftwareUsedToolStripMenuItem.Name = "SoftwareUsedToolStripMenuItem" + Me.SoftwareUsedToolStripMenuItem.Size = New System.Drawing.Size(208, 26) + Me.SoftwareUsedToolStripMenuItem.Text = "Software Used" + ' + 'ToolStripSeparator2 + ' + Me.ToolStripSeparator2.Name = "ToolStripSeparator2" + Me.ToolStripSeparator2.Size = New System.Drawing.Size(205, 6) + ' + 'BaseDirWatchPathToolStripMenuItem + ' + Me.BaseDirWatchPathToolStripMenuItem.Name = "BaseDirWatchPathToolStripMenuItem" + Me.BaseDirWatchPathToolStripMenuItem.Size = New System.Drawing.Size(208, 26) + Me.BaseDirWatchPathToolStripMenuItem.Text = "BaseDirWatch Path" + ' + 'GoUpValidatorToolStripMenuItem + ' + Me.GoUpValidatorToolStripMenuItem.Name = "GoUpValidatorToolStripMenuItem" + Me.GoUpValidatorToolStripMenuItem.Size = New System.Drawing.Size(208, 26) + Me.GoUpValidatorToolStripMenuItem.Text = "Go Up Validator" + ' + 'SaveDialogue + ' + Me.SaveDialogue.Filter = "Text File|*.txt|Batch File|*.bat|Other|*.*" + ' + 'StatusBar + ' + Me.StatusBar.ImageScalingSize = New System.Drawing.Size(20, 20) + Me.StatusBar.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.StatBytes, Me.StatChars, Me.StatDate, Me.StatStatus, Me.StatDirectory, Me.StatFontSize, Me.ToolStripStatusLabel3, Me.StatMode, Me.Throbber, Me.Spacer, Me.Notification}) + Me.StatusBar.Location = New System.Drawing.Point(0, 602) + Me.StatusBar.Name = "StatusBar" + Me.StatusBar.Padding = New System.Windows.Forms.Padding(1, 0, 19, 0) + Me.StatusBar.Size = New System.Drawing.Size(1101, 29) + Me.StatusBar.TabIndex = 5 + Me.StatusBar.Text = "StatusStrip1" + ' + 'StatBytes + ' + Me.StatBytes.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right + Me.StatBytes.Name = "StatBytes" + Me.StatBytes.Size = New System.Drawing.Size(60, 24) + Me.StatBytes.Text = "0 Bytes" + ' + 'StatChars + ' + Me.StatChars.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right + Me.StatChars.Name = "StatChars" + Me.StatChars.Size = New System.Drawing.Size(73, 24) + Me.StatChars.Text = "Length: 0" + ' + 'StatDate + ' + Me.StatDate.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right + Me.StatDate.Name = "StatDate" + Me.StatDate.Size = New System.Drawing.Size(99, 24) + Me.StatDate.Text = "Created: N/A" + ' + 'StatStatus + ' + Me.StatStatus.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right + Me.StatStatus.Name = "StatStatus" + Me.StatStatus.Size = New System.Drawing.Size(109, 24) + Me.StatStatus.Text = "No file loaded" + ' + 'StatDirectory + ' + Me.StatDirectory.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.StatDirectory.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ChangeToolStripMenuItem, Me.OpenToolStripMenuItem1, Me.GoUpToolStripMenuItem}) + Me.StatDirectory.ImageTransparentColor = System.Drawing.Color.Magenta + Me.StatDirectory.Name = "StatDirectory" + Me.StatDirectory.Size = New System.Drawing.Size(89, 27) + Me.StatDirectory.Text = "Directory" + Me.StatDirectory.TextImageRelation = System.Windows.Forms.TextImageRelation.TextAboveImage + ' + 'ChangeToolStripMenuItem + ' + Me.ChangeToolStripMenuItem.Name = "ChangeToolStripMenuItem" + Me.ChangeToolStripMenuItem.Size = New System.Drawing.Size(143, 26) + Me.ChangeToolStripMenuItem.Text = "Change..." + ' + 'OpenToolStripMenuItem1 + ' + Me.OpenToolStripMenuItem1.Name = "OpenToolStripMenuItem1" + Me.OpenToolStripMenuItem1.Size = New System.Drawing.Size(143, 26) + Me.OpenToolStripMenuItem1.Text = "Open" + ' + 'GoUpToolStripMenuItem + ' + Me.GoUpToolStripMenuItem.Name = "GoUpToolStripMenuItem" + Me.GoUpToolStripMenuItem.Size = New System.Drawing.Size(143, 26) + Me.GoUpToolStripMenuItem.Text = "Go Up" + ' + 'StatFontSize + ' + Me.StatFontSize.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.StatFontSize.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MakeFontLarger, Me.MakeFontSmaller}) + Me.StatFontSize.Image = CType(resources.GetObject("StatFontSize.Image"), System.Drawing.Image) + Me.StatFontSize.ImageTransparentColor = System.Drawing.Color.Magenta + Me.StatFontSize.Name = "StatFontSize" + Me.StatFontSize.Size = New System.Drawing.Size(83, 27) + Me.StatFontSize.Text = "Font Size" + ' + 'MakeFontLarger + ' + Me.MakeFontLarger.Name = "MakeFontLarger" + Me.MakeFontLarger.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Oemplus), System.Windows.Forms.Keys) + Me.MakeFontLarger.ShowShortcutKeys = False + Me.MakeFontLarger.Size = New System.Drawing.Size(172, 26) + Me.MakeFontLarger.Text = "Larger (Ctrl +)" + ' + 'MakeFontSmaller + ' + Me.MakeFontSmaller.Name = "MakeFontSmaller" + Me.MakeFontSmaller.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.OemMinus), System.Windows.Forms.Keys) + Me.MakeFontSmaller.ShowShortcutKeys = False + Me.MakeFontSmaller.Size = New System.Drawing.Size(172, 26) + Me.MakeFontSmaller.Text = "Smaller (Ctrl -)" + ' + 'ToolStripStatusLabel3 + ' + Me.ToolStripStatusLabel3.Name = "ToolStripStatusLabel3" + Me.ToolStripStatusLabel3.Size = New System.Drawing.Size(0, 24) + ' + 'StatMode + ' + Me.StatMode.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.StatMode.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AutomaticBulletPointsToolStripMenuItem, Me.OvertypeToolStripMenuItem}) + Me.StatMode.ImageTransparentColor = System.Drawing.Color.Magenta + Me.StatMode.Name = "StatMode" + Me.StatMode.Size = New System.Drawing.Size(62, 27) + Me.StatMode.Text = "Mode" + ' + 'AutomaticBulletPointsToolStripMenuItem + ' + Me.AutomaticBulletPointsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BulletPointsToolStripMenuItem, Me.DashesToolStripMenuItem}) + Me.AutomaticBulletPointsToolStripMenuItem.Name = "AutomaticBulletPointsToolStripMenuItem" + Me.AutomaticBulletPointsToolStripMenuItem.Size = New System.Drawing.Size(192, 26) + Me.AutomaticBulletPointsToolStripMenuItem.Text = "Automatic..." + ' + 'BulletPointsToolStripMenuItem + ' + Me.BulletPointsToolStripMenuItem.CheckOnClick = True + Me.BulletPointsToolStripMenuItem.Name = "BulletPointsToolStripMenuItem" + Me.BulletPointsToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.D1), System.Windows.Forms.Keys) + Me.BulletPointsToolStripMenuItem.Size = New System.Drawing.Size(217, 26) + Me.BulletPointsToolStripMenuItem.Text = "Bullet points" + Me.BulletPointsToolStripMenuItem.ToolTipText = "Indentation can be increased with tab and decreased with shift-tab." + ' + 'DashesToolStripMenuItem + ' + Me.DashesToolStripMenuItem.CheckOnClick = True + Me.DashesToolStripMenuItem.Name = "DashesToolStripMenuItem" + Me.DashesToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.D2), System.Windows.Forms.Keys) + Me.DashesToolStripMenuItem.Size = New System.Drawing.Size(217, 26) + Me.DashesToolStripMenuItem.Text = "Dashes" + Me.DashesToolStripMenuItem.ToolTipText = "Indentation can be increased with tab and decreased with shift-tab." + ' + 'OvertypeToolStripMenuItem + ' + Me.OvertypeToolStripMenuItem.Name = "OvertypeToolStripMenuItem" + Me.OvertypeToolStripMenuItem.Size = New System.Drawing.Size(192, 26) + Me.OvertypeToolStripMenuItem.Text = "Toggle overtype" + ' + 'Throbber + ' + Me.Throbber.MarqueeAnimationSpeed = 25 + Me.Throbber.Maximum = 1000 + Me.Throbber.Name = "Throbber" + Me.Throbber.Size = New System.Drawing.Size(200, 23) + Me.Throbber.Step = 1 + Me.Throbber.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.Throbber.Visible = False + ' + 'Spacer + ' + Me.Spacer.Name = "Spacer" + Me.Spacer.Size = New System.Drawing.Size(141, 24) + Me.Spacer.Spring = True + ' + 'Notification + ' + Me.Notification.BackColor = System.Drawing.Color.Green + Me.Notification.Font = New System.Drawing.Font("Segoe UI Semibold", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Notification.ForeColor = System.Drawing.Color.White + Me.Notification.Name = "Notification" + Me.Notification.Size = New System.Drawing.Size(124, 24) + Me.Notification.Text = "Notification! 0u0" + Me.Notification.Visible = False + ' + 'chocolatePuddingOvenTimer + ' + Me.chocolatePuddingOvenTimer.Interval = 250 + ' + 'ShowNotificationTimer + ' + Me.ShowNotificationTimer.Interval = 1 + ' + 'BaseDirWatch + ' + Me.BaseDirWatch.EnableRaisingEvents = True + Me.BaseDirWatch.NotifyFilter = CType((System.IO.NotifyFilters.FileName Or System.IO.NotifyFilters.DirectoryName), System.IO.NotifyFilters) + Me.BaseDirWatch.SynchronizingObject = Me + ' + 'BaseDirWatchReenabler + ' + Me.BaseDirWatchReenabler.Interval = 1000 + ' + 'PrintDialogue + ' + Me.PrintDialogue.Document = Me.PrintDocumentThingy + Me.PrintDialogue.UseEXDialog = True + ' + 'PrintDocumentThingy + ' + ' + 'PrintPreviewDialog1 + ' + Me.PrintPreviewDialog1.AutoScrollMargin = New System.Drawing.Size(0, 0) + Me.PrintPreviewDialog1.AutoScrollMinSize = New System.Drawing.Size(0, 0) + Me.PrintPreviewDialog1.ClientSize = New System.Drawing.Size(400, 300) + Me.PrintPreviewDialog1.Document = Me.PrintDocumentThingy + Me.PrintPreviewDialog1.Enabled = True + Me.PrintPreviewDialog1.Icon = CType(resources.GetObject("PrintPreviewDialog1.Icon"), System.Drawing.Icon) + Me.PrintPreviewDialog1.Name = "PrintPreviewDialog1" + Me.PrintPreviewDialog1.Visible = False + ' + 'PageSetupDialog1 + ' + Me.PageSetupDialog1.Document = Me.PrintDocumentThingy + ' + 'TextFileHolder + ' + Me.TextFileHolder.AcceptsTab = True + Me.TextFileHolder.AutoWordSelection = True + Me.TextFileHolder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.TextFileHolder.EnableAutoDragDrop = True + Me.TextFileHolder.Location = New System.Drawing.Point(244, 0) + Me.TextFileHolder.Name = "TextFileHolder" + Me.TextFileHolder.Size = New System.Drawing.Size(857, 604) + Me.TextFileHolder.TabIndex = 6 + Me.TextFileHolder.Text = "" + ' + 'LoadTimeWarningTimer + ' + Me.LoadTimeWarningTimer.Interval = 10000 + ' + 'SplashKillTimer + ' + Me.SplashKillTimer.Interval = 500 + ' + 'OPFKillTimer + ' + Me.OPFKillTimer.Interval = 500 + ' + 'UndoTimer + ' + Me.UndoTimer.Interval = 500 + ' + 'FilePicker + ' + Me.FilePicker.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.FilePicker.ContextMenuStrip = Me.FilePickerMenu + Me.FilePicker.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FilePicker.FormattingEnabled = True + Me.FilePicker.IntegralHeight = False + Me.FilePicker.ItemHeight = 21 + Me.FilePicker.Items.AddRange(New Object() {"1Loading...", "2", "2If you can read this,", "3something has probably", "4gone wrong. Tell Lynne."}) + Me.FilePicker.Location = New System.Drawing.Point(0, 27) + Me.FilePicker.Margin = New System.Windows.Forms.Padding(4) + Me.FilePicker.Name = "FilePicker" + Me.FilePicker.Size = New System.Drawing.Size(242, 579) + Me.FilePicker.Sorted = True + Me.FilePicker.TabIndex = 8 + ' + 'NPUWindow + ' + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.ClientSize = New System.Drawing.Size(1101, 631) + Me.Controls.Add(Me.FilePicker) + Me.Controls.Add(Me.TextFileHolder) + Me.Controls.Add(Me.StatusBar) + Me.Controls.Add(Me.MenuBar) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.KeyPreview = True + Me.MainMenuStrip = Me.MenuBar + Me.Margin = New System.Windows.Forms.Padding(4) + Me.Name = "NPUWindow" + Me.Text = "Notepad Ultra" + Me.FilePickerMenu.ResumeLayout(False) + Me.MenuBar.ResumeLayout(False) + Me.MenuBar.PerformLayout() + Me.StatusBar.ResumeLayout(False) + Me.StatusBar.PerformLayout() + CType(Me.BaseDirWatch, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents MenuBar As System.Windows.Forms.MenuStrip + Friend WithEvents FileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents NewToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents OpenToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SaveToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SaveAsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents ExitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents EditToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents WordWrapToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FontToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FormatToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ViewToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SidebarToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents UndoToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator4 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents FindToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ReplaceToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents GoToToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator3 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TimeDateToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents DeleteToolStripMenuItem2 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SaveDialogue As System.Windows.Forms.SaveFileDialog + Friend WithEvents OneDriveTextFilesToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator5 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents SHOWRECENTSHEREToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FontPicker As System.Windows.Forms.FontDialog + Friend WithEvents ThemeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TimeDateToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents WordCountToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents StatusBar As System.Windows.Forms.StatusStrip + Friend WithEvents StatChars As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents chocolatePuddingOvenTimer As System.Windows.Forms.Timer + Friend WithEvents StatDirectory As System.Windows.Forms.ToolStripSplitButton + Friend WithEvents RestartToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents EDocumentsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ChangeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents OpenToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FolderPicker As System.Windows.Forms.FolderBrowserDialog + Friend WithEvents SansSerifToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ArialToolStripMenuItem As ToolStripMenuItem + Friend WithEvents MonospaceToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ConsolasToolStripMenuItem As ToolStripMenuItem + Friend WithEvents LucidaConsoleToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator6 As ToolStripSeparator + Friend WithEvents CustomToolStripMenuItem As ToolStripMenuItem + Friend WithEvents SegoeUIToolStripMenuItem As ToolStripMenuItem + Friend WithEvents AboutToolStripMenuItem As ToolStripMenuItem + Friend WithEvents SettingsToolStripMenuItem As ToolStripMenuItem + Friend WithEvents GoUpToolStripMenuItem As ToolStripMenuItem + Friend WithEvents GoUpToolStripMenuItem1 As ToolStripMenuItem + Friend WithEvents ToolStripStatusLabel3 As ToolStripStatusLabel + Friend WithEvents StatStatus As ToolStripStatusLabel + Friend WithEvents FileInfoToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator7 As ToolStripSeparator + Friend WithEvents SoftwareUsedToolStripMenuItem As ToolStripMenuItem + Friend WithEvents RefreshFileList As ToolStripMenuItem + Friend WithEvents ToolStripSeparator8 As ToolStripSeparator + Friend WithEvents Spacer As ToolStripStatusLabel + Friend WithEvents Notification As ToolStripStatusLabel + Friend WithEvents ShowNotificationTimer As Timer + Friend WithEvents FilePickerMenu As ContextMenuStrip + Friend WithEvents ShowInExplorer As ToolStripMenuItem + Friend WithEvents StatMode As ToolStripDropDownButton + Friend WithEvents AutomaticBulletPointsToolStripMenuItem As ToolStripMenuItem + Friend WithEvents OvertypeToolStripMenuItem As ToolStripMenuItem + Friend WithEvents RedoToolStripMenuItem As ToolStripMenuItem + Friend WithEvents StatFontSize As ToolStripDropDownButton + Friend WithEvents MakeFontLarger As ToolStripMenuItem + Friend WithEvents MakeFontSmaller As ToolStripMenuItem + Friend WithEvents StatBytes As ToolStripStatusLabel + Friend WithEvents StatDate As ToolStripStatusLabel + Friend WithEvents StandardTheme As ToolStripMenuItem + Friend WithEvents NightTheme As ToolStripMenuItem + Friend WithEvents TertiaryTheme As ToolStripMenuItem + Friend WithEvents BaseDirWatch As IO.FileSystemWatcher + Friend WithEvents BaseDirWatchPathToolStripMenuItem As ToolStripMenuItem + Friend WithEvents DeleteToolStripMenuItem As ToolStripMenuItem + Friend WithEvents BaseDirWatchReenabler As Timer + Friend WithEvents DuplicateToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator2 As ToolStripSeparator + Friend WithEvents GoUpValidatorToolStripMenuItem As ToolStripMenuItem + Friend WithEvents PrintToolStripMenuItem As ToolStripMenuItem + Friend WithEvents PrintDialogue As PrintDialog + Friend WithEvents PrintDocumentThingy As Printing.PrintDocument + Friend WithEvents PrintPreviewDialog1 As PrintPreviewDialog + Friend WithEvents PageSetupDialog1 As PageSetupDialog + Friend WithEvents TextFileHolder As RichTextBoxPrintCtrl.RichTextBoxPrintCtrl.RichTextBoxPrintCtrl + Friend WithEvents PageSetup As ToolStripMenuItem + Friend WithEvents LoadTimeWarningTimer As Timer + Friend WithEvents Throbber As ToolStripProgressBar + Friend WithEvents SplashKillTimer As Timer + Friend WithEvents OPFKillTimer As Timer + Friend WithEvents FilenametxtToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator9 As ToolStripSeparator + Friend WithEvents UndoTimer As Timer + Friend WithEvents BulletPointsToolStripMenuItem As ToolStripMenuItem + Friend WithEvents DashesToolStripMenuItem As ToolStripMenuItem + Friend WithEvents FilePicker As ListBox + Friend WithEvents ToolStripSeparator10 As ToolStripSeparator + Friend WithEvents RenameToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator11 As ToolStripSeparator + Friend WithEvents MoveToolStripMenuItem As ToolStripMenuItem + Friend WithEvents MoveFileDialogue As SaveFileDialog + Friend WithEvents RenameToolStripMenuItem1 As ToolStripMenuItem + Friend WithEvents EncryptToolStripMenuItem As ToolStripMenuItem + Friend WithEvents EncryptToolStripMenuItem1 As ToolStripMenuItem + Friend WithEvents DecryptToolStripMenuItem As ToolStripMenuItem +End Class diff --git a/Notepad Ultra.resx b/Notepad Ultra.resx new file mode 100644 index 0000000..3915cb1 --- /dev/null +++ b/Notepad Ultra.resx @@ -0,0 +1,1266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 150, 53 + + + 229, 17 + + + 347, 17 + + + 511, 17 + + + 651, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + 771, 17 + + + 1025, 17 + + + 17, 17 + + + 310, 53 + + + 104 + + + + AAABAA0AICAQAAEABADoAgAA1gAAABAQEAABAAQAKAEAAL4DAAAwMAAAAQAIAKgOAADmBAAAICAAAAEA + CACoCAAAjhMAABAQAAABAAgAaAUAADYcAAAAAAAAAQAgABMIAACeIQAAQEAAAAEAIAAoQgAAsSkAADAw + AAABACAAqCUAANlrAAAoKAAAAQAgAGgaAACBkQAAICAAAAEAIACoEAAA6asAABgYAAABACAAiAkAAJG8 + AAAUFAAAAQAgALgGAAAZxgAAEBAAAAEAIABoBAAA0cwAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAA + AAAAAAAAEAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiIiIiIiIiI + iIiIiIiAAAAAAAAAAAAAAAAAAAAAAA/////w//////////////AP////8P/////////////wD/////D/ + ////////////8A/////w//////////////AP////8P/////////////wD/////D/////////////8A// + ///w8PDwAPD/8PDw8PAP////8PAA8P/wD/Dw8ADwD/////Dw8PD/8PDwAPDw8A/////w/w/w//AP8PD/ + D/AP////8P/////////////wD/////D/////////////8A/////w//////////////AP////8P////// + ///////wD/////Dw//8PD///8AAP8A/////w8P/wDw///w//8PAP////8PD/AA8P//8P//DwD/////Dw + /w8PD///D//w8A/////w8PD/DwAA/w//8PAP////8PDw/w8P/w8P//DwD/////DwD/8PD/8PD//w8A// + ///w8A//DwAA/w//8PAP////8P/////////////wD/////D/////////////8AAAAAAAAAAAAAAAAAAA + AAAN3d3d3d3d3d3d3d3d3d3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////ygA + AAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA + gACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AiIiIiIiIiIj/8P/////////w + /////wD///D////w/w//8P////D/D//w////8P8P//D///D/////8P//8A/////w///w8P////D///AP + ////8PD/D//////w8PAP//////DwDw//////8PD/D//////w////////3d3d3d3d3d0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA + AABgAAAAAQAIAAAAAACACgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAODg4A3AD/AOjo6AD///8AACCwAAAm + zwAALPAAET3/ADFX/wBRcf8AcYv/AJGl/wCxv/8A0dr/AP///wAAAAAAABovAAAtUAAAP3AAAFGQAABj + sAAAds8AAIjwABGY/wAxpv8AUbP/AHHB/wCRz/8Asd3/ANHr/wD///8AAAAAAAAsLwAAS1AAAGhwAACG + kAAApbAAAMPPAADh8AAR7/8AMfH/AFHz/wBx9f8Akff/ALH5/wDR+/8A////AAAAAAAALyEAAFA3AABw + TAAAkGMAALB5AADPjwAA8KYAEf+0ADH/vgBR/8gAcf/TAJH/3ACx/+UA0f/wAP///wAAAAAAAC8OAABQ + GAAAcCIAAJAsAACwNgAAz0AAAPBKABH/WwAx/3EAUf+HAHH/nQCR/7IAsf/JANH/3wD///8AAAAAAAIv + AAAEUAAABnAAAAiQAAAKsAAAC88AAA7wAAAg/xIAPf8xAFv/UQB5/3EAmP+RALX/sQDU/9EA////AAAA + AAAULwAAIlAAADBwAAA9kAAATLAAAFnPAABn8AAAeP8RAIr/MQCc/1EArv9xAMD/kQDS/7EA5P/RAP// + /wAAAAAAJi8AAEBQAABacAAAdJAAAI6wAACpzwAAwvAAANH/EQDY/zEA3v9RAOP/cQDp/5EA7/+xAPb/ + 0QD///8AAAAAAC8mAABQQQAAcFsAAJB0AACwjgAAz6kAAPDDAAD/0hEA/9gxAP/dUQD/5HEA/+qRAP/w + sQD/9tEA////AAAAAAAvFAAAUCIAAHAwAACQPgAAsE0AAM9bAADwaQAA/3kRAP+KMQD/nVEA/69xAP/B + kQD/0rEA/+XRAP///wAAAAAALwMAAFAEAABwBgAAkAkAALAKAADPDAAA8A4AAP8gEgD/PjEA/1xRAP96 + cQD/l5EA/7axAP/U0QD///8AAAAAAC8ADgBQABcAcAAhAJAAKwCwADYAzwBAAPAASQD/EVoA/zFwAP9R + hgD/cZwA/5GyAP+xyAD/0d8A////AAAAAAAvACAAUAA2AHAATACQAGIAsAB4AM8AjgDwAKQA/xGzAP8x + vgD/UccA/3HRAP+R3AD/seUA/9HwAP///wAAAAAALAAvAEsAUABpAHAAhwCQAKUAsADEAM8A4QDwAPAR + /wDyMf8A9FH/APZx/wD3kf8A+bH/APvR/wD///8AAAAAABsALwAtAFAAPwBwAFIAkABjALAAdgDPAIgA + 8ACZEf8ApjH/ALRR/wDCcf8Az5H/ANyx/wDr0f8A////AAAAAAAIAC8ADgBQABUAcAAbAJAAIQCwACYA + zwAsAPAAPhH/AFgx/wBxUf8AjHH/AKaR/wC/sf8A2tH/AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD + AAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQE + BAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE + AQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAAAAAAAAAQEBAQAAAQEBAQEBAQEAQEAAAQEBAQEBAQE + BAQAAAQEBAQEBAQEBAQEBAAAAAAAAAQEBAQAAAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQE + BAQAAAQEBAQEBAAAAAAEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQAAAQEBAQEBAAA + AAAEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEAAAEBAQEBAQEBAAABAQEBAQEBAQEBAQE + AQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEAAAEBAQEBAQEBAAABAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQE + BAQAAAQEBAQEBAQEAAAEBAQEBAQEBAAABAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQE + AAAEBAQEBAQEBAAABAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEAAAEBAQEBAQEBAAA + BAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEAAAEBAQEBAQEBAAABAQEBAQEBAQEBAQE + AQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEAAAEBAQEBAQEBAAABAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQE + BAQAAAQEBAQEBAQEAAAEBAQEBAQEBAAABAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQE + BAQAAAQEBAQEBAAAAAAEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQAAAQEBAQEBAAA + AAAEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAAAAAAAAAQEBAQAAAQEBAQEBAQE + AQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAAAAAAAAAQEBAQAAAQEBAQEBAQEAQEAAAQEBAQEBAQE + BAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQE + BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQE + BAQEBAQEBAQEBAQEAQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE + AQEAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQEBAQEBAQE + BAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQEBAQEBAQEBAQAAAQEAAAEBAQE + BAQAAAQEAAAEBAQEBAQEBAAAAAAEBAQEAAAAAAQEBAQEBAQEBAQAAAQEAAAEBAQEBAQAAAQEAAAEBAQE + BAQEBAAAAAAEBAQEAAAAAAQEBAQEBAQEBAQAAAQEAAAEBAQEAAAAAAQEAAAEBAQEBAQAAAQEBAQAAAQE + AAAAAAQEBAQEBAQEBAQAAAQEAAAEBAQEAAAAAAQEAAAEBAQEBAQAAAQEBAQAAAQEAAAAAAQEBAQEBAQE + BAQAAAQEAAAEBAAABAQAAAQEAAAAAAQEBAQAAAQEBAQAAAQEAAAAAAQEBAQEBAQEBAQAAAQEAAAEBAAA + BAQAAAQEAAAAAAQEBAQAAAQEBAQAAAQEAAAAAAQEBAQEBAQEBAQAAAQEAAAAAAQEBAQAAAQEAAAEBAAA + BAQAAAQEBAQAAAQEAAAAAAQEBAQEBAQEBAQAAAQEAAAAAAQEBAQAAAQEAAAEBAAABAQAAAQEBAQAAAQE + AAAAAAQEBAQEBAQEBAQAAAQEAAAEBAQEBAQAAAQEAAAAAAQEBAQAAAQEBAQAAAQEAAAAAAQEBAQEBAQE + BAQAAAQEAAAEBAQEBAQAAAQEAAAAAAQEBAQAAAQEBAQAAAQEAAAAAAQEBAQEBAQEBAQAAAQEBAQEBAQE + BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQEBAQEBAQEBAQAAAQEBAQEBAQEBAQEBAQEBAQEBAQE + BAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgIC + AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAICAgICAgICAgICAgICAgICAgIC + AgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAIAEAAAAAAAAAAAAAAAB + AAAAAAAAAAAAAAcHBwAIAAoAGRkZAB0AIgDcAP8AwMDAAP///wARPf8AMVf/AFFx/wBxi/8AkaX/ALG/ + /wDR2v8A////AAAAAAAAGi8AAC1QAAA/cAAAUZAAAGOwAAB2zwAAiPAAEZj/ADGm/wBRs/8AccH/AJHP + /wCx3f8A0ev/AP///wAAAAAAACwvAABLUAAAaHAAAIaQAAClsAAAw88AAOHwABHv/wAx8f8AUfP/AHH1 + /wCR9/8Asfn/ANH7/wD///8AAAAAAAAvIQAAUDcAAHBMAACQYwAAsHkAAM+PAADwpgAR/7QAMf++AFH/ + yABx/9MAkf/cALH/5QDR//AA////AAAAAAAALw4AAFAYAABwIgAAkCwAALA2AADPQAAA8EoAEf9bADH/ + cQBR/4cAcf+dAJH/sgCx/8kA0f/fAP///wAAAAAAAi8AAARQAAAGcAAACJAAAAqwAAALzwAADvAAACD/ + EgA9/zEAW/9RAHn/cQCY/5EAtf+xANT/0QD///8AAAAAABQvAAAiUAAAMHAAAD2QAABMsAAAWc8AAGfw + AAB4/xEAiv8xAJz/UQCu/3EAwP+RANL/sQDk/9EA////AAAAAAAmLwAAQFAAAFpwAAB0kAAAjrAAAKnP + AADC8AAA0f8RANj/MQDe/1EA4/9xAOn/kQDv/7EA9v/RAP///wAAAAAALyYAAFBBAABwWwAAkHQAALCO + AADPqQAA8MMAAP/SEQD/2DEA/91RAP/kcQD/6pEA//CxAP/20QD///8AAAAAAC8UAABQIgAAcDAAAJA+ + AACwTQAAz1sAAPBpAAD/eREA/4oxAP+dUQD/r3EA/8GRAP/SsQD/5dEA////AAAAAAAvAwAAUAQAAHAG + AACQCQAAsAoAAM8MAADwDgAA/yASAP8+MQD/XFEA/3pxAP+XkQD/trEA/9TRAP///wAAAAAALwAOAFAA + FwBwACEAkAArALAANgDPAEAA8ABJAP8RWgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R3wD///8AAAAAAC8A + IABQADYAcABMAJAAYgCwAHgAzwCOAPAApAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x5QD/0fAA////AAAA + AAAsAC8ASwBQAGkAcACHAJAApQCwAMQAzwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR/wD5sf8A+9H/AP// + /wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMAsAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx/wDPkf8A3LH/AOvR + /wD///8AAAAAAAgALwAOAFAAFQBwABsAkAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR/wCMcf8AppH/AL+x + /wDa0f8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMDAwMDAwMDAwMDAwMDAwMD + AwMDAwMDAwMDAwMDAwEDBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAwEDAwMDAwMDAwMDAwMD + AwMDAwMDAwMDAwMDAwMDAwMBAAcHBwcHBwcHAAcHBwcHBwcHBwcHBwcHBwcHBwcHBwAABwcHBwcHBwcA + BwcHBwcHBwcHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwAHBwcHBwcHBwcHBwcHBwcHBwcHBwcAAAcHBwcH + BwcHAAcHBwcHBwcHBwcHBwcHBwcHBwcHBwAABwcHBwcHBwcABwcHBwcHBwcHBwcHBwcHBwcHBwcHAAAH + BwcHBwcHBwAHBwcHBwcHBwcHBwcHBwcHBwcHBwcAAAcHBwcHBwcHAAcABwAHAAAABwAHBwcABwAHAAcA + BwAABwcHBwcHBwcABwAAAAcABwcHAAAHBwAHAAcAAAAHAAAHBwcHBwcHBwAHAAcABwAHBwcABwAHAAAA + BwAHAAcAAAcHBwcHBwcHAAcHAAcHAAcHBwAABwcABwAHBwAHBwAABwcHBwcHBwcABwcHBwcHBwcHBwcH + BwcHBwcHBwcHAAAHBwcHBwcHBwAHBwcHBwcHBwcHBwcHBwcHBwcHBwcAAAcHBwcHBwcHAAcHBwcHBwcH + BwcHBwcHBwcHBwcHBwAABwcHBwcHBwcABwcHBwcHBwcHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwAHAAcH + BwcABwAHBwcHBwcAAAAABwcAAAcHBwcHBwcHAAcABwcHAAAHAAcHBwcHAAcHBwcABwAABwcHBwcHBwcA + BwAHBwAAAAcABwcHBwcABwcHBwAHAAAHBwcHBwcHBwAHAAcHAAcABwAHBwcHBwAHBwcHAAcAAAcHBwcH + BwcHAAcABwAHBwAHAAAAAAcHAAcHBwcABwAABwcHBwcHBwcABwAHAAcHAAcABwcHAAcABwcHBwAHAAAH + BwcHBwcHBwAHAAAHBwcABwAHBwcABwAHBwcHAAcAAAcHBwcHBwcHAAcAAAcHBwAHAAAAAAcHAAcHBwcA + BwAABwcHBwcHBwcABwcHBwcHBwcHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwAHBwcHBwcHBwcHBwcHBwcH + BwcHBwcAAgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIEBQUFBQUFBQUFBQUFBQUFBQUFBQUF + BQUFBQUFBQUFBAIEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/////ygAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAA + AAAAAAAA5EH/ANDQ0AD///8AABqQAAAgsAAAJs8AACzwABE9/wAxV/8AUXH/AHGL/wCRpf8Asb//ANHa + /wD///8AAAAAAAAaLwAALVAAAD9wAABRkAAAY7AAAHbPAACI8AARmP8AMab/AFGz/wBxwf8Akc//ALHd + /wDR6/8A////AAAAAAAALC8AAEtQAABocAAAhpAAAKWwAADDzwAA4fAAEe//ADHx/wBR8/8AcfX/AJH3 + /wCx+f8A0fv/AP///wAAAAAAAC8hAABQNwAAcEwAAJBjAACweQAAz48AAPCmABH/tAAx/74AUf/IAHH/ + 0wCR/9wAsf/lANH/8AD///8AAAAAAAAvDgAAUBgAAHAiAACQLAAAsDYAAM9AAADwSgAR/1sAMf9xAFH/ + hwBx/50Akf+yALH/yQDR/98A////AAAAAAACLwAABFAAAAZwAAAIkAAACrAAAAvPAAAO8AAAIP8SAD3/ + MQBb/1EAef9xAJj/kQC1/7EA1P/RAP///wAAAAAAFC8AACJQAAAwcAAAPZAAAEywAABZzwAAZ/AAAHj/ + EQCK/zEAnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQAACOsAAAqc8AAMLw + AADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBbAACQdAAAsI4AAM+p + AADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAiAABwMAAAkD4AALBN + AADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8DAABQBAAAcAYAAJAJ + AACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAAAAAvAA4AUAAXAHAA + IQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP///wAAAAAALwAgAFAA + NgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R8AD///8AAAAAACwA + LwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx/wD70f8A////AAAA + AAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R/wDcsf8A69H/AP// + /wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx/wCmkf8Av7H/ANrR + /wD///8AAgICAgICAgICAgICAgICAgMDAwADAwMDAwMDAwMDAwMDAwMAAwMDAwMDAwMAAAMDAwMDAAMD + AwMDAwMAAwMAAwMDAwADAwMDAwMDAAMDAAMDAwMAAwMDAwMDAwADAwADAwMDAAMDAwMDAAMDAwMDAwMD + AwADAwMDAwAAAwMDAwMDAwMAAwMDAwMAAwADAwMDAwMDAAMDAwMDAAADAwMDAwMDAwADAAMDAAMDAwMD + AwMDAwMAAwADAAADAwMDAwMDAwMDAAMAAAMAAwMDAwMDAwMDAwADAAMDAAMDAwMDAwMDAwMAAwMDAwMD + AwMDAwMDAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIBgAAAFxyqGYA + AAfaSURBVHja7d1BimVFEIbRV6MWhwWCPXCiK3EZvcJehitxLgi9hdIVZEL9XCIi8xxwVN56ES9vfqOC + fnsB13qrHgCoIwBwMQGAiwkAXEwA4GICABcTALjY28+vnz5W/8Ovr1+qZwQ+6Z/Xv8ufCwAcTADgYgIA + FxMAuJgAwMUEAC4mAHCxbQB+f/22DMDfr7+qdwA+6Y/Xn8ufCwAcTADgYgIAFxMAuJgAwMUEAC4mAHCx + bQD8IRCcy18CwsUEAC4mAHAxAYCLCQBcTADgYgIAF9sG4P//lgH4+Fj++Hhvb+t/O+X274fedu+vAGwI + AJMJQEgAmEwAQgLAZAIQEgAmE4CQADCZAIQEgMkEICQATCYAIQFgMgEICQCTCUBIAJhMAEICwGQCEBIA + JhOAkAAwmQCEBIDJBCAkAEwmAKE0ALvnd57+/qv3S6XfT/fAP30+ArBRfUEEYE0ABOBR1RdEANYEQAAe + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCRwHBwcgFxcX + IBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcX + IBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcX + IBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcX + IBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgFxcXIBcXFyAXFxcgBwcH + IAkJCRwHBwf/BwcH/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/wcHB/8HBwf/BwcH/wcHB/8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8HBwf/BwcH/xkZGf8ZGRn/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/GRkZ/xkZGf8ZGRn/GRkZ + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /xkZGf8ZGRn/BwcH/wcHB/8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8HBwf/BwcH/wcHB/8HBwf/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/BwcH/wcHB/8AAAD/AAAA//////////////// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA + /wAAAP////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////// + ////////////////////////////////////////////////////////////////////////////AAAA + /wAAAP////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + /wAAAP8AAAD///////////////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////// + ////////////////////////////////////////////////////////////AAAA/wAAAP////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + /wAAAP8AAAD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////AAAA + /wAAAP8AAAD/AAAA//////////////////////////////////////////////////////////////// + //////////////////////8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////// + ////////////////////////////////////////////AAAA/wAAAP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA + //////////////////////////////////////////////////////////////////////////////// + //////8AAAD/AAAA////////////AAAA/wAAAP///////////wAAAP8AAAD///////////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/////////////////////////////////AAAA + /wAAAP///////////wAAAP8AAAD///////////8AAAD/AAAA////////////AAAA/wAAAP////////// + /wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////// + ////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD///////////8AAAD/AAAA + ////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA//////////////// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA////////////AAAA/wAAAP////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////// + /////////////////////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/////////////////////////////////AAAA + /wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////// + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + ////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA//////////////// + /////////////////wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA + /wAAAP////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP///////////wAAAP8AAAD///////////8AAAD/AAAA////////////AAAA + /wAAAP////////////////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////// + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP///////////wAAAP8AAAD///// + //////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////// + /////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA////////////AAAA + /wAAAP///////////wAAAP8AAAD/////////////////////////////////AAAA/wAAAP////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD///// + //////8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA//////////////// + //////8AAAD/AAAA//////////////////////8AAAD/AAAA//////////////////////////////// + /wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP///////////wAAAP8AAAD///// + /////////////////wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP////////// + ////////////////////////////////////////////////////////////////////////////AAAA + /wAAAP//////////////////////AAAA/wAAAP//////////////////////AAAA/wAAAP////////// + //////////////////////8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA//////////////////////8AAAD/AAAA//////////////////////8AAAD/AAAA + /wAAAP8AAAD///////////////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////// + ////////////////////////////////////////////////////////////AAAA/wAAAP////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + /wAAAP8AAAD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////AAAA + /wAAAP8AAAD/AAAA//////////////////////////////////////////////////////////////// + //////////////////////8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////// + ////////////////////////////////////////////AAAA/wAAAP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA + //////////////////////////////////////////////////////////////////////////////// + //////8AAAD/AAAA//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////// + ////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD///////////////////// + //////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////////////////////// + //////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + //////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////// + /////////////////////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA + ////////////////////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD///// + ////////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA//////////////// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + ////////////AAAA/wAAAP////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///// + //////8AAAD/AAAA//////////////////////////////////////////////////////8AAAD/AAAA + ////////////////////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD/AAAA + /wAAAP////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP///////////wAAAP8AAAD/////////////////////////////////AAAA + /wAAAP8AAAD/AAAA////////////AAAA/wAAAP////////////////////////////////////////// + ////////////AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////// + /////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA//////////////// + //////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA////////////AAAA + /wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA + //////////////////////////////////////////////////////8AAAD/AAAA//////////////// + ////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP////////// + ////////////////////////////////////////////////////////////////////////////AAAA + /wAAAP///////////wAAAP8AAAD//////////////////////wAAAP8AAAD///////////8AAAD/AAAA + ////////////AAAA/wAAAP//////////////////////////////////////////////////////AAAA + /wAAAP///////////////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA + /wAAAP8AAAD///////////////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA//////////////////////8AAAD/AAAA + ////////////AAAA/wAAAP///////////wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA + ////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////// + /wAAAP8AAAD//////////////////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA//////////////////////////////// + ////////////AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP////////////////////////// + ////////////////////////////////////////////////////////////AAAA/wAAAP////////// + /wAAAP8AAAD///////////8AAAD/AAAA//////////////////////8AAAD/AAAA////////////AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP////////// + /////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA////////////AAAA/wAAAP//////////////////////AAAA + /wAAAP///////////wAAAP8AAAD/////////////////////////////////AAAA/wAAAP////////// + /wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA////////////AAAA + /wAAAP8AAAD/AAAA//////////////////////////////////////////////////////////////// + //////////////////////8AAAD/AAAA////////////AAAA/wAAAP///////////wAAAP8AAAD///// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA//////////////////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA////////////////////////////////////////////AAAA + /wAAAP///////////wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////// + ////////////////////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD/AAAA + /wAAAP////////////////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////// + //////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////////////////////// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA/wAAAP8AAAD/////////////////////////////////AAAA/wAAAP////////// + /wAAAP8AAAD/////////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD///// + //////////////////////////////////////8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA + //////////////////////////////////////////////////////////////////////////////// + //////8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////// + //////8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP////////// + /wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////// + ////////////////////////////AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP////////// + //////////////////////8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP//////////////////////AAAA/wAAAP////////////////////////////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA + /wAAAP////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////AAAA/wAAAP8IAAr/CAAK/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/wgACv8IAAr/CAAK/wgACv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8IAAr/CAAK + /x0AIv8dACL/3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//HQAi/x0AIv8dACL/HQAi/9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//x0AIv8dACL/CAAK/wgACv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8IAAr/CAAK/wgACv8IAAr/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/CAAK + /wgACv8JAAkcBwAPIBcAHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAf + IB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAf + IB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAf + IB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAfIB8AHyAfAB8gHwAf + IB8AHyAfAB8gFwAfIAcADyAJAAkcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP//////////KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P8AAAD/AAAA/wAAAP8AAAD/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wEBAf8BAQH//////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8PDw//Dw8P/wEBAf8BAQH///////////////////////////////////////////////////// + /wAAAP8AAAD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////8PDw//Dw8P/wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////////////// + ////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD///// + //////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + ////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////// + /wAAAP8AAAD///////////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD/////////////////////////////////AAAA + /wAAAP8AAAD/AAAA//////////////////////////////////////////////////////8ODg7/Dg4O + /wAAAP8AAAD//////////////////////////////////////////////////////wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + ////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////// + //////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////////////////////// + /wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA//////////////// + ////////////////////////////AAAA/wAAAP////////////////////////////////////////// + //////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA + ////////////////////////////////////////////AAAA/wAAAP////////////////////////// + //////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP////////// + //////////////////////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + //////////////////////8AAAD/AAAA////////////////////////////////////////////AAAA + /wAAAP////////////////////////////////////////////////////////////////8ODg7/Dg4O + /wAAAP8AAAD//////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + //////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////////////////////// + /wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA//////////////// + ////////////////////////////AAAA/wAAAP////////////////////////////////////////// + //////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA + ////////////////////////////////////////////AAAA/wAAAP////////////////////////// + //////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP////////// + //////////////////////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD/////////////////////////////////AAAA + /wAAAP8AAAD/AAAA//////////////////////////////////////////////////////8ODg7/Dg4O + /wAAAP8AAAD//////////////////////////////////////////////////////wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + ////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////// + //////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////////////////////// + /wAAAP8AAAD/////////////////////////////////////////////////////////////////AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD///////////////////// + //////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////////////// + ////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD///// + //////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8ODg7/Dg4O/wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////8ODg7/Dg4O + /wAAAP8AAAD//////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////////////////////// + /wAAAP8AAAD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////8ODg7/Dg4O/wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA + /////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA//////////////// + ////////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA + /wAAAP8AAAD//////////////////////////////////////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA/////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA + ////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////// + //////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD///// + //////8AAAD/AAAA/////////////////////////////////wAAAP8AAAD///////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA//////////////////////8AAAD/AAAA + /wAAAP8AAAD///////////8AAAD/AAAA/////////////////////////////////wAAAP8AAAD///// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA////////////AAAA + /wAAAP///////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /wAAAP8AAAD//////////////////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA + ////////////AAAA/wAAAP///////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///// + /////////////////wAAAP8AAAD//////////////////////wAAAP8AAAD///////////8AAAD/AAAA + /wAAAP8AAAD//////////////////////////////////////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD///////////8AAAD/AAAA + ////////////AAAA/wAAAP///////////wAAAP8AAAD//////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA////////////AAAA/wAAAP///////////wAAAP8AAAD///////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA//////////////////////////////// + /wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD///// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /////////////////////////////////wAAAP8AAAD///////////8AAAD/AAAA//////////////// + /////////////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////// + /wAAAP8AAAD//////////////////////wAAAP8AAAD///////////8AAAD/AAAA/wEAAf8BAAH///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + /wEAAf8BAAH//////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA//8AAAD/AAAA/wAAAP8AAAD/3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA//8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAoAAAAUAAA + AAEAIAAAAAAAQBoAAAAAAAAAAAAAAAAAAAAAAADQ0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND//////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + ////////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + //////////////////////8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + ////////////////////////////////////////////AAAA/wAAAP//////////////////////AAAA + /wAAAP////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD//////////////////////wAAAP8AAAD///////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + //////////////////////8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + ////////////////////////////////////////////AAAA/wAAAP//////////////////////AAAA + /wAAAP////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD//////////////////////wAAAP8AAAD///////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////8AAAD/AAAA//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP//////////////////////////////////////////////////////AAAA + /wAAAP8AAAD/AAAA//////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP//////////////////////////////////////////////////////AAAA + /wAAAP///////////wAAAP8AAAD///////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + /////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP///////////wAAAP8AAAD//////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA//////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////// + /wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP///////////wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP///////////wAAAP8AAAD//////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////8AAAD/AAAA//////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAHBwf/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/BwcH/xkZGf/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA + /8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP8ZGRn/BwcH/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/wcHB/8AAAD///////////////////// + //////////////////////8AAAD///////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////AAAA/wAAAP////////// + /////////////////////////////////wAAAP////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////8AAAD/AAAA + ////////////////////////////////////////////AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /wAAAP8AAAD///////////////////////////////////////////8AAAD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP///////////////////////////////////////////wAAAP////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////8AAAD/AAAA////////////////////////////////////////////AAAA + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////wAAAP8AAAD///////////////////////////////////// + //////8AAAD//////wAAAP//////AAAA//////8AAAD/AAAA/wAAAP//////AAAA//////////////// + /wAAAP//////AAAA//////8AAAD//////wAAAP//////AAAA/wAAAP////////////////////////// + /////////////////wAAAP//////AAAA/wAAAP8AAAD//////wAAAP////////////////8AAAD/AAAA + ////////////AAAA//////8AAAD//////wAAAP8AAAD/AAAA//////8AAAD/AAAA//////////////// + ////////////////////////////AAAA//////8AAAD//////wAAAP//////AAAA//////////////// + /wAAAP//////AAAA//////8AAAD/AAAA/wAAAP//////AAAA//////8AAAD//////wAAAP8AAAD///// + //////////////////////////////////////8AAAD///////////8AAAD///////////8AAAD///// + ////////////AAAA/wAAAP///////////wAAAP//////AAAA////////////AAAA////////////AAAA + /wAAAP///////////////////////////////////////////wAAAP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8AAAD/AAAA////////////////////////////////////////////AAAA//////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////wAAAP8AAAD///////////////////////////////////////////8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////AAAA/wAAAP////////////////////////////////////////// + /wAAAP////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8AAAD/AAAA//////////////////////////////// + ////////////AAAA//////8AAAD//////////////////////wAAAP//////AAAA//////////////// + /////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD///////////////////// + //////////////////////8AAAD//////wAAAP////////////////8AAAD/AAAA//////8AAAD///// + //////////////////////8AAAD//////////////////////wAAAP//////AAAA/wAAAP////////// + /////////////////////////////////wAAAP//////AAAA////////////AAAA/wAAAP8AAAD///// + /wAAAP///////////////////////////wAAAP//////////////////////AAAA//////8AAAD/AAAA + ////////////////////////////////////////////AAAA//////8AAAD///////////8AAAD///// + /wAAAP//////AAAA////////////////////////////AAAA//////////////////////8AAAD///// + /wAAAP8AAAD///////////////////////////////////////////8AAAD//////wAAAP//////AAAA + ////////////AAAA//////8AAAD/AAAA/wAAAP8AAAD///////////8AAAD///////////////////// + /wAAAP//////AAAA/wAAAP///////////////////////////////////////////wAAAP//////AAAA + //////8AAAD///////////8AAAD//////wAAAP////////////////8AAAD//////wAAAP////////// + ////////////AAAA//////8AAAD/AAAA////////////////////////////////////////////AAAA + //////8AAAD/AAAA/////////////////wAAAP//////AAAA/////////////////wAAAP//////AAAA + //////////////////////8AAAD//////wAAAP8AAAD///////////////////////////////////// + //////8AAAD//////wAAAP8AAAD/////////////////AAAA//////8AAAD/AAAA/wAAAP8AAAD///// + //////8AAAD//////////////////////wAAAP//////AAAA/wAAAP////////////////////////// + /////////////////wAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8AAAD/AAAA//////////////// + ////////////////////////////AAAA//////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////wAAAP8IAAr/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/CAAK + /x0AIv/cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA//8dACL/CAAK/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi/x0AIv8dACL/HQAi + /x0AIv8dACL/HQAi/wgACv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAA + AAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo + /+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wEBAf///////////////////////////wAAAP////////////////////////////////////////// + ////////////////////////////////////////////Dw8P/wAAAP////////////////////////// + /wAAAP////////////////////////////////8AAAD/AAAA/wAAAP///////////wAAAP////////// + ////////////Dg4O/wAAAP///////////////////////////wAAAP////////////////////////// + /wAAAP////////////////8AAAD/AAAA////////////////////////////Dg4O/wAAAP////////// + /////////////////wAAAP//////////////////////AAAA//////////////////////8AAAD///// + ////////////////////////////Dg4O/wAAAP///////////////////////////wAAAP////////// + ////////////AAAA//////////////////////8AAAD/////////////////////////////////Dg4O + /wAAAP///////////////////////////wAAAP//////////////////////AAAA//////////////// + //////8AAAD/////////////////////////////////Dg4O/wAAAP////////////////////////// + /wAAAP//////////////////////AAAA//////////////////////8AAAD///////////////////// + ////////////Dg4O/wAAAP///////////////////////////wAAAP////////////////////////// + /wAAAP////////////////8AAAD/AAAA////////////////////////////Dg4O/wAAAP////////// + /////////////////wAAAP////////////////////////////////8AAAD/AAAA/wAAAP////////// + /wAAAP//////////////////////Dg4O/wAAAP///////////////////////////wAAAP////////// + ////////////////////////////////////////////////////////////////////////////Dg4O + /wAAAP///////////////////////////wAAAP////////////////////////////////////////// + ////////////////////////////////////////////Dg4O/wAAAP////////////////////////// + /wAAAP////////////////////////////////////////////////////////////////////////// + ////////////AAAA/wAAAP///////////////////////////wAAAP//////AAAA//////////////// + /wAAAP//////AAAA//////////////////////8AAAD/AAAA////////////AAAA/wAAAP////////// + /////////////////wAAAP//////AAAA////////////AAAA/wAAAP//////AAAA//////////////// + /wAAAP///////////wAAAP//////AAAA/wAAAP///////////////////////////wAAAP//////AAAA + //////8AAAD//////wAAAP//////AAAA/wAAAP///////////wAAAP///////////wAAAP//////AAAA + /wAAAP///////////////////////////wAAAP//////AAAA/wAAAP///////////wAAAP//////AAAA + //////8AAAD//////wAAAP///////////wAAAP//////AAAA/wAAAP////////////////////////// + /wAAAP//////AAAA/////////////////wAAAP//////AAAA/wAAAP///////////wAAAP////////// + /wAAAP//////AAAA/wEAAf///////////////////////////wAAAP////////////////////////// + ////////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACgAAAAUAAAAKAAAAAEAIAAAAAAAkAYAAAAAAAAAAAAAAAAAAAAAAADQ0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND///////////////////////////8AAAD///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////wAAAP////////////////////////////////////////////////////////// + ////////////////////////////////////////////AAAA//////////////////////////////// + ////////////AAAA/wAAAP////////////////////////////////////////////////8AAAD///// + /////////////////////////////////wAAAP///////////wAAAP////////////////////////// + /////////////////wAAAP//////////////////////////////////////AAAA////////////AAAA + ////////////////////////////////////////////AAAA//////////////////////////////// + //////8AAAD///////////8AAAD///////////////////////////////////////////8AAAD///// + //////////////////////8AAAD///////////////////////////////////////////////////// + /////////////////wAAAP///////////////////////////wAAAP8AAAD///////////////////// + ////////////////////////////////////////////AAAA////////////////////////////AAAA + //////8AAAD///////////////////////////////////////////////////////////8AAAD///// + //////////////////////8AAAD/AAAA//////////////////////////////////////////////// + /////////////////wAAAP//////AAAA////////////AAAA//////////////////////////////// + ////////////////////////////////////////////AAAA//////8AAAD//////wAAAP8AAAD///// + //////////////////////////////////////////////////////////////////////8AAAD///// + /wAAAP8AAAD//////wAAAP////////////////////////////////////////////////////////// + /////////////////wAAAP//////AAAA////////////AAAA//////////////////////////////// + ////////////////////////////////////////////AAAA//////////////////////////////// + //////////////////////////////////////////////////////////////////////8AAAD///// + ///////////////////////////////////////////////////////////////////////cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//3AD/ + /9wA///cAP//3AD//9wA///cAP//3AD//9wA///cAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAEAAA + ACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAA0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ + /9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/////////////////wAAAP////////// + //////////////////////////////////////////////////////////////////////8AAAD///// + //////////////////////////////////////8AAAD/AAAA////////////////////////////AAAA + //////////////////////////////////////8AAAD///////////8AAAD///////////////////// + /wAAAP//////////////////////////////////////AAAA////////////AAAA//////////////// + //////8AAAD//////////////////////////////////////wAAAP///////////wAAAP////////// + ////////////AAAA////////////////////////////AAAA//////////////////////////////// + /////////////////wAAAP///////////////////////////wAAAP8AAAD///////////////////// + //////////////////////8AAAD///////////////////////////8AAAD//////wAAAP////////// + ////////////////////////////AAAA////////////////////////////AAAA/wAAAP////////// + /////////////////////////////////wAAAP//////AAAA////////////AAAA//////////////// + //////////////////////////////////////8AAAD//////wAAAP//////AAAA/wAAAP////////// + ////////////////////////////////////////////AAAA//////8AAAD/AAAA//////8AAAD///// + /////////////////////////////////////////////////wAAAP//////AAAA////////////AAAA + //////////////////////////////////////////////////////8AAAD///////////////////// + ////////////////////////////////////////////5EH//+RB///kQf//5EH//+RB///kQf//5EH/ + /+RB///kQf//5EH//+RB///kQf//5EH//+RB///kQf//5EH//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + 461, 53 + + + 859, 53 + + + 1008, 53 + + + 1213, 53 + + + + AAABAAYAICAQAAAAAADoAgAAZgAAABAQEAAAAAAAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA + CABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA + /wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIoiI + iIiIiIiIiIiIiIiIiIiCIigiIiIozMzMzMzMyCIogiIoIiIiKM7m5ubm5sgiKIIiKCIiIijObm5ubm7I + IiiCIigiIiIozubm5ubmyCIogiIoIiIiKM5ubm5ubsgiKIIiKCIiIijO5ubm5ubIIiiIiIiIiIiIzm5u + bm5uyCIogRERERERGM7u7u7u7sgiKIHZWVlZWRjMzMzMzMzIIiiB1ZWVlZUYiIiIiIiIiIiIgdlZWVlZ + GDMzMzMzMzMzOIHVlZWVlRg/uLi4uLi4uDiB2VlZWVkYP7uLi4uLi4s4gdWVlZWVGD+4uLi4uLi4OIHZ + WVlZWRg/u4uLi4uLiziB1ZWVlZUYP7i4uLi4uLg4gdlZWVlZGD+7i4uLi4uLOIHVlZWVlRg/uLi4uLi4 + uDiB3d3d3d0YP7uLi4uLi4s4gRERERERGD+4uLi4uLi4OIiIiIiIiIg/u4uLi4uLiziCIiIiIiIoP7i4 + uLi4uLg4giIiIiIiKD+7i4uLi4uLOIIiIiIiIig/uLi4uLi4uDiCIiIiIiIoP7u7u7u7u7s4giIiIiIi + KD//////////OIIiIiIiIigzMzMzMzMzMziIiIiIiIiIiIiIiIiIiIiIIiIiIiIiIiIiIiIiIiIiIv// + ////////AAAAAHv4AA57+AAOe/gADnv4AA57+AAOe/gADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAB/+AAAf/gAAH/4AAB/+AAAf/gAAAAA + AAD/////KAAAABAAAAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACA + gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIoiI + iIiIiIiIgigijMzMyCiCKCKM5mbIKIiIiIzu7sgogRERjMzMyCiB2ZGIiIiIiIHZkYMzMzM4gdmRg/u7 + uziB3dGD+7u7OIEREYP7u7s4iIiIg/u7uziCIiKD+7u7OIIiIoP///84giIigzMzMziIiIiIiIiIiP// + KCIAACjObALm5mwCIigAAoiIAAKIzgAAbm4AACIoAAAREQAAGM4AAO7uAAAiKHwAWVl8ABjMfADMzAAA + IigoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA + AACAAIAAgIAAAICAgADA3MAA8MqmAKo/KgD/PyoAAF8qAFVfKgCqXyoA/18qAAB/KgBVfyoAqn8qAP9/ + KgAAnyoAVZ8qAKqfKgD/nyoAAL8qAFW/KgCqvyoA/78qAADfKgBV3yoAqt8qAP/fKgAA/yoAVf8qAKr/ + KgD//yoAAABVAFUAVQCqAFUA/wBVAAAfVQBVH1UAqh9VAP8fVQAAP1UAVT9VAKo/VQD/P1UAAF9VAFVf + VQCqX1UA/19VAAB/VQBVf1UAqn9VAP9/VQAAn1UAVZ9VAKqfVQD/n1UAAL9VAFW/VQCqv1UA/79VAADf + VQBV31UAqt9VAP/fVQAA/1UAVf9VAKr/VQD//1UAAAB/AFUAfwCqAH8A/wB/AAAffwBVH38Aqh9/AP8f + fwAAP38AVT9/AKo/fwD/P38AAF9/AFVffwCqX38A/19/AAB/fwBVf38Aqn9/AP9/fwAAn38AVZ9/AKqf + fwD/n38AAL9/AFW/fwCqv38A/79/AADffwBV338Aqt9/AP/ffwAA/38AVf9/AKr/fwD//38AAACqAFUA + qgCqAKoA/wCqAAAfqgBVH6oAqh+qAP8fqgAAP6oAVT+qAKo/qgD/P6oAAF+qAFVfqgCqX6oA/1+qAAB/ + qgBVf6oAqn+qAP9/qgAAn6oAVZ+qAKqfqgD/n6oAAL+qAFW/qgCqv6oA/7+qAADfqgBV36oAqt+qAP/f + qgAA/6oAVf+qAKr/qgD//6oAAADUAFUA1ACqANQA/wDUAAAf1ABVH9QAqh/UAP8f1AAAP9QAVT/UAKo/ + 1AD/P9QAAF/UAFVf1ACqX9QA/1/UAAB/1ABVf9QAqn/UAP9/1AAAn9QAVZ/UAKqf1AD/n9QAAL/UAFW/ + 1ACqv9QA/7/UAADf1ABV39QAqt/UAP/f1AAA/9QAVf/UAKr/1AD//9QAVQD/AKoA/wAAH/8AVR//AKof + /wD/H/8AAD//AFU//wCqP/8A/z//AABf/wBVX/8Aql//AP9f/wAAf/8AVX//AKp//wD/f/8AAJ//AFWf + /wCqn/8A/5//AAC//wBVv/8Aqr//AP+//wAA3/8AVd//AKrf/wD/3/8AVf//AKr//wD/zMwA/8z/AP// + MwD//2YA//+ZAP//zAAAfwAAVX8AAKp/AAD/fwAAAJ8AAFWfAACqnwAA/58AAAC/AABVvwAAqr8AAP+/ + AAAA3wAAVd8AAKrfAAD/3wAAVf8AAKr/AAAAACoAVQAqAKoAKgD/ACoAAB8qAFUfKgCqHyoA/x8qAAA/ + KgBVPyoA8Pv/AKSgoACAgIAAAAD/AAD/AAAA//8A/wAAAAAAAAD//wAA////AP39/f39/f39/f39/f39 + /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39 + /f39/f39/f39/f39/f39/f39/f39/f39qoYIqoYIhqoIqgiqCaoIqgiqhqqGhoYIhoYIqv39/f0I/f39 + /ar9/f39/YY2Ng4yDg4ODgoOCgoKCgqG/f39/Yb9/f39CP39/f39qjY7Ozs3Nzc3NjMSMjIOCqr9/f39 + qv39/f2G/f39/f0IN19fOzs3Nzc3NjcODg4KCP39/f0I/f39/ar9/f39/ao6X19fXzs7Ozc3NzY3NgqG + /f39/Yb9/f39CP39/f39hl9jY19jX187Ozs7Nzc3Dqr9/f39qv39/f2G/f39/f0IOodjh19jX19fXztf + OzcOCP39/f0ICAmqCAiqCKoICapfCYdjh2ODY19fXzs7Ow6q/f39/QhITEwoSCUoKSQoqmMJCYcJCWNj + Y2NfY19fNgj9/f39qkyZmZmYmJRwlCmqX19fXl9fX186WzY3Njc2gv39/f0JcJ2dmZmZlJmUJAmqCaoJ + hggIqggICKoIqggI/f39/YZwnp2dnZmZmJVMqnx8fHx8fFR8VHhUVFRUVKr9/f39CHChoZ2dnZ2ZmUwJ + fKSkxqSkxqSkpKSkpKBUCP39/f2qcKLDoqGdnZ2ZTKp8ysakxqSkxqSkxqSkpFSq/f39/QiUpqbDoqHE + nZ1Mq3ykqMakyqSkxqSkpKSkVAj9/f39hpTIyKbHoqGhoXAIfMrLpMqkxqSkxqTGpKRUqv39/f0IlMym + yKbIpcShcAh8y6jKpMqkxsqkpKSkxlQI/f39/aqUzMzMyKbIpqJwqnzLy8qpxsqkpMakxqSkeAj9/f39 + CJSUlJSUlJSUlJQJgMupy8qpysqkyqSkxqRUqv39/f2GCKoIqgiqCKoIhgigrcvPqcuoy8qkxsqkxnyG + /f39/ar9/f39/f39/f39qnzPz6nLy8uoyqnKpKTKVAj9/f39CP39/f39/f39/f0IfNDPz8+py8upyqjG + yqR8hv39/f2G/f39/f39/f39/Qik0K7P0M+ty8vLy6jKpXyq/f39/ar9/f39/f39/f39CHzQ09Ctz8/P + qcupy6jKeAj9/f39CP39/f39/f39/f2qoNPQ0NPQ0M/Qz8vLy6l8CP39/f2G/f39/f39/f39/QmkfKR8 + oHx8fHx8fHx8fHyG/f39/aoIqgiqCKoIqgiqCKoIqgiqCKoIqgiqCKoIqgj9/f39/f39/f39/f39/f39 + /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3///////////// + ///AAAAD3vgAA974AAPe+AAD3vgAA974AAPe+AADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAADwAAAA9/4AAPf+AAD3/gAA9/4AAPf+AAD3/gAA8AAAAP//////////ygA + AAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA + gACAgAAAgICAAMDcwADwyqYAqj8qAP8/KgAAXyoAVV8qAKpfKgD/XyoAAH8qAFV/KgCqfyoA/38qAACf + KgBVnyoAqp8qAP+fKgAAvyoAVb8qAKq/KgD/vyoAAN8qAFXfKgCq3yoA/98qAAD/KgBV/yoAqv8qAP// + KgAAAFUAVQBVAKoAVQD/AFUAAB9VAFUfVQCqH1UA/x9VAAA/VQBVP1UAqj9VAP8/VQAAX1UAVV9VAKpf + VQD/X1UAAH9VAFV/VQCqf1UA/39VAACfVQBVn1UAqp9VAP+fVQAAv1UAVb9VAKq/VQD/v1UAAN9VAFXf + VQCq31UA/99VAAD/VQBV/1UAqv9VAP//VQAAAH8AVQB/AKoAfwD/AH8AAB9/AFUffwCqH38A/x9/AAA/ + fwBVP38Aqj9/AP8/fwAAX38AVV9/AKpffwD/X38AAH9/AFV/fwCqf38A/39/AACffwBVn38Aqp9/AP+f + fwAAv38AVb9/AKq/fwD/v38AAN9/AFXffwCq338A/99/AAD/fwBV/38Aqv9/AP//fwAAAKoAVQCqAKoA + qgD/AKoAAB+qAFUfqgCqH6oA/x+qAAA/qgBVP6oAqj+qAP8/qgAAX6oAVV+qAKpfqgD/X6oAAH+qAFV/ + qgCqf6oA/3+qAACfqgBVn6oAqp+qAP+fqgAAv6oAVb+qAKq/qgD/v6oAAN+qAFXfqgCq36oA/9+qAAD/ + qgBV/6oAqv+qAP//qgAAANQAVQDUAKoA1AD/ANQAAB/UAFUf1ACqH9QA/x/UAAA/1ABVP9QAqj/UAP8/ + 1AAAX9QAVV/UAKpf1AD/X9QAAH/UAFV/1ACqf9QA/3/UAACf1ABVn9QAqp/UAP+f1AAAv9QAVb/UAKq/ + 1AD/v9QAAN/UAFXf1ACq39QA/9/UAAD/1ABV/9QAqv/UAP//1ABVAP8AqgD/AAAf/wBVH/8Aqh//AP8f + /wAAP/8AVT//AKo//wD/P/8AAF//AFVf/wCqX/8A/1//AAB//wBVf/8Aqn//AP9//wAAn/8AVZ//AKqf + /wD/n/8AAL//AFW//wCqv/8A/7//AADf/wBV3/8Aqt//AP/f/wBV//8Aqv//AP/MzAD/zP8A//8zAP// + ZgD//5kA///MAAB/AABVfwAAqn8AAP9/AAAAnwAAVZ8AAKqfAAD/nwAAAL8AAFW/AACqvwAA/78AAADf + AABV3wAAqt8AAP/fAABV/wAAqv8AAAAAKgBVACoAqgAqAP8AKgAAHyoAVR8qAKofKgD/HyoAAD8qAFU/ + KgDw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8A/f39/f39/f39/f39/f39/f0I + hgiqCKoICKoICKaGCP39qv39hv2GNg4ODjII/ar9/Yb9/ar9qjdjXzsOCP2G/f0IhquGCAleCWNfNob9 + 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 + bv+3d0n/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/FRqE/0dN1v8/RNL/Nz3Q/y40zv8nLcz/ISfK/xwh + yf8WHMf/GxJh/8K/wf/gr3r/4K96/+Cvev/gr3r/3614/9yqdf/apnL/16Nw/9Sea//Rmmj/zZZk/8qR + X//GjFz/w4dW/7+CUv/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8SHZD/WF3a/05U1/9FS9X/PUPS/zU7 + 0P8uM83/JyzL/yAmyf8aFGn/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/ + wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/xAfnP9obt7/YGTc/1Zb + 2f9NU9f/RUrU/ztB0v80OdD/LDHO/xgWcv/Cv8H/Dn+n/w18pP8MeqH/DHie/wt1m/8Kc5j/CXGV/wlv + k/8JbJD/CGqN/wdpi/8HZ4j/BmWH/wZkhf8GYoP/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/DiKp/3l+ + 4/9vdeH/Zmze/11i2/9UWtn/S1HW/0NI1P86P9H/Fhh9/8K/wf8Ogar/Barp/wGo6P8Apef/AKPm/wCi + 5P8An+L/AJ7h/wCd3/8AnN7/AJnc/wCY2/8AmNn/AJbX/wZjhP/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/ + wf8MJbX/iI7n/4CF5v93fOP/bnPg/2Vr3f9bYdv/UljY/0lP1v8UGoj/wr/B/w+Erf8Lrur/Bqvq/wOo + 6f8Apuf/AKTm/wCi5f8AoOT/AJ/i/wCd4f8AnN//AJrd/wCZ2/8AmNr/BmWH/8K/wf8AAAAAAAAAAAAA + AAAAAAAAwr/B/wkowP+WnOz/jpTq/4aL6P9+hOX/dXri/2xx4P9jaN3/WV/b/xEek//Cv8H/EIaw/xay + 7P8Or+z/Cavr/wWq6v8Bp+j/AKbn/wCj5f8AoeT/AJ/j/wCe4f8AnOD/AJve/wCa3f8HZ4n/wr/B/wAA + AAAAAAAAAAAAAAAAAADCv8H/CCrK/6Ko7/+coe7/lZrr/42T6f+Fiub/fIHl/3N54v9rcN//ECGg/8K/ + wf8QiLP/I7nu/xq07f8Ssez/C63r/war6v8Cqen/AKbo/wCk5v8AouX/AKHk/wCf4f8AneH/AJzf/who + i//Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8GLNP/q7Hy/6as8P+hpu//mp/u/5OY6/+LkOj/g4nm/3qA + 5P8NI6z/wr/B/xCKtv8xvvD/J7rv/x627f8Vsuz/Dq/s/wmr6/8Equn/Aafo/wCl5/8Ao+X/AKHk/wCf + 4v8AnuH/CGqO/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wUu2/+vtPP/r7Tz/6qv8v+mq/D/oKXv/5me + 7f+Sl+v/io/p/wsmt//Cv8H/Eo24/0HF8f82wfD/LLzv/yK47v8atO3/EbHs/wut6/8Gq+r/A6np/wCm + 6P8Apeb/AKLl/wCh5P8IbJD/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/BC/h/wQv3/8FL9z/BS3Z/wYt + 1v8GLNL/ByvP/wgqy/8IKcb/CSnC/8K/wf8Sjrv/Uszy/0fH8f87w/H/Mb7v/ye67/8et+7/FbPt/w6v + 6/8IrOv/BKnp/wGo6P8Apef/AKPl/wluk//Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf/Cv8H/wr/B/8K/ + wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/xKRvf9j0/P/WM/z/0zK8f9BxfH/N8Hw/yy8 + 7/8iuO7/GbTt/xGx7P8Lruv/Bqrq/wOo6f8Apuf/CnGV/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCv8H/E5LA/3Ta8/9q1fP/XtHz/1LM + 8v9Hx/H/O8Pw/zG+7/8nu+//Hrbt/xay7f8Or+v/CKzq/wSq6f8Kc5j/wr/B/wAAAAAAAAAAAAAAAAAA + AADCv8H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf8UlMH/hOD1/3rc + 9f9v2PP/ZNTy/1jO8v9NyvH/Qsbx/zbB8P8svO//I7ju/xm07f8SsOz/C67r/wt2m//Cv8H/AAAAAAAA + AAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwr/B/xSW + w/+T5vb/iuL1/3/e9P912vT/adbz/13R8/9SzPL/R8jx/zzD8P8xvvD/J7rv/x627v8Vsuz/C3ie/8K/ + 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 + + + + 1406, 53 + + + 1164, 10 + + + 1384, 10 + + + 17, 96 + + + 17, 53 + + + 680, 53 + + \ No newline at end of file diff --git a/Notepad Ultra.vb b/Notepad Ultra.vb new file mode 100644 index 0000000..b2ca2a9 --- /dev/null +++ b/Notepad Ultra.vb @@ -0,0 +1,1168 @@ +'BEGIN LICENCE "Lynnecence V1" +'1. pls no bully +'2. don't pass this software off as your own (covered by clause 1) +' a. also, don't sell this software (also covered by clause 1) +'3. if you decide to modify this for others to use, note the following: +' a. you must change the name and the icon (idk why you'd even want to keep the icon) +' b. you must express that the initial version is called notepad ultra and is made by lynnear software, and provide a link to the original +' c. feel free to include the original credits, you don't have to though +' d. use whatever licence you want for your version +' e. i'd appreciate being notified of the modified version's existence, but it's not necessary to do so. if you do want to, email me at thecoolone3@hotmail.com +'4. if you modify it for personal use, then go ahead and do whatever you want, but you still can't sell it +'5. feel free to rehost this, but provide a link to the original location +'6. if something is technically allowed by the licence, but it is against the spirit of the licence, don't do it (also covered by clause 1) +'7. you can't hold me liable if there's damages or whatever (unless you are pet) + +'if you feel that this licence is too stupid/vague/memeish, use MPL 2.0 instead since that's pretty much what i was going for (sans the whole "YOU MUST INHERIT THIS LICENCE" rubbish) +'END LICENCE + +Imports System.IO +Imports System.Text.RegularExpressions +Imports System.Text 'saves precious, precious bytes. also it makes my code look cleaner! ~u0 + +Public Class NPUWindow 'NPU is short for Notepad Ultra + + 'i know that "it's self commenting" is a copout, but... well, it kinda is. UpdateFilePicker() obviously updates the file picker. still, i've left comments here and there. + + 'DELICIOUS, DELICIOUS GLOBAL VARIABLES! AAAAHAHAHAHAHAHA! I AM THE BEST PROGRAMMER TO EVER LIIIIIVE! + + Dim npuLocation As String = Application.StartupPath() 'i'm lazy, sue me + Dim currentFile As String = "" + Dim rightClickedFile As String = "" + Dim Bullet As String + Dim showSidebar, unsaved, ShowRightClick, AutoBullets, FirstTabPress As Boolean + Dim checkPrint, IndentLevel As Integer + + 'Dim trueDpiX As Single = CreateGraphics.DpiX 'dpi shit + 'Dim trueDpiY As Single = CreateGraphics.DpiY + 'Dim dpiX = trueDpiX / 100 'for multiplication + 'Dim dpiY = trueDpiY / 100 + Dim MenuBarWidth = 10 'temp + + Dim encType As System.Text.Encoding + Dim unableToDetermineEncType As Boolean = False + + Dim notifyStack As Queue(Of Notification) = New Queue(Of Notification) 'don't remove this, it'll make mustard gas. seriously though it causes notifystack to equal nothing, which gives us a nullreferenceexception at runtime + + Dim UndoList As LinkedList(Of String) = New LinkedList(Of String) 'oh boy, here we go + Dim UndoPos As Integer = 0 + + Private basedirectory As String + Private newfilebg As Boolean = False + + Public Property basedir() As String + Get + Return basedirectory + End Get + Private Set(ByVal value As String) + basedirectory = value + BaseDirWatch.Path = value + StatDirectory.ToolTipText = value + My.Settings.WorkingDirectory = value + End Set + End Property + + Public Property NewFile() As Boolean + Get + Return newfilebg + End Get + Set(value As Boolean) + newfilebg = value + FileInfoToolStripMenuItem.Enabled = Not value + DuplicateToolStripMenuItem.Enabled = Not value + DeleteToolStripMenuItem2.Enabled = Not value + End Set + End Property + + Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() + NewFile = True + UndoList.AddLast(TextFileHolder.Text) + SetDefaultThemes() + Try + basedir = My.Settings.WorkingDirectory + FilePicker.Width = ViewToolStripMenuItem.Width + ViewToolStripMenuItem.Bounds.X + 15 + Find.npu = Me + FindReplace.npu = Me + FindCommon.npu = Me 'visual studio will try to tell you that the name can be shortened, but it's a nest of lies + Settings.npu = Me + chocolatePuddingOvenTimer.Start() + + SaveDialogue.InitialDirectory = basedir + FontPicker.Font = TextFileHolder.Font + Redraw() + UpdateFilePicker() + updateStatusBar() + RedrawStatusBar() + + Notify("Welcome!", 3) + Catch ex As Exception + If Not My.Computer.FileSystem.DirectoryExists(basedir) Then + MsgBox("Your working directory is unavailable! Press OK to select a new working directory. For reference, your working directory is currently set as" & vbNewLine & basedir & ".") + FolderPicker.ShowDialog() + basedir = FolderPicker.SelectedPath + My.Settings.WorkingDirectory = basedir + If basedir = "" Then + MsgBox("Don't play me like this") + 'GoTo fug 'shhhh... it's our little secret! c; + End + End If + My.Settings.WorkingDirectory = basedir + UpdateFilePicker() + Else + MsgBox("Whoops!" & vbNewLine & "We've run into a bit of a fuckup." & vbNewLine & ex.Message & vbNewLine & "Press F to pay respects, then click OK.", MsgBoxStyle.OkOnly, "You've gone and busted, my good man") + End If + Finally + BaseDirWatch.Path = basedir + TextFileHolder.Font = My.Settings.Font + TextFileHolder.WordWrap = My.Settings.WordWrap + WordWrapToolStripMenuItem.Checked = My.Settings.WordWrap + showSidebar = Not My.Settings.ShowSidebar + SidebarToolStripMenuItem_Click(sender, e) + reloadCurrentTheme() + CleanOutTextFileHolder() + Splash_Screen.Hide() + Splash_Screen.ShowInTaskbar = False + Splash_Screen.TopMost = False + Activate() + SplashKillTimer.Start() + + If FileToOpen <> "" And FileToOpen IsNot Nothing Then 'for opening files directly (open with ==> npu) + Dim SelectMe As String = GetFile(FileToOpen) + For fileIndex = 0 To FilePicker.Items.Count - 1 + If FilePicker.Items(fileIndex).ToString = SelectMe Then + If My.Computer.FileSystem.FileExists(basedir & SelectMe) Then FilePicker.SelectedIndex = fileIndex + Exit For + End If + Next + Open_Passed_File.Hide() + Open_Passed_File.ShowInTaskbar = False + OPFKillTimer.Start() + End If + End Try + + End Sub + + Private Sub UpdateFilePicker() + FilePicker.Items.Clear() + Dim filenames = My.Computer.FileSystem.GetFiles(basedir, FileIO.SearchOption.SearchTopLevelOnly, "*.anusberries") 'don't edit this. it's temporary, and avoids the NullReferenceException meme + If Not basedir.EndsWith("\") Then basedir &= "\" 'basedir *needs* to end with a backslash. if it somehow doesn't, it does now + Dim files As Boolean = False + For i = 0 To My.Settings.SupportedExtensions.Count - 1 + Dim ext As String = My.Settings.SupportedExtensions(i) + filenames = My.Computer.FileSystem.GetFiles(basedir, FileIO.SearchOption.SearchTopLevelOnly, "*." & ext) + For Each fileName As String In filenames + If fileName.ToLower.EndsWith(ext) Then FilePicker.Items.Add(fileName.Remove(0, Len(basedir))) 'if the user only wants to open txt files, files with extensions like "txt1" and such will also open. this fixes that. + files = True 'TODO: not this + Next + Next + FilePicker.Items.Add(" ..\") + If Not files Then + 'Notify("Directory contains no compatible files", 2) + StatStatus.Text = "No compatible files" + End If + + Dim directoryNames = My.Computer.FileSystem.GetDirectories(basedir, FileIO.SearchOption.SearchTopLevelOnly) + For Each dirName As String In directoryNames + FilePicker.Items.Add(" " & dirName.Remove(0, Len(basedir)) & "\") 'add every subdirectory in basedir, and put a space in front of them so they show up first + Next + End Sub + + Private Sub Redraw() Handles Me.Resize, Me.ResizeEnd 'FIX THIS FOR WEIRD DPI SETTINGS! ensures that everything's the right size to fit in the window. + Dim TitleBarHeight As Integer = RectangleToScreen(ClientRectangle).Top - Top + + If showSidebar Then + FilePicker.Height = ClientRectangle.Height - MenuBar.Height - Notification.Bounds.Height - 3 'thanks to http://stackoverflow.com/a/41018091/4480824 for this one weird ClientRectangle trick + FilePicker.Top = MenuBar.Height + TextFileHolder.Height = FilePicker.Height + MenuBar.Height + 3 + TextFileHolder.Width = Width - FilePicker.Width - 15 '*shrugs knowingly* + TextFileHolder.Left = FilePicker.Width - 1 + TextFileHolder.Top = -1 + TextFileHolder.BorderStyle = BorderStyle.FixedSingle + Else + TextFileHolder.Height = ClientRectangle.Height - MenuBar.Height - Notification.Bounds.Height - 3 + TextFileHolder.Width = Width - 15 + TextFileHolder.Left = 0 + TextFileHolder.Top = MenuBar.Height + TextFileHolder.BorderStyle = BorderStyle.None + End If + End Sub + + Private Async Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FilePicker.SelectedIndexChanged 'when the user clicks on a file/directory in the filepicker + If unsaved Then + BaseDirWatch.EnableRaisingEvents = False ' turn basedirwatch off because it'll try to reselect the file we just saved while it's still saving, which will cause bad things to take place + Dim response As MsgBoxResult = MsgBox("Save changes made to " & If(NewFile, "new file", """" & currentFile & """") & "?", MsgBoxStyle.YesNoCancel) + If response = MsgBoxResult.Yes Then + SaveToolStripMenuItem.PerformClick() 'the save function ends up reenabling basedirwatch, don't worry + ElseIf response = MsgBoxResult.No Then + BaseDirWatchReenabler.Start() 'if they don't wanna save, then reenable basedirwatch + Else + BaseDirWatch.EnableRaisingEvents = True + Exit Sub + 'handle cancel + End If + End If + + If IsNothing(FilePicker.SelectedItem) Or FilePicker.SelectedItem = "" Or FilePicker.SelectedItem Is Nothing Then + Notify("Please select a file or directory.", 2) 'if the user clicks on the blank space at the bottom of the filepicker (which is possible for some reason), shoo them + reselectCurrentFile() 'already checks to make sure it's not empty + Else + Cursor = Cursors.WaitCursor + Enabled = False + StatStatus.Text = "Loading..." + 'MsgBox(basedir & FilePicker.SelectedItem.ToString.Substring(1)) + + If FilePicker.SelectedItem.ToString = " ..\" Then 'if you clicked the ..\ item (which means go up)... + Enabled = True + Cursor = Cursors.Default + StatStatus.Text = "No file loaded" + GoUpToolStripMenuItem.PerformClick() '...click the go up button! ;p + Else + If FilePicker.SelectedItem.ToString.EndsWith("\") Then 'if you clicked on a directory + Try + If Not My.Computer.FileSystem.DirectoryExists(basedir & FilePicker.SelectedItem.ToString.Substring(1)) Then Throw New DirectoryNotFoundException + BaseDirWatch.Path = basedir + FilePicker.SelectedItem.ToString.Substring(1) 'cd into it! + basedir = BaseDirWatch.Path + CleanOutTextFileHolder() + Notify("Directory changed", 3) + ResetUndoList() + Catch ex As Exception + Notify("Failed to load directory!", 1) + CleanOutTextFileHolder() + ResetUndoList() + End Try + Enabled = True + Cursor = Cursors.Default + + ElseIf My.Computer.FileSystem.FileExists(basedir & FilePicker.SelectedItem.ToString) Then 'or, if you clicked a file... + Dim chosenFile As StreamReader + currentFile = FilePicker.SelectedItem + Dim fileToLoad As String = basedir & currentFile + + Dim p As New Process + p.StartInfo.UseShellExecute = False + p.StartInfo.RedirectStandardOutput = True + p.StartInfo.FileName = "dependencies\file\bin\file.exe" + p.StartInfo.CreateNoWindow = True + p.StartInfo.Arguments = "-b --mime-encoding """ & basedir & currentFile & """" + p.Start() + Dim output As String = p.StandardOutput.ReadToEnd() + p.WaitForExit() 'firstly, get the encoding. + unableToDetermineEncType = False + + output = output.ToLower() 'just to be 1000% sure + 'MsgBox(output) + + 'and now we load that encoding! + Select Case True 'call the cops, i don't give a fuck + Case output.Contains("utf-8") 'TODO: find better way of doing this, it's disgusting + encType = Encoding.UTF8 + Case output.Contains("utf-32") + encType = Encoding.UTF32 + Case output.Contains("utf-7") + encType = Encoding.UTF7 + Case output.Contains("unicode") Or output.Contains("utf-16") 'microsoft, the absolute madmen + encType = Encoding.Unicode + Case output.Contains("ansi") Or output.Contains("iso-8859") 'fucking apple i swear to god + encType = Encoding.Default 'idk why but there's no System.Text.Encoding.ANSI. + Case output.Contains("ascii") + encType = Encoding.ASCII + Case output.Contains("no read permission") Or output.Contains("no such file") 'basedirwatch tries to reload the file immediately after it's saved, which causes errors. it also causes the "couldn't determine encoding" notification to pop erroneously. this "fixes" that. + encType = Encoding.UTF8 + Case Else + Notify("Unsupported encoding: " & output.Replace(vbCrLf, "").Replace(vbNewLine, "") & ". Saving will convert to UTF-8.", 2) 'TODO: replace utf-8 with the user's default + encType = Encoding.Default + unableToDetermineEncType = True + End Select + + Try 'you never know what'll happen with IO + chosenFile = New StreamReader(fileToLoad, encoding:=encType) 'schnik the file into a streamreader + LoadTimeWarningTimer.Start() 'start waiting for it to load. if it takes more than 10 seconds, bad things are taking place. + TextFileHolder.Text = Await chosenFile.ReadToEndAsync 'When building for Windows XP, remove the "async" bit, as .Net 4.0 (the last version XP supports, rip ;u;7) doesn't support it + LoadTimeWarningTimer.Stop() 'it's over, isn't it? isn't it? isn't it over? + Text = currentFile & " - Notepad Ultra" 'just in case the user forgets that they're using THE BEST PROGRAM EVER WRITTEN BY MORTAL HANDS + TextFileHolder.Select(0, 0) + TextFileHolder.ScrollToCaret() 'jump to the top of the file + chosenFile.Close() 'close the streamreader + ResetUndoList() 'clear the undo list, because it'd be stupid if you could undo file2.txt so it becomes file1.txt + NewFile = False 'we're not using a new file + 'reset the font because certain characters (like AESTHETIC) fuck things up + TextFileHolder.Font = New Font("FUCK", 10) 'unless the user actually has a font called FUCK, and is using it for notepad ultra, it'll be fine + TextFileHolder.Font = My.Settings.Font + updateStatusBar() + StatStatus.Text = "Loaded" + Cursor = Cursors.Default + Enabled = True + 'FilePicker.Visible = True + Catch ex As Exception + 'FilePicker.Visible = False + 'I don't know why, but that fucks things up BADLY + Notify("Failed to load file!", 1) + Enabled = True + Cursor = Cursors.Default + CleanOutTextFileHolder() + End Try + 'reselectCurrentFile() + unsaved = False + Else + Enabled = True + Cursor = Cursors.Default + Notify("Failed to load selected object!", 1) 'just in case things go terribly wrong + CleanOutTextFileHolder() + End If + End If + End If 'you know it's good code when the subroutine ends with 3 "end if" statements + End Sub + + Private Sub WordWrapToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WordWrapToolStripMenuItem.Click 'TODO: fucking hell + Select Case WordWrapToolStripMenuItem.Checked + Case False + WordWrapToolStripMenuItem.Checked = True + TextFileHolder.WordWrap = True + Case True + WordWrapToolStripMenuItem.Checked = False + TextFileHolder.WordWrap = False + End Select + End Sub + + Private Sub DeleteToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles DeleteToolStripMenuItem2.Click + If currentFile = "" Or NewFile Then + MsgBox("You can't delete the current file when there isn't a current file, you dunce!" & vbNewLine & "(This message box should never appear! If it does, invest everything you have in gold and move out of the country)") + Else + If MsgBox("Are you sure you want to delete " & currentFile & "?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + Dim DeleteOption As FileIO.RecycleOption = 3 + If My.Settings.UseRecycleBin Then + DeleteOption = 2 'if the user wants to use the recycle bin because they're afraid of commitment, then so be it + End If + Enabled = False + My.Computer.FileSystem.DeleteFile(basedir & currentFile, FileIO.UIOption.OnlyErrorDialogs, DeleteOption) + CleanOutTextFileHolder() + Enabled = True + End If + End If + End Sub + + Private Sub NewToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NewToolStripMenuItem.Click + currentFile = "New file" + NewFile = True 'TODO: a LOT of stuff (probably) breaks with new files. fix it all! + Text = "Notepad Ultra: New file" + TextFileHolder.Clear() + Redraw() + UpdateFilePicker() 'it's really quick, and deselects any files + ResetUndoList() + End Sub + + Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click + If NewFile Then + SaveAsToolStripMenuItem_Click(sender, e) 'if you try to save a new file, bring up the Save As dialogue instead + Else + StatStatus.Text = "Saving..." + Enabled = False + BaseDirWatch.EnableRaisingEvents = False + If unableToDetermineEncType Then encType = Encoding.UTF8 + My.Computer.FileSystem.WriteAllText(basedir & currentFile, TextFileHolder.Text.Replace(vbLf, vbCrLf), False, encType) 'TODO: make this an async streamwriter? + 'While Not My.Computer.FileSystem.FileExists(basedir & currentFile) 'wait for the file to exist before continuing + ' Threading.Thread.Sleep(25) 'pause briefly to make sure we aren't thrashing the disk + 'End While + Enabled = True + Notify("Saved!", 3) + StatStatus.Text = "Loaded" + unsaved = False + If Text.EndsWith(" (Unsaved)") Then Text = Text.RemoveLast(10) 'get rid of the (Unsaved) bit + BaseDirWatchReenabler.Start() 'TODO: does this really need to be a timer? + End If + End Sub + + Private Sub SaveAsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveAsToolStripMenuItem.Click + 'all new files save as utf-8 at the moment, and that's probably for the best + SaveDialogue.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*" + SaveDialogue.FilterIndex = 1 + SaveDialogue.RestoreDirectory = True + SaveDialogue.InitialDirectory = basedir + If NewFile Then encType = Encoding.UTF8 'TODO: load this from My.Settings.DefaultEncoding + If IsNothing(encType) Then encType = Encoding.UTF8 + If SaveDialogue.ShowDialog() = DialogResult.OK Then + My.Computer.FileSystem.WriteAllText(SaveDialogue.FileName, TextFileHolder.Text.Replace(vbLf, vbCrLf), False, encType) + StatStatus.Text = "Saving..." + End If + currentFile = SaveDialogue.FileName.Split("\")(SaveDialogue.FileName.Split("\").Length - 1) + If Text.EndsWith(" (Unsaved)") Then Text = Text.RemoveLast(10) + If NewFile Then + NewFile = False + reselectCurrentFile() + End If + 'BaseDirWatch will take over from here + End Sub + + Private Sub OneDriveTextFilesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OneDriveTextFilesToolStripMenuItem.Click + basedir = "F:\OneDrive\Documents\Other\Text files" + UpdateFilePicker() + End Sub + + Private Sub ChangeTheme(sender As Object, e As EventArgs, Optional ByVal silent As Boolean = False) Handles NightTheme.Click, StandardTheme.Click, TertiaryTheme.Click + StandardTheme.Checked = False + NightTheme.Checked = False + TertiaryTheme.Checked = False + sender.checked = True + Dim themeName As String = sender.Name.ToString.Replace("Theme", "").Replace("Night", "Nite") + + TextFileHolder.BackColor = CallByName(My.Settings, themeName & "TextBG", CallType.Get) + TextFileHolder.ForeColor = CallByName(My.Settings, themeName & "TextFG", CallType.Get) + FilePicker.BackColor = CallByName(My.Settings, themeName & "SidebarBG", CallType.Get) + FilePicker.ForeColor = CallByName(My.Settings, themeName & "SidebarFG", CallType.Get) + StatusBar.BackColor = CallByName(My.Settings, themeName & "StatBG", CallType.Get) + StatusBar.ForeColor = CallByName(My.Settings, themeName & "StatFG", CallType.Get) + + If Not silent Then Notify("Applied " & sender.Name.ToString.Replace("Theme", " Theme") & "!", 3) 'have some sort of cooldown? + Dim themeToSet As Integer = 0 + Select Case sender.name + Case "StandardTheme" + themeToSet = 0 + Case "NightTheme" + themeToSet = 1 + Case "TertiaryTheme" + themeToSet = 2 + Case Else 'you never know when shit will hit the fan + themeToSet = 0 + End Select + + My.Settings.CurrentTheme = themeToSet + End Sub + + Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click + saveSettings() + End + End Sub + + Private Sub SidebarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SidebarToolStripMenuItem.Click 'TODO: i'm pretty sure this doesn't really do anything except waste cycles + Select Case SidebarToolStripMenuItem.Checked + Case False + SidebarToolStripMenuItem.Checked = True + showSidebar = True + FilePicker.Visible = True + TextFileHolder.Left = MenuBarWidth + 25 '*shrugs knowingly* + Case True + SidebarToolStripMenuItem.Checked = False + showSidebar = False + FilePicker.Visible = False + TextFileHolder.Left = 0 + End Select + Redraw() + End Sub + + Private Sub updateStatusBar() Handles TextFileHolder.TextChanged 'TODO: wait for user to stop typing before updating? this could murder slow computers, or any computer working with a fucking MASSIVE text file + UndoTimer.Stop() + StatChars.Text = "Characters: " & TextFileHolder.Text.Length + 'MsgBox(unsaved) + If Not IsNothing(encType) Then StatBytes.Text = encType.GetByteCount(TextFileHolder.Text) & " Bytes" + If My.Settings.UndoSteps <> 0 Then UndoTimer.Start() + End Sub + + Public Sub unsavedCheck(sender As Object, e As EventArgs) Handles TextFileHolder.KeyPress + If Not My.Computer.Keyboard.CtrlKeyDown Then 'don't mark as unsaved if you only press ctrl-a, ctrl-c, etc. TODO: handle ctrl v, ctrl, x... + If Not unsaved Then + Text = Text + " (Unsaved)" + unsaved = True + End If + If Text.EndsWith("(Unsaved) (Unsaved)") Then Text = Text.RemoveLastInstanceOf(" (Unsaved)") 'just to be sure. this will break if the user is editing a file with the extension ".(Unsaved) (Unsaved)", but, i mean... come on. + End If + End Sub + + Private Sub opacify() Handles Me.Move + If My.Settings.MoveTransparency Then Opacity = 0.5 'fade on move! + If Not IsNothing(chocolatePuddingOvenTimer) Then + chocolatePuddingOvenTimer.Stop() + chocolatePuddingOvenTimer.Start() + Else + Opacity = 1 + End If + End Sub + + Private Sub chocolatePuddingOvenTimer_Tick(sender As Object, e As EventArgs) Handles chocolatePuddingOvenTimer.Tick + Opacity = 1 'stop being faded on stopped being moved! + chocolatePuddingOvenTimer.Stop() + End Sub + + Private Sub ToolStripSplitButton1_ButtonClick(sender As Object, e As EventArgs) Handles StatDirectory.ButtonClick + Process.Start(basedir) + End Sub + + Private Sub toggleSidebar(sender As Object, e As EventArgs) + SidebarToolStripMenuItem.PerformClick() + End Sub + + Private Sub RestartToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RestartToolStripMenuItem.Click + saveSettings() 'better safe than sorry! + Application.Restart() + End Sub + + Private Sub saveSettings() + My.Settings.Font = TextFileHolder.Font + My.Settings.WordWrap = TextFileHolder.WordWrap + My.Settings.ShowSidebar = showSidebar + My.Settings.WorkingDirectory = basedir + My.Settings.Save() + End Sub + + Private Sub emergencySave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + Try + My.Computer.Clipboard.SetText(My.Computer.Clipboard.GetText) + saveSettings() + If unsaved Then + Dim response As MsgBoxResult = MsgBox("Save changes made to " & If(NewFile, "new file", """" & currentFile & """") & "?", MsgBoxStyle.YesNoCancel) + If response = MsgBoxResult.Yes Then + SaveToolStripMenuItem_Click(SaveToolStripMenuItem, EventArgs.Empty) + ElseIf response = MsgBoxResult.Cancel Then + e.Cancel = True + Exit Sub + End If + End If + End + Catch ex As Exception + MsgBox(ex.Message) + End Try + End Sub + + Private Sub SHOWRECENTSHEREToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SHOWRECENTSHEREToolStripMenuItem.Click '??? + currentFile = "" + FolderPicker.ShowDialog() + basedir = FolderPicker.SelectedPath + UpdateFilePicker() + End Sub + + Private Sub ChangeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ChangeToolStripMenuItem.Click '????? + SHOWRECENTSHEREToolStripMenuItem_Click(sender, e) + End Sub + + Private Sub UndoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UndoToolStripMenuItem.Click + If My.Settings.UndoSteps <> 0 Then + Try + If UndoPos <> 0 Then + UndoPos -= 1 + TextFileHolder.Text = UndoList(UndoPos).ToString + UndoTimer.Stop() + Else + Notify("Nothing to undo", 2) + End If + Catch ex As Exception 'better safe than sorry + Notify("Undo error: " & ex.Message, 1) + End Try + Else + Notify("Undo disabled by user.", 2) 'just in case the user's being a silly billy and forgets that they've turned off undo + End If + End Sub + + Private Sub RedoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RedoToolStripMenuItem.Click 'TODO: consider merge with undo + If My.Settings.UndoSteps <> 0 Then + Try + If UndoPos <> UndoList.Count - 1 Then + UndoPos += 1 + TextFileHolder.Text = UndoList(UndoPos).ToString + UndoTimer.Stop() + Else + Notify("Nothing to redo", 2) + End If + Catch ex As Exception + Notify("Undo error: " & ex.Message, 1) + End Try + Else + Notify("Undo disabled by user.", 2) + End If + End Sub + + Private Sub FindToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FindToolStripMenuItem.Click + Find.npu = Me 'ensure that the find menu can access npu's main window + Find.Show(Me) + End Sub + + Private Sub CustomToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CustomToolStripMenuItem.Click + FontPicker.ShowDialog() + TextFileHolder.Font = FontPicker.Font + My.Settings.Font = TextFileHolder.Font + End Sub + + Private Sub AboutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AboutToolStripMenuItem.Click + 'MsgBox("NotePad Ultra (Version 0.10 Alpha)" & vbNewLine & vbNewLine & "An advanced Notepad for advanced minds." & vbNewLine & vbNewLine & "© 2016 Lynnear Software" & vbNewLine & "QA: Petra Morse") + About.Show() + End Sub + + Private Sub ArialToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ArialToolStripMenuItem.Click + My.Settings.Font = New Font("Arial", My.Settings.Font.SizeInPoints, My.Settings.Font.Style) + TextFileHolder.Font = My.Settings.Font + End Sub + + Private Sub GoUpToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GoUpToolStripMenuItem.Click + If basedir.Length <> 3 And Not Regex.IsMatch(basedir, "^\\\\[^?:+\\<>]+\\[^?:\\<>*""|/]+\\$", RegexOptions.None) Then basedir = StrReverse(Replace(Replace(StrReverse(basedir), StrReverse(basedir.Split("\")(basedir.Split("\").Length - 2)), "",, 1), "\\", "\",, 1)) Else Notify("Already at root!", 2) 'wew lady + 'HOW THIS WORKS: + '>check to make sure that we're not at the root path (either C:\, D:\ etc OR \\server\folder) + '>start with basedir (C:\Path\Folder\) + '>split it into an array using backslash as a separator ("C:", "Path", "Folder", "") + '>select the second last string in this array ("Folder") + '>reverse it ("redloF") + '>reverse the whole basedir string (\redloF\htaP\:C) + '>replace the first instance of the reversed second-last item in the array inside the reversed basedir with nothing (replace the first instance of "redloF" with "", giving "\\htaP\:C") + '>replace the first instance of "\\" with "\" (\htaP\:C) + '>reverse the whole thing ("C:\Path\") + + 'a few weeks after writing this, i found out about My.Computer.FileSystem.ParentPath. but i'm not fucking changing it. + + Text = "Notepad Ultra" + If My.Computer.FileSystem.DirectoryExists(basedir) Then + 'Notify("Directory changed", 3) 'Notification stack is FIFO, we gotta get in there first + UpdateFilePicker() + CleanOutTextFileHolder() + Else + Notify("Failed to change directory!", 1) + End If + End Sub + + Private Sub GoUpToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles GoUpToolStripMenuItem1.Click 'TODO: why are there two separate subs for this, what the fuck? + GoUpToolStripMenuItem_Click(sender, e) + End Sub + + Private Sub FileInfoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FileInfoToolStripMenuItem.Click + Dim p As New Process + p.StartInfo.UseShellExecute = False + p.StartInfo.RedirectStandardOutput = True + p.StartInfo.FileName = "dependencies\file\bin\file.exe" + p.StartInfo.CreateNoWindow = True + p.StartInfo.Arguments = "-b """ & basedir & currentFile & """" + p.Start() + Dim output As String = p.StandardOutput.ReadToEnd() + p.WaitForExit() + Dim q As New Process + q.StartInfo.UseShellExecute = False + q.StartInfo.RedirectStandardOutput = True + q.StartInfo.FileName = "dependencies\file\bin\file.exe" + q.StartInfo.CreateNoWindow = True + q.StartInfo.Arguments = "-b --mime-encoding """ & basedir & currentFile & """" + q.Start() + Dim output2 As String = q.StandardOutput.ReadToEnd() + q.WaitForExit() + Try + MsgBox("Detected type: " & output & "Detected encoding: " & output2 & "Approximate file size (on save): " & encType.GetByteCount(TextFileHolder.Text) & " Bytes" & vbNewLine & "Creation date: " & My.Computer.FileSystem.GetFileInfo(basedir & currentFile).CreationTime) + Catch ex As Exception + If ex.Message = "Object reference not set to an instance of an object." Then MsgBox("Failed to get file info: " & ex.Message & vbNewLine & "This almost certainly means that the file does not exist.") Else MsgBox("Failed to get file info: " & ex.Message) + + End Try + End Sub + + Private Sub SoftwareUsedToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SoftwareUsedToolStripMenuItem.Click + MsgBox("Notepad Ultra makes use of the following open-source software:" & vbNewLine & vbNewLine & "GNU file" & vbNewLine & "http://www.darwinsys.com/file/" & vbNewLine & "http://gnuwin32.sourceforge.net/packages/file.htm" & "(Used for detecting file encoding)") 'i looked for a windows tool that could do the job of "file" for so fucking long! anyone who cares enough to open the software used box should know about it! + End Sub + + Private Sub EDocumentsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EDocumentsToolStripMenuItem.Click 'tempura + basedir = "E:\Documents" + UpdateFilePicker() + End Sub + + Private Sub autoFPUpdate() Handles BaseDirWatch.Deleted, BaseDirWatch.Created, BaseDirWatch.Renamed ', Me.Activated, Me.Deactivate, Me.GotFocus, Me.LostFocus + UpdateFilePicker() + reselectCurrentFile() + End Sub + + Private Sub MakeFontLarger_Click(sender As Object, e As EventArgs) Handles MakeFontLarger.Click 'TODO: merge with vvv + If My.Settings.Font.SizeInPoints < 500 Then + My.Settings.Font = New Font(My.Settings.Font.FontFamily, My.Settings.Font.SizeInPoints + 1, My.Settings.Font.Style) + TextFileHolder.Font = My.Settings.Font + Else + Notify("Maximum font size!", 2) + End If + End Sub + + Private Sub MakeFontSmaller_Click(sender As Object, e As EventArgs) Handles MakeFontSmaller.Click 'TODO: merge with ^^^ + If My.Settings.Font.SizeInPoints > 4 Then + My.Settings.Font = New Font(My.Settings.Font.FontFamily, My.Settings.Font.SizeInPoints - 1, My.Settings.Font.Style) + TextFileHolder.Font = My.Settings.Font + Else + Notify("Minimum font size!", 2) + End If + End Sub + + Private Sub RefreshFileList_Click(sender As Object, e As EventArgs) Handles RefreshFileList.Click + UpdateFilePicker() + reselectCurrentFile() + End Sub + + Private Sub SegoeUIToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SegoeUIToolStripMenuItem.Click 'TODO: merge this with the following 3 + My.Settings.Font = New Font("Segoe UI", My.Settings.Font.SizeInPoints, My.Settings.Font.Style) + TextFileHolder.Font = My.Settings.Font + End Sub + + Private Sub ConsolasToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ConsolasToolStripMenuItem.Click + My.Settings.Font = New Font("Consolas", My.Settings.Font.SizeInPoints, My.Settings.Font.Style) + TextFileHolder.Font = My.Settings.Font + End Sub + + Private Sub LucidaConsoleToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LucidaConsoleToolStripMenuItem.Click + My.Settings.Font = New Font("Lucida Console", My.Settings.Font.SizeInPoints, My.Settings.Font.Style) + TextFileHolder.Font = My.Settings.Font + End Sub + + Private Sub SettingsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SettingsToolStripMenuItem.Click + Settings.npu = Me + Settings.Show(Me) + End Sub + + Private Sub CleanOutTextFileHolder() + UpdateFilePicker() + ResetUndoList() + NewFile = True + unsaved = False + Text = "Notepad Ultra" + StatStatus.Text = "No file loaded" + TextFileHolder.Text = "Welcome to Notepad Ultra! Select a file from the left." 'get everything nice and phresh + End Sub + + Private Sub TimeDateToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles TimeDateToolStripMenuItem1.Click + 'Dim timeAndDate As String = My.Computer.Clock.LocalTime.ToShortTimeString & " " & My.Computer.Clock.LocalTime.ToShortDateString + TextFileHolder.SelectionLength = 0 + TextFileHolder.SelectedText = My.Computer.Clock.LocalTime.ToShortTimeString & " " & My.Computer.Clock.LocalTime.ToShortDateString 'schnick the current time in + End Sub + + Private Sub Notification_Click(sender As Object, e As EventArgs) Handles Notification.MouseDown + Notification.Visible = False + ShowNotificationTimer.Interval = 1 + End Sub + + Private Sub Notify(notifyText As String, category As Integer) + notifyStack.Enqueue(New Notification() With {.Text = notifyText, .Category = category}) + ShowNotificationTimer.Start() + End Sub + + Private Sub ShowNotificationTimer_Tick(sender As Object, e As EventArgs) Handles ShowNotificationTimer.Tick + If notifyStack.Count = 0 Then + ShowNotificationTimer.Stop() + Notification.Visible = False + ShowNotificationTimer.Interval = 1 'The next time the timer is called after showing all pending notifications, it should appear immediately. + Else + Dim PoppedNotify As Notification = notifyStack.Dequeue() + Notification.Text = PoppedNotify.Text + ShowNotificationTimer.Interval = 3000 + + Select Case PoppedNotify.Category + Case 1 'Critical: Something critical has gone wrong + Notification.BackColor = ReturnThemeSettingsAsThemeObject(My.Settings.CurrentTheme).NotificationCriticalBG + Notification.ForeColor = ReturnThemeSettingsAsThemeObject(My.Settings.CurrentTheme).NotificationCriticalFG + Case 2 'Warning: Something minor has gone wrong, or an action is unavailable +imSorryCLU: + Notification.BackColor = ReturnThemeSettingsAsThemeObject(My.Settings.CurrentTheme).NotificationWarningBG + Notification.ForeColor = ReturnThemeSettingsAsThemeObject(My.Settings.CurrentTheme).NotificationWarningFG + Case 3 'Just letting you know... + Notification.BackColor = ReturnThemeSettingsAsThemeObject(My.Settings.CurrentTheme).NotificationInfoBG + Notification.ForeColor = ReturnThemeSettingsAsThemeObject(My.Settings.CurrentTheme).NotificationInfoFG + ShowNotificationTimer.Interval = 1500 + Case Else + GoTo imSorryCLU 'apparently, you can't say "Case 2, Else" :c + End Select + Notification.Visible = True + End If + End Sub + + Private Sub BaseDirWatchPathToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BaseDirWatchPathToolStripMenuItem.Click + MsgBox(BaseDirWatch.Path) + End Sub + + Private Sub reselectCurrentFile() + Dim RestoreOnReload As Boolean = False + Dim TempFileHolder As String = "An error occurred while switching files. Any unsaved changes made to this document have been lost. We apologise for the inconvenience." 'let's hope this shit never happens + If currentFile IsNot "" And currentFile IsNot Nothing Then + RestoreOnReload = unsaved + If RestoreOnReload Then + TempFileHolder = TextFileHolder.Text 'try to set tempfileholder to the textbox's text + unsaved = False + End If + For fileIndex = 0 To FilePicker.Items.Count - 1 + If FilePicker.Items(fileIndex).ToString = currentFile Then + If My.Computer.FileSystem.FileExists(basedir & currentFile) Then FilePicker.SelectedIndex = fileIndex + Exit For + End If + Next + If RestoreOnReload Then + TextFileHolder.Text = TempFileHolder + unsaved = True + Text = Text + " (Unsaved)" + End If + End If + End Sub + + Private Sub BaseDirWatchReenabler_Tick(sender As Object, e As EventArgs) Handles BaseDirWatchReenabler.Tick + BaseDirWatch.EnableRaisingEvents = True + 'updateFilePicker() + 'reselectCurrentFile() + BaseDirWatchReenabler.Stop() + End Sub + + Private Sub DuplicateToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DuplicateToolStripMenuItem.Click + Dim response As String = InputBox("Duplicate """ & currentFile & """ with name:", "Duplicate", "Copy of " & currentFile) + If response IsNot "" And Not NewFile Then + If My.Computer.FileSystem.FileExists(basedir & response) Then + If MsgBox("A file with the name """ & response & """ already exists. Please choose a different name.", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then + DuplicateToolStripMenuItem.PerformClick() 'reprompt the user for a new name if it's already taken here + End If + Else + Dim ValidExt As Boolean = False + For i = 0 To My.Settings.SupportedExtensions.Count - 1 + If response.EndsWith("." & My.Settings.SupportedExtensions(i)) Then ValidExt = True 'if the user only wants npu to work with txt files, and they save it as a cfg, schnick a .txt on the end + If ValidExt Then Exit For + Next + If Not ValidExt Then response &= ".txt" 'default to the txt ending + Dim OldCurrentFile As String = currentFile + currentFile = response + My.Computer.FileSystem.CopyFile(basedir & OldCurrentFile, basedir & response) + Notify("Duplicated!", 3) + End If + End If + End Sub + + Public Sub reloadCurrentTheme() + Select Case My.Settings.CurrentTheme + Case 0 + ChangeTheme(StandardTheme, EventArgs.Empty, True) + Case 1 + ChangeTheme(NightTheme, EventArgs.Empty, True) + Case 2 + ChangeTheme(TertiaryTheme, EventArgs.Empty, True) + End Select + End Sub + + Public Sub RedrawStatusBar() + Dim StatBarSettings As String() = {"Chars", "Date", "Dir", "FontSize", "Size", "Status", "Mode"} + For i = 0 To 6 + GetStatBarObject(i).visible = CallByName(My.Settings, "StatBar" & StatBarSettings(i), CallType.Get) 'only show the ones that the user wants + Next + End Sub + + Private Sub ReplaceToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ReplaceToolStripMenuItem.Click + FindReplace.npu = Me + FindReplace.Show(Me) + End Sub + + Private Sub GoToToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GoToToolStripMenuItem.Click + MsgBox("Not yet supported") 'TODO: make it supported + End Sub + + Private Sub GoUpValidatorToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GoUpValidatorToolStripMenuItem.Click + Dim benis As String = InputBox("String to check:") + If benis IsNot Nothing And benis <> "" Then + If benis.Length <> 3 And Not Regex.IsMatch(benis, "^\\\\[^?:+\\<>]+\\[^?:\\<>*""|/]+\\$", RegexOptions.None) Then MsgBox("Valid!") Else MsgBox("Invalid!") ' ensure it's a valid filename (ignoring stuff like AUX and COM, which windows should catch anyway... right?) + End If + End Sub + + Private Sub ShowInExplorer_Click(sender As Object, e As EventArgs) Handles ShowInExplorer.Click + Process.Start("explorer.exe", "/select, " & basedir & rightClickedFile) + End Sub + + Public Sub GetFileToShowMenuFor(sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FilePicker.MouseDown + If e.Button = MouseButtons.Right Then + Try + rightClickedFile = FilePicker.Items(FilePicker.IndexFromPoint(e.X, e.Y)).ToString 'try to show the right-click menu with the right-clicked file as the target + Catch fug As System.ArgumentOutOfRangeException 'if the user right-clicks that blank bit at the bottom of the filepicker... + Notify("Invalid selection!", 2) '...tell them to fuck off. + rightClickedFile = "" + End Try + + End If + End Sub + + Private Sub DeleteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DeleteToolStripMenuItem.Click + Dim DeleteOption As FileIO.RecycleOption = 3 + If My.Settings.UseRecycleBin Then DeleteOption = 2 + If MsgBox("Delete """ & rightClickedFile & """?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + My.Computer.FileSystem.DeleteFile(basedir & rightClickedFile, FileIO.UIOption.OnlyErrorDialogs, DeleteOption) + UpdateFilePicker() + If rightClickedFile = currentFile Then + CleanOutTextFileHolder() + currentFile = "" + End If + End If + End Sub + + 'Printing stuff (courtesy of https://support.microsoft.com/en-us/kb/811401) + Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocumentThingy.BeginPrint + checkPrint = 0 + End Sub + + Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocumentThingy.PrintPage + ' Print the content of the RichTextBox. Store the last character printed. + checkPrint = TextFileHolder.Print(checkPrint, TextFileHolder.TextLength, e) + + ' Look for more pages + If checkPrint < TextFileHolder.TextLength Then + e.HasMorePages = True + Else + e.HasMorePages = False + End If + End Sub + + Private Sub PrintToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PrintToolStripMenuItem.Click + Try + PrintDocumentThingy.DocumentName = currentFile + If PrintPreviewDialog1.ShowDialog() > -1 Then 'wait for the user to close the preview before continuing + If PrintDialogue.ShowDialog() = DialogResult.OK Then + PrintDocumentThingy.Print() + End If + End If + Catch ex As Exception + MsgBox("Failed to print file!" & vbNewLine & ex.Message) + End Try + + End Sub + + Public Function GetStatBarObject(index) + Select Case index + Case 0 + Return StatChars + Case 1 + Return StatDate + Case 2 + Return StatDirectory + Case 3 + Return StatFontSize + Case 4 + Return StatBytes + Case 5 + Return StatStatus + Case 6 + Return StatMode + Case Else + Throw New Exception("GetStatBarObject: Invalid index!") + End Select + End Function + + Private Sub LoadTimeWarning_Tick(sender As Object, e As EventArgs) Handles LoadTimeWarningTimer.Tick + LoadTimeWarning.Show() 'if it takes more than 10s to load the file, something's gone wrong + LoadTimeWarningTimer.Stop() + End Sub + + Private Sub SplashKillTimer_Tick(sender As Object, e As EventArgs) Handles SplashKillTimer.Tick + Splash_Screen.Close() 'the program crashes unless you give it some time to do its thing + SplashKillTimer.Stop() + End Sub + + Private Sub OPFKillTimer_Tick(sender As Object, e As EventArgs) Handles OPFKillTimer.Tick + Open_Passed_File.Close() + OPFKillTimer.Stop() + End Sub + + Private Sub FilePickerMenu_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles FilePickerMenu.Opening + FilePickerMenu.Enabled = False + If rightClickedFile = "" Then + FilenametxtToolStripMenuItem.Text = "Invalid selection" + Else + FilePickerMenu.Enabled = True + FilenametxtToolStripMenuItem.Text = rightClickedFile + End If + End Sub + + Private Sub UndoTimer_Tick(sender As Object, e As EventArgs) Handles UndoTimer.Tick + Dim UndoListTooBig As Boolean = False + If My.Settings.UndoMemoryLimit Then + Dim UndoListSize As Long + Dim ms As New IO.MemoryStream + Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter() + bf.Serialize(ms, UndoList) + UndoListSize = ms.Position + If UndoListSize / (1024 * 1024) >= My.Settings.UndoMaxMemory Then UndoListTooBig = True 'divide by 1024 to make bytes into kb, then again to make into mb + End If + If Not (UndoList.Count < My.Settings.UndoSteps OrElse My.Settings.UndoUnlimitedSteps) OrElse UndoListTooBig Then + UndoList.RemoveFirst() + 'Notify("Undo limit reached, removing oldest entries", 3) + End If + If UndoList.Count > 0 And UndoPos > 0 And UndoList.Count > UndoPos Then + While UndoPos <> UndoList.Count - 1 + UndoList.RemoveLast() + End While + End If + UndoList.AddLast(TextFileHolder.Text) + UndoPos = UndoList.Count - 1 + UndoTimer.Stop() + End Sub + + Private Sub PageSetup_Click(sender As Object, e As EventArgs) Handles PageSetup.Click + PageSetupDialog1.ShowDialog() + End Sub + + Public Sub ThrobberToggler() Handles Me.EnabledChanged + 'this subroutine ensures that whenever the form is disabled, the throbber is visible. the throbber's throbbing animation is designed to let the user know that things are happening in the background and that the program is not frozen. after all, who /doesn't/ love throbbers? i know i do! + 'for more about throbbers, visit https://en.wikipedia.org/wiki/Throbber. if you are still interested, and your desire for throbbers is not quenched by this page, the internet contains an astronomical amount of images, posts, videos, games, and more, all revolving around the concept of throbbers. + Try + Throbber.Visible = Not Enabled + Catch ex As Exception + 'could not toggle throbber! throbber must be untoggleable. + Notify("Throbber toggling failed: " & ex.Message, 1) 'notify the user of their untoggleable throbber. they'll want to know why their throbber isn't throbbing away down there! + End Try + 'keep things short, we don't want the program sitting around toggling its throbber all day! + End Sub + + Private Sub RenameToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RenameToolStripMenuItem.Click 'nearly identical to the duplicate sub + Dim response As String = InputBox("Enter new name for """ & currentFile & """:", "Rename", currentFile) + If response IsNot "" And Not NewFile Then + If My.Computer.FileSystem.FileExists(basedir & response) Then + If MsgBox("A file with the name """ & response & """ already exists. Please choose a different name.", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then + RenameToolStripMenuItem.PerformClick() + End If + Else + Dim ValidExt As Boolean = False + For i = 0 To My.Settings.SupportedExtensions.Count - 1 + If response.EndsWith("." & My.Settings.SupportedExtensions(i)) Then ValidExt = True + If ValidExt Then Exit For + Next + If Not ValidExt Then response &= ".txt" + Dim OldCurrentFile As String = currentFile + currentFile = response + My.Computer.FileSystem.RenameFile(basedir & OldCurrentFile, response) + currentFile = response + Notify("Renamed!", 3) + For fileIndex = 0 To FilePicker.Items.Count - 1 + If FilePicker.Items(fileIndex).ToString = currentFile Then + If My.Computer.FileSystem.FileExists(basedir & currentFile) Then + FilePicker.SelectedIndex = fileIndex + NewFile = False + End If + Exit For + End If + Next + End If + End If + End Sub + + Private Sub MoveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MoveToolStripMenuItem.Click 'also nearly identical to the duplicate sub + MoveFileDialogue.InitialDirectory = basedir + If MoveFileDialogue.ShowDialog() = DialogResult.OK Then + Dim response As String = MoveFileDialogue.FileName + If response IsNot "" And Not NewFile Then + Dim ValidExt As Boolean = False + For i = 0 To My.Settings.SupportedExtensions.Count - 1 + If response.EndsWith("." & My.Settings.SupportedExtensions(i)) Then ValidExt = True + If ValidExt Then Exit For + Next + If Not ValidExt Then response &= ".txt" + Dim OldCurrentFile As String = currentFile + currentFile = response + My.Computer.FileSystem.MoveFile(basedir & OldCurrentFile, response) + basedir = GetPath(response) + currentFile = GetFile(response) + Notify("Moved!", 3) + For fileIndex = 0 To FilePicker.Items.Count - 1 + If FilePicker.Items(fileIndex).ToString = currentFile Then + If My.Computer.FileSystem.FileExists(basedir & currentFile) Then + FilePicker.SelectedIndex = fileIndex + NewFile = False + End If + Exit For + End If + Next + End If + End If + End Sub + + Private Sub RenameToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles RenameToolStripMenuItem1.Click + Dim response As String = InputBox("Enter new name for """ & rightClickedFile & """:", "Rename", currentFile) + If response IsNot "" Then + If My.Computer.FileSystem.FileExists(basedir & response) Then + If MsgBox("A file with the name """ & response & """ already exists. Please choose a different name.", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then + RenameToolStripMenuItem1_Click(sender, e) + End If + Else + Dim ValidExt As Boolean = False + For i = 0 To My.Settings.SupportedExtensions.Count - 1 + If response.EndsWith("." & My.Settings.SupportedExtensions(i)) Then ValidExt = True + If ValidExt Then Exit For + Next + If Not ValidExt Then response &= ".txt" + My.Computer.FileSystem.RenameFile(basedir & rightClickedFile, response) + Notify("Renamed!", 3) + UpdateFilePicker() + If currentFile = rightClickedFile Then + currentFile = response + reselectCurrentFile() + End If + End If + End If + End Sub + + Private Sub EncryptToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EncryptToolStripMenuItem.Click + 'If MsgBox("Create an encrypted copy of this file?") = MsgBoxResult.Yes Then + + 'End If + End Sub + + Private Sub OvertypeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OvertypeToolStripMenuItem.Click + My.Computer.Keyboard.SendKeys(Keys.Insert) 'just schnick the insert key + End Sub + + Private Sub DashesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DashesToolStripMenuItem.Click + Bullet = "-" + BulletPointsToolStripMenuItem.Checked = False + AutoBullets = sender.Checked + TextFileHolder.Focus() + My.Computer.Keyboard.SendKeys("{END}") + My.Computer.Keyboard.SendKeys("~") 'TODO: fix weird DING noise + End Sub + + Private Sub BulletPointsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BulletPointsToolStripMenuItem.Click + Bullet = "•" + DashesToolStripMenuItem.Checked = False + AutoBullets = sender.Checked + TextFileHolder.Focus() + My.Computer.Keyboard.SendKeys("{END}") + My.Computer.Keyboard.SendKeys("~") + End Sub + + Public Sub ResetUndoList() + UndoList.Clear() + UndoPos = 0 + UndoList.AddLast(TextFileHolder.Text) + End Sub + + Private Sub rtb_KeyDown(sender As Object, e As KeyEventArgs) Handles TextFileHolder.KeyDown + Dim Spaces As String = String.Concat(Enumerable.Repeat(" ", IndentLevel)) & " " 'put two spaces in for every level the user is indented up to, as well as an initial space + TextFileHolder.Focus() 'sometimes the tab key changes menu settings instead of inserting a tab, this should fix it + If e.Control AndAlso e.KeyCode = Keys.V Then 'stops people pasting in rich text + DirectCast(sender, RichTextBox).Paste(DataFormats.GetFormat("Text")) + e.Handled = True + End If + If AutoBullets Then 'handle automatic bullet points + If e.KeyCode = Keys.Enter Then + TextFileHolder.SelectedText = vbNewLine & Spaces & Bullet & " " + My.Computer.Keyboard.SendKeys(vbBack) ':/ + ElseIf e.KeyCode = Keys.Tab Then 'if they pressed tab, they want to increase the indent level + e.Handled = True 'this should stop a tab being inserted but it doesn't + Dim WordWrap As Boolean = TextFileHolder.WordWrap + TextFileHolder.WordWrap = False 'TODO: try to find a better way of doing this + Dim Lines As String() = TextFileHolder.Lines() + Dim OldPos As Integer = TextFileHolder.SelectionStart + If e.Shift Then 'if they pressed shift tab + IndentLevel -= 1 'unindent + If Lines(TextFileHolder.GetLineFromCharIndex(TextFileHolder.SelectionStart - 1)).StartsWith(" ") Then + Lines(TextFileHolder.GetLineFromCharIndex(TextFileHolder.SelectionStart - 1)) = Lines(TextFileHolder.GetLineFromCharIndex(TextFileHolder.SelectionStart - 1)).RemoveFirst(2) 'if the line starts with 2 spaces, get rid of them + End If + + If IndentLevel < 0 Then + Notify("AutoBullets disabled", 3) 'turn off autobullets if they unindent when on the lowest level + AutoBullets = False + IndentLevel = 0 + DashesToolStripMenuItem.Checked = False + BulletPointsToolStripMenuItem.Checked = False + End If + Else + IndentLevel += 1 + Lines(TextFileHolder.GetLineFromCharIndex(TextFileHolder.SelectionStart)) = " " & Lines(TextFileHolder.GetLineFromCharIndex(TextFileHolder.SelectionStart)) 'add the spaces + End If + TextFileHolder.Lines = Lines + If e.Shift Then + If OldPos > 2 Then TextFileHolder.SelectionStart = OldPos - 2 'move the cursor back 2 spaces because we just deleted 2 characters + Else + TextFileHolder.SelectionStart = OldPos + 2 + End If + My.Computer.Keyboard.SendKeys(vbBack) ':\ + If WordWrap Then + TextFileHolder.WordWrap = True + My.Computer.Keyboard.SendKeys(" ") + End If + End If + End If + End Sub + +End Class \ No newline at end of file diff --git a/Notepad Ultra.vbproj b/Notepad Ultra.vbproj new file mode 100644 index 0000000..790e39d --- /dev/null +++ b/Notepad Ultra.vbproj @@ -0,0 +1,359 @@ + + + + + Debug + AnyCPU + {3857ABB1-DDBF-41B1-81CA-B9D8D00B2CF7} + WinExe + Notepad_Ultra.My.MyApplication + Notepad_Ultra + Notepad Ultra + 512 + WindowsForms + v4.5.2 + + false + fcd84c09de6e4876a14b65213e88c530 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 1 + 0.11.0.%2a + false + true + true + True + + + AnyCPU + true + full + true + true + bin\Debug\ + Notepad Ultra.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + false + false + True + + + AnyCPU + pdbonly + false + true + true + bin\Release\ + Notepad Ultra.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + false + + + On + + + Binary + + + Off + + + On + + + 89DE94F5D75D483307A40CC9799567D794564D7D + + + Notepad Ultra_TemporaryKey.pfx + + + true + + + true + + + My Project\app.manifest + + + npu beta logo.ico + + + + ..\packages\PostSharp.4.3.25\lib\net35-client\PostSharp.dll + True + + + bin\Debug\dependencies\RichTextBoxPrintCtrl.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + About.vb + + + Form + + + + ChangelogViewer.vb + + + Form + + + + FindReplace.vb + + + Form + + + LoadTimeWarning.vb + + + Form + + + Open Passed File.vb + + + Form + + + Passed File Action Settings.vb + + + Form + + + Preset Directory Manager.vb + + + Form + + + + Splash Screen.vb + + + Form + + + Theme Editor.vb + + + Form + + + + Find.vb + + + Form + + + Status Bar Options.vb + + + Form + + + Supported File Extensions.vb + + + Form + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Always + + + + + + + + + + + + + + PreserveNewest + + + Form + + + Notepad Ultra.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + Settings.vb + + + Form + + + + + + + + + About.vb + + + ChangelogViewer.vb + + + FindReplace.vb + + + LoadTimeWarning.vb + + + Open Passed File.vb + + + Passed File Action Settings.vb + + + Preset Directory Manager.vb + + + Splash Screen.vb + + + Theme Editor.vb + + + Find.vb + + + Notepad Ultra.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + Settings.vb + + + Status Bar Options.vb + + + Supported File Extensions.vb + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + False + Microsoft .NET Framework 4 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 4.5 + true + + + + + + + + + + \ No newline at end of file diff --git a/Notepad Ultra.vbproj.user b/Notepad Ultra.vbproj.user new file mode 100644 index 0000000..e990f23 --- /dev/null +++ b/Notepad Ultra.vbproj.user @@ -0,0 +1,13 @@ + + + + publish\ + + + + + + en-US + false + + \ No newline at end of file diff --git a/Notepad Ultra_TemporaryKey.pfx b/Notepad Ultra_TemporaryKey.pfx new file mode 100644 index 0000000000000000000000000000000000000000..3ef0ad83d22b22719df327c4f7fd3593d5a71aef GIT binary patch literal 1609 zcma)6c{o&S82`>WGsB2bmTQSzlyc|ZGs6%@mXcj)xwMeAQEF<&O|oQ;Jt-qSvSlR8 zXtRbkt)fII5|yQN#}nG5dd77>J@>lZ=ed8}KYrhNf4}#AzwdX>^SuWrD0V1<;RFSt zP?skd8QizZszb6soahxEJ;skc_Un#7VL|{cwE`Z3T%=@cLRt7eoR zZk^q&vQKrQW!!1#`n5^Kewwe}^SNET&D?2{qT4H3=yrI?v#v7PS}xV+*B+l=0u5@; zG@^qYFOD2#^9)NA!znvUsf`Exh)YDi?UT;fAl9x&dJZ&wVeb3*vt`3$8im=Tn`OUb z&2U8B27YOZ7DE0<^OkbP2mY2eTBZ)mXo0o6CG+6dA#0Iu=gN039%}t*>*Y^phqNjz z{Xw|=Xk^Z?RBfO`a=X}{R?swDCr8U+gcgNu6iNa*!X(&h@7)KZuM9@ozBP=fN7T*M z*$-~^Tr;-a{I|lT8cB*0zvR5p(Nm9nqkQ}?IeIb5Z?nhk*^~)i?Sl~y+*kBvo~+6n zyBlp`cJ%;W92&0`QmsIpnL3os@~AMqQq%i~tg+pFnKJ#n=wd7+t=FJCY5w(Q-QKK) z^wyEBO$SPEcer+EOGM||QIFZ`M{dzqTeyW53nQOrypitCUMG1qQ|U@5OaV z;*@n%M7iSucI=y4Wk2gQa+!vfN%DI~Cs|!nszJv5kx$b(a?K-*bta7q1)4_Jh}4H& z8&jefzl)>=qorFS4K{_p-ViHQdHjNd!lLI(OY+^KI2J<}_xrqaWepsvu;h8gRBb8D zsOdph9$yxwMl>qR=e2HLn-~|Ixg!$U z#0aXJ2NkW;&hUfiIl9=2T@mg+xLC0QlyAL?ybLmJ5gkD}XUD1*-ua*nl-)6`;YD z3Ar(hi~$Z9Fhhe?CJ;D`%pkXe5fj+LJmXuXDa=OWTPajS3PM5%Q$>XCuH^<$;E^OBE|{i)!f`tRbT`1m_#5QP=5enBE(PxMHQTt0>u;c8CBM? zeexmG0W-MV+#v{=3~+tAF0MntHjpqab!grlzWXY$9(cm%7HFFdtpxxMuB9qRH=#4= zMz|S+!DMcN)O428ncwLD-G*QA{rLzPVEi*#^ zp?e{zEY1sWon6wc*wx3?4Aazp>xNGV}Jh_ zwIT*FCFs*{v58F->Y0_nP+QO&?eoK)8h>0<#TrL37yrB|e>E-|SEQ EPZR%YIRF3v literal 0 HcmV?d00001 diff --git a/Open Passed File.Designer.vb b/Open Passed File.Designer.vb new file mode 100644 index 0000000..6eb0275 --- /dev/null +++ b/Open Passed File.Designer.vb @@ -0,0 +1,280 @@ + _ +Partial Class Open_Passed_File + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Me.HowToOpenQuestion = New System.Windows.Forms.Label() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.SetDirectoryButton = New System.Windows.Forms.Button() + Me.Label2 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.CopyButton = New System.Windows.Forms.Button() + Me.Label3 = New System.Windows.Forms.Label() + Me.PictureBox2 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.MoveButton = New System.Windows.Forms.Button() + Me.Label4 = New System.Windows.Forms.Label() + Me.PictureBox3 = New System.Windows.Forms.PictureBox() + Me.HoverMe = New System.Windows.Forms.Label() + Me.CancelOpenButton = New System.Windows.Forms.Button() + Me.RememberCheckbox = New System.Windows.Forms.CheckBox() + Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components) + Me.Label1 = New System.Windows.Forms.Label() + Me.Button1 = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox2.SuspendLayout() + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'HowToOpenQuestion + ' + Me.HowToOpenQuestion.Location = New System.Drawing.Point(19, 9) + Me.HowToOpenQuestion.Name = "HowToOpenQuestion" + Me.HowToOpenQuestion.Size = New System.Drawing.Size(579, 52) + Me.HowToOpenQuestion.TabIndex = 0 + Me.HowToOpenQuestion.Text = "How do you want to open C:\Filename.txt?" + Me.HowToOpenQuestion.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.SetDirectoryButton) + Me.GroupBox1.Controls.Add(Me.Label2) + Me.GroupBox1.Controls.Add(Me.PictureBox1) + Me.GroupBox1.Location = New System.Drawing.Point(19, 64) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.GroupBox1.Size = New System.Drawing.Size(189, 329) + Me.GroupBox1.TabIndex = 1 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Set Directory" + ' + 'SetDirectoryButton + ' + Me.SetDirectoryButton.Location = New System.Drawing.Point(8, 286) + Me.SetDirectoryButton.Name = "SetDirectoryButton" + Me.SetDirectoryButton.Size = New System.Drawing.Size(173, 29) + Me.SetDirectoryButton.TabIndex = 1 + Me.SetDirectoryButton.Text = "Set Directory" + Me.SetDirectoryButton.UseVisualStyleBackColor = True + ' + 'Label2 + ' + Me.Label2.Location = New System.Drawing.Point(7, 130) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(176, 161) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Notepad Ultra's working directory will be changed to the directory containing the" & + " file." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "The original file will not be moved." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "No duplication occurs." + ' + 'PictureBox1 + ' + Me.PictureBox1.BackgroundImage = Global.Notepad_Ultra.My.Resources.Resources.shell32_134_02 + Me.PictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.PictureBox1.Location = New System.Drawing.Point(46, 21) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(96, 96) + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.CopyButton) + Me.GroupBox2.Controls.Add(Me.Label3) + Me.GroupBox2.Controls.Add(Me.PictureBox2) + Me.GroupBox2.Location = New System.Drawing.Point(214, 64) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.GroupBox2.Size = New System.Drawing.Size(189, 329) + Me.GroupBox2.TabIndex = 1 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Copy" + ' + 'CopyButton + ' + Me.CopyButton.Location = New System.Drawing.Point(8, 286) + Me.CopyButton.Name = "CopyButton" + Me.CopyButton.Size = New System.Drawing.Size(173, 29) + Me.CopyButton.TabIndex = 2 + Me.CopyButton.Text = "Copy" + Me.CopyButton.UseVisualStyleBackColor = True + ' + 'Label3 + ' + Me.Label3.Location = New System.Drawing.Point(6, 130) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(176, 161) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "The file will be copied to Notepad Ultra's current working directory." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "The orig" & + "inal file will not be moved." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Duplication will occur." + ' + 'PictureBox2 + ' + Me.PictureBox2.BackgroundImage = Global.Notepad_Ultra.My.Resources.Resources.shell32_148_02 + Me.PictureBox2.Location = New System.Drawing.Point(46, 21) + Me.PictureBox2.Name = "PictureBox2" + Me.PictureBox2.Size = New System.Drawing.Size(96, 96) + Me.PictureBox2.TabIndex = 0 + Me.PictureBox2.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.MoveButton) + Me.GroupBox3.Controls.Add(Me.Label4) + Me.GroupBox3.Controls.Add(Me.PictureBox3) + Me.GroupBox3.Location = New System.Drawing.Point(409, 64) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.GroupBox3.Size = New System.Drawing.Size(189, 329) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Move" + ' + 'MoveButton + ' + Me.MoveButton.Location = New System.Drawing.Point(8, 286) + Me.MoveButton.Name = "MoveButton" + Me.MoveButton.Size = New System.Drawing.Size(173, 29) + Me.MoveButton.TabIndex = 3 + Me.MoveButton.Text = "Move" + Me.MoveButton.UseVisualStyleBackColor = True + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(6, 130) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(176, 161) + Me.Label4.TabIndex = 1 + Me.Label4.Text = "The file will be moved to Notepad Ultra's current working directory." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "The origi" & + "nal file will be moved." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "No duplication occurs." + ' + 'PictureBox3 + ' + Me.PictureBox3.BackgroundImage = Global.Notepad_Ultra.My.Resources.Resources.imageres_5348_02 + Me.PictureBox3.Location = New System.Drawing.Point(46, 21) + Me.PictureBox3.Name = "PictureBox3" + Me.PictureBox3.Size = New System.Drawing.Size(96, 96) + Me.PictureBox3.TabIndex = 0 + Me.PictureBox3.TabStop = False + ' + 'HoverMe + ' + Me.HoverMe.AutoSize = True + Me.HoverMe.Location = New System.Drawing.Point(360, 405) + Me.HoverMe.Name = "HoverMe" + Me.HoverMe.Size = New System.Drawing.Size(253, 17) + Me.HoverMe.TabIndex = 2 + Me.HoverMe.Text = "Hover to view current working directory" + ' + 'CancelOpenButton + ' + Me.CancelOpenButton.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.CancelOpenButton.Location = New System.Drawing.Point(12, 437) + Me.CancelOpenButton.Name = "CancelOpenButton" + Me.CancelOpenButton.Size = New System.Drawing.Size(75, 23) + Me.CancelOpenButton.TabIndex = 3 + Me.CancelOpenButton.Text = "Cancel" + Me.CancelOpenButton.UseVisualStyleBackColor = True + ' + 'RememberCheckbox + ' + Me.RememberCheckbox.AutoSize = True + Me.RememberCheckbox.Location = New System.Drawing.Point(12, 404) + Me.RememberCheckbox.Name = "RememberCheckbox" + Me.RememberCheckbox.Size = New System.Drawing.Size(166, 21) + Me.RememberCheckbox.TabIndex = 4 + Me.RememberCheckbox.Text = "Remember my choice" + Me.RememberCheckbox.UseVisualStyleBackColor = True + ' + 'Label1 + ' + Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 16.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(13, 428) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(591, 38) + Me.Label1.TabIndex = 5 + Me.Label1.Text = "Now loading..." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.Label1.Visible = False + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(12, 434) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(166, 26) + Me.Button1.TabIndex = 6 + Me.Button1.Text = "Use notepad.exe" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Open_Passed_File + ' + Me.AcceptButton = Me.SetDirectoryButton + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(616, 475) + Me.ControlBox = False + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.RememberCheckbox) + Me.Controls.Add(Me.CancelOpenButton) + Me.Controls.Add(Me.HoverMe) + Me.Controls.Add(Me.GroupBox3) + Me.Controls.Add(Me.GroupBox2) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.HowToOpenQuestion) + Me.Name = "Open_Passed_File" + Me.Text = "Notepad Ultra - Opening C:\Filename.txt" + Me.GroupBox1.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox2.ResumeLayout(False) + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents HowToOpenQuestion As Label + Friend WithEvents GroupBox1 As GroupBox + Friend WithEvents GroupBox2 As GroupBox + Friend WithEvents GroupBox3 As GroupBox + Friend WithEvents Label2 As Label + Friend WithEvents PictureBox1 As PictureBox + Friend WithEvents PictureBox2 As PictureBox + Friend WithEvents PictureBox3 As PictureBox + Friend WithEvents Label3 As Label + Friend WithEvents Label4 As Label + Friend WithEvents SetDirectoryButton As Button + Friend WithEvents CopyButton As Button + Friend WithEvents HoverMe As Label + Friend WithEvents CancelOpenButton As Button + Friend WithEvents RememberCheckbox As CheckBox + Friend WithEvents MoveButton As Button + Friend WithEvents ToolTip1 As ToolTip + Friend WithEvents Label1 As Label + Friend WithEvents Button1 As Button +End Class diff --git a/Open Passed File.resx b/Open Passed File.resx new file mode 100644 index 0000000..1997a99 --- /dev/null +++ b/Open Passed File.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 56 + + \ No newline at end of file diff --git a/Open Passed File.vb b/Open Passed File.vb new file mode 100644 index 0000000..7ac3384 --- /dev/null +++ b/Open Passed File.vb @@ -0,0 +1,106 @@ +Public Class Open_Passed_File + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles SetDirectoryButton.Click, CopyButton.Click, MoveButton.Click + If Not My.Settings.SupportedExtensions.Contains(GetFileExtension(FileToOpen)) Then + My.Settings.SupportedExtensions.Add(GetFileExtension(FileToOpen)) + My.Settings.Save() + End If + Dim FileToOpenPath As String = GetPath(FileToOpen) + Dim FileToOpenFile As String = GetFile(FileToOpen) + 'MsgBox(FileToOpenPath & vbNewLine & FileToOpenFile) + Select Case sender.name.ToString.RemoveLast(6) + Case "SetDirectory" + Label1.Visible = True + TopMost = False + Splash_Screen.Show() + Hide() + Splash_Screen.Activate() + My.Settings.WorkingDirectory = FileToOpenPath + My.Settings.Save() + If RememberCheckbox.Checked Then My.Settings.DefaultFileAction = 1 + + Case "Copy", "Move" + Dim response As String = FileToOpenFile + 'MsgBox(My.Settings.WorkingDirectory & FileToOpenFile) + While My.Computer.FileSystem.FileExists(My.Settings.WorkingDirectory & FileToOpenFile) + response = InputBox("A file with the name """ & FileToOpenFile & """already exists in your base directory (" & My.Settings.WorkingDirectory & "). Please enter a new name for the file.") + If Not ValidFileName(response, True) Then + MsgBox("Invalid filename!") + Else + If Not response.Contains(".") Then response &= ".txt" + Dim ValidExt As Boolean = False + For i = 0 To My.Settings.SupportedExtensions.Count - 1 + If response.Split(".")(response.Split(".").Length - 1) = My.Settings.SupportedExtensions(i) Then ValidExt = True + Next + If ValidExt Then FileToOpenFile = response Else MsgBox("Unrecognised file extension! Try using "".txt"".") + End If + End While + Label1.Visible = True + TopMost = False + Splash_Screen.Show() + Hide() + Splash_Screen.Activate() + If sender.name.ToString.RemoveLast(6) = "Copy" Then + My.Computer.FileSystem.CopyFile(FileToOpen, My.Settings.WorkingDirectory & FileToOpenFile) + If RememberCheckbox.Checked Then My.Settings.DefaultFileAction = 2 + Else + My.Computer.FileSystem.MoveFile(FileToOpen, My.Settings.WorkingDirectory & FileToOpenFile) + If RememberCheckbox.Checked Then My.Settings.DefaultFileAction = 3 + End If + FileToOpen = FileToOpenPath & FileToOpenFile + Case Else + Throw New Exception("Unable to parse response!") 'if this happens, your computer is not in a very reliable state. either that, or i'm a moron. + End Select + Refresh() + My.Settings.Save() + CopyButton.Enabled = False + MoveButton.Enabled = False + SetDirectoryButton.Enabled = False + RememberCheckbox.Enabled = False + NPUWindow.Show() + End Sub + + Private Sub Cancel() Handles CancelOpenButton.Click + End + End Sub + + Private Sub Open_Passed_File_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() + Splash_Screen.TopMost = False + Activate() + If Not My.Computer.FileSystem.FileExists(FileToOpen) Then + If MsgBox("Failed to open file. Ensure Notepad Ultra has the rights to open this file!", MsgBoxStyle.Critical, vbOKOnly) <> 99999 Then End + End If + If GetPath(FileToOpen).ToLower = My.Settings.WorkingDirectory.ToLower Then + HowToOpenQuestion.Text = "Notepad Ultra - Opening " & FileToOpen & "..." + SetDirectoryButton.PerformClick() 'if you're opening a file that's already in the basedir, there's obviously no point moving or copying it + Else + If My.Settings.DefaultFileAction <> 0 Then + HowToOpenQuestion.Text = "Notepad Ultra - Opening " & FileToOpen & "..." + Refresh() + Select Case My.Settings.DefaultFileAction + Case 1 + SetDirectoryButton.PerformClick() + Case 2 + CopyButton.PerformClick() + Case 3 + MoveButton.PerformClick() + End Select + Else + Text = "Notepad Ultra - Opening " & FileToOpen + HowToOpenQuestion.Text = "How do you want to open " & FileToOpen & "?" + ToolTip1.SetToolTip(HoverMe, My.Settings.WorkingDirectory) + If Not My.Computer.FileSystem.DirectoryExists(My.Settings.WorkingDirectory) Then + CopyButton.Enabled = False + MoveButton.Enabled = False + ToolTip1.SetToolTip(HoverMe, My.Settings.WorkingDirectory & vbNewLine & "Unable to access this directory.") + End If + End If + End If + + End Sub + + Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click + Process.Start("C:\Windows\notepad.exe", FileToOpen) + End + End Sub +End Class \ No newline at end of file diff --git a/Passed File Action Settings.Designer.vb b/Passed File Action Settings.Designer.vb new file mode 100644 index 0000000..2cc8859 --- /dev/null +++ b/Passed File Action Settings.Designer.vb @@ -0,0 +1,91 @@ + _ +Partial Class Passed_File_Action_Settings + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.Label1 = New System.Windows.Forms.Label() + Me.ComboBox1 = New System.Windows.Forms.ComboBox() + Me.Button1 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 9) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(182, 17) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "When opening files directly:" + ' + 'ComboBox1 + ' + Me.ComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.ComboBox1.FormattingEnabled = True + Me.ComboBox1.Items.AddRange(New Object() {"Ask every time", "Set directory", "Copy", "Move"}) + Me.ComboBox1.Location = New System.Drawing.Point(200, 6) + Me.ComboBox1.Name = "ComboBox1" + Me.ComboBox1.Size = New System.Drawing.Size(162, 24) + Me.ComboBox1.TabIndex = 1 + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(287, 45) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(75, 23) + Me.Button1.TabIndex = 2 + Me.Button1.Text = "OK" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(15, 45) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(75, 23) + Me.Button2.TabIndex = 2 + Me.Button2.Text = "Cancel" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Passed_File_Action_Settings + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(372, 80) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.ComboBox1) + Me.Controls.Add(Me.Label1) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "Passed_File_Action_Settings" + Me.Text = "Passed File Action Settings" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents Label1 As Label + Friend WithEvents ComboBox1 As ComboBox + Friend WithEvents Button1 As Button + Friend WithEvents Button2 As Button +End Class diff --git a/Passed File Action Settings.resx b/Passed File Action Settings.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Passed File Action Settings.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Passed File Action Settings.vb b/Passed File Action Settings.vb new file mode 100644 index 0000000..3a58d97 --- /dev/null +++ b/Passed File Action Settings.vb @@ -0,0 +1,14 @@ +Public Class Passed_File_Action_Settings + Private Sub Passed_File_Action_Settings_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() + End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + My.Settings.DefaultFileAction = ComboBox1.SelectedIndex + Close() + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + Close() + End Sub +End Class \ No newline at end of file diff --git a/Preset Directory Manager.Designer.vb b/Preset Directory Manager.Designer.vb new file mode 100644 index 0000000..ca7f21e --- /dev/null +++ b/Preset Directory Manager.Designer.vb @@ -0,0 +1,114 @@ + _ +Partial Class Preset_Directory_Manager + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.Button6 = New System.Windows.Forms.Button() + Me.Button4 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.Button1 = New System.Windows.Forms.Button() + Me.DirBox = New System.Windows.Forms.ListBox() + Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog() + Me.Button3 = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'Button6 + ' + Me.Button6.Location = New System.Drawing.Point(421, 222) + Me.Button6.Name = "Button6" + Me.Button6.Size = New System.Drawing.Size(75, 23) + Me.Button6.TabIndex = 3 + Me.Button6.Text = "Save" + Me.Button6.UseVisualStyleBackColor = True + ' + 'Button4 + ' + Me.Button4.Location = New System.Drawing.Point(340, 222) + Me.Button4.Name = "Button4" + Me.Button4.Size = New System.Drawing.Size(75, 23) + Me.Button4.TabIndex = 5 + Me.Button4.Text = "Cancel" + Me.Button4.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(205, 222) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(75, 23) + Me.Button2.TabIndex = 6 + Me.Button2.Text = "Remove" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(17, 222) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(75, 23) + Me.Button1.TabIndex = 7 + Me.Button1.Text = "Add" + Me.Button1.UseVisualStyleBackColor = True + ' + 'DirBox + ' + Me.DirBox.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.DirBox.FormattingEnabled = True + Me.DirBox.ItemHeight = 20 + Me.DirBox.Items.AddRange(New Object() {"failed", "to", "read", "user", "preferences"}) + Me.DirBox.Location = New System.Drawing.Point(17, 12) + Me.DirBox.Name = "DirBox" + Me.DirBox.Size = New System.Drawing.Size(479, 204) + Me.DirBox.TabIndex = 2 + ' + 'Button3 + ' + Me.Button3.Location = New System.Drawing.Point(97, 222) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(102, 23) + Me.Button3.TabIndex = 6 + Me.Button3.Text = "Add Manually" + Me.Button3.UseVisualStyleBackColor = True + ' + 'Preset_Directory_Manager + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(508, 252) + Me.Controls.Add(Me.Button6) + Me.Controls.Add(Me.Button4) + Me.Controls.Add(Me.Button3) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.DirBox) + Me.Name = "Preset_Directory_Manager" + Me.Text = "Preset Directory Manager" + Me.ResumeLayout(False) + + End Sub + + Friend WithEvents Button6 As Button + Friend WithEvents Button4 As Button + Friend WithEvents Button2 As Button + Friend WithEvents Button1 As Button + Friend WithEvents DirBox As ListBox + Friend WithEvents FolderBrowserDialog1 As FolderBrowserDialog + Friend WithEvents Button3 As Button +End Class diff --git a/Preset Directory Manager.resx b/Preset Directory Manager.resx new file mode 100644 index 0000000..56edfd7 --- /dev/null +++ b/Preset Directory Manager.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Preset Directory Manager.vb b/Preset Directory Manager.vb new file mode 100644 index 0000000..a235220 --- /dev/null +++ b/Preset Directory Manager.vb @@ -0,0 +1,43 @@ +Public Class Preset_Directory_Manager + Private Sub Preset_Directory_Manager_Load(sender As Object, e As EventArgs) Handles MyBase.Load + If My.Settings.PresetDirectories.Count = 1 AndAlso My.Settings.PresetDirectories(0).Length = 0 Then + My.Settings.PresetDirectories(0) = My.Computer.FileSystem.SpecialDirectories.MyDocuments + My.Settings.Save() + End If + DirBox.Items.Clear() + For i = 0 To My.Settings.PresetDirectories.Count - 1 + DirBox.Items.Add(My.Settings.PresetDirectories(i)) + Next + End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + FolderBrowserDialog1.ShowDialog() + If My.Computer.FileSystem.DirectoryExists(FolderBrowserDialog1.SelectedPath) Then DirBox.Items.Add(FolderBrowserDialog1.SelectedPath) Else MsgBox("Couldn't access " & FolderBrowserDialog1.SelectedPath & ". Notepad Ultra may not have access rights.") + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + Dim response As String = InputBox("Path to add:") + If My.Computer.FileSystem.DirectoryExists(response) Then DirBox.Items.Add(response) Else MsgBox("Couldn't access " & response & ". Notepad Ultra may not have access rights, or the directory may not exist.") + End Sub + + Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click + My.Settings.PresetDirectories.Clear() + For i = 0 To DirBox.Items.Count - 1 + My.Settings.PresetDirectories.Add(DirBox.Items(i).ToString) + Next + If DirBox.Items.Count > 0 Then + My.Settings.Save() + Button4.PerformClick() + Else + MsgBox("The list must contain at least one preset directory.") + End If + End Sub + + Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click + Close() + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + If MsgBox("Are you sure you want to remove " & DirBox.SelectedItem.ToString & " from the list of preset directories?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then DirBox.Items.RemoveAt(DirBox.SelectedIndex) + End Sub +End Class \ No newline at end of file diff --git a/Resources/FileIcon.ico b/Resources/FileIcon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5d06b9f2857b39f0b5d3395e3e7999ba6bcc3a38 GIT binary patch literal 45451 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 literal 0 HcmV?d00001 diff --git a/Settings.Designer.vb b/Settings.Designer.vb new file mode 100644 index 0000000..f770211 --- /dev/null +++ b/Settings.Designer.vb @@ -0,0 +1,462 @@ + _ +Partial Class Settings + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Me.Label1 = New System.Windows.Forms.Label() + Me.BaseDirBox = New System.Windows.Forms.TextBox() + Me.Button1 = New System.Windows.Forms.Button() + Me.SidebarCheckbox = New System.Windows.Forms.CheckBox() + Me.DirectoryPicker = New System.Windows.Forms.FolderBrowserDialog() + Me.Button2 = New System.Windows.Forms.Button() + Me.SaveButton = New System.Windows.Forms.Button() + Me.Label2 = New System.Windows.Forms.Label() + Me.UndoStepLimit = New System.Windows.Forms.NumericUpDown() + Me.Label3 = New System.Windows.Forms.Label() + Me.UnlimitedUndosCheckbox = New System.Windows.Forms.CheckBox() + Me.UndoMemoryLimitCheckbox = New System.Windows.Forms.CheckBox() + Me.UndoMemoryLimitCount = New System.Windows.Forms.NumericUpDown() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label4 = New System.Windows.Forms.Label() + Me.Button4 = New System.Windows.Forms.Button() + Me.Label5 = New System.Windows.Forms.Label() + Me.TransparencyCheckbox = New System.Windows.Forms.CheckBox() + Me.Label6 = New System.Windows.Forms.Label() + Me.EncodingDropdown = New System.Windows.Forms.ComboBox() + Me.GreenNotificationsCheckbox = New System.Windows.Forms.CheckBox() + Me.setCustomColours = New System.Windows.Forms.Button() + Me.DefaultButton = New System.Windows.Forms.Button() + Me.Button5 = New System.Windows.Forms.Button() + Me.ToolTipSlut = New System.Windows.Forms.ToolTip(Me.components) + Me.DefaultTheme = New System.Windows.Forms.ComboBox() + Me.Button7 = New System.Windows.Forms.Button() + Me.RecycleBinCheckbox = New System.Windows.Forms.CheckBox() + Me.Label7 = New System.Windows.Forms.Label() + Me.Button6 = New System.Windows.Forms.Button() + Me.Button3 = New System.Windows.Forms.Button() + CType(Me.UndoStepLimit, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.UndoMemoryLimitCount, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox1.SuspendLayout() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(13, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(101, 17) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Base Directory" + ' + 'BaseDirBox + ' + Me.BaseDirBox.Location = New System.Drawing.Point(16, 33) + Me.BaseDirBox.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.BaseDirBox.Name = "BaseDirBox" + Me.BaseDirBox.Size = New System.Drawing.Size(275, 22) + Me.BaseDirBox.TabIndex = 1 + Me.BaseDirBox.Text = "*shrugs*" + Me.ToolTipSlut.SetToolTip(Me.BaseDirBox, "Which folder does Notepad Ultra look for files in?") + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(419, 32) + Me.Button1.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(39, 26) + Me.Button1.TabIndex = 2 + Me.Button1.Text = "..." + Me.ToolTipSlut.SetToolTip(Me.Button1, "Open a folder browser to pick a new base directory.") + Me.Button1.UseVisualStyleBackColor = True + ' + 'SidebarCheckbox + ' + Me.SidebarCheckbox.AutoSize = True + Me.SidebarCheckbox.Location = New System.Drawing.Point(16, 114) + Me.SidebarCheckbox.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.SidebarCheckbox.Name = "SidebarCheckbox" + Me.SidebarCheckbox.Size = New System.Drawing.Size(79, 21) + Me.SidebarCheckbox.TabIndex = 3 + Me.SidebarCheckbox.Text = "Sidebar" + Me.ToolTipSlut.SetToolTip(Me.SidebarCheckbox, "Display the sidebar? This can be toggled with F6.") + Me.SidebarCheckbox.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(20, 341) + Me.Button2.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(75, 23) + Me.Button2.TabIndex = 4 + Me.Button2.Text = "Cancel" + Me.Button2.UseVisualStyleBackColor = True + ' + 'SaveButton + ' + Me.SaveButton.Location = New System.Drawing.Point(383, 341) + Me.SaveButton.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.SaveButton.Name = "SaveButton" + Me.SaveButton.Size = New System.Drawing.Size(75, 23) + Me.SaveButton.TabIndex = 5 + Me.SaveButton.Text = "Save" + Me.SaveButton.UseVisualStyleBackColor = True + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(17, 23) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(76, 17) + Me.Label2.TabIndex = 6 + Me.Label2.Text = "Allow up to" + ' + 'UndoStepLimit + ' + Me.UndoStepLimit.Location = New System.Drawing.Point(93, 21) + Me.UndoStepLimit.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.UndoStepLimit.Maximum = New Decimal(New Integer() {500, 0, 0, 0}) + Me.UndoStepLimit.Name = "UndoStepLimit" + Me.UndoStepLimit.Size = New System.Drawing.Size(48, 22) + Me.UndoStepLimit.TabIndex = 7 + Me.ToolTipSlut.SetToolTip(Me.UndoStepLimit, "The number of times you can undo before ""running out""." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Setting this to 0 will di" & + "sable the Undo feature.") + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(141, 23) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(47, 17) + Me.Label3.TabIndex = 6 + Me.Label3.Text = "undos" + ' + 'UnlimitedUndosCheckbox + ' + Me.UnlimitedUndosCheckbox.AutoSize = True + Me.UnlimitedUndosCheckbox.Location = New System.Drawing.Point(193, 23) + Me.UnlimitedUndosCheckbox.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.UnlimitedUndosCheckbox.Name = "UnlimitedUndosCheckbox" + Me.UnlimitedUndosCheckbox.Size = New System.Drawing.Size(88, 21) + Me.UnlimitedUndosCheckbox.TabIndex = 8 + Me.UnlimitedUndosCheckbox.Text = "Unlimited" + Me.ToolTipSlut.SetToolTip(Me.UnlimitedUndosCheckbox, "Allow infinite undo steps! Definitely NOT RECOMMENDED." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "May eventually cause a cr" & + "ash!" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Only for those who've gone mad with power.") + Me.UnlimitedUndosCheckbox.UseVisualStyleBackColor = True + ' + 'UndoMemoryLimitCheckbox + ' + Me.UndoMemoryLimitCheckbox.AutoSize = True + Me.UndoMemoryLimitCheckbox.Checked = True + Me.UndoMemoryLimitCheckbox.CheckState = System.Windows.Forms.CheckState.Checked + Me.UndoMemoryLimitCheckbox.Location = New System.Drawing.Point(20, 50) + Me.UndoMemoryLimitCheckbox.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.UndoMemoryLimitCheckbox.Name = "UndoMemoryLimitCheckbox" + Me.UndoMemoryLimitCheckbox.Size = New System.Drawing.Size(203, 21) + Me.UndoMemoryLimitCheckbox.TabIndex = 9 + Me.UndoMemoryLimitCheckbox.Text = "Limit memory used by undo" + Me.UndoMemoryLimitCheckbox.UseVisualStyleBackColor = True + ' + 'UndoMemoryLimitCount + ' + Me.UndoMemoryLimitCount.Location = New System.Drawing.Point(48, 78) + Me.UndoMemoryLimitCount.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.UndoMemoryLimitCount.Maximum = New Decimal(New Integer() {65536, 0, 0, 0}) + Me.UndoMemoryLimitCount.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.UndoMemoryLimitCount.Name = "UndoMemoryLimitCount" + Me.UndoMemoryLimitCount.Size = New System.Drawing.Size(48, 22) + Me.UndoMemoryLimitCount.TabIndex = 7 + Me.ToolTipSlut.SetToolTip(Me.UndoMemoryLimitCount, "Maximum RAM usage of the undo feature.") + Me.UndoMemoryLimitCount.Value = New Decimal(New Integer() {256, 0, 0, 0}) + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.Label4) + Me.GroupBox1.Controls.Add(Me.Label3) + Me.GroupBox1.Controls.Add(Me.UndoMemoryLimitCheckbox) + Me.GroupBox1.Controls.Add(Me.Label2) + Me.GroupBox1.Controls.Add(Me.UnlimitedUndosCheckbox) + Me.GroupBox1.Controls.Add(Me.UndoStepLimit) + Me.GroupBox1.Controls.Add(Me.UndoMemoryLimitCount) + Me.GroupBox1.Location = New System.Drawing.Point(20, 182) + Me.GroupBox1.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Padding = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.GroupBox1.Size = New System.Drawing.Size(297, 110) + Me.GroupBox1.TabIndex = 10 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Undo (WIP)" + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Location = New System.Drawing.Point(96, 79) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(28, 17) + Me.Label4.TabIndex = 10 + Me.Label4.Text = "MB" + ' + 'Button4 + ' + Me.Button4.Location = New System.Drawing.Point(297, 32) + Me.Button4.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.Button4.Name = "Button4" + Me.Button4.Size = New System.Drawing.Size(116, 26) + Me.Button4.TabIndex = 2 + Me.Button4.Text = "My Documents" + Me.ToolTipSlut.SetToolTip(Me.Button4, "Set the base directory to your Documents folder.") + Me.Button4.UseVisualStyleBackColor = True + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Enabled = False + Me.Label5.Location = New System.Drawing.Point(259, 344) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(119, 17) + Me.Label5.TabIndex = 11 + Me.Label5.Text = "Lynnear Software" + ' + 'TransparencyCheckbox + ' + Me.TransparencyCheckbox.AutoSize = True + Me.TransparencyCheckbox.Location = New System.Drawing.Point(16, 142) + Me.TransparencyCheckbox.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.TransparencyCheckbox.Name = "TransparencyCheckbox" + Me.TransparencyCheckbox.Size = New System.Drawing.Size(176, 21) + Me.TransparencyCheckbox.TabIndex = 3 + Me.TransparencyCheckbox.Text = "Transparency on Move" + Me.ToolTipSlut.SetToolTip(Me.TransparencyCheckbox, "Should the Notepad Ultra window become transparent (see-through)" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "while being mov" & + "ed?") + Me.TransparencyCheckbox.UseVisualStyleBackColor = True + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Location = New System.Drawing.Point(254, 89) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(120, 17) + Me.Label6.TabIndex = 12 + Me.Label6.Text = "Default Encoding:" + ' + 'EncodingDropdown + ' + Me.EncodingDropdown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.EncodingDropdown.FormattingEnabled = True + Me.EncodingDropdown.Items.AddRange(New Object() {"UTF-8", "UTF-16", "UTF-32"}) + Me.EncodingDropdown.Location = New System.Drawing.Point(376, 86) + Me.EncodingDropdown.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.EncodingDropdown.Name = "EncodingDropdown" + Me.EncodingDropdown.Size = New System.Drawing.Size(81, 24) + Me.EncodingDropdown.TabIndex = 13 + Me.ToolTipSlut.SetToolTip(Me.EncodingDropdown, "Encoding to use when the encoding could not be detected," & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "and when saving new fil" & + "es." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "You should probably leave this as UTF-8.") + ' + 'GreenNotificationsCheckbox + ' + Me.GreenNotificationsCheckbox.AutoSize = True + Me.GreenNotificationsCheckbox.Location = New System.Drawing.Point(256, 114) + Me.GreenNotificationsCheckbox.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.GreenNotificationsCheckbox.Name = "GreenNotificationsCheckbox" + Me.GreenNotificationsCheckbox.Size = New System.Drawing.Size(189, 21) + Me.GreenNotificationsCheckbox.TabIndex = 3 + Me.GreenNotificationsCheckbox.Text = "Show Green Notifications" + Me.ToolTipSlut.SetToolTip(Me.GreenNotificationsCheckbox, "Low-priority messages that tell you that an operation completed successfully." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Fo" & + "r example: ""Changed directory"" or ""File has been saved"".") + Me.GreenNotificationsCheckbox.UseVisualStyleBackColor = True + ' + 'setCustomColours + ' + Me.setCustomColours.Location = New System.Drawing.Point(319, 167) + Me.setCustomColours.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.setCustomColours.Name = "setCustomColours" + Me.setCustomColours.Size = New System.Drawing.Size(139, 28) + Me.setCustomColours.TabIndex = 14 + Me.setCustomColours.Text = "Edit Themes" + Me.setCustomColours.UseVisualStyleBackColor = True + ' + 'DefaultButton + ' + Me.DefaultButton.Location = New System.Drawing.Point(101, 341) + Me.DefaultButton.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.DefaultButton.Name = "DefaultButton" + Me.DefaultButton.Size = New System.Drawing.Size(71, 23) + Me.DefaultButton.TabIndex = 14 + Me.DefaultButton.Text = "Defaults" + Me.ToolTipSlut.SetToolTip(Me.DefaultButton, "Restore settings to their defaults.") + Me.DefaultButton.UseVisualStyleBackColor = True + ' + 'Button5 + ' + Me.Button5.Location = New System.Drawing.Point(319, 200) + Me.Button5.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.Button5.Name = "Button5" + Me.Button5.Size = New System.Drawing.Size(139, 28) + Me.Button5.TabIndex = 14 + Me.Button5.Text = "Status Bar Options" + Me.ToolTipSlut.SetToolTip(Me.Button5, "Information to display in the status bar.") + Me.Button5.UseVisualStyleBackColor = True + ' + 'ToolTipSlut + ' + Me.ToolTipSlut.ToolTipTitle = "Get it? It's called ""ToolTipSlut"" because it takes aaaall the tooltips, and only " & + "hesitates for half a second! <3" + ' + 'DefaultTheme + ' + Me.DefaultTheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.DefaultTheme.FormattingEnabled = True + Me.DefaultTheme.Items.AddRange(New Object() {"Standard", "Night Mode", "Special"}) + Me.DefaultTheme.Location = New System.Drawing.Point(123, 85) + Me.DefaultTheme.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.DefaultTheme.Name = "DefaultTheme" + Me.DefaultTheme.Size = New System.Drawing.Size(116, 24) + Me.DefaultTheme.TabIndex = 13 + Me.ToolTipSlut.SetToolTip(Me.DefaultTheme, "Which theme should be applied at startup?") + ' + 'Button7 + ' + Me.Button7.Location = New System.Drawing.Point(318, 264) + Me.Button7.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.Button7.Name = "Button7" + Me.Button7.Size = New System.Drawing.Size(139, 28) + Me.Button7.TabIndex = 14 + Me.Button7.Text = "Preset Directories" + Me.ToolTipSlut.SetToolTip(Me.Button7, "Set your most commonly used directories to return to " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "[TODO: REWRITE THIS WHEN I" & + "T'S NOT 0333]") + Me.Button7.UseVisualStyleBackColor = True + ' + 'RecycleBinCheckbox + ' + Me.RecycleBinCheckbox.AutoSize = True + Me.RecycleBinCheckbox.Location = New System.Drawing.Point(256, 142) + Me.RecycleBinCheckbox.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.RecycleBinCheckbox.Name = "RecycleBinCheckbox" + Me.RecycleBinCheckbox.Size = New System.Drawing.Size(133, 21) + Me.RecycleBinCheckbox.TabIndex = 3 + Me.RecycleBinCheckbox.Text = "Use Recycle Bin" + Me.ToolTipSlut.SetToolTip(Me.RecycleBinCheckbox, "If enabled, files deleted through Notepad Ultra will" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "be moved to the recycle bin" & + ". Otherwise, they will be" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "erased from the disk immediately.") + Me.RecycleBinCheckbox.UseVisualStyleBackColor = True + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Location = New System.Drawing.Point(13, 86) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(105, 17) + Me.Label7.TabIndex = 12 + Me.Label7.Text = "Default Theme:" + ' + 'Button6 + ' + Me.Button6.Location = New System.Drawing.Point(318, 232) + Me.Button6.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.Button6.Name = "Button6" + Me.Button6.Size = New System.Drawing.Size(139, 28) + Me.Button6.TabIndex = 14 + Me.Button6.Text = "File Extensions" + Me.Button6.UseVisualStyleBackColor = True + ' + 'Button3 + ' + Me.Button3.Location = New System.Drawing.Point(318, 296) + Me.Button3.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(139, 28) + Me.Button3.TabIndex = 14 + Me.Button3.Text = "File Opening" + Me.Button3.UseVisualStyleBackColor = True + ' + 'Settings + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(469, 375) + Me.Controls.Add(Me.DefaultButton) + Me.Controls.Add(Me.Button3) + Me.Controls.Add(Me.Button7) + Me.Controls.Add(Me.Button6) + Me.Controls.Add(Me.Button5) + Me.Controls.Add(Me.setCustomColours) + Me.Controls.Add(Me.DefaultTheme) + Me.Controls.Add(Me.EncodingDropdown) + Me.Controls.Add(Me.Label7) + Me.Controls.Add(Me.Label6) + Me.Controls.Add(Me.Label5) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.SaveButton) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.SidebarCheckbox) + Me.Controls.Add(Me.RecycleBinCheckbox) + Me.Controls.Add(Me.GreenNotificationsCheckbox) + Me.Controls.Add(Me.TransparencyCheckbox) + Me.Controls.Add(Me.Button4) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.BaseDirBox) + Me.Controls.Add(Me.Label1) + Me.Margin = New System.Windows.Forms.Padding(3, 2, 3, 2) + Me.MaximizeBox = False + Me.Name = "Settings" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Notepad Ultra - Settings" + CType(Me.UndoStepLimit, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.UndoMemoryLimitCount, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents Label1 As Label + Friend WithEvents BaseDirBox As TextBox + Friend WithEvents Button1 As Button + Friend WithEvents SidebarCheckbox As CheckBox + Friend WithEvents DirectoryPicker As FolderBrowserDialog + Friend WithEvents Button2 As Button + Friend WithEvents SaveButton As Button + Friend WithEvents Label2 As Label + Friend WithEvents UndoStepLimit As NumericUpDown + Friend WithEvents Label3 As Label + Friend WithEvents UnlimitedUndosCheckbox As CheckBox + Friend WithEvents UndoMemoryLimitCheckbox As CheckBox + Friend WithEvents UndoMemoryLimitCount As NumericUpDown + Friend WithEvents GroupBox1 As GroupBox + Friend WithEvents Button4 As Button + Friend WithEvents Label4 As Label + Friend WithEvents Label5 As Label + Friend WithEvents TransparencyCheckbox As CheckBox + Friend WithEvents Label6 As Label + Friend WithEvents EncodingDropdown As ComboBox + Friend WithEvents GreenNotificationsCheckbox As CheckBox + Friend WithEvents setCustomColours As Button + Friend WithEvents DefaultButton As Button + Friend WithEvents Button5 As Button + Friend WithEvents ToolTipSlut As ToolTip + Friend WithEvents Label7 As Label + Friend WithEvents DefaultTheme As ComboBox + Friend WithEvents Button6 As Button + Friend WithEvents Button7 As Button + Friend WithEvents RecycleBinCheckbox As CheckBox + Friend WithEvents Button3 As Button +End Class diff --git a/Settings.resx b/Settings.resx new file mode 100644 index 0000000..07c7e86 --- /dev/null +++ b/Settings.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 176, 17 + + + 17, 17 + + + 176, 17 + + \ No newline at end of file diff --git a/Settings.vb b/Settings.vb new file mode 100644 index 0000000..9f9c185 --- /dev/null +++ b/Settings.vb @@ -0,0 +1,88 @@ +Public Class Settings + Public npu As NPUWindow + Private Sub Settings_Load(sender As Object, e As EventArgs) Handles MyBase.Load + NPUWindow.Enabled = False + npu.Throbber.Visible = False + Icon = ProgramIcon() + BaseDirBox.Text = My.Settings.WorkingDirectory + DefaultTheme.SelectedIndex = My.Settings.CurrentTheme + SidebarCheckbox.Checked = My.Settings.ShowSidebar + TransparencyCheckbox.Checked = My.Settings.MoveTransparency + EncodingDropdown.SelectedIndex = My.Settings.DefaultEncoding + GreenNotificationsCheckbox.Checked = My.Settings.GreenNotifications + RecycleBinCheckbox.Checked = My.Settings.UseRecycleBin + + UnlimitedUndosCheckbox.Checked = My.Settings.UndoSteps = -1 + UndoStepLimit.Value = Math.Abs(My.Settings.UndoSteps) + 'UndoMemoryLimitCount.Value = Math.Abs(My.Settings.UndoMaxMemory) + 'UndoMemoryLimitCheckbox.Checked = My.Settings.UndoMaxMemory = -1 + + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + Close() + End Sub + Private Sub enableMainWindow() Handles Me.FormClosed + NPUWindow.Enabled = True + End Sub + + Private Sub SidebarCheckbox_CheckedChanged(sender As Object, e As EventArgs) Handles SidebarCheckbox.CheckedChanged + 'If Not SidebarCheckbox.Checked Then MsgBox("Friendly reminder: You can show or hide the sidebar at any time by pressing F6.") + End Sub + + Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click + BaseDirBox.Text = My.Computer.FileSystem.SpecialDirectories.MyDocuments 'visual basic is truly something else + End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + DirectoryPicker.ShowDialog() + BaseDirBox.Text = DirectoryPicker.SelectedPath + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles SaveButton.Click + My.Settings.WorkingDirectory = BaseDirBox.Text + My.Settings.CurrentTheme = DefaultTheme.SelectedIndex + My.Settings.ShowSidebar = SidebarCheckbox.Checked + My.Settings.MoveTransparency = TransparencyCheckbox.Checked + My.Settings.DefaultEncoding = EncodingDropdown.SelectedIndex + My.Settings.GreenNotifications = GreenNotificationsCheckbox.Checked + My.Settings.UseRecycleBin = RecycleBinCheckbox.Checked + + My.Settings.UndoUnlimitedSteps = UnlimitedUndosCheckbox.Checked = -1 + My.Settings.UndoSteps = UndoStepLimit.Value + 'My.Settings.UndoMemoryLimit = UndoMemoryLimitCount.Value + 'My.Settings.UndoMaxMemory = UndoMemoryLimitCheckbox.Checked = -1 + My.Settings.Save() + Close() + End Sub + + Private Sub setCustomColours_Click(sender As Object, e As EventArgs) Handles setCustomColours.Click + Customise_Colours.Show() + End Sub + + Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click + If MsgBox("Editing the supported file extensions may lead to critical errors and a less stable Notepad Ultra. It is only recommended if you know what you're doing. Continue?", MsgBoxStyle.Exclamation Or MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2, "Be careful!") = MsgBoxResult.Yes Then Supported_File_Extensions.Show() + End Sub + + Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click + Status_Bar_Options.Show() + End Sub + + Private Sub DefaultButton_Click(sender As Object, e As EventArgs) Handles DefaultButton.Click + MsgBox("Not yet supported") + End Sub + + Private Sub UndoStepLimit_ValueChanged(sender As Object, e As EventArgs) Handles UndoStepLimit.ValueChanged + UndoMemoryLimitCount.Enabled = UndoStepLimit.Value = 0 'pretend these are all == 0 + UndoMemoryLimitCheckbox.Enabled = UndoStepLimit.Value = 0 + UnlimitedUndosCheckbox.Enabled = UndoStepLimit.Value = 0 + End Sub + + Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click + Passed_File_Action_Settings.Show() + End Sub + + Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click + Preset_Directory_Manager.Show() + End Sub +End Class \ No newline at end of file diff --git a/Settings1.vb b/Settings1.vb new file mode 100644 index 0000000..31e91d8 --- /dev/null +++ b/Settings1.vb @@ -0,0 +1,11 @@ + +Namespace My + + 'This class allows you to handle specific events on the settings class: + ' The SettingChanging event is raised before a setting's value is changed. + ' The PropertyChanged event is raised after a setting's value is changed. + ' The SettingsLoaded event is raised after the setting values are loaded. + ' The SettingsSaving event is raised before the setting values are saved. + Partial Friend NotInheritable Class MySettings + End Class +End Namespace diff --git a/Splash Screen.Designer.vb b/Splash Screen.Designer.vb new file mode 100644 index 0000000..ff1847b --- /dev/null +++ b/Splash Screen.Designer.vb @@ -0,0 +1,121 @@ + +Partial Class Splash_Screen + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Splash_Screen)) + Me.Label1 = New System.Windows.Forms.Label() + Me.LoadStatus = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.CloseButton = New System.Windows.Forms.Button() + Me.ShowSplashTimer = New System.Windows.Forms.Timer(Me.components) + Me.FolderPicker = New System.Windows.Forms.FolderBrowserDialog() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 16.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(98, 282) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(190, 32) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Notepad Ultra" + ' + 'LoadStatus + ' + Me.LoadStatus.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LoadStatus.Location = New System.Drawing.Point(21, 314) + Me.LoadStatus.Name = "LoadStatus" + Me.LoadStatus.Size = New System.Drawing.Size(345, 20) + Me.LoadStatus.TabIndex = 1 + Me.LoadStatus.Text = "Checking base directory..." + Me.LoadStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(-5, 337) + Me.ProgressBar1.MarqueeAnimationSpeed = 1 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(399, 40) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 2 + ' + 'CloseButton + ' + Me.CloseButton.BackColor = System.Drawing.SystemColors.Control + Me.CloseButton.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CloseButton.ForeColor = System.Drawing.Color.Black + Me.CloseButton.Location = New System.Drawing.Point(338, -1) + Me.CloseButton.Name = "CloseButton" + Me.CloseButton.Size = New System.Drawing.Size(50, 25) + Me.CloseButton.TabIndex = 3 + Me.CloseButton.Text = "X" + Me.CloseButton.UseVisualStyleBackColor = False + ' + 'ShowSplashTimer + ' + Me.ShowSplashTimer.Interval = 1 + ' + 'PictureBox1 + ' + Me.PictureBox1.BackgroundImage = CType(resources.GetObject("PictureBox1.BackgroundImage"), System.Drawing.Image) + Me.PictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.PictureBox1.Location = New System.Drawing.Point(65, 21) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(256, 256) + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'Splash_Screen + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(386, 372) + Me.Controls.Add(Me.CloseButton) + Me.Controls.Add(Me.ProgressBar1) + Me.Controls.Add(Me.LoadStatus) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.PictureBox1) + Me.Cursor = System.Windows.Forms.Cursors.AppStarting + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None + Me.Name = "Splash_Screen" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Notepad Ultra is now loading!" + Me.TopMost = True + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents PictureBox1 As PictureBox + Friend WithEvents Label1 As Label + Friend WithEvents LoadStatus As Label + Friend WithEvents ProgressBar1 As ProgressBar + Friend WithEvents CloseButton As Button + Friend WithEvents ShowSplashTimer As Timer + Friend WithEvents FolderPicker As FolderBrowserDialog +End Class diff --git a/Splash Screen.resx b/Splash Screen.resx new file mode 100644 index 0000000..c59eb87 --- /dev/null +++ b/Splash Screen.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 193, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAAQAAAAEABAMAAACuXLVVAAAABGdBTUEAALGPC/xhBQAAABhQTFRFAAAA + BwcHCgAIGRkZIgAd/wDc0NDQ////gg3c7AAAAVVJREFUeNrt2NF1gyAUBmBWcAVXcAVWyApZIevXnLSn + QTC156S9it//pAjc70VQ0jgnB+VeG2APgEtgUgKIB+R8CUzOAAAA8QC7IcA43jYk59ufBGAPgJS2dNzW + 6/eZywMAAAAAAAAAAAAAAAAAABwMUPf/aXzr+XcbQF+AVASgX8ByyrVSzyMAAAB6A5STAgAAnBPQLgsA + 8G8fpQC7ALymtIsBAAD0Bvi6BgAAODPgcQcAAHBuwGOC14DWmHI8QP+AzzLVbyvAMQHvDgAAAAAAAAAA + AAAAAAAAwHEBy6OG8vChPoxIK5UAjgwoW+tZSt56LwAAgOMCWgvROmC5MAH0AChbvYYAAPaCeqEB6B3w + rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADANAPGCYMwXlXhsgHjBN18BME8DZAfM6CBAOGIZrYAD2 + AYjcjADCASl9AJx5Y67bR9H9AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Splash Screen.vb b/Splash Screen.vb new file mode 100644 index 0000000..71a0322 --- /dev/null +++ b/Splash Screen.vb @@ -0,0 +1,64 @@ +Public Class Splash_Screen + Dim Loaded As Boolean = False + + Private Sub Reddify(sender As Object, e As EventArgs) Handles CloseButton.MouseEnter + CloseButton.BackColor = Color.Red + CloseButton.ForeColor = Color.White + End Sub + + Private Sub Dereddify(sender As Object, e As EventArgs) Handles CloseButton.MouseLeave + CloseButton.BackColor = ControlColour + CloseButton.ForeColor = Color.Black + End Sub + + Public Sub Splash_Screen_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() + ShowSplashTimer.Start() + If My.Settings.WorkingDirectory = "///FIRST RUN///" Then + My.Settings.WorkingDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments + My.Settings.Save() + End If + If Environment.GetCommandLineArgs().Length <> 1 Then + For i = 1 To Environment.GetCommandLineArgs().Count - 1 + If Environment.GetCommandLineArgs(i).Contains("\") Then FileToOpen = Environment.GetCommandLineArgs(i) + Next + End If + If FileToOpen IsNot Nothing And FileToOpen <> "" Then + 'MsgBox(FileToOpen) + Open_Passed_File.Show() + ShowSplashTimer.Stop() + Hide() + Opacity = 1 + LoadStatus.Text = "Reading file list..." + ShowInTaskbar = False + Else + If My.Computer.FileSystem.DirectoryExists(My.Settings.WorkingDirectory) Then + LoadStatus.Text = "Reading file list..." + Loaded = True + NPUWindow.Show() + Else + MsgBox("Your working directory is unavailable! Press OK to select a new working directory. For reference, your working directory is currently set as" & vbNewLine & My.Settings.WorkingDirectory & ".") + FolderPicker.SelectedPath = My.Computer.FileSystem.SpecialDirectories.MyDocuments + FolderPicker.ShowDialog() + My.Settings.WorkingDirectory = FolderPicker.SelectedPath + If My.Settings.WorkingDirectory = "" Then MsgBox("Don't play me like this") + My.Settings.Save() + LoadStatus.Text = "Loading..." + Splash_Screen_Load(sender, e) + End If + End If + + End Sub + + Private Sub ShowSplashTimer_Tick(sender As Object, e As EventArgs) Handles ShowSplashTimer.Tick + 'If Not Loaded Then Opacity = 1 + 'Disabled since it's not currently needed + ShowSplashTimer.Stop() + End Sub + + Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click + 'NPUWindow.Show() + End + End Sub + +End Class \ No newline at end of file diff --git a/Status Bar Options.Designer.vb b/Status Bar Options.Designer.vb new file mode 100644 index 0000000..ecce916 --- /dev/null +++ b/Status Bar Options.Designer.vb @@ -0,0 +1,100 @@ + _ +Partial Class Status_Bar_Options + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.Label1 = New System.Windows.Forms.Label() + Me.Button1 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.Button3 = New System.Windows.Forms.Button() + Me.OptionBox = New System.Windows.Forms.CheckedListBox() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 9) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(283, 17) + Me.Label1.TabIndex = 2 + Me.Label1.Text = "Display the following items in the status bar:" + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(15, 226) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(75, 23) + Me.Button1.TabIndex = 3 + Me.Button1.Text = "Cancel" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(225, 226) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(75, 23) + Me.Button2.TabIndex = 3 + Me.Button2.Text = "Save" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Button3 + ' + Me.Button3.Location = New System.Drawing.Point(96, 226) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(75, 23) + Me.Button3.TabIndex = 3 + Me.Button3.Text = "Default" + Me.Button3.UseVisualStyleBackColor = True + ' + 'OptionBox + ' + Me.OptionBox.FormattingEnabled = True + Me.OptionBox.Items.AddRange(New Object() {"Characters", "Date", "Directory (Recommended)", "Font Size", "Size", "Status", "Mode"}) + Me.OptionBox.Location = New System.Drawing.Point(15, 29) + Me.OptionBox.Name = "OptionBox" + Me.OptionBox.Size = New System.Drawing.Size(285, 191) + Me.OptionBox.TabIndex = 4 + ' + 'Status_Bar_Options + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(312, 261) + Me.Controls.Add(Me.OptionBox) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.Button3) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.Label1) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "Status_Bar_Options" + Me.Text = "Status Bar Options" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Label1 As Label + Friend WithEvents Button1 As Button + Friend WithEvents Button2 As Button + Friend WithEvents Button3 As Button + Friend WithEvents OptionBox As CheckedListBox +End Class diff --git a/Status Bar Options.resx b/Status Bar Options.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Status Bar Options.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Status Bar Options.vb b/Status Bar Options.vb new file mode 100644 index 0000000..e37d0e1 --- /dev/null +++ b/Status Bar Options.vb @@ -0,0 +1,29 @@ +Public Class Status_Bar_Options + Dim StatBarSettings As String() = {"Chars", "Date", "Dir", "FontSize", "Size", "Status", "Mode"} + + Private Sub MyForm_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() + For i = 0 To 6 + OptionBox.SetItemChecked(i, CallByName(My.Settings, "StatBar" & StatBarSettings(i), CallType.Get)) + Next + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + If MsgBox("Restore the default options?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + ' CHARS DATE DIR FONT SIZE STATS MODE + Dim defaults As Boolean() = {True, False, True, False, False, True, True} + For i = 0 To 6 + OptionBox.SetItemChecked(i, defaults(i)) + Next + End If + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + For i = 0 To 6 + CallByName(My.Settings, "StatBar" & StatBarSettings(i), CallType.Set, OptionBox.GetItemChecked(i)) + Next + NPUWindow.RedrawStatusBar() + My.Settings.Save() + Close() + End Sub +End Class \ No newline at end of file diff --git a/Supported File Extensions.Designer.vb b/Supported File Extensions.Designer.vb new file mode 100644 index 0000000..ef91287 --- /dev/null +++ b/Supported File Extensions.Designer.vb @@ -0,0 +1,116 @@ + _ +Partial Class Supported_File_Extensions + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.ExtBox = New System.Windows.Forms.ListBox() + Me.Button1 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.Button4 = New System.Windows.Forms.Button() + Me.Button5 = New System.Windows.Forms.Button() + Me.Button6 = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'ExtBox + ' + Me.ExtBox.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.ExtBox.FormattingEnabled = True + Me.ExtBox.ItemHeight = 20 + Me.ExtBox.Items.AddRange(New Object() {"couldn't", "determine", "extension", "settings", "today,", "trusty", "user.", "zounds!"}) + Me.ExtBox.Location = New System.Drawing.Point(12, 12) + Me.ExtBox.Name = "ExtBox" + Me.ExtBox.Size = New System.Drawing.Size(154, 184) + Me.ExtBox.Sorted = True + Me.ExtBox.TabIndex = 0 + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(172, 12) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(75, 23) + Me.Button1.TabIndex = 1 + Me.Button1.Text = "Add" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(172, 41) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(75, 23) + Me.Button2.TabIndex = 1 + Me.Button2.Text = "Remove" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Button4 + ' + Me.Button4.Location = New System.Drawing.Point(172, 115) + Me.Button4.Name = "Button4" + Me.Button4.Size = New System.Drawing.Size(75, 23) + Me.Button4.TabIndex = 1 + Me.Button4.Text = "Cancel" + Me.Button4.UseVisualStyleBackColor = True + ' + 'Button5 + ' + Me.Button5.Location = New System.Drawing.Point(172, 144) + Me.Button5.Name = "Button5" + Me.Button5.Size = New System.Drawing.Size(75, 23) + Me.Button5.TabIndex = 1 + Me.Button5.Text = "Default" + Me.Button5.UseVisualStyleBackColor = True + ' + 'Button6 + ' + Me.Button6.Location = New System.Drawing.Point(172, 173) + Me.Button6.Name = "Button6" + Me.Button6.Size = New System.Drawing.Size(75, 23) + Me.Button6.TabIndex = 1 + Me.Button6.Text = "Save" + Me.Button6.UseVisualStyleBackColor = True + ' + 'Supported_File_Extensions + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(259, 211) + Me.Controls.Add(Me.Button6) + Me.Controls.Add(Me.Button5) + Me.Controls.Add(Me.Button4) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.ExtBox) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "Supported_File_Extensions" + Me.Text = "Supported File Extensions" + Me.ResumeLayout(False) + + End Sub + + Friend WithEvents ExtBox As ListBox + Friend WithEvents Button1 As Button + Friend WithEvents Button2 As Button + Friend WithEvents Button4 As Button + Friend WithEvents Button5 As Button + Friend WithEvents Button6 As Button +End Class diff --git a/Supported File Extensions.resx b/Supported File Extensions.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Supported File Extensions.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Supported File Extensions.vb b/Supported File Extensions.vb new file mode 100644 index 0000000..067a52f --- /dev/null +++ b/Supported File Extensions.vb @@ -0,0 +1,58 @@ +Public Class Supported_File_Extensions + Dim unsaved As Boolean = False + Private Sub Supported_File_Extensions_Load(sender As Object, e As EventArgs) Handles MyBase.Load + ExtBox.Items.Clear() + For i = 0 To My.Settings.SupportedExtensions.Count - 1 + ExtBox.Items.Add(My.Settings.SupportedExtensions(i)) + Next + End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + Dim response As String = InputBox("Enter a new extension without a leading period.").ToString + If ValidFileName(response) Then + ExtBox.Items.Add(response) + unsaved = True + Else + MsgBox("Your response contained invalid characters. The following characters cannot be used:" & vbNewLine & ". / \ < > : ? * ,") + End If + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + If ExtBox.SelectedItem IsNot Nothing Then + If ExtBox.SelectedItem.ToString = "txt" Then + MsgBox("Support for the .txt extension cannot be disabled.", MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly) + Else + ExtBox.Items.Remove(ExtBox.Items.Item(ExtBox.SelectedIndex)) + unsaved = True + End If + End If + End Sub + + Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click + Dim extString As String = "" + My.Settings.SupportedExtensions.Clear() + For i = 0 To ExtBox.Items.Count - 1 + My.Settings.SupportedExtensions.Add(ExtBox.Items(i).ToString) + Next + My.Settings.Save() + Close() + End Sub + + Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click + If unsaved Then + If MsgBox("Discard changed made to the supported extensions list?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) Then Close() + Else + Close() + End If + End Sub + + Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click + If MsgBox("Replace your custom extensions with the defaults (txt, cfg, ini, log)?") Then + ExtBox.Items.Clear() + Dim defaultFileExtensions As String() = {"txt", "cfg", "ini", "log"} + For i = 0 To defaultFileExtensions.Length - 1 + ExtBox.Items.Add(defaultFileExtensions(i)) + Next + End If + End Sub +End Class \ No newline at end of file diff --git a/Theme Editor.Designer.vb b/Theme Editor.Designer.vb new file mode 100644 index 0000000..37934a3 --- /dev/null +++ b/Theme Editor.Designer.vb @@ -0,0 +1,543 @@ + _ +Partial Class Customise_Colours + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Customise_Colours)) + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.ApplyButton = New System.Windows.Forms.Button() + Me.Button13 = New System.Windows.Forms.Button() + Me.Button12 = New System.Windows.Forms.Button() + Me.Button8 = New System.Windows.Forms.Button() + Me.InnerCancelButton = New System.Windows.Forms.Button() + Me.MockNotification = New System.Windows.Forms.Label() + Me.MockStatusBar = New System.Windows.Forms.Label() + Me.Label5 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.VScrollBar1 = New System.Windows.Forms.VScrollBar() + Me.MockFilePicker = New System.Windows.Forms.Label() + Me.MockTextBox = New System.Windows.Forms.Label() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.StatusBarFGButton = New System.Windows.Forms.Button() + Me.StatusBarDefaultButton = New System.Windows.Forms.Button() + Me.StatusBarBGButton = New System.Windows.Forms.Button() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.NotificationBGButton = New System.Windows.Forms.Button() + Me.NotificationAllDefaultButton = New System.Windows.Forms.Button() + Me.NotificationCurrentDefaultButton = New System.Windows.Forms.Button() + Me.NotificationFGButton = New System.Windows.Forms.Button() + Me.NotificationCategorySelector = New System.Windows.Forms.ComboBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.SidebarFGButton = New System.Windows.Forms.Button() + Me.SidebarDefaultButton = New System.Windows.Forms.Button() + Me.Button3 = New System.Windows.Forms.Button() + Me.SidebarBGButton = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.Button2 = New System.Windows.Forms.Button() + Me.TextBoxDefaultButton = New System.Windows.Forms.Button() + Me.TextBoxFGButton = New System.Windows.Forms.Button() + Me.TextBoxBGButton = New System.Windows.Forms.Button() + Me.MockCaption = New System.Windows.Forms.Label() + Me.ThemeSelector = New System.Windows.Forms.ComboBox() + Me.ColourPicker = New System.Windows.Forms.ColorDialog() + Me.MainCancelButton = New System.Windows.Forms.Button() + Me.SaveButton = New System.Windows.Forms.Button() + Me.ToolTipSlut = New System.Windows.Forms.ToolTip(Me.components) + Me.ThemeApplied = New System.Windows.Forms.Label() + Me.ThemeAppliedHideTimer = New System.Windows.Forms.Timer(Me.components) + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.GroupBox3.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.SuspendLayout() + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.ApplyButton) + Me.GroupBox1.Controls.Add(Me.Button13) + Me.GroupBox1.Controls.Add(Me.Button12) + Me.GroupBox1.Controls.Add(Me.Button8) + Me.GroupBox1.Controls.Add(Me.InnerCancelButton) + Me.GroupBox1.Controls.Add(Me.MockNotification) + Me.GroupBox1.Controls.Add(Me.MockStatusBar) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.Label3) + Me.GroupBox1.Controls.Add(Me.VScrollBar1) + Me.GroupBox1.Controls.Add(Me.MockFilePicker) + Me.GroupBox1.Controls.Add(Me.MockTextBox) + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.GroupBox4) + Me.GroupBox1.Controls.Add(Me.GroupBox3) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.MockCaption) + Me.GroupBox1.Location = New System.Drawing.Point(13, 12) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(417, 501) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "DON'T TOUCH THAT" + ' + 'ApplyButton + ' + Me.ApplyButton.Location = New System.Drawing.Point(335, 464) + Me.ApplyButton.Name = "ApplyButton" + Me.ApplyButton.Size = New System.Drawing.Size(75, 27) + Me.ApplyButton.TabIndex = 11 + Me.ApplyButton.Text = "Apply" + Me.ToolTipSlut.SetToolTip(Me.ApplyButton, "Confirm changes you've made to this theme." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "These changes are not saved to disk u" & + "ntil you click ""Save"".") + Me.ApplyButton.UseVisualStyleBackColor = True + ' + 'Button13 + ' + Me.Button13.Location = New System.Drawing.Point(249, 464) + Me.Button13.Name = "Button13" + Me.Button13.Size = New System.Drawing.Size(75, 27) + Me.Button13.TabIndex = 11 + Me.Button13.Text = "Import..." + Me.Button13.UseVisualStyleBackColor = True + Me.Button13.Visible = False + ' + 'Button12 + ' + Me.Button12.Location = New System.Drawing.Point(168, 464) + Me.Button12.Name = "Button12" + Me.Button12.Size = New System.Drawing.Size(75, 27) + Me.Button12.TabIndex = 11 + Me.Button12.Text = "Export..." + Me.Button12.UseVisualStyleBackColor = True + Me.Button12.Visible = False + ' + 'Button8 + ' + Me.Button8.Location = New System.Drawing.Point(87, 464) + Me.Button8.Name = "Button8" + Me.Button8.Size = New System.Drawing.Size(75, 27) + Me.Button8.TabIndex = 11 + Me.Button8.Text = "Default" + Me.ToolTipSlut.SetToolTip(Me.Button8, "Reset this theme to its default appearance.") + Me.Button8.UseVisualStyleBackColor = True + ' + 'InnerCancelButton + ' + Me.InnerCancelButton.Location = New System.Drawing.Point(6, 464) + Me.InnerCancelButton.Name = "InnerCancelButton" + Me.InnerCancelButton.Size = New System.Drawing.Size(75, 27) + Me.InnerCancelButton.TabIndex = 11 + Me.InnerCancelButton.Text = "Cancel" + Me.ToolTipSlut.SetToolTip(Me.InnerCancelButton, "Cancel the changes you've just made.") + Me.InnerCancelButton.UseVisualStyleBackColor = True + ' + 'MockNotification + ' + Me.MockNotification.BackColor = System.Drawing.Color.Green + Me.MockNotification.Font = New System.Drawing.Font("Segoe UI Semibold", 4.8!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.MockNotification.ForeColor = System.Drawing.Color.White + Me.MockNotification.Location = New System.Drawing.Point(327, 441) + Me.MockNotification.Name = "MockNotification" + Me.MockNotification.Size = New System.Drawing.Size(83, 14) + Me.MockNotification.TabIndex = 10 + Me.MockNotification.Text = "Sample Notification" + ' + 'MockStatusBar + ' + Me.MockStatusBar.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.MockStatusBar.Location = New System.Drawing.Point(6, 441) + Me.MockStatusBar.Name = "MockStatusBar" + Me.MockStatusBar.Size = New System.Drawing.Size(404, 14) + Me.MockStatusBar.TabIndex = 9 + Me.MockStatusBar.Text = "612 Bytes | 413 Characters | Directory | Font Size" + ' + 'Label5 + ' + Me.Label5.BackColor = System.Drawing.Color.Red + Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.ForeColor = System.Drawing.Color.White + Me.Label5.Location = New System.Drawing.Point(383, 215) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(28, 17) + Me.Label5.TabIndex = 8 + Me.Label5.Text = "X" + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label3 + ' + Me.Label3.Font = New System.Drawing.Font("Microsoft Sans Serif", 4.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(6, 232) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(101, 12) + Me.Label3.TabIndex = 6 + Me.Label3.Text = "File Edit Format View" + ' + 'VScrollBar1 + ' + Me.VScrollBar1.Location = New System.Drawing.Point(93, 244) + Me.VScrollBar1.Name = "VScrollBar1" + Me.VScrollBar1.Size = New System.Drawing.Size(14, 197) + Me.VScrollBar1.TabIndex = 5 + ' + 'MockFilePicker + ' + Me.MockFilePicker.BackColor = System.Drawing.Color.White + Me.MockFilePicker.Font = New System.Drawing.Font("Segoe UI", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.MockFilePicker.Location = New System.Drawing.Point(6, 244) + Me.MockFilePicker.Name = "MockFilePicker" + Me.MockFilePicker.Size = New System.Drawing.Size(95, 197) + Me.MockFilePicker.TabIndex = 4 + Me.MockFilePicker.Text = "Apple" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Banana" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Cherry" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Durian" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Eggplant" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Fig" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Grape" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Honeydew" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Iceberg" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Jojoba" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "K" & + "ale" + ' + 'MockTextBox + ' + Me.MockTextBox.BackColor = System.Drawing.Color.White + Me.MockTextBox.Font = New System.Drawing.Font("Lucida Console", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.MockTextBox.Location = New System.Drawing.Point(107, 232) + Me.MockTextBox.Name = "MockTextBox" + Me.MockTextBox.Size = New System.Drawing.Size(303, 209) + Me.MockTextBox.TabIndex = 4 + Me.MockTextBox.Text = resources.GetString("MockTextBox.Text") + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.StatusBarFGButton) + Me.GroupBox5.Controls.Add(Me.StatusBarDefaultButton) + Me.GroupBox5.Controls.Add(Me.StatusBarBGButton) + Me.GroupBox5.Location = New System.Drawing.Point(188, 36) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(84, 171) + Me.GroupBox5.TabIndex = 3 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "StatusBar" + ' + 'StatusBarFGButton + ' + Me.StatusBarFGButton.Location = New System.Drawing.Point(8, 21) + Me.StatusBarFGButton.Name = "StatusBarFGButton" + Me.StatusBarFGButton.Size = New System.Drawing.Size(67, 31) + Me.StatusBarFGButton.TabIndex = 0 + Me.StatusBarFGButton.Text = "Text" + Me.StatusBarFGButton.UseVisualStyleBackColor = True + ' + 'StatusBarDefaultButton + ' + Me.StatusBarDefaultButton.Location = New System.Drawing.Point(8, 95) + Me.StatusBarDefaultButton.Name = "StatusBarDefaultButton" + Me.StatusBarDefaultButton.Size = New System.Drawing.Size(67, 31) + Me.StatusBarDefaultButton.TabIndex = 1 + Me.StatusBarDefaultButton.Text = "Default" + Me.StatusBarDefaultButton.UseVisualStyleBackColor = True + ' + 'StatusBarBGButton + ' + Me.StatusBarBGButton.Location = New System.Drawing.Point(8, 58) + Me.StatusBarBGButton.Name = "StatusBarBGButton" + Me.StatusBarBGButton.Size = New System.Drawing.Size(67, 31) + Me.StatusBarBGButton.TabIndex = 1 + Me.StatusBarBGButton.Text = "Back" + Me.StatusBarBGButton.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.NotificationBGButton) + Me.GroupBox4.Controls.Add(Me.NotificationAllDefaultButton) + Me.GroupBox4.Controls.Add(Me.NotificationCurrentDefaultButton) + Me.GroupBox4.Controls.Add(Me.NotificationFGButton) + Me.GroupBox4.Controls.Add(Me.NotificationCategorySelector) + Me.GroupBox4.Location = New System.Drawing.Point(277, 36) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(132, 171) + Me.GroupBox4.TabIndex = 2 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "Notifications" + ' + 'NotificationBGButton + ' + Me.NotificationBGButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.NotificationBGButton.Location = New System.Drawing.Point(68, 58) + Me.NotificationBGButton.Name = "NotificationBGButton" + Me.NotificationBGButton.Size = New System.Drawing.Size(59, 31) + Me.NotificationBGButton.TabIndex = 8 + Me.NotificationBGButton.Text = "Back" + Me.NotificationBGButton.UseVisualStyleBackColor = True + ' + 'NotificationAllDefaultButton + ' + Me.NotificationAllDefaultButton.Location = New System.Drawing.Point(5, 132) + Me.NotificationAllDefaultButton.Name = "NotificationAllDefaultButton" + Me.NotificationAllDefaultButton.Size = New System.Drawing.Size(122, 31) + Me.NotificationAllDefaultButton.TabIndex = 1 + Me.NotificationAllDefaultButton.Text = "Default (All)" + Me.NotificationAllDefaultButton.UseVisualStyleBackColor = True + ' + 'NotificationCurrentDefaultButton + ' + Me.NotificationCurrentDefaultButton.Location = New System.Drawing.Point(5, 95) + Me.NotificationCurrentDefaultButton.Name = "NotificationCurrentDefaultButton" + Me.NotificationCurrentDefaultButton.Size = New System.Drawing.Size(122, 31) + Me.NotificationCurrentDefaultButton.TabIndex = 1 + Me.NotificationCurrentDefaultButton.Text = "Default (Current)" + Me.NotificationCurrentDefaultButton.UseVisualStyleBackColor = True + ' + 'NotificationFGButton + ' + Me.NotificationFGButton.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.NotificationFGButton.Location = New System.Drawing.Point(5, 58) + Me.NotificationFGButton.Name = "NotificationFGButton" + Me.NotificationFGButton.Size = New System.Drawing.Size(59, 31) + Me.NotificationFGButton.TabIndex = 2 + Me.NotificationFGButton.Text = "Text" + Me.NotificationFGButton.UseVisualStyleBackColor = True + ' + 'NotificationCategorySelector + ' + Me.NotificationCategorySelector.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.NotificationCategorySelector.FormattingEnabled = True + Me.NotificationCategorySelector.Items.AddRange(New Object() {"Critical", "Warning", "Info"}) + Me.NotificationCategorySelector.Location = New System.Drawing.Point(5, 25) + Me.NotificationCategorySelector.Name = "NotificationCategorySelector" + Me.NotificationCategorySelector.Size = New System.Drawing.Size(122, 24) + Me.NotificationCategorySelector.TabIndex = 7 + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.SidebarFGButton) + Me.GroupBox3.Controls.Add(Me.SidebarDefaultButton) + Me.GroupBox3.Controls.Add(Me.Button3) + Me.GroupBox3.Controls.Add(Me.SidebarBGButton) + Me.GroupBox3.Location = New System.Drawing.Point(10, 36) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(84, 171) + Me.GroupBox3.TabIndex = 2 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Sidebar" + ' + 'SidebarFGButton + ' + Me.SidebarFGButton.Location = New System.Drawing.Point(8, 21) + Me.SidebarFGButton.Name = "SidebarFGButton" + Me.SidebarFGButton.Size = New System.Drawing.Size(67, 31) + Me.SidebarFGButton.TabIndex = 0 + Me.SidebarFGButton.Text = "Text" + Me.SidebarFGButton.UseVisualStyleBackColor = True + ' + 'SidebarDefaultButton + ' + Me.SidebarDefaultButton.Location = New System.Drawing.Point(8, 132) + Me.SidebarDefaultButton.Name = "SidebarDefaultButton" + Me.SidebarDefaultButton.Size = New System.Drawing.Size(67, 31) + Me.SidebarDefaultButton.TabIndex = 1 + Me.SidebarDefaultButton.Text = "Default" + Me.SidebarDefaultButton.UseVisualStyleBackColor = True + ' + 'Button3 + ' + Me.Button3.Location = New System.Drawing.Point(8, 95) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(67, 31) + Me.Button3.TabIndex = 1 + Me.Button3.Text = "Copy ->" + Me.Button3.UseVisualStyleBackColor = True + ' + 'SidebarBGButton + ' + Me.SidebarBGButton.Location = New System.Drawing.Point(8, 58) + Me.SidebarBGButton.Name = "SidebarBGButton" + Me.SidebarBGButton.Size = New System.Drawing.Size(67, 31) + Me.SidebarBGButton.TabIndex = 1 + Me.SidebarBGButton.Text = "Back" + Me.SidebarBGButton.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.Button2) + Me.GroupBox2.Controls.Add(Me.TextBoxDefaultButton) + Me.GroupBox2.Controls.Add(Me.TextBoxFGButton) + Me.GroupBox2.Controls.Add(Me.TextBoxBGButton) + Me.GroupBox2.Location = New System.Drawing.Point(99, 36) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(84, 171) + Me.GroupBox2.TabIndex = 2 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Editor" + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(8, 95) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(67, 31) + Me.Button2.TabIndex = 0 + Me.Button2.Text = "<- Copy" + Me.Button2.UseVisualStyleBackColor = True + ' + 'TextBoxDefaultButton + ' + Me.TextBoxDefaultButton.Location = New System.Drawing.Point(8, 132) + Me.TextBoxDefaultButton.Name = "TextBoxDefaultButton" + Me.TextBoxDefaultButton.Size = New System.Drawing.Size(67, 31) + Me.TextBoxDefaultButton.TabIndex = 1 + Me.TextBoxDefaultButton.Text = "Default" + Me.TextBoxDefaultButton.UseVisualStyleBackColor = True + ' + 'TextBoxFGButton + ' + Me.TextBoxFGButton.Location = New System.Drawing.Point(8, 21) + Me.TextBoxFGButton.Name = "TextBoxFGButton" + Me.TextBoxFGButton.Size = New System.Drawing.Size(67, 31) + Me.TextBoxFGButton.TabIndex = 0 + Me.TextBoxFGButton.Text = "Text" + Me.TextBoxFGButton.UseVisualStyleBackColor = True + ' + 'TextBoxBGButton + ' + Me.TextBoxBGButton.Location = New System.Drawing.Point(8, 58) + Me.TextBoxBGButton.Name = "TextBoxBGButton" + Me.TextBoxBGButton.Size = New System.Drawing.Size(67, 31) + Me.TextBoxBGButton.TabIndex = 1 + Me.TextBoxBGButton.Text = "Back" + Me.TextBoxBGButton.UseVisualStyleBackColor = True + ' + 'MockCaption + ' + Me.MockCaption.BackColor = System.Drawing.Color.Orchid + Me.MockCaption.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.2!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.MockCaption.ForeColor = System.Drawing.Color.White + Me.MockCaption.Location = New System.Drawing.Point(5, 215) + Me.MockCaption.Name = "MockCaption" + Me.MockCaption.Size = New System.Drawing.Size(406, 241) + Me.MockCaption.TabIndex = 7 + Me.MockCaption.Text = resources.GetString("MockCaption.Text") + ' + 'ThemeSelector + ' + Me.ThemeSelector.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.ThemeSelector.FormattingEnabled = True + Me.ThemeSelector.Items.AddRange(New Object() {"Standard", "Night", "Tertiary"}) + Me.ThemeSelector.Location = New System.Drawing.Point(21, 7) + Me.ThemeSelector.Name = "ThemeSelector" + Me.ThemeSelector.Size = New System.Drawing.Size(141, 24) + Me.ThemeSelector.TabIndex = 0 + ' + 'ColourPicker + ' + Me.ColourPicker.AnyColor = True + Me.ColourPicker.FullOpen = True + Me.ColourPicker.SolidColorOnly = True + ' + 'MainCancelButton + ' + Me.MainCancelButton.Location = New System.Drawing.Point(19, 521) + Me.MainCancelButton.Name = "MainCancelButton" + Me.MainCancelButton.Size = New System.Drawing.Size(75, 27) + Me.MainCancelButton.TabIndex = 11 + Me.MainCancelButton.Text = "Cancel" + Me.ToolTipSlut.SetToolTip(Me.MainCancelButton, "Discard all theme changes you've made this session.") + Me.MainCancelButton.UseVisualStyleBackColor = True + ' + 'SaveButton + ' + Me.SaveButton.Location = New System.Drawing.Point(348, 521) + Me.SaveButton.Name = "SaveButton" + Me.SaveButton.Size = New System.Drawing.Size(75, 27) + Me.SaveButton.TabIndex = 11 + Me.SaveButton.Text = "Save" + Me.ToolTipSlut.SetToolTip(Me.SaveButton, "Confirm and write changes to disk.") + Me.SaveButton.UseVisualStyleBackColor = True + ' + 'ThemeApplied + ' + Me.ThemeApplied.Location = New System.Drawing.Point(98, 521) + Me.ThemeApplied.Name = "ThemeApplied" + Me.ThemeApplied.Size = New System.Drawing.Size(246, 23) + Me.ThemeApplied.TabIndex = 12 + Me.ThemeApplied.Text = "Theme Applied!" + Me.ThemeApplied.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.ThemeApplied.Visible = False + ' + 'ThemeAppliedHideTimer + ' + Me.ThemeAppliedHideTimer.Interval = 1000 + ' + 'Customise_Colours + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(442, 554) + Me.Controls.Add(Me.ThemeApplied) + Me.Controls.Add(Me.SaveButton) + Me.Controls.Add(Me.ThemeSelector) + Me.Controls.Add(Me.MainCancelButton) + Me.Controls.Add(Me.GroupBox1) + Me.Name = "Customise_Colours" + Me.Text = "Notepad Ultra - Theme Editor" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox2.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + + Friend WithEvents GroupBox1 As GroupBox + Friend WithEvents ThemeSelector As ComboBox + Friend WithEvents ColourPicker As ColorDialog + Friend WithEvents TextBoxBGButton As Button + Friend WithEvents TextBoxFGButton As Button + Friend WithEvents GroupBox4 As GroupBox + Friend WithEvents GroupBox3 As GroupBox + Friend WithEvents SidebarFGButton As Button + Friend WithEvents SidebarBGButton As Button + Friend WithEvents GroupBox2 As GroupBox + Friend WithEvents GroupBox5 As GroupBox + Friend WithEvents StatusBarFGButton As Button + Friend WithEvents StatusBarBGButton As Button + Friend WithEvents Label3 As Label + Friend WithEvents VScrollBar1 As VScrollBar + Friend WithEvents MockFilePicker As Label + Friend WithEvents MockTextBox As Label + Friend WithEvents NotificationFGButton As Button + Friend WithEvents NotificationCategorySelector As ComboBox + Friend WithEvents MockCaption As Label + Friend WithEvents Label5 As Label + Friend WithEvents NotificationBGButton As Button + Friend WithEvents MockStatusBar As Label + Friend WithEvents MockNotification As Label + Friend WithEvents ApplyButton As Button + Friend WithEvents Button8 As Button + Friend WithEvents InnerCancelButton As Button + Friend WithEvents MainCancelButton As Button + Friend WithEvents SaveButton As Button + Friend WithEvents ToolTipSlut As ToolTip + Friend WithEvents Button13 As Button + Friend WithEvents Button12 As Button + Friend WithEvents ThemeApplied As Label + Friend WithEvents ThemeAppliedHideTimer As Timer + Friend WithEvents StatusBarDefaultButton As Button + Friend WithEvents NotificationAllDefaultButton As Button + Friend WithEvents NotificationCurrentDefaultButton As Button + Friend WithEvents SidebarDefaultButton As Button + Friend WithEvents Button3 As Button + Friend WithEvents Button2 As Button + Friend WithEvents TextBoxDefaultButton As Button +End Class diff --git a/Theme Editor.resx b/Theme Editor.resx new file mode 100644 index 0000000..c1e6ef4 --- /dev/null +++ b/Theme Editor.resx @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 175, 17 + + + To provide you with an idea of what your chosen colour scheme will look like, this mockup will automatically update to reflect your choices. + +Note that the text here is not the same size as it will appear. This is done simply to make it easier to visualise the final colour scheme, as using realistically-scaled font sizes would make the text incredibly small (as small as the menu bar on the top-left of the mockup). + + + Notepad Ultra + +If you are seeing this, I'm afraid your measly computer simply cannot handle the might and the majesty of Lynnear Software's finest creation yet: The futuristic, sleek, sexy, AutoUpdato-Realtimetacular SplendifferoPreviewBox 8000! +Or maybe the program fucked up. It probably fucked up. + + + 17, 17 + + + 308, 17 + + + 46 + + \ No newline at end of file diff --git a/Theme Editor.vb b/Theme Editor.vb new file mode 100644 index 0000000..8403029 --- /dev/null +++ b/Theme Editor.vb @@ -0,0 +1,265 @@ +Public Class Customise_Colours + Dim OldTheme, CurrentTheme, PreSaveNiteTheme, PreSaveStandardTheme, PreSaveTertiaryTheme As Theme + Dim unappliedchanges, unsaved As Boolean + Dim SaveWarningThemeName As String + + 'WARNING: this code isn't pretty... + + Public Property unapplied() As String + Get + Return unappliedchanges + End Get + Private Set(ByVal value As String) + unappliedchanges = value + InnerCancelButton.Enabled = unappliedchanges + ApplyButton.Enabled = unappliedchanges + SaveButton.Enabled = Not unappliedchanges + End Set + End Property + + Private Sub Customise_Colours_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Icon = ProgramIcon() + PreSaveStandardTheme = ReturnThemeSettingsAsThemeObject(0) + PreSaveNiteTheme = ReturnThemeSettingsAsThemeObject(1) + PreSaveTertiaryTheme = ReturnThemeSettingsAsThemeObject(2) + NotificationCategorySelector.SelectedIndex = 2 + ThemeSelector.SelectedIndex = 0 'todo: maybe change to reflect current theme? + + End Sub + + Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ThemeSelector.SelectedIndexChanged + If unsaved = True Then + If MsgBox("Apply changes before switching?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + Select Case SaveWarningThemeName + Case "Standard" + PreSaveStandardTheme = CurrentTheme + Case "Nite" + PreSaveNiteTheme = CurrentTheme + Case "Tertiary" + PreSaveTertiaryTheme = CurrentTheme + End Select + showThemeAppliedMessage() + End If + End If + LoadTheme() + SaveWarningThemeName = ThemeSelector.SelectedItem.ToString.Replace("Night", "Nite") + unapplied = False + End Sub + + Private Sub LoadTheme() + Dim themeName As String = ThemeSelector.SelectedItem.ToString.Replace("Night", "Nite") + Select Case themeName + Case "Standard" + CurrentTheme = PreSaveStandardTheme + Case "Nite" + CurrentTheme = PreSaveNiteTheme + Case "Tertiary" + CurrentTheme = PreSaveTertiaryTheme + End Select + PreviewCurrentTheme() + End Sub + + Private Sub ThemeAppliedHideTimer_Tick(sender As Object, e As EventArgs) Handles ThemeAppliedHideTimer.Tick + ThemeApplied.Visible = False + ThemeAppliedHideTimer.Stop() + End Sub + + Private Sub PreviewCurrentTheme() Handles NotificationCategorySelector.SelectedIndexChanged + MockFilePicker.ForeColor = CurrentTheme.SidebarFG + MockFilePicker.BackColor = CurrentTheme.SidebarBG + MockStatusBar.ForeColor = CurrentTheme.StatusBarFG + MockStatusBar.BackColor = CurrentTheme.StatusBarBG + MockTextBox.ForeColor = CurrentTheme.TextBoxFG + MockTextBox.BackColor = CurrentTheme.TextBoxBG + Dim category As String = NotificationCategorySelector.SelectedItem.ToString + MockNotification.ForeColor = CallByName(CurrentTheme, "Notification" & category & "FG", CallType.Get) + MockNotification.BackColor = CallByName(CurrentTheme, "Notification" & category & "BG", CallType.Get) + + End Sub + + Private Sub SetNewColour(sender As Object, e As EventArgs) Handles NotificationBGButton.Click, TextBoxBGButton.Click, SidebarBGButton.Click, SidebarFGButton.Click, StatusBarFGButton.Click, StatusBarBGButton.Click, NotificationFGButton.Click, TextBoxFGButton.Click + Dim Clicked As String = sender.name.ToString.RemoveLast(6).Replace("Notification", "Notification" & NotificationCategorySelector.SelectedItem.ToString) + ColourPicker.Color = CallByName(CurrentTheme, Clicked, CallType.Get) + If ColourPicker.ShowDialog() = DialogResult.OK Then + CallByName(CurrentTheme, Clicked, CallType.Set, ColourPicker.Color) 'TODO: why doesn't this work? >:c + unapplied = True + unsaved = True + ShittyThemeSetWorkaround(Clicked, ColourPicker.Color) + PreviewCurrentTheme() + End If + End Sub + + Private Sub Button5_Click(sender As Object, e As EventArgs) Handles InnerCancelButton.Click + If MsgBox("Undo changes made and reload theme from settings?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + unapplied = False + LoadTheme() + End If + End Sub + + Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click, Button12.Click + MsgBox("Not yet supported, sorry :c") + End Sub + + Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click + 'TODO: Restore defaults + 'Also, right clicking on a button should reset that thing to its default + If MsgBox("Load the default colours for this theme?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + Select Case ThemeSelector.SelectedIndex + Case 0 + CurrentTheme = defaultStandardTheme + Case 1 + CurrentTheme = defaultNightTheme + Case 2 + CurrentTheme = defaultTertiaryTheme + Case Else + CurrentTheme = defaultStandardTheme + End Select + unsaved = True + PreviewCurrentTheme() + End If + End Sub + + Private Sub ResetCategoryToDefaults(sender As Object, e As EventArgs) Handles NotificationAllDefaultButton.Click, NotificationCurrentDefaultButton.Click, StatusBarDefaultButton.Click, SidebarDefaultButton.Click, TextBoxDefaultButton.Click 'TODO: replace with a bunch of CallByNames? + If MsgBox("Restore the default colours for this category to their defaults?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + Dim Clicked As String = sender.name.ToString.RemoveLast(13) + Select Case Clicked + Case "NotificationAll]" + CurrentTheme.NotificationCriticalBG = SelectedThemeDefaults.NotificationCriticalBG + CurrentTheme.NotificationCriticalFG = SelectedThemeDefaults.NotificationCriticalBG + CurrentTheme.NotificationWarningBG = SelectedThemeDefaults.NotificationCriticalBG + CurrentTheme.NotificationWarningFG = SelectedThemeDefaults.NotificationCriticalBG + CurrentTheme.NotificationInfoBG = SelectedThemeDefaults.NotificationCriticalBG + CurrentTheme.NotificationInfoFG = SelectedThemeDefaults.NotificationCriticalBG + Case "NotificationCurrent" + Dim category As String = NotificationCategorySelector.SelectedItem.ToString + CallByName(CurrentTheme, "Notification" & category & "FG", CallType.Set, CallByName(SelectedThemeDefaults, "Notification" & category & "FG", CallType.Get)) + CallByName(CurrentTheme, "Notification" & category & "BG", CallType.Set, CallByName(SelectedThemeDefaults, "Notification" & category & "BG", CallType.Get)) + Case "StatusBar" + CurrentTheme.StatusBarBG = SelectedThemeDefaults.StatusBarBG + CurrentTheme.StatusBarFG = SelectedThemeDefaults.StatusBarFG + Case "TextBox" + CurrentTheme.TextBoxBG = SelectedThemeDefaults.TextBoxBG + CurrentTheme.TextBoxFG = SelectedThemeDefaults.TextBoxFG + Case "Sidebar" + CurrentTheme.SidebarFG = SelectedThemeDefaults.SidebarFG + CurrentTheme.SidebarBG = SelectedThemeDefaults.SidebarBG + End Select + unsaved = True + PreviewCurrentTheme() + End If + End Sub + + Public Function SelectedThemeDefaults() As Theme + Select Case ThemeSelector.SelectedIndex + Case 0 + Return defaultStandardTheme + Case 1 + Return defaultNightTheme + Case 2 + Return defaultTertiaryTheme + Case Else + Return defaultStandardTheme + End Select + End Function + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + If MsgBox("Update sidebar colours to match editor colours?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + CurrentTheme.SidebarBG = CurrentTheme.TextBoxBG + CurrentTheme.SidebarFG = CurrentTheme.TextBoxFG + End If + unsaved = True + PreviewCurrentTheme() + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + If MsgBox("Update editor colours to match sidebar colours?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + CurrentTheme.TextBoxBG = CurrentTheme.SidebarBG + CurrentTheme.TextBoxFG = CurrentTheme.SidebarFG + End If + unsaved = True + PreviewCurrentTheme() + End Sub + + Private Sub Button11_Click(sender As Object, e As EventArgs) Handles SaveButton.Click + Dim themeName() As String = {"Standard", "Nite", "Tertiary"} + For i = 0 To 2 + CallByName(My.Settings, themeName(i) & "NotifyColourCritical", CallType.Set, CallByName(GetPreSaveTheme(i), "NotificationCriticalBG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "NotifyColourWarning", CallType.Set, CallByName(GetPreSaveTheme(i), "NotificationWarningBG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "NotifyColourInfo", CallType.Set, CallByName(GetPreSaveTheme(i), "NotificationInfoBG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "NotifyTextColourCritical", CallType.Set, CallByName(GetPreSaveTheme(i), "NotificationCriticalFG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "NotifyTextColourWarning", CallType.Set, CallByName(GetPreSaveTheme(i), "NotificationWarningFG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "NotifyTextColourInfo", CallType.Set, CallByName(GetPreSaveTheme(i), "NotificationInfoFG", CallType.Get)) + + CallByName(My.Settings, themeName(i) & "SidebarFG", CallType.Set, CallByName(GetPreSaveTheme(i), "SidebarFG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "SidebarBG", CallType.Set, CallByName(GetPreSaveTheme(i), "SidebarBG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "StatFG", CallType.Set, CallByName(GetPreSaveTheme(i), "StatusBarFG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "StatBG", CallType.Set, CallByName(GetPreSaveTheme(i), "StatusBarBG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "TextFG", CallType.Set, CallByName(GetPreSaveTheme(i), "TextBoxFG", CallType.Get)) + CallByName(My.Settings, themeName(i) & "TextBG", CallType.Set, CallByName(GetPreSaveTheme(i), "TextBoxBG", CallType.Get)) + Next + My.Settings.Save() + NPUWindow.reloadCurrentTheme() + End Sub + + Function GetPreSaveTheme(themeType As Integer) + Select Case themeType + Case 0 + Return PreSaveStandardTheme + Case 1 + Return PreSaveNiteTheme + Case 2 + Return PreSaveTertiaryTheme + Case Else + Return PreSaveStandardTheme + End Select + + End Function + + Private Sub Button9_Click(sender As Object, e As EventArgs) Handles ApplyButton.Click + Dim themeName As String = ThemeSelector.SelectedItem.ToString + Select Case themeName + Case "Standard" + PreSaveStandardTheme = CurrentTheme + Case "Night" + PreSaveNiteTheme = CurrentTheme + Case "Tertiary" + PreSaveTertiaryTheme = CurrentTheme + End Select + unapplied = False + showThemeAppliedMessage() + End Sub + + Public Sub ShittyThemeSetWorkaround(Name, Colour) 'upside to using non-american english in a programming language written in american english: calling the variable "color" would've fucked things up, because you can't redefine the built in class! ;p + 'If CallByName(currentTheme, Name, CallType.Get) = Colour Then MsgBox("It actually worked") + Select Case Name + Case "NotificationInfoBG" + CurrentTheme.NotificationInfoBG = Colour + Case "NotificationInfoFG" + CurrentTheme.NotificationInfoFG = Colour + Case "NotificationWarningBG" + CurrentTheme.NotificationWarningBG = Colour + Case "NotificationWarningFG" + CurrentTheme.NotificationWarningFG = Colour + Case "NotificationCriticalBG" + CurrentTheme.NotificationCriticalBG = Colour + Case "NotificationCriticalFG" + CurrentTheme.NotificationCriticalFG = Colour + Case "TextBoxBG" + CurrentTheme.TextBoxBG = Colour + Case "TextBoxFG" + CurrentTheme.TextBoxFG = Colour + Case "SidebarBG" + CurrentTheme.SidebarBG = Colour + Case "SidebarFG" + CurrentTheme.SidebarFG = Colour + Case "StatusBarBG" + CurrentTheme.StatusBarBG = Colour + Case "StatusBarFG" + CurrentTheme.StatusBarFG = Colour + End Select + End Sub + Public Sub showThemeAppliedMessage() + ThemeApplied.Visible = True + ThemeAppliedHideTimer.Start() + End Sub +End Class \ No newline at end of file diff --git a/bin/Debug/Build Installer.lnk b/bin/Debug/Build Installer.lnk new file mode 100644 index 0000000000000000000000000000000000000000..55ba193bbd6b9564e9afb3436e85e3bd2a9aadb3 GIT binary patch literal 2088 zcmd5-U1$_n6h51VvX-J7O=O!G9kv=G!DSN++6BS5yV)HKyBlXW{xE?ovm=>gvop+3 zT|yB-e6XY-K zo_o%n@4M%obMN#Jk*mH2J<;t_Pu(ZUO@fEw5@)uem&YfK77Im-gjSZAs4mKvs-mw zd9h;VlogwH`3{8Vo4{5b>#0EP3*a8=(<~>G6C~ToYP!%7XzwKIqh(YJoa!=vRe9&w zM;ck=P=<0OkVH20ENnVv9TWf?AjwDjUgJ%g`jD#F7SWFX#Fiuz$U~%(0w#P;Ua*xT zDvDn=dff3uDw6Cv2vbi5c{Fw{$v%!_HuoX=a%P}ZTI$zNC=Og3xCSE0V()3hV}mV& zHC~bzIKoXHw-}dFT|LYZu5c8^qm4x|+{7Gh%^#qzuV7b)j`{CNq&)U)m(D5&E)z~K z6>(0S{fhW+#b^nCbBJSj6Q6nFIDZi$P%pBe;f#i% zOJL%x7$sc+s|MZ1EDBG)w2uttIy`>N3J}yOR|pB@Yk#|IJPN|4|MgcgX8G z&M`O3z&$m&BFZhbckS}y6Hj*DT7S5E(`2FRo11-~9=Z2h-Hp~KFCUEkIrmR~H^7$x z{~_SorKI#n;O1&3jh951)eAe{Ay)g$36Um3AWvF-lz+X`dNun+Qr807QLjm4?67ZXRWJqjLM J<8Y-cv{%7Hp$Y&1 literal 0 HcmV?d00001 diff --git a/bin/Debug/Changelog.txt b/bin/Debug/Changelog.txt new file mode 100644 index 0000000..c979156 --- /dev/null +++ b/bin/Debug/Changelog.txt @@ -0,0 +1,215 @@ +CHANGELOG + Really minor things (fixing typos, adding comments, minor restructures) aren't mentioned. + +Alpha 0.1 - Genesis + Initial version! + Reading files + Writing files + +Alpha 0.2 - The Basics + Support for displaying directories + Rudimentary encoding support + Scaling fixes + +Alpha 0.3 - Cementing the Basics + Complete (I think) encoding support + Full directory support! + UI enhancements + Started working on settings + +Alpha 0.4 - The Big One + Fixed numerous bugs related to file deletion (both internal and external) + Made Save As open the saved file after saving + Made "Change font size" options work + Added shortcuts for deleting files and for refreshing the file picker + Made font-change shortcuts work + "Couldn't detect encoding" message boxes have been replaced with a much less obtrusive warning in the bottom-left + Changed Save As from Ctrl-Alt-S to Ctrl-Shift-S (because Ctrl-Alt-S opens a System Information dialogue on my Spectre) (Suggested by Pet!) + Fixed issue where filepicker without scrollbar caused text to overflow from window (Spotted by Pet) + Fixed issue where deleting a file, or opening a new directory, followed by clicking on blank space in the file picker, would cause a crash (Pet) + Added insert time/date functionality + +Alpha 0.5 - When Things got *Really* Serious + Settings dialogue reads settings, but can't write them yet (It's 0049 and I'm tired) + Cleaned up changelog ;p + Added supported for 3 tiers of notifications + Changed font size changing mechanics, and made it into a dropdown instead of a split button + Moved notifications to the right-hand side, because avoiding text jumping around is more important than making sure they're visible in narrow windows (I think) + Added a FIFO queue for notifications! + Fixed an issue where the filepicker would be much too wide on low DPI screens + Added first settings tooltip + Created a form for theme customisation + Added file size and creation date info to the file info dialogue + +Alpha 0.6 - Tweaks and Features + (Partial) THEME SUPPORT! So far, saving is not supported. Themes can be edited, but not saved. Theme support was sorta Pet's idea (she thought it would be cool to be able to modify the night mode's colours, I took it from there) + Added a form to change supported file extensions + Added support for extensions other than txt + Replaced night mode toggle with support for 3 customisable themes + Added a directory watch feature. If any files in the base directory are deleted/renamed/created, the filepicker will automatically refresh. + Fixed some rather nasty bugs related to the directory watcher + Implemented a Find feature! However, when the textbox has been scrolled to the bottom, each click of the "next" button causes it to jump one line up or down. + +Alpha 0.7 - The Theme Update + Themes are now saved and remembered between sessions! + Fixed a possible bug where changing directories would not update the directory watcher + All options in the settings menu now have tooltips + Settings now save + (Very) small speed optimisations + HUGE speed increase to saving, restoring it to Alpha 0.5 speed. The directory watcher refreshed the file list over and over again while saving, and saving could take anywhere up to three seconds! + Added a warning that displays if you try to exit or change file without saving your changes + +Alpha 0.8 - Serious Business + Fixed an issue where using UNC paths would break upon going up a level + Converted the changelog from a .vb file to a .txt file, which is what it should've been all along + Moved a fair amount of functions into Extensions.vb so they can be accessed globally, which means less reinvention of the wheel + Added a form for editing the preset directories, I'll work on it when it's not 0340 + Added in the default colours for the standard theme. Fuck this, I'm going to sleep. See you in 0.9! + +Alpha 0.9 - It's the Little Things + Fixed a bug that caused notification theme settings not to be displayed in the theme previewer + Fixed bugs related to theme saving and loading + Added and implemented restoration of default themes + Started work on status bar options + +Alpha 0.10 - Slow Day + Status bar options are now fully implemented + Minor code cleanups here and there + [I thought I was going to sleep at this point, but my sleep schedule is already fucked badly, so I didn't] + Removed debug code in Find dialogue + Started work on replace (as in find & replace) dialogue + Added an option to highlight all instances of the find string. Sleep is for the weak. + Copied the highlight all code over to the replace dialogue. It's 0258, and I think I'll start being healthy and going to sleep before 0300, so I'm out. + +Alpha 0.11 - Fulfilling Promises + Fixed a bug that caused the find dialogue to count, but ignore the last character of the file when searching + Fixed a bug that made NPU fail to load the user's settings if an error occurred during startup + Implemented "Match Case" and "Whole Word" for the find and replace dialogues! + Fixed a bug that arose when the File Picker automatically reselected the file you were working on. If the file had unsaved changes, you would be asked to save those changes or discard them and reload from the disk, instead of just keeping them in memory. Thanks to Pet for telling me. + Replace dialogue is now capable of replacing + Duplication support + NPU now prevents you from going up from the root directory of a given path + Files can now be right-clicked in the sidebar, presenting the user with options to delete or reveal the file + +Alpha 0.12 - Some Semblance of Professionalism + Printing support! + Added a placeholder(?) icon + Added a shitty licence to stop people stealing the glorious, mountainous revenue I expect to make ($0.00) from this one-of-a-kind, expertly written divine experience in the form of a beautiful piece of perfect software. The licence, named with the exceptionally witty and clever title of "Lynnecence 1.0", is pretty much MPL's chill, unemployed cousin who lets you do irresponsible stuff while still worrying about you + File loading is now asynchronous, and there's even a dandy little progress bar! + Added a warning message for when a file takes more than 10 seconds to load + Fixed a crash upon right-clicking on empty space in the File Picker (thanks Pet) + Sorted TODO in Changelog.txt by importance (in my opinion) + Added PostSharp (https://www.postsharp.net/download) because I just discovered that you can add PostSharp + +Alpha 0.13 - The THICC Update + Added a splash screen! + Started working on handling "Open with" + Fixed a bug where anything typed the first second after saving a file would be deleted + Files save more quickly + Fixed a bug that caused the title bar to end up like "Notepad Ultra: file.txt (Unsaved) (Unsaved) (Unsaved) (Unsaved) (Unsaved)" when saving the same file multiple times + Open With now works, probably! ~u0 + You can now no longer get info, duplicate, or delete files that don't yet exist + Removed PostSharp because I decided to make my own undo function because I'm hardcore and doesn't afraid of anything + UNDO SUPPORT! \0u0/ + Partial undo settings support! + Changed a few " "s in the changelog to tabs + +Beta 0.1 - General Use, Maybe? + Default file open settings are now used + Updated the icon to reflect beta state + Added a changelog viewer to the About menu + Finally added the most important feature: The "about" dialogue has a cool light display! And just in time for Christmas, too! ;p + Disabled pasting of rich text (I didn't realise it was enabled) because Notepad Ultra isn't meant to replace WordPad + Lots of little changes! + +Beta 0.2 - User Friendlier + Improved saving of new files + Fixed a crash when using the find operation + Removed Unix2Dos dependency, increasing speed and reliability while reducing file size! 0u0 + Renamed RemoveEnding to RemoveLast + Main window is now titled "file.txt - Notepad Ultra" instead of "Notepad Ultra: file.txt" + Fixed a bug that made changing supported extensions not work + [NOTE: Development will be slowing down from now own, i'm working on some private projects ~u0] + +Beta 0.3 - Can she fix it? Yes she can! (So much for development slowing down...) + Fixed another bug related to supported extensions + Slight code improvements + Prevented removal of the txt file extension + Page setup + When closing with an unsaved new file, the prompt read 'Save changes made to ""?', which has been replaced with 'Save changes made to new file?' + Automatic insertion of bullet points (and dashes) is now possible! + Added a button to toggle overtype + Rearranged the file menu + Removed the border around the text file holder + Added the border back, because it looks terrible if your filepicker doesn't have a scrollbar (thanks pet) + Fixed yet /another/ bug related to supported extensions + Fixed a crash that would occur when you opened, closed, and reopened the settings dialogue + Fixed some inconsistencies between spaces and tabs in some files + Fixed a bug where cancelling the open file dialogue would leave NPU running in the background + If your working directory cannot be found when you open a passed file, disable the copy and move options rather than the set directory option + Fixed a bug that caused npu to close half a second after opening a passed file because I'm an idiot + Fixed a stupid, stupid bug with the GetFileExtension() function because I'm a moron + Fixed many a bug related to opening passed files + Updated Extensions.vb with the latest version from another classic Lynnear Software title, "Waifu2X GUI" + Commented the FUCK out of the main file! Now this is my idea of a fun Saturday night! And by night, I mean 0243! + +Beta 0.4 - Out, damned bug! + If a file fails to load, instead of freezing the program and requiring a taskkill (or similar), it resets to the default state + Updated the "copyright" to say 2017 + Removed pointless rgbColour function + Fixed many, many bugs and inefficiencies with automatic bullets + Also, automatic bullets now have an additional space behind them, to make them neater! + Fixed bugs with undo + Undo limit now defaults to 50 instead of 10, and is capped at 500 instead of 100 (unlimited is still available). Memory is cheap! ;p + Instead of defaulting to my personal text files folder on first run, npu now defaults to the user's documents folder! + Removed a goto statement of very questionable necessity + Trying to open directories that you can't open (e.g. C:\Documents and Settings\) no longer crashes npu + Theme editor's "Copy" buttons now work! + Fixed inconsistencies with sizing + Implemented a rather icky fix for auto bullets causing a crash when word wrap was on + +Beta 0.5 - The Breddy Gud Update + Now supports renaming files! + Also, added move functionality! + Some cheeky DPI fixes + Default theme buttons! + Rearranged theme customisation UI slightly + Redo is now Ctrl Y as it should be, and, not Ctrl Shift Z. Th-thanks, Microsoft + Fixed a small issue with the redraw function causing the text file holder to slightly overlap the status bar if the sidebar was hidden + Fixed a bug where trying to print without an installed printer would cause a crash, maybe? + Fixed an issue that caused newly moved/renamed files to be treated as new files + +Beta 0.6 - The PHP Era + Files can be renamed via the right click menu + Right click menu no longer works on currently open item (intentional) + Find & replace is now the standard Ctrl H, not Ctrl G + Updated the "copyright" on the about page + +Beta 0.7 - Unfuckery + Right click menu works on currently open item ~u0 + Added wiki link to about box + Added a cancel option to the "Save changes before closing?" dialogue + Very minor corrections + Clicking a notification now dismisses it and shows the next one rather than just turning it invisible and still having it be there + Working on fixing a bug that I can't reproduce within the debugger that causes NPU to crash when closing an unsaved file + NPU no longer clears the clipboard on exit + Files save faster now + Removed "no compatible files" notification + Added "Use notepad.exe" button to open passed file dialogue (In addition to Relocate/Move/Copy) + File extensions are now case insensitive + +TODO: + Custom path quick links! + Fix weird "Replace All" behaviour + Implement undo settings + Handle being located in Program Files, or anywhere else where you need admin for everything + Resizeable sidebar? + Show ellipses if name in filepicker is too long? + Encryption? + Make it so that you can't use NPU while any settings dialogues are open + Export/Import themes + Occasionally crashes on exit. Replicate, debug, fix + +COMMITS: + Style commit messages like this + [VERSION], [TRADEMARK WITTY DIALOGUE]. New/Changed: [NEW STUFF]. Fixed: [FIXES]. Removed: [REMOVED STUFF]. \ No newline at end of file diff --git a/bin/Debug/INSTALL DIR/RichTextBoxPrintCtrl.dll b/bin/Debug/INSTALL DIR/RichTextBoxPrintCtrl.dll new file mode 100644 index 0000000000000000000000000000000000000000..0b6338d11583a350dbced397005df1de90ff013c GIT binary patch literal 10752 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 WiU1BY{=XBtf8c(OT>rhRME?h;W7IML literal 0 HcmV?d00001 diff --git a/bin/Debug/INSTALL DIR/dependencies/RichTextBoxPrintCtrl.dll b/bin/Debug/INSTALL DIR/dependencies/RichTextBoxPrintCtrl.dll new file mode 100644 index 0000000000000000000000000000000000000000..0b6338d11583a350dbced397005df1de90ff013c GIT binary patch literal 10752 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 WiU1BY{=XBtf8c(OT>rhRME?h;W7IML literal 0 HcmV?d00001 diff --git a/bin/Debug/INSTALL DIR/dependencies/file/bin/file.exe b/bin/Debug/INSTALL DIR/dependencies/file/bin/file.exe new file mode 100644 index 0000000000000000000000000000000000000000..4860ef247d129c9c90fbf00770abec9d7e0a9c42 GIT binary patch literal 45056 zcmeFa4SW>U**849Szv+1S<9k9gKX=fNez%yPy(SYB+GXokOWXb2+4*7LXsx40c;4t z-PMf4VydXE^$WGFZEdv`F(Sey!6YEH5tJr;85Qje8zq7!0g-+G*O}R51K2+I`#!(- z_uRkdj?SJrU)Q<5&ULPHotYu^-fAw2<2VDZP>ADdkkX%n{r>x(N>pDna@RH7j)8yw zagA=y-+!EumtSfvE-6}7lC{>FomE&^Bv@CvtR?P3Ykr|MWnQ{Og()rzL78z;PY@aofys$A_y$|9||B5nSs940Mrx2qB`ihX~x`&&s8( z7?YDFWZ{0rQ2bQmvf#QOSHz!#TM-zuvb2y9YY~+Zx0ReDFeYCG$Y>6r(uiwo zL?hffxP-u%lG2iF+%uklH{1=lp1>9HN9`iA|8x7_kOP_G=brXxaap(IG}@1e?u!y< z@07U7zvQ^Uy5z}zBqdAs=s;Pc!A81bKO|<@4Dz^Qj`MWug!_E~;To+f)cke`e`1RS zFw45d_GNVjZt^yO5bD;=n*12u?C4utJ-Hv1E}1+6iThmuqB&si6a|dYT%?Y%8e{xX zs|qy-pPCFk3QJ+Cx0)ja-eNH40OlODS4Q==>mBWOsu_$L|4#Ja{JU?Z1pG|*wA(N!XLfM%aAH%t zL4N#tj+3jS!9`~`Ywhd?I_B-BY6mga@S1~2F!`O|ATic(YTh7!UdVCV_aO%s;2Oh`qc`8nxMkHo+m)k$-YF z>qjGrX8AAIVTe;5@`Fg_M5-Y)joZWcZD)uBQY%ccSTA3LCSr_D{wa8)vLym7GYx5C z;0aH~0p3+J{WF3E#PQIu?piRd<`OFWJ8nS<@zc{z^%x*r|EtJ)X-IS(aQ%E)=o7zi z3zsPkF^BU+m#5w2Pq9TWNDB$J7`o(%KLJhqV(N3XIt$>lTDk4VYRy7O(7Zrw2o2i? zbUgdazJORS3`e_#X`x}&YMDbkDong*iP(H!JzC4cc4}p zHUVIXSBHf4Dk1(^R%wG_o-ZVBFz{6`0H9Q2ZRpR1rdp*TMzppEeEZ!)RZ_%{iI|y$ zY+TcVygvbMTHY%JeIXm$tfYeA-0GUYvKlsSQr~giRX{8>o~w3nDqb;a&)_fpWuV2R z(nu`7Z+TkYZi0Q``!HQ>UNh3>ujb@0)`0qbW+j7-2^|D?H@7d1Lg}fF8Z$_d4`U&g z3$ZF=&_-Y2A~{c(-oD*EcQrkCJ9_S3>$!VHyJMuT*2_!Skfyvw;FWhAKa$e~eaaii zarcDA8$gu&%@E8k-^=KT`S2y-f0K$Q*|JYyx713e*S>vdmX^mo3TWrhG~_mg+(tR| zCL+x0=??MUzd}ho-S@9EhHSoVPdm8kkdIIf20VU3*bsaZOj{kbx}U1cd8TbZYBEh- zPoraz`~uoQCqi!!LV3}BD}5+qEcLs-f!6G=S792J72xP*2A{)>SLXL*E5SWwDzc$| z(a;U$F5F2YPT^L3hDK0sL4gXzs@#Bk6^a>TGb=1TPBI|7_(v2;e&VlhKks!?j=^d4 zy@WCh11UYP-KjHW56u+u<8!~`edoaxX*?0>f2IkI)J|laa;q0D%!|TZy8KW+aS>)g z$c6Ot;z4`5yc&h~Hh5#H7Z-Yi#uAT8KEgx34?of{q6^&yve7Y5UX_M0Znm2|wbuFa za20CLC_fI5;(iK(SSWv;$3~S{_kliAr4Um$WiS-o-U+!w{fT3tao@I8Lp{3G9>BBz zG|wet*-6i(fxLGZO&i0vr_f@ck0h;jy4o44u%M6ws%zF

Cl#3KIj`d%d>v@0%%>qUFr+lX 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 $GVrJo4Ig)P-q)GC{ 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]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 Au>b%7 literal 0 HcmV?d00001 diff --git a/bin/Debug/INSTALL DIR/dependencies/file/bin/pong.txt b/bin/Debug/INSTALL DIR/dependencies/file/bin/pong.txt new file mode 100644 index 0000000..24d87f7 --- /dev/null +++ b/bin/Debug/INSTALL DIR/dependencies/file/bin/pong.txt @@ -0,0 +1,11 @@ +80 | +30 | +0 | [] +-30| +-80| + +h=110 + +- Find ball's position relative to paddle +- Any y pos over 55 = negative result +- Any y pos under 55 = positive result \ No newline at end of file diff --git a/bin/Debug/INSTALL DIR/dependencies/file/bin/regex2.dll b/bin/Debug/INSTALL DIR/dependencies/file/bin/regex2.dll new file mode 100644 index 0000000000000000000000000000000000000000..f84a847a0de92fc59fa2ff8494ff700e62b87326 GIT binary patch literal 79360 zcmeFad3;nw);HdrT%duL8>Ep2TZm(;FlLn2=%h*1>_JE%KoWu^fQlFqk>xgvhNPM9 z)>MjyI0Nc9I6BX$FvvaaXr7jCc? zzkXp^&F%A3=ghn7ws|+*nR?4jvuEF>rQUpN>O9}<)Z1sL=8v6_dgoo!Z@v7Sb9%W= z(4_?yOR?2vxnj_eqF8GOEqyNPZB5Fs^s-tkSK@z?#WF1gx%593@0K~U#52+f?<7kP z@ry@`r3v{+d@D6c^a~YaJ*q(U@lX7eS}ngLP}8iI#{tJO$71y5cTzpcBTQl%ctL@-GuDn_%HfSxb`8$JO5={EX|kClLe>QkUkvw zz3`jzgL2uI-#mZ5s7YDbUGqgc{`d*rtrDJ~5okp`ung*2J{u4&zg?CSGz2Y0A6!2u z2mI#Gy9FQwjX`VC=hU;6yLHxGC@5&|M}BuyqW&cO%eGi@6JGz{=~4n4h$!AY^9J(dP_uS4x>J@DiSr|2?Gg)fxOKgU)#BOB z1c)}pP1W?RNUNM&y#??q&_D|J*#oDoS`pLS3NJ`u`EDC8urbB0k4m;$*p|Ry%2!vm zdYVHA)RoPlR$o!5-Dl_L2*h^y3Oxtd-tes*lc!X-+AV0tPtAnU%%4SxX6>>zq*yF} zCj9kvfU2*+pGa7DMx)WlKf~)OSMNDgH!%o6+ z1Hr}va2CkE-`#525$LcEY~CW_{g?93Q28xQo&P|OYU3F2GLy$)Tt=jn7W;ey=XS8L6yeq}uR29=wIAYVZIa_!vc9U*(Om{ViW~ zPxoPDZDUsSO>3i z+lJK*m1U>cSYfI!jTPG43Y|o?z*hU@DN{Yo)ms85ducs9yCZ)C$^3QKTK<{jdlavK z@YiKn)SyNfRXDt@M6!AX-BEa*J+s!WsNu&buh5p(@< zyjI^Y_yup_k@r(yP-X@WCQ%78i@Z=_MuWXaQRMl+VcX24a(xEK8rYf=d7r%&IAjf+ zv<}=I_&ABzxcDM>pjFwHon>J)scg~Ewrpatr7fGxB7TJFXQgS4*_pxShJ1IjuN&{q z3Kd@KwizoZ5hqBbh*e6}*|MCtf&{>S&K!amg4)Q-`W9)29iqRL98APKl#psSlb^WYv7Go-& znxu@nz)c4quY`7kxlUH>PSJYtNlNH|?;ODQGzYf2AS2aVc(L2b7c1fPL1E=O_B!wB z-L9@!1L}wE1FZY_EVl!7?L6O|5*`%|PmF@}&hY#wpK9YvY`n(CX1Q%Mnz*t8MQxe+ z&qJ)9L+vHEk6HW$*8sahVLJ&-a)E-jQj&8N)^Zs@hUW=b)>lJ2!ZlGgQK@r<+7~%_ z*3;baocCRI`BQ|1!&7nt%le&92L|>QkTyMVs>MiRA0B#J=sMS^WEuuq~bZ?*&R4;Y0GyDk3(I45w+t}Lhb7EDteqF?6wA!AqA1adFcLd zro2$--38M=TwQ(?u)NiZy8Ln~P5e^+h#$LGd7yr`8YEW&>_b8>SMH6p;3+-Su2qG0 z*Hwaw84UER1txbXp)b|t4*(dj4=bziU}61A_0?9PDxqf9#`0`xkX#MaOXs5%Fq6-> z5i^fI(M0l?CFF5N6CedYKz&{yXtReNi7>eeFHu4}>aHRKoYZnKsZ_sKf(MN<&_oUz z*iEHN1aO}K&f1PX5qa#?M)I0H%|JHe=+luV!1nH~y9{uL58E5IhmdIrrwj23D-R}j zR^{c&u>DpP1J=VK#u=YE5AJxuyQj_}t%K`9%^ypvKOA^yxV70GwIDsMzWivBnG>YOw=T=lYr3{7-_Ltja$ZK8-% zzYi}U3MAJKnYjYwx53rC6wb{>a4UyEzU;`ep?ho!jYX`^!3v#hwqhIxxdfg@4v>Kz zm9%rRcYuKd?gU_^g{P#j!W8H)JI|E#Qe6Yaf)B6~FA^)X+W{U@b;4421>k^=qRF%k z+}fV6D>k14rrTSQqK)QxHkQ^D%~MdJ$a|vxEwIGKN9JEx>`p~oPBG=*zL zp>W#EMC5WRRS_#CQU5#dhm!0bCGw!`zZ<y2~Ix|Cm?-c0%3VIGd z8fNbasA;%BL2(6WJ2*O3>{eI~jZ>lB>hkT#C+khk~K zuYh;Ajl=<@b#liFo)Naci=nGUw|Nd+9EC`$>&Gct66OUbtZIwW^A>#b1gzeb%X$peYs93?Uc?}0w6|`%BWZ4K@CpVkFCFKF~N0J&~p#R#hQ^J^HjU35jTSrd^+L zLhuzl-Np()ps$EpwP>e^_*|&e<&qF|7cwv+UbYbY|0PH%`g11#!BXK<11Z1ooMR&* zJBIP_BkHctslR^QVwoECx%I7hK!EGc2_~?i6i-tYT#t1asRwx^$poPWQ zhZL!=4k%y>xxJ*LY>$2o;3a4&DL!eb;^uZYbhJ}HNjQK*Oh5l9TjN=7u&oH}xsKSA z==zX{AXPI(W^sqx(+-c0l@G1E7P6TKk%ss>*76=<$4+&9u7c^THZstWq)iQUDB74n zhh4MHIF{QjnymF8?gDD z8zi#;5P4ZXr_l4WF;PK3Af_dzc0gSIc+3=+Rd_JPMRCWar5>q5S{BG`lRGtd6Vfsj z4?zX zSX5;dvmy9j#MziGsKH+l(Mf^F*)Y&+-E$|m`2a9N!G5|=gRVE|mIemx2Z zFvLm?C|1~vo}f8UcedyD$yS3qNoin70MTM>!3)A6D4D_s^STtXCCfy;0)Y4gH~WTV zx%Igy#`D~K!cc(q?$r9Ct%>X#U6?yGL|JJG={YD*2vGWPq+@0$$`6z2{xL4w9lJm9&MK+!3-2pF3-5>oolJG@sgtE=1Y8NB+)U3$-8HqosI{EPy^^8^)->&!=|T+REJF6gj6#2Q7y@)pNpJ4>P#1~^ZqKZ zbLdAgC`0L-`WJYB(z*1H@Ni?)XVLfKftRNe%-uj&XqQhD^-}ehkXadhK8Wt<|G+aD z(ZAp~L2#m1>Z?Rb3W$;issz3umKR|1zL)1J7e^6f4s;~@K8fsZBB*e?Z#u8x$8x$HQ%XUfm)T(`ELCZJcQvJNs(%m24|j4 z?;{Hg)w@afqMltpc0|-0u74#T(u(v?@Wfnh{XP7mdcfvh74lr! z(osz!=hwz|0x!%L$Ju#~i%qa2Kk^yD0qS;jeV#MW(ObI&DyIEPxS_stVY@IP=+5&} zST4p=^p}rLVWUzapV4SonPTEP!A4+n?JOrHvS&t2hhQGv>iQffoO@`k1_ynTYhjP5 zJ2djjxwG1HoHjL7j9&4a6h7O|=eU^m2#AUSOH3~LY)4qZ)Fnh}#}}vYg|0T5+=3kn z{mfMKq3||In43k!fjlBM+=Bo_WFugL`u{Ag8Q;xfsd>vYcUDb1{^;FN1GGhp2=&#t zSlYw>#ZJY?_!vwvCx>143mNFzO6xa?t$a;v7;2P(TmCVXRuR_m)euAkIdg1ibsEpM z2fmN;MJ{#uQj`uLX1Dy$ct8u(j@byU+sw4-(-WXeUOBwqYrjM%slXB^8_E_bh+DpE zd_=mIZI3*F#v*@2QUXS$u87GBTv~^37kejgI;w`6sT6dSJNB^- zUc67y?cYG@JEClh8vF=N3)~%CYf+YdOjDhfk8Mjoqv?ImcNh|pt+{Rf+HVz1ZMi3a3eY6(9%~Q>@C%R@ zJvM-*KgQ8rXzB+fNJYO*5?l_{i3FE)lE8y15%`<;pJHkEj|%Os|Bj{KZ}g!)mVJw* z0Vri}WuMT?mV-8^7|B>GLmpR+|B+L{Gc9~!B$0HZ(E`YJJ_*Tx2YDeW4h`w3l`v== z{UQ-0=4~-<-1hUpzKCMp|ER(F=$Lhj6!qT|Po*Z#rN?_n)Ki!WQID^`wA$hVmc?1t z(~(b^a{nlvfBz}(Hq#O&ON^%9{*b2o zh^AF2)@9-=V$QLEhRyQB5Om~Y;^}sx35j*xpda${Iv{x_;=e>1Rir7Dtat$`qGwbv zCI~kJ8`!fm>yD2KpuzGS(Bp0o@?zV{G1m0ouKSHOnDxeM?FBuN_7Kg4 zDTsP*IPGmzwy(QD$l0}YpHlLr_vvxGucXpgZ!5GJ1|BhassZ6) zPE)+Y>PoO?GXn9kQ;3g^iX1tM4t)K2q7HmVf{&_jYsSzcj1V*zvTIyVub?!>(UiK+ ziN29LsUi5XeMZ6`hp{&4^`px8)$MKc0Etbfcp!#!O8RcDcN{P zgZaapB!#l@JDh$?^+Jg#A|WU;bYOGfpj{0WK`&^`<#hAO z!?j*EygS20kRxHtKJ|H@5kUZ})ETx<=2eYYW|gr{G-%^<9R=Q5|HAlMm(Gjt#f0Xs zFxL>k$$XSEjL9ms0pRdCd|Z^ISr}!^PNekqy=HHWL*scH~`X0r8e@){OUhib*F zx0L-Fb164+gd_DgDpln!0~Vn_(lfdZR$|o!PS*`>`S-?#l2p{UGjamlY^s9lL)k=I z;#wTB6@8tF$pA(e%-ZuHS3*mC`_0b#K0Qn4LuRZq))Pn@JQ}w?>r)|OCgF`w0Iey8 zUD$C0U*c@R#sG?zDFc!$sQ#g@+Wh+>7ip|;)S5z7uNeyLgwc)(Ritd4rziz1L zj@=|`l^R?L1h!$A`4esQ@O&A_u&V2e-KusyTCbs4{WyJ9ta;S+W%{q1s$Ij3mX8#` z>G>)kVcUXR4d}fB9rG7vVrsVxlZK{0iQOU=>=qe$F@eFP=#`g=hd)+z!7E~V8$+7s zIm08ZnWIzHWvft45PC16ulYJ9Ubj# zgdZ7*^z@&!s`o8QfB@9dp2fIbwg5nCuoBNiSmS^2;J+sm_&)+}B100@h5E;?f7er4u6 z8JP(={StDhO@KGfM}ACbNnA*ZggX;!yr0nlufy!08lsH^u`IyoNqCW4B73Ta{?Rp` z7D|j4WIpEeVb>X}P$GuKoiQw?CxANFn1>?p`_N7*!6{0}>}izC z7DUdk5^`)trpy6v)KI^K9N_M^Q2&uHY>Kg2T65E2ee$8OmoQhxDrE3GY{{32y;a6! zyvAZvRWQmLmI*@?wk-oZi`L6u=j^Knr-Qh#_8RsrVEapVO4L-8E(>g}5|Lx{1!Kk> zcwg-~t`t5HE{&pH0E;jX!JWYIA?kfMLA7~aDTVUYU>RPv!M(BZ3E6=YL)75ZZpa;- z!QO58yjxiDhHI2uHX*w$8|5%8$d$3S0@7R>|I^UcP*(0_B@X|sgO0Wph~?V00_i6e zxF8u(mgYta?w+w0UZeKW!rLvMb_-_>3y+m8n5!w~_L7`f3vP5Sm5p<<9EblVw2&iP z$dN7N$QE7)8rYG;zScA}g>IXj`QB`5XUjn}Wz9uf=nU{y%*7ivPGPsx%9abwIN4$+ zwSlIn2!haOYYgE=WU^kNFSTS=Vqx1^8`^Zl+mutz3`{7|rh+y{iZ)$tlZFftkHxhA zz=0-H&@*Z>bO4Q>y}2aT8yg;ym`bk0-@*P6%=wcf1}-;wcYmNHxDmgjq(TQPaA0|i z6*(F!1~pa>3Vdt}96Hu>Peb(}p6+fe927Wstmn>#!a;01P|)D0&}#ilkUhkG6T}Fa zbFhE1Jr~3rgc02i8EWp7p#jubOon>l1tchr%g|WLO^~5QU1Z2)bdlunEO#;58p-a$ zo*sw)HgLE|a=1uxxJYssYmaCmKQ2V>|5X$DXd?T+HSs-!2>VP-AphLsB?i4W0{&eYP6UB-Xe+){+`5gc&Yd8`kqgFrv0uEaep+Yu6P9%`L$xt_w`n7b8HS! zq2G_Lfv=I5so7UMn^i-vpklmfuR)uZ659TluJ^&1ycd;LR0caOY2ReS;86E$EI{viD$hr-l9f7UI@KxA$Z2C^5 zpXA5SpZWEmJv& z3-2XzVPm4QXBjK-dWM||9HcexpOSxd#Z+pzEAN#G{c^L_uKF(F{k#tK=+Ys<0>FJ| zkL=9`>dnWAy=m#%8w!PVm8pr4jsM!4`!RBM_D0AQ)vM5}&4yp@!uyL&pg*rm=>)th zk0fx53H*8LRpNjV`Z+wZ{?}f;M1xmX9$72&#@&*ZXYz>P{k#s{LU7|95jnN3D6+AsmTOu(%hF&2uU z_=N1qgRSasn=@KB(tH^^a0x4zXfW$b?OJ1F2hH&l$D@n=D3>7do52MO`92VmPG4aM z>UH)&6a1oz75d6IB}HiztdU7eWs-3RRT9I)FB?oIv196boj^ZrJOG0Pc{TT$V%m^~ zJ*KJb751*a^9=zLbHi4pTv0revcA>z$sbMGE zB?W?=*z>WvzPYF4-aIPc`;@}x*qYqO(~NeHIquC4bo5wo46`~VnWejVxr{&j9sqd> zHoLYQ!t{9{X3x2-JRX1O8XcI0U0V(}yIoG9cd&71pF*?knk``NG==Y7q2Kj7+Q7aB zibJQgb*ITm}4jU2K4joU6fA2~AzvPUi1my$`w7>HuF?YQn8-OgVAj7y0 z9)yhLEImwnh*;1aL>5nCd*D!K@s;jrNR^vt-F%(9hTiU5iNA;^+OEM4($%6wTQa%Y zgetF)UJ6|RmX4~4V z6oW(evv{d&`m#&TXgbS^cnTy8O_#@;K5G~UO(*}i7|xs9g6@B#$zB98CJlj$(PkCi zF)bAFB4rpPf>IKqQf#h>sH_y#`5O0jK#9dw+S%=A7YamF`pB6u+a79XTQob~;QFYc z*U)kBWEQv~Wy90FbSrUD#Mh1m-P7@me{h8R^}z=NG9gtB-Q73-mZFCK2C*_3?Y~=r zZU2N4f`YtQ1hEP(PL!k_??x7N8-g#onLaE$Cf-fHNeY9xNxUmp@gY=?|3=#FQk7|G z2mB@UftV0TiH<&=)(tm_q~szeD{`7*&^S)U^s;*#-NS;H zsVMw1tUmz^JBCl<3mb+>IRC~o-hgegq00X1} zL}m93GT+A}+CwUl%PL|vku6r*%xI|zVYT}y0E%fqlui0k4NxKbv{ad{1|L2L7VVWJ zu&fNU$nd_dt~eh!Oal&dycp?@ou@wv=o{z;-S{RF)=_lJz zuoZ@yA|={0=v)@RJ%ey&zl2LxO3{++Y;?n7j6l7Y@IS`Ln4*|09)1WpYuuzX)&i%g z*NsVy;~_p+*%%K}`A<02;2NNom8J$C$M5M^wf0occxGE7k7Ql3;PWi+ z!b5?Rr?n5TH4k4N5vlEez<3$XAGtH~24Co4Cn1~g40^IH;=y+eTh#F0jZd~kKEaSY zp+dhT(;SA>&{~>c^rLvtlXznL5VRR@^S-LRgO2ZJdm{f#H07-W!8vmj5rO`6Z+HrQ z;swDPmu;$AY;TVF5on%_*GlG1aI!py{}x1R^I+8=+j0+bTb_$Z$o5Ku^V|?LgV8i_ zca;^JP2mjtM^z>ni^$Ku$BB;%O(HMd0qR-U9Yohev-HwOD7Z`#Jtt<93O!%?7n42x z0yK+CJ6&P^j$`{_VQI3YUv{A&4HTUWIZ=kaq6SAmqp$^cTWGg&2nuNOk;}!{JqJm4 zLj`4O@UMh9jXM*vv7cEijND8~G!jD@-)Z>_&WR^n**Wq`^JEHrY)h(1GYrt>7BYDg z{yWX;2csF#ESg&^h&7r#^_6loO2XQV#kdnbWn0kg$20vy9CQ(Shz$rf^5FDy5%rSp z8T$J^G1_!KN}b-)q3ViF0AlugTQ04|L;q_{v)ovuWI>uUVXd+T;-H9r`0cNT{s8dC zzwiRzRr&|pa+D-AJckefQRXlWFxI)hAv{hi+K|BMByCVvpcSy{S?6I-1WuSiHWn;k zp4I!V!C%SU$Pgo=aI;9np$S+F6G(yvPmK1jbnYd0hVRHYu!Ka)a@gBn&#sOIo7(dnHy zlt@m6)a74NWM!Qc+CrsKNizGKRn^b~8yL{HtjX}9fh1Hr&{3@hKcwdsHz6m`@hdf$ z0jipHXe1<>5;KjzBmk}$Zi+V)lLl{3vww+lAr3n!t+B#atf5dVw7Xcp;ydWxHZUJt z5>nrn>_Jb=1H_mViXOu`0mJbJd^C|h6E+}U1jy?8y%TDZ2{=U<1@PV2u}`35V|Czq zOXPn{ao~NAwW^5ZtD!y6s--7r*%?dcm?+>GDQa*ThUr9)rwaT#(*n)zv_Pi&YkE9g zR~>~ji6zH^pICC#VSuo0`VaoADLRt!mv>v=&Djwcxuh!%s?L7v~adVNlL+>R@(F z%L=m6C$ClHxswl@V*{=P1`^wVpV$cA{u3j3AJ~d?nE39nR_UxaRwD^0{u_Tmhhm~X zK{!pJ_hphGN1oF-idUTbay-gj*X|4)KMnJU6bxh7=u@Wk_0uP`0pJ0lEQ2^k1K*>_ z02Cpw1&?;~5j6M&kD0UFW$N<%c#2%wWR8{imdIF!6w`|H9H+4aucu#CgO5;0V{SHV z0>s)l3W*^_(T5w`LE(+msxcXVFr!5 zB}VA}_$55%K~~Q;O8?&TCAB&UtwtJXENINDdSES;vFgM=#Ea~r->5i1kMNeWV&m8K*1$6061ah@^Qny=Whvt94|tuPM8o+AmZ_piNO0;~A7`%DO_m_g=6!%d6g3hhMltYS1ShAWl{|qrx598_plS)3}+^qqc=9 zf=cZ8o{xziJtvew?Pz0UUokG5Gvr@j78V<)JA(+6lIS$w9(S5o3lPw}4nSg)WGvy! zAB!cJYyPx|xCaffMGmufG{Tcxv5dxR>2$OuqZ=0EWzePxNsr?N2(QKueUo8M>Dh2m7up{Yk`PuCXn`DF55D=jJ5PsO)pMx?2FW5-H-k==={{Z)C zit-nd0_iUGGMyda>12^-^h0z&axv+aD8XRGrX8z=#|3nn2pyAx?LSIEOuRd%9Tx!y z>=?}eLCU#GhrY_B|UOM~*BZ0gDX`2=+GRs+h-uFW0c8 z7OqAXOptotjpYAyz!UL68!#?Ik{-p7jBb#UFr527@RgEiXtdRpc7SpZd zZyT@Dr$MKo^EWCecpCGb->P`PH-nqx2vQXD8K9*!8sp3Bi$4}R3Is(%;@ck@BqCvq zcY>tGT`+c#RO&$dd({t*{QcOj@HoV=ts5Yx7GM9y-m!Qh+=M+J_bht^rQ={De~C}O zE=4cm(=Rn>Bc8&(VG2gmFY|$&z5lS~we10=U4LwSuk8~$s@dg?XO8>0bQMzlLBU z5MJT*R=~9vhi=6C8guQXQ;QGv)u00|2|m`x8C2w(tQ6qH0U0NOr#K+v2t9N_u#RH7 z7dU~3m1IvP3<}PS#KcxzZ#u;iAxfqVLF)Q-0xR#)4RCTT3xDa^?cK9*p!dka{^t6J zjBbl1klIjep<}^*NRPCbEZLYrtnQ>Z$n6I#YpE08n%X_h$I3#MYziE=gWhi;Cz-8r z@5FDXMaAayGlzhzffT8PJrzU1Swobo1vGS&fW?g1jvw2V#kQ-Vo8(|DhPGs(l{rX( zE}5nTLB9URWpK$&Yr-cwanK8TN__Y1$ef?Lqz7$(E>6L|=9WOmh!;UaxXR_QZt99F z@HfzLxf+~FosqLHG5lfbW!+|-4C$L=EX7b7gFY7iKrc7~QdZR90{}qYz;O6EF>l~p zdKNQ4;SFfOTEdhPYc+B}eYTe(T}B@g{r{h~AZE*qhcMNL7DJ#ypAlnM3IS2qUunFH zSE7|U4;e$)qbp?a<>ZMXD1`qT3HU!F@Mrid@c$I5Zq}j6lk{e6)Q%*wsW+Z>>^{e# zeRrAT#%myRBpY)eIk3RC)5syKz{+Ey-iYmdGELUl{ft#zr`FG>6gL)8M;Tl300X zxhvHb;!_RK?sO;=FxL(i)TeP+MQ++hjs)CKaGGuDmD%1STMe`YpbTLfGi7&uNB;c&j>#%765oWwugS+e zBhhvbG(wP#ra;GFHS{E=(Pk`5p*9}CJJBZ|yR#bG4|h(~pob{!M@c+cv>r=K#Bt0q z(@cRh;b6c~ssD8+keGiVjkXLOhF*^dUW!4nI~g7$4UNOrnnB1)*!e+ORZugs^fYUI z76d0dKMlXJaq4<{UU5GD3Oj!ptgKl>*m#<{MgmPH7ZAlf&)9rOT*9VyF8#9e9Mt$3}+CiF7twni?)a zGMnf`2p=wHV}4(&Ij9?Bkujs`vMTJ&HYXgDV&P4qiShUs2^R9NSei@lzWdP{Ulj!V zEZaW+hy|=b2c+sCzPksjh&OOw2FeljfPqBGuo(IK8`~(+96*I*1CM4Qc{Eeu(e&%; z(R_h{N?k$cI0%pCmk>%Jx-nhYY5FwATmYRB;}hKTYY3f~hY^D>{FBt;j|bxBRx@#`Wx55V+-fTc;eZeS(Lg2 z92|%)wZci;NJ6cZ)&Ck@(OerzW7w;v?{CHLK_pBzj$;;!1wDF+=MFLsQ3$o;THlT{ zvs}h@WX0rD`|FwcgN>(qG=sx1_7iOrQZuj$g)dg3(Av*ui^`IM<|QU*xrT4AMx*esO3B8g2*LIxW3K)F+v`b$}w zNr@&$E1coGV}2K;=bp3r!&*gsHjz55)9{e{D|p6s8iNR)oE*1V;qh9GO|XzL^U@ol zF(|T^Xij=9Ob+S0E3!3C?7t*hi@}kn#VIE!EPN?MblQ3d-=4-+v!uU{mY?pxfd>D? zH>z#PFjE%eDOv-LO+f`BR{@cUH8-KQJmEz_I9+!?4JC;2tp{EbG*l(4M10Gka7dQe z(4EMG1{fYw2B1n7V>9vUjKILZDNT-ToqQ^XnL7-bPFmeX<~J4%o> z9&9W}iA04v&v+el!jcA-QCBqwntPf=WZe-DKJ+1)kmjht27@#R94{e4-(kaks-2NOf9I4<`G5=~}GSe{Rb31<#iw^HJn z0~QV2CJE$B{6_~YZE^iAWOBxy-Q@HDpw1!u1_En#wR7yh3aRE0RfZv|pOH_+5+xaD z(!(k}Vk(eSpU9tLx}yaFQ4;gXEy02^QVEG-c+y|P5a|M&oYddD0box_q;(s`!E~e|3 zyo*+_4qS}QTv%VmGHd8j3?2}u?8ZU`-LF`-M1 zt)?Dei+^-KRBtpETb|g0bED9FXTL&2F=eH0v%R9@*tm*MVF;00cecM?!PoUypaSMP zh+CLjTD}01+4|9c;Vd5P8p52Mwl9E0J`9OOqC4@67Dl37TNa#(YI?^9bUfosVqxp8 zuK(@rIH?dJv65v!9mBB#YrKH`9}r(`Ng}%rOhzJZ+RIOS%MT!-=}fRD55}2*%h0=R z9AB2Gp$C8p@qpGxf!K-&SDYOp)Yso$Q83+QEaF^`}dag&2B7? zL%VD+@$5xyK@9x&KwN@*C{&5`z}B?bx7+Nf(TLP0ggfE{2t_GiQHxIY5T`Rx+=G@x zv1HN{-ERWGVo$U1TiawHdI~@g4>v&ZL5s0?O`IF8c&v+Uy^p{nc19l%CeDopBRxKb zOzv9e03d@GHh2JJlfeR8m$jT3lutU|-MGcX-Xkx-F#YMVl!^_ZaG(n;VxVbHZ0_)* zT~HK98=YlZG8%O}yCJ5b4m4<-Ku4i}_&%F9{DDf8NEe;Z89Jd!2$F&t6r~s6I4(VG z2RmTyrh_>(aFCZlX6PSlZOnFI@OL9SaIlGwSbDc|AJQ9gU2GIiiFS%YwFtT0n~Oy} z^s}a|(AI#|i8b_BY?hy;??oTTQlcQHn?sNh*d%r;Ma}y&=vzn(Ua9!WW<@x0&)#w{ zxm5oKN9DYPG^)&cM3QzL%3Li9E%=XcQSJKWfIJ0oXN4yqP>|1xQn~oPf#ZAhu~jvz zX{NCsPym27!f4(685ZBU#LGWZ)@Eekh;(EgKvt%iwT7}D@63YgBkqD0XI?%*uZ=_7 zMhEALv>K#^r&s|82{q56`UL&ESUEMMqBcZx8um>Da0c{N0M+gP(!u1 zF}Jc=PYxWk^6J!vf)T8GD64jxP2rrK^WZ5^t9ij4YG^uu;mhg9lFZ-^z?-fm^Ku0@ zrIbVE6&fLYsl43bJ%WgQmAKxh3in#!jQ6S~#n4NfR?7>9CzpT(>iR5?8k$QH+Su1Q zYG@@)ygZ}Ci5({Qm^U0zDq3O38|>#560F)6n9t69DbR=A=rjql8Y(1E#USNMK}YUk z5BQN0UhSrzwj3eKrl`lpEVftA*#L_nmy)ePv7vqMG$dlV}&FtD{rG2{9eEzuxcE<&kk-f#&%=fKuwb4OR#_-QTHSutP12lNP%|M+1K zZz3q(q1}pRG@O$vZTKB#Go9ZEByRSQCoX6>H3PB0*nWuvKe0ilx*@vDi>h`ot9Xqc$U&79zzcXabp7tfi+r=*K90sDyK zQ{LB6Pi{6IEQ0AXnq)X#UZo@#O}@mUiGcw8D>w@f-;qw#`=U3ZT{Soh_Ls1#Rwn8% z0-XkBFmehF@|J1G$z>29zC`H433eKHO})db?cy#3=l~QzUGEskmkj46m@|%OPg$&6-8rw_yVG|*@Qtpg480QH9s%7pK|Ul{HdlHDodih|H)4;r!K<=~ zjo2m);a6!U8GV%$HPA}g`!Ztih4ukn_hS$C3uGr>5O(t4vMple-VC6uWR!Lwmf{KLcVh9Y6!*fFs>@eU3Hrcfjc5RtV;a}O7A}s!RebMYaVcu48_4q? z!O6xg^a+mEEzkR5!d6ra+ zMA`RUB<-1#?3pU984gSm%Yxs+l6?tF_U7hIXQ_Dc&!`w{y_MASOAp-w=zUYW05(DD zOV|}6BG4g{XzLe6-Zy=pA#iz<2bWQiJ|*Pi(8p#UK0?GM{)y=HT2y04^y+8C7>lec zP@ES7&JOJL9b+qsJSW*mi@o|Ep(o-4T$nFpMm~xmHjHc_SWD;l_|D-sI^pqkZ!fI0 z`g-%aVltJd2){yHOq30HEuZ3&#JK<_>^UoR3A>;MKPJ!lOPqo4eS7|pQ^OBLl6j#k zoRw@|W_I-H0^|j@*u8Jh`wZ-<1Wb#!3_A`27#jfIiON;ou)Vt*u2O<9dS zA93t*C9~7TNku5>t?j1Nl|eDfxN9S?fZ@Tp=fA;`o!)-F-Qj$BFH$nu7&_VW))=n1 zvWScjpkaIX*r0UwtdR{q9^VqeSmFc*I6Aui#>{4CO~(EFddd63>>T$JJ+uoTHSpY_#BxliWhIqu? zXTB$HSo|fT-%kTqLWboGhx)Uep~mH4F<3Xjvm?CH{TRW(Hw3!<0TLWLR6azX+mMAI z6K~MDH1Zmi@Fuxmb1$w^@nNum>)FG&7lB(TSIsD`7yed=f{{gHGz%8O2WFbK!C9(b zDzoWxpP#l3r|%bV&ae#{%}8L0L{kT35gH=oywDWf~@4yeR*|y<|})f@%K*({>1^y$}0?D+%F`XGePG;A6MtuTcsDIk;5{ zj5~~PbJGI{)j&sg-$BW~ec^SIeeK#C3G8cS+r})qz+@kImj)K16KPyo>s4Ox{dvsd zZ^5?dATT*#z#7ZuKND+vHeU#=m&dWD^LB9U8)mHeCe}AliiVv$j^z^TyVC=otAS`z zC)Uz{!uV$?Oxv83Tz*aqPEorPzaFai!Rn zPzU}IeNglmp-76fC0-|3OvIL(ov}$H!30Sc zTJ?k3Z_CBVjHSW`{F$hS;oU%(=8!#~MPt1gF=$0$u%m`!oNvohs4(ki+=JB+QNVbC z7C%Xa-ugWrFz;(aYfvFM(K2K_h{7ckv2)P49Oz0~$*E=gLuK^ zO42$CWmwTMF%dnSOi=_^*c3>z7(FC>y<+ZesGE zlSO~y+nSGwtsUdokquNuKaAKvh>f{3Zq?~>agRJXfNtfZURyvIm!$9|7b(g|qn+sr~KG=x?7p;P}%w&>3-i;vzZ zVs@m>Kh{PxgeL67x*RF#3_W-{NeSsKtQrLc6lCpE^7Rc7p*CP-qY7uhX&({L4 z`GJA6q0%L}ifLD>K3pPmR^EwAWypphKw-}*-l!XiHL7DXI9 z*NMv|#5F-0lEHi2bwilWbLd`RN+Kds=}sDi&j>8k%&rY-%yk709uI6!LXeOkVGAJI zaI%5;tPA(j_-}R{kLjY|nW>VK0bj1Y;KCF7-hgN01ai2|M?nxiu?(S{sSY*N9}M=_ zXIOAv-_%sxJK^0A3uF_aBpY8yp(NW9jBz$zG(33#2L1J}E7g#=$xXxs19XhbqJ(ot zDn$^ljZKOCL&gav=tiR{nHmE{C*Z1H{Q)F3D3^n(g~lSN z1JN2Y{Dq3XELPZ@;nyHnlA}l=iUhx+nF8(i!Ljv^kX(-&uTMOq(p9L$ipq>ulx6Q2 zMR)~el8w)0UEHY-Ra<%(8iQ-@nmKM6gu}#2HnH*zZ3WwriUUt+!i=At@@aFUsJHUQc;O7M!fTV97h7s0 zf1ECqxKUwCf~6UL9FA0X)dDhapB3`o0(|!X@n{P!YsPK)ph^fGz9&$Aq+FBSNVwymPtc}eFxJzF*!Vo4 zdMgMReh9Kb3hz6pk3`I$`_@1@X~ktQ<`=wtEg~jkdG%VJOy?QaT}2nLtz~uc!V^GBv)nbYsHj_ezVhJACVR!eZ`dwSk@8 z4zJPxz^9d3bvjCA;m4)CjD&a9!N2jj{+%r+w_i* zgomrtYWvw4v?ae^3WHP?_j9n4gS@IAR>D%CGR6qZ=DBi&a8bh)_~Yd^=4x%rZs zMG$hzxI(L5!9I8kG~>Exx{+bI1#g}Mqr7|6z@nHTox@P0Vpiz~m8M@GL)G?=Wg>ZYZKEVzgY=YT>IVOgN@xg*tvl|oUPz4KDl zU)GCl9iXLX z>?xak3FXmCD!pLo{2IJKGuQ{Duph&|iJ&iC3<*}@ZjJ6p@)KZTX9HQSU<-X)pCA#? z`{!#(iwvSz^~$hgaGau{zXK9G4uK$TGhU}zX8|UO2y%E>6@#*9)Os-xIczE~Qi*?2F6YMMsr%0#0yUN$Ah zU4xFqBmXB{vVG=oRwjW+$j24gtYsc!b)bFJl{xai;$64>3w`^2Gw_h53D zcn*Y1quxF9Z{;NiBRz!h&aV^0zymHu?+E%1sdT6k9iefx{5HZUQ3%I=1aPBPq@&^%eQ9cD6D)ngS^&LnGy`F z3tB!-h80G0ykIq}9i%X2P}JvVB?% z1K!~VRIg?4B+s{nrvS=(3^$W4c@N7&Ve*yK<=;RA0G}3{#QKjv)(dRb3>H!^O5Vc) z69hDN#XW@u)!=$COnzE_3{QFNxEiAK42%WD6^QMq{Pv}QWx=J<#4|b=;2eS`yH0UN zhz?JpQ6Wif5Lc7^FGhtU^{8L4b_zlQVu1XZ-b>a(GCL5T@C<1@$l)H;(`+w2S_2fG(OqF8&c9=SU!s6B_&0lJSIyWRiJO zmp9=Roh?|)J_ML#$iYH~eqc%0&c25CLX~$QDm_FW|PSoOHcie<@^y#qUIr!IsleAYQ6@d~r zA&m*3LtTEFM5+pRm%;_tu+dF<0h7<6xQ8CQwbbBeD2M538t;oTuJ-)>bm7!4B+{Kv z;~X#>yg0=cs7=8cY#so1LPMf;J@^d@LiDs>%@I0KcL_~rJv&AM7}=x7xQuB6Zsaf&tJnne+54kKWoTe z!^M=La#Vwv9z%eDI+{-76I@|?cG%t+#tHYpVVeH*LfY0uI}Yi}0rWQ&OYex4J7zQ? zvhPMu-CkUxt*)SZ(-35J(8`#QS#>!vS`cai#ZPH7A#KdDbJqqurej>W8jCU*SKd_v z)CIuGi1eJ%6kcTYzDwO60Nh;yckjD2PjPMZB^UYTa35|z4Yk+(8jKqg^=?-K6RGwR z(eGTVcRS5-Y*;FEJt*cl+ff&vMZ50vbqkkTaaZV~UwPlD!)bp}?=DuNsLN?j3AvWq z{R(6_*ITaCAC-73z}ta-(k+m7+0SdhF49Cqfc1y(Ca2!K2BcN7VzBr#W&FzG*_LRcjF7o@VaPp1QBfSwL*@7#TPg%5D?^V8|DC{1xFhzYK?_5G# zT+sf3*aMeJH#3tOmsxE*DHE%v+IW~O2uoEd($fJ|?B3VOXTA~BmPuG123CmX^%k9w zw*|=tI9J>=F3daEY}*$E^^C7kQFKi7Mh#`4Ha6IK@I&-pdU!S2saMR+NHF>3RXjW2 zyN4~4=Nrjy0wLCRwrfcV_f3a8ccaz&+LDXHS-shbmM?~c9Rqfq2rIwE(l5naytVf# zweKNR@LKKrnYa{si4&E=${(<3C$fw0rQ2j{wVq8-{92$vF>u_74v=FAJZ#aA!ryRK z_~GtKjN?sHJoq6Ys5e|dF2 znnipHYqHRi`fwI$Ne#Z|BOR%APe<`-$VK0JqHlDcR}>Pb?P;9>v{EAj#K98Z0|hAZ zG;n8{y8In7W~d5Ln+8d*;bUz)>wcj$Cu9Jt8YLFILW;8kk~AwxYX!$Nul3>`n(=gRNHS^lu{FVHS?nPAF`k|2mRTX>}%yCsQJa&ozBJsuJ4kOgtH znVAcSm1?kAa;cJRIOf|_e@Q;tS%)XO4;x1V*qi8%VyI-ySYYqTT2%X2oB-Qqz)lR0 z^cMv9J31uogu0v&^fGKw8AVHiWnJtArW0sm!E4m@-ROE{lJ*)3X=F26u`Jy>qbU=+ z)wFY$ZY3>(Z4lpcRkzwLQ7LEOmLEALk-YaP>WaU>XvWKXnyD~R74woBU@O6&P(zdP zB2>03fsH>P9k>%VsNw}tB{Po5eb%B1Yc-}*hAH==XR~(c#2|yNUW50z6pL_^t*9CeD?>`4~u;h%>w(vcMAO?MbA~##J;y6VH`KI?4-W^G%1+ z8VksM#n^}Kh{kNn0$0JOR^ti0c$!Tnuf&Vst8o!pmqOv2ZX80gkR0DHD8N14*i8^5 z&qV@6TCltZt;A~;;|27Rwx8lAOfKD-0|4qbA(6&p#GsW1xN_z|AU`yO{d@@d^e@4b zYP}FR0U$q;LAr0~XA<3O8WI8RHDbpaUqUB|kchM?bTl#T9rNRdqMcZxBqjO(+It)L zsEVuc{|43)WXnd48Z=LhHCWJqdD(<41PmmBfDr>E5GA}P2pAwHyAU*iXtI{eWkY<4 z($=U{`#cn>MJ0;X*zh6&YZVbKDz&~j5!s z*^N`mJ-U||mwV|xT&Z#42{?Xf#UQ7?lAa>p)pUo*`bE){EEgZp2_6>XxSDR3KwJnc z_p_dXzE8}f(AWC`4r!7DbEbzqB@W+f=3A3$uCxQKrO{Tlq>@0LBM*77a$96`L#Kzk z@82h_>N5XAnFVFcpl|sG<1*+E2X1BzA{!ckX+58S(HjW`-@A#S(JtkuELCnEaQW2% zskXqcjumly0%A1mmXp|}jjQ^b>9EF@Nq@w$8v3Ie;u;t*S4f{zL!VRQYI>d^?yK=uWUmrU z@$bf(^SbUMuL+*NufC4bsxEo}4+;jSqu3p2gReRog3*joS045xz3OAXKXGwcPvYjA zlwRg7g8gI)U7T}#7g*H}l3VjQw5%1CO4haX;uZEqm4?^N_7SatsYhzKlEZ{CuquXu zOU{c_S8;T6H;-)9Xy(Bqfvjw+I3eJ8)=E~zq1VcEHDw?gwJS`r%_9U}DuEp99^sL{ zHoPD_64?d{2c|rS=dkZpa~A^`I~W#$QK*?%IK>H_C=+Mg_2QGC3ZER6J!BQJ*~Y+h zSi}|<5bhTfVMrFffmzIWS7RrS5$$NY1Foi3Yy(z))czv5yPDplqR6$B(hHeMPf~Aq zAtoC{Zbl_TLn&x1YH)^n#Rk zr`_IFgeP^e6+FUQZJTCCABX8G9+pDH*e(Et!JQS9R_5ZP2JLTnPfoBKAB|v@wrE>u z?~w#;39{Ug^0xTwE+$OsNH=?ov{u%SDXQY>vGJn+#Wv?K(|<_?7M59#HE)DQNGh5G zm`uREmij*M2%O4mr-qm!q=sY&IRk&P|2P%&Dk{k~MnAMkBu@C4raw6LIu{4m6 ziRSHkPacn$zw0^--M#*|Yp&{PH((|H4J4|Nv)j;a+2Bn(xV;Qw2>P{q1Zumc^JGrZ z78?eWmCdfE2LyGy5wXjvd$Zko#ql?XL2R>{9a)`f8|8l?Y{blnjQ^GGBBt9UkL|+q zTGdf3*FHy%uP(B$i6m5lh2w6WP?Achx>6E}*gwvgM&BHt=Nlz8k3nW7DBe+CDawm4 zBsMg=2sb;fg;C=;qB}7z^gT#VKB2|>-nAJDmO_SRDMSHQ4wR_Av&$gHTu7bNb-vh2 z<~Cq$igi6djY&yN0^T~H%J8uK(8_UMNo&wzGU^4qVG2}xSn0H~?j==eVV-5q+Fw}% zEyvIK{Df=`HI~uO>diP!V?cSMy2hFqO%GZb#q;uj;{rXSq^v$FEooyDl+$%VbF}3F z+dXxy&ay#KhbA7gv5U2B5LC@1){#fta&(8>q$^<+Kn z@?Q)o5FfGJ3X5kTeubE#%2LWqX#0>vy@4Gx{2g;#ezk|Q9z(HquqvR3nkUu4E_R8r z#3M?Od8jOniK2J7nq(I_UOITu4YDveLSv(V_6bnqSpZQVLzp-hOMLaIj_(+`KdBx{)|8K{MqWJ0;-ngbXU$Tv7-o80W~EdH5*E*OOt zexNHY3APcJ49I*FDjzvYomw)0MOGHE29>PnO66PzXZ$6fN4TkTRRss}Y*6dEHp|C*)W^Qg2JHZha%i2}iN=YVhN~~YLfEX;L#z^} zx|Cr>8jahEzt6+L6u;s-^pPP&0YWfq%^#?ghX{lw6~XhCsa~UTpj0pm8>r4A_{nrU z1K(~3D!6l@;&EFhNa>n{pt^QKKjK;BxTYB?%*DKjbm|+J7B#8nDx1=t1FIABu?lOt zua;db74MW{WsJwlc#o=&HJ^c_Y_uZ0()W6_euNH2`c4O1LkmT>D!gSq!Iivf-%KH) zZgQdwTtp=+@`)F03x56gxzzI2Nvn?1NTp$7o3c?4qT0~!b&vq$m(E?7LLMQ&5=Sst zt_rSdO|bRmFrJxfCWkK25v3;O7uo|2m<6~oQYx$s%;k)w3MD}-o>$ms-B0Q|X6GXD z?7Zbs`MHPg6d5a7FySKyYTF4|xp$t#d^UIW2Qq`ub(GlxyWt12#H=iXJCQPncnrQ4 zLE8H$K!SFtoKh=~M!`mYy)q8{l{~v0vOD-_9$;4M_k;o^C3JFy-lxR2pIE+C<-~`E zwmJlPo(Kmf03n>1q^QU+QSQ)hb6JFbz_JCq=t*)q2|CI!xD6r)h*a2&S}wLxo`Yi} znyH-aGzTCt9n0xtuw@*x2w6|i(fYTO0URxd&B~!5@t#?WT=j5o0aMrF)dYNkw7|_&b4!7ThU^gMKNWojXZH`X^D{qdl@@x@niBi$ZD5 zl5?7+JBzlG?zZ{`vVtHL?|N#2gYh66$*ps;ZK@aO6;I(q<9kN=&xj{(<9?rPR}kOh zJX3SOh3{NeA}dLi1A`hOg1ha(aDx<>SLMPmk{5jAzXwL~Vv{_}Dsh{CQ$7rLcl$8- z1~i26)_I4*q#U#yiDz0gz0i~Q+!6}hmttB4#B8M>1{ z&8jcx^tpuTY7>)YgnkG|GYYZu`Tab&;6&HG&6zHj|0JK3ElKL2XEwU)m(st-KZ92q z025q|hqx)eTovmN`({!>2`D5oU6m-^6B|Sd+YT{@!cd8n*-0;q8srH5gow~Wrdp)k z$O2S)`=kIqVMP@4)7C zEA$|9r?tcZhclKVo73hi-xHLXhkcVfB7wZgL2yWrduSd)2SJu9XnTgPzUb7cXfx?f zWm}KTV|s#XzL2ngBVUn8q+(BKB9NwG=coQ6<>53A$Refc`swM}YS(c&%Q!M0=>#y^ zeBFGx*{Wk5^J)+M^9+10Tn%r4rpy4HO`U7qn7Of@c|FmMo0;_S^<%>40fCi00?tvB zB#6*N?<$tqQAuh~kgw!B-XW>sJclyY;xY9*3B$ED;8-DMlxwg7M&r2TEmqqUIp*&pAM2ery?jeP@gsxMJy5JmeULA1!r$prl`@*m)4qvdRB!|YKs{ww~b9(v0#Hg#>l3)?(18LL=FmS&cW(6r-g{&A_#qzwT(dVSAb*hS7#9XghKJ*EZ@n5l0 zy2Q>g&hxsfNilBxeF5h?uBXO2;Ppb^$3%+tMEU+8dW)0oStS;XM}x}jZcyrgX_|ZY zIPu%t)5TH-x?8K54yp8*10}tX6S5>#n!YftNO56WT&Sm#DHf(bf1o&uWkGP8}F+C5Nt~;wc~WiAGaM2%c9;o$eOXtCW_cr8kyobPmN~ z_F+5K1rvfyVz@Fo*uRw23$P(ofXKBnUGFx1a;ROVIZOH0M>>^V4kZD>?lfuq@yrPK zDrtNa09be!Sdnh5$4O)EBm9io+~0cx+u_dRjlPqThdLE9%%h(djiV=xvxF-lAT})# z+Oa5Dv(@lVX|kdnOoP2Qa#AmsfccS=13pXhG#+AAghK(-)q zn48uqU*?I%GewY6Z9U;kZJlI7#Xz3k*gw)ui_c`)(@$IlXuxrGAXYbF(4##~rGW0> zvV42>*$1>G*1I=tXMpV8|@$3W&>qL?fP|nmrw<-G=REe>!f*q!=`O zDbjm9tCs)gZUr3e`HXn~B!YmA_oKb>t^t=w-&8?KGHLa0crVksr4$PRbIMUL4Y`zH!~1xTH~3Wm1)r=BFdD!+ZusKFFet74QgU{qn0hVVH)=t>_6K7 zMcI(VHzF2D{9crQojB@T?~LlQ#zqg_?dc*LRFFYBsbs6hX}O;UmrP7Q^oq#9o6)oH zmA2a#%^oAZvORSotb|uq=i;)1hsXCAlwyn#XPt<*2fBM5nQA2wv)*NWT30*Ylx%=>X8QC^+xjo4JRHvhmgEf_p04>1GR6`PCb6BI$)}hkqcD)ng zI2nn{(IaP0cw+B_y?In+tmc6O0v0VPq5S0ayQV0%$ z3`fL$uEdjUv@r%75f`ReGPmgz}RCBbL%^05hf&w zCi^VT#?tTE?OK2MYyfny^*yG?m|bF%gY|mzrvi4&)>E>8sHAKU8;ynRt#D0|wGvV= zC&h$>Sy^P3#F?E|VZM1dA9=XQwe}{-KpR#)6B1mFTYBD+43M=Ftt>jM*EvjxtaE4< z8$pDD@Lv$gc)vmlTObp7H4;z@dP&cVT`dcP$niXPHXaN-1!gI^+o(*D>}-G_Y`Twd zi1!f1ho_YE{q@vH`)gFjH&^2-!R?y@Seep0n zB=@qj;G~{vVdD06S7W$;H$kkGvSmZ18QWyn5r*JON?k!ZhASW^-A8QF6BZ%m*2?+? z*7J#-qteR#F)Ap@ORn;B`JZ!;FXVWbw}uyD7*5Z{!BS7M>n2J*Qje^*!(b#6Z#KVsnT zKuSA*&sf-JnY`P~I9?7IfPK6}!c6|?$rrIS)w#{T^sJVFp3x%LeCIU$9b?m1QYQov z!lb*)-vZ5g)saGyBS4QaLmbIxx^y^|aDn5;Y`m}It11F9X;~iXu#P!fY~2w?U*rmu zAUQMA=t+GX1ta zB3OFdq+$#fo8V?7N%piiX^4QqVQUdqQ0pOHgr+w4$svR#^H7tyHb1L zFI~05Uq~sh+RKi&=@z2{wK=ufmAH%@F3AN2QCbS;W1!PMo2MsY)MQRb#qnsWRD&>z_ zEmfo*)09{+CY5)`bP{h>Dtp7 zBo6%P{3n7|ps;)5>74>mSg3v_cN;IKmk&je2RfeJt4+y0etSKbXLsF(7|2GQ{R%7B z6>3`(AqFK8QgrV{<7Ikub?&8q2sqh82)%Y)_XZ&^iY&rY2i3*iYGa3lV14M`YC~-h z!VX&5zCT#whJaWu+Z7%PY*#ITeO~v|>1E62G?Jz7SEAy^yVef)3W9FeGdt+JvOB%Z zXrZ=Ho$*%I4)T!Kcu&?HzB^Q;RqusfXHrh;9~&Tr`r5#&mqOXe*oDfvBeKCxt?VCi z0xu?egPm?=9fwOXvfU# zdw;{O#yv%97wqC{QlP#fZeBFqdnRG|;Gana#92w3L0MkoJW03t)~g7s-eVh=Es)`# zHTLPu*`Lzb{pZ0+C{1)CA3{@ZjZ&#v|*yWp`Sxe zx|oX4WY7@FPu&{zb)%7HC;1fmj6b?_RDI<`d_{r1P*049_A1=}OIX~^E+P~`V=;S< z%Rfc1&=nT?6H9_bjH=9;3BWg$kkEZ3|IN%zKFRu|84xtCr>sgUF1{ABXb+C5U~YF^ zPOuJ*<6Z5$FpYSHr^QQ&#KV1NSLkMPFn9HiJV)|G$Vn!Q%p1cHAhbbB|9&5~(@<-N z8akq>@#xSVA7QW4tbuE6zWG|ZL@v2;p0Am8PTCHh%IZyUM5MKZ#;umUwoR) zmUTwsiQC+5#5s(`mcSGO?f!-M($zd9cYd0eq@@Ml&R60@+u~a(f;Axt6tmTqCxP7a zqTnENyhHRoSvp=Z(Uv}1=tVl&Nsgg!%AS(rq61kQ)vCWBEbzxK&QSR5keAI=0`7C! z67?Z42smHoFDOM%fkjnM->)Z=sj!~S0dR&ioY3bYWVOSd49t#^T4)Fr*R19`rBL$g zRoYM;APjc!X&MCFw}SnYiqN)RC%Sm_5?Qh^L|r#K0#l;R-&*|{A3nzBHJrH0%KT$w z1D`}&EX8y{GlvejxdQL-RrKbIL}XmUYJs}~xwn0ayh`*`I@mCQ;6T=0 z7B1{&>@!vl4#$a!_?MgBXB?y;YY)7n=)El(Ptic^udS>^v-VD>#gfz5r*^)NFDG7= z4vwzK-c5o)bnNC#pYjz{*5IAeQzzIPBBGDg~}c>W_5|!sUkBM zU`ws-{J8IoaCKR5>I9oJyyL8E<_gkIljxu>9{o9Gq;b+birze}^wkA(q09!EWq>lF zzjEK39TUYDd6i&cP|_STz87=K@(wi@ecPv^axsDvL1BwLT8F%ekMGS6I&+a~R$&~@ zlk6=iCIGeLqTOp@Ic0zfa5a` zY<2jaXUm5#JGEM*rv0=E4Kk9y|4&LYQUk>9fuwx!OhP%@FGD503!!zBc>4)@tXUt5 zl|pYVDVkE=DdV|_rX(8X43JGZXr4Heo^%eiDkke7&_)Snmhr2a}zIw=)k)2g!6 z#+ue9IAY#hoNL|U@O)0MTZ^Eol(iV#O&z_|-wJdY6 zbIdObB>g0!E_#3N@Lho=!aGM@Tj39w!Y@1;p?LJuVj}I z@w0XAvdKkvT47yVA=`x5KALL=g^oZa`mRNzWGLPAvQ)5){LUj^Re)t)H9#nB7wgVnIV;4^32<+Eln zT8skCGHyh}^4tPo($5$}i+%kijH;<%E$uu9;k>e?XlD$uMj zkQAr3y`eGOFJ<8;uHp7TX4Y=$+hq;>gDC%@jr^gUq|W4{ zzAO9Uj+eqyge0EXPFGWoj9)Z4%7|V_Qbp@>FAQfo#;`a~qT4&EUMq=UTmBJ)x%Lv(@R1#BY+2L^2t|YQy-h2W1|VMfuUM5%u~{D- zDt6BT{CH@LRGX5B1vJ9q*nnfARdIVXbA$oM)X1mexW0NoKJ=Y{<94EY&7*eX&ZqlV zB%H?J@dr@CMnTyq40*SO08LW+l4IqdHD^2%TXwwm? zrnOaTQ4zK(230J2g1o0RGQ^e4*tOyz?uv+R3o|bGl z2SlbPTBY6C#*W-JAyz%9%CwRiVAd?FZ+&gh5$*e(&@RbfcIl=SWHLse-JWFD&6(y^q@mGoU?5m5h zu?#w%RH{yz=g)P+%+S!k1hU$MCU&ZQZ#hltv74T`4CO}}zQwSr8*{OYl!XQg7J7$9 z7FL8F5jA?NE?aSFs7WH&Ymk=6D(V_xKemf7Uk|Cp{^B7lON(HbeB?V@FUvBrQ<+9H z43YCu^DS=+9&&p77-pC4k$dX5j@<3cnUp$gRVAneJCCto=eYD~%vQOYb_+YH1v^Q4 ztV`H0B~0c9V;^Ua&rj@~Nk`G7e80Dr48d;Od#r2abr0TuEj!D8&la3C`Z!s~BR9ud z4+ZxnB%9kvYGNZqS=*(GKCRr2AWbD8Y-{Qt}pI3 z(4#hSh_U({#n#iK`^Mj%?O{f7&2j2d$*k$Qm%b%(YBFYw+pHMqfT+k7E`T11uBMRi zgEDBiyUs;g=0b>EIy^q9u^8qsFm+qbCp?3Ef57uXHf>d;IcVKH1aro3q##V*?Pk+* z!iV^tmC3t*gA87sZoIWZh!W3kNgl_&zMo8Dzt(-B^O4{pv}ls{2zxB$3c2~?nVsNj z`YSYGam2W7x(_mh@7U!Z5AM*9V149?j9ilg-FCo-NGP~+44?FfcMU1ojHO1r%XyE) zf=5N#Kw}kaY$O&At`R-8C{#_SqX&x(QXh<4S24Oe&E0IFjPSgMj2#29s&P%Fqpgtr zHm)3{1cO*?Sw#fS=7d-_01UPB*bA|)_4cUw?S>EfH0&1t=7dnX6xVK7z9d>+Lg@Ph zZF7d60xQYP@mC696v7vea1Y;))oxfYTqbyleP23G@zIqamAT?#-xSG7&QV2C+|RQttjM7m51l0{m$^`OT^wocziuBT?W z8{T(GKj(YXnxM^&bG1o7Pl^H9l9cMel}|B|KlQSsjO0r2`It!wTJ0@U$LBrrSI(|s5H|5K5LDy7&X2U_ySj>98m?|OP6cS z_6D0qXjYZuv{(}~zQUUBW&bqc?ALUTMJAIZv!x$4hlKeqI81Sb=2InNFB5m6{J=el z^#V;@1+zv{w<0>!nlZ5-15wc#CBlP6WU>{0bN%YkieW@(x%~SH3O&ak*6S9rvbB#| zZQ+k559N1}ExreNc%so@n~Of;PthVkkL@E~ZvV@<9w$9v7$m9&k5&?}T6vj65r zh-WJQ1G5EVdAQS`&tD2*?Dfl@oyH;~34VSvUBHqFuv+CW>C$asd1`V%Bpq`cfV7%% z$#Of%@(;D|ZlG?XrP8$8BqFwtNsin08qkhGs@diy%xp>EZ>K+zzbXl}qoO?No~F~k z4~*r#E2*J94k+de-|Sr~hSRjg3~IVsN7bT81BO4n*HB*YrWesl7PtvzGe zBJ4G@MVhSZsaqVTN`;Azon6tleIPsFHH4#l_pUp8?Ta0soW=A6hY!E@asOKXMk(;m z_m1a;904z+rqN{ zsq2Tb33p(e+Wd5L8jq!He)_>tv$aE5SY>ai=YYd9{aGYrwMcSUu-&ieU6TWKJ4UH< z-psa4zI^^@r(bqyk*r(+<=5G+YOr0L?mGR4>~A*yR;vV9ns18wI@p5h;OZI8c0h~z zSjrXySx;K6s*`tZf(#+`b#yQq( zQ9IPR{6C}2or*$&q}3+q>Qa(|<4Ht2^wwvA6bS+KUaP~Rd&i>H26Q|jio~;Ajrmef z?JBrU2C`mOj=Sdm&+NyE;B232CGr$taO6}W5t-KuobWMvk*A1ERS)JEA%qc)}r0Sfr2 z#DM8Hcr?c+nf`1ZT#Zjq=#=A~{)b3J5v!#&M+lQmA^l&_ z)L#8y?5m&nj*f3oQ4<>e-fzY3<9W|Gyq9z2kz%2`c*`%0aXdSUgBsUU%5e=H3Hn>@ zC-v=0v~Yl;vKh#RuPMia#VLx{N2#_@_kCN?>{dInrHv0}$miX1NRx)B{aE^2B~*eJ z>8NU#4z-`_oc+5y{jxMkm8(@+oTpXZU4i>3nbj_`$Z8R}67`kYF1zrUEids`ixf;8 zY9lI@#LjomvJ{u69Os;e*vw|@qRUDH8_oOGR)Ayszk{f2_*=gfL0LE7D54 zA(1(Kl_$$zuTu1fGi49M9nv^j)Rvx;)cVP)?)8&lC8-;f zRCYG_B~7Q*Dl(i!mR5_Bvh1VNrXqhwI^O*VO&g0D;z;9fr{eLCGY5qQE1{47ZQnIo zGz}bbpz~);{&?Pf%va1)rY8AGr z_yrTEr%f@y`a!((&dGPL`ARRE`m`{IY>I8H7R4%l!6o44Jd`JdVgV6En!2AlQCjkdRWcyD6fgw?`KK56+STBN(6D^#hTLQX5+5lWRoMY|N&a-|$ZH+J9I z-`lcLNrlftEBSicwHpmO-p03AoqG~#ZTCOSHZ}6`_-==H1>;)Pt-;AdK?!#P-3=Dp zH}|rFmW?LYxc)DTocRdvz6o~qUE>I~od}1gEJ;`r4&-et4BkmGEIdR&<+gfCM(f+0 z?dx}2`NlAVhQ$X+Lsd*|FQ4_uZD0$k(z z?-m3;6wx)ANLHJwaJB|cmb5-~P7Tf*79pcwWUkgpsNyk{Q<}dL9Pt|H+XTmd(j$JG z;CN5I?TJw`Bc%hWVJWrX__*)HxcuVA-rc#&v`uI*cv)>yGsnjR(J0*210kom^c9F! z)k_4j_-Zk@VDCKSq{KauW|$q_KFbpimke0I=`d1eSC!5pS?0tO&q`8=!P}% z#YhxBQ2rD*^jSSnm$JKvnj6&tG2KV4#9--WxX>afxSB4Pf^gtUi;OM0zB|^V`XyJB zT7KOof!eQv0Z#Y9D{rYoOw4u%boTxh)q%q9wF~=vzUglyR?R3W@Jb52jW@F`C@Hnc zv!%XUjytS&9Vp;(kW9m5vrV2?{SFdjK!SzhtB#|{4N>1HSevT5@ltmbOuL9=Digk@ zt*c3Sl}p`yL6W@+79~T}HVN!5n0+?O5vvM&irE$|#d;-BcbIY8J~66LhaIOBYX!yH zP6}q*QAtNVTkV3o_=(tos#y4n`0c2wSZ8Ceg9mK~zjhJomOq9JVQS@pqPiS^{L`KO zt$d?V8@@r7(hK^kuAcrqtUmeUyq{~m$X~i`E>5p1)M}UJU^#whwHrL(k{xOzOKHTa zeFUcuRXh~>R1Al96lwEazp+}1h#_X^SFt-pl!wNX+H7M-ztE2U5uuSiQ{f=da7L+K z;F}u7heLVK-o%|8uZY6{YW9+t!KrPwbd$mmYI`;G*N0u z$P1A6qd;q5XI-T!29L7j#Wq9D#XzJrRVQeMrtqra^$9lJQQCW=l%E=9x|o>c90pFk zk%4DVHfB#8IaaDyHY<6xlrnDxL~mpngVmnR10#|NLtKq>A+Z&Iule8*T5)KqymgcR zg)bP^)>0>&<9NV3-|o?`i^d=0GW;=Esx9sp;>wKcg;pNI;~b%jX)(S1GP>UDNpg!M zIg}(RN2fk)N}sY4$|X=nwMu!xRl?rx)f`b6UKt$>{=k+vuEvW2v;xw_Gm4kph07?7 zQiGuhU2z?tR-i`>?v(SpY!&#I44*swn~5u|(&>NKezIC6jLjC5LM)-;Mr(M_mt7%S zKja-{*!TTcKN3awi?B+eLB&pJXqTw{Ry-F9Q8r6`vRd6jVRu8P|9(D7UcU1!zoZj& zST!68_9xSD^x#Z^S&jypiPb9KEImGpNA27oU4K_2_BZYT&S+d0ua%w5AoJO|c*~L27)qTtZS_8`Q?B-=RYtc0& zm4fDK$$Q9b5prOo*>C2pHS-$HYd5+YA7udbMAX{ihwY4SE;W6d*Nx@u;y&yux;Af< zdRFHc`_?udT$}e()7NbJ)^i|)>ZJwShMjZG)>%ur4RQBiL_k-p?Y$DG0dPf00%AX5F^VyzN8^uO1o5dO;`~h#i59!Qp0V@W5rH zllPLDl^A@1N9)>`U;-h^5m)0|=V=4-LGGq+UuWI{p*|Lk-iSyq*U&C?7qv1*mw+=7 zIa5FmO0pCs$SdGb=gJfY=aPx!z+n*2b*i$6u(S^X$m7_bC~PBxj$3ukhL8H}3|}HA zrWQxb=;@Ux&}xx($I%dGdnGxVEwMt3wS5K(=1%!8JzUKIqDTGCY?l{Z2MpHRq?>BE zwKR%-D}~LXd8NL|dozFWDXO(pn>(I8Fxz*w6*wvExZk^wJ!fyUs#qiA@|Pf8*g#wc zJOLR_&4T^C=UI8tedVwl<;ddl%d}Hxo|KB4WMG66B%Un0Vd51f3Rci#cUNNxuOV6M zu>%=EeL4N%n!ap8XsKpObrrRXA4m z3n%)sMlcWAT1iCYvH9xIH$8g4`#aA1EJr`VXDP@SXS*c~3|07baS&Vx-{n7*QW~^Su*85hA zyjt%2tnuu!hmXZ&%o)Uz5Jy#pt79evFCa0KQ=bQN7s0eTW(`Mra?Vw3@aqK99IvRMU-XHP*JJpG1tvwAFKQ4|85RN)qv|fyHUZ`}JcwFd7vD3yZ)i9lTVr?EnX)@l zXJ=cjidWxel3x!Ro^mAjRo#HBc59p?biOt|;1`J(bPa;75i9Xh;r<-?R_qMu{_G%4 zTncK_s57ra-pp1ReYn=DH9Ed}t8Ob|Nh$0NYPf>cS2{jxWg?z?$H%+tJN;kqE>S!E zqPEJ<^ot7KsZ56|(KhLX(K%G7na}3-uC;^dM>v{@KJ!F* z*(=QoFMFBdiRlYR??1ki5wahSu;vUgTO|)GAb*h!0pST8_@&>;drtZtkAf@E++wML z2@^nW&V+eSFld(u>n6B2Gj{ZfXWOiL&#Y!wQzQsSJMY?2+tQhU!a@f`^E%(!cR65TW!zz$w-c47=hgQ_ z!~5dzr?BheeZ)N0cyN{d8trYdRMwWWN$56%j6%P_M57yxEAVTYr8XVWTvDxeX)bsr z_KUQ}LA3mz0CT1m=?dH?v6bzJtv3ddkRAOydgN1|b&28K7n%u_EhZ1R)^~}8%kDya z7lryl*h#&GD4TSy?*t}g|0t!BhzJ%{&-IiuSvO}e9Tdrcv+8#0*see-`GnRJbz!sg zC)Y753FXTWOHGs<9~)oq@^3@S56#A;QeXEo<8hqcK9Wd(;7@Zv={*6}4ub>Umxd`^ zZbg_*t&P>DS~25nmKIX{9QxN1OSNh$hQ84Ws`QQ1t>Su)moZ;m*gVejmTSWXiWwLi zW$uLI;cMIg0RJPyrQVs|`<{?fhGLiqS*zxK*4)|MI{oS#DkX5}S_fJ!()=yI2%xAK zt5u{44wbG(wmD!;5{Ieu13^x?(xqQFHhy!=TE8rJ_w|n`CFfXrK4@iu&`ajhr9f|6 z?jNi6ayK2JYA>_tvLo#!zOPz&$S$LG_xD;e<}VREbbAqz^A~umQw6H_vRYb7m`ScC zv4$3JwOR!p2g-&IqBsv+5!zHHTUk(ozu!WEYgP1T@6MvVs$IOM=d9{$_tGv7Lj{lB zE@TJ~xn8i_g?{xtWw#5-s*iUwCPZ3=yhM9{Vhc7$lbN^UxFSo8?|hpsE1bHgK0cNM ztk2Pkn|+M+Qjs*XwsQOuJ*U~akHiA;;(A7*c1-J3h9xPmsqEsxz#!FuN~h8R=&!Xx z_h(W60uood2{cX;MUjzha8?ieb9{C+?&gcB$)MO!d1iBhpM3rN(c_A4eM~h~fwD`5o{P}$>%R8gXj+O zeLSh8+@0aJxr7Is;&k!oEiaNXsX|(rvUkN}B6(FF)_EeLAK+ca@4t{Lbxd}x-2j8g z$!_tFQ;)&pIqn$m`ySs~VZ6qVgx^&EfMPIE?}kP1rgy{AD_#9Xq+|1&Y>9OOeqrcO zpyIb%HNTnd8wqhWB}ry*odU3CI?<)Ak!I^XeAGrHWt-BlhQPMSr(P1doAb0p?%}-c zz`=PDiL76{C2|p8k;t0!#XC&jcD?_W zHhs+`MoG9$&0Io(CLh?FX3cjG!((m=wi z?y;0^-&c*PPSuXJrXSkyxuy-Zww5$X#89(FXW7Mcig5Y59Czpl6)2Ufwc^(w6!DdjCUl{I&vHhosi)9UR(|!cO=topGU*AmYC{`_lP-~dGe-K&Zq4|w-xV&8 zXvRY+yQN5@$4@eN3cbjdemW&3ZdFQW(HDn~)7h%=UuX~UsIPDI_HPokS8uOo{^;#9 zEv=|$MH$}T==EhYlFSxSSwrK%TNFGw;?4?uN)RU&ijMawETq*{PcfR_i}I?~Wu?QS z+VnBs+4*PIJV&(Ur)4Isx3>H_ad3N5wZo}t%u^3ObN+Rh@7r6TLx*2I0A(L+w%X}A8Ixb4s-ecQ!Ce@s{k0K zS`Q-)y24I1o)HcV-6$9pCgU63GFPEfsk;Aq^VNx}wyx*Zb1n5WTEbO5xt=P(ZS6&^ z_Nyf^_iGJIDI2FOAXa&v?Tur%toNgQSGb;f&1#iwEa%;!4tP!2@rgdZ_q*QdF{gwo zj)HqPoYf+d%5whLbUvs}{+5FA1hz_f0(HWFt@3P( z!Po~;2=_;VRAk44)afpJn^<*tO>qA}O~@og$O{w`XYnj5`h7HFrd-$~Hr8s*CeUh; zPu-q!?MiVt-B(U+#&1t2iM$YRIe$HPb$xe&M@?(f4k{ zZif~l-q!;ynS#YZ{8@7xqm&(1&AKE4STn|IQRw6_QB_EQtsbjqhVhcD<91s@x5%r< zakuaGNf>H*UiCZ6FWHHtZddeDDv9hr+a{?7$H~}J%}FTv>}m{XXx&%P`&ad%Yl4Iyn zgpqc5P5YD*DajhO&-5SWBh}I_lGa##v8_LH#%%oU*-@?X)uUk7{Mk}(m(9tQ)6Z7o z%Xo+OI93x#WQlTkKj5yW4Lqx9zZzbaLa;zOCYge3?DG7LKTpbY@1=)Z{^Yk?;2XaMG&J z%%h>-LQU}r47W*PbZX{_;1%amY1*0iQ6RLLLQ(F1UK^Bm2}@#rjMSL6Xf%yUpI+Aw z>ss&u2HXpqwGAXRlZI#e4YPlIpN5^$W}uXuLci?!Am{DLnpvf#hxST8)8++6h9^%_ z9csF1lwX3X|INBKt}~azg!wUSmRok$2b^FVI`1>$)x~upQy_5hc57CgIn5C0Z_7~A!-cn=Bcbyw>W1{i!_8#m4_ zNTgg{Z`p3qNVq-$c4Nw9J9m%zHak+O>UWPO()WEaqNM;))q!3ky7 zvkxyW&a%qw#4-03TshWRxnDYYbeeDGj8fAURfj{@5ThBZvNfG!K({jW+au4-wnrd| z*}jOso!uUAUCyw29;Lk8Tup+B6%a^qcWpZ)4_Vu+Hi>0@r@r&Ce^XLDc(E4-{0iD36`%`b?6(5{~n<1vY$v;eG1 zp>qM(VuP#=<)Ytk0>G) zmqT52=bUyM`atetjLIe9;ITtm1g=+1+p8(xMSw_AF^Kdfwa`hFM!hyVo<$YOSle09 zfva;YUbQhS*AXx2EIgf2m5{h=e~#wJa*1Tuh6iOF$bMf@L6$+pxHkNVcckvx2PB-0 zG1rZY-<-g#R&v_%>XgNe)mi>!u@eAO@+4|4i4{&~6 zU$u9n+UG}hE}j-Q4y2sYsgSmK1P3p|8mXvl?v;Hwh#Ny(s)Pl8F@^kz=PD?cKg4m9 zZ!-9127mlPI6RB}b)Q7DIY^--*GIWi*tm6h@dtuDIP<`OQY&8&SK~rSSk?%30w;+1 z4-;bbqvW#Zu7ffduG`-vjMfgCb(e750Ipy%W=VR(WOwP@H)Qv!aq_YDQ>&k6SM?w{ zB7Q=2r=uC%k!yF#ZQQ5}tNsL*4yYan3hQRXzxr;&`+w`dYwe8qhWEdt3hKQCw{g7m z^+8ZlE)N^JqzFc{Wm#x4RGJ=qn;L^W=HZ4t@oN7;b$F%P?Mzy{d(8S6~rm2|AwL=ie`g$zLbMDsca3oOl`c~wX@&XjRK zHT1pd!C5-@u6md%j`a(&v6joT)76kp){KZ`L%oQI$J7~N+DsGOAtVi*1coY&xw0ZL zIW%8pp?LW6_n{d)PFwUbS?k7EC>`1BbR~t0#G6G2E|$O!0*e=2+#Ps_1U^b2<+b+} zpqR2TAMGcQG=>s^uQZn({Dr^PZsSh1W=jKkM29JFZhD|wC~|S|T2eE2OZnd30ls1H z%);q#Zql^i!+fDzp21n-1h}UL?@|FV<~x#&5RL?v7{caUob#9{ykBUB*qDbLgO`Xn z*(1B;u%Dl~+jp*Tgj(sp8>ExEb}IT!4?c>LPySu+q9d`dK-bR|9$l~ft7Xjk)-o<8 zhf~UUeWZ-PR(ba-qZpMy=F~DqQLcO`n<{Nj2}d)4krEs55l$$B$TMKa8Dt(Ou2$@GQe%v6So_^=~OsDDtU?m&kR0kL-nE= z&GF0K$YwbQAOX%xk_~hW-#8o^eG~Are@1we%1J!-*q5)S9GrN3e0+>|Bu#SK5@QKI z15<{+Hf<_c$*PKX-w~;PgR5oN^|sp6zuf!CYm)WIol|&SBLlz}u z!?oq)Mg`r|;d-j0VNcTT=EzTk4x^W|8Zr~S{dUYS`ql4l?#xz_tus3smNPoDor5uo zcCw*^dW)M?Ja|B7c6>jh55t(Alyr*4N`o{1C`SfL2!0))w#i7ixuOA6{)OQf>wI|$ zjB~K4=3#kcJ$GpT?!flTN!|c{TEnM~O_hU)fSNUw4tuxvJo9+qxgW^)aBQo5y2f|B z(~mXfL0PuCuePc)vViWdEY;`M^^W(T-odDI0p2f27O~S*tZm z;rp-zb~OmT&&XIH(eP;*omX_Acyo%JvPDmj7(Rdd+?y+&y#yF#k)RDD()x9cj@mz|W?+5o z6`RNUzUcoO-c}uJ7*!-k)mXDm;sEYQ+=KLa_Ddq}_<|=%7+LKIUW^vO*CF8btG`IH z>Z|NF%?|a!|AgyKEx+w&Ba^z;Xu%ybM6~uZpS8O)Z{t{gn;s$uJaIeo?w8ljyocn5 z6=BmOeCW)3M2BwHq0epFtU|Zy&}}-jW7Ad@x?R8S*|d#UGjHFf?dty0rXA{jVAFHz ze#rIoSsgqrH1iIdS3(!v$=gM>oVl>N`k2PrUX2&03t zB`j`p&2cwZC?a>}M0dpAT(M~`rS0r1pw{_i@|-h-XT!{i-4v4ma?|3h^JC>9Cw^0< z`ko}M)SQ-J<|J>5#+czJYiYQTQS*tLyUhyi}ms*e@TO=X5xRMw6$inOM`5*S5K?GmGD zsr+IzIsLT)peb5!Q?#*%qH6gDN{_<{=%DX=($zjJl!y?Xuh2et z6eL!zDMgB zZ7{a4in%Q$_lEw)Fu8YyhVJCqeAj%*;#@#S_+4Uz2X}yAbF);8{KA7jJncPr+WSkV zy&pa8ecx&Cj(Ml1|LJMpkDT@%eH#3`r+xq8wD%LIy*p2fZ=Cji@-+Cvr@bFI?Og;& zZ~90>>HRJh-1Ck+ofYbL;_qR*PJ}<_ij)-E@{{}j&0oEZOK%(^c%6Rl4fEg6|No(Y zD9!ks$Z9_$pR1g!hD*$6o4B6j>fk!e^$FM4T(UDrF4r8cfApK?Td<(Ky4sk$JYnfP z?}A0f#APeyRV*$`s4BnFS23?Dp}eND3V_ASmvw(yu)LyTo|lk>1&iiY&0F9tuj=_0 z2}xK`F|WEhVcEQ;gvIXTv@iK))d0E2D zgymHUGiUb-86qL2Lwbdj-rAGz@@3xgW!{A43lmCjEv@SgubQ{)#`1*nWo5>-SwLgh8XQiqQiR$aB=D!B+*uzYFd@CC-QZyuxV{3$B|yXYzHqc?m-_oOk(6<;#Y9S5=k|H7d#%dK1PZ3`;Sp7T>tYekAU@ zmseKEHRcEUUTWVX;ZeNH^{{=(bL5-czvQwqDl0y7|L?zYPRnN~?=G$=u6NRV@;}h) z`F|F#<^K!P_*e2S>y_VKy`KM-H2$B!P9)D1t_!#vp2~_(GAk<%a9uW{vSN#Um*?Ks zTEhR?6@g!5r;*P+u~&MIUe6KOfA#*!X?Ptt?fp#YZL?wS`7gkpDSq#;)u*Mg=(Kki z?*&}LxO|nBNX3ffEBQOGVwrELv0$0Es)FarMe~g6%6SO8vc)$p_8OH{iL1o3bYbz_{F4x|vl@(7+>3PrQ{c`*J+1&e0 z@A(#qBX{{G*P3ZP-~UGV2s>_X*xt`&#g!Fub=cQZ;uqx18H;4%mQ!?nVV+SicJc(H zxM=*aO!=EBeG0O5#p30@>NAPWeJOG7g`@gQNkn7DaD=V(&zTiYi^>Tr%_Rg#F8VKL&IrAzimM@q`=U`_xZO-_KC3(5(Bl6g{bdG=tO3UN{ z9EKH495*2+XGU7;u)O?XX~U*XDws5ELQ($IVb@NaJb_?fR;H!Ssit2nFRS!c4I5Lv z_?B{&FZbmOhX6AtFMrOo{IOH>a(nd;H!fH(EN!@Zc=}a5UA18OvW1IpylQb;X2w;d zH%zBDj07PQzX|2uvEJoNC)3@IO&Btd$E1X6{_8xdhYn4+RMA9W|NHmU)yC2(EImCiMmYbw`Vt}3ouxEi=D zF4^6^kI@%rg0tAnuAdQY^f%5n2C(R;yk zC}S({MZLl{64ue{JpvoK$Ihb;xstddzbu{$xJtPeae2Awxz=-SUUJc^E(~H|8)zDM$Dl#ztcfwY_Y)l%>m)#3$kt8spxdGnVO^U^*GRHq^FlKU)NSm9%E!|&=onpdvrb7MIJlNAzH)n{op zY)zk~^aX3Vb2ED2bU%@OhVcH()9(;qe!byko*A~TKRsOF_emhX-tf}uANm$}u|ota z>3^bmuz$^~;J?TV_eXelGn*CpQ6?jSE1L`H!e0_6?=%1EblKp8;$!*F@k)1D^u?VBiMzjFa^0B-PpgpG;7j|M&k_`$#r0{$rQ?*o4b_`SgI0DcSbTY$d{_*;OV z5BwzHQ-Kcy9|k@Qd>HsJ@L}Np&c7r4dxn4a@~@hIg$n*C@b3eE2>89g?*Lv>-vabq zK;HuNe4r-*ol5#20MFLnO^*V<0r+a*X8>Oe{6yeK1D^u?VBiM!A7_kYEFcjqoHOB)Eo>o2LXQ+`1gT71pHp$cL2Wy z_$|QS1^g|*&j)@I@F?NoFz{jE!@!4u4+9?tAFAsJ)%6V3buZP0DaoIbzYqK& z;P(Q*1Nbe#e+&B<9{}G8{G-5c0KOXd8Nh!F`;hJ-<8k1dfWHa&eBcKI|7`?16#fAC zPT(H}egp7OIy{4dotZ#~!bgFBANWJS?*)Db@DS%)2!vw{@bEJi9)ZBa&s^U|pkv35 z86SQ0k@41BZy7JY{IaoY*Dm9!r=BvlY}sNw@W2DcU3cAO+;PVp#x1wpVk}#>%$Pra zzA=6JbYs$_NyeBlV~o_)RO9l?FE=i_=ptj_z=6imufxV84?RRXuBW|_uQVm{S2z9& zDq@ZooAkf5~`(QrhMaf8luW12CCzj?+~o+cXC8IyUR z$lvii%dg$>8NE#uqvJk?IEh5=SF5jv;o#2H{3*YC&XU(@1_ml)v9Zj!k<=C&70dxm z*;2;>SFs>xG9AK8B+sy-h71+$8x_RLZiwOZ@5_l(Wh@{K$-N4ga$`7f<-{AK(tSSaHS#SWmOw2d zj?S-$)ED!X0RD^7EwGGod3o2N3wbN&UxLbIAzxN1h;m~TVXIWm38X0{Nl>t5DyF8* zeDLzB*o#$~0#!yC1jhu*yqvei;Jk`A4dGJ|{$6Ze=%2wMx5;u=xtFNM7SfPg7!=!lH)~ z3Dm#TfRt?>xGm;Qs3G_W{wvkL;dadp=d0AvRZwj?`L0r&Bb2?0ryB{Wpzfs3m#U`( zRex*Yp{Q;?%O%}v;tT&(cIPO7Qo~Y<<%$Pt;2DjF)an9NGAXU*5-GdjEHxo`_k0(M z*AOCcd$?S*<}uifdhnPIToo|7#FBq1xR2mUH8PEKBTYS}*w6Ak6HAol!}&%LdE9Hb@;E=Z&r8BE`$aP$x+v=w7A*E#i!(7MC$XPb-AK-m4P;@@I1Y}KgNu5 z0@5l{fBL<5=^j(@#$d;bLWb$`h!m1iMkpz7TB7uhIh_0}_$R+4RS$*4mp165?!CRJ ziIaFY25cRw>iksLZ`Rd6uJ^f&kfV@m@=t!J%Cv85AtD{51cIH=b`@=;r$jxign4z9 z>U7Fo)lG#SX)Japk>t7-MEWu7Lz+E&+u!k_0Q}c}4Db_y?4NvIa!PVR@=ufZB)^t? zZc0MRxRk<_#?%eMf(aUCP|9T~KS&#vb|j-<#FP=EGsk64&76^0mw9_8Ffeu;x25i< z-R6o^0V?Y{AKwCXY+5N#2p*E7cB^~_{zd<3Sl3;ZyBefo## zq4a^CWREdd+qaiy3?H4wxR1spMKtd6w0d@UUh|wga>1yZM?F9KqcJ0|F1@<;YAJve zu_g88)H_FR9Qn}5UyOWmuC<-IQX_T;;g?@RuV_l7 zA}yR2=T38vc29O+@2+zH(0v!Q*yi5l{)_vHba#4w`qcE*>G!7pGW~`0x6?mKKbHPg zdY=qu#-NOu88>EBWYlE*FrztRW5$+@Z5cZeke4soPU`q&}D0k-8^!U+PP#2T~8E9!@=y`flonsln7w zQ;(*8k$NKaWU7(oNQ+K$rp2Virp2YjrzNB%rVU9;N=r_2r)8#PrDdn(rsbyeCw2)~2mbYfif-ZDZQ~X%D46lD0W*YudK7?P)vG zo=fXU+mp60?WME>X@}AdryWUqH|@i;VA`i?N2!SuX(!VRx5FLncDiHSvF&UY8M3*ANT5_hS4uDi^=$X(&CbbH-3?pk-fyV1SYz24pI zzQ?`MeZTu5_apAj?yc15cJ~hVbM6lJ9``=?OYQ^iL+-=wBkp(IAG(9?Pu)k|U${@W zPr8kCM|yO+Gd(6fHa#vqK0P5lF?~pSQhGAHkeQy9o}HcxPZXpVrWd7`q?e}8O)pDd zlwOfuneI)mNv}<>Pj5_LOFL*zzbAcT`u*t-r9YCsnHIGzeS3N|d=rxqn-P~0pOKJ} zm@yvl4A0sohAlOR{+pLI~syAtdO1$)uMr z-)<~^`SSAmJ6ckknpb|W`PT2J{@bl9R;=`--gbLxvv)=69V=4Z^UG4dzjFEQ*G`^1 z(XN9o%{Lf|jb=mJrKW;tZ-)$1u9#$ua~l4Lk_(LnLmaMF{lC3bD|DN9MmgbaL3E-s@XYXTlhjfNs3z%sPc-&38~zb2!>Lht{@|E~4i zzS;wrw#V^@`lYeP27!D0TZaE%yZlzqt+;QZg1z{UXwgj%qyJn6L+`cCvf@wjP<{yi zx$$3=nYg8YF8u%6+ge)aoZDfsf*6Ly5K$5JOkvE@-d-R%WkO zi;{p)PaS^6Q-lS3U;Q|F2es$yZG7TZnCWDo89y}|H;I&7TQ+b^3{?1@sFzjf+;rPh`C5A#+tv4xRq5FSw()Aaoxmu*1lSP&!DmUS z6kj(kYD7^s_uyt@Iihfm$y8;%o@kO=YS|Wzw|2}BV z_GIom@i#We-F6e*$pMJ>?Jm6cM-<;n7>u@+2HPF4bhj7-HY0BY9SHZ=jh`7`M`672 zMY_&4>CY4N=LG#ZQGYh;&q@08ME!Y^{%p~oC+p8s^k;>h1D5NIFRMqa483C*MD_N1 z5}4LVc#_gR%Xl)+2)QUxPe;5*pCTVYdO@CdN`mwpeR2I763h@fs$_6}_!4{T<-kvUNA7@9sdqw^2r@+wK zelW>~8tgk|p{Hb>@Z*4!+z>%m>0|#3-GBz_?sW7+TE+JEg)GLseIHE;xUG}=yS7__ z9^Mh{%k4H8-hGNM848RcCxcg3*6)w7!4pHCOS_Ku#d|L5G-mEsy7%^l%`;Q(qsFu6 zdq1e_Vy|ecp~PM6t(g}p-2+PZi`?Y5hC;WIedvB`rYT_kICR@g(~qrxp)&JKlW07% z0DAJ8(!GZR7}XA0XQqg%D5E>79YR-r>S|_j(;rsuv$_TktHaaV{u+43-i4xo$8OC$$W0Gt zzTod=pLwQq{o3e>n>kV4Wf}~5KWCOl^3+q)+uo)+kBB-WU#;`-Xq~Tv!?y`U)x$;v z71IFl6E?y^p2_2TeVIQbhQ;p{wUyr=Fbqm33_k#d_VJG*Vp3%1v0CLjL>%3 z(PwAt2qpw}#jN~(&^S24wux?&USxX5{xs3oX^1v~Dx~2cfSv zScPOy!iIaQTRoGO)NF@1z*Io*^Q^$Y#_$%Amkpz^0)}?%YOt%Uh?Q9)Ev|Zs-W!Yy zLrZ=kOwNt;>`4sfIRPXR%(K#S_?fP#|6gQMPr**L*7^^6TSA+EZZJGYH98Ii4fJm) z5?SS{YB0vvxXVJrcniY~?(Xs`yvB7r&yuS6{{z*4TaC#$#0%U6t;WO>TCJ>R5qTcr zcUBp=VS{tJ=h9%oA`+kI3$&ZUUGC1Q9oF!st_`b=-1}!eF!KX%F&KdL4ikE$d&Biyw=SR`Bx^h{9;+qDT^VJ9f4@E#%{E2jZ!TV+?@-qq* z=^v=Cb2PHb9culrCbpRiFi~3a6fOtmdXVk-xPCRc0 zR-Q}1n2Y=`cs!%D^Y3E`p7>nv`zM~KDWYdOs$4?6^U*MLNwB)2)!tR#kMmsd9F0-J zQhf1v;1>q&hy-$tOk*nqs}DnPr@e4uP<{7HR^rr_Kz>52e|mN{97TC_*uEixrn5n- zf)IpepQG81vCVdkZB|IlCZ40&rqO0z*BOMXbREyNq&|V^*nA)ymGwN_10|NA{pAaB z2S(!IDgB`)N4uDY_oJVjeRxwxJ5>Cyf^cVaDn*4leO|CqD%cJZl!9}Bd=}+Viut#F z6=a+1c;Og9d5&}mQlR|;D2I+ca&|oL7zOIR{tO(Yaf*qvP)-7P7tx@Sltw!xsf1h5 zW`2w|c(@V|XTUoHL2AENP+VwTREf^$m1?a+t;(`8)}MLYe^6L*PZ`fE_4g|N`#=Xi zHw7AB!1G-GUhlv0JSSds{13gzb5kA68F5=gw_C(*IqJ3e4|*&jt{iw+(3KrsyribT zt23`Ur&aM0eRG<G18-GNd zJ0)msF$xeTh_WiZZ0(q`JiYAJF=gM<%W`EI8_=%7oxtZcn~slmCyMHHKeQG;1ycZu zGf*1A)q+77*ifL+o~rm}$3c4$&t~HaDD@lgF7(llbx0z~;KLjMf|`mqxY*@Igzmut zw|Jt&6kZj{i+~?2AQLhw-!A#&l$RWNsh5{Vd1;atO39(!YQna(!9f2DZTu^|OF?n4 zpj5tGL>HQBq`;@AX7+yZ*`p^07lf_@-clC|$`xNN(8jz0k$y^P=uN!Jd;u@R7b(w< zs7Es3=B;_YeVzq@a(h$uN1mHI&)+c8toXixRvSjZ>#5@AR>fz=O(1t~PSUF9H;mLF z^cOGcrSIG@vQY6|fs&32LtegbpZD=D-wPcj)r#*BP~315fX>5PBCWv%(r$eSq$LA_ zX-~32yRG3^W$3Xbgmx-PBBg%RHaGm@PjN>?q(*blNIEUVj$L@+|3vASDZrWom`0UG zp0uNiA(Z)_1c}0k0+;8u4QNHsma&@U?5MhXtq3>%(5fASHR}39v!>w+xND%%@@;1C(tZ*z;APN$ zinow$dWK{fv>)J^9^&c2hX;N9;Et`q+;FUc_>@)|y7Njx%f|X8xt8ezI>-u&Sb@d6 z#owzPqSlk7Waxj*^&D^;rq^Evl9qt_OzoR6+WB~1Lv*?yK~5B*Y%*Q)N$BD;Y3Bm&qJ zyiRS1ggV8$6vUI!7_i!&D&kJNh&h`*im+3v9=st&D|4zNUn;(D6EjB;u%zQAvv-c? ze*rcPd>nzCn%O-TmS^=`&+}HR!x7K59f`cmQkWZ=Yvps-s(DRDwakO?MpP}c1oMRM zD1HjLzylH6dhgIwJn|M39y32Nw$x9(voZ4pV_wtLxgMHb8_Gh{7o$R%Df2kL)9NUz zpVop3jys#Cp~7w}&AIcOijPbyN$Pb1S`Lzs{%_JP1<;Bwg>LU$1o`y;H|#f`Yl02# zo@}P%gzb&*ZfQ^JLsqCOoj>?*mDAi<`~VZUX-##XO0* zihmzoY$xf}eg_sV1Wgs za|hu(sfgv70<(=ucP5MP`@n4c+nLoKKT9=$4|u+95Gthj?Oz#zzi{y#moq>4ccUK=W>=LcvLEx^!raoVOnQF++k7C z6!s_0(a-j4Z$O(u^B*|7$OKUy6&b}Jz_6oYb7wT%mOTpIpm*R9(P;V~`r`hxgY=98 zdFL3Ab6v-0ix?_8)sxT$2->6PfOge5Xzzd!Q3TI`CL|M5pe+ZAq1tnRdlTiO<9%`r zxE9y(f-%TFOR`PizC+-w=K$9+4jfG!qu5EUi%n}|;1mMa2kqBqPqFzhDRA~UaO4ip z0ge#+9zkk72c#n?A06kH5T7WdGx$o7A|xT#oCDG?#zDgBLk!Xx3?N7k01|9t_R*F& zHb6G*52#OOt^-$i#WY7>X2dwRe(F7q#<@*X@A1H_VdgIk72BiD7(w&7Za`v_v?Bzo z%+1c%zCb22R=jKM!cm?kQW-GH@Jz{$qsEzz786x1BS)fL0a#I$XaHc!uUZ?72qn%h z1^ATEjVH;eTZ=?+?@3@ttXle&?sEGic}saxGjc--8`e}edlG~Z?pLv774dwou2~)N zexl|!Mbw3!NM^6P#)R?{Bat4 z$CKqh-j)GBR)XtAAV66~=*PnnKW}1Zd|u8(?_aXt8HhJ{Y{Id!VdUebi=~i+JbK#) z@)>#hRfc~gALKvIX0aBN=kA#Q{N`8lKxID^vMTaG-aGUJ5L{m7J`kRSrR+=(TY=b^ zJnRc_ue{7UZ7zA(GTp<1I(bfSqA;x9&eBTZ$=bE3kz_|_=6YtU5J>Fp6hA3R|Yciz?ba`xQMkko<^nCi5s4gwLKFz?j}f? zy-WH_7nY%I3Z6oPuyCj>-z`C0134jy>L|A>W98*HvfjDnr3yZU(&b-d_6mbc@%qga zgQW<0yF;{3uI(QaH)TeI6v)V_)iZfqm*uQ>$$FO|>$5wdKO-3J_oqq2}3vS|T|T?y2iS%SxzjOHt@DunLW{ zk9seX5~a(H<|Yt%&hQqYO*)gcNhl>gBSeE^v|@Tn$;)QXM0K}WR9w=J`K;b23=(y% z2Y@<_So{LriO>3w3=>j^GAi<91@q(#EKknB@|t98F#~HbL|T?dT9(n6Kf(l=2E5z6 zq+bLF(@I1^_*v2=Or-qewMA|f(vhP0egi=2NSxyP32t~H$cfksM#-QKBiN-_eZzX1 zn@obIn4|daMS=ggFg8LuR<;nhx7d9zde}!sm&Dr~vc1-3Bj{a$H zu+Ng-@=W6MizrL=CsbxfllFV=QrEAJcoPn2!<}d)s#X zi16?qU;FL08UEu!6xY8M{vS}ODpV-7!rwdEgTihG(D420DMRaC^u2^vHSzf#y}m-a=8RK z5=^V4>A{?eOb_exCaJ@x6radH#SD<*|960rMo957+>;@?j|`ESLK0eZ=XbhzOYw6w zn+8qH?6ZoEha-4c7+L|Y^?hmv5YX&U#inR1r{U& z7T;~pQhY>9O!Q!nt=nf|BChy;j*?u(_cwacl8gw=M>b%?O~{mxM(BCJ|H3WF2rnzo z`~)lY_Ajs$9@0Gydy$=pIUfhoMe#61Lcm#Gsp5m|iF8p*d1>f3c*Dy|0U?zDe4#g^ zpyb40UC=!_azpBXd$Q3`yR!! zb{Y{`xnyMJl983mh3ub6OGA_Bo)y?^^#MQ$EjPMY^^~C< zBcL2k8eNgGaZyslW4Ba>-n?0-od=>O7U@Y28%&j<1M&^TmGyhB#ZW6l*WW5CtEb{T z7pkXDiFJLUQM5>Jf)75j9hw{o{|Vd|Yxaqip*Yzl{L`+=vIV;9yPKD#K+BtXvq?RD zwdX4JbiU_u_4Li26!r8H&qeC#?|IHsPv7O4yz%sZfcQebyf^V&sEzk#o=XOFG0&xZ z@SQvt`C#u_;2dd5iL|6e%IvTa;NR)Hl>2&vc_}pFfZO#YrGM+X7B3ONYRImjO{r`F zbO05tU`~ET;~!h@lI8cGSx%t?>ifr(qeN>40it;$%4%j{%ue{#Mtc?*lPvR*yfuYH zpEm6w#o{{+9C<;qIt)+y8SaY|-`lc?>;x$h#&jx9+5DC$O}~a3X76t?V}9+nCma7< zMrO1kvdS5%!bAssrLh%_Y(+J%S;SX3mF{&0^qtyS3^iyg8v2lOrb>5(F|*um>Q9VtEtqot0U3hS6@0XNy}SW01DHX@6bpwtSA=hZgT)kwmET!5zsg;M8A%PJzR z8KJdrk%6(Y!VK-pG5V3hOG$VxP}d~KNy$ipxS3gQ3S59Fi1`MfVfG}7`rah@iuwZa z3`2)l=Q9_A)Ii-*$2M)pJ=y~j`IN7;AxNwf=8@(&7Pe^v-GK(I6JaEk*)SbK`!X7N zU_oNvNAaMjIWYUX#uxiSSo;jP<0g3~OSw-_*JLOjlZeCDlq%liMB61=(VrucXxt0~ zMS^jFfP00kynx?M_Zc$4@%?YwgyR?HCX0Vhx3sd1c7*sO&z{j@j1{`9bTgNz9VkF zr}*-5Lw@xtN^e!9@WnQsZ-p?%Vf)NM#UBEAlG+kng9Wsr9|>P95%;aZ1HXWbBdbX6 z(s{10f6tC%1vb7W9g=>70jdj?sWE%vvChrc0B^c8@ii&(&dk@?<(;*|J;})1Qh+Zn zH1QI1hiMW$mWan1b6|lHn`&64P1HkaTZ+vM z?3a}G(Aj1As8j?R@&UzHMFc2F=_2~NVES_6a*3b?W;W7ci{}M47lv41Q+%rcjrF4{ z(RMKW0MCa_@m>JCYR-lRub(8MA^lW*c08iqMZAQvQdSrhXt<|XzV^7` zmZTKI)~5$@7FI@VJ0B!JzUVZpByB3$)r!3dCIUt)ftLY!F?YKFH<+Bw2a%y%!i4z! zl%T3i_V0TfGQ1iOqUIJd4WMV64diA0eW7HMWKtTTM`0^zMzsQcvju9giN&V$EX`p1 zCH*_xH;5PWjd+HzbyVLVC_l7Us5&4ApJ_9^B;U3@i!Lh{9U zcD{&6QHmn?@&Z+g@&)_J&dHZ6L78!UnP(O0KWU|~<#;8!Ur-ilwnn^`(BzE(Tan^e zYBesk@LZc?Kc9oJ&}uwjTxvs(C)cL+xNZh)u-rYJ_z1ZU zR2lm;!SiD089aXr0)h@Y%Cn7-4=h0t&k6LzvD)|4K1?$6GbpAgFlj$I37OOFD5Nfv z20b!Ccw=SDm3V?2j3mJH!{%!j;2Am^Ras7L^G({z5LI{=-+q$cZ>PhPh+U%0o2>m2 zRRnj(==CYm1sIr4O2Gn!S*YW9sj4i##JnKl%?KTPU4|I>2r*EF_-Fy-Gr{bWVEiwG z(z->~Qc*v~?|0k2p5G6mG58H7_MYYu*c;D5SOW`%FsLCg4KaJ!W*nf<(yrA-z0j{3>Y-j-o%2o$ggQG zM0xUV9qvY5A9)ucJyENE1JHq70ZCZh0h4n&iF1ir`qTmVQO@DJ*BHq*x7h~VR->8R za|uPaSn0#+p#NUGkRc$Aq6qR%TaZ-ahNIkvLRazCfOIRXxt(2~H zR^vJg;w{H1-4dNNuCw_Mvc<4OPmsW@F|##R8cL-_d-)8>Nx(iuQbgeiwGSaQW92FY zO&xt}g)LifHaX~vRYM#B4rs+=t=_?VB%Z=z!btK4o8!+>qlvwz4Z!mvvY689ozx|1 zu2B6s%GPcSUV99GklSfX(cS@$G#G?b`56?};a)Hue2&I+FjXjRGb=q6*GcYmluPqf ziT%^_X2R%^St=H;NkB47&(-0ErDWys0=s{ObBozC?7!}*m`IJw5nxJQ6U_Wc zdX%9}Ck>!!@m5T)K|JlevBY>~%@|^w)qQv`gzL~X?^9iw-yc=RgEaiMVqW7$qT(J* z5d-e;o?ZYIC=1;N*wo=qQ3aboY>`!F($Xsi1rv!cyZ<&im%vUDk=M1;ybwtMI1>st zDDR@rLn%+Co`Rjk`aN!vu)i8N{!dn~RlhW?Z{=Gk_zl>W1WY$`+kF&t%(D6Ef{9Wg zP0CkfAMo55$XU|&VH|syDl0wh|Bm-c&jVfJ^2j!E*?K=NY%@V;_tR{OQ5xRBO4hPR zJ8*-T2Wbd7Bj_5JT!Jrn8qtYCt0T98427{O^y+6Y1DO9x{D>f4yo{|s;e!hQaZGbk zJ(G}bPvk37uz6w1xLHTn7dxg<|L=VMi_-dDOaUpkj~qg(NXsDg3IazwgRCV*zOJYY z9bZkfx3J3^;v%ckWo>#caGqJ%dc^Qqrz(wBe zDY`9jQ!@N9+>!^QoH?&aAAAq-iPyO>v=V6Wf^_sec&IeubEwM z$mUv=4$7LSBlz}9JyfXnUX5s$wru!bL~(T0DEd?3DyfkXeQtY8i&Zi!Vd0skJ zZGnBjbKdE}L(sMb&^DHrQ`vz0>hV>mqzVPFxcc6WQ+j?NCHoH~+3bfK2-p)O%XlND z{0~CPe<&ooWi1F0j4sSnqZ*cVJo2)dh8WCSCNK4}u!t_9&37P0xFoZ8T+S-${${-l zJ4xZwiMLo;vSz|vG;e@812n=6J#r!+lZEIG33W_7QjwQP0|(M!12XU?=V=hx;F++& znTfqjhy?Uh?o#AV)DfrmV}C>_iYLUYQfa+KP~4Nt3o$3big}^^nYE$Y;N{JbP5Rso zob7l9SM{{gW`3GRq<(4*R3O4Lw_;_^?72w53qKevO#L~U1`7on!jGz_6WjiRR_osZ zie~={tKTH3N$dAw445{p-h)SzX?>r1+UzyeJ)2}$5LMLHv`AGdMoU3Cw?TA-yeYox zFd96w#mQojSmW5wnlo5c3eU2$8-lqaC5ZgbTY-6rtRQ{pFm|M6v650&SBM2ScQ6DnH?!PDtfagY%G{hD5q$zt5_UG5RQ|4LA;g;s3v{&?H3Rb!Ky2&K zd(kGjZuTS6H&}u{2umOb(TBlWc^8%NCTAcWTOP>DKwnsqnbli7-{COf}WWUW881YKfA$!e3ULN|Ogs?^#`@OH?3Qj91Te-Qzi z8x*nsPkfaXsz(L-8cUZ=7UU~E+?5WFnY3R3A^t61fyExhR|vU@Z*}rQk8xlYebG6z z$^^S@#s@10J=Z(lVihKypTb>8kRsZ=oTQ90rS$O)0$;D8GIVQ;AeV8e!MN1S4ggXh z%dDP`V}HZq)~e~ewvksM4Qe`{6&7Jh5<4I+HVz%i+{2Y+hrfj-_Bn`vitxn3onvF+GD?_h0qai-g zLj%XBe10*nbvssKk*(3OvN~Xz3$DVKsUa8=d<%r(nwk^YP~8mVRBo&ghrG%a zFwOazdfyT?D@^#%5hhac)An+mx&7oN3=|W5=Xol$QcSQH@3AF7mY>*zyxa#dUr83C z(4vMW+(;)E?4&;}@$C67P?Ctg`G1HS^Q+?v8v`~6=H`2qP5+G|$6i+GVO5Qpy^a?f zuyb+Y>IqmSHts2{3YA=m7SnlQBXXXsu$nj9u$Tr+Mz`h+6U-LKxMvYnn_ta#f#8l8 zWp;a4v)TZ^G7jd59WAOF`E*uQO*#9o!aNj(srYAuIpmjO-`4~Sh23R^jp6&)aOif3 zCx%D!kZ%wlvC4!Q^{Z$iQY71YOF4R3+30v3SnR8iBioCSdA=5l-Gs$Glx_7tg4S&E~@YHYC>TWl2Gf3C;O$3$%Jol9ZjbeeO$0uI)7#oFHa z^=+rc+I}F~N;sQwFYibu#CW%3riP&KWju=+xz>-niYS)GukUGctfx4lroeX?FrsTA z>F`1>&>I##t3Lm9Ez)|1IJUYkAxE^lL4ER`H+y^KFVMljHP zT0L!4+Hb^g)e+24=i>%?#tWB`P1&4*u35NlMr{+{`V&~=K?C##BujG_)( zrqaDH(k@=ljVRr}wHmeC>LR|!9yFoG#*-145_0WIkEV3{t#L@vnfx0NN!3N%PBZTz zD_@e`L+zDqeb^R(&Kf>Z9vXd2 zFxo$aox_vet3o^23A{ul|tyzIwF2zadr=RnM*6*^Yy z0kM?sU3s9kUHcEAKPWNwgV@2sWoQZm2v3%NK3ge0nFpTi{mj2zv9cT`+MU#*PfJvK z29@qj)_CnUZ9PyNwHe=O1ca!)p=s&SsIh_Z5m`;|rO;$p8=?P1Z)&@rUfh+opDZM;6Lav6KntjX$@4l z9kn`hjn3IdZy3ugYF}J#=WL@h&U+KCakyTOYdo&k;%dV6DqJVvdKs<>xL$~BBCb=^ zK67p-wKQeF)%=uW=qc*S@fI{kbk_C*7zPmnXYXb6n^tXN@LS8YMD$NSmV`yOe;2}b z$&m^xh)oSq6L`AeYY8`M0(X&E2op#P;^;%hK=ge<2G1oMDB@`_*&=M9McTj>r0qz% zLEkTeErEPz@Ov8ZaTA}r2-_%x9lQZ{kp20JymCIz%}xtT*pkIiWr;L~(C|8zGaEXa z0oo_?1o^K_z`Z1o@B3nNcw}hMs~$ArF}CV*y(t$ zNBuM&Cd$fA*Uj)Q=K+#_6)UA8VhyxK_>YC!upAiKX=G&m!pN4KR=S_kjqJ`bM)q5< z-J?bpqs<6dqJ}op%pVrvG%%i<{jkup0uR4?HB`+p>{7ZvBI2{z9)3$>pzyRXpa?nH z^T<76{!us!OXTz&M(d5lGnTuW&soHCi+Hn>t$~78-xP=VasL&$<$MmqGecI+)B zn+20K+iBcOyLod$r!EmP;exH=d1QMtSY9<&d}DTXG`6ZI^51DC+uTpqktAuZ2WHa( z!z!h%{ohGQ-S&*o66}Hlav8kUBST?wBQUSnvOoYf5daX2BBdH?gE8>C>#;`jU4BO+ zzZ=%?TM>wj;38*&)MEAl`&UHv4;wP6Q0X3m{kxCsUoc;cJaZqUJquQK*FyB4MaH_e z(J@2=Cl`W9QXjdIMvkv~_+`9A1e7J!h$a#LjSDD`(x54zRQ!8zD{MAFhwY+`1;S>N z0xqs6uh9oQ_+n>g`7GM>n8CR~{CC29KOxPxdmie*-$zu5{|NAZTG(%uWUDA!mizw` z)xfnfAk{d^ID9psqn~>*x}xxBIzDFPciCWA5%Ci4pCL4c%fZG&Z>um44IbA#mfOf0 zJQyHEr_pXv{BI#oP8L{hk074$)s5OTGO~nu3)XK?7MO1gy6V9!1Do4OEMzSn?GZGU zTHDB{g&#V@H|zljY&J)l8KG!O9k7hK2IOx4Hr6#z`qt~=&1Tk2;R4K9BfnTHg1wBz zqX%yv3t)}Sabhfh2wQ{v@BKt|XevdEmr+bx35k-BOz)IZfMA4~kRI`*l8k_|MOXs~Mg zFv`&}@5a-ZvykW()G!4$k+`!>l<*65ige&6kq+EMX}{p6RQyfb8@i2kQZg{ODII@p zcn)rI;?97(x}exwLoc6!&d|T$rYCV{#$9GF{6$^RCweg$TsK|{@ooDwvzN-KH^+}#}DC_q_`hZW+N}K@T)WT zW$)rs;125HmuZV`B&e3!L>og;EyvxBuqNwf)~Rcemr;D*ng9r*h6^y3vu$cM#ya3T ze-SmxW#Sbk_VsIDmeptmy`_d)dF;y}la1^y6MurbV4wAUG(BLtaBvu^j)+g$@+d%n zCg7Bv`<^Di;?qG3-d2YfcJX_ExQxn*vFY#LAJXeO?ha7(MRnQkod#u7H;AJ69>U+~ zn`-f<8Q=W<7Nw|aVfRYN<#x;9;p{ioUYh;J`d^#@Pqu1#5&p2;PP+>&kz!0twsGnd zB8xnrvb6%l!hJokTh_&&7N}tk2UorWBs1_QpP<@mB#u2ThU>xCmrqbFP?}CnF@)y> zz7F$APH%wqeFk9sCyeE=7|Vbh%Y8(?a`A@7@&=8?V=o0MN(bL%+eA;|_M%2AmvntnT|@|n;+S}&^R|wI^L6oS|3m@MvO2alVCcMe zCb7Fya^2adZ2Bn>qJ?meeOZT3ysTrM`{K~sGLR^>j+Oi4K>THhDvAN7SV}-46Qf41 zN>B_hmw`4#XVT`GakL>mCkWbT2!Z4%0X4?w5tO2@GLTguinm|Ok?=|Blr1$)H<^9gdJ56sd{B+?jmBcBR6aADDvoB3)pZ=yM< zo0rmN)EwM8F}N)Fr3?%(4ZMf;cR|ndazJsR)k@n@*%!Z8f=6>?}U{|Uamg;2@dhv%%dli8jb*u#t=I=QW#>MA`s9ne+fu^=Gi7*#ShlqpUU8^VS6w_7 zMzB7@+~rNV>WBh6eH;{BzWzd-XV+8yCmcwl_1Sk6u;B03D*B{;ywHDGmDD78aM0H)Wb!(-~i;i1(5@)p5g(%kY@F&(> zCt5swHs};B)_Qri(qpnV`r7S&`_lp_D!pNX}P!svk+nejR1jbrWfeu;NQYz3k_e zz^?&|Z=s+ed?(m|&1Mg67O}@$Lx=15mhE_f?H@^l*h*2y#AAoWO1qI3(ALU2rF-)Z zs#1xal@pEpegd=u(VxLFICKj8F6!9B1R_v;!_j$6bfft0f%M9*p4r@nVB;xKe+2su zx2_>AC;WQ0Jxo{thot)nfbnGbIhr%tXqk310AwSDhA%BZ3K&Mze`X7T+Acs1%K>Hg zfjkx}!PiidEN25O(VD09Jp1e@1kskh@xzv|V`2vU@H2SJ{wb<#CaO4)_v=KCZyZ_5 zok!J?DbLA%TF{UBNqom33)OK!HmsisiYE1gz+i(;&5jh>VG^Z1c4Xi!?FGcHOfLHh zDm|~WlS3nd1A>5RXi66oFG)H`ponfyb_ah=V-mLI zVG$jt3X`LLIZ@gAOM=n!>@LtpXQfX6LD1hM>7NLgO3%Z+s5A6lz?NN?BnGICOx6cq zf(rlo!Kv=vj}-3{nLd9Ju7TLZlbnE_Dy2&|I# zfO&q37GfdOVydTo<1F>!wAWA%6e5KmdQX>B$gH*iNHn;TS+fYCMsKB!3}?yCZ3L$)c#301W(y|v3MCJ&0p}e6XY?lP>eL73wG(( zjFRSJ+6p$;7`1R;HE$rzmqNE6CCM5?351XKQEC89BFN9sCtRRCZX7ZGVR;uOn5f`* zT_?9D&8(EY;ZZu!8i_ib*d|!ZHxq8y|I^`~Y`{>SB}XX?vQP*0QIZ*Ra5GVh+Tvva7^HPjgmtr1L;lJ>r&addFQR)oDYF2YBsI&`TcgPC>eE^lM!hdYp58lCz;(f|*zfSW5LgS-&3#6g>LeyZnt+3qIvD!}tT+)}{ zPgo+xw<(*a5_S~miG5>APx>OHGL!kU526MTO~w+|tUOF!M8rpjpefxuDaDUAK+^X# zO>bcmEW&NifWycpm#v3Av`!*N`_Oh1Rs2`PJ|K@pNQ_`%pxAnpr|f)uA`WCnvY5UE znUTIT1CQ*8RO*mpe|Dd;B@VbCMI%hyKM|KIJ#X@7MG*ES)5b-i-s|9hA zBylMH&C~5fAC#OyAKIDsFQpF=CK{CZ;3T`G$e4Zyqn#v-h4G}W?|0!f<~D*i8ZBK= zT@cLn^l0?1X=1-vy1nm{M3O;TGW`X#Io6K$qEikGV)@WhByBOr8;=-9dsFlgGmFLp zS^*l2eHQzeg`yIsLU@#(r{hR&LyqC>zP43L&wm>JX)%^udYx(H2Zl~b8#OA(Qct#v z?w%!suI`orvQD?(QO_`NL+{I$x>Y-8GijF)TG(Qt1#c9Sxl}zA&4u9oa{?#BH_Q-* z*bqC3F$|r8E0uUjo2w3+5$-3;k73A7mcTU&h3!Z&lWQ)c&D=5DMW6l2uj+&s$L!^+ z?nD}1%0_pX$h)%;oI1I9+GDOyU8qz}W=`zY%TTSxc4DtA9bY#uFfW3Sqrw-|b#*2J zScmC+1XTHjEX-EeZpIN}-jHyp$e?cdH=0%=>?s+YK~2?YM?9o#lC(r{v?oahKkJm`B5QjjTvHMS!c zNBhB3(Hnxwk~nPLcwr~`dlZtO8@!gfot@$daLJt8(NP-mDi0>mE(?4vXkTBEODU=B zkJuiir}*K7b*Ah+o*QUen-cgHTGbi1wbOK&V8foL0vTFKJI*F1e^g>F}}epv~hf%T4nCUK^zhk5t*sN~q|__T(7Y;?UP`~1fvUC>IR2W->+l^K zn~%>l@TS(5hulFCtF?vC>%0&zJ8U!XNtLSr%RPm<>P6R_+P4uN7;#MtohnnlSph|~nCY}R#jw2$* zFNt^-(#3Y-T%@i^M@&seieY_BeMXMRn}8)VbK4PhI0*;ypf`0m6Qy7o3^ zhdXJanMX_+9k5i7vt!@RF4^Ha53h(NIT6kwLH94M<%W>K>XJuw&snm{Qb-;u<^#^rHJtS&@+<0j`a-}50epq-r89v!Qu*jINj!dGoqlB~N zdceL0>0(32U>z6I%}n;8L&$GcnIS?kiMJB7!~`&=OAtQFZ%JJmP(zd0F~k^l+4Ind z)K@5kdU8@7dw|f>HCH6JJa$V7`;0YvKy{!`Qh8ycF-NjOLny6TMbq+Vzm(Qg zdfwnYLWe)^IG}zyX=sFrN4+08Sn7JjqL1_UpjXFWApeW69c8pDQZrbL@uL(2JcfXk zNF&CihAf%K<(R|Y!=#5yAVQ{gGJ!H2kjANyQns=2{hhH%g36R_A7&geCdBMhLH4Ig z;5o=h%p|VgjA^9a^8?f~1#5zvnC^w~s|(7O+aYm${y3hRMd}@4O!3hBI$4s!XrTQK ziF{b%Vpw8i*7ma$NJO;4*#zSsC7DPN2&!onh#w*J)|&&5kwIF(K7uO=2yacsXc6rz zXP=?$Zj>>6!9efdJr;>9(ypVCj8}&(?-4aH5cT;unF|zy|7YY_>G?A|c2=@K)n(Fd ztGD8h)&z&FYYm0p!k`6mC+O}&cT|(4xNn_GL&cn~C~(UJHozVsxgGjIjzHI2$SI-( zv##6aXb|vzF;1^d+WiE^gCP!Jh+{QgTMBH5#X({lSPXTMs@#z>QF{!9k536t>VkQk zu5A4Pk1?C+32SfAv-oWoFatc7r=V@587<$T@BJ-gpYa_JqNKy-jEGk_Y$FvG^AE&2 zzVRWvD#{iwmSAgdjnds$+us%0NX{ZqhAHmD`YyH~(Jr=)BQ&L3mC^SRCLUt1W*{rN zeQk>Q9MF*Wpvsv0g$K{rud&^U&!O@C&URXAqbn|k8L;y76EgG)ZRI(~cI7eH`qI#g zvuQd&=Wd}Kf|eS3P%jbtKhP9b{VQjo=wHwTU1EJF=o0yepo=1CL(r806KV)-%7Ejc zeN4HfEVnqbH%Pb`g1Hn`;$o2(n_&YzrOKx?c}bU-40&&0S!%+R5t%lje4?->_k-(Jp=n#|tX{@BljfF3w^ z9`JA!0bp4nR5qIE$@a>s&b&~3Ola3nIzo4`BaY;^ImFlG z1_ggpLQ|k0lHYPJQH@bI;TxOpg9c5!9^XfLZsSE3`nrfGqkNtyFU8k42qGroRQ|Q7 z=5^AR3qIcp*W{)h20*qP{B#_yEe^CYN5>c;?120(Ox zI&S>JmV2W5;q<=n1nNV5Z~Dfd5$)B(3Y;OmH3b%%)K8~ujL<0?Y~3<8Z#i39-I}DH zyiD2rA|?SkF6o5JcLXleTW3IMi)sD;XBaQ~(g&AFxDYB>%#vf9zUpi{e~tb4y_CM?c6YLI2tNeohTt}_r8Gfu3+buJ08!!m3^)RO9@vRfr9htO z=Y#eiz&bu--+=clKN&R<6(MZTfb3wanP-CHe*kKVd}1-Ujp&_N!fvs$*>uEHDf8xV zZyG~*v%o@QAOs=U*{s6py;NOixJYTgcQS?tlz0Ih2c4t%C_yChlTCbe3ZI{asUVE3 z;@bhj@TxQ%mzd1w+y7`BI?Srlf`wA`3xy#70yzY0MvXQ5EoJjTe6Gt2GuRuBf$X?DfW061Z;zYpDYb6x{)lJ)$zIF56h~?qv!$OEBQ)rP%1`=PmHqnwoEV{WrgVg z-bDLI@yh||!$o~L`e!tojLl{vjy0NRHZH|)Pk63{DqM{ZwMi~}0JXG?udz7Zsfu`$ zLy!HCREo~bY639 zF6zd!is!o^h{dd5d{{y&yDlgODzCxZwkg>t`fk`7XzP2SP+6NYC+u0I(jHLCC~1F;TA2soTOfYr7!(e!IUgBuPqK7qQ~5mCtfJJGBsSb(ni|P>bpg=? zWJijdUy+P6fq2oL=~J`fGrOf!&hY{0+5b{51uaSLt`glsxAi_J>3!12Z?ey{ztiVY z*ov`z?xzrxhAOsm61ROb(3#|^E<;aJ9hf$0%9DjV1_Q_PROwllj2-uG#rGaO8|h;( zH@OtHb2~PE69ws_JwcxUEj7_7II6K@>br?UFvjW!!`sOhqaIx}aaatPMjOF@j^RS~ zoWOyQaLNq zTAx4Of7IK`_Ty&)v2mWg1AyYQu<$pdFslhBWJl69j=V^&fQd4|WFt!VD@akNMk66S z;#)8GPzVOo9_#BBrTb0eVD_=rUyBA}P$+v<>F$^Jzjon(LXuk;OT;|O$)nv4TZ40u zVYGFcEX3Qj(W4G%-#TnEE6h^-KY=uWL@6MV_&i&S#|alGKtxQIi?Wu!9}-{jP5KN< z?Bu&)tT(SlGkjdS3kQDSlbybn365QSUYcVN>J~pQ3kE!n?Lv~V2nvnAj=c{2h4yuI zP6L%oJEqSroP%A0rQRdZBKSZ5M=-$KDL03%>7soP=f4EyR|qJAT?Gf1@ukbz9^-z# zu0A^m?N5d!uqo=B;$^u$Ql4Kt2cx5mWCjM1K_mq+Qv~DQ%>HauPLw~-&{-ZaxwnEp zhmDXNUGC4;wsp7Qcbz(npEJD!SsL&L5XqV2tICLejlVWy6lx$riTUQ*|NuN^$^UJ{rL!hF( zYGGh$BfcJ97RYbH;q9T4Z$JaxcAP>Dmx9D3ssYKS;OyizBq5YGVim4&W*_Df2Nb%X zzyAARN48Vk0pim|dlLti=)8efES|7x3bsxbQP8Edmyq|IS1$C6R}>Gu2ioJXpU4>f zDy8Fm{sH|mkLs82pl9t@bu1mQ(?)e{7=-yd^p5IS+Szn09rTd>olD0Awjg8h)+q#nL0rkgLVs{x3rq)*W)y8bps>@8;M)59hDa+Rfy5$ zB9g&E5<)143^n86zt`167~Se2d^Nc3yQP>ZVlzfX6NS0)5F`3#E5APcurRkUwS=#F zdO9L&-E_VN){XWdqS>*w4Rz563_j!$+eGc|jrfHUG?P`~*&&_?n7J4I9Sz|3~s(txieU#;8oL-fhiInkgYzYdbPv)ADe^&4ei zM#giHdPy7Y<$I)Y06ilLw?lr4rQ3ADuQ4`5!bM0u1C|p_nv8iiV}1&P1_#JSZtOP@ zfd!=yyhV;a908LYQkaZSF-nS0b2AXf;x+6p&C~e2WW|3T+K>QXnn5^&Anv{+&9HI7TFT2sGE3{v~1lBk}}LD9B<&GZQvI|2ncKxE9bb z;9IES$2e{XP)p&1IuhY@iweobXukkEp><08w+Sy@CwgUFosVaZD*WoGO3RSk+BcE} z+*xV5oSARBbqQPrR|;9d=F&^Al* zHsM52%|`dKsxY@M^2+$#ET|M*4&ub$;t_XK6>$a+e#cksP0T*JDlT zS9ir@H`clpWc%XOPvd~6MXQ8hh`!=QU%DrLo9O;Ev_ONi&?1p&LEphzu;7Ooz+GPw zIkY1%6AqibjOH8S$L>P>T383nEeoS_Vy%bQy78;HNXcv|__Tx7N zvO*=X#;i6&Q_v98R=0gM@;i0&)%~lX+lr9XcYpiNGKQONeCpU#YoHj1ZxEc89 zX2*t{lJ>tq182bK_GJ=JCUL%`V8q8k=qX)Jvs-lx+mh=2&f$IFGvWB?OwU~;Hi4RkWaY&NjB&pk| zi!0E@!cug)$kC6M$)PQ6kj90eC!`Uvh=Mgtco_iK5ffRxPk{Cq9w4cO^+-S(M^HgN zkPb&S;a3uui8PIQQ%rK7#>r$+>v{|-08$R%6SnF2a|c)POKGEGuur~*4rU$~5nfcH zz<&{cT^@#HfRS{>mRtQ$3CuUEpPI7g*%ej%e1r^$SJQy61L~xsnAqNnXFw2h+BM|x zA%$Yp?->U}Y^jMx7>@&e1C_8&4hn%c(eY?>0=$ntAXQJrdnw)0goDt2ISQ)}U#)?5 zIN}6hy|xi&HIb&E&r$#{m+879W<+oFnU`BE53swf>=qMpcS!4L^=Lu~2AL(n9Zj$B zm*TJ^7%2`FB1OZ0p`#9w2dGBYV>$8xi*Q}$Sn48cg}x_H-;&uhR!xBg)u&IaB6c?O zLu*m%N&5yc5$!fEhcv<-Ao_P3!4n+SMyI*Osl7>9R?LqjkhEW8TMMX%td&7a0$|)D z5n>Q$#0T?>yI^wkSxYd#w97_Mi(qXi0ueJm+Wt*41)`L)Jj!9xarKnPEEY__1n3_8 zz?O+kV);ZCj2A!b9Ras^iv_=tz5%efPh4Qbm*J2Qq{R7DzQ}~fa)bnnV9u9g>R640 zI0mMDgbv62?oSraqloPqUPdXGtGElNw0Rv+Dg6fw_MuHIn{TEca-#JI{7MkOMCf;W zz!=xXf9B9FCUSCBTX8&o58lrCTLxY&q+N%~ihG0svLS+EQ z^V2{eWLtyzq=_IP&VkC@SIhQ_-wqQ55M`pIi->| z`stD8w8+9#bRaSvW|o(w_)nuT{eCnFBn4LCpU`|^u1sr}r3LdcP>AFH(&;ivpLY5g zR6g6XU?ENp0QGI5ZC43u@VsanZ6cu7b;Va?&A^~3(=AxEFw}sWkXffT6%`01zuU5~ z(s2U6IF=Qf7X!muGPEFi(NWMI!#&|9*7wlN>`9e5$7#oN&GI)DJQg-5H8@+KjGr}- zYc^Palj}xwN)Qs`if<3W}gfe)T5Ds+3d~9VN7j2cKjf47B-J}YW=g{WN(0cXs&Q=vtIntVMw);sZ9v9@ZDe*=Ol?HjmP^I7i8pNj4)T z`v{NcmGv#DI6JEKlFpPwoH>b&HLduOD^E2N3e}nW3cIq8G#{e26@nIyH74V5{2H^` zR&Qc)NQ~2oFcB}uL0=0)KROJ)L02hXzStH_pj60W=sM7$pUA-3FgQ&Lxc)r1F#PKs zlr~3N`o+TVLy~u2U7N)hj5kd782kA`{2Hlu_;F*5XLQ5>ep3PpZ1+sVXQCH~GdMj{ zIGw)K+GV2wM{=z^~mSH zs1mKoW!OS}SAhLbP|%0-HUTC3v*s%TYWkI!+wW?f=6H*@(45t59CW-*9T?wWbBbAW zDIKS=9}F;Ic0gxWnQ_2=ZlmWCXw|c%)I%R&-KQlBU06dk=z{RWAuiMc2c_SW#g?XM z-vYIfuR;?&Er0`a(;}6r7>_s(8u@xU#DeTEz=(HtF+2d%K7*#jR@v$IYar{fwc_Nn ztrNp4I=%RW4To6)LE5sn1y?vVTcWZ>)o+#cYsW4jdzCZRc!g`A-=!2Q$}u+JWZLm7 z%ALVnv4oCgWsKX#7TXa}+Vor$%S~g=S;1Usc5;Q;kw=QgR*0keOpb3Eq~QCY@iO@% z8@GwuiT)Q5uK;U9Fi~Xd4RePAbN)Hz6c} zW6a@+*cgRbW@{bRgTF|{da$~?7;-M$ny|@W0b*vHCgQPsBIR}uT9$$d9^?Nb;eJ>ZWPPAVU)PUw@xhmk~ zDfeThm>p6!(@tC+ndkn_z)q37!>M-Y4I&=ihPmD>Q`vkIhEO>J6s8#+$g&n> zq4Q*kB;UZhr)gC~OU56j$+Zxt`u?!M8DX2GRXov(R=S^|O1=&40MCiw+&NMG zKwrss(n|ioxRrdTSjqon%Er@TCBJnUo4*`~)wQ-_CBL=Ve=t}mTniF{z)<}%Zk0n@ zO1Q?xBV+<1D8vF4NFtSX5yn7Pu`xu@_pEa5-60qVT`2+~4cdI*PMS!27@#1U9gL+x zpbVJP+@N-JZcu@_!Eew?*+hrzi@8Bc0^Q&st{s?5V>S?II1QCaPu}qi2Q?Q}&O)N_7%?_=i%`q-a79RaO>h@cb zq1NJXCnyKduOQ9kbi9lXumw}x_I+ga9rRv{o^x=#Xq5}OKC*bQ(j8V8M(&2$$dOBB zk}3Jf0mw9i@6Q+`n#la4a0uEr@s_;-Ghan(J;LUP=LmgA0OD!FNf0hEiF9E)nIrCU zL_&f>UHm>D&8p_R90web71-7PkG(g6tFdeQhWBpVX{Lz6R-r*E%}E1Ih)NNW#@(P% zgA@{lb_p4hu`*|fB1H)qLMRoLp=3x2MVT`6{nxqo4&B#vU(fSC-}igp@B8jEf5&;O zc^${G*168L)?VjaP|iyFUADbB>FGX2lC%3zYj#)EQBrSAPLc1;_UoxOw&lUdk*|vi z9zdiT(69;HWt=0vu=!`l8PL~pHet2_eMPx2_5N6a1jro9IIe<8jV$D55FPI#>jdsT z{O%sy?trYe-1_rDf$swK>G@y!T=IzE>6a*%QfsAA+Y%i_A`dL`TK9JkzdDlpuP0K* zZ)=2apb!{XB+tMG69coR3=D4Ql_bx8#va+VuKT21umUn*{Igt=iT7b-DekuId7No#($vT_ zbriGhDQ-#c#d+3gA&(Ywd@2l}!A^nf3bnN_@tAF-egcRB*(F6v-sJjX$~> z%!}KEnWwmWa9TJzM|3<=DbYT7zrqc@%cz0+P)E5iHEBY=;DQQxVD=~g)?H3LI59jU z3&C?a^Q%-BX&=P4C*33ZKJuAXEr5FO?2YyyEY^UhVc^g07I%=!a-LlYq{)zlYFI#u z%iNS`2iOwh_kQsI-u6*QmY#m)lR@>un^9;;L5$N2kNa~>^jH0`*uU$C$NjhaVMS7? zXa}kvM$*6fVa~n^^vR^JDIn&HsWZ&iW)i7U%T7Vyt>g;&RMVzSRnR=C;rA{iRhN%a z_Y-!sdD}KT3OQ>ohFEiX$G)HNa%I9bQPsO-#U+UPd?Ow@sUcre?ERs7nN%6=6mp8N z5881;f2_S6B8~nb)$H*w;kNuu zs0nHL5$I{yE|&k;^2xjor(=(zTK-?QM@%abdn7F%wc}VfYCvWl!a4B`6P{w19a*%o zCyO?Qd)U#nQ(-dL%lkN)<$JZm|T(HAR@m=R=+mkC~5M} z=0X-y+{rMAJiTV5xLC65RjbH|JVKX@o`?tiGWMd_m~-}^kOR=oRpAO*C6lwiER%#R ztf!%OvyAF!&mnQJX$Ai6x3TXL!wItA)P(ImZk7{yiv8ZFYLb~?ca`>JqlaztQ2KuQ z6i&FtuX>j#le20RLRO6o+tkS*$i*_Lf%`%{QwhBv{R7uDTrAsq5CDA-z7x&1cPO{v z%-6er3M=fq~;t2K2)=9W0;^I;^RjDpaxOSK4uIw#E162m!c-IrX_ zrCr@F19@Xv^bC9@3k95TvbJT|WTT$&_LQy4mq<)CG7?2PcBIRLesPEM`;bPIuq_P4 zF6u3`Vuw>@Fvkr+k||(p&86PEqKq*sT|yEWe8HTUvs%iC)F}dNA$FhuN<@-R5E3XC zh8K$V+bLHl6Y^MqJcOnse3M-A0p}UnMv%8+TdL)rBQbn8rRt*0L3UxP@7SG76)Y0I zN-lY`=2M&^=9W((0H%_J$rc!Tq*PzpMX-ln%m<-Dvv8CRl}-wd;lhzz&JNhE;XDfm za!D*{*ZySmGhzZ{Km_BPA`niF6B{mBc*!@#+0sF>@K(xk<*V?TjC0Rs&@hy?bg(x1 z8GaYlqO!(2#Yplt!C`T>uN63CswJg}2L%}xbEpa_4|pOT8U{DEI9%ME-H2o;xnWE* zUHfgy5J=sYmli@Z5ts&Hlku4tcuT^Anvm2WC7kL<&fj2ns=*KHA)C~g&@w4;5>A~G zn2wgHf&`Q$QxlQ%<)>1d{m>$1#F7189qo%!Va;>io4FYF6t|*;*!G4n3dosE4>439 zrV1D%d1WxVI9EYzT~ur8LQ)7uJ~=HNFZAt#(C59^YhFk7kXdaqi<~;ScT{WYI4MXo zGHe<)axs0^R6~l9VNuE$>DuAz?Fa?yAtgp9!;~x(TL__W%v9GNVKC@XKy4uz!%?lI zV?oM<$7l=V1X4Egykh~iCNY>Lke~gisbw?*tRMP z8YhcliKWU6L=Ivk3<(kbl(Ik6ON`oSZq8FmWYjN}8IEdC5l+T}H|e30WHP`&u}O9r zbSM&1Qmwn(i!ZI1YKGmv*z$t@Z`5n71DHe($AS!Hc?_5nWmf2Fb(1;5q*hsRrb{akDqCSSQ7`$y zT{|C7yOE-lX4%*1_oK3rmHFisKG+?VBDxXC=n@o4*I{e6ksn)f6--_i0qQtIY9+EA ze!Qwt6_Z@oh)%Li9S=;DOKSsp;YB05%b_Y{4YBPkB60db&fK~(sTM5LBn4+q?_7_3 zjp|b-<9O-i%lR+2^G(0}TuS5$TR}NxHF@NwxJDXXS&mQdLRxa_#SKGUuz&s@GQXp=nND3P%O{b%bX~7LG)0%&{yGCJjI=CDuGeM!9|1 zsCzJ9d!shVwNH`Ls@LSORmr4U+)EZ(O7t4lM?HZm1fXyRj7%!3k}abQ;ZdI(qThv= z%z5$wh}05c25CEIga}Cy7_1{OBnrRx9W0<@IYb~zIH8OY)z-c^p-do$7)X>5j)KRg z*KzcOYMe_zOpmGhWfEEUTtU_?$+V7wQT@t6$O@kUHU}$);|9#XvD%#hs@S_mG- z{>&dMkkBCrQHv2lvhSt%E2PX4OPNY0S0Ymr2auD!R4dqZ*t<%m5>%TI6yKcFN?Bot zqUcgO!n}Hln+bLe!(|*wuS}T^_B-OcU^s52=2gmUUG`Vfc}-2hIxSX!kdz_z8{@}K z2yW6o8vT^yS)rtcny0BIe5unJsdMP;2M9<$_oITdH!2We+~@14CoSqhs(><^$;Mj5 zRZ4)%@uGkvQQmPWSRnY`uF+TD{x{Sqeru!ALmOf5isag0+{J&Bj26d_k542u#9xuZ z&kW0;cf(OtDL8sDsafTD&FjQVQ9@AX(e_L1%j9dKm=sI8d_+nzQ5@xoZ%@)x5?VqxoNEWI}pyWG1kReeLpFDNcr*)GJY0lKP^5PW>9C zyD#c6Sj^n6rpDwbCHtr9yL(?FWV?J1CJQAA+fd?yh}ycLR5E<$H`sw~c(Fr@vVHc)So$pGW3Z9KE+Wkz?CwlED%h@oz@8 zc>eTO>H#LOs*Nl?;=B^_6)COH4JeobsmMiyrMF=yp-YQWQoTXH4sUa#8%v^9Z*(0X zwQCPfJ&Q23)DkS1qG{qmV|00mAwT*w`gPU2sw6!U!J0%MsUkmJ@cMlTjN>LivZ9eV z+!!)_AqJq}-1OO(sZ56J@P6SFm53rx`<|DgC&KqCNGMK>e+jEv zcOH*Qnrct`9*BeN`N%~T+6+1U9og!0i|}Mf)@Mq8c?0>7-*XBk7&0S;i(F{J@mDtC z>t00q`1K|ceYv?9kvq1PaUA7di133`;6u+(R)PP#W^-io(ydI4Mto+oU*bh0+Z=~} zCm7NqhxAINh!ZBoQ6SYqU_ZIV5U1_tmDDp>nx@eZ9ebqV_o8|8-L7DjbCLkOXzc^cQxw*aTg;(#x0n85&)oD= zhBLLuIYm)=R8G_&oGnh=NT$kErV^z6{%d~8$Zu}{{A4)!RU^MYB{KV5mJ*IXdWn}4 zs#&4lDRg|9guWUd^z&NvmH39gcI%5YJ9`rf!G7tMVk^+w%>Fd{{A5T4Lcw@F;f)XJ zz*A=*p*BkjumzNRWnVb7d7U4LFjO7z^G@<9zV=D#x|NtW`(5Ez}bK~4zQ&i+Ets_gF+t(7bkq@fPJY^!><3FPz? za-w7ibH|Z$uw~TJ85L|LyGx0}Ip+dGsMqBm)m}G}h5iB_o%*nT0WPK1e+k-@Ka-dYso`QADQ8&=P4ZWny zq~8>;A3)jTOv>Pnn-d>$#Mf zm={+;rl`r7vR`|ixZYqt z{QQYMyDD`?E15`Q6Z7Dtl44Z_6H1v~pEBbyz7RCKm3@mn<4yYrZhvLuR=Y%pJ)@qz z;&BQI_Lyze%AWluWyTAW_8JNu2>70C-$wF#XgVZc!k+sAXGKrOs|8ZMs~2$X{oIgHL;L)w?Ii{Y_$2a;A|}#Lal3)o zs`Yp~wz|#kWPgLt?V45*e1>es4G50igLG?JDA(7-4L`bR;)W@w!hHE0Rm-lcVO4!@ zG3sI8V_%7u#FtiZc)DAaPRgr?KUGg((Q>|L@%o&?9yGr%pQ0xnzaT}uNr2dRb z7kRR0*VlAVhpweqwWiE|)0RUGlN{O2=shQqFLs1Wt!g7QK?G;CfVQ`(UdBE9Df>3g znl~5deG0qj9o-27-LwhSqppNEWWme?qXe=$LKjU3O`M5mC^?9py!dNjjz}fa2t$QP z7YH{9A*HYfiTto#23`WN>DF?X2fGaM6>wlWiB6&-S^_?734ba$g0|Wd!@G2z2t4W@ zR-OUX`tj!dc$t2@LqC3QKYm<4-nJia*^ig&$7}WDP5SY6{dkprymLRE*^gK5$BXsj zY5jPqe!O8np3#pd57=M!(>t0xNPg!@2l$Ie|K!$I?$|f%BD(LygM%0!xhM2L*Z;pH zpe5Qy>7UF8k!=O!kepLE2#H8x1VCn^$>}-dTv0OSC!0=)8@Z&&h_>Iwv!njBU$FnM z{|87wd;Em)I{nI#t|c5j&Qs#uc}I~QL$3x4Z|q(argzZ0ZT~i(y%UliNgOD895bTr z{?nv}>h0=wXGJb7&x;e*D0-DP{Ng4bslwqOn5P!mET-PwZE(A8&55lI<7JWg3EnyuBw$_Iwm)q~2hLOk5}xVE4kp<9_&J zzkT;!@SE7w3QYg8M!Y((V8FqiBL#Xv8TpeR+$?@%{o;T^< zvEy0|V~lByj`5ClHwJrFT`cH6GfL^|={Y;Lov)NUc%f)-5uXYpNzgsNLF~G6n`qv; z<)NC=cK&mZ4fnh}NyGQ-CX2^Qgcd)dmoTd{)THiru-D`*9$9c!=-`WsnL4#at@~~Y zFV+1@liYAbBwa2;qPbXn(MpX;!Hn%eK56s?-YwmZfq`D0K??O+tTi)fULW3W6AD^( zkS>3@o3YyEs^rJ(4X0QRZG{707nPPYS+z@4&b22Q`b@0;YU#2+_4p@;gygB3s7h(gx)16<%SvMY6McKVzN$2l|Mg zWkLaNE?%E2{8;ge^@E1K5(*4iB47LSsd^3DHTI#@?P*W^LYvNg{n}BwVM=M?koy}> zd9?0-@E~r>z3i)H^@g)PG}*uRE57IFQgY~tP=VQW{e0Vp>f-fw@&itOn#Qm15i4ME zrNg6Xc9Y+cjtwE&F{J_4>rZ=D3`_7W$*K+=t^dq_*0yM|+x#}7#ped|DQb=poLxHc z{52KP3;CN}&!`J5I=$dm7JdoS%_g@xvJYGJk>5*t{bxB;n!6JA+GC%^!2_Q*-pG&}f@NxfWMOQW#D)x;0VAcY!Efx_2*YV?eIg zmzv%{PpitH!AqYF$a+^TUgw-3FthA5zmew{zr&vgdsNM^37GmQI>dC^qIdPOLX@$}P#cwzs%(Wo5oiTW^7u!iNhNlFQED(%N#`>CpZ&%7Xe;=eG#e-BERE zbiU}Vp{u?0CtPvT zP#3rszUU1hdrZnN)I)+zJFEK)vBD(c!iaJ?cvc}H@Ego zYfF{efuR9E!j|L)Y8!R9sxilj2#W?ADh%w>w{FT8cDugVIqa<#E3o@>ms;`JGVOg) zX$oxJEa6SxN-~F>Pfe7FY0MdI*pYA28`Bk0YTLSKh5R)O6Sc;on}k zt}8e{q9@C4H7}M(O=wj*RMud4QT$q#p zbF{Nt@p;*xto;wnQj@kzq^CJ#)HO=y+%B)~X@0Y%qUYm+IFEU(DZJ@x15~t~> zQ*CF3HL_x~JK{WkcD1~^SoY)R^0cb^ld>vq_vj}l6bq;ATe*wUyq^tO|VuQ5fQB|e5N_f_G49`qke*QY;?Yx_sqJU z3dxq{>e~gkzosVEJ)Jf%{iLW;>e(A%S$o(P#fjE#O8mk>hQqF!$!f2WkWiVNVeiME z;~aOXCua7l3NO2n*9=!J>{iOyb6Dc^<8;}h@-*j{uG;qBcX)Z#)jP%99b(@+bxvH5 z!#0h&Wwi>oy#^(xYRoE5*G+3J9$D3pCG@5%ZsCbCmQ6^SZIEV`Q&g+|K;s-?5v4_# z|59g}Nxz6WoPN-@WTUTq+JUiZ$rqlMRD8%zt!npb{BcRCqov_ObBWCNs>9-D3CUyP z^3%-DDOZJkk*x@rXx%b7Hu}f>fdYLNt#jKfIsAw6 z7SjF=7M0OMY7_bAm0I&XJ|ZIAUREKLzZ~BKA8apJVQDc*LmS&=f zYfWbvUov4i@J*UKWTAfOirohKS03uobL4arFS=--zQ0ZDbzseeCv<6@O)mqL4{yvF z{ZqSR?9KTaW9(*lDJ>hDrKq^0g(=&mJWA!vQnitd=hdw}zN;=CV5-usuvp{DlGEdM z-uO8F#6APfOQ}1Mci$V&ZjZMwo@ut$B)x4*)<4#MVL`y_&Z0p-%B$~v-y5|3XO7V9-f>dH zdgNp4zfHcn_iI${f-kmhw62v2Wgo^&O6-(&v3|eRLZo}Ydd0_{ZKpFaM9-OW3s9lw>abMtoSC!7) ztb2>XT58;eDOXGVTzGBl*4`b^QF?V&#sS)w_9zI^>e0xix_aVnM#&Sc} ziHF}`n^pBJXZv~Pk-GxEN56&~IJSIgd+zjsswW2?4?QvZ`ibLmtKJ{hY}YxoWOmd6 z3$wz5S5?1cbxkqOKKf(%{yp1E_f*-N~PrCwbaSa%$de zR>~=V#kyj5TiNqMpPY)ccc+~@liXO6@KoW#!-cLF-|A+RlJ?K?D=A93A#(KH$%26{ z+r2hU=xj82>>fD!oMGLb4wW<4lId>QguvI2gs%P<+?>O`Nshc*j4AYYnvgY5|AXnfwaX=MqU4DR}gQl4Ko9)j!=dD?{{pF;4>(;W) zJT-peYQM44OhqSpt<;Ox&!gwg60d)2?tjtoOZFG_&a0W*ZPm0CUF}`=KKm3pb>$Yu z$MO}2&F{-y`W`&9DpOCrP$~7ATzY2KO0}^=ZGN0z&a~j$ys=yAbF1x_wGJWF(K=I^Hb2vNX}-icob}*22Oe3N7=Ba=J~LWbM|xD!cbIJ}y8) zvtn7GZS<9WlHwKR{&^9qUhg<{ zV1JUB!mv}1R;{e_GfG=pt=>H{WDEc2F%x|^?Mz5A(@c9icZ;gChvgY<;V)uMM`nyT zU-|yfo2Jb_*+t{6{f6vv<_jD9rr5S~aigZ)O|AH^k7mEJ^4^_g7WlP1p=OA`{^fAV zn%%?r$Xoo9~DX#EtCl#)BR!(i|i^VI@-#+sHWk8B%dv2^y1lXXv1Zk<}7 zGx6-aw+rvRoP8?J!RG$ZH@!ilCVGijuY35aZNiP!8#aX1?tQD0_tkNe`?Pf&ieR!|*QgCSC43D_Fj~niJy=p((=ss(M zNSQ%fL2QFH&A((+N!4rZrlgH?ytO>PK2Q|cyJ+WyLl=bWFVipThnzX#B*Kv0IWv5C zuj<`{(rcF$MmCpA-f589e5CZanzi&$L!~7L8Ex!0T#%O-k9kIpYVcr<0iw}0Tw_X2wdVRK) zsFy_NP~iZ(>{7>FCXe*TChG0jobK>*{P-Q`oX31`Y~4F>vD^CS!OgmN$Lr@Do0=?b z)ndlaT$NC~B<<<*L7x`P|1qy^YKH0T_oIYX2U&WW)*ii^a=kLgAkNTY2Tx%BM$d zhtm8UN9LTm9eY@Y2{Dh04m`czHe!2qLz2i@JN3A{}Q_K%t=N8*0mRd9p zdsw?7_{od*?%D#!gqk(wgMu>V_yiug^uz0GY%=TS8yWfndvBqjh91dD-l+`nj}t?f zH|zqW7T));c(KoKakvTpi+j@rYHg~;*Zep*pde7M;7HHp{EVPS#Wx=uFZpUdp+4xj zRnvl~#}C9SkKLOzZ%l*MamPlQ@r^pi_={DZgGZg|E|_!rs#4|oZ99rC9F$byE86QW zn8dg)){vhk+NP`-x_sSSe>>^Rp2Lrw_0^cP!b<;(TY-pCqkXyM(yqFO@Nh8fCXnTwI0(xMeW4A((r`H;m zR{aMr+RPxKZExl22bZm8bYK1`dDVq=s^R*;!ZwGL(xTVj&m}GQdNRC8_Myhq^)<`8 zzSY{XX5@R$H7;JHqy8eH?B``eU&wne%j4c|}rC0Rf8 zD5|m)(1_6CAO7;_06X_5;>&M32rf1m%V%-4R8&gprWkXri+{mrX6TyJ=X`5L?s~q+ zT-f+kLbc&$#;K|d#qzo%XXc%rG-Ui4@l}Nv7EHW!KIp{Tq6Fs7i>J@>pM544nOD8@ z^?e(oJ=M`C1s;u&jd(mb;kmcyz^y(L6UBoUnZ_=1J@P`LQgn+*@16m)+_5W!_vUp< zZn0d)*k3(@{=q*$sO;xwFBi9XmS4rtApON5fkLl-*2*to*Qh_0dKl~K_hj1bujiUV zHat6 z0rGbG{L?;J2*i3cd30Pk;@31=J7hzLbwFuMh3Dz@CB6y6Mu%2s&GLVye_JeiTd}AO zzarn@bF&4pfghRjEC$VQ=qHqX_wG93m5iVBS>=@wC&=w)z6AzWtQcs=Zc+`H{4vkVb{z1rQ*vU zcNB^~Y8th+rn>fh?X$`LPfmXs`7j}5Rq5b6pU#b$A9^afS+39~I*H-h(kr@v3Tz_oBYa^S_Qpr7cP8IxOKiP+3EBaE#))& z51p^l7rav^w8gp6MOCT6@8W6S*zs3Arxm&R%k!y)s&73bT551bY(uuIV3WKCUq>ow z|3l@qEhgxDtyb4?y5bXbO<+ZIx78fi!)xs=(#vl&Bs1=n6;JKyXia|J-B5A7z+S8% zH*Ut>1dR>rG88JOl?`-sYEY6|+8tKo*MwFt>1OsO*sE;nDgT9 zK$cdqTG!`&+GS_i3TaWBgtK&qWR`rBNK8FHI;SzlB)`KjqAR9%QLAmK#WndAa~su6 zI%Dhw+q~i|%j`AQJ#tpKzEw7vo+?pnen_b`;i6$fnPJv7@lnOyb_3E6Zyc1Ges{rb znut}Mwrxm{S4woV)2;KxZqEC&f@G6Y%^swsOKfkf%Wx>aog@9Gxu^PLPsNsSuet?+ zF)hQ*oeLW0*(YWWmKZo!QdViGvSHZ6NlF&GSU&;}FUJIcONGejnN@~9^t9ala><#` zbPnGhrB?F8?Zq0BFYG{zvupc3&ALl++USqc@P2tJ8 z4BEh~1Z}63T(3==3!Lsf>Ap7jYDc$AN7>=6pBmEd=L(m!6)L12*{$6exCRpdw*q6{ z)`Zy}|KcVe+H9>h-nUV|dF3_XEWG}E&*)+)^5u8El+P(Upp}^Br<$2H=Eb$#q92W! zUmtYcHm+>_u`E6(uw+NR>yP|Q5z}LdhAYP@D4)_3mVG}$&3b~cc65YoSo0ajz^ae2 z)(QIFZu!v_J#{myn_DEmVglf4U1I9V^nugPrYec<$qKuXSZu-OS8}r+W*8)_Eo*jF zMM7eYpMA#UIOiPx*)ctr?7S*gtunkeGDE3*;c1D(dydMcKYr;9Yltx&6xnmkB1y?EBh;?^{wtcI$Eab0h0SY;=IY|}!boU$~H z2kN&fi3sN~l${qzo3Yf>568UNSYmtdK$<*0bEG!*Lq*Bc_NvtEOFtUD8d^G(WJ;PZ zh##){J|;QA%q%TGF04xVTtJ2Fm&q;G6X*Ykj(yAuEVvfu+WpQ+#Ne~7;gTYe+`R08 znVrdIw{^BC{|G1TpI)}efIqP|gwMKkp0LP~$3hil_}=&Od_nucYa|9a7D?WlxKVuj zng?RDJDNp?ef43~Z*dy1S7U(a0-H$+WA=v)e{s`h=qANJOBm)x%o@9l*|I}%lyaA>+R`&B>gO9rs($ydRxus0 zSYxq5_qfwbu8jY9W2dIUz7t_PQ!g!^`|5MVh)DesQbID z;@FRuuAF|>euX$=@bXHpQ8Dq62bNAAu_aa@>(;XCw|)ebj6W3|XSpuau%|JkXH#2X z!P=lj(QoGaYtP~f=rYvvI=PbJ9V~0+sea7YqwTUI>rh>-kI#kYzKZxN7TIVyJ zn&$bwT|4){x;(e`G~ETN-}o1XTDiKP&SsgX z%ObxCFJi?7JH|{ieD{JW`DWkVId46>JzF)Oy=Z%zRMUP;KlydQf(t(e6?J~US6%*d zd(htA*+Mxz!=%Q2tB;lcy7%hjFAH*`x@c{-AIcI|b|y|5^WNG;x?99z>&FW9{hw2} z^?b7Lz07vv&y5-ve=KP_otg6FX=Q zsSHg&WV(C1kMpr@imyLxeHwo)v!wjX-nbK$yA21W@9Bxj&L{{~-VrT0XqR^Jw4Gh| zR;04^wAN2|7v3P=yl`V>NSx1=Xw;%NtxO?nC$k*KVrOQvM4xD}>^!UKzC$5h^ z{C<_(A)R*315vY=94s`m$oissHQRVf*Z$={j_xbnzNg@7MAaFgp|8%GA1*CieTSWY z=aJZH$-IeqQzgAlrLblf*D3m+m$h{-a{456E^W7VNn`Sv3kpvYF1jv!Sel{xmbCw( z5$!tBS)zc%DDKq)_m&HxXF5U1eKYSu8oH6Cj-Ow@HPOJ>mkd~7* zJ5cy-om|!4VU?|8_eE@+eCj&$I3w2PX4Zt0rg9r@%pWk(uONRNtxD6uFkt%|cd<3| zI-gB?xqTgL?YetUjGvyV+-UC_t)pW0`i0cmS#zVGo4>6W|KfPjzf=87w(a)JtFDS# zYR~q%*sq)#`l!z+TnUy{?yteTmsRH&YrE_ZFL+RCi+KWv8bSumGNb#L5! z#J2VGE}6NLl#ZCq)gHd-EIa#ijm(nDMaOR)kt|&)+$?m(BXMC?SaplSkizbqqIq_* zO(yrsUabj;i+{STLQ~>Ov~6I8xa7WwJpXb}fpXP`qAWYh(2S4YYkD`m^L2=u^Uy$E z;@sF7X9dkw4xH+^t{|4Qf7PQ?!;JjuR;pJoP1_POvU}o~&-@8HH~FS%nkA`jnfvyP zrH8ZF7h&xYGmbPJdS7||=jNt2*5ixV&bx;Ay%`(Ex46@`_@+%G0`&ItxzSdOPpz#Mv+JEwpinJJtJU=zXt=qknbRgHF6m0% zE1jO9Ub>XIybY~#UIAfD09>SBu0L@m zL|>L6;xs&b=FWq6ReKAUt(BH6Z;sq7)o@4cc)Qy%YpZb9dhY5KTa6sSV=Fuy=2Bap}X(d-j6NEr22fZX#J`g<7lyEgs#(=yoc>O zA6z{B^?IAARrdO!of2Nzb^*dByBtds$Lc>y-@HR_{P>>^W1P?J*xTCpeZAY_fx69u zqjU7f-<3|DdW_$!#i}@A74!Miv?cQwd>S;hZQhUfvrRLCRtt@)HTAT-o^tnSoIy_I zgOwJBAy>w@EnmVuef8G62lIwM2yM>J8_*>);>GkMF{=hu1k@dimdHO>mc4);cim`r z&d+#d*&Q$Sv-CwbC^&|!^&NcJ^x@*NaiNXlw$_}RDk89|Gq0#++kWw>%jEOMkC;+z zYWpo@o<`fFPgflM(hl7|l`}F@>~5^@InS+)fKoh_T{Q@*OdvY&`J#-B2y%3FwKaRTq+@)v=&aGYyP~y(JkEg|R z@0qxx(TO{`!;fbKIQM*X+)I)BzI_mMK7Ii~Az=nXL}b7KQBg5m;>n=qe}5^^Nc{x_1%+@4<6>|x5$-jh-zD1b zBJ%oo7m?+^yNI0sCl}Gt|K!4sCh36#2Mr=>B&y@7i>Idk>glhJe-Qt$e=mM{d4>Ps zHT-{g(WrJNh?XXZ?@|b&^$Frr5rQ}eTM!2X3gWO!L7Ye_h!6D$(uM&-z+gZE7y-}$ zX+Q)R3XnfpKpYqj@B@PYQ9vFL28IBQlmUvsKEMlj1`Gr?1G9i?U;>a2gaaRd0YEY^4Y&oU0Y`yFz-wR_uoG|v z9sxu0Bs--SPZ-eL;yB06}Sng z0y#hc&;|?zb^!B$2EYh72gCqh0b)6804v}cFd8@ruz;6;08PaCIJ_K6~GT*5Na@pE<)P^x&_n;)Csf(v<6fMR0s4l z=xNXh&P*Knn&=k<=pwmGsKr2AiLDfNzfgS@51Pugj2W2eKy5&6K+8ePLC1oQ1w9OU7}O8c z5A+r2E6^dJLqNBKZU=P%bpfpdtphaxH2^IHEd-4QjRyS;`WaLbR1$O}=tfX`P2XzN+0&M~{12qG^2zn88CFn}fUeI1p zvIEr|U;-Y16yN}80bu|Gumw~Ae?ShH3m5`R0Rg}gPzHPe8NeCP1tI}{q>uni0j>Z_ zz<$6Rcn+ZVr!j;@ga!zT3W)KG^GVQoJ6(A_6b2HwTq-P}{Wh5Z`dkIK+35diA@U0vQ z4mbcFKo}4YWC53e zr@(*r;>m+YiA;V6Df90jGWs1ndGY9fH~)VM&(jf+)n8p9ES3+`C%`*0AT-1?Jcbq# z8P4(yX0k$ja5hFj5R1tQ4-XCRbEX&{&qznYL5%)_0Ser-{O1utJejph$p` z1lWS_M0{8S1HYML$k1dN&kPzFO8{1H$RJ`u14--`Goy#)ZQ zT_l4hBkY9x<$wwJdejGB$YBHleziUI2ZJMdo+AJ)mhc`1y6$bUcbSHeA}Wf>FT ze--(obuzpFMeqkeVNs0Lz+~_*5FY|$xB@umQe-RgpMv{Xz!-cj^2aWJ#v(us{25Rp z&tza4_-@39VHf1TT&HCvf$@7`!(8%aA@P zuO~1H{60{$bjB*c0{k=hlk&_1hJxSB)qf0lBk}mz`d0JFU13wY`1Frr9!Naaa@RMH#v8NPZI`~hBPwL|W4Eas}(clf>f0wI&Kk#G0=Yo>_ z)&Vx)-yuGcr#palE3%iX|CQj)z&CRB9|~R*d?_fgr;UI;_@7+;|6TjPjP!~AJpd-c zXM@s!c)%QdGyIAE=K^xz)42Ly3f>U>J+A)!!K;AJ110)O0&Ky*M|`6HziaUQtKM{N#SO0IHsCuDpU9Kf{xiAy=e7SPuKq(2Mib#Lf=U7#0ekSh zG$}zkZHOS9K1fiSCND^rk`}}~f*@T$R?vbrT##-qCCE>c6QuLW2#%sD2-2AY1x0AX z1nG>yf~#oeD7us&AL6e<{GlYioV1`Yi7zB8=t<&xNC{#-QIO6rBdAT{YYh|>C-KDw z3tpz;M}-82ghq!j$tWqD6+wna7)M3=hx*{S@X%0ZuxCgNGl&)97wOLo4aZ0=BGNO& zo5hTX3HAyNilF(kJbf_O@(%ZA1_wk0dq#Tu(*i=4cm@TKVI4QHcc>4m&ow9@k`?Y5 zq{&G%f*HYz?DLC=3=PM4&?_j^JCK`eM4xA0a->|op5aU{PwznZdWVLGv%DjDrS$e^ z{ozcF7W+H$ip>qnDK9A|FV{bc^=FYGD^!OkIBrUq1or#0F1+IY=^7mn;u9Lpj0lMR zB@wTHzQTvI!dRZaG+m67X8bSB~0_bGREbl@!uLB@*@5H z;O@^+<)6bu-r$il*6d4*8W&T;L7r1zzb0Cpm*Jl91O>m{ z^W1)?mWVSg^Iy-tU4o(2*e?@i*^up%uYLxX2}2D2=fDxSC<$Be)~ChphtlEAvBsLrq=|3 zBr6(?sYjzN$8=ivG@KiQX|eT~I#j^)fEcEbJ#c>&$U;1GU4+N9ZWxfLgfu{5+%z#v zjU-}vicC?Iz}*B>WygURKrMJ>OdXW~9+=`8hd5^tHVk2pW18vAZsdEEMti!8M$6cV zeA8*PQyFl_5Oov$eL$<0(`ZZK{sQhn2or{KY=T=75Dz@f!};K-a|Wq5a0)mFTmkL@ zb-+vDEzko9O`+4Ifsw#Cz!cc6*fKrLjV=v z_m=;A?<0mjKmt7w=e?Ko8>AhRHcZ+tX}iO*Ct)OwiC#hxy^}Il{KsIGT7{;Hy%Xx# zzoCIW44PQ))5cy49jwFZVb8-vtV0`O?|?BaHYfmVNj^bAG|QkMG?F>oB`HtRKcaPV zsXOLlyaGa4G~T>S-_3-+yUC$ZSS7>E3!+i~_eJ9FNuzNoCm@$0JJfg{R*27ao*EJm zIl=vRu8(o>4EGF<;CVTO2L!Wt%q$j}z2PR|#EP{1wUGDA(UzJb;)QaKLaqE*k?tt6 zd!#3p@(Cc5I^-raj1>ZkeuMl^tpNJP`UXWs_=87E-W(DE z!VMZ09uN{qLWf0Bz97UGD~mo9A(Jq;iD0n;DH0jRsiI$OBnz7Hi;W85rW+lO*(!9> z)H9ApCv)bVC^vFX#K;XoSRzVyo&zOruIF#zpn0xXxPDyu|Hkzt!I3!Eha+(=^QXjl zjxizLyxg5|?+^-M@EqKIJtHD9chzTBu~w8oiCIp;6d+byt;tLlWv4vbL}U5?%;oIB z9XOyyC9}}~fcO8+tqN|P;3I!?GjXERzW>Je7lwx;ofZTv1$bA|Z}(eqe*icIlmJ!0 zQ=k>-2587r43Gnuz&Jn`Faaz92Veo<4@3g-z+4f!8hpOqL8Mo~rN!sV={j&ffzKDs zJS;Q<_lA7FROeyD=i8Tm(j`#bV7D6ihXXS? z1pkwhGs*Fp_$S%hi8D395KzH7HG4ZZQa-&O6cw4hA85TF7`>f*_#7(XB|pH4+1sh8 zs7ZK5$q$O4zjzvlhmT_KXGP5qV|l#h2hCnZ21$hcgD?1S6yX=ILK6PPcOplov z;lokE@Qq&x|6w2a52V77(FZjS-@BSfj4CgrqzI95F8Hf~CtpRTF2a-eJf2Uj_vlgD zAN-en%s##o{=FyT`}hxv;8DrG_$cNdJj#blrO&^Y;vrn#MGD>9`-|tfQ|g9c{O`O- z+hj7OC@Uu|gtPU@FV?!0MNh5EEk0%(u>3n>HzFg_Csm`*saY%$|2bGOdeEosW4g?`)gs$PpB1u zFX`a@fR34rQ0(pvqj@5H3`*k(j(Rjfr5xiMLXJOmO~iC3%rN zN#5a99$u6y@e86#OY-r=K6_GQCRg^qO6UW>V1Q_Yl#s}X)Qe*?Bs{5o@NfA=!Iz{I z3O`OM{#t&d77hp*j@TpwNi&qH6(_tOe2APP5r#-L62820k#HmrjvFsWQp>;2>tE}I z@1`OBFr-OJOLRnP?r%ly){YR0o^ zj#ZMHPDH2}gpLCJ*Z4&4q)qbdh)DHU_-K@m5ya#{(oL0-Q9 z6+7X`z!R}J?b-(=CekB1Ai5?0d!v^iHIGKAN!|P?3*odsPJEtT{!D|3u%U<@)ffJk z^^lfJq{C^G9C>o=jL4H?d%Tvwu@zqb!_xr?w-_k|aBYj!e*&dv3#3Zoa%_&%lkxgm zCe?S4o`Gi{zw3un4r1#>J0YN?$0Yp$=_xtwlJs>P`}BrA@#I8o{9pC_&vruOOVT4D zNsh#ldD8r^>0GDJwmE$PM?Rcq2B++#4m_!GN<<_R4Ed9Ol$4z0L`w3f+vs8D1y6oyiBdQvjlq2c#eqy>_Zh(7NA*#b<^zyCXJn^LXoukFO- zf58^WsLB=d!N1qTnbI%O60en$Sp}?vKq|kF>2j&E@GOMG{gO{E6~_eYV04U8e?47@ zpJUu;^ytyBOkVAH zV_D3*kiZzx6FcWggIFDB)J^7*$cUYz2{Othz3=bsQbgbd`SCPmV^g$dXf4)SueDF> zj@DzX4_eaNKEu=)W4};qyJq0t^Q|yx`DKTyuoM#O#?H7sRm949tLX+HXH0PIAn0m02L?M z(!OeconWVvt^>oydIF6$Qs=pjsP0hRW4bCv5hmeg=w463dUtvukE(U{tzdx{^k0qu0hA#>yt9CV?iaOm>^_na(wpH%l_3#dG4zXgTP$=rfG2 z8&8^eVWN`B7nA%+v`w7fFb&cU)!s1S+5{Dyg*roZRdu6uW%btTZPha|aW+w(6lF#x zFvz@votC1umbQcT8twPm_jOL|GYm`(XBy@iJv4r8{Mh7$3GEc=2WYfWTB=%y^aAu_ z^o0#%3`QClLT+vbAqFv!+dhL623HL37&IER8SohnGh`Z0F!VIsX?Vb}$gm935HcER zq-QkU$koWpXpvF4(Q?$R!l=&Zu~DnhXDqZZjE5OBja7`bjg5@$j2(?*jn^1>vo; z$T-iq#Q3W5UE^kBzKOCEhff?marLChrn5}FOv6oAn{GDUXPR$XW?F6f%=CjPpV>e& zMY9QJlg(zCd6|Wqtv1_iw$Ciztjw(1?3o$u66bec0$Qj{73X(f0$MU!a#|`{#5cotuI;v+EOMmCUPbUCQK7$6BUzjCR!%CCNwF`_ac0W z{w4jZ`Zx6dubnZwV0OjqhS?pn2WC&qUYNZx`(XCP?1$MOGX`@Oa}IMJa{*wuNtnx+ zE10X8YnbZ*=NTCkfaAwN>JM-Nip7w_kjGHKP{dHeP{vTfP{mLKn9212 string OBJ_ \b, AOF object +>12 string LIB_ \b, ALF library + +# RISC OS AIF, contains "SWI OS_Exit" at offset 16. +16 lelong 0xef000011 RISC OS AIF executable + +# RISC OS Draw files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string Draw RISC OS Draw file data + +# RISC OS new format font files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string FONT\0 RISC OS outline font data, +>5 byte x version %d +0 string FONT\1 RISC OS 1bpp font data, +>5 byte x version %d +0 string FONT\4 RISC OS 4bpp font data +>5 byte x version %d + +# RISC OS Music files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string Maestro\r RISC OS music file +>8 byte x version %d + +>8 byte x type %d + +# Digital Symphony data files +# From: Bernard Jungen (bern8817@euphonynet.be) +0 string \x02\x01\x13\x13\x13\x01\x0d\x10 Digital Symphony sound sample (RISC OS), +>8 byte x version %d, +>9 pstring x named "%s", +>(9.b+19) byte =0 8-bit logarithmic +>(9.b+19) byte =1 LZW-compressed linear +>(9.b+19) byte =2 8-bit linear signed +>(9.b+19) byte =3 16-bit linear signed +>(9.b+19) byte =4 SigmaDelta-compressed linear +>(9.b+19) byte =5 SigmaDelta-compressed logarithmic +>(9.b+19) byte >5 unknown format + +0 string \x02\x01\x13\x13\x14\x12\x01\x0b Digital Symphony song (RISC OS), +>8 byte x version %d, +>9 byte =1 1 voice, +>9 byte !1 %d voices, +>10 leshort =1 1 track, +>10 leshort !1 %d tracks, +>12 leshort =1 1 pattern +>12 leshort !1 %d patterns + +0 string \x02\x01\x13\x13\x10\x14\x12\x0e +>9 byte =0 Digital Symphony sequence (RISC OS), +>>8 byte x version %d, +>>10 byte =1 1 line, +>>10 byte !1 %d lines, +>>11 leshort =1 1 position +>>11 leshort !1 %d positions +>9 byte =1 Digital Symphony pattern data (RISC OS), +>>8 byte x version %d, +>>10 leshort =1 1 pattern +>>10 leshort !1 %d patterns + +#------------------------------------------------------------------------------ +# adi: file(1) magic for ADi's objects +# From Gregory McGarry +# +0 leshort 0x521c COFF DSP21k +>18 lelong &02 executable, +>18 lelong ^02 +>>18 lelong &01 static object, +>>18 lelong ^01 relocatable object, +>18 lelong &010 stripped +>18 lelong ^010 not stripped + +#------------------------------------------------------------------------------ +# adventure: file(1) magic for Adventure game files +# +# from Allen Garvin +# Edited by Dave Chapeskie Jun 28, 1998 +# Edited by Chris Chittleborough , March 2002 +# +# ALAN +# I assume there are other, lower versions, but these are the only ones I +# saw in the archive. +0 beshort 0x0206 ALAN game data +>2 byte <10 version 2.6%d + + +# Infocom (see z-machine) +#------------------------------------------------------------------------------ +# Z-machine: file(1) magic for Z-machine binaries. +# +# This will match ${TEX_BASE}/texmf/omega/ocp/char2uni/inbig5.ocp which +# appears to be a version-0 Z-machine binary. +# +# The (false match) message is to correct that behavior. Perhaps it is +# not needed. +# +16 belong&0xfe00f0f0 0x3030 Infocom game data +>0 ubyte 0 (false match) +>0 ubyte >0 (Z-machine %d, +>>2 ubeshort x Release %d / +>>18 string >\0 Serial %.6s) + +#------------------------------------------------------------------------------ +# Glulx: file(1) magic for Glulx binaries. +# +# I haven't checked for false matches yet. +# +0 string Glul Glulx game data +>4 beshort x (Version %d +>>6 byte x \b.%d +>>8 byte x \b.%d) +>36 string Info Compiled by Inform + + + +# For Quetzal and blorb magic see iff + + +# TADS (Text Adventure Development System) +# All files are machine-independent (games compile to byte-code) and are tagged +# with a version string of the form "V2..\0" (but TADS 3 is +# on the way). +# Game files start with "TADS2 bin\n\r\032\0" then the compiler version. +0 string TADS2\ bin TADS +>9 belong !0x0A0D1A00 game data, CORRUPTED +>9 belong 0x0A0D1A00 +>>13 string >\0 %s game data +# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version. +0 string TADS2\ rsc TADS +>9 belong !0x0A0D1A00 resource data, CORRUPTED +>9 belong 0x0A0D1A00 +>>13 string >\0 %s resource data +# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian +# 2-byte length N, the N-char name of the game file *without* a NUL (darn!), +# "TADS2 save\n\r\032\0" and the interpreter version. +0 string TADS2\ save/g TADS +>12 belong !0x0A0D1A00 saved game data, CORRUPTED +>12 belong 0x0A0D1A00 +>>(16.s+32) string >\0 %s saved game data +# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter +# version. +0 string TADS2\ save TADS +>10 belong !0x0A0D1A00 saved game data, CORRUPTED +>10 belong 0x0A0D1A00 +>>14 string >\0 %s saved game data + +# Danny Milosavljevic +# this are adrift (adventure game standard) game files, extension .taf +# depending on version magic continues with 0x93453E6139FA (V 4.0) +# 0x9445376139FA (V 3.90) +# 0x9445366139FA (V 3.80) +# this is from source (http://www.adrift.org.uk/) and I have some taf +# files, and checked them. +#0 belong 0x3C423FC9 +#>4 belong 0x6A87C2CF Adrift game file +#!:mime application/x-adrift +#------------------------------------------------------------------------------ +# allegro: file(1) magic for Allegro datafiles +# Toby Deshane +# +0 belong 0x736C6821 Allegro datafile (packed) +0 belong 0x736C682E Allegro datafile (not packed/autodetect) +0 belong 0x736C682B Allegro datafile (appended exe data) + +#------------------------------------------------------------------------------ +# alliant: file(1) magic for Alliant FX series a.out files +# +# If the FX series is the one that had a processor with a 68K-derived +# instruction set, the "short" should probably become "beshort" and the +# "long" should probably become "belong". +# If it's the i860-based one, they should probably become either the +# big-endian or little-endian versions, depending on the mode they ran +# the 860 in.... +# +0 short 0420 0420 Alliant virtual executable +>2 short &0x0020 common library +>16 long >0 not stripped +0 short 0421 0421 Alliant compact executable +>2 short &0x0020 common library +>16 long >0 not stripped +#------------------------------------------------------------------------------ +# alpha architecture description +# + +0 leshort 0603 COFF format alpha +>22 leshort&030000 !020000 executable +>24 leshort 0410 pure +>24 leshort 0413 paged +>22 leshort&020000 !0 dynamically linked +>16 lelong !0 not stripped +>16 lelong 0 stripped +>22 leshort&030000 020000 shared library +>24 leshort 0407 object +>27 byte x - version %d +>26 byte x .%d +>28 byte x -%d + +# Basic recognition of Digital UNIX core dumps - Mike Bremford +# +# The actual magic number is just "Core", followed by a 2-byte version +# number; however, treating any file that begins with "Core" as a Digital +# UNIX core dump file may produce too many false hits, so we include one +# byte of the version number as well; DU 5.0 appears only to be up to +# version 2. +# +0 string Core\001 Alpha COFF format core dump (Digital UNIX) +>24 string >\0 \b, from '%s' +0 string Core\002 Alpha COFF format core dump (Digital UNIX) +>24 string >\0 \b, from '%s' + +#------------------------------------------------------------------------------ +# amanda: file(1) magic for amanda file format +# +0 string AMANDA:\ AMANDA +>8 string TAPESTART\ DATE tape header file, +>>23 string X +>>>25 string >\ Unused %s +>>23 string >\ DATE %s +>8 string FILE\ dump file, +>>13 string >\ DATE %s +#------------------------------------------------------------------------------ +# amigaos: file(1) magic for AmigaOS binary formats: + +# +# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis) +# +0 belong 0x000003fa AmigaOS shared library +0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary +0 belong 0x000003e7 AmigaOS object/library data +# +0 beshort 0xe310 Amiga Workbench +>2 beshort 1 +>>48 byte 1 disk icon +>>48 byte 2 drawer icon +>>48 byte 3 tool icon +>>48 byte 4 project icon +>>48 byte 5 garbage icon +>>48 byte 6 device icon +>>48 byte 7 kickstart icon +>>48 byte 8 workbench application icon +>2 beshort >1 icon, vers. %d +# +# various sound formats from the Amiga +# G=F6tz Waschk +# +0 string FC14 Future Composer 1.4 Module sound file +0 string SMOD Future Composer 1.3 Module sound file +0 string AON4artofnoise Art Of Noise Module sound file +1 string MUGICIAN/SOFTEYES Mugician Module sound file +58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file +0 string Synth4.0 Synthesis Module sound file +0 string ARP. The Holy Noise Module sound file +0 string BeEp\0 JamCracker Module sound file +0 string COSO\0 Hippel-COSO Module sound file +# Too simple (short, pure ASCII, deep), MPi +#26 string V.3 Brian Postma's Soundmon Module sound file v3 +#26 string BPSM Brian Postma's Soundmon Module sound file v3 +#26 string V.2 Brian Postma's Soundmon Module sound file v2 + +# The following are from: "Stefan A. Haubenthal" +0 beshort 0x0f00 AmigaOS bitmap font +0 beshort 0x0f03 AmigaOS outline font +0 belong 0x80001001 AmigaOS outline tag +0 string ##\ version catalog translation +0 string EMOD\0 Amiga E module +8 string ECXM\0 ECX module +0 string/c @database AmigaGuide file + +# Amiga disk types +# +0 string RDSK Rigid Disk Block +>160 string x on %.24s +0 string DOS\0 Amiga DOS disk +0 string DOS\1 Amiga FFS disk +0 string DOS\2 Amiga Inter DOS disk +0 string DOS\3 Amiga Inter FFS disk +0 string DOS\4 Amiga Fastdir DOS disk +0 string DOS\5 Amiga Fastdir FFS disk +0 string KICK Kickstart disk + +# From: Alex Beregszaszi +0 string LZX LZX compressed archive (Amiga) + + +#------------------------------------------------------------------------------ +# animation: file(1) magic for animation/movie formats +# +# animation formats +# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8) +# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com) + +# SGI and Apple formats +0 string MOVI Silicon Graphics movie file +!:mime video/x-sgi-movie +4 string moov Apple QuickTime +!:mime video/quicktime +>12 string mvhd \b movie (fast start) +>12 string mdra \b URL +>12 string cmov \b movie (fast start, compressed header) +>12 string rmra \b multiple URLs +4 string mdat Apple QuickTime movie (unoptimized) +!:mime video/quicktime +#4 string wide Apple QuickTime movie (unoptimized) +#!:mime video/quicktime +#4 string skip Apple QuickTime movie (modified) +#!:mime video/quicktime +#4 string free Apple QuickTime movie (modified) +#!:mime video/quicktime +4 string idsc Apple QuickTime image (fast start) +!:mime image/x-quicktime +#4 string idat Apple QuickTime image (unoptimized) +#!:mime image/x-quicktime +4 string pckg Apple QuickTime compressed archive +!:mime application/x-quicktime-player +4 string/B jP JPEG 2000 image +!:mime image/jp2 +4 string ftyp ISO Media +>8 string isom \b, MPEG v4 system, version 1 +!:mime video/mp4 +>8 string iso2 \b, MPEG v4 system, part 12 revision +>8 string mp41 \b, MPEG v4 system, version 1 +!:mime video/mp4 +>8 string mp42 \b, MPEG v4 system, version 2 +!:mime video/mp4 +>8 string mp7t \b, MPEG v4 system, MPEG v7 XML +>8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML +>8 string/B jp2 \b, JPEG 2000 +!:mime image/jp2 +>8 string 3gp \b, MPEG v4 system, 3GPP +!:mime video/3gpp +>>11 byte 4 \b v4 (H.263/AMR GSM 6.10) +>>11 byte 5 \b v5 (H.263/AMR GSM 6.10) +>>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10) +>8 string mmp4 \b, MPEG v4 system, 3GPP Mobile +!:mime video/mp4 +>8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC +!:mime video/3gpp +>8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC +!:mime audio/mp4 +>8 string/B M4V \b, MPEG v4 system, iTunes AVC-LC +!:mime video/mp4 +>8 string/B M4P \b, MPEG v4 system, iTunes AES encrypted +>8 string/B M4B \b, MPEG v4 system, iTunes bookmarked +>8 string/B qt \b, Apple QuickTime movie +!:mime video/quicktime + +# MPEG sequences +# Scans for all common MPEG header start codes +0 belong 0x00000001 +>4 byte&0x1F 0x07 JVT NAL sequence, H.264 video +>>5 byte 66 \b, baseline +>>5 byte 77 \b, main +>>5 byte 88 \b, extended +>>7 byte x \b @ L %u +0 belong&0xFFFFFF00 0x00000100 +>3 byte 0xBA MPEG sequence +>>4 byte &0x40 \b, v2, program multiplex +>>4 byte ^0x40 \b, v1, system multiplex +>3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header) +>3 byte&0x1F 0x07 MPEG sequence, H.264 video +>>4 byte 66 \b, baseline +>>4 byte 77 \b, main +>>4 byte 88 \b, extended +>>6 byte x \b @ L %u +>3 byte 0xB0 MPEG sequence, v4 +>>5 belong 0x000001B5 +>>>9 byte &0x80 +>>>>10 byte&0xF0 16 \b, video +>>>>10 byte&0xF0 32 \b, still texture +>>>>10 byte&0xF0 48 \b, mesh +>>>>10 byte&0xF0 64 \b, face +>>>9 byte&0xF8 8 \b, video +>>>9 byte&0xF8 16 \b, still texture +>>>9 byte&0xF8 24 \b, mesh +>>>9 byte&0xF8 32 \b, face +>>4 byte 1 \b, simple @ L1 +>>4 byte 2 \b, simple @ L2 +>>4 byte 3 \b, simple @ L3 +>>4 byte 4 \b, simple @ L0 +>>4 byte 17 \b, simple scalable @ L1 +>>4 byte 18 \b, simple scalable @ L2 +>>4 byte 33 \b, core @ L1 +>>4 byte 34 \b, core @ L2 +>>4 byte 50 \b, main @ L2 +>>4 byte 51 \b, main @ L3 +>>4 byte 53 \b, main @ L4 +>>4 byte 66 \b, n-bit @ L2 +>>4 byte 81 \b, scalable texture @ L1 +>>4 byte 97 \b, simple face animation @ L1 +>>4 byte 98 \b, simple face animation @ L2 +>>4 byte 99 \b, simple face basic animation @ L1 +>>4 byte 100 \b, simple face basic animation @ L2 +>>4 byte 113 \b, basic animation text @ L1 +>>4 byte 114 \b, basic animation text @ L2 +>>4 byte 129 \b, hybrid @ L1 +>>4 byte 130 \b, hybrid @ L2 +>>4 byte 145 \b, advanced RT simple @ L! +>>4 byte 146 \b, advanced RT simple @ L2 +>>4 byte 147 \b, advanced RT simple @ L3 +>>4 byte 148 \b, advanced RT simple @ L4 +>>4 byte 161 \b, core scalable @ L1 +>>4 byte 162 \b, core scalable @ L2 +>>4 byte 163 \b, core scalable @ L3 +>>4 byte 177 \b, advanced coding efficiency @ L1 +>>4 byte 178 \b, advanced coding efficiency @ L2 +>>4 byte 179 \b, advanced coding efficiency @ L3 +>>4 byte 180 \b, advanced coding efficiency @ L4 +>>4 byte 193 \b, advanced core @ L1 +>>4 byte 194 \b, advanced core @ L2 +>>4 byte 209 \b, advanced scalable texture @ L1 +>>4 byte 210 \b, advanced scalable texture @ L2 +>>4 byte 211 \b, advanced scalable texture @ L3 +>>4 byte 225 \b, simple studio @ L1 +>>4 byte 226 \b, simple studio @ L2 +>>4 byte 227 \b, simple studio @ L3 +>>4 byte 228 \b, simple studio @ L4 +>>4 byte 229 \b, core studio @ L1 +>>4 byte 230 \b, core studio @ L2 +>>4 byte 231 \b, core studio @ L3 +>>4 byte 232 \b, core studio @ L4 +>>4 byte 240 \b, advanced simple @ L0 +>>4 byte 241 \b, advanced simple @ L1 +>>4 byte 242 \b, advanced simple @ L2 +>>4 byte 243 \b, advanced simple @ L3 +>>4 byte 244 \b, advanced simple @ L4 +>>4 byte 245 \b, advanced simple @ L5 +>>4 byte 247 \b, advanced simple @ L3b +>>4 byte 248 \b, FGS @ L0 +>>4 byte 249 \b, FGS @ L1 +>>4 byte 250 \b, FGS @ L2 +>>4 byte 251 \b, FGS @ L3 +>>4 byte 252 \b, FGS @ L4 +>>4 byte 253 \b, FGS @ L5 +>3 byte 0xB5 MPEG sequence, v4 +>>4 byte &0x80 +>>>5 byte&0xF0 16 \b, video (missing profile header) +>>>5 byte&0xF0 32 \b, still texture (missing profile header) +>>>5 byte&0xF0 48 \b, mesh (missing profile header) +>>>5 byte&0xF0 64 \b, face (missing profile header) +>>4 byte&0xF8 8 \b, video (missing profile header) +>>4 byte&0xF8 16 \b, still texture (missing profile header) +>>4 byte&0xF8 24 \b, mesh (missing profile header) +>>4 byte&0xF8 32 \b, face (missing profile header) +>3 byte 0xB3 MPEG sequence +>>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>12 belong 0x000001B5 \b, v2, +>>>16 byte&0x0F 1 \b HP +>>>16 byte&0x0F 2 \b Spt +>>>16 byte&0x0F 3 \b SNR +>>>16 byte&0x0F 4 \b MP +>>>16 byte&0x0F 5 \b SP +>>>17 byte&0xF0 64 \b@HL +>>>17 byte&0xF0 96 \b@H-14 +>>>17 byte&0xF0 128 \b@ML +>>>17 byte&0xF0 160 \b@LL +>>>17 byte &0x08 \b progressive +>>>17 byte ^0x08 \b interlaced +>>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>11 byte &0x02 +>>>75 byte &0x01 +>>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>>>140 belong 0x000001B5 \b, v2, +>>>>>144 byte&0x0F 1 \b HP +>>>>>144 byte&0x0F 2 \b Spt +>>>>>144 byte&0x0F 3 \b SNR +>>>>>144 byte&0x0F 4 \b MP +>>>>>144 byte&0x0F 5 \b SP +>>>>>145 byte&0xF0 64 \b@HL +>>>>>145 byte&0xF0 96 \b@H-14 +>>>>>145 byte&0xF0 128 \b@ML +>>>>>145 byte&0xF0 160 \b@LL +>>>>>145 byte &0x08 \b progressive +>>>>>145 byte ^0x08 \b interlaced +>>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>76 belong 0x000001B5 \b, v2, +>>>80 byte&0x0F 1 \b HP +>>>80 byte&0x0F 2 \b Spt +>>>80 byte&0x0F 3 \b SNR +>>>80 byte&0x0F 4 \b MP +>>>80 byte&0x0F 5 \b SP +>>>81 byte&0xF0 64 \b@HL +>>>81 byte&0xF0 96 \b@H-14 +>>>81 byte&0xF0 128 \b@ML +>>>81 byte&0xF0 160 \b@LL +>>>81 byte &0x08 \b progressive +>>>81 byte ^0x08 \b interlaced +>>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P +>>>7 byte&0xF0 0x10 \b, 16:9 +>>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I +>>>7 byte&0xF0 0x10 \b, 16:9 +>>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 beshort&0xFFF0 0x2C00 \b, 4CIF +>>>5 beshort&0x0FFF 0x01E0 \b NTSC +>>>5 beshort&0x0FFF 0x0240 \b PAL +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>>7 byte&0xF0 0x80 \b, PAL 4:3 +>>>7 byte&0xF0 0xC0 \b, NTSC 4:3 +>>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 beshort&0xFFF0 0x1600 \b, CIF +>>>5 beshort&0x0FFF 0x00F0 \b NTSC +>>>5 beshort&0x0FFF 0x0120 \b PAL +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>>7 byte&0xF0 0x80 \b, PAL 4:3 +>>>7 byte&0xF0 0xC0 \b, NTSC 4:3 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>>7 byte&0xF0 0x20 \b, 4:3 +>>>>7 byte&0xF0 0x30 \b, 16:9 +>>>>7 byte&0xF0 0x40 \b, 11:5 +>>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU +>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>4 beshort&0xFFF0 0x1E00 \b, SVCD +>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>7 byte&0x0F 1 \b, 23.976 fps +>>7 byte&0x0F 2 \b, 24 fps +>>7 byte&0x0F 3 \b, 25 fps +>>7 byte&0x0F 4 \b, 29.97 fps +>>7 byte&0x0F 5 \b, 30 fps +>>7 byte&0x0F 6 \b, 50 fps +>>7 byte&0x0F 7 \b, 59.94 fps +>>7 byte&0x0F 8 \b, 60 fps +>>11 byte &0x04 \b, Constrained + +# MPEG ADTS Audio (*.mpx/mxa/aac) +# from dreesen@math.fu-berlin.de +# modified to fully support MPEG ADTS + +# MP3, M1A +# modified by Joerg Jenderek +# GRR the original test are too common for many DOS files +# so don't accept as MP3 until we've tested the rate +0 beshort&0xFFFE 0xFFFA +# rates +>2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x20 MPEG ADTS, layer III, v1, 40 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x30 MPEG ADTS, layer III, v1, 48 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x40 MPEG ADTS, layer III, v1, 56 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x50 MPEG ADTS, layer III, v1, 64 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x60 MPEG ADTS, layer III, v1, 80 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x70 MPEG ADTS, layer III, v1, 96 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x80 MPEG ADTS, layer III, v1, 112 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x90 MPEG ADTS, layer III, v1, 128 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xA0 MPEG ADTS, layer III, v1, 160 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xB0 MPEG ADTS, layer III, v1, 192 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xC0 MPEG ADTS, layer III, v1, 224 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xD0 MPEG ADTS, layer III, v1, 256 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xE0 MPEG ADTS, layer III, v1, 320 kbps +!:mime audio/mpeg +# timing +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP2, M1A +0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 +!:mime audio/mpeg +# rates +>2 byte&0xF0 0x10 \b, 32 kbps +>2 byte&0xF0 0x20 \b, 48 kbps +>2 byte&0xF0 0x30 \b, 56 kbps +>2 byte&0xF0 0x40 \b, 64 kbps +>2 byte&0xF0 0x50 \b, 80 kbps +>2 byte&0xF0 0x60 \b, 96 kbps +>2 byte&0xF0 0x70 \b, 112 kbps +>2 byte&0xF0 0x80 \b, 128 kbps +>2 byte&0xF0 0x90 \b, 160 kbps +>2 byte&0xF0 0xA0 \b, 192 kbps +>2 byte&0xF0 0xB0 \b, 224 kbps +>2 byte&0xF0 0xC0 \b, 256 kbps +>2 byte&0xF0 0xD0 \b, 320 kbps +>2 byte&0xF0 0xE0 \b, 384 kbps +# timing +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MPA, M1A +# updated by Joerg Jenderek +# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448 +# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE) +# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries +#0 beshort&0xFFFE 0xFFFE +#>2 ubyte&0xF0 >0x0F +#>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1 +## rate +#>>>2 byte&0xF0 0x10 \b, 32 kbps +#>>>2 byte&0xF0 0x20 \b, 64 kbps +#>>>2 byte&0xF0 0x30 \b, 96 kbps +#>>>2 byte&0xF0 0x40 \b, 128 kbps +#>>>2 byte&0xF0 0x50 \b, 160 kbps +#>>>2 byte&0xF0 0x60 \b, 192 kbps +#>>>2 byte&0xF0 0x70 \b, 224 kbps +#>>>2 byte&0xF0 0x80 \b, 256 kbps +#>>>2 byte&0xF0 0x90 \b, 288 kbps +#>>>2 byte&0xF0 0xA0 \b, 320 kbps +#>>>2 byte&0xF0 0xB0 \b, 352 kbps +#>>>2 byte&0xF0 0xC0 \b, 384 kbps +#>>>2 byte&0xF0 0xD0 \b, 416 kbps +#>>>2 byte&0xF0 0xE0 \b, 448 kbps +## timing +#>>>2 byte&0x0C 0x00 \b, 44.1 kHz +#>>>2 byte&0x0C 0x04 \b, 48 kHz +#>>>2 byte&0x0C 0x08 \b, 32 kHz +## channels/options +#>>>3 byte&0xC0 0x00 \b, Stereo +#>>>3 byte&0xC0 0x40 \b, JntStereo +#>>>3 byte&0xC0 0x80 \b, 2x Monaural +#>>>3 byte&0xC0 0xC0 \b, Monaural +##>1 byte ^0x01 \b, Data Verify +##>2 byte &0x02 \b, Packet Pad +##>2 byte &0x01 \b, Custom Flag +##>3 byte &0x08 \b, Copyrighted +##>3 byte &0x04 \b, Original Source +##>3 byte&0x03 1 \b, NR: 50/15 ms +##>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP3, M2A +0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2 +!:mime audio/mpeg +# rate +>2 byte&0xF0 0x10 \b, 8 kbps +>2 byte&0xF0 0x20 \b, 16 kbps +>2 byte&0xF0 0x30 \b, 24 kbps +>2 byte&0xF0 0x40 \b, 32 kbps +>2 byte&0xF0 0x50 \b, 40 kbps +>2 byte&0xF0 0x60 \b, 48 kbps +>2 byte&0xF0 0x70 \b, 56 kbps +>2 byte&0xF0 0x80 \b, 64 kbps +>2 byte&0xF0 0x90 \b, 80 kbps +>2 byte&0xF0 0xA0 \b, 96 kbps +>2 byte&0xF0 0xB0 \b, 112 kbps +>2 byte&0xF0 0xC0 \b, 128 kbps +>2 byte&0xF0 0xD0 \b, 144 kbps +>2 byte&0xF0 0xE0 \b, 160 kbps +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP2, M2A +0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2 +# rate +>2 byte&0xF0 0x10 \b, 8 kbps +>2 byte&0xF0 0x20 \b, 16 kbps +>2 byte&0xF0 0x30 \b, 24 kbps +>2 byte&0xF0 0x40 \b, 32 kbps +>2 byte&0xF0 0x50 \b, 40 kbps +>2 byte&0xF0 0x60 \b, 48 kbps +>2 byte&0xF0 0x70 \b, 56 kbps +>2 byte&0xF0 0x80 \b, 64 kbps +>2 byte&0xF0 0x90 \b, 80 kbps +>2 byte&0xF0 0xA0 \b, 96 kbps +>2 byte&0xF0 0xB0 \b, 112 kbps +>2 byte&0xF0 0xC0 \b, 128 kbps +>2 byte&0xF0 0xD0 \b, 144 kbps +>2 byte&0xF0 0xE0 \b, 160 kbps +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MPA, M2A +0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2 +# rate +>2 byte&0xF0 0x10 \b, 32 kbps +>2 byte&0xF0 0x20 \b, 48 kbps +>2 byte&0xF0 0x30 \b, 56 kbps +>2 byte&0xF0 0x40 \b, 64 kbps +>2 byte&0xF0 0x50 \b, 80 kbps +>2 byte&0xF0 0x60 \b, 96 kbps +>2 byte&0xF0 0x70 \b, 112 kbps +>2 byte&0xF0 0x80 \b, 128 kbps +>2 byte&0xF0 0x90 \b, 144 kbps +>2 byte&0xF0 0xA0 \b, 160 kbps +>2 byte&0xF0 0xB0 \b, 176 kbps +>2 byte&0xF0 0xC0 \b, 192 kbps +>2 byte&0xF0 0xD0 \b, 224 kbps +>2 byte&0xF0 0xE0 \b, 256 kbps +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP3, M25A +0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5 +# rate +>2 byte&0xF0 0x10 \b, 8 kbps +>2 byte&0xF0 0x20 \b, 16 kbps +>2 byte&0xF0 0x30 \b, 24 kbps +>2 byte&0xF0 0x40 \b, 32 kbps +>2 byte&0xF0 0x50 \b, 40 kbps +>2 byte&0xF0 0x60 \b, 48 kbps +>2 byte&0xF0 0x70 \b, 56 kbps +>2 byte&0xF0 0x80 \b, 64 kbps +>2 byte&0xF0 0x90 \b, 80 kbps +>2 byte&0xF0 0xA0 \b, 96 kbps +>2 byte&0xF0 0xB0 \b, 112 kbps +>2 byte&0xF0 0xC0 \b, 128 kbps +>2 byte&0xF0 0xD0 \b, 144 kbps +>2 byte&0xF0 0xE0 \b, 160 kbps +# timing +>2 byte&0x0C 0x00 \b, 11.025 kHz +>2 byte&0x0C 0x04 \b, 12 kHz +>2 byte&0x0C 0x08 \b, 8 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio + +# Stored AAC streams (instead of the MP4 format) +0 string ADIF MPEG ADIF, AAC +!:mime audio/x-hx-aac-adif +>4 byte &0x80 +>>13 byte &0x10 \b, VBR +>>13 byte ^0x10 \b, CBR +>>16 byte&0x1E 0x02 \b, single stream +>>16 byte&0x1E 0x04 \b, 2 streams +>>16 byte&0x1E 0x06 \b, 3 streams +>>16 byte &0x08 \b, 4 or more streams +>>16 byte &0x10 \b, 8 or more streams +>>4 byte &0x80 \b, Copyrighted +>>13 byte &0x40 \b, Original Source +>>13 byte &0x20 \b, Home Flag +>4 byte ^0x80 +>>4 byte &0x10 \b, VBR +>>4 byte ^0x10 \b, CBR +>>7 byte&0x1E 0x02 \b, single stream +>>7 byte&0x1E 0x04 \b, 2 streams +>>7 byte&0x1E 0x06 \b, 3 streams +>>7 byte &0x08 \b, 4 or more streams +>>7 byte &0x10 \b, 8 or more streams +>>4 byte &0x40 \b, Original Stream(s) +>>4 byte &0x20 \b, Home Source + +# Live or stored single AAC stream (used with MPEG-2 systems) +0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC +!:mime audio/x-hx-aac-adts +>1 byte &0x08 \b, v2 +>1 byte ^0x08 \b, v4 +# profile +>>2 byte &0xC0 \b LTP +>2 byte&0xc0 0x00 \b Main +>2 byte&0xc0 0x40 \b LC +>2 byte&0xc0 0x80 \b SSR +# timing +>2 byte&0x3c 0x00 \b, 96 kHz +>2 byte&0x3c 0x04 \b, 88.2 kHz +>2 byte&0x3c 0x08 \b, 64 kHz +>2 byte&0x3c 0x0c \b, 48 kHz +>2 byte&0x3c 0x10 \b, 44.1 kHz +>2 byte&0x3c 0x14 \b, 32 kHz +>2 byte&0x3c 0x18 \b, 24 kHz +>2 byte&0x3c 0x1c \b, 22.05 kHz +>2 byte&0x3c 0x20 \b, 16 kHz +>2 byte&0x3c 0x24 \b, 12 kHz +>2 byte&0x3c 0x28 \b, 11.025 kHz +>2 byte&0x3c 0x2c \b, 8 kHz +# channels +>2 beshort&0x01c0 0x0040 \b, monaural +>2 beshort&0x01c0 0x0080 \b, stereo +>2 beshort&0x01c0 0x00c0 \b, stereo + center +>2 beshort&0x01c0 0x0100 \b, stereo+center+LFE +>2 beshort&0x01c0 0x0140 \b, surround +>2 beshort&0x01c0 0x0180 \b, surround + LFE +>2 beshort &0x01C0 \b, surround + side +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Custom Flag +#>3 byte &0x20 \b, Original Stream +#>3 byte &0x10 \b, Home Source +#>3 byte &0x08 \b, Copyrighted + +# Live MPEG-4 audio streams (instead of RTP FlexMux) +0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS +!:mime audio/x-mp4a-latm +#>1 beshort&0x1FFF x \b, %u byte packet +>3 byte&0xE0 0x40 +>>4 byte&0x3C 0x04 \b, single stream +>>4 byte&0x3C 0x08 \b, 2 streams +>>4 byte&0x3C 0x0C \b, 3 streams +>>4 byte &0x08 \b, 4 or more streams +>>4 byte &0x20 \b, 8 or more streams +>3 byte&0xC0 0 +>>4 byte&0x78 0x08 \b, single stream +>>4 byte&0x78 0x10 \b, 2 streams +>>4 byte&0x78 0x18 \b, 3 streams +>>4 byte &0x20 \b, 4 or more streams +>>4 byte &0x40 \b, 8 or more streams +# This magic isn't strong enough (matches plausible ISO-8859-1 text) +#0 beshort 0x4DE1 MPEG-4 LO-EP audio stream +#!:mime audio/x-mp4a-latm + +# Summary: FLI animation format +# Created by: Daniel Quinlan +# Modified by (1): Abel Cheung (avoid over-generic detection) +4 leshort 0xAF11 +# standard FLI always has 320x200 resolution and 8 bit color +>8 leshort 320 +>>10 leshort 200 +>>>12 leshort 8 FLI animation, 320x200x8 +!:mime video/x-fli +>>>>6 leshort x \b, %d frames +# frame speed is multiple of 1/70s +>>>>16 leshort x \b, %d/70s per frame + +# Summary: FLC animation format +# Created by: Daniel Quinlan +# Modified by (1): Abel Cheung (avoid over-generic detection) +4 leshort 0xAF12 +# standard FLC always use 8 bit color +>12 leshort 8 FLC animation +!:mime video/x-flc +>>8 leshort x \b, %d +>>10 leshort x \bx%dx8 +>>6 uleshort x \b, %d frames +>>16 uleshort x \b, %dms per frame + +# DL animation format +# XXX - collision with most `mips' magic +# +# I couldn't find a real magic number for these, however, this +# -appears- to work. Note that it might catch other files, too, so be +# careful! +# +# Note that title and author appear in the two 20-byte chunks +# at decimal offsets 2 and 22, respectively, but they are XOR'ed with +# 255 (hex FF)! The DL format is really bad. +# +#0 byte 1 DL version 1, medium format (160x100, 4 images/screen) +#!:mime video/x-unknown +#>42 byte x - %d screens, +#>43 byte x %d commands +#0 byte 2 DL version 2 +#!:mime video/x-unknown +#>1 byte 1 - large format (320x200,1 image/screen), +#>1 byte 2 - medium format (160x100,4 images/screen), +#>1 byte >2 - unknown format, +#>42 byte x %d screens, +#>43 byte x %d commands +# Based on empirical evidence, DL version 3 have several nulls following the +# \003. Most of them start with non-null values at hex offset 0x34 or so. +#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3 + +# iso 13818 transport stream +# +# from Oskar Schirmer Feb 3, 2001 (ISO 13818.1) +# (the following is a little bit restrictive and works fine for a stream +# that starts with PAT properly. it won't work for stream data, that is +# cut from an input device data right in the middle, but this shouldn't +# disturb) +# syncbyte 8 bit 0x47 +# error_ind 1 bit - +# payload_start 1 bit 1 +# priority 1 bit - +# PID 13 bit 0x0000 +# scrambling 2 bit - +# adaptfld_ctrl 2 bit 1 or 3 +# conti_count 4 bit 0 +0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data +>188 byte !0x47 CORRUPTED + +# DIF digital video file format +0 belong&0xffffff00 0x1f070000 DIF +>4 byte &0x01 (DVCPRO) movie file +>4 byte ^0x01 (DV) movie file +>3 byte &0x80 (PAL) +>3 byte ^0x80 (NTSC) + +# Microsoft Advanced Streaming Format (ASF) +0 belong 0x3026b275 Microsoft ASF + +# MNG Video Format, +0 string \x8aMNG MNG video data, +!:mime video/x-mng +>4 belong !0x0d0a1a0a CORRUPTED, +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + +# JNG Video Format, +0 string \x8bJNG JNG video data, +!:mime video/x-jng +>4 belong !0x0d0a1a0a CORRUPTED, +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + +# Vivo video (Wolfram Kleff) +3 string \x0D\x0AVersion:Vivo Vivo video data + +# VRML (Virtual Reality Modelling Language) +0 string/b #VRML\ V1.0\ ascii VRML 1 file +!:mime model/vrml +0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file +!:mime model/vrml + +# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd] +# From Michel Briand +0 string \20 search/1000/cb \, 2002-10-03 +# +0 string HVQM4 %s +>6 string >\0 v%s +>0 byte x GameCube movie, +>0x34 ubeshort x %d x +>0x36 ubeshort x %d, +>0x26 ubeshort x %dµs, +>0x42 ubeshort 0 no audio +>0x42 ubeshort >0 %dHz audio + +# From: "Stefan A. Haubenthal" +0 string DVDVIDEO-VTS Video title set, +>0x21 byte x v%x +0 string DVDVIDEO-VMG Video manager, +>0x21 byte x v%x + +# From: Behan Webster +# NuppelVideo used by Mythtv (*.nuv) +# Note: there are two identical stanzas here differing only in the +# initial string matched. It used to be done with a regex, but we're +# trying to get rid of those. +0 string NuppelVideo MythTV NuppelVideo +>12 string x v%s +>20 lelong x (%d +>24 lelong x \bx%d), +>36 string P \bprogressive, +>36 string I \binterlaced, +>40 ledouble x \baspect:%.2f, +>48 ledouble x \bfps:%.2f +0 string MythTV MythTV NuppelVideo +>12 string x v%s +>20 lelong x (%d +>24 lelong x \bx%d), +>36 string P \bprogressive, +>36 string I \binterlaced, +>40 ledouble x \baspect:%.2f, +>48 ledouble x \bfps:%.2f + +# MPEG file +# MPEG sequences +# FIXME: This section is from the old magic.mime file and needs integrating with the rest +0 belong 0x000001BA +>4 byte &0x40 +!:mime video/mp2p +>4 byte ^0x40 +!:mime video/mpeg +0 belong 0x000001BB +!:mime video/mpeg +0 belong 0x000001B0 +!:mime video/mp4v-es +0 belong 0x000001B5 +!:mime video/mp4v-es +0 belong 0x000001B3 +!:mime video/mpv +0 belong&0xFF5FFF1F 0x47400010 +!:mime video/mp2t +0 belong 0x00000001 +>4 byte&0x1F 0x07 +!:mime video/h264 + +# Type: Bink Video +# URL: http://wiki.multimedia.cx/index.php?title=3DBink_Container +# From: 2008-07-18 +0 string BIK Bink Video +>3 regex =[a-z] rev.%s +#>4 ulelong x size %d +>20 ulelong x \b, %d +>24 ulelong x \bx%d +>8 ulelong x \b, %d frames +>32 ulelong x at rate %d/ +>28 ulelong >1 \b%d +>40 ulelong =0 \b, no audio +>40 ulelong !0 \b, %d audio track +>>40 ulelong !1 \bs +# follow properties of the first audio track only +>>48 uleshort x %dHz +>>51 byte&0x20 0 mono +>>51 byte&0x20 !0 stereo +#>>51 byte&0x10 0 FFT +#>>51 byte&0x10 !0 DCT + +#------------------------------------------------------------------------------ +# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL +# workspaces) +# +0 long 0100554 APL workspace (Ken's original?) +#------------------------------------------------------------------------------ +# apple: file(1) magic for Apple file formats +# +0 search/1 FiLeStArTfIlEsTaRt binscii (apple ][) text +0 string \x0aGL Binary II (apple ][) data +0 string \x76\xff Squeezed (apple ][) data +0 string NuFile NuFile archive (apple ][) data +0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data +0 belong 0x00051600 AppleSingle encoded Macintosh file +0 belong 0x00051607 AppleDouble encoded Macintosh file + +# Type: Apple Emulator 2IMG format +# From: Radek Vokal +0 string 2IMG Apple ][ 2IMG Disk Image +>4 string XGS! \b, XGS +>4 string CTKG \b, Catakig +>4 string ShIm \b, Sheppy's ImageMaker +>4 string WOOF \b, Sweet 16 +>4 string B2TR \b, Bernie ][ the Rescue +>4 string !nfc \b, ASIMOV2 +>4 string x \b, Unknown Format +>0xc byte 00 \b, DOS 3.3 sector order +>>0x10 byte 00 \b, Volume 254 +>>0x10 byte&0x7f x \b, Volume %u +>0xc byte 01 \b, ProDOS sector order +>>0x14 short x \b, %u Blocks +>0xc byte 02 \b, NIB data + +# magic for Newton PDA package formats +# from Ruda Moura +0 string package0 Newton package, NOS 1.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, +>12 belong &0x04000000 Relocation, +>12 belong &0x02000000 UseFasterCompression, +>16 belong x version %d + +0 string package1 Newton package, NOS 2.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, +>12 belong &0x04000000 Relocation, +>12 belong &0x02000000 UseFasterCompression, +>16 belong x version %d + +0 string package4 Newton package, +>8 byte 8 NOS 1.x, +>8 byte 9 NOS 2.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, + +# The following entries for the Apple II are for files that have +# been transferred as raw binary data from an Apple, without having +# been encapsulated by any of the above archivers. +# +# In general, Apple II formats are hard to identify because Apple DOS +# and especially Apple ProDOS have strong typing in the file system and +# therefore programmers never felt much need to include type information +# in the files themselves. +# +# Eric Fischer + +# AppleWorks word processor: +# +# This matches the standard tab stops for an AppleWorks file, but if +# a file has a tab stop set in the first four columns this will fail. +# +# The "O" is really the magic number, but that's so common that it's +# necessary to check the tab stops that follow it to avoid false positives. + +4 string O==== AppleWorks word processor data +>85 byte&0x01 >0 \b, zoomed +>90 byte&0x01 >0 \b, paginated +>92 byte&0x01 >0 \b, with mail merge +#>91 byte x \b, left margin %d + +# AppleWorks database: +# +# This isn't really a magic number, but it's the closest thing to one +# that I could find. The 1 and 2 really mean "order in which you defined +# categories" and "left to right, top to bottom," respectively; the D and R +# mean that the cursor should move either down or right when you press Return. + +#30 string \x01D AppleWorks database data +#30 string \x02D AppleWorks database data +#30 string \x01R AppleWorks database data +#30 string \x02R AppleWorks database data + +# AppleWorks spreadsheet: +# +# Likewise, this isn't really meant as a magic number. The R or C means +# row- or column-order recalculation; the A or M means automatic or manual +# recalculation. + +#131 string RA AppleWorks spreadsheet data +#131 string RM AppleWorks spreadsheet data +#131 string CA AppleWorks spreadsheet data +#131 string CM AppleWorks spreadsheet data + +# Applesoft BASIC: +# +# This is incredibly sloppy, but will be true if the program was +# written at its usual memory location of 2048 and its first line +# number is less than 256. Yuck. + +0 belong&0xff00ff 0x80000 Applesoft BASIC program data +#>2 leshort x \b, first line number %d + +# ORCA/EZ assembler: +# +# This will not identify ORCA/M source files, since those have +# some sort of date code instead of the two zero bytes at 6 and 7 +# XXX Conflicts with ELF +#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data +#>5 byte x \b, build number %d + +# Broderbund Fantavision +# +# I don't know what these values really mean, but they seem to recur. +# Will they cause too many conflicts? + +# Probably :-) +#2 belong&0xFF00FF 0x040008 Fantavision movie data + +# Some attempts at images. +# +# These are actually just bit-for-bit dumps of the frame buffer, so +# there's really no reasonably way to distinguish them except for their +# address (if preserved) -- 8192 or 16384 -- and their length -- 8192 +# or, occasionally, 8184. +# +# Nevertheless this will manage to catch a lot of images that happen +# to have a solid-colored line at the bottom of the screen. + +# GRR: Magic too weak +#8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background +#8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background +#8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background +#8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background +#8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background + +# Beagle Bros. Apple Mechanic fonts + +0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font + +# Apple Universal Disk Image Format (UDIF) - dmg files. +# From Johan Gade. +# These entries are disabled for now until we fix the following issues. +# +# Note there might be some problems with the "VAX COFF executable" +# entry. Note this entry should be placed before the mac filesystem section, +# particularly the "Apple Partition data" entry. +# +# The intended meaning of these tests is, that the file is only of the +# specified type if both of the lines are correct - i.e. if the first +# line matches and the second doesn't then it is not of that type. +# +#0 long 0x7801730d +#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO) +# +# Note that this entry is recognized correctly by the "Apple Partition +# data" entry - however since this entry is more specific - this +# information seems to be more useful. +#0 long 0x45520200 +#>0x410 string disk\ image UDIF read/write image (UDRW) + +# From: Toby Peterson +0 string bplist00 Apple binary property list + +# Apple binary property list (bplist) +# Assumes version bytes are hex. +# Provides content hints for version 0 files. Assumes that the root +# object is the first object (true for CoreFoundation implementation). +# From: David Remahl +0 string bplist +>6 byte x \bCoreFoundation binary property list data, version 0x%c +>>7 byte x \b%c +>6 string 00 \b +>>8 byte&0xF0 0x00 \b +>>>8 byte&0x0F 0x00 \b, root type: null +>>>8 byte&0x0F 0x08 \b, root type: false boolean +>>>8 byte&0x0F 0x09 \b, root type: true boolean +>>8 byte&0xF0 0x10 \b, root type: integer +>>8 byte&0xF0 0x20 \b, root type: real +>>8 byte&0xF0 0x30 \b, root type: date +>>8 byte&0xF0 0x40 \b, root type: data +>>8 byte&0xF0 0x50 \b, root type: ascii string +>>8 byte&0xF0 0x60 \b, root type: unicode string +>>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT) +>>8 byte&0xF0 0xa0 \b, root type: array +>>8 byte&0xF0 0xd0 \b, root type: dictionary + +# Apple/NeXT typedstream data +# Serialization format used by NeXT and Apple for various +# purposes in YellowStep/Cocoa, including some nib files. +# From: David Remahl +2 string typedstream NeXT/Apple typedstream data, big endian +>0 byte x \b, version %hhd +>0 byte <5 \b +>>13 byte 0x81 \b +>>>14 ubeshort x \b, system %hd +2 string streamtyped NeXT/Apple typedstream data, little endian +>0 byte x \b, version %hhd +>0 byte <5 \b +>>13 byte 0x81 \b +>>>14 uleshort x \b, system %hd + +#------------------------------------------------------------------------------ +# CAF: Apple CoreAudio File Format +# +# Container format for high-end audio purposes. +# From: David Remahl +# +0 string caff CoreAudio Format audio file +>4 beshort <10 version %d +>6 beshort x + + +#------------------------------------------------------------------------------ +# Keychain database files +0 string kych Mac OS X Keychain File + +#------------------------------------------------------------------------------ +# Code Signing related file types +0 belong 0xfade0c00 Mac OS X Code Requirement +>8 belong 1 (opExpr) +>4 belong x - %d bytes + +0 belong 0xfade0c01 Mac OS X Code Requirement Set +>8 belong >1 containing %d items +>4 belong x - %d bytes + +0 belong 0xfade0c02 Mac OS X Code Directory +>8 belong x version %x +>12 belong >0 flags 0x%x +>4 belong x - %d bytes + +0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable) +>4 belong x - %d bytes + +0 belong 0xfade0cc1 Mac OS X Detached Code Signature +>8 belong >1 (%d elements) +>4 belong x - %d bytes + +# From: "Nelson A. de Oliveira" +# .vdi +4 string innotek\ VirtualBox\ Disk\ Image %s + +#------------------------------------------------------------------------------ +# applix: file(1) magic for Applixware +# From: Peter Soos +# +0 string *BEGIN Applixware +>7 string WORDS Words Document +>7 string GRAPHICS Graphic +>7 string RASTER Bitmap +>7 string SPREADSHEETS Spreadsheet +>7 string MACRO Macro +>7 string BUILDER Builder Object +#------------------------------------------------------------------------------ +# archive: file(1) magic for archive formats (see also "msdos" for self- +# extracting compressed archives) +# +# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc. +# pre-POSIX "tar" archives are handled in the C code. + +# POSIX tar archives +257 string ustar\0 POSIX tar archive +!:mime application/x-tar # encoding: posix +257 string ustar\040\040\0 GNU tar archive +!:mime application/x-tar # encoding: gnu + +# cpio archives +# +# Yes, the top two "cpio archive" formats *are* supposed to just be "short". +# The idea is to indicate archives produced on machines with the same +# byte order as the machine running "file" with "cpio archive", and +# to indicate archives produced on machines with the opposite byte order +# from the machine running "file" with "byte-swapped cpio archive". +# +# The SVR4 "cpio(4)" hints that there are additional formats, but they +# are defined as "short"s; I think all the new formats are +# character-header formats and thus are strings, not numbers. +0 short 070707 cpio archive +!:mime application/x-cpio +0 short 0143561 byte-swapped cpio archive +!:mime application/x-cpio # encoding: swapped +0 string 070707 ASCII cpio archive (pre-SVR4 or odc) +0 string 070701 ASCII cpio archive (SVR4 with no CRC) +0 string 070702 ASCII cpio archive (SVR4 with CRC) + +# Debian package (needs to go before regular portable archives) +# +0 string =!\ndebian +!:mime application/x-debian-package +>8 string debian-split part of multipart Debian package +>8 string debian-binary Debian binary package +>8 string !debian +>68 string >\0 (format %s) +# These next two lines do not work, because a bzip2 Debian archive +# still uses gzip for the control.tar (first in the archive). Only +# data.tar varies, and the location of its filename varies too. +# file/libmagic does not current have support for ascii-string based +# (offsets) as of 2005-09-15. +#>81 string bz2 \b, uses bzip2 compression +#>84 string gz \b, uses gzip compression +#>136 ledate x created: %s + +# other archives +0 long 0177555 very old archive +0 short 0177555 very old PDP-11 archive +0 long 0177545 old archive +0 short 0177545 old PDP-11 archive +0 long 0100554 apl workspace +0 string = archive +!:mime application/x-archive + +# MIPS archive (needs to go before regular portable archives) +# +0 string =!\n__________E MIPS archive +>20 string U with MIPS Ucode members +>21 string L with MIPSEL members +>21 string B with MIPSEB members +>19 string L and an EL hash table +>19 string B and an EB hash table +>22 string X -- out of date + +0 search/1 -h- Software Tools format archive text + +# +# XXX - why are there multiple thingies? Note that 0x213c6172 is +# "! current ar archive +# 0 long 0x213c6172 archive file +# +# and for SVR1 archives, we have: +# +# 0 string \ System V Release 1 ar archive +# 0 string = archive +# +# XXX - did Aegis really store shared libraries, breakpointed modules, +# and absolute code program modules in the same format as new-style +# "ar" archives? +# +0 string =! current ar archive +!:mime application/x-archive +>8 string __.SYMDEF random library +>0 belong =65538 - pre SR9.5 +>0 belong =65539 - post SR9.5 +>0 beshort 2 - object archive +>0 beshort 3 - shared library module +>0 beshort 4 - debug break-pointed module +>0 beshort 5 - absolute code program module +0 string \ System V Release 1 ar archive +0 string = archive +# +# XXX - from "vax", which appears to collect a bunch of byte-swapped +# thingies, to help you recognize VAX files on big-endian machines; +# with "leshort", "lelong", and "string", that's no longer necessary.... +# +0 belong 0x65ff0000 VAX 3.0 archive +0 belong 0x3c61723e VAX 5.0 archive +# +0 long 0x213c6172 archive file +0 lelong 0177555 very old VAX archive +0 leshort 0177555 very old PDP-11 archive +# +# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus +# be a random library (it said 0xff65 rather than 0177545). +# +0 lelong 0177545 old VAX archive +>8 string __.SYMDEF random library +0 leshort 0177545 old PDP-11 archive +>8 string __.SYMDEF random library +# +# From "pdp" (but why a 4-byte quantity?) +# +0 lelong 0x39bed PDP-11 old archive +0 lelong 0x39bee PDP-11 4.0 archive + +# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com) +# +# The first byte is the magic (0x1a), byte 2 is the compression type for +# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS +# filename of the first file (null terminated). Since some types collide +# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%), +# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo. +0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000031a ARC archive data, packed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched +!:mime application/x-arc +# [JW] stuff taken from idarc, obviously ARC successors: +0 lelong&0x8080ffff 0x00000a1a PAK archive data +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000141a ARC+ archive data +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000481a HYP archive data +!:mime application/x-arc + +# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk) +# I can't create either SPARK or ArcFS archives so I have not tested this stuff +# [GRR: the original entries collide with ARC, above; replaced with combined +# version (not tested)] +#0 byte 0x1a RISC OS archive (spark format) +0 string \032archive RISC OS archive (ArcFS format) +0 string Archive\000 RISC OS archive (ArcFS format) + +# All these were taken from idarc, many could not be verified. Unfortunately, +# there were many low-quality sigs, i.e. easy to trigger false positives. +# Please notify me of any real-world fishy/ambiguous signatures and I'll try +# to get my hands on the actual archiver and see if I find something better. [JW] +# probably many can be enhanced by finding some 0-byte or control char near the start + +# idarc calls this Crush/Uncompressed... *shrug* +0 string CRUSH Crush archive data +# Squeeze It (.sqz) +0 string HLSQZ Squeeze It archive data +# SQWEZ +0 string SQWEZ SQWEZ archive data +# HPack (.hpk) +0 string HPAK HPack archive data +# HAP +0 string \x91\x33HF HAP archive data +# MD/MDCD +0 string MDmd MDCD archive data +# LIM +0 string LIM\x1a LIM archive data +# SAR +3 string LH5 SAR archive data +# BSArc/BS2 +0 string \212\3SB \0 BSArc/BS2 archive data +# MAR +2 string =-ah MAR archive data +# ACB +0 belong&0x00f800ff 0x00800000 ACB archive data +# CPZ +# TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data +# JRC +0 string JRchive JRC archive data +# Quantum +0 string DS\0 Quantum archive data +# ReSOF +0 string PK\3\6 ReSOF archive data +# QuArk +0 string 7\4 QuArk archive data +# YAC +14 string YC YAC archive data +# X1 +0 string X1 X1 archive data +0 string XhDr X1 archive data +# CDC Codec (.dqt) +0 belong&0xffffe000 0x76ff2000 CDC Codec archive data +# AMGC +0 string \xad6" AMGC archive data +# NuLIB +0 string NõFélå NuLIB archive data +# PakLeo +0 string LEOLZW PAKLeo archive data +# ChArc +0 string SChF ChArc archive data +# PSA +0 string PSA PSA archive data +# CrossePAC +0 string DSIGDCC CrossePAC archive data +# Freeze +0 string \x1f\x9f\x4a\x10\x0a Freeze archive data +# KBoom +0 string ¨MP¨ KBoom archive data +# NSQ, must go after CDC Codec +0 string \x76\xff NSQ archive data +# DPA +0 string Dirk\ Paehl DPA archive data +# BA +# TODO: idarc says "bytes 0-2 == bytes 3-5" +# TTComp +0 string \0\6 TTComp archive data +# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation? +0 string ESP ESP archive data +# ZPack +0 string \1ZPK\1 ZPack archive data +# Sky +0 string \xbc\x40 Sky archive data +# UFA +0 string UFA UFA archive data +# Dry +0 string =-H2O DRY archive data +# FoxSQZ +0 string FOXSQZ FoxSQZ archive data +# AR7 +0 string ,AR7 AR7 archive data +# PPMZ +0 string PPMZ PPMZ archive data +# MS Compress +4 string \x88\xf0\x27 MS Compress archive data +# updated by Joerg Jenderek +>9 string \0 +>>0 string KWAJ +>>>7 string \321\003 MS Compress archive data +>>>>14 ulong >0 \b, original size: %ld bytes +>>>>18 ubyte >0x65 +>>>>>18 string x \b, was %.8s +>>>>>(10.b-4) string x \b.%.3s +# MP3 (archiver, not lossy audio compression) +0 string MP3\x1a MP3-Archiver archive data +# ZET +0 string OZÝ ZET archive data +# TSComp +0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data +# ARQ +0 string gW\4\1 ARQ archive data +# Squash +3 string OctSqu Squash archive data +# Terse +0 string \5\1\1\0 Terse archive data +# PUCrunch +0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data +# UHarc +0 string UHA UHarc archive data +# ABComp +0 string \2AB ABComp archive data +0 string \3AB2 ABComp archive data +# CMP +0 string CO\0 CMP archive data +# Splint +0 string \x93\xb9\x06 Splint archive data +# InstallShield +0 string \x13\x5d\x65\x8c InstallShield Z archive Data +# Gather +1 string GTH Gather archive data +# BOA +0 string BOA BOA archive data +# RAX +0 string ULEB\xa RAX archive data +# Xtreme +0 string ULEB\0 Xtreme archive data +# Pack Magic +0 string @â\1\0 Pack Magic archive data +# BTS +0 belong&0xfeffffff 0x1a034465 BTS archive data +# ELI 5750 +0 string Ora\ ELI 5750 archive data +# QFC +0 string \x1aFC\x1a QFC archive data +0 string \x1aQF\x1a QFC archive data +# PRO-PACK +0 string RNC PRO-PACK archive data +# 777 +0 string 777 777 archive data +# LZS221 +0 string sTaC LZS221 archive data +# HPA +0 string HPA HPA archive data +# Arhangel +0 string LG Arhangel archive data +# EXP1, uses bzip2 +0 string 0123456789012345BZh EXP1 archive data +# IMP +0 string IMP\xa IMP archive data +# NRV +0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data +# Squish +0 string \x73\xb2\x90\xf4 Squish archive data +# Par +0 string PHILIPP Par archive data +0 string PAR Par archive data +# HIT +0 string UB HIT archive data +# SBX +0 belong&0xfffff000 0x53423000 SBX archive data +# NaShrink +0 string NSK NaShrink archive data +# SAPCAR +0 string #\ CAR\ archive\ header SAPCAR archive data +0 string CAR\ 2.00RG SAPCAR archive data +# Disintegrator +0 string DST Disintegrator archive data +# ASD +0 string ASD ASD archive data +# InstallShield CAB +0 string ISc( InstallShield CAB +# TOP4 +0 string T4\x1a TOP4 archive data +# BatComp left out: sig looks like COM executable +# so TODO: get real 4dos batcomp file and find sig +# BlakHole +0 string BH\5\7 BlakHole archive data +# BIX +0 string BIX0 BIX archive data +# ChiefLZA +0 string ChfLZ ChiefLZA archive data +# Blink +0 string Blink Blink archive data +# Logitech Compress +0 string \xda\xfa Logitech Compress archive data +# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE) +1 string (C)\ STEPANYUK ARS-Sfx archive data +# AKT/AKT32 +0 string AKT32 AKT32 archive data +0 string AKT AKT archive data +# NPack +0 string MSTSM NPack archive data +# PFT +0 string \0\x50\0\x14 PFT archive data +# SemOne +0 string SEM SemOne archive data +# PPMD +0 string \x8f\xaf\xac\x84 PPMD archive data +# FIZ +0 string FIZ FIZ archive data +# MSXiE +0 belong&0xfffff0f0 0x4d530000 MSXiE archive data +# DeepFreezer +0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data +# DC +0 string =2 byte x \b, version %i +>3 byte x \b.%i +# ZZip archiver (.zz) +0 string ZZ\ \0\0 ZZip archive data +0 string ZZ0 ZZip archive data +# PAQ archiver (.paq) +0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data +0 string PAQ PAQ archive data +>3 byte&0xf0 0x30 +>>3 byte x (v%c) +# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP) +0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data +0 string JARCS JAR (ARJ Software, Inc.) archive data + +# ARJ archiver (jason@jarthur.Claremont.EDU) +0 leshort 0xea60 ARJ archive data +!:mime application/x-arj +>5 byte x \b, v%d, +>8 byte &0x04 multi-volume, +>8 byte &0x10 slash-switched, +>8 byte &0x20 backup, +>34 string x original name: %s, +>7 byte 0 os: MS-DOS +>7 byte 1 os: PRIMOS +>7 byte 2 os: Unix +>7 byte 3 os: Amiga +>7 byte 4 os: Macintosh +>7 byte 5 os: OS/2 +>7 byte 6 os: Apple ][ GS +>7 byte 7 os: Atari ST +>7 byte 8 os: NeXT +>7 byte 9 os: VAX/VMS +>3 byte >0 %d] +# [JW] idarc says this is also possible +2 leshort 0xea60 ARJ archive data + +# HA archiver (Greg Roelofs, newt@uchicago.edu) +# This is a really bad format. A file containing HAWAII will match this... +#0 string HA HA archive data, +#>2 leshort =1 1 file, +#>2 leshort >1 %u files, +#>4 byte&0x0f =0 first is type CPY +#>4 byte&0x0f =1 first is type ASC +#>4 byte&0x0f =2 first is type HSC +#>4 byte&0x0f =0x0e first is type DIR +#>4 byte&0x0f =0x0f first is type SPECIAL +# suggestion: at least identify small archives (<1024 files) +0 belong&0xffff00fc 0x48410000 HA archive data +>2 leshort =1 1 file, +>2 leshort >1 %u files, +>4 byte&0x0f =0 first is type CPY +>4 byte&0x0f =1 first is type ASC +>4 byte&0x0f =2 first is type HSC +>4 byte&0x0f =0x0e first is type DIR +>4 byte&0x0f =0x0f first is type SPECIAL + +# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz) +0 string HPAK HPACK archive data + +# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net +0 string \351,\001JAM\ JAM archive, +>7 string >\0 version %.4s +>0x26 byte =0x27 - +>>0x2b string >\0 label %.11s, +>>0x27 lelong x serial %08x, +>>0x36 string >\0 fstype %.8s + +# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) +2 string -lh0- LHarc 1.x/ARX archive data [lh0] +!:mime application/x-lharc +2 string -lh1- LHarc 1.x/ARX archive data [lh1] +!:mime application/x-lharc +2 string -lz4- LHarc 1.x archive data [lz4] +!:mime application/x-lharc +2 string -lz5- LHarc 1.x archive data [lz5] +!:mime application/x-lharc +# [never seen any but the last; -lh4- reported in comp.compression:] +2 string -lzs- LHa/LZS archive data [lzs] +!:mime application/x-lha +2 string -lh\40- LHa 2.x? archive data [lh ] +!:mime application/x-lha +2 string -lhd- LHa 2.x? archive data [lhd] +!:mime application/x-lha +2 string -lh2- LHa 2.x? archive data [lh2] +!:mime application/x-lha +2 string -lh3- LHa 2.x? archive data [lh3] +!:mime application/x-lha +2 string -lh4- LHa (2.x) archive data [lh4] +!:mime application/x-lha +2 string -lh5- LHa (2.x) archive data [lh5] +!:mime application/x-lha +2 string -lh6- LHa (2.x) archive data [lh6] +!:mime application/x-lha +2 string -lh7- LHa (2.x)/LHark archive data [lh7] +!:mime application/x-lha +>20 byte x - header level %d +# taken from idarc [JW] +2 string -lZ PUT archive data +2 string -lz LZS archive data +2 string -sw1- Swag archive data + +# RAR archiver (Greg Roelofs, newt@uchicago.edu) +0 string Rar! RAR archive data, +!:mime application/x-rar +>44 byte x v%0x, +>10 byte >0 flags: +>>10 byte &0x01 Archive volume, +>>10 byte &0x02 Commented, +>>10 byte &0x04 Locked, +>>10 byte &0x08 Solid, +>>10 byte &0x20 Authenticated, +>35 byte 0 os: MS-DOS +>35 byte 1 os: OS/2 +>35 byte 2 os: Win32 +>35 byte 3 os: Unix +# some old version? idarc says: +0 string RE\x7e\x5e RAR archive data + +# SQUISH archiver (Greg Roelofs, newt@uchicago.edu) +0 string SQSH squished archive data (Acorn RISCOS) + +# UC2 archiver (Greg Roelofs, newt@uchicago.edu) +# [JW] see exe section for self-extracting version +0 string UC2\x1a UC2 archive data + +# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) +0 string PK\003\004 +>4 byte 0x00 Zip archive data +!:mime application/zip +>4 byte 0x09 Zip archive data, at least v0.9 to extract +!:mime application/zip +>4 byte 0x0a Zip archive data, at least v1.0 to extract +!:mime application/zip +>4 byte 0x0b Zip archive data, at least v1.1 to extract +!:mime application/zip +>0x161 string WINZIP Zip archive data, WinZIP self-extracting +!:mime application/zip +>4 byte 0x14 +>>30 ubelong !0x6d696d65 Zip archive data, at least v2.0 to extract +!:mime application/zip + +# OpenOffice.org / KOffice / StarOffice documents +# Listed here because they ARE zip files +# +# From: Abel Cheung +>4 byte 0x14 +>>30 string mimetype + +# KOffice (1.2 or above) formats +>>>50 string vnd.kde. KOffice (>=1.2) +>>>>58 string karbon Karbon document +>>>>58 string kchart KChart document +>>>>58 string kformula KFormula document +>>>>58 string kivio Kivio document +>>>>58 string kontour Kontour document +>>>>58 string kpresenter KPresenter document +>>>>58 string kspread KSpread document +>>>>58 string kword KWord document + +# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7) +>>>50 string vnd.sun.xml. OpenOffice.org 1.x +>>>>62 string writer Writer +>>>>>68 byte !0x2e document +>>>>>68 string .template template +>>>>>68 string .global global document +>>>>62 string calc Calc +>>>>>66 byte !0x2e spreadsheet +>>>>>66 string .template template +>>>>62 string draw Draw +>>>>>66 byte !0x2e document +>>>>>66 string .template template +>>>>62 string impress Impress +>>>>>69 byte !0x2e presentation +>>>>>69 string .template template +>>>>62 string math Math document +>>>>62 string base Database file + +# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8) +# http://lists.oasis-open.org/archives/office/200505/msg00006.html +>>>50 string vnd.oasis.opendocument. OpenDocument +>>>>73 string text +>>>>>77 byte !0x2d Text +!:mime application/vnd.oasis.opendocument.text +>>>>>77 string -template Text Template +>>>>>77 string -web HTML Document Template +>>>>>77 string -master Master Document +>>>>73 string graphics Drawing +>>>>>81 string -template Template +>>>>73 string presentation Presentation +>>>>>85 string -template Template +>>>>73 string spreadsheet Spreadsheet +>>>>>84 string -template Template +>>>>73 string chart Chart +>>>>>78 string -template Template +>>>>73 string formula Formula +>>>>>80 string -template Template +>>>>73 string database Database +>>>>73 string image Image + +# Zoo archiver +20 lelong 0xfdc4a7dc Zoo archive data +!:mime application/x-zoo +>4 byte >48 \b, v%c. +>>6 byte >47 \b%c +>>>7 byte >47 \b%c +>32 byte >0 \b, modify: v%d +>>33 byte x \b.%d+ +>42 lelong 0xfdc4a7dc \b, +>>70 byte >0 extract: v%d +>>>71 byte x \b.%d+ + +# Shell archives +10 string #\ This\ is\ a\ shell\ archive shell archive text +!:mime application/octet-stream + +# +# LBR. NB: May conflict with the questionable +# "binary Computer Graphics Metafile" format. +# +0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data +# +# PMA (CP/M derivative of LHA) +# +2 string -pm0- PMarc archive data [pm0] +2 string -pm1- PMarc archive data [pm1] +2 string -pm2- PMarc archive data [pm2] +2 string -pms- PMarc SFX archive (CP/M, DOS) +5 string -pc1- PopCom compressed executable (CP/M) + +# From Rafael Laboissiere +# The Project Revision Control System (see +# http://prcs.sourceforge.net) generates a packaged project +# file which is recognized by the following entry: +0 leshort 0xeb81 PRCS packaged project + +# Microsoft cabinets +# by David Necas (Yeti) +#0 string MSCF\0\0\0\0 Microsoft cabinet file data, +#>25 byte x v%d +#>24 byte x \b.%d +# MPi: All CABs have version 1.3, so this is pointless. +# Better magic in debian-additions. + +# GTKtalog catalogs +# by David Necas (Yeti) +4 string gtktalog\ GTKtalog catalog data, +>13 string 3 version 3 +>>14 beshort 0x677a (gzipped) +>>14 beshort !0x677a (not gzipped) +>13 string >3 version %s + +############################################################################ +# Parity archive reconstruction file, the 'par' file format now used on Usenet. +0 string PAR\0 PARity archive data +>48 leshort =0 - Index file +>48 leshort >0 - file number %d + +# Felix von Leitner +0 string d8:announce BitTorrent file +!:mime application/x-bittorrent + +# Atari MSA archive - Teemu Hukkanen +0 beshort 0x0e0f Atari MSA archive data +>2 beshort x \b, %d sectors per track +>4 beshort 0 \b, 1 sided +>4 beshort 1 \b, 2 sided +>6 beshort x \b, starting track: %d +>8 beshort x \b, ending track: %d + +# Alternate ZIP string (amc@arwen.cs.berkeley.edu) +0 string PK00PK\003\004 Zip archive data + +# ACE archive (from http://www.wotsit.org/download.asp?f=ace) +# by Stefan `Sec` Zehl +7 string **ACE** ACE archive data +>15 byte >0 version %d +>16 byte =0x00 \b, from MS-DOS +>16 byte =0x01 \b, from OS/2 +>16 byte =0x02 \b, from Win/32 +>16 byte =0x03 \b, from Unix +>16 byte =0x04 \b, from MacOS +>16 byte =0x05 \b, from WinNT +>16 byte =0x06 \b, from Primos +>16 byte =0x07 \b, from AppleGS +>16 byte =0x08 \b, from Atari +>16 byte =0x09 \b, from Vax/VMS +>16 byte =0x0A \b, from Amiga +>16 byte =0x0B \b, from Next +>14 byte x \b, version %d to extract +>5 leshort &0x0080 \b, multiple volumes, +>>17 byte x \b (part %d), +>5 leshort &0x0002 \b, contains comment +>5 leshort &0x0200 \b, sfx +>5 leshort &0x0400 \b, small dictionary +>5 leshort &0x0800 \b, multi-volume +>5 leshort &0x1000 \b, contains AV-String +>>30 string \x16*UNREGISTERED\x20VERSION* (unregistered) +>5 leshort &0x2000 \b, with recovery record +>5 leshort &0x4000 \b, locked +>5 leshort &0x8000 \b, solid +# Date in MS-DOS format (whatever that is) +#>18 lelong x Created on + +# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann +# +0x1A string sfArk sfArk compressed Soundfont +>0x15 string 2 +>>0x1 string >\0 Version %s +>>0x2A string >\0 : %s + +# DR-DOS 7.03 Packed File *.??_ +0 string Packed\ File\ Personal NetWare Packed File +>12 string x \b, was "%.12s" + +# EET archive +# From: Tilman Sauerbeck +0 belong 0x1ee7ff00 EET archive +!:mime application/x-eet + +# rzip archives +0 string RZIP rzip compressed data +>4 byte x - version %d +>5 byte x \b.%d +>6 belong x (%d bytes) + +# From: "Robert Dale" +0 belong 123 dar archive, +>4 belong x label "%.8x +>>8 belong x %.8x +>>>12 beshort x %.4x" +>14 byte 0x54 end slice +>14 beshort 0x4e4e multi-part +>14 beshort 0x4e53 multi-part, with -S + +# Symbian installation files +# http://www.thouky.co.uk/software/psifs/sis.html +# http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf +8 lelong 0x10000419 Symbian installation file +!:mime application/vnd.symbian.install +>4 lelong 0x1000006D (EPOC release 3/4/5) +>4 lelong 0x10003A12 (EPOC release 6) +0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x) +!:mime x-epoc/x-sisx-app + +# From "Nelson A. de Oliveira" +0 string MPQ\032 MoPaQ (MPQ) archive + +# From: Dirk Jagdmann +# xar archive format: http://code.google.com/p/xar/ +0 string xar! xar archive +>6 beshort x - version %ld + +# From: "Nelson A. de Oliveira" +# .kgb +0 string KGB_arch KGB Archiver file +>10 string x with compression level %.1s + +# xar (eXtensible ARchiver) archive +# From: "David Remahl" +0 string xar! xar archive +#>4 beshort x header size %d +>6 beshort x version %d, +#>8 quad x compressed TOC: %d, +#>16 quad x uncompressed TOC: %d, +>24 belong 0 no checksum +>24 belong 1 SHA-1 checksum +>24 belong 2 MD5 checksum + + +#------------------------------------------------------------------------------ +# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character +# strings as "long" - we assume they're just strings: +# From: guy@netapp.com (Guy Harris) +# +0 string *STA Aster*x +>7 string WORD Words Document +>7 string GRAP Graphic +>7 string SPRE Spreadsheet +>7 string MACR Macro +0 string 2278 Aster*x Version 2 +>29 byte 0x36 Words Document +>29 byte 0x35 Graphic +>29 byte 0x32 Spreadsheet +>29 byte 0x38 Macro + + +#------------------------------------------------------------------------------ +# att3b: file(1) magic for AT&T 3B machines +# +# The `versions' should be un-commented if they work for you. +# (Was the problem just one of endianness?) +# +# 3B20 +# +# The 3B20 conflicts with SCCS. +#0 beshort 0550 3b20 COFF executable +#>12 belong >0 not stripped +#>22 beshort >0 - version %ld +#0 beshort 0551 3b20 COFF executable (TV) +#>12 belong >0 not stripped +#>22 beshort >0 - version %ld +# +# WE32K +# +0 beshort 0560 WE32000 COFF +>18 beshort ^00000020 object +>18 beshort &00000020 executable +>12 belong >0 not stripped +>18 beshort ^00010000 N/A on 3b2/300 w/paging +>18 beshort &00020000 32100 required +>18 beshort &00040000 and MAU hardware required +>20 beshort 0407 (impure) +>20 beshort 0410 (pure) +>20 beshort 0413 (demand paged) +>20 beshort 0443 (target shared library) +>22 beshort >0 - version %ld +0 beshort 0561 WE32000 COFF executable (TV) +>12 belong >0 not stripped +#>18 beshort &00020000 - 32100 required +#>18 beshort &00040000 and MAU hardware required +#>22 beshort >0 - version %ld +# +# core file for 3b2 +0 string \000\004\036\212\200 3b2 core file +>364 string >\0 of '%s' +#------------------------------------------------------------------------------ +# audio: file(1) magic for sound formats (see also "iff") +# +# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), +# and others +# + +# Sun/NeXT audio data +0 string .snd Sun/NeXT audio data: +>12 belong 1 8-bit ISDN mu-law, +!:mime audio/basic +>12 belong 2 8-bit linear PCM [REF-PCM], +!:mime audio/basic +>12 belong 3 16-bit linear PCM, +!:mime audio/basic +>12 belong 4 24-bit linear PCM, +!:mime audio/basic +>12 belong 5 32-bit linear PCM, +!:mime audio/basic +>12 belong 6 32-bit IEEE floating point, +!:mime audio/basic +>12 belong 7 64-bit IEEE floating point, +!:mime audio/basic +>12 belong 8 Fragmented sample data, +>12 belong 10 DSP program, +>12 belong 11 8-bit fixed point, +>12 belong 12 16-bit fixed point, +>12 belong 13 24-bit fixed point, +>12 belong 14 32-bit fixed point, +>12 belong 18 16-bit linear with emphasis, +>12 belong 19 16-bit linear compressed, +>12 belong 20 16-bit linear with emphasis and compression, +>12 belong 21 Music kit DSP commands, +>12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), +!:mime audio/x-adpcm +>12 belong 24 compressed (8-bit CCITT G.722 ADPCM) +>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), +>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), +>12 belong 27 8-bit A-law (CCITT G.711), +>20 belong 1 mono, +>20 belong 2 stereo, +>20 belong 4 quad, +>16 belong >0 %d Hz + +# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format +# that uses little-endian encoding and has a different magic number +0 lelong 0x0064732E DEC audio data: +>12 lelong 1 8-bit ISDN mu-law, +!:mime audio/x-dec-basic +>12 lelong 2 8-bit linear PCM [REF-PCM], +!:mime audio/x-dec-basic +>12 lelong 3 16-bit linear PCM, +!:mime audio/x-dec-basic +>12 lelong 4 24-bit linear PCM, +!:mime audio/x-dec-basic +>12 lelong 5 32-bit linear PCM, +!:mime audio/x-dec-basic +>12 lelong 6 32-bit IEEE floating point, +!:mime audio/x-dec-basic +>12 lelong 7 64-bit IEEE floating point, +!:mime audio/x-dec-basic +>12 belong 8 Fragmented sample data, +>12 belong 10 DSP program, +>12 belong 11 8-bit fixed point, +>12 belong 12 16-bit fixed point, +>12 belong 13 24-bit fixed point, +>12 belong 14 32-bit fixed point, +>12 belong 18 16-bit linear with emphasis, +>12 belong 19 16-bit linear compressed, +>12 belong 20 16-bit linear with emphasis and compression, +>12 belong 21 Music kit DSP commands, +>12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), +!:mime audio/x-dec-basic +>12 belong 24 compressed (8-bit CCITT G.722 ADPCM) +>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), +>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), +>12 belong 27 8-bit A-law (CCITT G.711), +>20 lelong 1 mono, +>20 lelong 2 stereo, +>20 lelong 4 quad, +>16 lelong >0 %d Hz + +# Creative Labs AUDIO stuff +0 string MThd Standard MIDI data +!:mime audio/midi +>8 beshort x (format %d) +>10 beshort x using %d track +>10 beshort >1 \bs +>12 beshort&0x7fff x at 1/%d +>12 beshort&0x8000 >0 SMPTE + +0 string CTMF Creative Music (CMF) data +!:mime audio/x-unknown +0 string SBI SoundBlaster instrument data +!:mime audio/x-unknown +0 string Creative\ Voice\ File Creative Labs voice data +!:mime audio/x-unknown +# is this next line right? it came this way... +>19 byte 0x1A +>23 byte >0 - version %d +>22 byte >0 \b.%d + +# first entry is also the string "NTRK" +0 belong 0x4e54524b MultiTrack sound data +>4 belong x - version %ld + +# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED +# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi] +0 string EMOD Extended MOD sound data, +>4 byte&0xf0 x version %d +>4 byte&0x0f x \b.%d, +>45 byte x %d instruments +>83 byte 0 (module) +>83 byte 1 (song) + +# Real Audio (Magic .ra\0375) +0 belong 0x2e7261fd RealAudio sound file +!:mime audio/x-pn-realaudio +0 string .RMF RealMedia file +!:mime application/vnd.rn-realmedia +#video/x-pn-realvideo +#video/vnd.rn-realvideo +#application/vnd.rn-realmedia +# sigh, there are many mimes for that but the above are the most common. + +# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net] +# Oct 31, 1995 +# fixed by 2003-06-24 +# Too short... +#0 string MTM MultiTracker Module sound file +#0 string if Composer 669 Module sound data +#0 string JN Composer 669 Module sound data (extended format) +0 string MAS_U ULT(imate) Module sound data + +#0 string FAR Module sound data +#>4 string >\15 Title: "%s" + +0x2c string SCRM ScreamTracker III Module sound data +>0 string >\0 Title: "%s" + +# Gravis UltraSound patches +# From + +0 string GF1PATCH110\0ID#000002\0 GUS patch +0 string GF1PATCH100\0ID#000002\0 Old GUS patch + +# mime types according to http://www.geocities.com/nevilo/mod.htm: +# audio/it .it +# audio/x-zipped-it .itz +# audio/xm fasttracker modules +# audio/x-s3m screamtracker modules +# audio/s3m screamtracker modules +# audio/x-zipped-mod mdz +# audio/mod mod +# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z) + +# +# Taken from loader code from mikmod version 2.14 +# by Steve McIntyre (stevem@chiark.greenend.org.uk) +# added title printing on 2003-06-24 +0 string MAS_UTrack_V00 +>14 string >/0 ultratracker V1.%.1s module sound data +!:mime audio/x-mod +#audio/x-tracker-module + +0 string UN05 MikMod UNI format module sound data + +0 string Extended\ Module: Fasttracker II module sound data +!:mime audio/x-mod +#audio/x-tracker-module +>17 string >\0 Title: "%s" + +21 string/c =!SCREAM! Screamtracker 2 module sound data +!:mime audio/x-mod +#audio/x-screamtracker-module +21 string BMOD2STM Screamtracker 2 module sound data +!:mime audio/x-mod +#audio/x-screamtracker-module +1080 string M.K. 4-channel Protracker module sound data +!:mime audio/x-mod +#audio/x-protracker-module +>0 string >\0 Title: "%s" +1080 string M!K! 4-channel Protracker module sound data +!:mime audio/x-mod +#audio/x-protracker-module +>0 string >\0 Title: "%s" +1080 string FLT4 4-channel Startracker module sound data +!:mime audio/x-mod +#audio/x-startracker-module +>0 string >\0 Title: "%s" +1080 string FLT8 8-channel Startracker module sound data +!:mime audio/x-mod +#audio/x-startracker-module +>0 string >\0 Title: "%s" +1080 string 4CHN 4-channel Fasttracker module sound data +!:mime audio/x-mod +#audio/x-fasttracker-module +>0 string >\0 Title: "%s" +1080 string 6CHN 6-channel Fasttracker module sound data +!:mime audio/x-mod +#audio/x-fasttracker-module +>0 string >\0 Title: "%s" +1080 string 8CHN 8-channel Fasttracker module sound data +!:mime audio/x-mod +#audio/x-fasttracker-module +>0 string >\0 Title: "%s" +1080 string CD81 8-channel Octalyser module sound data +!:mime audio/x-mod +#audio/x-octalysertracker-module +>0 string >\0 Title: "%s" +1080 string OKTA 8-channel Octalyzer module sound data +!:mime audio/x-mod +#audio/x-octalysertracker-module +>0 string >\0 Title: "%s" +# Not good enough. +#1082 string CH +#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data +1080 string 16CN 16-channel Taketracker module sound data +!:mime audio/x-mod +#audio/x-taketracker-module +>0 string >\0 Title: "%s" +1080 string 32CN 32-channel Taketracker module sound data +!:mime audio/x-mod +#audio/x-taketracker-module +>0 string >\0 Title: "%s" + +# TOC sound files -Trevor Johnson +# +0 string TOC TOC sound file + +# sidfiles +# added name,author,(c) and new RSID type by 2003-06-24 +0 string SIDPLAY\ INFOFILE Sidplay info file + +0 string PSID PlaySID v2.2+ (AMIGA) sidtune +>4 beshort >0 w/ header v%d, +>14 beshort =1 single song, +>14 beshort >1 %d songs, +>16 beshort >0 default song: %d +>0x16 string >\0 name: "%s" +>0x36 string >\0 author: "%s" +>0x56 string >\0 copyright: "%s" + +0 string RSID RSID sidtune PlaySID compatible +>4 beshort >0 w/ header v%d, +>14 beshort =1 single song, +>14 beshort >1 %d songs, +>16 beshort >0 default song: %d +>0x16 string >\0 name: "%s" +>0x36 string >\0 author: "%s" +>0x56 string >\0 copyright: "%s" + +# IRCAM +# VAX and MIPS files are little-endian; Sun and NeXT are big-endian +0 belong 0x64a30100 IRCAM file (VAX) +0 belong 0x64a30200 IRCAM file (Sun) +0 belong 0x64a30300 IRCAM file (MIPS little-endian) +0 belong 0x64a30400 IRCAM file (NeXT) + +# NIST SPHERE +0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file + +# Sample Vision +0 string SOUND\ SAMPLE\ DATA\ Sample Vision file + +# Audio Visual Research +0 string 2BIT Audio Visual Research file, +>12 beshort =0 mono, +>12 beshort =-1 stereo, +>14 beshort x %d bits +>16 beshort =0 unsigned, +>16 beshort =-1 signed, +>22 belong&0x00ffffff x %d Hz, +>18 beshort =0 no loop, +>18 beshort =-1 loop, +>21 ubyte <128 note %d, +>22 byte =0 replay 5.485 KHz +>22 byte =1 replay 8.084 KHz +>22 byte =2 replay 10.971 Khz +>22 byte =3 replay 16.168 Khz +>22 byte =4 replay 21.942 KHz +>22 byte =5 replay 32.336 KHz +>22 byte =6 replay 43.885 KHz +>22 byte =7 replay 47.261 KHz + +# SGI SoundTrack +0 string _SGI_SoundTrack SGI SoundTrack project file +# ID3 version 2 tags +0 string ID3 Audio file with ID3 version 2 +>3 byte x \b.%d +>4 byte x \b.%d +>>5 byte &0x80 \b, unsynchronized frames +>>5 byte &0x40 \b, extended header +>>5 byte &0x20 \b, experimental +>>5 byte &0x10 \b, footer present +>(6.I) indirect x \b, contains: + +# NSF (NES sound file) magic +0 string NESM\x1a NES Sound File +>14 string >\0 ("%s" by +>46 string >\0 %s, copyright +>78 string >\0 %s), +>5 byte x version %d, +>6 byte x %d tracks, +>122 byte&0x2 =1 dual PAL/NTSC +>122 byte&0x1 =1 PAL +>122 byte&0x1 =0 NTSC + +# Impulse tracker module (audio/x-it) +0 string IMPM Impulse Tracker module sound data - +!:mime audio/x-mod +>4 string >\0 "%s" +>40 leshort !0 compatible w/ITv%x +>42 leshort !0 created w/ITv%x + +# Imago Orpheus module (audio/x-imf) +60 string IM10 Imago Orpheus module sound data - +>0 string >\0 "%s" + +# From +# These are the /etc/magic entries to decode modules, instruments, and +# samples in Impulse Tracker's native format. + +0 string IMPS Impulse Tracker Sample +>18 byte &2 16 bit +>18 byte ^2 8 bit +>18 byte &4 stereo +>18 byte ^4 mono +0 string IMPI Impulse Tracker Instrument +>28 leshort !0 ITv%x +>30 byte !0 %d samples + +# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files +# From +0 string LM8953 Yamaha TX Wave +>22 byte 0x49 looped +>22 byte 0xC9 non-looped +>23 byte 1 33kHz +>23 byte 2 50kHz +>23 byte 3 16kHz + +# scream tracker: file(1) magic for Scream Tracker sample files +# +# From +76 string SCRS Scream Tracker Sample +>0 byte 1 sample +>0 byte 2 adlib melody +>0 byte >2 adlib drum +>31 byte &2 stereo +>31 byte ^2 mono +>31 byte &4 16bit little endian +>31 byte ^4 8bit +>30 byte 0 unpacked +>30 byte 1 packed + +# audio +# From: Cory Dikkers +0 string MMD0 MED music file, version 0 +0 string MMD1 OctaMED Pro music file, version 1 +0 string MMD3 OctaMED Soundstudio music file, version 3 +0 string OctaMEDCmpr OctaMED Soundstudio compressed file +0 string MED MED_Song +0 string SymM Symphonie SymMOD music file +# +0 string THX AHX version +>3 byte =0 1 module data +>3 byte =1 2 module data +# +0 string OKTASONG Oktalyzer module data +# +0 string DIGI\ Booster\ module\0 %s +>20 byte >0 %c +>>21 byte >0 \b%c +>>>22 byte >0 \b%c +>>>>23 byte >0 \b%c +>610 string >\0 \b, "%s" +# +0 string DBM0 DIGI Booster Pro Module +>4 byte >0 V%X. +>>5 byte x \b%02X +>16 string >\0 \b, "%s" +# +0 string FTMN FaceTheMusic module +>16 string >\0d \b, "%s" + +# From: 2003-06-24 +0 string AMShdr\32 Velvet Studio AMS Module v2.2 +0 string Extreme Extreme Tracker AMS Module v1.3 +0 string DDMF Xtracker DMF Module +>4 byte x v%i +>0xD string >\0 Title: "%s" +>0x2B string >\0 Composer: "%s" +0 string DSM\32 Dynamic Studio Module DSM +0 string SONG DigiTrekker DTM Module +0 string DMDL DigiTrakker MDL Module +0 string PSM\32 Protracker Studio PSM Module +44 string PTMF Poly Tracker PTM Module +>0 string >\32 Title: "%s" +0 string MT20 MadTracker 2.0 Module MT2 +0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD +0 string RTMM RTM Module +0x426 string MaDoKaN96 XMS Adlib Module +>0 string >\0 Composer: "%s" +0 string AMF AMF Module +>4 string >\0 Title: "%s" +0 string MODINFO1 Open Cubic Player Module Inforation MDZ +0 string Extended\40Instrument: Fast Tracker II Instrument + +# From: Takeshi Hamasaki +# NOA Nancy Codec file +0 string \210NOA\015\012\032 NOA Nancy Codec Movie file +# Yamaha SMAF format +0 string MMMD Yamaha SMAF file +# Sharp Jisaku Melody format for PDC +0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody +>20 string Ver01.00 Ver. 1.00 +>>32 byte x , %d tracks + +# Free lossless audio codec +# From: Przemyslaw Augustyniak +0 string fLaC FLAC audio bitstream data +!:mime audio/x-flac +>4 byte&0x7f >0 \b, unknown version +>4 byte&0x7f 0 \b +# some common bits/sample values +>>20 beshort&0x1f0 0x030 \b, 4 bit +>>20 beshort&0x1f0 0x050 \b, 6 bit +>>20 beshort&0x1f0 0x070 \b, 8 bit +>>20 beshort&0x1f0 0x0b0 \b, 12 bit +>>20 beshort&0x1f0 0x0f0 \b, 16 bit +>>20 beshort&0x1f0 0x170 \b, 24 bit +>>20 byte&0xe 0x0 \b, mono +>>20 byte&0xe 0x2 \b, stereo +>>20 byte&0xe 0x4 \b, 3 channels +>>20 byte&0xe 0x6 \b, 4 channels +>>20 byte&0xe 0x8 \b, 5 channels +>>20 byte&0xe 0xa \b, 6 channels +>>20 byte&0xe 0xc \b, 7 channels +>>20 byte&0xe 0xe \b, 8 channels +# some common sample rates +>>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz +>>17 belong&0xfffff0 0x0bb800 \b, 48 kHz +>>17 belong&0xfffff0 0x07d000 \b, 32 kHz +>>17 belong&0xfffff0 0x056220 \b, 22.05 kHz +>>17 belong&0xfffff0 0x05dc00 \b, 24 kHz +>>17 belong&0xfffff0 0x03e800 \b, 16 kHz +>>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz +>>17 belong&0xfffff0 0x02ee00 \b, 12 kHz +>>17 belong&0xfffff0 0x01f400 \b, 8 kHz +>>17 belong&0xfffff0 0x177000 \b, 96 kHz +>>17 belong&0xfffff0 0x0fa000 \b, 64 kHz +>>21 byte&0xf >0 \b, >4G samples +>>21 byte&0xf 0 \b +>>>22 belong >0 \b, %u samples +>>>22 belong 0 \b, length unknown + +# (ISDN) VBOX voice message file (Wolfram Kleff) +0 string VBOX VBOX voice message data + +# ReBorn Song Files (.rbs) +# David J. Singer +8 string RB40 RBS Song file +>29 string ReBorn created by ReBorn +>37 string Propellerhead created by ReBirth + +# Synthesizer Generator and Kimwitu share their file format +0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data +# Kimwitu++ uses a slightly different magic +0 string A#S#C#S#S#L#HUB Kimwitu++ data + +# From "Simon Hosie +0 string TFMX-SONG TFMX module sound data + +# Monkey's Audio compressed audio format (.ape) +# From danny.milo@gmx.net (Danny Milosavljevic) +# New version from Abel Cheung +0 string MAC\040 Monkey's Audio compressed format +>4 uleshort >0x0F8B version %d +>>(0x08.l) uleshort =1000 with fast compression +>>(0x08.l) uleshort =2000 with normal compression +>>(0x08.l) uleshort =3000 with high compression +>>(0x08.l) uleshort =4000 with extra high compression +>>(0x08.l) uleshort =5000 with insane compression +>>(0x08.l+18) uleshort =1 \b, mono +>>(0x08.l+18) uleshort =2 \b, stereo +>>(0x08.l+20) ulelong x \b, sample rate %d +>4 uleshort <0x0F8C version %d +>>6 uleshort =1000 with fast compression +>>6 uleshort =2000 with normal compression +>>6 uleshort =3000 with high compression +>>6 uleshort =4000 with extra high compression +>>6 uleshort =5000 with insane compression +>>10 uleshort =1 \b, mono +>>10 uleshort =2 \b, stereo +>>12 ulelong x \b, sample rate %d + +# adlib sound files +# From Gürkan Sengün , http://www.linuks.mine.nu +0 string RAWADATA RdosPlay RAW + +1068 string RoR AMUSIC Adlib Tracker + +0 string JCH EdLib + +0 string mpu401tr MPU-401 Trakker + +0 string SAdT Surprise! Adlib Tracker +>4 byte x Version %d + +0 string XAD! eXotic ADlib + +0 string ofTAZ! eXtra Simple Music + +# Spectrum 128 tunes (.ay files). +# From: Emanuel Haupt +0 string ZXAYEMUL Spectrum 128 tune + +0 string \0BONK BONK, +#>5 byte x version %d +>14 byte x %d channel(s), +>15 byte =1 lossless, +>15 byte =0 lossy, +>16 byte x mid-side + +384 string LockStream LockStream Embedded file (mostly MP3 on old Nokia phones) + +# format VQF (proprietary codec for sound) +# some infos on the header file available at : +# http://www.twinvq.org/english/technology_format.html +0 string TWIN97012000 VQF data +>27 short 0 \b, Mono +>27 short 1 \b, Stereo +>31 short >0 \b, %d kbit/s +>35 short >0 \b, %d kHz + +# Nelson A. de Oliveira (naoliv@gmail.com) +# .eqf +0 string Winamp\ EQ\ library\ file %s +# it will match only versions like v. +# Since I saw only eqf files with version v1.1 I think that it's OK +>23 string x \b%.4s +# .preset +0 string [Equalizer\ preset] XMMS equalizer preset +# .m3u +0 search/1 #EXTM3U M3U playlist text +# .pls +0 search/1 [playlist] PLS playlist text +# licq.conf +1 string [licq] LICQ configuration file + +# Atari ST audio files by Dirk Jagdmann +0 string ICE! SNDH Atari ST music +0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music + +# musepak support From: "Jiri Pejchal" +0 string MP+ Musepack audio +>3 byte 255 \b, SV pre8 +>3 byte&0xF 0x6 \b, SV 6 +>3 byte&0xF 0x8 \b, SV 8 +>3 byte&0xF 0x7 \b, SV 7 +>>3 byte&0xF0 0x0 \b.0 +>>3 byte&0xF0 0x10 \b.1 +>>3 byte&0xF0 240 \b.15 +>>10 byte&0xF0 0x0 \b, no profile +>>10 byte&0xF0 0x10 \b, profile 'Unstable/Experimental' +>>10 byte&0xF0 0x50 \b, quality 0 +>>10 byte&0xF0 0x60 \b, quality 1 +>>10 byte&0xF0 0x70 \b, quality 2 (Telephone) +>>10 byte&0xF0 0x80 \b, quality 3 (Thumb) +>>10 byte&0xF0 0x90 \b, quality 4 (Radio) +>>10 byte&0xF0 0xA0 \b, quality 5 (Standard) +>>10 byte&0xF0 0xB0 \b, quality 6 (Xtreme) +>>10 byte&0xF0 0xC0 \b, quality 7 (Insane) +>>10 byte&0xF0 0xD0 \b, quality 8 (BrainDead) +>>10 byte&0xF0 0xE0 \b, quality 9 +>>10 byte&0xF0 0xF0 \b, quality 10 +>>27 byte 0x0 \b, Buschmann 1.7.0-9, Klemm 0.90-1.05 +>>27 byte 102 \b, Beta 1.02 +>>27 byte 104 \b, Beta 1.04 +>>27 byte 105 \b, Alpha 1.05 +>>27 byte 106 \b, Beta 1.06 +>>27 byte 110 \b, Release 1.1 +>>27 byte 111 \b, Alpha 1.11 +>>27 byte 112 \b, Beta 1.12 +>>27 byte 113 \b, Alpha 1.13 +>>27 byte 114 \b, Beta 1.14 +>>27 byte 115 \b, Alpha 1.15 + +# IMY +# from http://filext.com/detaillist.php?extdetail=IMY +# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm +# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html +# http://www.wx800.com/msg/download/irda/iMelody.pdf +0 string BEGIN:IMELODY iMelody Ringtone Format + +# From: "Mateus Caruccio" +# guitar pro v3,4,5 from http://filext.com/file-extension/gp3 +0 string \030FICHIER\ GUITAR\ PRO\ v3. Guitar Pro Ver. 3 Tablature + +# From: "Leslie P. Polzer" +60 string SONG SoundFX Module sound file + +# Type: Adaptive Multi-Rate Codec +# URL: http://filext.com/detaillist.php?extdetail=AMR +# From: Russell Coker +0 string #!AMR Adaptive Multi-Rate Codec (GSM telephony) +#---------------------------------------------------------------- +# basis: file(1) magic for BBx/Pro5-files +# Oliver Dammer 2005/11/07 +# http://www.basis.com business-basic-files. +# +0 string \074\074bbx\076\076 BBx +>7 string \000 indexed file +>7 string \001 serial file +>7 string \002 keyed file +>>13 short 0 (sort) +>7 string \004 program +>>18 byte x (LEVEL %d) +>>>23 string >\000 psaved +>7 string \006 mkeyed file +>>13 short 0 (sort) +>>8 string \000 (mkey) +#------------------------------------------------------------------------------ +# bFLT: file(1) magic for BFLT uclinux binary files +# +# From Philippe De Muyter +# +0 string bFLT BFLT executable +>4 belong x - version %ld +>4 belong 4 +>>36 belong&0x1 0x1 ram +>>36 belong&0x2 0x2 gotpic +>>36 belong&0x4 0x4 gzip +>>36 belong&0x8 0x8 gzdata +#------------------------------------------------------------------------------ +# blender: file(1) magic for Blender 3D related files +# +# Native format rule v1.2. For questions use the developers list +# http://lists.blender.org/mailman/listinfo/bf-committers +# GLOB chunk was moved near start and provides subversion info since 2.42 + +0 string =BLENDER Blender3D, +>7 string =_ saved as 32-bits +>>8 string =v little endian +>>>9 byte x with version %c. +>>>10 byte x \b%c +>>>11 byte x \b%c +>>>0x40 string =GLOB \b. +>>>>0x58 leshort x \b%.4d +>>8 string =V big endian +>>>9 byte x with version %c. +>>>10 byte x \b%c +>>>11 byte x \b%c +>>>0x40 string =GLOB \b. +>>>>0x58 beshort x \b%.4d +>7 string =- saved as 64-bits +>>8 string =v little endian +>>9 byte x with version %c. +>>10 byte x \b%c +>>11 byte x \b%c +>>0x44 string =GLOB \b. +>>>0x60 leshort x \b%.4d +>>8 string =V big endian +>>>9 byte x with version %c. +>>>10 byte x \b%c +>>>11 byte x \b%c +>>>0x44 string =GLOB \b. +>>>>0x60 beshort x \b%.4d + +# Scripts that run in the embeded Python interpreter +0 string #!BPY Blender3D BPython script + +#------------------------------------------------------------------------------ +# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine +# +# Note that this 0407 conflicts with several other a.out formats... +# +# XXX - should this be redone with "be" and "le", so that it works on +# little-endian machines as well? If so, what's the deal with +# "VAX-order" and "VAX-order2"? +# +#0 long 0407 68K Blit (standalone) executable +#0 short 0407 VAX-order2 68K Blit (standalone) executable +0 short 03401 VAX-order 68K Blit (standalone) executable +0 long 0406 68k Blit mpx/mux executable +0 short 0406 VAX-order2 68k Blit mpx/mux executable +0 short 03001 VAX-order 68k Blit mpx/mux executable +# Need more values for WE32 DMD executables. +# Note that 0520 is the same as COFF +#0 short 0520 tty630 layers executable +# +# i80960 b.out objects and archives +# +0 long 0x10d i960 b.out relocatable object +>16 long >0 not stripped +# +# b.out archive (hp-rt on i960) +0 string =! b.out archive +>8 string __.SYMDEF random library +#------------------------------------------------------------------------------ +# bsdi: file(1) magic for BSD/OS (from BSDI) objects +# + +0 lelong 0314 386 compact demand paged pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0407 386 executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0410 386 pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0413 386 demand paged pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +# same as in SunOS 4.x, except for static shared libraries +0 belong&077777777 0600413 sparc demand paged +>0 byte &0x80 +>>20 belong <4096 shared library +>>20 belong =4096 dynamically linked executable +>>20 belong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) + +0 belong&077777777 0600410 sparc pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) + +0 belong&077777777 0600407 sparc +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) +#------------------------------------------------------------------------------ +# BTSnoop: file(1) magic for BTSnoop files +# +# From +0 string btsnoop\0 BTSnoop +>8 belong x version %d, +>12 belong 1001 Unencapsulated HCI +>12 belong 1002 HCI UART (H4) +>12 belong 1003 HCI BCSP +>12 belong 1004 HCI Serial (H5) +>>12 belong x type %d +#------------------------------------------------------------------------------ +# c-lang: file(1) magic for C programs (or REXX) +# + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# if you uncomment "/*" for C/REXX below, also uncomment this entry +#0 string /*\ XPM\ */ X pixmap image data +#!:mime image/x-xpmi + +# 3DS (3d Studio files) Conflicts with diff output 0x3d '=' +#16 beshort 0x3d3d image/x-3ds + +# this first will upset you if you're a PL/1 shop... +# in which case rm it; ascmagic will catch real C programs +#0 search/1 /* C or REXX program text +#0 search/1 // C++ program text + +# From: Mikhail Teterin +0 string cscope cscope reference data +>7 string x version %.2s +# We skip the path here, because it is often long (so file will +# truncate it) and mostly redundant. +# The inverted index functionality was added some time betwen +# versions 11 and 15, so look for -q if version is above 14: +>7 string >14 +>>10 search/100 \ -q\ with inverted index +>10 search/100 \ -c\ text (non-compressed) +#------------------------------------------------------------------------------ +# c64: file(1) magic for various commodore 64 related files +# +# From: Dirk Jagdmann + +0x16500 belong 0x12014100 D64 Image +0x16500 belong 0x12014180 D71 Image +0x61800 belong 0x28034400 D81 Image +0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image +0 belong 0x43154164 X64 Image + +0 string GCR-1541 GCR Image +>8 byte x version: %i +>9 byte x tracks: %i + +9 string PSUR ARC archive (c64) +2 string -LH1- LHA archive (c64) + +0 string C64File PC64 Emulator file +>8 string >\0 "%s" +0 string C64Image PC64 Freezer Image + +0 beshort 0x38CD C64 PCLink Image +0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot + +0 belong 0xFF424CFF WRAptor packer (c64) + +0 string C64S\x20tape\x20file T64 tape Image +>32 leshort x Version:0x%x +>36 leshort !0 Entries:%i +>40 string x Name:%.24s + +0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image +>32 leshort x Version:0x%x +>36 leshort !0 Entries:%i +>40 string x Name:%.24s + +0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image +>32 leshort x Version:0x%x +>36 leshort !0 Entries:%i +>40 string x Name:%.24s + +#------------------------------------------------------------------------------ +# autocad: file(1) magic for cad files +# + +# AutoCAD DWG versions R13/R14 (www.autodesk.com) +# Written December 01, 2003 by Lester Hightower +# Based on the DWG File Format Specifications at http://www.opendwg.org/ +0 string \101\103\061\060\061 AutoCAD +>5 string \062\000\000\000\000 DWG ver. R13 +>5 string \064\000\000\000\000 DWG ver. R14 + +# Microstation DGN/CIT Files (www.bentley.com) +# Last updated July 29, 2005 by Lester Hightower +# DGN is the default file extension of Microstation/Intergraph CAD files. +# CIT is the proprietary raster format (similar to TIFF) used to attach +# raster underlays to Microstation DGN (vector) drawings. +# +# http://www.wotsit.org/search.asp +# http://filext.com/detaillist.php?extdetail=DGN +# http://filext.com/detaillist.php?extdetail=CIT +# +# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2 +# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928 +# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682 +# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F +0 string \010\011\376 Microstation +>3 string \002 +>>30 string \026\105 DGNFile +>>30 string \034\105 DGNFile +>>30 string \073\107 DGNFile +>>30 string \073\110 DGNFile +>>30 string \106\107 DGNFile +>>30 string \110\103 DGNFile +>>30 string \120\104 DGNFile +>>30 string \172\104 DGNFile +>>30 string \172\105 DGNFile +>>30 string \172\106 DGNFile +>>30 string \234\106 DGNFile +>>30 string \273\105 DGNFile +>>30 string \306\106 DGNFile +>>30 string \310\104 DGNFile +>>30 string \341\104 DGNFile +>>30 string \372\103 DGNFile +>>30 string \372\104 DGNFile +>>30 string \372\106 DGNFile +>>30 string \376\103 DGNFile +>4 string \030\000\000 CITFile +>4 string \030\000\003 CITFile + +# AutoCad, from Nahuel Greco +# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com) +0 string AC1012 AutoCad (release 12) +0 string AC1013 AutoCad (release 13) +0 string AC1014 AutoCad (release 14) + +# CAD: file(1) magic for computer aided design files +# Phillip Griffith +# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications. +# +0 belong 0x08051700 Bentley/Intergraph MicroStation DGN cell library +0 belong 0x0809fe02 Bentley/Intergraph MicroStation DGN vector CAD +0 belong 0xc809fe02 Bentley/Intergraph MicroStation DGN vector CAD +0 beshort 0x0809 Bentley/Intergraph MicroStation +>0x02 byte 0xfe +>>0x04 beshort 0x1800 CIT raster CAD +0 string AC1012 AutoDesk AutoCAD R13 +0 string AC1014 AutoDesk AutoCAD R14 +0 string AC1015 AutoDesk AutoCAD R2000 +#------------------------------------------------------------------------------ +# Cafe Babes unite! +# +# Since Java bytecode and Mach-O fat-files have the same magic number, the test +# must be performed in the same "magic" sequence to get both right. The long +# at offset 4 in a mach-O fat file tells the number of architectures; the short at +# offset 4 in a Java bytecode file is the JVM minor version and the +# short at offset 6 is the JVM major version. Since there are only +# only 18 labeled Mach-O architectures at current, and the first released +# Java class format was version 43.0, we can safely choose any number +# between 18 and 39 to test the number of architectures against +# (and use as a hack). Let's not use 18, because the Mach-O people +# might add another one or two as time goes by... +# +0 belong 0xcafebabe +!:mime application/x-java-applet +>4 belong >30 compiled Java class data, +>>6 beshort x version %d. +>>4 beshort x \b%d +# Which is which? +#>>4 belong 0x032d (Java 1.0) +#>>4 belong 0x032d (Java 1.1) +>>4 belong 0x002e (Java 1.2) +>>4 belong 0x002f (Java 1.3) +>>4 belong 0x0030 (Java 1.4) +>>4 belong 0x0031 (Java 1.5) +>>4 belong 0x0032 (Java 1.6) + + +0 belong 0xcafebabe +>4 belong 1 Mach-O fat file with 1 architecture +>4 belong >1 +>>4 belong <20 Mach-O fat file with %ld architectures + +0 belong 0xcafed00d JAR compressed with pack200, +>>5 byte x version %d. +>>4 byte x \b%d +!:mime application/x-java-pack200 +#------------------------------------------------------------------------------ +# CDDB: file(1) magic for CDDB(tm) format CD text data files +# +# From +# +# This is the /etc/magic entry to decode datafiles as used by +# CDDB-enabled CD player applications. +# + +0 search/1/b #\040xmcd CDDB(tm) format CD text data + +#------------------------------------------------------------------------------ +# chord: file(1) magic for Chord music sheet typesetting utility input files +# +# From Philippe De Muyter +# File format is actually free, but many distributed files begin with `{title' +# +0 string {title Chord text file + +#------------------------------------------------------------------------------ +# cisco: file(1) magic for cisco Systems routers +# +# Most cisco file-formats are covered by the generic elf code +# +# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha. +0 belong&0xffffff00 0x85011400 cisco IOS microcode +>7 string >\0 for '%s' +0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode +>7 string >\0 for '%s' +#------------------------------------------------------------------------------ +# citrus locale declaration +# + +0 string RuneCT Citrus locale declaration for LC_CTYPE + + +#------------------------------------------------------------------------------ +# clarion: file(1) magic for # Clarion Personal/Professional Developer +# (v2 and above) +# From: Julien Blache + +# Database files +# signature +0 leshort 0x3343 Clarion Developer (v2 and above) data file +# attributes +>2 leshort &0x0001 \b, locked +>2 leshort &0x0004 \b, encrypted +>2 leshort &0x0008 \b, memo file exists +>2 leshort &0x0010 \b, compressed +>2 leshort &0x0040 \b, read only +# number of records +>5 lelong x \b, %ld records + +# Memo files +0 leshort 0x334d Clarion Developer (v2 and above) memo data + +# Key/Index files +# No magic? :( + +# Help files +0 leshort 0x49e0 Clarion Developer (v2 and above) help data + +#------------------------------------------------------------------------------ +# claris: file(1) magic for claris +# "H. Nanosecond" +# Claris Works a word processor, etc. +# Version 3.0 + +# .pct claris works clip art files +#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 +#* +#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000 +#null to byte 1000 octal +514 string \377\377\377\377\000 Claris clip art? +>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. +514 string \377\377\377\377\001 Claris clip art? +>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. + +# Claris works files +# .cwk +0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document +# .plt +0 string \020\341\000\000\010\010 Claris Works pallete files .plt + +# .msp a dictionary file I am not sure about this I have only one .msp file +0 string \002\271\262\000\040\002\000\164 Claris works dictionary + +# .usp are user dictionary bits +# I am not sure about a magic header: +#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151 +# soh S p f 8 U D sp ^ S cr nl p o d i +#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043 +# a t r i s t sp ^ S cr nl d i v sp # + +# .mth Thesaurus +# starts with \0 but no magic header + +# .chy Hyphenation file +# I am not sure: 000 210 034 000 000 + +# other claris files +#./windows/claris/useng.ndx: data +#./windows/claris/xtndtran.l32: data +#./windows/claris/xtndtran.lst: data +#./windows/claris/clworks.lbl: data +#./windows/claris/clworks.prf: data +#./windows/claris/userd.spl: data + +#------------------------------------------------------------------------------ +# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper. +# +# XXX - what byte order does the Clipper use? +# +# XXX - what's the "!" stuff: +# +# >18 short !074000,000000 C1 R1 +# >18 short !074000,004000 C2 R1 +# >18 short !074000,010000 C3 R1 +# >18 short !074000,074000 TEST +# +# I shall assume it's ANDing the field with the first value and +# comparing it with the second, and rewrite it as: +# +# >18 short&074000 000000 C1 R1 +# >18 short&074000 004000 C2 R1 +# >18 short&074000 010000 C3 R1 +# >18 short&074000 074000 TEST +# +# as SVR3.1's "file" doesn't support anything of the "!074000,000000" +# sort, nor does SunOS 4.x, so either it's something Intergraph added +# in CLIX, or something AT&T added in SVR3.2 or later, or something +# somebody else thought was a good idea; it's not documented in the +# man page for this version of "magic", nor does it appear to be +# implemented (at least not after I blew off the bogus code to turn +# old-style "&"s into new-style "&"s, which just didn't work at all). +# +0 short 0575 CLIPPER COFF executable (VAX #) +>20 short 0407 (impure) +>20 short 0410 (5.2 compatible) +>20 short 0411 (pure) +>20 short 0413 (demand paged) +>20 short 0443 (target shared library) +>12 long >0 not stripped +>22 short >0 - version %ld +0 short 0577 CLIPPER COFF executable +>18 short&074000 000000 C1 R1 +>18 short&074000 004000 C2 R1 +>18 short&074000 010000 C3 R1 +>18 short&074000 074000 TEST +>20 short 0407 (impure) +>20 short 0410 (pure) +>20 short 0411 (separate I&D) +>20 short 0413 (paged) +>20 short 0443 (target shared library) +>12 long >0 not stripped +>22 short >0 - version %ld +>48 long&01 01 alignment trap enabled +>52 byte 1 -Ctnc +>52 byte 2 -Ctsw +>52 byte 3 -Ctpw +>52 byte 4 -Ctcb +>53 byte 1 -Cdnc +>53 byte 2 -Cdsw +>53 byte 3 -Cdpw +>53 byte 4 -Cdcb +>54 byte 1 -Csnc +>54 byte 2 -Cssw +>54 byte 3 -Cspw +>54 byte 4 -Cscb +4 string pipe CLIPPER instruction trace +4 string prof CLIPPER instruction profile + +#------------------------------------------------------------------------------ +# commands: file(1) magic for various shells and interpreters +# +#0 string : shell archive or script for antique kernel text +0 string/b #!\ /bin/sh POSIX shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /bin/csh C shell script text executable +!:mime text/x-shellscript +# korn shell magic, sent by George Wu, gwu@clyde.att.com +0 string/b #!\ /bin/ksh Korn shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /bin/tcsh Tenex C shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable +!:mime text/x-shellscript + +# +# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) +0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable +!:mime text/x-shellscript +0 string/b #!\ /bin/nawk new awk script text executable +!:mime text/x-nawk +0 string/b #!\ /usr/bin/nawk new awk script text executable +!:mime text/x-nawk +0 string/b #!\ /usr/local/bin/nawk new awk script text executable +!:mime text/x-nawk +0 string/b #!\ /bin/gawk GNU awk script text executable +!:mime text/x-gawk +0 string/b #!\ /usr/bin/gawk GNU awk script text executable +!:mime text/x-gawk +0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable +!:mime text/x-gawk +# +0 string/b #!\ /bin/awk awk script text executable +!:mime text/x-awk +0 string/b #!\ /usr/bin/awk awk script text executable +!:mime text/x-awk +# update to distinguish from *.vcf files +# this is broken because postscript has /EBEGIN{ for example. +#0 search/Bb BEGIN { awk script text + +# AT&T Bell Labs' Plan 9 shell +0 string/b #!\ /bin/rc Plan 9 rc shell script text executable + +# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) +0 string/b #!\ /bin/bash Bourne-Again shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable +!:mime text/x-shellscript + +# using env +0 string #!/usr/bin/env a +>15 string >\0 %s script text executable +0 string #!\ /usr/bin/env a +>16 string >\0 %s script text executable + +# PHP scripts +# Ulf Harnhammar +0 search/1/c =. +0 string $Suite TTCN Abstract Test Suite +>&1 string $SuiteId +>>&1 string >\n %s +>&2 string $SuiteId +>>&1 string >\n %s +>&3 string $SuiteId +>>&1 string >\n %s + +# MSC (message sequence charts) are a formal description technique, +# described in ITU-T Z.120, mainly used for communication protocols. +# Added by W. Borgert . +0 string mscdocument Message Sequence Chart (document) +0 string msc Message Sequence Chart (chart) +0 string submsc Message Sequence Chart (subchart) + +#------------------------------------------------------------------------------ +# compress: file(1) magic for pure-compression formats (no archives) +# +# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. +# +# Formats for various forms of compressed data +# Formats for "compress" proper have been moved into "compress.c", +# because it tries to uncompress it to figure out what's inside. + +# standard unix compress +0 string \037\235 compress'd data +!:mime application/x-compress +!:apple LZIVZIVU +>2 byte&0x80 >0 block compressed +>2 byte&0x1f x %d bits + +# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) +# Edited by Chris Chittleborough , March 2002 +# * Original filename is only at offset 10 if "extra field" absent +# * Produce shorter output - notably, only report compression methods +# other than 8 ("deflate", the only method defined in RFC 1952). +0 string \037\213 gzip compressed data +!:mime application/x-gzip +>2 byte <8 \b, reserved method +>2 byte >8 \b, unknown method +>3 byte &0x01 \b, ASCII +>3 byte &0x02 \b, has CRC +>3 byte &0x04 \b, extra field +>3 byte&0xC =0x08 +>>10 string x \b, was "%s" +>3 byte &0x10 \b, has comment +>9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT) +>9 byte =0x01 \b, from Amiga +>9 byte =0x02 \b, from VMS +>9 byte =0x03 \b, from Unix +>9 byte =0x04 \b, from VM/CMS +>9 byte =0x05 \b, from Atari +>9 byte =0x06 \b, from HPFS filesystem (OS/2, NT) +>9 byte =0x07 \b, from MacOS +>9 byte =0x08 \b, from Z-System +>9 byte =0x09 \b, from CP/M +>9 byte =0x0A \b, from TOPS/20 +>9 byte =0x0B \b, from NTFS filesystem (NT) +>9 byte =0x0C \b, from QDOS +>9 byte =0x0D \b, from Acorn RISCOS +>3 byte &0x10 \b, comment +>3 byte &0x20 \b, encrypted +>4 ledate >0 \b, last modified: %s +>8 byte 2 \b, max compression +>8 byte 4 \b, max speed + +# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis +0 string \037\036 packed data +!:mime application/octet-stream +>2 belong >1 \b, %d characters originally +>2 belong =1 \b, %d character originally +# +# This magic number is byte-order-independent. +0 short 0x1f1f old packed data +!:mime application/octet-stream + +# XXX - why *two* entries for "compacted data", one of which is +# byte-order independent, and one of which is byte-order dependent? +# +0 short 0x1fff compacted data +!:mime application/octet-stream +# This string is valid for SunOS (BE) and a matching "short" is listed +# in the Ultrix (LE) magic file. +0 string \377\037 compacted data +!:mime application/octet-stream +0 short 0145405 huf output +!:mime application/octet-stream + +# bzip2 +0 string BZh bzip2 compressed data +!:mime application/x-bzip2 +>3 byte >47 \b, block size = %c00k + +# lzip +0 string LZIP lzip compressed data +!:mime application/x-lzip +>4 byte x \b, version: %d + +# squeeze and crunch +# Michael Haardt +0 beshort 0x76FF squeezed data, +>4 string x original name %s +0 beshort 0x76FE crunched data, +>2 string x original name %s +0 beshort 0x76FD LZH compressed data, +>2 string x original name %s + +# Freeze +0 string \037\237 frozen file 2.1 +0 string \037\236 frozen file 1.0 (or gzip 0.5) + +# SCO compress -H (LZH) +0 string \037\240 SCO compress -H (LZH) data + +# European GSM 06.10 is a provisional standard for full-rate speech +# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse +# excitation/long term prediction) coding at 13 kbit/s. +# +# There's only a magic nibble (4 bits); that nibble repeats every 33 +# bytes. This isn't suited for use, but maybe we can use it someday. +# +# This will cause very short GSM files to be declared as data and +# mismatches to be declared as data too! +#0 byte&0xF0 0xd0 data +#>33 byte&0xF0 0xd0 +#>66 byte&0xF0 0xd0 +#>99 byte&0xF0 0xd0 +#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio + +# bzip a block-sorting file compressor +# by Julian Seward and others +# +#0 string BZ bzip compressed data +#>2 byte x \b, version: %c +#>3 string =1 \b, compression block size 100k +#>3 string =2 \b, compression block size 200k +#>3 string =3 \b, compression block size 300k +#>3 string =4 \b, compression block size 400k +#>3 string =5 \b, compression block size 500k +#>3 string =6 \b, compression block size 600k +#>3 string =7 \b, compression block size 700k +#>3 string =8 \b, compression block size 800k +#>3 string =9 \b, compression block size 900k + +# lzop from +0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data +>9 beshort <0x0940 +>>9 byte&0xf0 =0x00 - version 0. +>>9 beshort&0x0fff x \b%03x, +>>13 byte 1 LZO1X-1, +>>13 byte 2 LZO1X-1(15), +>>13 byte 3 LZO1X-999, +## >>22 bedate >0 last modified: %s, +>>14 byte =0x00 os: MS-DOS +>>14 byte =0x01 os: Amiga +>>14 byte =0x02 os: VMS +>>14 byte =0x03 os: Unix +>>14 byte =0x05 os: Atari +>>14 byte =0x06 os: OS/2 +>>14 byte =0x07 os: MacOS +>>14 byte =0x0A os: Tops/20 +>>14 byte =0x0B os: WinNT +>>14 byte =0x0E os: Win32 +>9 beshort >0x0939 +>>9 byte&0xf0 =0x00 - version 0. +>>9 byte&0xf0 =0x10 - version 1. +>>9 byte&0xf0 =0x20 - version 2. +>>9 beshort&0x0fff x \b%03x, +>>15 byte 1 LZO1X-1, +>>15 byte 2 LZO1X-1(15), +>>15 byte 3 LZO1X-999, +## >>25 bedate >0 last modified: %s, +>>17 byte =0x00 os: MS-DOS +>>17 byte =0x01 os: Amiga +>>17 byte =0x02 os: VMS +>>17 byte =0x03 os: Unix +>>17 byte =0x05 os: Atari +>>17 byte =0x06 os: OS/2 +>>17 byte =0x07 os: MacOS +>>17 byte =0x0A os: Tops/20 +>>17 byte =0x0B os: WinNT +>>17 byte =0x0E os: Win32 + +# 4.3BSD-Quasijarus Strong Compression +# http://minnie.tuhs.org/Quasijarus/compress.html +0 string \037\241 Quasijarus strong compressed data + +# From: Cory Dikkers +0 string XPKF Amiga xpkf.library compressed data +0 string PP11 Power Packer 1.1 compressed data +0 string PP20 Power Packer 2.0 compressed data, +>4 belong 0x09090909 fast compression +>4 belong 0x090A0A0A mediocre compression +>4 belong 0x090A0B0B good compression +>4 belong 0x090A0C0C very good compression +>4 belong 0x090A0C0D best compression + +# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) +# http://www.7-zip.org or DOC/7zFormat.txt +# +0 string 7z\274\257\047\034 7-zip archive data, +>6 byte x version %d +>7 byte x \b.%d + +# Type: LZMA +# URL: http://www.7-zip.org/sdk.html +# From: Robert Millan and Reuben Thomas +# Commented out because apparently not reliable (according to Debian +# bug #364260) +#0 string ]\000\000\200\000 LZMA compressed data + +# http://tukaani.org/xz/xz-file-format.txt +0 ustring \xFD7zXZ\x00 xz compressed data +!:mime application/x-xz + +# AFX compressed files (Wolfram Kleff) +2 string -afx- AFX compressed file data + +# Supplementary magic data for the file(1) command to support +# rzip(1). The format is described in magic(5). +# +# Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with +# this file. +# +0 string RZIP rzip compressed data +>4 byte x - version %d +>5 byte x \b.%d +>6 belong x (%d bytes) + +# Type: XZ +# URL: http://tukaani.org/xz/ +0 string \xfd\x37\x7a\x58\x5a\x00 XZ compressed data +!:mime application/x-xz +#------------------------------------------------------------------------------ +# Console game magic +# Toby Deshane +# ines: file(1) magic for Marat's iNES Nintendo Entertainment System +# ROM dump format + +0 string NES\032 iNES ROM dump, +>4 byte x %dx16k PRG +>5 byte x \b, %dx8k CHR +>6 byte&0x01 =0x1 \b, [Vert.] +>6 byte&0x01 =0x0 \b, [Horiz.] +>6 byte&0x02 =0x2 \b, [SRAM] +>6 byte&0x04 =0x4 \b, [Trainer] +>6 byte&0x04 =0x8 \b, [4-Scr] + +#------------------------------------------------------------------------------ +# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format +# +0x104 belong 0xCEED6666 Gameboy ROM: +>0x134 string >\0 "%.16s" +>0x146 byte 0x03 \b,[SGB] +>0x147 byte 0x00 \b, [ROM ONLY] +>0x147 byte 0x01 \b, [ROM+MBC1] +>0x147 byte 0x02 \b, [ROM+MBC1+RAM] +>0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT] +>0x147 byte 0x05 \b, [ROM+MBC2] +>0x147 byte 0x06 \b, [ROM+MBC2+BATTERY] +>0x147 byte 0x08 \b, [ROM+RAM] +>0x147 byte 0x09 \b, [ROM+RAM+BATTERY] +>0x147 byte 0x0B \b, [ROM+MMM01] +>0x147 byte 0x0C \b, [ROM+MMM01+SRAM] +>0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT] +>0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT] +>0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT] +>0x147 byte 0x11 \b, [ROM+MBC3] +>0x147 byte 0x12 \b, [ROM+MBC3+RAM] +>0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT] +>0x147 byte 0x19 \b, [ROM+MBC5] +>0x147 byte 0x1A \b, [ROM+MBC5+RAM] +>0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT] +>0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE] +>0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM] +>0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT] +>0x147 byte 0x1F \b, [Pocket Camera] +>0x147 byte 0xFD \b, [Bandai TAMA5] +>0x147 byte 0xFE \b, [Hudson HuC-3] +>0x147 byte 0xFF \b, [Hudson HuC-1] + +>0x148 byte 0 \b, ROM: 256Kbit +>0x148 byte 1 \b, ROM: 512Kbit +>0x148 byte 2 \b, ROM: 1Mbit +>0x148 byte 3 \b, ROM: 2Mbit +>0x148 byte 4 \b, ROM: 4Mbit +>0x148 byte 5 \b, ROM: 8Mbit +>0x148 byte 6 \b, ROM: 16Mbit +>0x148 byte 0x52 \b, ROM: 9Mbit +>0x148 byte 0x53 \b, ROM: 10Mbit +>0x148 byte 0x54 \b, ROM: 12Mbit + +>0x149 byte 1 \b, RAM: 16Kbit +>0x149 byte 2 \b, RAM: 64Kbit +>0x149 byte 3 \b, RAM: 128Kbit +>0x149 byte 4 \b, RAM: 1Mbit + +#>0x14e long x \b, CRC: %x + +#------------------------------------------------------------------------------ +# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format +# +0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump +>0x120 string >\0 Name: "%.16s" +>0x110 string >\0 %.16s +>0x1B0 string RA with SRAM + +#------------------------------------------------------------------------------ +# genesis: file(1) magic for the Super MegaDrive ROM dump format +# +0x280 string EAGN Super MagicDrive ROM dump +>0 byte x %dx16k blocks +>2 byte 0 \b, last in series or standalone +>2 byte >0 \b, split ROM +>8 byte 0xAA +>9 byte 0xBB + +#------------------------------------------------------------------------------ +# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format +# +0x280 string EAMG Super MagicDrive ROM dump +>0 byte x %dx16k blocks +>2 byte x \b, last in series or standalone +>8 byte 0xAA +>9 byte 0xBB + +#------------------------------------------------------------------------------ +# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps +# +# Does not detect all images. Very preliminary guesswork. Need more data +# on format. +# +# FIXME: need a little more info...;P +# +#0 byte 0xF3 +#>1 byte 0xED Sega Master System/Game Gear ROM dump +#>1 byte 0x31 Sega Master System/Game Gear ROM dump +#>1 byte 0xDB Sega Master System/Game Gear ROM dump +#>1 byte 0xAF Sega Master System/Game Gear ROM dump +#>1 byte 0xC3 Sega Master System/Game Gear ROM dump + +#------------------------------------------------------------------------------ +# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format +# +0 belong 0x21068028 Sega Dreamcast VMU game image +0 string LCDi Dream Animator file + +#------------------------------------------------------------------------------ +# v64: file(1) uncertain magic for the V64 format N64 ROM dumps +# +0 belong 0x37804012 V64 Nintendo 64 ROM dump + +# From: "Nelson A. de Oliveira" +# Nintendo .nds +192 string \044\377\256Qi\232 Nintendo DS Game ROM Image +# Nintendo .gba +0 string \056\000\000\352$\377\256Qi Nintendo Game Boy Advance ROM Image + +#------------------------------------------------------------------------------ +# msx: file(1) magic for MSX game cartridge dumps +# Too simple - MPi +#0 beshort 0x4142 MSX game cartridge dump + +#------------------------------------------------------------------------------ +# Sony Playstation executables (Adam Sjoegren ) : +0 string PS-X\ EXE Sony Playstation executable +# Area: +>113 string x (%s) + +#------------------------------------------------------------------------------ +# Microsoft Xbox executables .xbe (Esa Hyytiä ) +0 string XBEH XBE, Microsoft Xbox executable +# probabilistic checks whether signed or not +>0x0004 ulelong =0x0 +>>&2 ulelong =0x0 +>>>&2 ulelong =0x0 \b, not signed +>0x0004 ulelong >0 +>>&2 ulelong >0 +>>>&2 ulelong >0 \b, signed +# expect base address of 0x10000 +>0x0104 ulelong =0x10000 +>>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions +>>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007 +>>>(0x0118-0x0FF60) ulelong >0 (regions: +>>>>(0x0118-0x0FF60) ulelong &0x00000001 NA +>>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan +>>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World +>>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer +>>>(0x0118-0x0FF60) ulelong >0 \b) + +# -------------------------------- +# Microsoft Xbox data file formats +0 string XIP0 XIP, Microsoft Xbox data +0 string XTF0 XTF, Microsoft Xbox data + +# Atari Lynx cartridge dump (EXE/BLL header) +# From: "Stefan A. Haubenthal" + +0 beshort 0x8008 Lynx cartridge, +>2 beshort x RAM start $%04x +>6 string BS93 + +# Opera file system that is used on the 3DO console +# From: Serge van den Boom +0 string \x01ZZZZZ\x01 3DO "Opera" file system + +# From Gürkan Sengün , www.linuks.mine.nu +0 string GBS Nintendo Gameboy Music/Audio Data +12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module + +# Playstations Patch Files from: From: Thomas Klausner +0 string PPF30 Playstation Patch File version 3.0 +>5 byte 0 \b, PPF 1.0 patch +>5 byte 1 \b, PPF 2.0 patch +>5 byte 2 \b, PPF 3.0 patch +>>56 byte 0 \b, Imagetype BIN (any) +>>56 byte 1 \b, Imagetype GI (PrimoDVD) +>>57 byte 0 \b, Blockcheck disabled +>>57 byte 1 \b, Blockcheck enabled +>>58 byte 0 \b, Undo data not available +>>58 byte 1 \b, Undo data available +>6 string x \b, description: %s + +0 string PPF20 Playstation Patch File version 2.0 +>5 byte 0 \b, PPF 1.0 patch +>5 byte 1 \b, PPF 2.0 patch +>>56 lelong >0 \b, size of file to patch %d +>6 string x \b, description: %s + +0 string PPF10 Playstation Patch File version 1.0 +>5 byte 0 \b, Simple Encoding +>6 string x \b, description: %s + +# From: Daniel Dawson +# SNES9x .smv "movie" file format. +0 string SMV\x1A SNES9x input recording +>0x4 lelong x \b, version %d +# version 4 is latest so far +>0x4 lelong <5 +>>0x8 ledate x \b, recorded at %s +>>0xc lelong >0 \b, rerecorded %d times +>>0x10 lelong x \b, %d frames long +>>0x14 byte >0 \b, data for controller(s): +>>>0x14 byte &0x1 #1 +>>>0x14 byte &0x2 #2 +>>>0x14 byte &0x4 #3 +>>>0x14 byte &0x8 #4 +>>>0x14 byte &0x10 #5 +>>0x15 byte ^0x1 \b, begins from snapshot +>>0x15 byte &0x1 \b, begins from reset +>>0x15 byte ^0x2 \b, NTSC standard +>>0x15 byte &0x2 \b, PAL standard +>>0x17 byte &0x1 \b, settings: +# WIP1Timing not used as of version 4 +>>>0x4 lelong <4 +>>>>0x17 byte &0x2 WIP1Timing +>>>0x17 byte &0x4 Left+Right +>>>0x17 byte &0x8 VolumeEnvX +>>>0x17 byte &0x10 FakeMute +>>>0x17 byte &0x20 SyncSound +# New flag as of version 4 +>>>0x4 lelong >3 +>>>>0x17 byte &0x80 NoCPUShutdown +>>0x4 lelong <4 +>>>0x18 lelong >0x23 +>>>>0x20 leshort !0 +>>>>>0x20 lestring16 x \b, metadata: "%s" +>>0x4 lelong >3 +>>>0x24 byte >0 \b, port 1: +>>>>0x24 byte 1 joypad +>>>>0x24 byte 2 mouse +>>>>0x24 byte 3 SuperScope +>>>>0x24 byte 4 Justifier +>>>>0x24 byte 5 multitap +>>>0x24 byte >0 \b, port 2: +>>>>0x25 byte 1 joypad +>>>>0x25 byte 2 mouse +>>>>0x25 byte 3 SuperScope +>>>>0x25 byte 4 Justifier +>>>>0x25 byte 5 multitap +>>>0x18 lelong >0x43 +>>>>0x40 leshort !0 +>>>>>0x40 lestring16 x \b, metadata: "%s" +>>0x17 byte &0x40 \b, ROM: +>>>(0x18.l-26) lelong x CRC32 0x%08x +>>>(0x18.l-23) string x "%s" + +#------------------------------------------------------------------------------ +# convex: file(1) magic for Convex boxes +# +# Convexes are big-endian. +# +# /*\ +# * Below are the magic numbers and tests added for Convex. +# * Added at beginning, because they are expected to be used most. +# \*/ +0 belong 0507 Convex old-style object +>16 belong >0 not stripped +0 belong 0513 Convex old-style demand paged executable +>16 belong >0 not stripped +0 belong 0515 Convex old-style pre-paged executable +>16 belong >0 not stripped +0 belong 0517 Convex old-style pre-paged, non-swapped executable +>16 belong >0 not stripped +0 belong 0x011257 Core file +# +# The following are a series of dump format magic numbers. Each one +# corresponds to a drastically different dump format. The first on is +# the original dump format on a 4.1 BSD or earlier file system. The +# second marks the change between the 4.1 file system and the 4.2 file +# system. The Third marks the changing of the block size from 1K +# to 2K to be compatible with an IDC file system. The fourth indicates +# a dump that is dependent on Convex Storage Manager, because data in +# secondary storage is not physically contained within the dump. +# The restore program uses these number to determine how the data is +# to be extracted. +# +24 belong =60011 dump format, 4.1 BSD or earlier +24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC +24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible) +24 belong =60014 dump format, Convex Storage Manager by-reference dump +# +# what follows is a bunch of bit-mask checks on the flags field of the opthdr. +# If there is no `=' sign, assume just checking for whether the bit is set? +# +0 belong 0601 Convex SOFF +>88 belong&0x000f0000 =0x00000000 c1 +>88 belong &0x00010000 c2 +>88 belong &0x00020000 c2mp +>88 belong &0x00040000 parallel +>88 belong &0x00080000 intrinsic +>88 belong &0x00000001 demand paged +>88 belong &0x00000002 pre-paged +>88 belong &0x00000004 non-swapped +>88 belong &0x00000008 POSIX +# +>84 belong &0x80000000 executable +>84 belong &0x40000000 object +>84 belong&0x20000000 =0 not stripped +>84 belong&0x18000000 =0x00000000 native fpmode +>84 belong&0x18000000 =0x10000000 ieee fpmode +>84 belong&0x18000000 =0x18000000 undefined fpmode +# +0 belong 0605 Convex SOFF core +# +0 belong 0607 Convex SOFF checkpoint +>88 belong&0x000f0000 =0x00000000 c1 +>88 belong &0x00010000 c2 +>88 belong &0x00020000 c2mp +>88 belong &0x00040000 parallel +>88 belong &0x00080000 intrinsic +>88 belong &0x00000008 POSIX +# +>84 belong&0x18000000 =0x00000000 native fpmode +>84 belong&0x18000000 =0x10000000 ieee fpmode +>84 belong&0x18000000 =0x18000000 undefined fpmode + +#------------------------------------------------------------------------------ +# cracklib: file (1) magic for cracklib v2.7 + +0 lelong 0x70775631 Cracklib password index, little endian +>4 long >0 (%i words) +>4 long 0 ("64-bit") +>>8 long >-1 (%i words) +0 belong 0x70775631 Cracklib password index, big endian +>4 belong >-1 (%i words) +# really bellong 0x0000000070775631 +0 search/1 \0\0\0\0pwV1 Cracklib password index, big endian ("64-bit") +>12 belong >0 (%i words) +# ---------------------------------------------------------------------------- +# ctags: file (1) magic for Exuberant Ctags files +# From: Alexander Mai +0 search/1 =!_TAG Exuberant Ctags tag file text + +#------------------------------------------------------------------------------ +# dact: file(1) magic for DACT compressed files +# +0 long 0x444354C3 DACT compressed data +>4 byte >-1 (version %i. +>5 byte >-1 $BS%i. +>6 byte >-1 $BS%i) +>7 long >0 $BS, original size: %i bytes +>15 long >30 $BS, block size: %i bytes + +#------------------------------------------------------------------------------ +# database: file(1) magic for various databases +# +# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) +# +# +# GDBM magic numbers +# Will be maintained as part of the GDBM distribution in the future. +# +0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian +!:mime application/x-gdbm +0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian +!:mime application/x-gdbm +0 string GDBM GNU dbm 2.x database +!:mime application/x-gdbm +# +# Berkeley DB +# +# Ian Darwin's file /etc/magic files: big/little-endian version. +# +# Hash 1.85/1.86 databases store metadata in network byte order. +# Btree 1.85/1.86 databases store the metadata in host byte order. +# Hash and Btree 2.X and later databases store the metadata in host byte order. + +0 long 0x00061561 Berkeley DB +!:mime application/x-dbm +>8 belong 4321 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, native byte-order) +>8 belong 1234 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, little-endian) + +0 belong 0x00061561 Berkeley DB +>8 belong 4321 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, big-endian) +>8 belong 1234 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, native byte-order) + +0 long 0x00053162 Berkeley DB 1.85/1.86 +>4 long >0 (Btree, version %d, native byte-order) +0 belong 0x00053162 Berkeley DB 1.85/1.86 +>4 belong >0 (Btree, version %d, big-endian) +0 lelong 0x00053162 Berkeley DB 1.85/1.86 +>4 lelong >0 (Btree, version %d, little-endian) + +12 long 0x00061561 Berkeley DB +>16 long >0 (Hash, version %d, native byte-order) +12 belong 0x00061561 Berkeley DB +>16 belong >0 (Hash, version %d, big-endian) +12 lelong 0x00061561 Berkeley DB +>16 lelong >0 (Hash, version %d, little-endian) + +12 long 0x00053162 Berkeley DB +>16 long >0 (Btree, version %d, native byte-order) +12 belong 0x00053162 Berkeley DB +>16 belong >0 (Btree, version %d, big-endian) +12 lelong 0x00053162 Berkeley DB +>16 lelong >0 (Btree, version %d, little-endian) + +12 long 0x00042253 Berkeley DB +>16 long >0 (Queue, version %d, native byte-order) +12 belong 0x00042253 Berkeley DB +>16 belong >0 (Queue, version %d, big-endian) +12 lelong 0x00042253 Berkeley DB +>16 lelong >0 (Queue, version %d, little-endian) + +# From Max Bowsher. +12 long 0x00040988 Berkeley DB +>16 long >0 (Log, version %d, native byte-order) +12 belong 0x00040988 Berkeley DB +>16 belong >0 (Log, version %d, big-endian) +12 lelong 0x00040988 Berkeley DB +>16 lelong >0 (Log, version %d, little-endian) + +# +# +# Round Robin Database Tool by Tobias Oetiker +0 string RRD RRDTool DB +>4 string x version %s +#---------------------------------------------------------------------- +# ROOT: file(1) magic for ROOT databases +# +0 string root\0 ROOT file +>4 belong x Version %d +>33 belong x (Compression: %d) + +# XXX: Weak magic. +# Alex Ott +## Paradox file formats +#2 leshort 0x0800 Paradox +#>0x39 byte 3 v. 3.0 +#>0x39 byte 4 v. 3.5 +#>0x39 byte 9 v. 4.x +#>0x39 byte 10 v. 5.x +#>0x39 byte 11 v. 5.x +#>0x39 byte 12 v. 7.x +#>>0x04 byte 0 indexed .DB data file +#>>0x04 byte 1 primary index .PX file +#>>0x04 byte 2 non-indexed .DB data file +#>>0x04 byte 3 non-incrementing secondary index .Xnn file +#>>0x04 byte 4 secondary index .Ynn file +#>>0x04 byte 5 incrementing secondary index .Xnn file +#>>0x04 byte 6 non-incrementing secondary index .XGn file +#>>0x04 byte 7 secondary index .YGn file +#>>>0x04 byte 8 incrementing secondary index .XGn file + +## XBase database files +#0 byte 0x02 +#>8 leshort >0 +#>>12 leshort 0 FoxBase +#!:mime application/x-dbf +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x03 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x04 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBASE IV no memo file +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x05 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBASE V no memo file +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x30 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 Visual FoxPro +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x43 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FlagShip with memo var size +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x7b +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBASEIV with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x83 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FoxBase+, dBaseIII+ with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x8b +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBaseIV with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x8e +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBaseIV with SQL Table +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0xb3 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FlagShip with .dbt memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0xf5 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FoxPro with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 leshort 0x0006 DBase 3 index file + +# MS Access database +4 string Standard\ Jet\ DB Microsoft Access Database +!:mime application/x-msaccess + +# TDB database from Samba et al - Martin Pool +0 string TDB\ file TDB database +>32 lelong 0x2601196D version 6, little-endian +>>36 lelong x hash size %d bytes + +# SE Linux policy database +0 lelong 0xf97cff8c SE Linux policy +>16 lelong x v%d +>20 lelong 1 MLS +>24 lelong x %d symbols +>28 lelong x %d ocons + +# ICE authority file data (Wolfram Kleff) +2 string ICE ICE authority data + +# X11 Xauthority file (Wolfram Kleff) +10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data + +# From: Maxime Henrion +# PostgreSQL's custom dump format, Maxime Henrion +0 string PGDMP PostgreSQL custom database dump +>5 byte x - v%d +>6 byte x \b.%d +>5 beshort <0x101 \b-0 +>5 beshort >0x100 +>>7 byte x \b-%d + +# Type: Advanced Data Format (ADF) database +# URL: http://www.grc.nasa.gov/WWW/cgns/adf/ +# From: Nicolas Chauvat +0 string @(#)ADF\ Database CGNS Advanced Data Format + +# Tokyo Cabinet magic data +# http://tokyocabinet.sourceforge.net/index.html +0 string ToKyO\ CaBiNeT\n Tokyo Cabinet +>14 string x \b (%s) +>32 byte 0 \b, Hash +!:mime application/x-tokyocabinet-hash +>32 byte 1 \b, B+ tree +!:mime application/x-tokyocabinet-btree +>32 byte 2 \b, Fixed-length +!:mime application/x-tokyocabinet-fixed +>32 byte 3 \b, Table +!:mime application/x-tokyocabinet-table +>33 byte &1 \b, [open] +>33 byte &2 \b, [fatal] +>34 byte x \b, apow=%d +>35 byte x \b, fpow=%d +>36 byte &0x01 \b, [large] +>36 byte &0x02 \b, [deflate] +>36 byte &0x04 \b, [bzip] +>36 byte &0x08 \b, [tcbs] +>36 byte &0x10 \b, [excodec] +>40 lequad x \b, bnum=%lld +>48 lequad x \b, rnum=%lld +>56 lequad x \b, fsiz=%lld + +#------------------------------------------------------------------------------ +# diamond: file(1) magic for Diamond system +# +# ... diamond is a multi-media mail and electronic conferencing system.... +# +# XXX - I think it was either renamed Slate, or replaced by Slate.... +# +# The full deal is too long... +#0 string \n Diamond Multimedia Document +0 string =\n\n________64E Alpha archive +>22 string X -- out of date +# +# Alpha COFF Based Executables +# The stripped stuff really needs to be an 8 byte (64 bit) compare, +# but this works +0 leshort 0x183 COFF format alpha +>22 leshort&020000 &010000 sharable library, +>22 leshort&020000 ^010000 dynamically linked, +>24 leshort 0410 pure +>24 leshort 0413 demand paged +>8 lelong >0 executable or object module, not stripped +>8 lelong 0 +>>12 lelong 0 executable or object module, stripped +>>12 lelong >0 executable or object module, not stripped +>27 byte >0 - version %d. +>26 byte >0 %d- +>28 leshort >0 %d +# +# The next is incomplete, we could tell more about this format, +# but its not worth it. +0 leshort 0x188 Alpha compressed COFF +0 leshort 0x18f Alpha u-code object +# +# +# Some other interesting Digital formats, +0 string \377\377\177 ddis/ddif +0 string \377\377\174 ddis/dots archive +0 string \377\377\176 ddis/dtif table data +0 string \033c\033 LN03 output +0 long 04553207 X image +# +0 string =!!\n profiling data file +# +# Locale data tables (MIPS and Alpha). +# +0 short 0x0501 locale data table +>6 short 0x24 for MIPS +>6 short 0x40 for Alpha +# ATSC A/53 aka AC-3 aka Dolby Digital +# from http://www.atsc.org/standards/a_52a.pdf +# corrections, additions, etc. are always welcome! +# +# syncword +0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream, +# fscod +>4 byte&0xc0 0x00 48 kHz, +>4 byte&0xc0 0x40 44.1 kHz, +>4 byte&0xc0 0x80 32 kHz, +# is this one used for 96 kHz? +>4 byte&0xc0 0xc0 reserved frequency, +# +>5 byte&7 = 0 \b, complete main (CM) +>5 byte&7 = 1 \b, music and effects (ME) +>5 byte&7 = 2 \b, visually impaired (VI) +>5 byte&7 = 3 \b, hearing impaired (HI) +>5 byte&7 = 4 \b, dialogue (D) +>5 byte&7 = 5 \b, commentary (C) +>5 byte&7 = 6 \b, emergency (E) +# acmod +>6 byte&0xe0 0x00 1+1 front, +>6 byte&0xe0 0x20 1 front/0 rear, +>6 byte&0xe0 0x40 2 front/0 rear, +>6 byte&0xe0 0x60 3 front/0 rear, +>6 byte&0xe0 0x80 2 front/1 rear, +>6 byte&0xe0 0xa0 3 front/1 rear, +>6 byte&0xe0 0xc0 2 front/2 rear, +>6 byte&0xe0 0xe0 3 front/2 rear, +# lfeon (these may be incorrect) +>7 byte&0x40 0x00 LFE off, +>7 byte&0x40 0x40 LFE on, +# +>4 byte&0x3e = 0x00 \b, 32 kbit/s +>4 byte&0x3e = 0x02 \b, 40 kbit/s +>4 byte&0x3e = 0x04 \b, 48 kbit/s +>4 byte&0x3e = 0x06 \b, 56 kbit/s +>4 byte&0x3e = 0x08 \b, 64 kbit/s +>4 byte&0x3e = 0x0a \b, 80 kbit/s +>4 byte&0x3e = 0x0c \b, 96 kbit/s +>4 byte&0x3e = 0x0e \b, 112 kbit/s +>4 byte&0x3e = 0x10 \b, 128 kbit/s +>4 byte&0x3e = 0x12 \b, 160 kbit/s +>4 byte&0x3e = 0x14 \b, 192 kbit/s +>4 byte&0x3e = 0x16 \b, 224 kbit/s +>4 byte&0x3e = 0x18 \b, 256 kbit/s +>4 byte&0x3e = 0x1a \b, 320 kbit/s +>4 byte&0x3e = 0x1c \b, 384 kbit/s +>4 byte&0x3e = 0x1e \b, 448 kbit/s +>4 byte&0x3e = 0x20 \b, 512 kbit/s +>4 byte&0x3e = 0x22 \b, 576 kbit/s +>4 byte&0x3e = 0x24 \b, 640 kbit/s +# dsurmod (these may be incorrect) +>6 beshort&0x0180 0x0000 Dolby Surround not indicated +>6 beshort&0x0180 0x0080 not Dolby Surround encoded +>6 beshort&0x0180 0x0100 Dolby Surround encoded +>6 beshort&0x0180 0x0180 reserved Dolby Surround mode + +#------------------------------------------------------------------------------ +# dump: file(1) magic for dump file format--for new and old dump filesystems +# +# We specify both byte orders in order to recognize byte-swapped dumps. +# +24 belong 60012 new-fs dump file (big endian), +>4 bedate x Previous dump %s, +>8 bedate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 belong 60011 old-fs dump file (big endian), +#>4 bedate x Previous dump %s, +#>8 bedate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 lelong 60012 new-fs dump file (little endian), +>4 ledate x This dump %s, +>8 ledate x Previous dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +24 lelong 60011 old-fs dump file (little endian), +#>4 ledate x Previous dump %s, +#>8 ledate x This dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +18 leshort 60011 old-fs dump file (16-bit, assuming PDP-11 endianness), +>2 medate x Previous dump %s, +>6 medate x This dump %s, +>10 leshort >0 Volume %ld, +>0 leshort 1 tape header. +>0 leshort 2 beginning of file record. +>0 leshort 3 map of inodes on tape. +>0 leshort 4 continuation of file record. +>0 leshort 5 end of volume. +>0 leshort 6 map of inodes deleted. +>0 leshort 7 end of medium (for floppy). + +24 belong 0x19540119 new-fs dump file (ufs2, big endian), +>896 beqdate x Previous dump %s, +>904 beqdate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 lelong 0x19540119 new-fs dump file (ufs2, little endian), +>896 leqdate x This dump %s, +>904 leqdate x Previous dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +#------------------------------------------------------------------------------ +# Dyadic: file(1) magic for Dyalog APL. +# +0 byte 0xaa +>1 byte <4 Dyalog APL +>>1 byte 0x00 incomplete workspace +>>1 byte 0x01 component file +>>1 byte 0x02 external variable +>>1 byte 0x03 workspace +>>2 byte x version %d +>>3 byte x .%d + +#------------------------------------------------------------------------------ +# T602 editor documents +# by David Necas +0 string @CT\ T602 document data, +>4 string 0 Kamenicky +>4 string 1 CP 852 +>4 string 2 KOI8-CS +>4 string >2 unknown encoding + +# Vi IMproved Encrypted file +# by David Necas +0 string VimCrypt~ Vim encrypted file data +# Vi IMproved Swap file +# by Sven Wegener +0 string b0VIM\ Vim swap file +>&0 string >\0 \b, version %s + +#------------------------------------------------------------------------------ +# efi: file(1) magic for Universal EFI binaries + +0 lelong 0x0ef1fab9 +>4 lelong 1 Universal EFI binary with 1 architecture +>>&0 lelong 7 \b, i386 +>>&0 lelong 0x01000007 \b, x86_64 +>4 lelong 2 Universal EFI binary with 2 architectures +>>&0 lelong 7 \b, i386 +>>&0 lelong 0x01000007 \b, x86_64 +>>&20 lelong 7 \b, i386 +>>&20 lelong 0x01000007 \b, x86_64 +>4 lelong >2 Universal EFI binary with %ld architectures + +#------------------------------------------------------------------------------ +# elf: file(1) magic for ELF executables +# +# We have to check the byte order flag to see what byte order all the +# other stuff in the header is in. +# +# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? +# +# Created by: unknown +# Modified by (1): Daniel Quinlan +# Modified by (2): Peter Tobias (core support) +# Modified by (3): Christian 'Dr. Disk' Hechelmann (fix of core support) +# Modified by (4): (VMS Itanium) +# Modified by (5): Matthias Urlichs (Listing of many architectures) +0 string \177ELF ELF +>4 byte 0 invalid class +>4 byte 1 32-bit +>4 byte 2 64-bit +>5 byte 0 invalid byte order +>5 byte 1 LSB +>>16 leshort 0 no file type, +!:strength *2 +!:mime application/octet-stream +>>16 leshort 1 relocatable, +!:mime application/x-object +>>16 leshort 2 executable, +!:mime application/x-executable +>>16 leshort 3 shared object, +!:mime application/x-sharedlib +>>16 leshort 4 core file +!:mime application/x-coredump +# Core file detection is not reliable. +#>>>(0x38+0xcc) string >\0 of '%s' +#>>>(0x38+0x10) lelong >0 (signal %d), +>>16 leshort &0xff00 processor-specific, +>>18 leshort 0 no machine, +>>18 leshort 1 AT&T WE32100 - invalid byte order, +>>18 leshort 2 SPARC - invalid byte order, +>>18 leshort 3 Intel 80386, +>>18 leshort 4 Motorola +>>>36 lelong &0x01000000 68000 - invalid byte order, +>>>36 lelong &0x00810000 CPU32 - invalid byte order, +>>>36 lelong 0 68020 - invalid byte order, +>>18 leshort 5 Motorola 88000 - invalid byte order, +>>18 leshort 6 Intel 80486, +>>18 leshort 7 Intel 80860, +# The official e_machine number for MIPS is now #8, regardless of endianness. +# The second number (#10) will be deprecated later. For now, we still +# say something if #10 is encountered, but only gory details for #8. +>>18 leshort 8 MIPS, +>>>36 lelong &0x20 N32 +>>18 leshort 10 MIPS, +>>>36 lelong &0x20 N32 +>>18 leshort 8 +# only for 32-bit +>>>4 byte 1 +>>>>36 lelong&0xf0000000 0x00000000 MIPS-I +>>>>36 lelong&0xf0000000 0x10000000 MIPS-II +>>>>36 lelong&0xf0000000 0x20000000 MIPS-III +>>>>36 lelong&0xf0000000 0x30000000 MIPS-IV +>>>>36 lelong&0xf0000000 0x40000000 MIPS-V +>>>>36 lelong&0xf0000000 0x50000000 MIPS32 +>>>>36 lelong&0xf0000000 0x60000000 MIPS64 +>>>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2 +# only for 64-bit +>>>4 byte 2 +>>>>48 lelong&0xf0000000 0x00000000 MIPS-I +>>>>48 lelong&0xf0000000 0x10000000 MIPS-II +>>>>48 lelong&0xf0000000 0x20000000 MIPS-III +>>>>48 lelong&0xf0000000 0x30000000 MIPS-IV +>>>>48 lelong&0xf0000000 0x40000000 MIPS-V +>>>>48 lelong&0xf0000000 0x50000000 MIPS32 +>>>>48 lelong&0xf0000000 0x60000000 MIPS64 +>>>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2 +>>18 leshort 9 Amdahl - invalid byte order, +>>18 leshort 10 MIPS (deprecated), +>>18 leshort 11 RS6000 - invalid byte order, +>>18 leshort 15 PA-RISC - invalid byte order, +>>>50 leshort 0x0214 2.0 +>>>48 leshort &0x0008 (LP64), +>>18 leshort 16 nCUBE, +>>18 leshort 17 Fujitsu VPP500, +>>18 leshort 18 SPARC32PLUS - invalid byte order, +>>18 leshort 20 PowerPC, +>>18 leshort 22 IBM S/390, +>>18 leshort 36 NEC V800, +>>18 leshort 37 Fujitsu FR20, +>>18 leshort 38 TRW RH-32, +>>18 leshort 39 Motorola RCE, +>>18 leshort 40 ARM, +>>18 leshort 41 Alpha, +>>18 leshort 0xa390 IBM S/390 (obsolete), +>>18 leshort 42 Renesas SH, +>>18 leshort 43 SPARC V9 - invalid byte order, +>>18 leshort 44 Siemens Tricore Embedded Processor, +>>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc., +>>18 leshort 46 Renesas H8/300, +>>18 leshort 47 Renesas H8/300H, +>>18 leshort 48 Renesas H8S, +>>18 leshort 49 Renesas H8/500, +>>18 leshort 50 IA-64, +>>18 leshort 51 Stanford MIPS-X, +>>18 leshort 52 Motorola Coldfire, +>>18 leshort 53 Motorola M68HC12, +>>18 leshort 54 Fujitsu MMA, +>>18 leshort 55 Siemens PCP, +>>18 leshort 56 Sony nCPU, +>>18 leshort 57 Denso NDR1, +>>18 leshort 58 Start*Core, +>>18 leshort 59 Toyota ME16, +>>18 leshort 60 ST100, +>>18 leshort 61 Tinyj emb., +>>18 leshort 62 x86-64, +>>18 leshort 63 Sony DSP, +>>18 leshort 66 FX66, +>>18 leshort 67 ST9+ 8/16 bit, +>>18 leshort 68 ST7 8 bit, +>>18 leshort 69 MC68HC16, +>>18 leshort 70 MC68HC11, +>>18 leshort 71 MC68HC08, +>>18 leshort 72 MC68HC05, +>>18 leshort 73 SGI SVx, +>>18 leshort 74 ST19 8 bit, +>>18 leshort 75 Digital VAX, +>>18 leshort 76 Axis cris, +>>18 leshort 77 Infineon 32-bit embedded, +>>18 leshort 78 Element 14 64-bit DSP, +>>18 leshort 79 LSI Logic 16-bit DSP, +>>18 leshort 80 MMIX, +>>18 leshort 81 Harvard machine-independent, +>>18 leshort 82 SiTera Prism, +>>18 leshort 83 Atmel AVR 8-bit, +>>18 leshort 84 Fujitsu FR30, +>>18 leshort 85 Mitsubishi D10V, +>>18 leshort 86 Mitsubishi D30V, +>>18 leshort 87 NEC v850, +>>18 leshort 88 Renesas M32R, +>>18 leshort 89 Matsushita MN10300, +>>18 leshort 90 Matsushita MN10200, +>>18 leshort 91 picoJava, +>>18 leshort 92 OpenRISC, +>>18 leshort 93 ARC Cores Tangent-A5, +>>18 leshort 94 Tensilica Xtensa, +>>18 leshort 97 NatSemi 32k, +>>18 leshort 106 Analog Devices Blackfin, +>>18 leshort 113 Altera Nios II, +>>18 leshort 0xae META, +>>18 leshort 0x3426 OpenRISC (obsolete), +>>18 leshort 0x8472 OpenRISC (obsolete), +>>18 leshort 0x9026 Alpha (unofficial), +>>20 lelong 0 invalid version +>>20 lelong 1 version 1 +>>36 lelong 1 MathCoPro/FPU/MAU Required +>5 byte 2 MSB +>>16 beshort 0 no file type, +!:mime application/octet-stream +>>16 beshort 1 relocatable, +!:mime application/x-object +>>16 beshort 2 executable, +!:mime application/x-executable +>>16 beshort 3 shared object, +!:mime application/x-sharedlib +>>16 beshort 4 core file, +!:mime application/x-coredump +#>>>(0x38+0xcc) string >\0 of '%s' +#>>>(0x38+0x10) belong >0 (signal %d), +>>16 beshort &0xff00 processor-specific, +>>18 beshort 0 no machine, +>>18 beshort 1 AT&T WE32100, +>>18 beshort 2 SPARC, +>>18 beshort 3 Intel 80386 - invalid byte order, +>>18 beshort 4 Motorola +>>>36 belong &0x01000000 68000, +>>>36 belong &0x00810000 CPU32, +>>>36 belong 0 68020, +>>18 beshort 5 Motorola 88000, +>>18 beshort 6 Intel 80486 - invalid byte order, +>>18 beshort 7 Intel 80860, +# only for MIPS - see comment in little-endian section above. +>>18 beshort 8 MIPS, +>>>36 belong &0x20 N32 +>>18 beshort 10 MIPS, +>>>36 belong &0x20 N32 +>>18 beshort 8 +# only for 32-bit +>>>4 byte 1 +>>>>36 belong&0xf0000000 0x00000000 MIPS-I +>>>>36 belong&0xf0000000 0x10000000 MIPS-II +>>>>36 belong&0xf0000000 0x20000000 MIPS-III +>>>>36 belong&0xf0000000 0x30000000 MIPS-IV +>>>>36 belong&0xf0000000 0x40000000 MIPS-V +>>>>36 belong&0xf0000000 0x50000000 MIPS32 +>>>>36 belong&0xf0000000 0x60000000 MIPS64 +>>>>36 belong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>36 belong&0xf0000000 0x80000000 MIPS64 rel2 +# only for 64-bit +>>>4 byte 2 +>>>>48 belong&0xf0000000 0x00000000 MIPS-I +>>>>48 belong&0xf0000000 0x10000000 MIPS-II +>>>>48 belong&0xf0000000 0x20000000 MIPS-III +>>>>48 belong&0xf0000000 0x30000000 MIPS-IV +>>>>48 belong&0xf0000000 0x40000000 MIPS-V +>>>>48 belong&0xf0000000 0x50000000 MIPS32 +>>>>48 belong&0xf0000000 0x60000000 MIPS64 +>>>>48 belong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>48 belong&0xf0000000 0x80000000 MIPS64 rel2 +>>18 beshort 9 Amdahl, +>>18 beshort 10 MIPS (deprecated), +>>18 beshort 11 RS6000, +>>18 beshort 15 PA-RISC +>>>50 beshort 0x0214 2.0 +>>>48 beshort &0x0008 (LP64) +>>18 beshort 16 nCUBE, +>>18 beshort 17 Fujitsu VPP500, +>>18 beshort 18 SPARC32PLUS, +>>>36 belong&0xffff00 0x000100 V8+ Required, +>>>36 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, +>>>36 belong&0xffff00 0x000400 HaL R1 Extensions Required, +>>>36 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, +>>18 beshort 20 PowerPC or cisco 4500, +>>18 beshort 21 64-bit PowerPC or cisco 7500, +>>18 beshort 22 IBM S/390, +>>18 beshort 23 Cell SPU, +>>18 beshort 24 cisco SVIP, +>>18 beshort 25 cisco 7200, +>>18 beshort 36 NEC V800 or cisco 12000, +>>18 beshort 37 Fujitsu FR20, +>>18 beshort 38 TRW RH-32, +>>18 beshort 39 Motorola RCE, +>>18 beshort 40 ARM, +>>18 beshort 41 Alpha, +>>18 beshort 42 Renesas SH, +>>18 beshort 43 SPARC V9, +>>>48 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, +>>>48 belong&0xffff00 0x000400 HaL R1 Extensions Required, +>>>48 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, +>>>48 belong&0x3 0 total store ordering, +>>>48 belong&0x3 1 partial store ordering, +>>>48 belong&0x3 2 relaxed memory ordering, +>>18 beshort 44 Siemens Tricore Embedded Processor, +>>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc., +>>18 beshort 46 Renesas H8/300, +>>18 beshort 47 Renesas H8/300H, +>>18 beshort 48 Renesas H8S, +>>18 beshort 49 Renesas H8/500, +>>18 beshort 50 IA-64, +>>18 beshort 51 Stanford MIPS-X, +>>18 beshort 52 Motorola Coldfire, +>>18 beshort 53 Motorola M68HC12, +>>18 beshort 73 Cray NV1, +>>18 beshort 75 Digital VAX, +>>18 beshort 88 Renesas M32R, +>>18 leshort 92 OpenRISC, +>>18 leshort 0x3426 OpenRISC (obsolete), +>>18 leshort 0x8472 OpenRISC (obsolete), +>>18 beshort 94 Tensilica Xtensa, +>>18 beshort 97 NatSemi 32k, +>>18 beshort 0x18ad AVR32 (unofficial), +>>18 beshort 0x9026 Alpha (unofficial), +>>18 beshort 0xa390 IBM S/390 (obsolete), +>>20 belong 0 invalid version +>>20 belong 1 version 1 +>>36 belong 1 MathCoPro/FPU/MAU Required +# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed +# like proper ELF, but extracting the string had bad results. +>4 byte <0x80 +>>8 string >\0 (%s) +>8 string \0 +>>7 byte 0 (SYSV) +>>7 byte 1 (HP-UX) +>>7 byte 2 (NetBSD) +>>7 byte 3 (GNU/Linux) +>>7 byte 4 (GNU/Hurd) +>>7 byte 5 (86Open) +>>7 byte 6 (Solaris) +>>7 byte 7 (Monterey) +>>7 byte 8 (IRIX) +>>7 byte 9 (FreeBSD) +>>7 byte 10 (Tru64) +>>7 byte 11 (Novell Modesto) +>>7 byte 12 (OpenBSD) +>8 string \2 +>>7 byte 13 (OpenVMS) +>>7 byte 97 (ARM) +>>7 byte 255 (embedded) + +#------------------------------------------------------------------------------ +# encore: file(1) magic for Encore machines +# +# XXX - needs to have the byte order specified (NS32K was little-endian, +# dunno whether they run the 88K in little-endian mode or not). +# +0 short 0x154 Encore +>20 short 0x107 executable +>20 short 0x108 pure executable +>20 short 0x10b demand-paged executable +>20 short 0x10f unsupported executable +>12 long >0 not stripped +>22 short >0 - version %ld +>22 short 0 - +#>4 date x stamp %s +0 short 0x155 Encore unsupported executable +>12 long >0 not stripped +>22 short >0 - version %ld +>22 short 0 - +#>4 date x stamp %s +#------------------------------------------------------------------------------ +# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1] +# Stefan Praszalowicz (hpicollo@worldnet.fr) +# Useful information for improving this file can be found at: +# http://software.frodo.looijaard.name/psiconv/formats/Index.html +0 lelong 0x10000037 +>4 lelong 0x1000006D +>>8 lelong 0x1000007F Psion Word +>>8 lelong 0x10000088 Psion Sheet +>>8 lelong 0x1000007D Psion Sketch +>>8 lelong 0x10000085 Psion TextEd + +#------------------------------------------------------------------------------ +# erlang: file(1) magic for Erlang JAM and BEAM files +# URL: http://www.erlang.org/faq/x779.html#AEN812 + +# OTP R3-R4 +0 string \0177BEAM! Old Erlang BEAM file +>6 short >0 - version %d + +# OTP R5 and onwards +0 string FOR1 +>8 string BEAM Erlang BEAM file + +# 4.2 version may have a copyright notice! +4 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 +79 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 + +4 string 1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995 Erlang JAM file - version 4.3 + +#------------------------------------------------------------------------------ +# ESRI Shapefile format (.shp .shx .dbf=DBaseIII) +# Based on info from +# +0 belong 9994 ESRI Shapefile +>4 belong =0 +>8 belong =0 +>12 belong =0 +>16 belong =0 +>20 belong =0 +>28 lelong x version %d +>24 belong x length %d +>32 lelong =0 type Null Shape +>32 lelong =1 type Point +>32 lelong =3 type PolyLine +>32 lelong =5 type Polygon +>32 lelong =8 type MultiPoint +>32 lelong =11 type PointZ +>32 lelong =13 type PolyLineZ +>32 lelong =15 type PolygonZ +>32 lelong =18 type MultiPointZ +>32 lelong =21 type PointM +>32 lelong =23 type PolyLineM +>32 lelong =25 type PolygonM +>32 lelong =28 type MultiPointM +>32 lelong =31 type MultiPatch + +#------------------------------------------------------------------------------ +# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files +# From Roger Leigh +0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0 +0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0 +0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0 + + +#------------------------------------------------------------------------------ +# filesystems: file(1) magic for different filesystems +# +0 string \366\366\366\366 PC formatted floppy with no filesystem +# Sun disk labels +# From /usr/include/sun/dklabel.h: +0774 beshort 0xdabe +# modified by Joerg Jenderek, because original test +# succeeds for Cabinet archive dao360.dl_ with negative blocks +>0770 long >0 Sun disk label +>>0 string x '%s +>>>31 string >\0 \b%s +>>>>63 string >\0 \b%s +>>>>>95 string >\0 \b%s +>>0 string x \b' +>>0734 short >0 %d rpm, +>>0736 short >0 %d phys cys, +>>0740 short >0 %d alts/cyl, +>>0746 short >0 %d interleave, +>>0750 short >0 %d data cyls, +>>0752 short >0 %d alt cyls, +>>0754 short >0 %d heads/partition, +>>0756 short >0 %d sectors/track, +>>0764 long >0 start cyl %ld, +>>0770 long x %ld blocks +# Is there a boot block written 1 sector in? +>512 belong&077777777 0600407 \b, boot block present +# Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc +# (http://btmgr.sourceforge.net/docs/user-guide-3.html) +0 string SBMBAKUP_ Smart Boot Manager backup file +>9 string x \b, version %-5.5s +>>14 string =_ +>>>15 string x %-.1s +>>>>16 string =_ \b. +>>>>>17 string x \b%-.1s +>>>>>>18 string =_ \b. +>>>>>>>19 string x \b%-.1s +>>>22 ubyte 0 +>>>>21 ubyte x \b, from drive 0x%x +>>>22 ubyte >0 +>>>>21 string x \b, from drive %s + +# Joerg Jenderek +# DOS Emulator image is 128 byte, null right padded header + harddisc image +0 string DOSEMU\0 +>0x27E leshort 0xAA55 +#offset is 128 +>>19 ubyte 128 +>>>(19.b-1) ubyte 0x0 DOS Emulator image +>>>>7 ulelong >0 \b, %u heads +>>>>11 ulelong >0 \b, %d sectors/track +>>>>15 ulelong >0 \b, %d cylinders + +# updated by Joerg Jenderek at Sep 2007 +# only for sector sizes with 512 or more Bytes +0x1FE leshort 0xAA55 x86 boot sector +# to do also for sectors < than 512 Bytes and some other files, GRR +#30 search/481 \x55\xAA x86 boot sector +# not for BeOS floppy 1440k, MBRs +#(11.s-2) uleshort 0xAA55 x86 boot sector +>2 string OSBS \b, OS/BS MBR +# J\xf6rg Jenderek +>0x8C string Invalid\ partition\ table \b, MS-DOS MBR +# dr-dos with some upper-, lowercase variants +>0x9D string Invalid\ partition\ table$ +>>181 string No\ Operating\ System$ +>>>201 string Operating\ System\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 +>0x9D string Invalid\ partition\ table$ +>>181 string No\ operating\ system$ +>>>201 string Operating\ system\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 +>342 string Invalid\ partition\ table$ +>>366 string No\ operating\ system$ +>>>386 string Operating\ system\ load\ error$ \b, DR-DOS MBR, version 7.01 to 7.03 +>295 string NEWLDR\0 +>>302 string Bad\ PT\ $ +>>>310 string No\ OS\ $ +>>>>317 string OS\ load\ err$ +>>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r +>>>>>>358 string Press\ any\ key\ to\ continue.\n\r$ +>>>>>>>387 string Copyright\ (c)\ 1984,1998 +>>>>>>>>411 string Caldera\ Inc.\0 \b, DR-DOS MBR (IBMBIO.LDR) +>0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222 +>>0x1B8 ubelong >0 \b, Serial 0x%-.4x +>0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950 +>271 string Invalid\ partition\ table\0 +>>295 string Error\ loading\ operating\ system\0 +>>>326 string Missing\ operating\ system\0 \b, mbr +# +>139 string Invalid\ partition\ table\0 +>>163 string Error\ loading\ operating\ system\0 +>>>194 string Missing\ operating\ system\0 \b, Microsoft Windows XP mbr +# http://www.heise.de/ct/05/09/006/ page 184 +#HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\?:=Serial4Bytes+8Bytes +>>>>0x1B8 ulelong >0 \b,Serial 0x%-.4x +>300 string Invalid\ partition\ table\0 +>>324 string Error\ loading\ operating\ system\0 +>>>355 string Missing\ operating\ system\0 \b, Microsoft Windows XP MBR +#??>>>389 string Invalid\ system\ disk +>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x +>300 string Ung\201ltige\ Partitionstabelle +#split string to avoid error: String too long +>>328 string Fehler\ beim\ Laden\ +>>>346 string des\ Betriebssystems +>>>>366 string Betriebssystem\ nicht\ vorhanden \b, Microsoft Windows XP MBR (german) +>>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x +#>0x145 string Default:\ F \b, FREE-DOS MBR +#>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR +>0x145 search/7 Default:\ F \b, FREE-DOS MBR +#>>313 string F0\ .\ .\ . +#>>>322 string disk\ 1 +#>>>>382 string FAT3 +>64 string no\ active\ partition\ found +>>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR +# Ranish Partition Manager http://www.ranish.com/part/ +>387 search/4 \0\ Error!\r +>>378 search/7 Virus! +>>>397 search/4 Booting\ +>>>>408 search/4 HD1/\0 \b, Ranish MBR ( +>>>>>416 string Writing\ changes... \b2.37 +>>>>>>438 ubyte x \b,0x%x dots +>>>>>>440 ubyte >0 \b,virus check +>>>>>>441 ubyte >0 \b,partition %c +#2.38,2.42,2.44 +>>>>>416 string !Writing\ changes... \b +>>>>>>418 ubyte 1 \bvirus check, +>>>>>>419 ubyte x \b0x%x seconds +>>>>>>420 ubyte&0x0F >0 \b,partition +>>>>>>>420 ubyte&0x0F <5 \b %x +>>>>>>>420 ubyte&0x0F 0Xf \b ask +>>>>>420 ubyte x \b) +# +>271 string Operating\ system\ loading +>>296 string error\r \b, SYSLINUX MBR (2.10) +# http://www.acronis.de/ +>362 string MBR\ Error\ \0\r +>>376 string ress\ any\ key\ to\ +>>>392 string boot\ from\ floppy...\0 \b, Acronis MBR +# added by Joerg Jenderek +# http://www.visopsys.org/ +# http://partitionlogic.org.uk/ +>309 string No\ bootable\ partition\ found\r +>>339 string I/O\ Error\ reading\ boot\ sector\r \b, Visopsys MBR +>349 string No\ bootable\ partition\ found\r +>>379 string I/O\ Error\ reading\ boot\ sector\r \b, simple Visopsys MBR +# bootloader, bootmanager +>0x40 string SBML +# label with 11 characters of FAT 12 bit filesystem +>>43 string SMART\ BTMGR +>>>430 string SBMK\ Bad!\r \b, Smart Boot Manager +# OEM-ID not always "SBM" +#>>>>3 strings SBM +>>>>6 string >\0 \b, version %s +>382 string XOSLLOADXCF \b, eXtended Operating System Loader +>6 string LILO \b, LInux i386 boot LOader +>>120 string LILO \b, version 22.3.4 SuSe +>>172 string LILO \b, version 22.5.8 Debian +# updated by Joerg Jenderek at Oct 2008 +# variables according to grub-0.97/stage1/stage1.S or +# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data +# usual values are marked with comments to get only informations of strange GRUB loaders +>342 search/60 \0Geom\0 +#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0 +>>0x41 ubyte <2 +>>>0x3E ubyte >2 \b; GRand Unified Bootloader +# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 +>>>>0x3E ubyte x \b, stage1 version 0x%x +#If it is 0xFF, use a drive passed by BIOS +>>>>0x40 ubyte <0xFF \b, boot drive 0x%x +# in most case 0,1,0x2e for GRUB 0.5.95 +>>>>0x41 ubyte >0 \b, LBA flag 0x%x +>>>>0x42 uleshort <0x8000 \b, stage2 address 0x%x +#>>>>0x42 uleshort =0x8000 \b, stage2 address 0x%x (usual) +>>>>0x42 uleshort >0x8000 \b, stage2 address 0x%x +#>>>>0x44 ulelong =1 \b, 1st sector stage2 0x%x (default) +>>>>0x44 ulelong >1 \b, 1st sector stage2 0x%x +>>>>0x48 uleshort <0x800 \b, stage2 segment 0x%x +#>>>>0x48 uleshort =0x800 \b, stage2 segment 0x%x (usual) +>>>>0x48 uleshort >0x800 \b, stage2 segment 0x%x +>>>>402 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>394 string stage1 \b, GRUB version 0.5.95 +>>>>382 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>376 string GRUB\ \0 \b, GRUB version 0.93 or 1.94 +>>>>383 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>377 string GRUB\ \0 \b, GRUB version 0.94 +>>>>385 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>379 string GRUB\ \0 \b, GRUB version 0.95 or 0.96 +>>>>391 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>385 string GRUB\ \0 \b, GRUB version 0.97 +#unkown version +>>>343 string Geom\0Read\0\ Error\0 +>>>>321 string Loading\ stage1.5 \b, GRUB version x.y +>>>380 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>374 string GRUB\ \0 \b, GRUB version n.m +# http://syslinux.zytor.com/ +>478 string Boot\ failed\r +>>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (1.62) +>480 string Boot\ failed\r +>>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (2.06 or 2.11) +>484 string Boot\ error\r \b, SYSLINUX bootloader (3.11) +>395 string chksum\0\ ERROR!\0 \b, Gujin bootloader +# http://www.bcdwb.de/bcdw/index_e.htm +>3 string BCDL +>>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z) +# mbr partion table entries +# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs +>3 string !MS +>>3 string !SYSLINUX +>>>3 string !MTOOL +>>>>3 string !NEWLDR +>>>>>5 string !DOS +# not FAT (32 bit) +>>>>>>82 string !FAT32 +#not Linux kernel +>>>>>>>514 string !HdrS +#not BeOS +>>>>>>>>422 string !Be\ Boot\ Loader +# active flag 0 or 0x80 and type > 0 +>>>>>>>>>446 ubyte <0x81 +>>>>>>>>>>446 ubyte&0x7F 0 +>>>>>>>>>>>450 ubyte >0 \b; partition 1: ID=0x%x +>>>>>>>>>>>>446 ubyte 0x80 \b, active +>>>>>>>>>>>>447 ubyte x \b, starthead %u +#>>>>>>>>>>>>448 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>448 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>454 ulelong x \b, startsector %u +>>>>>>>>>>>>458 ulelong x \b, %u sectors +# +>>>>>>>>>462 ubyte <0x81 +>>>>>>>>>>462 ubyte&0x7F 0 +>>>>>>>>>>>466 ubyte >0 \b; partition 2: ID=0x%x +>>>>>>>>>>>>462 ubyte 0x80 \b, active +>>>>>>>>>>>>463 ubyte x \b, starthead %u +#>>>>>>>>>>>>464 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>464 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>470 ulelong x \b, startsector %u +>>>>>>>>>>>>474 ulelong x \b, %u sectors +# +>>>>>>>>>478 ubyte <0x81 +>>>>>>>>>>478 ubyte&0x7F 0 +>>>>>>>>>>>482 ubyte >0 \b; partition 3: ID=0x%x +>>>>>>>>>>>>478 ubyte 0x80 \b, active +>>>>>>>>>>>>479 ubyte x \b, starthead %u +#>>>>>>>>>>>>480 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>481 ubyte x \b, start C2S: 0x%x +#>>>>>>>>>>>>480 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>486 ulelong x \b, startsector %u +>>>>>>>>>>>>490 ulelong x \b, %u sectors +# +>>>>>>>>>494 ubyte <0x81 +>>>>>>>>>>494 ubyte&0x7F 0 +>>>>>>>>>>>498 ubyte >0 \b; partition 4: ID=0x%x +>>>>>>>>>>>>494 ubyte 0x80 \b, active +>>>>>>>>>>>>495 ubyte x \b, starthead %u +#>>>>>>>>>>>>496 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>496 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>502 ulelong x \b, startsector %u +>>>>>>>>>>>>506 ulelong x \b, %u sectors +# mbr partion table entries end +# http://www.acronis.de/ +#FAT label=ACRONIS\ SZ +#OEM-ID=BOOTWIZ0 +>442 string Non-system\ disk,\ +>>459 string press\ any\ key...\x7\0 \b, Acronis Startup Recovery Loader +# DOS names like F11.SYS are 8 right space padded bytes+3 bytes +>>>477 ubyte&0xDF >0 +>>>>477 string x \b %-.3s +>>>>>480 ubyte&0xDF >0 +>>>>>>480 string x \b%-.5s +>>>>485 ubyte&0xDF >0 +>>>>>485 string x \b.%-.3s +# +>185 string FDBOOT\ Version\ +>>204 string \rNo\ Systemdisk.\ +>>>220 string Booting\ from\ harddisk.\n\r +>>>245 string Cannot\ load\ from\ harddisk.\n\r +>>>>273 string Insert\ Systemdisk\ +>>>>>291 string and\ press\ any\ key.\n\r \b, FDBOOT harddisk Bootloader +>>>>>>200 string >\0 \b, version %-3s +>242 string Bootsector\ from\ C.H.\ Hochst\204 +>>278 string No\ Systemdisk.\ +>>>293 string Booting\ from\ harddisk.\n\r +>>>441 string Cannot\ load\ from\ harddisk.\n\r +>>>>469 string Insert\ Systemdisk\ +>>>>>487 string and\ press\ any\ key.\n\r \b, WinImage harddisk Bootloader +>>>>>>209 string >\0 \b, version %-4.4s +>(1.b+2) ubyte 0xe +>>(1.b+3) ubyte 0x1f +>>>(1.b+4) ubyte 0xbe +>>>>(1.b+5) ubyte 0x77 +>>>>(1.b+6) ubyte 0x7c +>>>>>(1.b+7) ubyte 0xac +>>>>>>(1.b+8) ubyte 0x22 +>>>>>>>(1.b+9) ubyte 0xc0 +>>>>>>>>(1.b+10) ubyte 0x74 +>>>>>>>>>(1.b+11) ubyte 0xb +>>>>>>>>>>(1.b+12) ubyte 0x56 +>>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display +>214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display +#>>244 string from\ dosemu-freedos-*-bin.tgz\r +#>>>170 string Sorry,\ could\ not\ load\ an\ +#>>>>195 string operating\ system.\r\n +# +>103 string This\ is\ not\ a\ bootable\ disk.\ +>>132 string Please\ insert\ a\ bootable\ +>>>157 string floppy\ and\r\n +>>>>169 string press\ any\ key\ to\ try\ again...\r \b, FREE-DOS message display +# +>66 string Solaris\ Boot\ Sector +>>99 string Incomplete\ MDBoot\ load. +>>>89 string Version \b, Sun Solaris Bootloader +>>>>97 byte x version %c +# +>408 string OS/2\ !!\ SYS01475\r\0 +>>429 string OS/2\ !!\ SYS02025\r\0 +>>>450 string OS/2\ !!\ SYS02027\r\0 +>>>469 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp bootloader +# +>409 string OS/2\ !!\ SYS01475\r\0 +>>430 string OS/2\ !!\ SYS02025\r\0 +>>>451 string OS/2\ !!\ SYS02027\r\0 +>>>470 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp Bootloader +>112 string This\ disk\ is\ not\ bootable\r +>>142 string If\ you\ wish\ to\ make\ it\ bootable +>>>176 string run\ the\ DOS\ program\ SYS\ +>>>200 string after\ the\r +>>>>216 string system\ has\ been\ loaded\r\n +>>>>>242 string Please\ insert\ a\ DOS\ diskette\ +>>>>>271 string into\r\n\ the\ drive\ and\ +>>>>>>292 string strike\ any\ key...\0 \b, IBM OS/2 Warp message display +# XP +>430 string NTLDR\ is\ missing\xFF\r\n +>>449 string Disk\ error\xFF\r\n +>>>462 string Press\ any\ key\ to\ restart\r \b, Microsoft Windows XP Bootloader +# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# +>>>>371 ubyte >0x20 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# +>430 string NTLDR\ nicht\ gefunden\xFF\r\n +>>453 string Datentr\204gerfehler\xFF\r\n +>>>473 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (german) +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# offset variant +>>>>379 string \0 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +# +>430 string NTLDR\ fehlt\xFF\r\n +>>444 string Datentr\204gerfehler\xFF\r\n +>>>464 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (2.german) +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# variant +>>>>371 ubyte >0x20 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# +>430 string NTLDR\ fehlt\xFF\r\n +>>444 string Medienfehler\xFF\r\n +>>>459 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (3.german) +>>>>371 ubyte >0x20 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# variant +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# +>430 string Datentr\204ger\ entfernen\xFF\r\n +>>454 string Medienfehler\xFF\r\n +>>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german) +>>>>379 string \0 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# variant +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# + +#>3 string NTFS\ \ \ \ +>389 string Fehler\ beim\ Lesen\ +>>407 string des\ Datentr\204gers +>>>426 string NTLDR\ fehlt +>>>>440 string NTLDR\ ist\ komprimiert +>>>>>464 string Neustart\ mit\ Strg+Alt+Entf\r \b, Microsoft Windows XP Bootloader NTFS (german) +#>3 string NTFS\ \ \ \ +>313 string A\ disk\ read\ error\ occurred.\r +>>345 string A\ kernel\ file\ is\ missing\ +>>>370 string from\ the\ disk.\r +>>>>484 string NTLDR\ is\ compressed +>>>>>429 string Insert\ a\ system\ diskette\ +>>>>>>454 string and\ restart\r\nthe\ system.\r \b, Microsoft Windows XP Bootloader NTFS +# DOS loader variants different languages,offsets +>472 ubyte&0xDF >0 +>>389 string Invalid\ system\ disk\xFF\r\n +>>>411 string Disk\ I/O\ error +>>>>428 string Replace\ the\ disk,\ and\ +>>>>>455 string press\ any\ key \b, Microsoft Windows 98 Bootloader +#IO.SYS +>>>>>>472 ubyte&0xDF >0 +>>>>>>>472 string x \b %-.2s +>>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>>474 string x \b%-.5s +>>>>>>>>>>479 ubyte&0xDF >0 +>>>>>>>>>>>479 string x \b%-.1s +>>>>>>>480 ubyte&0xDF >0 +>>>>>>>>480 string x \b.%-.3s +#MSDOS.SYS +>>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>>483 string x \b%-.5s +>>>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>>>488 string x \b%-.3s +>>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>>491 string x \b.%-.3s +# +>>390 string Invalid\ system\ disk\xFF\r\n +>>>412 string Disk\ I/O\ error\xFF\r\n +>>>>429 string Replace\ the\ disk,\ and\ +>>>>>451 string then\ press\ any\ key\r \b, Microsoft Windows 98 Bootloader +>>388 string Ungueltiges\ System\ \xFF\r\n +>>>410 string E/A-Fehler\ \ \ \ \xFF\r\n +>>>>427 string Datentraeger\ wechseln\ und\ +>>>>>453 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (german) +#WINBOOT.SYS only not spaces (0xDF) +>>>>>>497 ubyte&0xDF >0 +>>>>>>>497 string x %-.5s +>>>>>>>>502 ubyte&0xDF >0 +>>>>>>>>>502 string x \b%-.1s +>>>>>>>>>>503 ubyte&0xDF >0 +>>>>>>>>>>>503 string x \b%-.1s +>>>>>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>>>>>504 string x \b%-.1s +>>>>>>505 ubyte&0xDF >0 +>>>>>>>505 string x \b.%-.3s +#IO.SYS +>>>>>>472 ubyte&0xDF >0 or +>>>>>>>472 string x \b %-.2s +>>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>>474 string x \b%-.5s +>>>>>>>>>>479 ubyte&0xDF >0 +>>>>>>>>>>>479 string x \b%-.1s +>>>>>>>480 ubyte&0xDF >0 +>>>>>>>>480 string x \b.%-.3s +#MSDOS.SYS +>>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>>483 string x \b%-.5s +>>>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>>>488 string x \b%-.3s +>>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>>491 string x \b.%-.3s +# +>>390 string Ungueltiges\ System\ \xFF\r\n +>>>412 string E/A-Fehler\ \ \ \ \xFF\r\n +>>>>429 string Datentraeger\ wechseln\ und\ +>>>>>455 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (German) +#WINBOOT.SYS only not spaces (0xDF) +>>>>>>497 ubyte&0xDF >0 +>>>>>>>497 string x %-.7s +>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>504 string x \b%-.1s +>>>>>>505 ubyte&0xDF >0 +>>>>>>>505 string x \b.%-.3s +#IO.SYS +>>>>>>472 ubyte&0xDF >0 or +>>>>>>>472 string x \b %-.2s +>>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>>474 string x \b%-.6s +>>>>>>>480 ubyte&0xDF >0 +>>>>>>>>480 string x \b.%-.3s +#MSDOS.SYS +>>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>>483 string x \b%-.5s +>>>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>>>488 string x \b%-.3s +>>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>>491 string x \b.%-.3s +# +>>389 string Ungueltiges\ System\ \xFF\r\n +>>>411 string E/A-Fehler\ \ \ \ \xFF\r\n +>>>>428 string Datentraeger\ wechseln\ und\ +>>>>>454 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (GERMAN) +# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes +>>>>>>472 string x %-.2s +>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>474 string x \b%-.5s +>>>>>>>>479 ubyte&0xDF >0 +>>>>>>>>>479 string x \b%-.1s +>>>>>>480 ubyte&0xDF >0 +>>>>>>>480 string x \b.%-.3s +>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>483 string x \b%-.5s +>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>488 string x \b%-.2s +>>>>>>>>490 ubyte&0xDF >0 +>>>>>>>>>490 string x \b%-.1s +>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>491 string x \b.%-.3s +>479 ubyte&0xDF >0 +>>416 string Kein\ System\ oder\ +>>>433 string Laufwerksfehler +>>>>450 string Wechseln\ und\ Taste\ dr\201cken \b, Microsoft DOS Bootloader (german) +#IO.SYS +>>>>>479 string x \b %-.2s +>>>>>>481 ubyte&0xDF >0 +>>>>>>>481 string x \b%-.6s +>>>>>487 ubyte&0xDF >0 +>>>>>>487 string x \b.%-.3s +#MSDOS.SYS +>>>>>>490 ubyte&0xDF >0 \b+ +>>>>>>>490 string x \b%-.5s +>>>>>>>>495 ubyte&0xDF >0 +>>>>>>>>>495 string x \b%-.3s +>>>>>>>498 ubyte&0xDF >0 +>>>>>>>>498 string x \b.%-.3s +# +>376 search/41 Non-System\ disk\ or\ +>>395 search/41 disk\ error\r +>>>407 search/41 Replace\ and\ +>>>>419 search/41 press\ \b, +>>>>419 search/41 strike\ \b, old +>>>>426 search/41 any\ key\ when\ ready\r MS or PC-DOS bootloader +#449 Disk\ Boot\ failure\r MS 3.21 +#466 Boot\ Failure\r MS 3.30 +>>>>>468 search/18 \0 +#IO.SYS,IBMBIO.COM +>>>>>>&0 string x \b %-.2s +>>>>>>>&-20 ubyte&0xDF >0 +>>>>>>>>&-1 string x \b%-.4s +>>>>>>>>>&-16 ubyte&0xDF >0 +>>>>>>>>>>&-1 string x \b%-.2s +>>>>>>&8 ubyte&0xDF >0 \b. +>>>>>>>&-1 string x \b%-.3s +#MSDOS.SYS,IBMDOS.COM +>>>>>>&11 ubyte&0xDF >0 \b+ +>>>>>>>&-1 string x \b%-.5s +>>>>>>>>&-6 ubyte&0xDF >0 +>>>>>>>>>&-1 string x \b%-.1s +>>>>>>>>>>&-5 ubyte&0xDF >0 +>>>>>>>>>>>&-1 string x \b%-.2s +>>>>>>>&7 ubyte&0xDF >0 \b. +>>>>>>>>&-1 string x \b%-.3s +>441 string Cannot\ load\ from\ harddisk.\n\r +>>469 string Insert\ Systemdisk\ +>>>487 string and\ press\ any\ key.\n\r \b, MS (2.11) DOS bootloader +#>43 string \224R-LOADER\ \ SYS =label +>54 string SYS +>>324 string VASKK +>>>495 string NEWLDR\0 \b, DR-DOS Bootloader (LOADER.SYS) +# +>98 string Press\ a\ key\ to\ retry\0\r +>>120 string Cannot\ find\ file\ \0\r +>>>139 string Disk\ read\ error\0\r +>>>>156 string Loading\ ...\0 \b, DR-DOS (3.41) Bootloader +#DRBIOS.SYS +>>>>>44 ubyte&0xDF >0 +>>>>>>44 string x \b %-.6s +>>>>>>>50 ubyte&0xDF >0 +>>>>>>>>50 string x \b%-.2s +>>>>>>52 ubyte&0xDF >0 +>>>>>>>52 string x \b.%-.3s +# +>70 string IBMBIO\ \ COM +>>472 string Cannot\ load\ DOS!\ +>>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader +>>471 string Cannot\ load\ DOS\ +>>487 string press\ key\ to\ retry \b, Open-DOS Bootloader +#?? +>444 string KERNEL\ \ SYS +>>314 string BOOT\ error! \b, FREE-DOS Bootloader +>499 string KERNEL\ \ SYS +>>305 string BOOT\ err!\0 \b, Free-DOS Bootloader +>449 string KERNEL\ \ SYS +>>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader +# +>449 string Loading\ FreeDOS +>>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +# +>331 string Error!.0 \b, FREE-DOS 1.0 bootloader +# +>125 string Loading\ FreeDOS...\r +>>311 string BOOT\ error!\r \b, FREE-DOS bootloader +>>>441 ubyte&0xDF >0 +>>>>441 string x \b %-.6s +>>>>>447 ubyte&0xDF >0 +>>>>>>447 string x \b%-.1s +>>>>>>>448 ubyte&0xDF >0 +>>>>>>>>448 string x \b%-.1s +>>>>449 ubyte&0xDF >0 +>>>>>449 string x \b.%-.3s +>124 string FreeDOS\0 +>>331 string \ err\0 \b, FREE-DOS BETa 0.9 Bootloader +# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +>>333 string \ err\0 \b, FREE-DOS BEta 0.9 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +>>334 string \ err\0 \b, FREE-DOS Beta 0.9 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +>336 string Error!\ +>>343 string Hit\ a\ key\ to\ reboot. \b, FREE-DOS Beta 0.9sr1 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +# added by Joerg Jenderek +# http://www.visopsys.org/ +# http://partitionlogic.org.uk/ +# OEM-ID=Visopsys +>478 ulelong 0 +>>(1.b+326) string I/O\ Error\ reading\ +>>>(1.b+344) string Visopsys\ loader\r +>>>>(1.b+361) string Press\ any\ key\ to\ continue.\r \b, Visopsys loader +# http://alexfru.chat.ru/epm.html#bootprog +>494 ubyte >0x4D +>>495 string >E +>>>495 string >>>3 string BootProg +# It just looks for a program file name at the root directory +# and loads corresponding file with following execution. +# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes +>>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader +>>>>>499 string x \b %-.1s +>>>>>>500 ubyte&0xDF >0 +>>>>>>>500 string x \b%-.1s +>>>>>>>>501 ubyte&0xDF >0 +>>>>>>>>>501 string x \b%-.1s +>>>>>>>>>>502 ubyte&0xDF >0 +>>>>>>>>>>>502 string x \b%-.1s +>>>>>>>>>>>>503 ubyte&0xDF >0 +>>>>>>>>>>>>>503 string x \b%-.1s +>>>>>>>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>>>>>>>504 string x \b%-.1s +>>>>>>>>>>>>>>>>505 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>505 string x \b%-.1s +>>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>>>506 string x \b%-.1s +#name extension +>>>>>507 ubyte&0xDF >0 \b. +>>>>>>507 string x \b%-.1s +>>>>>>>508 ubyte&0xDF >0 +>>>>>>>>508 string x \b%-.1s +>>>>>>>>>509 ubyte&0xDF >0 +>>>>>>>>>>509 string x \b%-.1s +#If the boot sector fails to read any other sector, +#it prints a very short message ("RE") to the screen and hangs the computer. +#If the boot sector fails to find needed program in the root directory, +#it also hangs with another message ("NF"). +>>>>>492 string RENF \b, FAT (12 bit) +>>>>>495 string RENF \b, FAT (16 bit) +# http://alexfru.chat.ru/epm.html#bootprog +>494 ubyte >0x4D +>>495 string >E +>>>495 string >>>3 string BootProg +# It just looks for a program file name at the root directory +# and loads corresponding file with following execution. +# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes +>>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader +>>>>>499 string x \b %-.1s +>>>>>>500 ubyte&0xDF >0 +>>>>>>>500 string x \b%-.1s +>>>>>>>>501 ubyte&0xDF >0 +>>>>>>>>>501 string x \b%-.1s +>>>>>>>>>>502 ubyte&0xDF >0 +>>>>>>>>>>>502 string x \b%-.1s +>>>>>>>>>>>>503 ubyte&0xDF >0 +>>>>>>>>>>>>>503 string x \b%-.1s +>>>>>>>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>>>>>>>504 string x \b%-.1s +>>>>>>>>>>>>>>>>505 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>505 string x \b%-.1s +>>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>>>506 string x \b%-.1s +#name extension +>>>>>507 ubyte&0xDF >0 \b. +>>>>>>507 string x \b%-.1s +>>>>>>>508 ubyte&0xDF >0 +>>>>>>>>508 string x \b%-.1s +>>>>>>>>>509 ubyte&0xDF >0 +>>>>>>>>>>509 string x \b%-.1s +#If the boot sector fails to read any other sector, +#it prints a very short message ("RE") to the screen and hangs the computer. +#If the boot sector fails to find needed program in the root directory, +#it also hangs with another message ("NF"). +>>>>>492 string RENF \b, FAT (12 bit) +>>>>>495 string RENF \b, FAT (16 bit) +# x86 bootloader end +# updated by Joerg Jenderek at Sep 2007 +>3 ubyte 0 +#no active flag +>>446 ubyte 0 +# partition 1 not empty +>>>450 ubyte >0 +# partitions 3,4 empty +>>>>482 ubyte 0 +>>>>>498 ubyte 0 +# partition 2 ID=0,5,15 +>>>>>>466 ubyte <0x10 +>>>>>>>466 ubyte 0x05 \b, extended partition table +>>>>>>>466 ubyte 0x0F \b, extended partition table (LBA) +>>>>>>>466 ubyte 0x0 \b, extended partition table (last) +# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90 +# http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD +# older drives may use Near JuMP instruction E9 xx xx +>0 lelong&0x009000EB 0x009000EB +>0 lelong&0x000000E9 0x000000E9 +# minimal short forward jump found 03cx?? +# maximal short forward jump is 07fx +>1 ubyte <0xff \b, code offset 0x%x +# mtools-3.9.8/msdos.h +# usual values are marked with comments to get only informations of strange FAT systems +# valid sectorsize must be a power of 2 from 32 to 32768 +>>11 uleshort&0x000f x +>>>11 uleshort <32769 +>>>>11 uleshort >31 +>>>>>21 ubyte&0xf0 0xF0 +>>>>>>3 string >\0 \b, OEM-ID "%8.8s" +#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC +>>>>>>>8 string IHC \b cached by Windows 9M +>>>>>>11 uleshort >512 \b, Bytes/sector %u +#>>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual) +>>>>>>11 uleshort <512 \b, Bytes/sector %u +>>>>>>13 ubyte >1 \b, sectors/cluster %u +#>>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies) +>>>>>>14 uleshort >32 \b, reserved sectors %u +#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32) +#>>>>>>14 uleshort >1 \b, reserved sectors %u +#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16) +>>>>>>14 uleshort <1 \b, reserved sectors %u +>>>>>>16 ubyte >2 \b, FATs %u +#>>>>>>16 ubyte =2 \b, FATs %u (usual) +>>>>>>16 ubyte =1 \b, FAT %u +>>>>>>16 ubyte >0 +>>>>>>17 uleshort >0 \b, root entries %u +#>>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) +>>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) +#>>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) +>>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x +#>>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy) +>>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x +>>>>>>22 uleshort >0 \b, sectors/FAT %u +#>>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) +>>>>>>26 ubyte >2 \b, heads %u +#>>>>>>26 ubyte =2 \b, heads %u (usual floppy) +>>>>>>26 ubyte =1 \b, heads %u +#skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk +>>>>>>38 ubyte !0x70 +>>>>>>>28 ulelong >0 \b, hidden sectors %u +#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy) +>>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB) +#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB) +# FAT<32 specific +>>>>>>82 string !FAT32 +#>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk) +#>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>>36 ubyte !0x80 +>>>>>>>>36 ubyte !0 \b, physical drive 0x%x +>>>>>>>37 ubyte >0 \b, reserved 0x%x +#>>>>>>>37 ubyte =0 \b, reserved 0x%x +>>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>38 ubyte =0x29 +>>>>>>>>39 ulelong x \b, serial number 0x%x +>>>>>>>>43 string >>>>>>>43 string >NO\ NAME \b, label: "%11.11s" +>>>>>>>>43 string =NO\ NAME \b, unlabeled +>>>>>>>54 string FAT \b, FAT +>>>>>>>>54 string FAT12 \b (12 bit) +>>>>>>>>54 string FAT16 \b (16 bit) +# FAT32 specific +>>>>>>82 string FAT32 \b, FAT (32 bit) +>>>>>>>36 ulelong x \b, sectors/FAT %u +>>>>>>>40 uleshort >0 \b, extension flags %u +#>>>>>>>40 uleshort =0 \b, extension flags %u +>>>>>>>42 uleshort >0 \b, fsVersion %u +#>>>>>>>42 uleshort =0 \b, fsVersion %u (usual) +>>>>>>>44 ulelong >2 \b, rootdir cluster %u +#>>>>>>>44 ulelong =2 \b, rootdir cluster %u +#>>>>>>>44 ulelong =1 \b, rootdir cluster %u +>>>>>>>48 uleshort >1 \b, infoSector %u +#>>>>>>>48 uleshort =1 \b, infoSector %u (usual) +>>>>>>>48 uleshort <1 \b, infoSector %u +>>>>>>>50 uleshort >6 \b, Backup boot sector %u +#>>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual) +>>>>>>>50 uleshort <6 \b, Backup boot sector %u +>>>>>>>54 ulelong >0 \b, reserved1 0x%x +>>>>>>>58 ulelong >0 \b, reserved2 0x%x +>>>>>>>62 ulelong >0 \b, reserved3 0x%x +# same structure as FAT1X +>>>>>>>64 ubyte >0x80 \b, physical drive 0x%x +#>>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk) +>>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x +#>>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>>65 ubyte >0 \b, reserved 0x%x +>>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>66 ubyte =0x29 +>>>>>>>>67 ulelong x \b, serial number 0x%x +>>>>>>>>71 string >>>>>>71 string >NO\ NAME \b, label: "%11.11s" +>>>>>>>71 string =NO\ NAME \b, unlabeled +### FATs end +>0x200 lelong 0x82564557 \b, BSD disklabel +# FATX +0 string FATX FATX filesystem data + + +# Minix filesystems - Juan Cespedes +0x410 leshort 0x137f Minix filesystem +0x410 beshort 0x137f Minix filesystem (big endian) +>0x402 beshort !0 \b, %d zones +>0x1e string minix \b, bootable +0x410 leshort 0x138f Minix filesystem, 30 char names +0x410 leshort 0x2468 Minix filesystem, version 2 +0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names + +# romfs filesystems - Juan Cespedes +0 string -rom1fs- romfs filesystem, version 1 +>8 belong x %d bytes, +>16 string x named %s. + +# netboot image - Juan Cespedes +0 lelong 0x1b031336L Netboot image, +>4 lelong&0xFFFFFF00 0 +>>4 lelong&0x100 0x000 mode 2 +>>4 lelong&0x100 0x100 mode 3 +>4 lelong&0xFFFFFF00 !0 unknown mode + +0x18b string OS/2 OS/2 Boot Manager + +# updated by Joerg Jenderek at Oct 2008!! +# http://syslinux.zytor.com/iso.php +0 ulelong 0x7c40eafa isolinux Loader +# http://syslinux.zytor.com/pxe.php +0 ulelong 0x007c05ea pxelinux Loader +0 ulelong 0x60669c66 pxelinux Loader + +# added by Joerg Jenderek +# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or +# grub-1.94/kern/i386/pc/startup.S +# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data +# usual values are marked with comments to get only informations of strange GRUB loaders +0x200 uleshort 0x70EA +# found only version 3.{1,2} +>0x206 ubeshort >0x0300 +# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00" +>>0x212 ubyte >0x29 +>>>0x213 ubyte >0x29 +# not iso9660_stage1_5 +#>>>0 ulelong&0x00BE5652 0x00BE5652 +>>>>0x213 ubyte >0x29 GRand Unified Bootloader +# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2" +>>>>0x217 ubyte 0xFF stage1_5 +>>>>0x217 ubyte <0xFF stage2 +>>>>0x206 ubyte x \b version %u +>>>>0x207 ubyte x \b.%u +# module_size for 1.94 +>>>>0x208 ulelong <0xffffff \b, installed partition %u +#>>>>0x208 ulelong =0xffffff \b, %u (default) +>>>>0x208 ulelong >0xffffff \b, installed partition %u +# GRUB 0.5.95 unofficial +>>>>0x20C ulelong&0x2E300000 0x2E300000 +# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs +>>>>>0x20C ubyte x \b, identifier 0x%x +#>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default) +>>>>>0x20D ubyte >0 \b, LBA flag 0x%x +# GRUB version as string +>>>>>0x20E string >\0 \b, GRUB version %-s +# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default +>>>>>>0x215 ulong 0xffffffff +>>>>>>>0x219 string >\0 \b, configuration file %-s +>>>>>>0x215 ulong !0xffffffff +>>>>>>>0x215 string >\0 \b, configuration file %-s +# newer GRUB versions +>>>>0x20C ulelong&0x2E300000 !0x2E300000 +##>>>>>0x20C ulelong =0 \b, saved entry %d (usual) +>>>>>0x20C ulelong >0 \b, saved entry %d +# for 1.94 contains kernel image size +# for 0.93,0.94,0.96,0.97 +# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2 +>>>>>0x210 ubyte x \b, identifier 0x%x +# The flag for LBA forcing is in most cases 0 +#>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default) +>>>>>0x211 ubyte >0 \b, LBA flag 0x%x +# GRUB version as string +>>>>>0x212 string >\0 \b, GRUB version %-s +# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default +>>>>>0x217 ulong 0xffffffff +>>>>>>0x21b string >\0 \b, configuration file %-s +>>>>>0x217 ulong !0xffffffff +>>>>>>0x217 string >\0 \b, configuration file %-s + +9564 lelong 0x00011954 Unix Fast File system [v1] (little-endian), +>8404 string x last mounted on %s, +#>9504 ledate x last checked at %s, +>8224 ledate x last written at %s, +>8401 byte x clean flag %d, +>8228 lelong x number of blocks %d, +>8232 lelong x number of data blocks %d, +>8236 lelong x number of cylinder groups %d, +>8240 lelong x block size %d, +>8244 lelong x fragment size %d, +>8252 lelong x minimum percentage of free blocks %d, +>8256 lelong x rotational delay %dms, +>8260 lelong x disk rotational speed %drps, +>8320 lelong 0 TIME optimization +>8320 lelong 1 SPACE optimization + +42332 lelong 0x19540119 Unix Fast File system [v2] (little-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 leqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 lequad x number of blocks %lld, +>&-288 lequad x number of data blocks %lld, +>&-1332 lelong x number of cylinder groups %d, +>&-1328 lelong x block size %d, +>&-1324 lelong x fragment size %d, +>&-180 lelong x average file size %d, +>&-176 lelong x average number of files in dir %d, +>&-272 lequad x pending blocks to free %lld, +>&-264 lelong x pending inodes to free %ld, +>&-664 lequad x system-wide uuid %0llx, +>&-1316 lelong x minimum percentage of free blocks %d, +>&-1248 lelong 0 TIME optimization +>&-1248 lelong 1 SPACE optimization + +66908 lelong 0x19540119 Unix Fast File system [v2] (little-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 leqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 lequad x number of blocks %lld, +>&-288 lequad x number of data blocks %lld, +>&-1332 lelong x number of cylinder groups %d, +>&-1328 lelong x block size %d, +>&-1324 lelong x fragment size %d, +>&-180 lelong x average file size %d, +>&-176 lelong x average number of files in dir %d, +>&-272 lequad x pending blocks to free %lld, +>&-264 lelong x pending inodes to free %ld, +>&-664 lequad x system-wide uuid %0llx, +>&-1316 lelong x minimum percentage of free blocks %d, +>&-1248 lelong 0 TIME optimization +>&-1248 lelong 1 SPACE optimization + +9564 belong 0x00011954 Unix Fast File system [v1] (big-endian), +>7168 belong 0x4c41424c Apple UFS Volume +>>7186 string x named %s, +>>7176 belong x volume label version %d, +>>7180 bedate x created on %s, +>8404 string x last mounted on %s, +#>9504 bedate x last checked at %s, +>8224 bedate x last written at %s, +>8401 byte x clean flag %d, +>8228 belong x number of blocks %d, +>8232 belong x number of data blocks %d, +>8236 belong x number of cylinder groups %d, +>8240 belong x block size %d, +>8244 belong x fragment size %d, +>8252 belong x minimum percentage of free blocks %d, +>8256 belong x rotational delay %dms, +>8260 belong x disk rotational speed %drps, +>8320 belong 0 TIME optimization +>8320 belong 1 SPACE optimization + +42332 belong 0x19540119 Unix Fast File system [v2] (big-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 beqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 bequad x number of blocks %lld, +>&-288 bequad x number of data blocks %lld, +>&-1332 belong x number of cylinder groups %d, +>&-1328 belong x block size %d, +>&-1324 belong x fragment size %d, +>&-180 belong x average file size %d, +>&-176 belong x average number of files in dir %d, +>&-272 bequad x pending blocks to free %lld, +>&-264 belong x pending inodes to free %ld, +>&-664 bequad x system-wide uuid %0llx, +>&-1316 belong x minimum percentage of free blocks %d, +>&-1248 belong 0 TIME optimization +>&-1248 belong 1 SPACE optimization + +66908 belong 0x19540119 Unix Fast File system [v2] (big-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 beqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 bequad x number of blocks %lld, +>&-288 bequad x number of data blocks %lld, +>&-1332 belong x number of cylinder groups %d, +>&-1328 belong x block size %d, +>&-1324 belong x fragment size %d, +>&-180 belong x average file size %d, +>&-176 belong x average number of files in dir %d, +>&-272 bequad x pending blocks to free %lld, +>&-264 belong x pending inodes to free %ld, +>&-664 bequad x system-wide uuid %0llx, +>&-1316 belong x minimum percentage of free blocks %d, +>&-1248 belong 0 TIME optimization +>&-1248 belong 1 SPACE optimization + +# ext2/ext3 filesystems - Andreas Dilger +# ext4 filesystem - Eric Sandeen +0x438 leshort 0xEF53 Linux +>0x44c lelong x rev %d +>0x43e leshort x \b.%d +# No journal? ext2 +>0x45c lelong ^0x0000004 ext2 filesystem data +>>0x43a leshort ^0x0000001 (mounted or unclean) +# Has a journal? ext3 or ext4 +>0x45c lelong &0x0000004 +# and small INCOMPAT? +>>0x460 lelong <0x0000040 +# and small RO_COMPAT? +>>>0x464 lelong <0x0000008 ext3 filesystem data +# else large RO_COMPAT? +>>>0x464 lelong >0x0000007 ext4 filesystem data +# else large INCOMPAT? +>>0x460 lelong >0x000003f ext4 filesystem data +# General flags for any ext* fs +>0x460 lelong &0x0000004 (needs journal recovery) +>0x43a leshort &0x0000002 (errors) +# INCOMPAT flags +>0x460 lelong &0x0000001 (compressed) +#>0x460 lelong &0x0000002 (filetype) +#>0x460 lelong &0x0000010 (meta bg) +>0x460 lelong &0x0000040 (extents) +>0x460 lelong &0x0000080 (64bit) +#>0x460 lelong &0x0000100 (mmp) +#>0x460 lelong &0x0000200 (flex bg) +# RO_INCOMPAT flags +#>0x464 lelong &0x0000001 (sparse super) +>0x464 lelong &0x0000002 (large files) +>0x464 lelong &0x0000008 (huge files) +#>0x464 lelong &0x0000010 (gdt checksum) +#>0x464 lelong &0x0000020 (many subdirs) +#>0x463 lelong &0x0000040 (extra isize) + +# SGI disk labels - Nathan Scott +0 belong 0x0BE5A941 SGI disk label (volume header) + +# SGI XFS filesystem - Nathan Scott +0 belong 0x58465342 SGI XFS filesystem data +>0x4 belong x (blksz %d, +>0x68 beshort x inosz %d, +>0x64 beshort ^0x2004 v1 dirs) +>0x64 beshort &0x2004 v2 dirs) + +############################################################################ +# Minix-ST kernel floppy +0x800 belong 0x46fc2700 Atari-ST Minix kernel image +>19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy +>19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy + +############################################################################ +# Hmmm, is this a better way of detecting _standard_ floppy images ? +19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector + +19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector + +19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k +19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k + +# Valid media descriptor bytes for MS-DOS: +# +# Byte Capacity Media Size and Type +# ------------------------------------------------- +# +# F0 2.88 MB 3.5-inch, 2-sided, 36-sector +# F0 1.44 MB 3.5-inch, 2-sided, 18-sector +# F9 720K 3.5-inch, 2-sided, 9-sector +# F9 1.2 MB 5.25-inch, 2-sided, 15-sector +# FD 360K 5.25-inch, 2-sided, 9-sector +# FF 320K 5.25-inch, 2-sided, 8-sector +# FC 180K 5.25-inch, 1-sided, 9-sector +# FE 160K 5.25-inch, 1-sided, 8-sector +# FE 250K 8-inch, 1-sided, single-density +# FD 500K 8-inch, 2-sided, single-density +# FE 1.2 MB 8-inch, 2-sided, double-density +# F8 ----- Fixed disk +# +# FC xxxK Apricot 70x1x9 boot disk. +# +# Originally a bitmap: +# xxxxxxx0 Not two sided +# xxxxxxx1 Double sided +# xxxxxx0x Not 8 SPT +# xxxxxx1x 8 SPT +# xxxxx0xx Not Removable drive +# xxxxx1xx Removable drive +# 11111xxx Must be one. +# +# But now it's rather random: +# 111111xx Low density disk +# 00 SS, Not 8 SPT +# 01 DS, Not 8 SPT +# 10 SS, 8 SPT +# 11 DS, 8 SPT +# +# 11111001 Double density 3 floppy disk, high density 5 +# 11110000 High density 3 floppy disk +# 11111000 Hard disk any format +# + +# CDROM Filesystems +# Modified for UDF by gerardo.cacciari@gmail.com +32769 string CD001 +!:mime application/x-iso9660-image +>38913 string !NSR0 ISO 9660 CD-ROM filesystem data +>38913 string NSR0 UDF filesystem data +>>38917 string 1 (version 1.0) +>>38917 string 2 (version 1.5) +>>38917 string 3 (version 2.0) +>>38917 byte >0x33 (unknown version, ID 0x%X) +>>38917 byte <0x31 (unknown version, ID 0x%X) +# "application id" which appears to be used as a volume label +>32808 string >\0 '%s' +>34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable) +37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors) +!:mime application/x-iso9660-image +32776 string CDROM High Sierra CD-ROM filesystem data + +# cramfs filesystem - russell@coker.com.au +0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian +>4 lelong x size %lu +>8 lelong &1 version #2 +>8 lelong &2 sorted_dirs +>8 lelong &4 hole_support +>32 lelong x CRC 0x%x, +>36 lelong x edition %lu, +>40 lelong x %lu blocks, +>44 lelong x %lu files + +0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian +>4 belong x size %lu +>8 belong &1 version #2 +>8 belong &2 sorted_dirs +>8 belong &4 hole_support +>32 belong x CRC 0x%x, +>36 belong x edition %lu, +>40 belong x %lu blocks, +>44 belong x %lu files + +# reiserfs - russell@coker.com.au +0x10034 string ReIsErFs ReiserFS V3.5 +0x10034 string ReIsEr2Fs ReiserFS V3.6 +>0x1002c leshort x block size %d +>0x10032 leshort &2 (mounted or unclean) +>0x10000 lelong x num blocks %d +>0x10040 lelong 1 tea hash +>0x10040 lelong 2 yura hash +>0x10040 lelong 3 r5 hash + +# JFFS - russell@coker.com.au +0 lelong 0x34383931 Linux Journalled Flash File system, little endian +0 belong 0x34383931 Linux Journalled Flash File system, big endian + +# EST flat binary format (which isn't, but anyway) +# From: Mark Brown +0 string ESTFBINR EST flat binary + +# Aculab VoIP firmware +# From: Mark Brown +0 string VoIP\ Startup\ and Aculab VoIP firmware +>35 string x format %s + +# u-boot/PPCBoot image file +# From: Mark Brown +0 belong 0x27051956 u-boot/PPCBoot image +>4 string PPCBoot +>>12 string x version %s + +# JFFS2 file system +0 leshort 0x1984 Linux old jffs2 filesystem data little endian +0 leshort 0x1985 Linux jffs2 filesystem data little endian + +# Squashfs +0 string sqsh Squashfs filesystem, big endian, +>28 beshort x version %d. +>30 beshort x \b%d, +>28 beshort <3 +>>8 belong x %d bytes, +>28 beshort >2 +>>63 bequad x %lld bytes, +#>>67 belong x %d bytes, +>4 belong x %d inodes, +>28 beshort <2 +>>32 beshort x blocksize: %d bytes, +>28 beshort >1 +>>51 belong x blocksize: %d bytes, +>39 bedate x created: %s +0 string hsqs Squashfs filesystem, little endian, +>28 leshort x version %d. +>30 leshort x \b%d, +>28 leshort <3 +>>8 lelong x %d bytes, +>28 leshort >2 +>>63 lequad x %lld bytes, +#>>63 lelong x %d bytes, +>4 lelong x %d inodes, +>28 leshort <2 +>>32 leshort x blocksize: %d bytes, +>28 leshort >1 +>>51 lelong x blocksize: %d bytes, +>39 ledate x created: %s + +0 string td\000 floppy image data (TeleDisk) + +# AFS Dump Magic +# From: Ty Sarna +0 string \x01\xb3\xa1\x13\x22 AFS Dump +>&0 belong x (v%d) +>>&0 byte 0x76 +>>>&0 belong x Vol %d, +>>>>&0 byte 0x6e +>>>>>&0 string x %s +>>>>>>&1 byte 0x74 +>>>>>>>&0 beshort 2 +>>>>>>>>&4 bedate x on: %s +>>>>>>>>&0 bedate =0 full dump +>>>>>>>>&0 bedate !0 incremental since: %s + +#---------------------------------------------------------- +# VMS backup savesets - gerardo.cacciari@gmail.com +# +4 string \x01\x00\x01\x00\x01\x00 +>(0.s+16) string \x01\x01 +>>&(&0.b+8) byte 0x42 OpenVMS backup saveset data +>>>40 lelong x (block size %d, +>>>49 string >\0 original name '%s', +>>>2 short 1024 VAX generated) +>>>2 short 2048 AXP generated) +>>>2 short 4096 I64 generated) + +# Summary: Oracle Clustered Filesystem +# Created by: Aaron Botsis +8 string OracleCFS Oracle Clustered Filesystem, +>4 long x rev %d +>0 long x \b.%d, +>560 string x label: %.64s, +>136 string x mountpoint: %.128s + +# Summary: Oracle ASM tagged volume +# Created by: Aaron Botsis +32 string ORCLDISK Oracle ASM Volume, +>40 string x Disk Name: %0.12s +32 string ORCLCLRD Oracle ASM Volume (cleared), +>40 string x Disk Name: %0.12s + +# Oracle Clustered Filesystem - Aaron Botsis +8 string OracleCFS Oracle Clustered Filesystem, +>4 long x rev %d +>0 long x \b.%d, +>560 string x label: %.64s, +>136 string x mountpoint: %.128s + +# Oracle ASM tagged volume - Aaron Botsis +32 string ORCLDISK Oracle ASM Volume, +>40 string x Disk Name: %0.12s +32 string ORCLCLRD Oracle ASM Volume (cleared), +>40 string x Disk Name: %0.12s + +# Compaq/HP RILOE floppy image +# From: Dirk Jagdmann +0 string CPQRFBLO Compaq/HP RILOE floppy image + +#------------------------------------------------------------------------------ +# Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari@gmail.com +# These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is +# mapped to VBN 2 of [000000]INDEXF.SYS;1 +# +1008 string DECFILE11B Files-11 On-Disk Structure +>525 byte x Level %d +>525 byte x (ODS-%d OpenVMS file system), +>984 string x volume label is '%-12.12s' + +# From: Thomas Klausner +# http://filext.com/file-extension/DAA +# describes the daa file format. The magic would be: +0 string DAA\x0\x0\x0\x0\x0 PowerISO Direct-Access-Archive + +# From Albert Cahalan +# really le32 operation,destination,payloadsize (but quite predictable) +# 01 00 00 00 00 00 00 c0 00 02 00 00 +0 string \1\0\0\0\0\0\0\300\0\2\0\0 Marvell Libertas firmware + +# From Eric Sandeen +# GFS2 +0x10000 belong 0x01161970 GFS2 Filesystem +>0x10024 belong x (blocksize %d, +>0x10060 string >\0 lockproto %s) + +# BTRFS +0x10040 string _BHRfS_M BTRFS Filesystem +>0x1012b string >\0 (label "%s", +>0x10090 lelong x sectorsize %d, +>0x10094 lelong x nodesize %d, +>0x10098 lelong x leafsize %d) + + +# dvdisaster's .ecc +# From: "Nelson A. de Oliveira" +0 string *dvdisaster* dvdisaster error correction file + +#------------------------------------------------------------------------------ +# flash: file(1) magic for Macromedia Flash file format +# +# See +# +# http://www.macromedia.com/software/flash/open/ +# +0 string FWS Macromedia Flash data, +>3 byte x version %d +!:mime application/x-shockwave-flash +0 string CWS Macromedia Flash data (compressed), +!:mime application/x-shockwave-flash +>3 byte x version %d +# From: Cal Peake +0 string FLV Macromedia Flash Video +!:mime video/x-flv + +# +# From Dave Wilson +0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document +#------------------------------------------------------------------------------ +# fonts: file(1) magic for font data +# +0 search/1 FONT ASCII vfont text +0 short 0436 Berkeley vfont data +0 short 017001 byte-swapped Berkeley vfont data + +# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com +0 string %!PS-AdobeFont-1. PostScript Type 1 font text +>20 string >\0 (%s) +6 string %!PS-AdobeFont-1. PostScript Type 1 font program data + +# X11 font files in SNF (Server Natural Format) format +0 belong 00000004 X11 SNF font data, MSB first +0 lelong 00000004 X11 SNF font data, LSB first + +# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com) +0 search/1 STARTFONT\ X11 BDF font text + +# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com) +# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides) +0 string \001fcp X11 Portable Compiled Font data +>12 byte 0x02 \b, LSB first +>12 byte 0x0a \b, MSB first +0 string D1.0\015 X11 Speedo font data + +#------------------------------------------------------------------------------ +# FIGlet fonts and controlfiles +# From figmagic supplied with Figlet version 2.2 +# "David E. O'Brien" +0 string flf FIGlet font +>3 string >2a version %-2.2s +0 string flc FIGlet controlfile +>3 string >2a version %-2.2s + +# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu) +# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++ +0 belong 0x14025919 libGrx font data, +>8 leshort x %dx +>10 leshort x \b%d +>40 string x %s +# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu) +0 belong 0xff464f4e DOS code page font data collection +7 belong 0x00454741 DOS code page font data +7 belong 0x00564944 DOS code page font data (from Linux?) +4098 string DOSFONT DOSFONT2 encrypted font data + +# downloadable fonts for browser (prints type) anthon@mnt.org +0 string PFR1 PFR1 font +>102 string >0 \b: %s + +# True Type fonts +0 string \000\001\000\000\000 TrueType font data + +0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font +0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font + +0 string ttcf TrueType font collection data + +# Opentype font data from Avi Bercovich +0 string OTTO OpenType font data + +# Gürkan Sengün , www.linuks.mine.nu +0 string SplineFontDB: Spline Font Database +>14 string x version %s +# FORTRAN source +0 regex/100 \^[Cc][\ \t] FORTRAN program +!:mime text/x-fortran +#------------------------------------------------------------------------------ +# frame: file(1) magic for FrameMaker files +# +# This stuff came on a FrameMaker demo tape, most of which is +# copyright, but this file is "published" as witness the following: +# +# Note that this is the Framemaker Maker Interchange Format, not the +# Normal format which would be application/vnd.framemaker. +# +0 string \11 string 5.5 (5.5 +>11 string 5.0 (5.0 +>11 string 4.0 (4.0 +>11 string 3.0 (3.0 +>11 string 2.0 (2.0 +>11 string 1.0 (1.0 +>14 byte x %c) +0 string \9 string 4.0 (4.0) +>9 string 3.0 (3.0) +>9 string 2.0 (2.0) +>9 string 1.0 (1.x) +0 search/1 \17 string 3.0 (3.0) +>17 string 2.0 (2.0) +>17 string 1.0 (1.x) +0 string \17 string 1.01 (%s) +0 string \10 string 3.0 (3.0 +>10 string 2.0 (2.0 +>10 string 1.0 (1.0 +>13 byte x %c) +# XXX - this book entry should be verified, if you find one, uncomment this +#0 string \6 string 3.0 (3.0) +#>6 string 2.0 (2.0) +#>6 string 1.0 (1.0) +0 string \= 4096 (or >4095, same thing), then it's +# an executable, and is dynamically-linked if the "has run-time +# loader information" bit is set. +# +# On x86, NetBSD says: +# +# If it's neither pure nor demand-paged: +# +# if it has the "has run-time loader information" bit set, it's +# a dynamically-linked executable; +# +# if it doesn't have that bit set, then: +# +# if it has the "is position-independent" bit set, it's +# position-independent; +# +# if the entry point is non-zero, it's an executable, otherwise +# it's an object file. +# +# If it's pure: +# +# if it has the "has run-time loader information" bit set, it's +# a dynamically-linked executable, otherwise it's just an +# executable. +# +# If it's demand-paged: +# +# if it has the "has run-time loader information" bit set, +# then: +# +# if the entry point is < 4096, it's a shared library; +# +# if the entry point is = 4096 or > 4096 (i.e., >= 4096), +# it's a dynamically-linked executable); +# +# if it doesn't have the "has run-time loader information" bit +# set, then it's just an executable. +# +# (On non-x86, NetBSD does much the same thing, except that it uses +# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K +# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's +# had 8K pages; dunno about MIPS.) +# +# I suspect the two will differ only in perverse and uninteresting cases +# ("shared" libraries that aren't demand-paged and whose pages probably +# won't actually be shared, executables with entry points <4096). +# +# I leave it to those more familiar with FreeBSD and NetBSD to figure out +# what the right answer is (although using ">4095", FreeBSD-style, is +# probably better than separately checking for "=4096" and ">4096", +# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged +# executables using the NetBSD technique.) +# +0 lelong&0377777777 041400407 FreeBSD/i386 +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400410 FreeBSD/i386 pure +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400413 FreeBSD/i386 demand paged +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +# XXX gross hack to identify core files +# cores start with a struct tss; we take advantage of the following: +# byte 7: highest byte of the kernel stack pointer, always 0xfe +# 8/9: kernel (ring 0) ss value, always 0x0010 +# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0 +# 28: low order byte of the current PTD entry, always 0 since the +# PTD is page-aligned +# +7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file +>1039 string >\0 from '%s' + +# /var/run/ld.so.hints +# What are you laughing about? +0 lelong 011421044151 ld.so hints file (Little Endian +>4 lelong >0 \b, version %d) +>4 belong <1 \b) +0 belong 011421044151 ld.so hints file (Big Endian +>4 belong >0 \b, version %d) +>4 belong <1 \b) + +# +# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities +# +0 string SCRSHOT_ scrshot(1) screenshot, +>8 byte x version %d, +>9 byte 2 %d bytes in header, +>>10 byte x %d chars wide by +>>11 byte x %d chars high + +#------------------------------------------------------------------------------ +# fsav: file(1) magic for datafellows fsav virus definition files +# Anthon van der Neut (anthon@mnt.org) + +# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def} +0 beshort 0x1575 fsav macro virus signatures +>8 leshort >0 (%d- +>11 byte >0 \b%02d- +>10 byte >0 \b%02d) +# ftp://ftp.f-prot.com/pub/sign.zip +#10 ubyte <12 +#>9 ubyte <32 +#>>8 ubyte 0x0a +#>>>12 ubyte 0x07 +#>>>>11 uleshort >0 fsav DOS/Windows virus signatures (%d- +#>>>>10 byte 0 \b01- +#>>>>10 byte 1 \b02- +#>>>>10 byte 2 \b03- +#>>>>10 byte 3 \b04- +#>>>>10 byte 4 \b05- +#>>>>10 byte 5 \b06- +#>>>>10 byte 6 \b07- +#>>>>10 byte 7 \b08- +#>>>>10 byte 8 \b09- +#>>>>10 byte 9 \b10- +#>>>>10 byte 10 \b11- +#>>>>10 byte 11 \b12- +#>>>>9 ubyte >0 \b%02d) +# ftp://ftp.f-prot.com/pub/sign2.zip +#0 ubyte 0x62 +#>1 ubyte 0xF5 +#>>2 ubyte 0x1 +#>>>3 ubyte 0x1 +#>>>>4 ubyte 0x0e +#>>>>>13 ubyte >0 fsav virus signatures +#>>>>>>11 ubyte x size 0x%02x +#>>>>>>12 ubyte x \b%02x +#>>>>>>13 ubyte x \b%02x bytes + +# Joerg Jenderek: joerg dot jenderek at web dot de +# http://www.clamav.net/doc/latest/html/node45.html +# .cvd files start with a 512 bytes colon separated header +# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime +# + gzipped tarball files +0 string ClamAV-VDB: +>11 string >\0 Clam AntiVirus database %-.23s +>>34 string : +>>>35 string !: \b, version +>>>>35 string x \b%-.1s +>>>>>36 string !: +>>>>>>36 string x \b%-.1s +>>>>>>>37 string !: +>>>>>>>>37 string x \b%-.1s +>>>>>>>>>38 string !: +>>>>>>>>>>38 string x \b%-.1s +>512 string \037\213 \b, gzipped +>769 string ustar\0 \b, tarred + +# Type: Grisoft AVG AntiVirus +# From: David Newgas +0 string AVG7_ANTIVIRUS_VAULT_FILE AVG 7 Antivirus vault file data +#------------------------------------------------------------------------------ +# games: file(1) for games + +# Fabio Bonelli +# Quake II - III data files +0 string IDP2 Quake II 3D Model file, +>20 long x %lu skin(s), +>8 long x (%lu x +>12 long x %lu), +>40 long x %lu frame(s), +>16 long x Frame size %lu bytes, +>24 long x %lu vertices/frame, +>28 long x %lu texture coordinates, +>32 long x %lu triangles/frame + +0 string IBSP Quake +>4 long 0x26 II Map file (BSP) +>4 long 0x2E III Map file (BSP) + +0 string IDS2 Quake II SP2 sprite file + +#--------------------------------------------------------------------------- +# Doom and Quake +# submitted by Nicolas Patrois + +0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo +# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01 + +24 string LxD\ 203 Linuxdoom save +>0 string x , name=%s +>44 string x , world=%s + +# Quake + +0 string PACK Quake I or II world or extension + +#0 string -1\x0a Quake I demo +#>30 string x version %.4s +#>61 string x level %s + +#0 string 5\x0a Quake I save + +# The levels + +# Quake 1 + +0 string 5\x0aIntroduction Quake I save: start Introduction +0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex +0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned +0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis +0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto +0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret) +0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep +0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon +0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon +0 string 5\x0athe_Installation Quake I save: e2m1 The installation +0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel +0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!) +0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret) +0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress +0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse +0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette +0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central +0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin +0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror +0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight +0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret) +0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels +0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment +0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system +0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair +0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine +0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate +0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium +0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret) +0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze +0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony +0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit + +# Quake DeathMatch levels + +0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths +0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis +0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base +0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place +0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern +0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone + +# Scourge of Armagon + +0 string 5\x0aCommand_HQ Quake I save: start Command HQ +0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station +0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility +0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret) +0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine +0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility +0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms +0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret) +0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral +0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs +0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt +0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep +0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment +0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium +0 string 5\x0aLimbo Quake I save: hip3m3 Limbo +0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret) +0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet +0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair + +# Malice + +0 string 5\x0aThe_Academy Quake I save: start The academy +0 string 5\x0aThe_Lab Quake I save: d1 The lab +0 string 5\x0aArea_33 Quake I save: d1b Area 33 +0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions +0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret) +0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret) +0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice +0 string 5\x0aArea44 Quake I save: d1c Area 44 +0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers +0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life +0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood +0 string 5\x0aThe_Flood Quake I save: d5 The flood +0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant +0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant +0 string 5\x0aThe_Foundry Quake I save: d7b The foundry +0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base +0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base +0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories +0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive +0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ +0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown! + +# Malice DeathMatch levels + +0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct +0 string 5\x0aSub_Station Quake I save: ddm2 Sub station +0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights! +0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa +0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse +0 string 5\x0aDOMINO Quake I save: ddm6 Domino +0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder + + +0 string MComprHD MAME CHD compressed hard disk image, +>12 belong x version %lu + +# doom - submitted by Jon Dowland + +0 string =IWAD doom main IWAD data +>4 lelong x containing %d lumps +0 string =PWAD doom patch PWAD data +>4 lelong x containing %d lumps + + +# Summary: Warcraft 3 save +# Extension: .w3g +# Created by: "Nelson A. de Oliveira" +0 string Warcraft\ III\ recorded\ game %s + + +# Summary: Warcraft 3 map +# Extension: .w3m +# Created by: "Nelson A. de Oliveira" +0 string HM3W Warcraft III map file + + +# Summary: SGF Smart Game Format +# Extension: .sgf +# Reference: http://www.red-bean.com/sgf/ +# Created by: Eduardo Sabbatella +# Modified by (1): Abel Cheung (regex, more game format) +# FIXME: Some games don't have GM (game type) +0 regex \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format +>2 search/0x200 GM[ +>>&0 string 1] (Go) +>>&0 string 2] (Othello) +>>&0 string 3] (chess) +>>&0 string 4] (Gomoku+Renju) +>>&0 string 5] (Nine Men's Morris) +>>&0 string 6] (Backgammon) +>>&0 string 7] (Chinese chess) +>>&0 string 8] (Shogi) +>>&0 string 9] (Lines of Action) +>>&0 string 10] (Ataxx) +>>&0 string 11] (Hex) +>>&0 string 12] (Jungle) +>>&0 string 13] (Neutron) +>>&0 string 14] (Philosopher's Football) +>>&0 string 15] (Quadrature) +>>&0 string 16] (Trax) +>>&0 string 17] (Tantrix) +>>&0 string 18] (Amazons) +>>&0 string 19] (Octi) +>>&0 string 20] (Gess) +>>&0 string 21] (Twixt) +>>&0 string 22] (Zertz) +>>&0 string 23] (Plateau) +>>&0 string 24] (Yinsh) +>>&0 string 25] (Punct) +>>&0 string 26] (Gobblet) +>>&0 string 27] (hive) +>>&0 string 28] (Exxit) +>>&0 string 29] (Hnefatal) +>>&0 string 30] (Kuba) +>>&0 string 31] (Tripples) +>>&0 string 32] (Chase) +>>&0 string 33] (Tumbling Down) +>>&0 string 34] (Sahara) +>>&0 string 35] (Byte) +>>&0 string 36] (Focus) +>>&0 string 37] (Dvonn) +>>&0 string 38] (Tamsk) +>>&0 string 39] (Gipf) +>>&0 string 40] (Kropki) + + +# Summary: Civilization 4 video +# Extension: .bik +# Created by: Abel Cheung +0 string BIKi Civilization 4 Video + + +############################################## +# NetImmerse/Gamebryo game engine entries + +# Summary: Gamebryo game engine file +# Extension: .nif, .kf +# Created by: Abel Cheung +0 string Gamebryo\ File\ Format,\ Version\ Gamebryo game engine file +>&0 regex [0-9a-z.]+ \b, version %s + +# Summary: Gamebryo game engine file +# Extension: .kfm +# Created by: Abel Cheung +0 string ;Gamebryo\ KFM\ File\ Version\ Gamebryo game engine animation File +>&0 regex [0-9a-z.]+ \b, version %s + +# Summary: NetImmerse game engine file +# Extension .nif +# Created by: Abel Cheung +0 string NetImmerse\ File\ Format,\ Versio +>&0 string n\ NetImmerse game engine file +>>&0 regex [0-9a-z.]+ \b, version %s + + +#------------------------------------------------------------------------------ +# gcc: file(1) magic for GCC special files +# +0 string gpch GCC precompiled header + +# The version field is annoying. It's 3 characters, not zero-terminated. +>5 byte x (version %c +>6 byte x \b%c +>7 byte x \b%c) + +# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O' +>4 byte 67 for C +>4 byte 111 for Objective C +>4 byte 43 for C++ +>4 byte 79 for Objective C++ + +#------------------------------------------------------------------------------ +# GEOS files (Vidar Madsen, vidar@gimp.org) +# semi-commonly used in embedded and handheld systems. +0 belong 0xc745c153 GEOS +>40 byte 1 executable +>40 byte 2 VMFile +>40 byte 3 binary +>40 byte 4 directory label +>40 byte <1 unknown +>40 byte >4 unknown +>4 string >\0 \b, name "%s" +#>44 short x \b, version %d +#>46 short x \b.%d +#>48 short x \b, rev %d +#>50 short x \b.%d +#>52 short x \b, proto %d +#>54 short x \br%d +#>168 string >\0 \b, copyright "%s" +#------------------------------------------------------------------------------ +# GIMP Gradient: file(1) magic for the GIMP's gradient data files +# by Federico Mena + +0 string GIMP\ Gradient GIMP gradient data + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the XCF image format used in the GIMP developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +0 string gimp\ xcf GIMP XCF image data, +>9 string file version 0, +>9 string v version +>>10 string >\0 %s, +>14 belong x %lu x +>18 belong x %lu, +>22 belong 0 RGB Color +>22 belong 1 Greyscale +>22 belong 2 Indexed Color +>22 belong >2 Unknown Image Type. + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the patterns used in the GIMP, developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +20 string GPAT GIMP pattern data, +>24 string x %s + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the brushes used in the GIMP, developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +20 string GIMP GIMP brush data + +# GIMP Curves File +# From: "Nelson A. de Oliveira" +0 string #\040GIMP\040Curves\040File GIMP curve file +# GNOME keyring +# Contributed by Josh Triplett +# FIXME: Could be simplified if pstring supported two-byte counts +0 string GnomeKeyring\n\r\0\n GNOME keyring +>&0 ubyte 0 \b, major version 0 +>>&0 ubyte 0 \b, minor version 0 +>>>&0 ubyte 0 \b, crypto type 0 (AEL) +>>>&0 ubyte >0 \b, crypto type %hhu (unknown) +>>>&1 ubyte 0 \b, hash type 0 (MD5) +>>>&1 ubyte >0 \b, hash type %hhu (unknown) +>>>&2 ubelong 0xFFFFFFFF \b, name NULL +>>>&2 ubelong !0xFFFFFFFF +>>>>&-4 ubelong >255 \b, name too long for file's pstring type +>>>>&-4 ubelong <256 +>>>>>&-1 pstring x \b, name "%s" +>>>>>>&0 ubeqdate x \b, last modified %s +>>>>>>&8 ubeqdate x \b, created %s +>>>>>>&16 ubelong &1 +>>>>>>>&0 ubelong x \b, locked if idle for %u seconds +>>>>>>&16 ubelong ^1 \b, not locked if idle +>>>>>>&24 ubelong x \b, hash iterations %u +>>>>>>&28 ubequad x \b, salt %llu +>>>>>>&52 ubelong x \b, %u item(s) +#------------------------------------------------------------------------------ +# gnu: file(1) magic for various GNU tools +# +# GNU nlsutils message catalog file format +# +0 string \336\22\4\225 GNU message catalog (little endian), +>4 lelong x revision %d, +>8 lelong x %d messages +0 string \225\4\22\336 GNU message catalog (big endian), +>4 belong x revision %d, +>8 belong x %d messages +# message catalogs, from Mitchum DSouza +0 string *nazgul* Nazgul style compiled message catalog +>8 lelong >0 \b, version %ld + +# GnuPG +# The format is very similar to pgp +0 string \001gpg GPG key trust database +>4 byte x version %d +# Note: magic.mime had 0x8501 for the next line instead of 0x8502 +0 beshort 0x8502 GPG encrypted data +!:mime text/PGP # encoding: data + +# This magic is not particularly good, as the keyrings don't have true +# magic. Nevertheless, it covers many keyrings. +0 beshort 0x9901 GPG key public ring +!:mime application/x-gnupg-keyring + +# Gnumeric spreadsheet +# This entry is only semi-helpful, as Gnumeric compresses its files, so +# they will ordinarily reported as "compressed", but at least -z helps +39 string = +# gnu find magic +0 string \0LOCATE GNU findutils locate database data +>7 string >\0 \b, format %s +>7 string 02 \b (frcode) + +# Files produced by GNU gettext +0 long 0xDE120495 GNU-format message catalog data +0 long 0x950412DE GNU-format message catalog data + +#------------------------------------------------------------------------------ +# gnumeric: file(1) magic for Gnumeric spreadsheet +# This entry is only semi-helpful, as Gnumeric compresses its files, so +# they will ordinarily reported as "compressed", but at least -z helps +39 string =39 byte >0 - version %c +# ACE/gr ascii +0 string #\ xvgr\ parameter\ file ACE/gr ascii file +0 string #\ xmgr\ parameter\ file ACE/gr ascii file +0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file +# Grace projects +0 string #\ Grace\ project\ file Grace project file +>23 string @version\ (version +>>32 byte >0 %c +>>33 string >\0 \b.%.2s +>>35 string >\0 \b.%.2s) +# ACE/gr fit description files +0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file +# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE +#------------------------------------------------------------------------------ +# graphviz: file(1) magic for http://www.graphviz.org/ + +# FIXME: These patterns match too generally. For example, the first +# line matches a LaTeX file containing the word "graph" (with a { +# following later) and the second line matches this file. +#0 regex/100 [\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{ graphviz graph text +#!:mime text/vnd.graphviz +#0 regex/100 [\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{ graphviz digraph text +#!:mime text/vnd.graphviz + +#------------------------------------------------------------------------------ +# gringotts: file(1) magic for Gringotts +# http://devel.pluto.linux.it/projects/Gringotts/ +# author: Germano Rizzo +#GRG3????Y +0 string GRG Gringotts data file +#file format 1 +>3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9 +#file format 2 +>3 string 2 v.2, MCRYPT S2K, +>>8 byte&0x70 0x00 RIJNDAEL-128 crypt, +>>8 byte&0x70 0x10 SERPENT crypt, +>>8 byte&0x70 0x20 TWOFISH crypt, +>>8 byte&0x70 0x30 CAST-256 crypt, +>>8 byte&0x70 0x40 SAFER+ crypt, +>>8 byte&0x70 0x50 LOKI97 crypt, +>>8 byte&0x70 0x60 3DES crypt, +>>8 byte&0x70 0x70 RIJNDAEL-256 crypt, +>>8 byte&0x08 0x00 SHA1 hash, +>>8 byte&0x08 0x08 RIPEMD-160 hash, +>>8 byte&0x04 0x00 ZLib +>>8 byte&0x04 0x04 BZip2 +>>8 byte&0x03 0x00 lvl.0 +>>8 byte&0x03 0x01 lvl.3 +>>8 byte&0x03 0x02 lvl.6 +>>8 byte&0x03 0x03 lvl.9 +#file format 3 +>3 string 3 v.3, OpenPGP S2K, +>>8 byte&0x70 0x00 RIJNDAEL-128 crypt, +>>8 byte&0x70 0x10 SERPENT crypt, +>>8 byte&0x70 0x20 TWOFISH crypt, +>>8 byte&0x70 0x30 CAST-256 crypt, +>>8 byte&0x70 0x40 SAFER+ crypt, +>>8 byte&0x70 0x50 LOKI97 crypt, +>>8 byte&0x70 0x60 3DES crypt, +>>8 byte&0x70 0x70 RIJNDAEL-256 crypt, +>>8 byte&0x08 0x00 SHA1 hash, +>>8 byte&0x08 0x08 RIPEMD-160 hash, +>>8 byte&0x04 0x00 ZLib +>>8 byte&0x04 0x04 BZip2 +>>8 byte&0x03 0x00 lvl.0 +>>8 byte&0x03 0x01 lvl.3 +>>8 byte&0x03 0x02 lvl.6 +>>8 byte&0x03 0x03 lvl.9 +#file format >3 +>3 string >3 v.%.1s (unknown details) + +#------------------------------------------------------------------------------ +# hitach-sh: file(1) magic for Hitachi Super-H +# +# Super-H COFF +# +0 beshort 0x0500 Hitachi SH big-endian COFF +>18 beshort&0x0002 =0x0000 object +>18 beshort&0x0002 =0x0002 executable +>18 beshort&0x0008 =0x0008 \b, stripped +>18 beshort&0x0008 =0x0000 \b, not stripped +# +0 leshort 0x0550 Hitachi SH little-endian COFF +>18 leshort&0x0002 =0x0000 object +>18 leshort&0x0002 =0x0002 executable +>18 leshort&0x0008 =0x0008 \b, stripped +>18 leshort&0x0008 =0x0000 \b, not stripped + +#------------------------------------------------------------------------------ +# hp: file(1) magic for Hewlett Packard machines (see also "printer") +# +# XXX - somebody should figure out whether any byte order needs to be +# applied to the "TML" stuff; I'm assuming the Apollo stuff is +# big-endian as it was mostly 68K-based. +# +# I think the 500 series was the old stack-based machines, running a +# UNIX environment atop the "SUN kernel"; dunno whether it was +# big-endian or little-endian. +# +# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based; +# hp300 are 68020+68881 based; hp400 are also 68k. The following basic +# HP magic is useful for reference, but using "long" magic is a better +# practice in order to avoid collisions. +# +# Guy Harris (guy@netapp.com): some additions to this list came from +# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1, +# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0 +# "/etc/magic", though, except for the "archive file relocatable library" +# stuff, and the 68030 and 68040 stuff isn't there at all - are they not +# used in executables, or have they just not yet updated "/etc/magic" +# completely? +# +# 0 beshort 200 hp200 (68010) BSD binary +# 0 beshort 300 hp300 (68020+68881) BSD binary +# 0 beshort 0x20c hp200/300 HP-UX binary +# 0 beshort 0x20d hp400 (68030) HP-UX binary +# 0 beshort 0x20e hp400 (68040?) HP-UX binary +# 0 beshort 0x20b PA-RISC1.0 HP-UX binary +# 0 beshort 0x210 PA-RISC1.1 HP-UX binary +# 0 beshort 0x211 PA-RISC1.2 HP-UX binary +# 0 beshort 0x214 PA-RISC2.0 HP-UX binary + +# +# The "misc" stuff needs a byte order; the archives look suspiciously +# like the old 177545 archives (0xff65 = 0177545). +# +#### Old Apollo stuff +0 beshort 0627 Apollo m68k COFF executable +>18 beshort ^040000 not stripped +>22 beshort >0 - version %ld +0 beshort 0624 apollo a88k COFF executable +>18 beshort ^040000 not stripped +>22 beshort >0 - version %ld +0 long 01203604016 TML 0123 byte-order format +0 long 01702407010 TML 1032 byte-order format +0 long 01003405017 TML 2301 byte-order format +0 long 01602007412 TML 3210 byte-order format +#### PA-RISC 1.1 +0 belong 0x02100106 PA-RISC1.1 relocatable object +0 belong 0x02100107 PA-RISC1.1 executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x02100108 PA-RISC1.1 shared executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0210010b PA-RISC1.1 demand-load executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0210010e PA-RISC1.1 shared library +>96 belong >0 - not stripped + +0 belong 0x0210010d PA-RISC1.1 dynamic load library +>96 belong >0 - not stripped + +#### PA-RISC 2.0 +0 belong 0x02140106 PA-RISC2.0 relocatable object + +0 belong 0x02140107 PA-RISC2.0 executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x02140108 PA-RISC2.0 shared executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0214010b PA-RISC2.0 demand-load executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0214010e PA-RISC2.0 shared library +>96 belong >0 - not stripped + +0 belong 0x0214010d PA-RISC2.0 dynamic load library +>96 belong >0 - not stripped + +#### 800 +0 belong 0x020b0106 PA-RISC1.0 relocatable object + +0 belong 0x020b0107 PA-RISC1.0 executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b0108 PA-RISC1.0 shared executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b010b PA-RISC1.0 demand-load executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b010e PA-RISC1.0 shared library +>96 belong >0 - not stripped + +0 belong 0x020b010d PA-RISC1.0 dynamic load library +>96 belong >0 - not stripped + +0 belong 0x213c6172 archive file +>68 belong 0x020b0619 - PA-RISC1.0 relocatable library +>68 belong 0x02100619 - PA-RISC1.1 relocatable library +>68 belong 0x02110619 - PA-RISC1.2 relocatable library +>68 belong 0x02140619 - PA-RISC2.0 relocatable library + +#### 500 +0 long 0x02080106 HP s500 relocatable executable +>16 long >0 - version %ld + +0 long 0x02080107 HP s500 executable +>16 long >0 - version %ld + +0 long 0x02080108 HP s500 pure executable +>16 long >0 - version %ld + +#### 200 +0 belong 0x020c0108 HP s200 pure executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c0107 HP s200 executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c010b HP s200 demand-load executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c0106 HP s200 relocatable executable +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>8 belong &0x80000000 save fp regs +>8 belong &0x20000000 debuggable +>8 belong &0x10000000 PIC + +0 belong 0x020a0108 HP s200 (2.x release) pure executable +>4 beshort >0 - version %ld +>36 belong >0 not stripped + +0 belong 0x020a0107 HP s200 (2.x release) executable +>4 beshort >0 - version %ld +>36 belong >0 not stripped + +0 belong 0x020c010e HP s200 shared library +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>36 belong >0 not stripped + +0 belong 0x020c010d HP s200 dynamic load library +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>36 belong >0 not stripped + +#### MISC +0 long 0x0000ff65 HP old archive +0 long 0x020aff65 HP s200 old archive +0 long 0x020cff65 HP s200 old archive +0 long 0x0208ff65 HP s500 old archive + +0 long 0x015821a6 HP core file + +0 long 0x4da7eee8 HP-WINDOWS font +>8 byte >0 - version %ld +0 string Bitmapfile HP Bitmapfile + +0 string IMGfile CIS compimg HP Bitmapfile +# XXX - see "lif" +#0 short 0x8000 lif file +0 long 0x020c010c compiled Lisp + +0 string msgcat01 HP NLS message catalog, +>8 long >0 %d messages + +# Summary: HP-48/49 calculator +# Created by: phk@data.fls.dk +# Modified by (1): AMAKAWA Shuhei +# Modified by (2): Samuel Thibault (HP49 support) +0 string HPHP HP +>4 string 48 48 binary +>4 string 49 49 binary +>7 byte >64 - Rev %c +>8 leshort 0x2911 (ADR) +>8 leshort 0x2933 (REAL) +>8 leshort 0x2955 (LREAL) +>8 leshort 0x2977 (COMPLX) +>8 leshort 0x299d (LCOMPLX) +>8 leshort 0x29bf (CHAR) +>8 leshort 0x29e8 (ARRAY) +>8 leshort 0x2a0a (LNKARRAY) +>8 leshort 0x2a2c (STRING) +>8 leshort 0x2a4e (HXS) +>8 leshort 0x2a74 (LIST) +>8 leshort 0x2a96 (DIR) +>8 leshort 0x2ab8 (ALG) +>8 leshort 0x2ada (UNIT) +>8 leshort 0x2afc (TAGGED) +>8 leshort 0x2b1e (GROB) +>8 leshort 0x2b40 (LIB) +>8 leshort 0x2b62 (BACKUP) +>8 leshort 0x2b88 (LIBDATA) +>8 leshort 0x2d9d (PROG) +>8 leshort 0x2dcc (CODE) +>8 leshort 0x2e48 (GNAME) +>8 leshort 0x2e6d (LNAME) +>8 leshort 0x2e92 (XLIB) + +0 string %%HP: HP text +>6 string T(0) - T(0) +>6 string T(1) - T(1) +>6 string T(2) - T(2) +>6 string T(3) - T(3) +>10 string A(D) A(D) +>10 string A(R) A(R) +>10 string A(G) A(G) +>14 string F(.) F(.); +>14 string F(,) F(,); + + +# Summary: HP-38/39 calculator +# Created by: Samuel Thibault +0 string HP3 +>3 string 8 HP 38 +>3 string 9 HP 39 +>4 string Bin binary +>4 string Asc ASCII +>7 string A (Directory List) +>7 string B (Zaplet) +>7 string C (Note) +>7 string D (Program) +>7 string E (Variable) +>7 string F (List) +>7 string G (Matrix) +>7 string H (Library) +>7 string I (Target List) +>7 string J (ASCII Vector specification) +>7 string K (wildcard) + +# Summary: HP-38/39 calculator +# Created by: Samuel Thibault +0 string HP3 +>3 string 8 HP 38 +>3 string 9 HP 39 +>4 string Bin binary +>4 string Asc ASCII +>7 string A (Directory List) +>7 string B (Zaplet) +>7 string C (Note) +>7 string D (Program) +>7 string E (Variable) +>7 string F (List) +>7 string G (Matrix) +>7 string H (Library) +>7 string I (Target List) +>7 string J (ASCII Vector specification) +>7 string K (wildcard) + +# hpBSD magic numbers +0 beshort 200 hp200 (68010) BSD +>2 beshort 0407 impure binary +>2 beshort 0410 read-only binary +>2 beshort 0413 demand paged binary +0 beshort 300 hp300 (68020+68881) BSD +>2 beshort 0407 impure binary +>2 beshort 0410 read-only binary +>2 beshort 0413 demand paged binary +# +# From David Gero +# HP-UX 10.20 core file format from /usr/include/sys/core.h +# Unfortunately, HP-UX uses corehead blocks without specifying the order +# There are four we care about: +# CORE_KERNEL, which starts with the string "HP-UX" +# CORE_EXEC, which contains the name of the command +# CORE_PROC, which contains the signal number that caused the core dump +# CORE_FORMAT, which contains the version of the core file format (== 1) +# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC +# but we include all 6 variations of the order of the first 3, and +# assume that PROC will always be last +# Order 1: KERNEL, EXEC, FORMAT, PROC +0x10 string HP-UX +>0 belong 2 +>>0xC belong 0x3C +>>>0x4C belong 0x100 +>>>>0x58 belong 0x44 +>>>>>0xA0 belong 1 +>>>>>>0xAC belong 4 +>>>>>>>0xB0 belong 1 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x90 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 2: KERNEL, FORMAT, EXEC, PROC +>>>0x4C belong 1 +>>>>0x58 belong 4 +>>>>>0x5C belong 1 +>>>>>>0x60 belong 0x100 +>>>>>>>0x6C belong 0x44 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0xA4 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 3: FORMAT, KERNEL, EXEC, PROC +0x24 string HP-UX +>0 belong 1 +>>0xC belong 4 +>>>0x10 belong 1 +>>>>0x14 belong 2 +>>>>>0x20 belong 0x3C +>>>>>>0x60 belong 0x100 +>>>>>>>0x6C belong 0x44 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0xA4 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 4: EXEC, KERNEL, FORMAT, PROC +0x64 string HP-UX +>0 belong 0x100 +>>0xC belong 0x44 +>>>0x54 belong 2 +>>>>0x60 belong 0x3C +>>>>>0xA0 belong 1 +>>>>>>0xAC belong 4 +>>>>>>>0xB0 belong 1 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x44 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 5: FORMAT, EXEC, KERNEL, PROC +0x78 string HP-UX +>0 belong 1 +>>0xC belong 4 +>>>0x10 belong 1 +>>>>0x14 belong 0x100 +>>>>>0x20 belong 0x44 +>>>>>>0x68 belong 2 +>>>>>>>0x74 belong 0x3C +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x58 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 6: EXEC, FORMAT, KERNEL, PROC +>0 belong 0x100 +>>0xC belong 0x44 +>>>0x54 belong 1 +>>>>0x60 belong 4 +>>>>>0x64 belong 1 +>>>>>>0x68 belong 2 +>>>>>>>0x74 belong 0x2C +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x44 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ + + + +#------------------------------------------------------------------------------ +# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats +# Magic too short! +#0 string HU Human68k +#>68 string LZX LZX compressed +#>>72 string >\0 (version %s) +#>(8.L+74) string LZX LZX compressed +#>>(8.L+78) string >\0 (version %s) +#>60 belong >0 binded +#>(8.L+66) string #HUPAIR hupair +#>0 string HU X executable +#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1 +#>4 belong >0 - base address 0x%x +#>28 belong >0 not stripped +#>32 belong >0 with debug information +#0 beshort 0x601a Human68k Z executable +#0 beshort 0x6000 Human68k object file +#0 belong 0xd1000000 Human68k ar binary archive +#0 belong 0xd1010000 Human68k ar ascii archive +#0 beshort 0x0068 Human68k lib archive +#4 string LZX Human68k LZX compressed +#>8 string >\0 (version %s) +#>4 string LZX R executable +#2 string #HUPAIR Human68k hupair R executable + +#------------------------------------------------------------------------------ +# ibm370: file(1) magic for IBM 370 and compatibles. +# +# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable". +# What the heck *is* "USS/370"? +# AIX 4.1's "/etc/magic" has +# +# 0 short 0535 370 sysV executable +# >12 long >0 not stripped +# >22 short >0 - version %d +# >30 long >0 - 5.2 format +# 0 short 0530 370 sysV pure executable +# >12 long >0 not stripped +# >22 short >0 - version %d +# >30 long >0 - 5.2 format +# +# instead of the "USS/370" versions of the same magic numbers. +# +0 beshort 0537 370 XA sysV executable +>12 belong >0 not stripped +>22 beshort >0 - version %d +>30 belong >0 - 5.2 format +0 beshort 0532 370 XA sysV pure executable +>12 belong >0 not stripped +>22 beshort >0 - version %d +>30 belong >0 - 5.2 format +0 beshort 054001 370 sysV pure executable +>12 belong >0 not stripped +0 beshort 055001 370 XA sysV pure executable +>12 belong >0 not stripped +0 beshort 056401 370 sysV executable +>12 belong >0 not stripped +0 beshort 057401 370 XA sysV executable +>12 belong >0 not stripped +0 beshort 0531 SVR2 executable (Amdahl-UTS) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0534 SVR2 pure executable (Amdahl-UTS) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0530 SVR2 pure executable (USS/370) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0535 SVR2 executable (USS/370) +>12 belong >0 not stripped +>24 belong >0 - version %ld + +#------------------------------------------------------------------------------ +# ibm6000: file(1) magic for RS/6000 and the RT PC. +# +0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module +>12 belong >0 not stripped +# Breaks sun4 statically linked execs. +#0 beshort 0x0103 executable (RT Version 2) or obj module +#>2 byte 0x50 pure +#>28 belong >0 not stripped +#>6 beshort >0 - version %ld +0 beshort 0x0104 shared library +0 beshort 0x0105 ctab data +0 beshort 0xfe04 structured file +0 string 0xabcdef AIX message catalog +0 belong 0x000001f9 AIX compiled message catalog +0 string \ archive +0 string \ archive (big format) + + +#------------------------------------------------------------------------------ +# iff: file(1) magic for Interchange File Format (see also "audio" & "images") +# +# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic +# Arts for file interchange. It has also been used by Apple, SGI, and +# especially Commodore-Amiga. +# +# IFF files begin with an 8 byte FORM header, followed by a 4 character +# FORM type, which is followed by the first chunk in the FORM. + +0 string FORM IFF data +#>4 belong x \b, FORM is %d bytes long +# audio formats +>8 string AIFF \b, AIFF audio +!:mime audio/x-aiff +>8 string AIFC \b, AIFF-C compressed audio +!:mime audio/x-aiff +>8 string 8SVX \b, 8SVX 8-bit sampled sound voice +!:mime audio/x-aiff +>8 string 16SV \b, 16SV 16-bit sampled sound voice +>8 string SAMP \b, SAMP sampled audio +>8 string MAUD \b, MAUD MacroSystem audio +>8 string SMUS \b, SMUS simple music +>8 string CMUS \b, CMUS complex music +# image formats +>8 string ILBMBMHD \b, ILBM interleaved image +>>20 beshort x \b, %d x +>>22 beshort x %d +>8 string RGBN \b, RGBN 12-bit RGB image +>8 string RGB8 \b, RGB8 24-bit RGB image +>8 string DEEP \b, DEEP TVPaint/XiPaint image +>8 string DR2D \b, DR2D 2-D object +>8 string TDDD \b, TDDD 3-D rendering +>8 string LWOB \b, LWOB 3-D object +>8 string LWO2 \b, LWO2 3-D object, v2 +>8 string LWLO \b, LWLO 3-D layered object +>8 string REAL \b, REAL Real3D rendering +>8 string MC4D \b, MC4D MaxonCinema4D rendering +>8 string ANIM \b, ANIM animation +>8 string YAFA \b, YAFA animation +>8 string SSA\ \b, SSA super smooth animation +>8 string ACBM \b, ACBM continuous image +>8 string FAXX \b, FAXX fax image +# other formats +>8 string FTXT \b, FTXT formatted text +>8 string CTLG \b, CTLG message catalog +>8 string PREF \b, PREF preferences +>8 string DTYP \b, DTYP datatype description +>8 string PTCH \b, PTCH binary patch +>8 string AMFF \b, AMFF AmigaMetaFile format +>8 string WZRD \b, WZRD StormWIZARD resource +>8 string DOC\ \b, DOC desktop publishing document + +# These go at the end of the iff rules +# +# I don't see why these might collide with anything else. +# +# Interactive Fiction related formats +# +>8 string IFRS \b, Blorb Interactive Fiction +>>24 string Exec with executable chunk +>8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal) +#------------------------------------------------------------------------------ +# images: file(1) magic for image formats (see also "iff", and "c-lang" for +# XPM bitmaps) +# +# originally from jef@helios.ee.lbl.gov (Jef Poskanzer), +# additions by janl@ifi.uio.no as well as others. Jan also suggested +# merging several one- and two-line files into here. +# +# little magic: PCX (first byte is 0x0a) + +# Targa - matches `povray', `ppmtotga' and `xv' outputs +# by Philippe De Muyter +# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11 +# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise +# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs +# `xv' recognizes only a subset of the following (RGB with pixelsize = 24) +# `tgatoppm' recognizes a superset (Index may be anything) +1 belong&0xfff7ffff 0x01010000 Targa image data - Map +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd +1 belong&0xfff7ffff 0x00020000 Targa image data - RGB +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd +1 belong&0xfff7ffff 0x00030000 Targa image data - Mono +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd + +# PBMPLUS images +# The next byte following the magic is always whitespace. +0 search/1 P1 Netpbm PBM image text +!:mime image/x-portable-bitmap +0 search/1 P2 Netpbm PGM image text +!:mime image/x-portable-greymap +0 search/1 P3 Netpbm PPM image text +!:mime image/x-portable-pixmap +0 string P4 Netpbm PBM "rawbits" image data +!:mime image/x-portable-bitmap +0 string P5 Netpbm PGM "rawbits" image data +!:mime image/x-portable-greymap +0 string P6 Netpbm PPM "rawbits" image data +!:mime image/x-portable-pixmap +0 string P7 Netpbm PAM image file +!:mime image/x-portable-pixmap + +# From: bryanh@giraffe-data.com (Bryan Henderson) +0 string \117\072 Solitaire Image Recorder format +>4 string \013 MGI Type 11 +>4 string \021 MGI Type 17 +0 string .MDA MicroDesign data +>21 byte 48 version 2 +>21 byte 51 version 3 +0 string .MDP MicroDesign page data +>21 byte 48 version 2 +>21 byte 51 version 3 + +# NIFF (Navy Interchange File Format, a modification of TIFF) images +# [GRR: this *must* go before TIFF] +0 string IIN1 NIFF image data +!:mime image/x-niff + +# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com) +# The second word of TIFF files is the TIFF version number, 42, which has +# never changed. The TIFF specification recommends testing for it. +0 string MM\x00\x2a TIFF image data, big-endian +!:mime image/tiff +0 string II\x2a\x00 TIFF image data, little-endian +!:mime image/tiff + +# PNG [Portable Network Graphics, or "PNG's Not GIF"] images +# (Greg Roelofs, newt@uchicago.edu) +# (Albert Cahalan, acahalan@cs.uml.edu) +# +# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ... +# +0 string \x89PNG\x0d\x0a\x1a\x0a PNG image +!:mime image/png +>16 belong x \b, %ld x +>20 belong x %ld, +>24 byte x %d-bit +>25 byte 0 grayscale, +>25 byte 2 \b/color RGB, +>25 byte 3 colormap, +>25 byte 4 gray+alpha, +>25 byte 6 \b/color RGBA, +#>26 byte 0 deflate/32K, +>28 byte 0 non-interlaced +>28 byte 1 interlaced + +# possible GIF replacements; none yet released! +# (Greg Roelofs, newt@uchicago.edu) +# +# GRR 950115: this was mine ("Zip GIF"): +0 string GIF94z ZIF image (GIF+deflate alpha) +!:mime image/x-unknown +# +# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better): +# +0 string FGF95a FGF image (GIF+deflate beta) +!:mime image/x-unknown +# +# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal +# (best; not yet implemented): +# +0 string PBF PBF image (deflate compression) +!:mime image/x-unknown + +# GIF +0 string GIF8 GIF image data +!:mime image/gif +!:apple 8BIMGIFf +>4 string 7a \b, version 8%s, +>4 string 9a \b, version 8%s, +>6 leshort >0 %hd x +>8 leshort >0 %hd +#>10 byte &0x80 color mapped, +#>10 byte&0x07 =0x00 2 colors +#>10 byte&0x07 =0x01 4 colors +#>10 byte&0x07 =0x02 8 colors +#>10 byte&0x07 =0x03 16 colors +#>10 byte&0x07 =0x04 32 colors +#>10 byte&0x07 =0x05 64 colors +#>10 byte&0x07 =0x06 128 colors +#>10 byte&0x07 =0x07 256 colors + +# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster, +# 1 plane, no encoding. +0 string \361\0\100\273 CMU window manager raster image data +>4 lelong >0 %d x +>8 lelong >0 %d, +>12 lelong >0 %d-bit + +# Magick Image File Format +0 string id=ImageMagick MIFF image data + +# Artisan +0 long 1123028772 Artisan image data +>4 long 1 \b, rectangular 24-bit +>4 long 2 \b, rectangular 8-bit with colormap +>4 long 3 \b, rectangular 32-bit (24-bit with matte) + +# FIG (Facility for Interactive Generation of figures), an object-based format +0 search/1 #FIG FIG image text +>5 string x \b, version %.3s + +# PHIGS +0 string ARF_BEGARF PHIGS clear text archive +0 string @(#)SunPHIGS SunPHIGS +# version number follows, in the form m.n +>40 string SunBin binary +>32 string archive archive + +# GKS (Graphics Kernel System) +0 string GKSM GKS Metafile +>24 string SunGKS \b, SunGKS + +# CGM image files +0 string BEGMF clear text Computer Graphics Metafile + +# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de) +0 string yz MGR bitmap, modern format, 8-bit aligned +0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned +0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned +0 string yx MGR bitmap, modern format, squeezed + +# Fuzzy Bitmap (FBM) images +0 string %bitmap\0 FBM image data +>30 long 0x31 \b, mono +>30 long 0x33 \b, color + +# facsimile data +1 string PC\ Research,\ Inc group 3 fax data +>29 byte 0 \b, normal resolution (204x98 DPI) +>29 byte 1 \b, fine resolution (204x196 DPI) +# From: Herbert Rosmanith +0 string Sfff structured fax file + + +# PC bitmaps (OS/2, Windows BMP files) (Greg Roelofs, newt@uchicago.edu) +0 string BM +>14 leshort 12 PC bitmap, OS/2 1.x format +!:mime image/x-ms-bmp +>>18 leshort x \b, %d x +>>20 leshort x %d +>14 leshort 64 PC bitmap, OS/2 2.x format +!:mime image/x-ms-bmp +>>18 leshort x \b, %d x +>>20 leshort x %d +>14 leshort 40 PC bitmap, Windows 3.x format +!:mime image/x-ms-bmp +>>18 lelong x \b, %d x +>>22 lelong x %d x +>>28 leshort x %d +>14 leshort 128 PC bitmap, Windows NT/2000 format +!:mime image/x-ms-bmp +>>18 lelong x \b, %d x +>>22 lelong x %d x +>>28 leshort x %d +# Too simple - MPi +#0 string IC PC icon data +#0 string PI PC pointer image data +#0 string CI PC color icon data +#0 string CP PC color pointer image data +# Conflicts with other entries [BABYL] +#0 string BA PC bitmap array data + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# note possible collision with C/REXX entry in c-lang; currently commented out +0 search/1 /*\ XPM\ */ X pixmap image text + +# Utah Raster Toolkit RLE images (janl@ifi.uio.no) +0 leshort 0xcc52 RLE image data, +>6 leshort x %d x +>8 leshort x %d +>2 leshort >0 \b, lower left corner: %d +>4 leshort >0 \b, lower right corner: %d +>10 byte&0x1 =0x1 \b, clear first +>10 byte&0x2 =0x2 \b, no background +>10 byte&0x4 =0x4 \b, alpha channel +>10 byte&0x8 =0x8 \b, comment +>11 byte >0 \b, %d color channels +>12 byte >0 \b, %d bits per pixel +>13 byte >0 \b, %d color map channels + +# image file format (Robert Potter, potter@cs.rochester.edu) +0 string Imagefile\ version- iff image data +# this adds the whole header (inc. version number), informative but longish +>10 string >\0 %s + +# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com) +0 belong 0x59a66a95 Sun raster image data +>4 belong >0 \b, %d x +>8 belong >0 %d, +>12 belong >0 %d-bit, +#>16 belong >0 %d bytes long, +>20 belong 0 old format, +#>20 belong 1 standard, +>20 belong 2 compressed, +>20 belong 3 RGB, +>20 belong 4 TIFF, +>20 belong 5 IFF, +>20 belong 0xffff reserved for testing, +>24 belong 0 no colormap +>24 belong 1 RGB colormap +>24 belong 2 raw colormap +#>28 belong >0 colormap is %d bytes long + +# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com) +# +# See +# http://reality.sgi.com/grafica/sgiimage.html +# +0 beshort 474 SGI image data +#>2 byte 0 \b, verbatim +>2 byte 1 \b, RLE +#>3 byte 1 \b, normal precision +>3 byte 2 \b, high precision +>4 beshort x \b, %d-D +>6 beshort x \b, %d x +>8 beshort x %d +>10 beshort x \b, %d channel +>10 beshort !1 \bs +>80 string >0 \b, "%s" + +0 string IT01 FIT image data +>4 belong x \b, %d x +>8 belong x %d x +>12 belong x %d +# +0 string IT02 FIT image data +>4 belong x \b, %d x +>8 belong x %d x +>12 belong x %d +# +2048 string PCD_IPI Kodak Photo CD image pack file +>0xe02 byte&0x03 0x00 , landscape mode +>0xe02 byte&0x03 0x01 , portrait mode +>0xe02 byte&0x03 0x02 , landscape mode +>0xe02 byte&0x03 0x03 , portrait mode +0 string PCD_OPA Kodak Photo CD overview pack file + +# FITS format. Jeff Uphoff +# FITS is the Flexible Image Transport System, the de facto standard for +# data and image transfer, storage, etc., for the astronomical community. +# (FITS floating point formats are big-endian.) +0 string SIMPLE\ \ = FITS image data +>109 string 8 \b, 8-bit, character or unsigned binary integer +>108 string 16 \b, 16-bit, two's complement binary integer +>107 string \ 32 \b, 32-bit, two's complement binary integer +>107 string -32 \b, 32-bit, floating point, single precision +>107 string -64 \b, 64-bit, floating point, double precision + +# other images +0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file + +# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image +# stuff. +# +0 beshort 0x1010 PEX Binary Archive + +# DICOM medical imaging data +128 string DICM DICOM medical imaging data +!:mime application/dicom + +# XWD - X Window Dump file. +# As described in /usr/X11R6/include/X11/XWDFile.h +# used by the xwd program. +# Bradford Castalia, idaeim, 1/01 +4 belong 7 XWD X Window Dump image data +>100 string >\0 \b, "%s" +>16 belong x \b, %dx +>20 belong x \b%dx +>12 belong x \b%d + +# PDS - Planetary Data System +# These files use Parameter Value Language in the header section. +# Unfortunately, there is no certain magic, but the following +# strings have been found to be most likely. +0 string NJPL1I00 PDS (JPL) image data +2 string NJPL1I PDS (JPL) image data +0 string CCSD3ZF PDS (CCSD) image data +2 string CCSD3Z PDS (CCSD) image data +0 string PDS_ PDS image data +0 string LBLSIZE= PDS (VICAR) image data + +# pM8x: ATARI STAD compressed bitmap format +# +# from Oskar Schirmer Feb 2, 2001 +# p M 8 5/6 xx yy zz data... +# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed. +# bytes either run horizontally (pM85) or vertically (pM86). yy is the +# most frequent byte, xx and zz are runlength escape codes, where xx is +# used for runs of yy. +# +0 string pM85 Atari ST STAD bitmap image data (hor) +>5 byte 0x00 (white background) +>5 byte 0xFF (black background) +0 string pM86 Atari ST STAD bitmap image data (vert) +>5 byte 0x00 (white background) +>5 byte 0xFF (black background) + +# Gürkan Sengün , www.linuks.mine.nu +# http://www.atarimax.com/jindroush.atari.org/afmtatr.html +0 leshort 0x0296 Atari ATR image + +# XXX: +# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other +# magic. +# SGI RICE image file +#0 beshort 0x5249 RICE image +#>2 beshort x v%d +#>4 beshort x (%d x +#>6 beshort x %d) +#>8 beshort 0 8 bit +#>8 beshort 1 10 bit +#>8 beshort 2 12 bit +#>8 beshort 3 13 bit +#>10 beshort 0 4:2:2 +#>10 beshort 1 4:2:2:4 +#>10 beshort 2 4:4:4 +#>10 beshort 3 4:4:4:4 +#>12 beshort 1 RGB +#>12 beshort 2 CCIR601 +#>12 beshort 3 RP175 +#>12 beshort 4 YUV + +#------------------------------------------------------------------------------ +# +# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format +# for the EPOC operating system, which is used with PDAs like those from Psion +# +# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description +# of various EPOC file formats + +0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file + +# PCX image files +# From: Dan Fandrich +0 beshort 0x0a00 PCX ver. 2.5 image data +0 beshort 0x0a02 PCX ver. 2.8 image data, with palette +0 beshort 0x0a03 PCX ver. 2.8 image data, without palette +0 beshort 0x0a04 PCX for Windows image data +0 beshort 0x0a05 PCX ver. 3.0 image data +>4 leshort x bounding box [%hd, +>6 leshort x %hd] - +>8 leshort x [%hd, +>10 leshort x %hd], +>65 byte >1 %d planes each of +>3 byte x %hhd-bit +>68 byte 0 image, +>68 byte 1 colour, +>68 byte 2 grayscale, +>68 byte >2 image, +>68 byte <0 image, +>12 leshort >0 %hd x +>>14 leshort x %hd dpi, +>2 byte 0 uncompressed +>2 byte 1 RLE compressed + +# Adobe Photoshop +0 string 8BPS Adobe Photoshop Image +!:mime image/vnd.adobe.photoshop + +# XV thumbnail indicator (ThMO) +0 string P7\ 332 XV thumbnail image data + +# NITF is defined by United States MIL-STD-2500A +0 string NITF National Imagery Transmission Format +>25 string >\0 dated %.14s + +# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff) +0 belong 0x00010008 GEM Image data +>12 beshort x %d x +>14 beshort x %d, +>4 beshort x %d planes, +>8 beshort x %d x +>10 beshort x %d pixelsize + +# GEM Metafile (Wolfram Kleff) +0 lelong 0x0018FFFF GEM Metafile data +>4 leshort x version %d + +# +# SMJPEG. A custom Motion JPEG format used by Loki Entertainment +# Software Torbjorn Andersson . +# +0 string \0\nSMJPEG SMJPEG +>8 belong x %d.x data +# According to the specification you could find any number of _TXT +# headers here, but I can't think of any way of handling that. None of +# the SMJPEG files I tried it on used this feature. Even if such a +# file is encountered the output should still be reasonable. +>16 string _SND \b, +>>24 beshort >0 %d Hz +>>26 byte 8 8-bit +>>26 byte 16 16-bit +>>28 string NONE uncompressed +# >>28 string APCM ADPCM compressed +>>27 byte 1 mono +>>28 byte 2 stereo +# Help! Isn't there any way to avoid writing this part twice? +>>32 string _VID \b, +# >>>48 string JFIF JPEG +>>>40 belong >0 %d frames +>>>44 beshort >0 (%d x +>>>46 beshort >0 %d) +>16 string _VID \b, +# >>32 string JFIF JPEG +>>24 belong >0 %d frames +>>28 beshort >0 (%d x +>>30 beshort >0 %d) + +0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File + +# "thumbnail file" (icon) +# descended from "xv", but in use by other applications as well (Wolfram Kleff) +0 string P7\ 332 XV "thumbnail file" (icon) data + +# taken from fkiss: ( ?) +0 string KiSS KISS/GS +>4 byte 16 color +>>5 byte x %d bit +>>8 leshort x %d colors +>>10 leshort x %d groups +>4 byte 32 cell +>>5 byte x %d bit +>>8 leshort x %d x +>>10 leshort x %d +>>12 leshort x +%d +>>14 leshort x +%d + +# Webshots (www.webshots.com), by John Harrison +0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file + +# Hercules DASD image files +# From Jan Jaeger +0 string CKD_P370 Hercules CKD DASD image file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +0 string CKD_C370 Hercules compressed CKD DASD image file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +0 string CKD_S370 Hercules CKD DASD shadow file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +# Squeak images and programs - etoffi@softhome.net +0 string \146\031\0\0 Squeak image data +0 search/1 'From\040Squeak Squeak program text + +# partimage: file(1) magic for PartImage files (experimental, incomplete) +# Author: Hans-Joachim Baader +0 string PaRtImAgE-VoLuMe PartImage +>0x0020 string 0.6.1 file version %s +>>0x0060 lelong >-1 volume %ld +#>>0x0064 8 byte identifier +#>>0x007c reserved +>>0x0200 string >\0 type %s +>>0x1400 string >\0 device %s, +>>0x1600 string >\0 original filename %s, +# Some fields omitted +>>0x2744 lelong 0 not compressed +>>0x2744 lelong 1 gzip compressed +>>0x2744 lelong 2 bzip2 compressed +>>0x2744 lelong >2 compressed with unknown algorithm +>0x0020 string >0.6.1 file version %s +>0x0020 string <0.6.1 file version %s + +# DCX is multi-page PCX, using a simple header of up to 1024 +# offsets for the respective PCX components. +# From: Joerg Wunsch +0 lelong 987654321 DCX multi-page PCX image data + +# Simon Walton +# Kodak Cineon format for scanned negatives +# http://www.kodak.com/US/en/motion/support/dlad/ +0 lelong 0xd75f2a80 Cineon image data +>200 belong >0 \b, %ld x +>204 belong >0 %ld + + +# Bio-Rad .PIC is an image format used by microscope control systems +# and related image processing software used by biologists. +# From: Vebjorn Ljosa +54 leshort 12345 Bio-Rad .PIC Image File +>0 leshort >0 %hd x +>2 leshort >0 %hd, +>4 leshort =1 1 image in file +>4 leshort >1 %hd images in file + +# From Jan "Yenya" Kasprzak +# The description of *.mrw format can be found at +# http://www.dalibor.cz/minolta/raw_file_format.htm +0 string \000MRM Minolta Dimage camera raw image data + +# Summary: DjVu image / document +# Extension: .djvu +# Reference: http://djvu.org/docs/DjVu3Spec.djvu +# Submitted by: Stephane Loeuillet +# Modified by (1): Abel Cheung +0 string AT&TFORM +!:mime image/vnd.djvu +>12 string DJVM DjVu multiple page document +>12 string DJVU DjVu image or single page document +>12 string DJVI DjVu shared document +>12 string THUM DjVu page thumbnails + + +# From Marc Espie +0 lelong 20000630 OpenEXR image data + +# From: Tom Hilinski +# http://www.unidata.ucar.edu/packages/netcdf/ +0 string CDF\001 NetCDF Data Format data + +#----------------------------------------------------------------------- +# Hierarchical Data Format, used to facilitate scientific data exchange +# specifications at http://hdf.ncsa.uiuc.edu/ +0 belong 0x0e031301 Hierarchical Data Format (version 4) data +!:mime application/x-hdf +0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data +!:mime application/x-hdf + +# From: Tobias Burnus +# Xara (for a while: Corel Xara) is a graphic package, see +# http://www.xara.com/ for Windows and as GPL application for Linux +0 string XARA\243\243 Xara graphics file + +# http://www.cartesianinc.com/Tech/ +0 string CPC\262 Cartesian Perceptual Compression image +!:mime image/x-cpi + +# From Albert Cahalan +# puredigital used it for the CVS disposable camcorder +#8 lelong 4 ZBM bitmap image data +#>4 leshort x %u x +#>6 leshort x %u + +# From Albert Cahalan +# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons +0 string C565 OLPC firmware icon image data +>4 leshort x %u x +>6 leshort x %u + +# Applied Images - Image files from Cytovision +# Gustavo Junior Alves +0 string \xce\xda\xde\xfa Cytovision Metaphases file +0 string \xed\xad\xef\xac Cytovision Karyotype file +0 string \x0b\x00\x03\x00 Cytovision FISH Probe file +0 string \xed\xfe\xda\xbe Cytovision FLEX file +0 string \xed\xab\xed\xfe Cytovision FLEX file +0 string \xad\xfd\xea\xad Cytovision RATS file + +# Wavelet Scalar Quantization format used in gray-scale fingerprint images +# From Tano M Fotang +0 string \xff\xa0\xff\xa8\x00 Wavelet Scalar Quantization image data + +# JPEG 2000 Code Stream Bitmap +# From Petr Splichal +0 string \xFF\x4F\xFF\x51\x00 JPEG-2000 Code Stream Bitmap data + +#------------------------------------------------------------------------------ +# inform: file(1) magic for Inform interactive fiction language + +# URL: http://www.inform-fiction.org/ +# From: Reuben Thomas + +0 search/cB/100 constant\ story Inform source text + +#------------------------------------------------------------------------------ +# intel: file(1) magic for x86 Unix +# +# Various flavors of x86 UNIX executable/object (other than Xenix, which +# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do +# Windows as well. +# +# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and +# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere +# as well, if, as, and when IBM makes it portable. +# +# The `versions' should be un-commented if they work for you. +# (Was the problem just one of endianness?) +# +0 leshort 0502 basic-16 executable +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort 0503 basic-16 executable (TV) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort 0510 x86 executable +>12 lelong >0 not stripped +0 leshort 0511 x86 executable (TV) +>12 lelong >0 not stripped +0 leshort =0512 iAPX 286 executable small model (COFF) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort =0522 iAPX 286 executable large model (COFF) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan +0 leshort =0514 80386 COFF executable +>12 lelong >0 not stripped +>22 leshort >0 - version %ld + +# rom: file(1) magic for BIOS ROM Extensions found in intel machines +# mapped into memory between 0xC0000 and 0xFFFFF +# From Gürkan Sengün , www.linuks.mine.nu +0 beshort 0x55AA BIOS (ia32) ROM Ext. +>5 string USB USB +>7 string LDR UNDI image +>30 string IBM IBM comp. Video +>26 string Adaptec Adaptec +>28 string Adaptec Adaptec +>42 string PROMISE Promise +>2 byte x (%d*512) + +#------------------------------------------------------------------------------ +# interleaf: file(1) magic for InterLeaf TPS: +# +0 string =\210OPS Interleaf saved data +0 string =5 string ,\ Version\ = \b, version +>>17 string >\0 %.3s + +#------------------------------------------------------------------------------ +# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1 +# "/etc/magic": +# From: guy@netapp.com (Guy Harris) +# +4 string pgscriptver IslandWrite document +13 string DrawFile IslandDraw document + + +#------------------------------------------------------------------------------ +# ispell: file(1) magic for ispell +# +# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic +# will match 0x9600 through 0x9603 in *both* little endian and big endian. +# (No other current magic entries collide.) +# +# Updated by Daniel Quinlan (quinlan@yggdrasil.com) +# +0 leshort&0xFFFC 0x9600 little endian ispell +>0 byte 0 hash file (?), +>0 byte 1 3.0 hash file, +>0 byte 2 3.1 hash file, +>0 byte 3 hash file (?), +>2 leshort 0x00 8-bit, no capitalization, 26 flags +>2 leshort 0x01 7-bit, no capitalization, 26 flags +>2 leshort 0x02 8-bit, capitalization, 26 flags +>2 leshort 0x03 7-bit, capitalization, 26 flags +>2 leshort 0x04 8-bit, no capitalization, 52 flags +>2 leshort 0x05 7-bit, no capitalization, 52 flags +>2 leshort 0x06 8-bit, capitalization, 52 flags +>2 leshort 0x07 7-bit, capitalization, 52 flags +>2 leshort 0x08 8-bit, no capitalization, 128 flags +>2 leshort 0x09 7-bit, no capitalization, 128 flags +>2 leshort 0x0A 8-bit, capitalization, 128 flags +>2 leshort 0x0B 7-bit, capitalization, 128 flags +>2 leshort 0x0C 8-bit, no capitalization, 256 flags +>2 leshort 0x0D 7-bit, no capitalization, 256 flags +>2 leshort 0x0E 8-bit, capitalization, 256 flags +>2 leshort 0x0F 7-bit, capitalization, 256 flags +>4 leshort >0 and %d string characters +0 beshort&0xFFFC 0x9600 big endian ispell +>1 byte 0 hash file (?), +>1 byte 1 3.0 hash file, +>1 byte 2 3.1 hash file, +>1 byte 3 hash file (?), +>2 beshort 0x00 8-bit, no capitalization, 26 flags +>2 beshort 0x01 7-bit, no capitalization, 26 flags +>2 beshort 0x02 8-bit, capitalization, 26 flags +>2 beshort 0x03 7-bit, capitalization, 26 flags +>2 beshort 0x04 8-bit, no capitalization, 52 flags +>2 beshort 0x05 7-bit, no capitalization, 52 flags +>2 beshort 0x06 8-bit, capitalization, 52 flags +>2 beshort 0x07 7-bit, capitalization, 52 flags +>2 beshort 0x08 8-bit, no capitalization, 128 flags +>2 beshort 0x09 7-bit, no capitalization, 128 flags +>2 beshort 0x0A 8-bit, capitalization, 128 flags +>2 beshort 0x0B 7-bit, capitalization, 128 flags +>2 beshort 0x0C 8-bit, no capitalization, 256 flags +>2 beshort 0x0D 7-bit, no capitalization, 256 flags +>2 beshort 0x0E 8-bit, capitalization, 256 flags +>2 beshort 0x0F 7-bit, capitalization, 256 flags +>4 beshort >0 and %d string characters +# ispell 4.0 hash files kromJx +# Ispell 4.0 +0 string ISPL ispell +>4 long x hash file version %d, +>8 long x lexletters %d, +>12 long x lexsize %d, +>16 long x hashsize %d, +>20 long x stblsize %d +#------------------------------------------------------------ +# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the +# same magic number, 0xcafebabe, so they are both handled +# in the entry called "cafebabe". +#------------------------------------------------------------ +# Java serialization +# From Martin Pool (m.pool@pharos.com.au) +0 beshort 0xaced Java serialization data +>2 beshort >0x0004 \b, version %d + +0 belong 0xfeedfeed Java KeyStore +!:mime application/x-java-keystore +0 belong 0xcececece Java JCE KeyStore +!:mime application/x-java-jce-keystore + +# Dalvik .dex format. http://retrodev.com/android/dexformat.html +# From "Mike Fleming" +0 string dex\n +>0 regex dex\n[0-9][0-9][0-9]\0 Dalvik dex file +>4 string >000 version %s +0 string dey\n +>0 regex dey\n[0-9][0-9][0-9]\0 Dalvik dex file (optimized for host) +>4 string >000 version %s + + +#------------------------------------------------------------------------------ +# JPEG images +# SunOS 5.5.1 had +# +# 0 string \377\330\377\340 JPEG file +# 0 string \377\330\377\356 JPG file +# +# both of which turn into "JPEG image data" here. +# +0 beshort 0xffd8 JPEG image data +!:mime image/jpeg +!:apple 8BIMJPEG +!:strength +1 +>6 string JFIF \b, JFIF standard +# The following added by Erik Rossen 1999-09-06 +# in a vain attempt to add image size reporting for JFIF. Note that these +# tests are not fool-proof since some perfectly valid JPEGs are currently +# impossible to specify in magic(4) format. +# First, a little JFIF version info: +>>11 byte x \b %d. +>>12 byte x \b%02d +# Next, the resolution or aspect ratio of the image: +#>>13 byte 0 \b, aspect ratio +#>>13 byte 1 \b, resolution (DPI) +#>>13 byte 2 \b, resolution (DPCM) +#>>4 beshort x \b, segment length %d +# Next, show thumbnail info, if it exists: +>>18 byte !0 \b, thumbnail %dx +>>>19 byte x \b%d + +# EXIF moved down here to avoid reporting a bogus version number, +# and EXIF version number printing added. +# - Patrik R=E5dman +>6 string Exif \b, EXIF standard +# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD. +# All possible combinations of entries have to be enumerated, since no looping +# is possible. And both endians are possible... +# The combinations included below are from real-world JPEGs. +# Little-endian +>>12 string II +# IFD 0 Entry #5: +>>>70 leshort 0x8769 +# EXIF IFD Entry #1: +>>>>(78.l+14) leshort 0x9000 +>>>>>(78.l+23) byte x %c +>>>>>(78.l+24) byte x \b.%c +>>>>>(78.l+25) byte !0x30 \b%c +# IFD 0 Entry #9: +>>>118 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(126.l+38) leshort 0x9000 +>>>>>(126.l+47) byte x %c +>>>>>(126.l+48) byte x \b.%c +>>>>>(126.l+49) byte !0x30 \b%c +# IFD 0 Entry #10 +>>>130 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(138.l+38) leshort 0x9000 +>>>>>(138.l+47) byte x %c +>>>>>(138.l+48) byte x \b.%c +>>>>>(138.l+49) byte !0x30 \b%c +# EXIF IFD Entry #4: +>>>>(138.l+50) leshort 0x9000 +>>>>>(138.l+59) byte x %c +>>>>>(138.l+60) byte x \b.%c +>>>>>(138.l+61) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(138.l+62) leshort 0x9000 +>>>>>(138.l+71) byte x %c +>>>>>(138.l+72) byte x \b.%c +>>>>>(138.l+73) byte !0x30 \b%c +# IFD 0 Entry #11 +>>>142 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(150.l+38) leshort 0x9000 +>>>>>(150.l+47) byte x %c +>>>>>(150.l+48) byte x \b.%c +>>>>>(150.l+49) byte !0x30 \b%c +# EXIF IFD Entry #4: +>>>>(150.l+50) leshort 0x9000 +>>>>>(150.l+59) byte x %c +>>>>>(150.l+60) byte x \b.%c +>>>>>(150.l+61) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(150.l+62) leshort 0x9000 +>>>>>(150.l+71) byte x %c +>>>>>(150.l+72) byte x \b.%c +>>>>>(150.l+73) byte !0x30 \b%c +# Big-endian +>>12 string MM +# IFD 0 Entry #9: +>>>118 beshort 0x8769 +# EXIF IFD Entry #1: +>>>>(126.L+14) beshort 0x9000 +>>>>>(126.L+23) byte x %c +>>>>>(126.L+24) byte x \b.%c +>>>>>(126.L+25) byte !0x30 \b%c +# EXIF IFD Entry #3: +>>>>(126.L+38) beshort 0x9000 +>>>>>(126.L+47) byte x %c +>>>>>(126.L+48) byte x \b.%c +>>>>>(126.L+49) byte !0x30 \b%c +# IFD 0 Entry #10 +>>>130 beshort 0x8769 +# EXIF IFD Entry #3: +>>>>(138.L+38) beshort 0x9000 +>>>>>(138.L+47) byte x %c +>>>>>(138.L+48) byte x \b.%c +>>>>>(138.L+49) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(138.L+62) beshort 0x9000 +>>>>>(138.L+71) byte x %c +>>>>>(138.L+72) byte x \b.%c +>>>>>(138.L+73) byte !0x30 \b%c +# IFD 0 Entry #11 +>>>142 beshort 0x8769 +# EXIF IFD Entry #4: +>>>>(150.L+50) beshort 0x9000 +>>>>>(150.L+59) byte x %c +>>>>>(150.L+60) byte x \b.%c +>>>>>(150.L+61) byte !0x30 \b%c +# Here things get sticky. We can do ONE MORE marker segment with +# indirect addressing, and that's all. It would be great if we could +# do pointer arithemetic like in an assembler language. Christos? +# And if there was some sort of looping construct to do searches, plus a few +# named accumulators, it would be even more effective... +# At least we can show a comment if no other segments got inserted before: +>(4.S+5) byte 0xFE +>>(4.S+8) string >\0 \b, comment: "%s" +# FIXME: When we can do non-byte counted strings, we can use that to get +# the string's count, and fix Debian bug #283760 +#>(4.S+5) byte 0xFE \b, comment +#>>(4.S+6) beshort x \b length=%d +#>>(4.S+8) string >\0 \b, "%s" +# Or, we can show the encoding type (I've included only the three most common) +# and image dimensions if we are lucky and the SOFn (image segment) is here: +>(4.S+5) byte 0xC0 \b, baseline +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +>(4.S+5) byte 0xC1 \b, extended sequential +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +>(4.S+5) byte 0xC2 \b, progressive +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +# I've commented-out quantisation table reporting. I doubt anyone cares yet. +#>(4.S+5) byte 0xDB \b, quantisation table +#>>(4.S+6) beshort x \b length=%d +#>14 beshort x \b, %d x +#>16 beshort x \b %d + +# HSI is Handmade Software's proprietary JPEG encoding scheme +0 string hsi1 JPEG image data, HSI proprietary + +# From: David Santinoli +0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data + +# Type: JPEG 2000 codesream +# From: Mathieu Malaterre +0 belong 0xff4fff51 JPEG 2000 codestream +45 beshort 0xff52 + +#------------------------------------------------------------------------------ +# karma: file(1) magic for Karma data files +# +# From + +0 string KarmaRHD Version Karma Data Structure Version +>16 belong x %lu + +#------------------------------------------------------------------------------ +# kde: file(1) magic for KDE + +0 string [KDE\ Desktop\ Entry] KDE desktop entry +!:mime application/x-kdelnk +0 string #\ KDE\ Config\ File KDE config file +!:mime application/x-kdelnk +0 string #\ xmcd xmcd database file for kscd +!:mime text/x-xmcd +#------------------------------------------------------------------------------ +# Type: Google KML, formerly Keyhole Markup Language +# Future development of this format has been handed +# over to the Open Geospatial Consortium. +# http://www.opengeospatial.org/standards/kml/ +# From: Asbjoern Sloth Toennesen +0 string \20 search/400 \ xmlns= +>>&0 regex ['"]http://earth.google.com/kml Google KML document +!:mime application/vnd.google-earth.kml+xml +>>>&1 string 2.0' \b, version 2.0 +>>>&1 string 2.1' \b, version 2.1 +>>>&1 string 2.2' \b, version 2.2 + +#------------------------------------------------------------------------------ +# Type: OpenGIS KML, formerly Keyhole Markup Language +# This standard is maintained by the +# Open Geospatial Consortium. +# http://www.opengeospatial.org/standards/kml/ +# From: Asbjoern Sloth Toennesen +>>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document +!:mime application/vnd.google-earth.kml+xml +>>>&1 string 2.2 \b, version 2.2 + +#------------------------------------------------------------------------------ +# Type: Google KML Archive (ZIP based) +# http://code.google.com/apis/kml/documentation/kml_tut.html +# From: Asbjoern Sloth Toennesen +0 string PK\003\004 +>4 byte 0x14 +>>30 string doc.kml Compressed Google KML Document, including resources. +!:mime application/vnd.google-earth.kmz +#------------------------------------------------------------------------------ +# DEC SRC Virtual Paper: Lectern files +# Karl M. Hegbloom +0 string lect DEC SRC Virtual Paper Lectern file +#------------------------------------------------------------------------------ +# lex: file(1) magic for lex +# +# derived empirically, your offsets may vary! +0 search/100 yyprevious C program text (from lex) +>3 search/1 >\0 for %s +# C program text from GNU flex, from Daniel Quinlan +0 search/100 generated\ by\ flex C program text (from flex) +# lex description file, from Daniel Quinlan +0 search/1 %{ lex description text + +#------------------------------------------------------------------------------ +# lif: file(1) magic for lif +# +# (Daniel Quinlan ) +# +0 beshort 0x8000 lif file +#------------------------------------------------------------------------------ +# linux: file(1) magic for Linux files +# +# Values for Linux/i386 binaries, from Daniel Quinlan +# The following basic Linux magic is useful for reference, but using +# "long" magic is a better practice in order to avoid collisions. +# +# 2 leshort 100 Linux/i386 +# >0 leshort 0407 impure executable (OMAGIC) +# >0 leshort 0410 pure executable (NMAGIC) +# >0 leshort 0413 demand-paged executable (ZMAGIC) +# >0 leshort 0314 demand-paged executable (QMAGIC) +# +0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC) +>16 lelong 0 \b, stripped +# +0 string \007\001\000 Linux/i386 object file +>20 lelong >0x1020 \b, DLL library +# Linux-8086 stuff: +0 string \01\03\020\04 Linux-8086 impure executable +>28 long !0 not stripped +0 string \01\03\040\04 Linux-8086 executable +>28 long !0 not stripped +# +0 string \243\206\001\0 Linux-8086 object file +# +0 string \01\03\020\20 Minix-386 impure executable +>28 long !0 not stripped +0 string \01\03\040\20 Minix-386 executable +>28 long !0 not stripped +# core dump file, from Bill Reynolds +216 lelong 0421 Linux/i386 core file +>220 string >\0 of '%s' +>200 lelong >0 (signal %d) +# +# LILO boot/chain loaders, from Daniel Quinlan +# this can be overridden by the DOS executable (COM) entry +2 string LILO Linux/i386 LILO boot/chain loader +# +# PSF fonts, from H. Peter Anvin +0 leshort 0x0436 Linux/i386 PC Screen Font data, +>2 byte 0 256 characters, no directory, +>2 byte 1 512 characters, no directory, +>2 byte 2 256 characters, Unicode directory, +>2 byte 3 512 characters, Unicode directory, +>3 byte >0 8x%d +# Linux swap file, from Daniel Quinlan +4086 string SWAP-SPACE Linux/i386 swap file +# From: Jeff Bailey +# Linux swap file with swsusp1 image, from Jeff Bailey +4076 string SWAPSPACE2S1SUSPEND Linux/i386 swap file (new style) with SWSUSP1 image +# according to man page of mkswap (8) March 1999 +4086 string SWAPSPACE2 Linux/i386 swap file (new style) +>0x400 long x %d (4K pages) +>0x404 long x size %d pages +>>4086 string SWAPSPACE2 +>>>1052 string >\0 Label %s +# ECOFF magic for OSF/1 and Linux (only tested under Linux though) +# +# from Erik Troan (ewt@redhat.com) examining od dumps, so this +# could be wrong +# updated by David Mosberger (davidm@azstarnet.com) based on +# GNU BFD and MIPS info found below. +# +0 leshort 0x0183 ECOFF alpha +>24 leshort 0407 executable +>24 leshort 0410 pure +>24 leshort 0413 demand paged +>8 long >0 not stripped +>8 long 0 stripped +>23 leshort >0 - version %ld. +# +# Linux kernel boot images, from Albert Cahalan +# and others such as Axel Kohlmeyer +# and Nicols Lichtmaier +# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29 +# Linux kernel boot images (i386 arch) (Wolfram Kleff) +514 string HdrS Linux kernel +>510 leshort 0xAA55 x86 boot executable +>>518 leshort >0x1ff +>>>529 byte 0 zImage, +>>>529 byte 1 bzImage, +>>>(526.s+0x200) string >\0 version %s, +>>498 leshort 1 RO-rootFS, +>>498 leshort 0 RW-rootFS, +>>508 leshort >0 root_dev 0x%X, +>>502 leshort >0 swap_dev 0x%X, +>>504 leshort >0 RAMdisksize %u KB, +>>506 leshort 0xFFFF Normal VGA +>>506 leshort 0xFFFE Extended VGA +>>506 leshort 0xFFFD Prompt for Videomode +>>506 leshort >0 Video mode %d +# This also matches new kernels, which were caught above by "HdrS". +0 belong 0xb8c0078e Linux kernel +>0x1e3 string Loading version 1.3.79 or older +>0x1e9 string Loading from prehistoric times + +# System.map files - Nicols Lichtmaier +8 search/1 \ A\ _text Linux kernel symbol map text + +# LSM entries - Nicols Lichtmaier +0 search/1 Begin3 Linux Software Map entry text +0 search/1 Begin4 Linux Software Map entry text (new format) + +# From Matt Zimmerman, enhanced for v3 by Matthew Palmer +0 belong 0x4f4f4f4d User-mode Linux COW file +>4 belong <3 \b, version %d +>>8 string >\0 \b, backing file %s +>4 belong >2 \b, version %d +>>32 string >\0 \b, backing file %s + +############################################################################ +# Linux kernel versions + +0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux +>497 leshort 0 x86 boot sector +>>514 belong 0x8e of a kernel from the dawn of time! +>>514 belong 0x908ed8b4 version 0.99-1.1.42 +>>514 belong 0x908ed8b8 for memtest86 + +>497 leshort !0 x86 kernel +>>504 leshort >0 RAMdisksize=%u KB +>>502 leshort >0 swap=0x%X +>>508 leshort >0 root=0x%X +>>>498 leshort 1 \b-ro +>>>498 leshort 0 \b-rw +>>506 leshort 0xFFFF vga=normal +>>506 leshort 0xFFFE vga=extended +>>506 leshort 0xFFFD vga=ask +>>506 leshort >0 vga=%d +>>514 belong 0x908ed881 version 1.1.43-1.1.45 +>>514 belong 0x15b281cd +>>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0 +>>>0xa99 belong 0x55AA5a5a version 1.3.1,2 +>>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30 +>>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41 +>>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45 +>>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72 +>>514 string HdrS +>>>518 leshort >0x1FF +>>>>529 byte 0 \b, zImage +>>>>529 byte 1 \b, bzImage +>>>>(526.s+0x200) string >\0 \b, version %s + +# Linux boot sector thefts. +0 belong 0xb8c0078e Linux +>0x1e6 belong 0x454c4b53 ELKS Kernel +>0x1e6 belong !0x454c4b53 style boot sector + +############################################################################ +# Linux 8086 executable +0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless +>5 string . +>>4 string >\0 \b, libc version %s + +0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable +>2 byte&0x01 !0 \b, unmapped zero page +>2 byte&0x20 0 \b, impure +>2 byte&0x20 !0 +>>2 byte&0x10 !0 \b, A_EXEC +>2 byte&0x02 !0 \b, A_PAL +>2 byte&0x04 !0 \b, A_NSYM +>2 byte&0x08 !0 \b, A_STAND +>2 byte&0x40 !0 \b, A_PURE +>2 byte&0x80 !0 \b, A_TOVLY +>28 long !0 \b, not stripped +>37 string . +>>36 string >\0 \b, libc version %s + +# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable +# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable +# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable +# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable + +# SYSLINUX boot logo files (from 'ppmtolss16' sources) +# http://syslinux.zytor.com/ +# +0 lelong =0x1413f33d SYSLINUX' LSS16 image data +>4 leshort x \b, width %d +>6 leshort x \b, height %d + +0 string OOOM User-Mode-Linux's Copy-On-Write disk image +>4 belong x version %d + +# SE Linux policy database +# From: Mike Frysinger +0 lelong 0xf97cff8c SE Linux policy +>16 lelong x v%d +>20 lelong 1 MLS +>24 lelong x %d symbols +>28 lelong x %d ocons + +# Linux Logical Volume Manager (LVM) +# Emmanuel VARAGNAT +# +# System ID, UUID and volume group name are 128 bytes long +# but they should never be full and initialized with zeros... +# +# LVM1 +# +0x0 string HM\001 LVM1 (Linux Logical Volume Manager), version 1 +>0x12c string >\0 , System ID: %s + +0x0 string HM\002 LVM1 (Linux Logical Volume Manager), version 2 +>0x12c string >\0 , System ID: %s + +# LVM2 +# +# It seems that the label header can be in one the four first sector +# of the disk... (from _find_labeller in lib/label/label.c of LVM2) +# +# 0x200 seems to be the common case + +0x218 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +# read the offset to add to the start of the header, and the header +# start in 0x200 +>(0x214.l+0x200) string >\0 , UUID: %s + +0x018 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +>(0x014.l) string >\0 , UUID: %s + +0x418 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +>(0x414.l+0x400) string >\0 , UUID: %s + +0x618 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +>(0x614.l+0x600) string >\0 , UUID: %s + +# LVM snapshot +# from Jason Farrel +0 string SnAp LVM Snapshot (CopyOnWrite store) +>4 lelong !0 - valid, +>4 lelong 0 - invalid, +>8 lelong x version %d, +>12 lelong x chunk_size %d + +# SE Linux policy database +0 lelong 0xf97cff8c SE Linux policy +>16 lelong x v%d +>20 lelong 1 MLS +>24 lelong x %d symbols +>28 lelong x %d ocons + +# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec +# Anthon van der Neut (anthon@mnt.org) +0 string LUKS\xba\xbe LUKS encrypted file, +>6 beshort x ver %d +>8 string x [%s, +>40 string x %s, +>72 string x %s] +>168 string x UUID: %s + + +# Summary: Xen saved domain file +# Created by: Radek Vokal +0 string LinuxGuestRecord Xen saved domain +>20 search/256 (name +>>&1 string x (name %s) + +#------------------------------------------------------------------------------ +# lisp: file(1) magic for lisp programs +# +# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) + +# updated by Joerg Jenderek +# GRR: This lot is too weak +#0 string ;; +# windows INF files often begin with semicolon and use CRLF as line end +# lisp files are mainly created on unix system with LF as line end +#>2 search/4096 !\r Lisp/Scheme program text +#>2 search/4096 \r Windows INF file + +0 search/4096 (if\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (setq\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (defvar\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (defparam\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (defun\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (autoload\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (custom-set-variables\ Lisp/Scheme program text +!:mime text/x-lisp + +# Emacs 18 - this is always correct, but not very magical. +0 string \012( Emacs v18 byte-compiled Lisp data +!:mime application/x-elc +# Emacs 19+ - ver. recognition added by Ian Springer +# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs +# - Chris Chittleborough +0 string ;ELC +>4 byte >18 +>4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data +!:mime application/x-elc + +# Files produced by CLISP Common Lisp From: Bruno Haible +0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27) +0 string (|SYSTEM|::|VERSION|\040' CLISP byte-compiled Lisp program text + +0 long 0x70768BD2 CLISP memory image data +0 long 0xD28B7670 CLISP memory image data, other endian + +#.com and .bin for MIT scheme +0 string \372\372\372\372 MIT scheme (library?) + +# From: David Allouche +0 search/1 \ + +0 string llvm LLVM byte-codes, uncompressed +0 string llvc0 LLVM byte-codes, null compression +0 string llvc1 LLVM byte-codes, gzip compression +0 string llvc2 LLVM byte-codes, bzip2 compression +#------------------------------------------------------------------------------ +# lua: file(1) magic for Lua scripting language +# URL: http://www.lua.org/ +# From: Reuben Thomas , Seo Sanghyeon + +# Lua scripts +0 search/1/b #!\ /usr/bin/lua Lua script text executable +!:mime text/x-lua +0 search/1/b #!\ /usr/local/bin/lua Lua script text executable +!:mime text/x-lua +0 search/1 #!/usr/bin/env\ lua Lua script text executable +!:mime text/x-lua +0 search/1 #!\ /usr/bin/env\ lua Lua script text executable +!:mime text/x-lua + +# Lua bytecode +0 string \033Lua Lua bytecode, +>4 byte 0x50 version 5.0 +>4 byte 0x51 version 5.1 + +#------------------------------------------------------------------------------ +# luks: file(1) magic for Linux Unified Key Setup +# URL: http://luks.endorphin.org/spec +# From: Anthon van der Neut + +0 string LUKS\xba\xbe LUKS encrypted file, +>6 beshort x ver %d +>8 string x [%s, +>40 string x %s, +>72 string x %s] +>168 string x UUID: %s +#------------------------------------------------------------ +# Mach has two magic numbers, 0xcafebabe and 0xfeedface. +# Unfortunately the first, cafebabe, is shared with +# Java ByteCode, so they are both handled in the file "cafebabe". +# The "feedface" ones are handled herein. +#------------------------------------------------------------ +0 lelong&0xfffffffe 0xfeedface Mach-O +>0 byte 0xcf 64-bit +>12 lelong 1 object +>12 lelong 2 executable +>12 lelong 3 fixed virtual memory shared library +>12 lelong 4 core +>12 lelong 5 preload executable +>12 lelong 6 dynamically linked shared library +>12 lelong 7 dynamic linker +>12 lelong 8 bundle +>12 lelong 9 dynamically linked shared library stub +>12 lelong >9 +>>12 lelong x filetype=%ld +>4 lelong <0 +>>4 lelong x architecture=%ld +>4 lelong 1 vax +>4 lelong 2 romp +>4 lelong 3 architecture=3 +>4 lelong 4 ns32032 +>4 lelong 5 ns32332 +>4 lelong 6 m68k +>4 lelong 7 i386 +>4 lelong 8 mips +>4 lelong 9 ns32532 +>4 lelong 10 architecture=10 +>4 lelong 11 hppa +>4 lelong 12 acorn +>4 lelong 13 m88k +>4 lelong 14 sparc +>4 lelong 15 i860-big +>4 lelong 16 i860 +>4 lelong 17 rs6000 +>4 lelong 18 ppc +>4 lelong 16777234 ppc64 +>4 lelong >16777234 +>>4 lelong x architecture=%ld +# +0 belong&0xfffffffe 0xfeedface Mach-O +>3 byte 0xcf 64-bit +>12 belong 1 object +>12 belong 2 executable +>12 belong 3 fixed virtual memory shared library +>12 belong 4 core +>12 belong 5 preload executable +>12 belong 6 dynamically linked shared library +>12 belong 7 dynamic linker +>12 belong 8 bundle +>12 belong 9 dynamically linked shared library stub +>12 belong >9 +>>12 belong x filetype=%ld +>4 belong <0 +>>4 belong x architecture=%ld +>4 belong 1 vax +>4 belong 2 romp +>4 belong 3 architecture=3 +>4 belong 4 ns32032 +>4 belong 5 ns32332 +>4 belong 6 for m68k architecture +# from NeXTstep 3.0 +# i.e. mc680x0_all, ignore +# >>8 belong 1 (mc68030) +>>8 belong 2 (mc68040) +>>8 belong 3 (mc68030 only) +>4 belong 7 i386 +>4 belong 8 mips +>4 belong 9 ns32532 +>4 belong 10 architecture=10 +>4 belong 11 hppa +>4 belong 12 acorn +>4 belong 13 m88k +>4 belong 14 sparc +>4 belong 15 i860-big +>4 belong 16 i860 +>4 belong 17 rs6000 +>4 belong 18 ppc +>4 belong 16777234 ppc64 +>4 belong >16777234 +>>4 belong x architecture=%ld + +#------------------------------------------------------------------------------ +# macintosh description +# +# BinHex is the Macintosh ASCII-encoded file format (see also "apple") +# Daniel Quinlan, quinlan@yggdrasil.com +11 string must\ be\ converted\ with\ BinHex BinHex binary text +!:mime application/mac-binhex40 +>41 string x \b, version %.3s + +# Stuffit archives are the de facto standard of compression for Macintosh +# files obtained from most archives. (franklsm@tuns.ca) +0 string SIT! StuffIt Archive (data) +!:mime application/x-stuffit +!:apple SIT!SIT! +>2 string x : %s +0 string SITD StuffIt Deluxe (data) +>2 string x : %s +0 string Seg StuffIt Deluxe Segment (data) +>2 string x : %s + +# Newer StuffIt archives (grant@netbsd.org) +0 string StuffIt StuffIt Archive +!:mime application/x-stuffit +!:apple SIT!SIT! +#>162 string >0 : %s + +# Macintosh Applications and Installation binaries (franklsm@tuns.ca) +# GRR: Too weak +#0 string APPL Macintosh Application (data) +#>2 string x \b: %s + +# Macintosh System files (franklsm@tuns.ca) +# GRR: Too weak +#0 string zsys Macintosh System File (data) +#0 string FNDR Macintosh Finder (data) +#0 string libr Macintosh Library (data) +#>2 string x : %s +#0 string shlb Macintosh Shared Library (data) +#>2 string x : %s +#0 string cdev Macintosh Control Panel (data) +#>2 string x : %s +#0 string INIT Macintosh Extension (data) +#>2 string x : %s +#0 string FFIL Macintosh Truetype Font (data) +#>2 string x : %s +#0 string LWFN Macintosh Postscript Font (data) +#>2 string x : %s + +# Additional Macintosh Files (franklsm@tuns.ca) +# GRR: Too weak +#0 string PACT Macintosh Compact Pro Archive (data) +#>2 string x : %s +#0 string ttro Macintosh TeachText File (data) +#>2 string x : %s +#0 string TEXT Macintosh TeachText File (data) +#>2 string x : %s +#0 string PDF Macintosh PDF File (data) +#>2 string x : %s + +# MacBinary format (Eric Fischer, enf@pobox.com) +# +# Unfortunately MacBinary doesn't really have a magic number prior +# to the MacBinary III format. The checksum is really the way to +# do it, but the magic file format isn't up to the challenge. +# +# 0 byte 0 +# 1 byte # filename length +# 2 string # filename +# 65 string # file type +# 69 string # file creator +# 73 byte # Finder flags +# 74 byte 0 +# 75 beshort # vertical posn in window +# 77 beshort # horiz posn in window +# 79 beshort # window or folder ID +# 81 byte # protected? +# 82 byte 0 +# 83 belong # length of data segment +# 87 belong # length of resource segment +# 91 belong # file creation date +# 95 belong # file modification date +# 99 beshort # length of comment after resource +# 101 byte # new Finder flags +# 102 string mBIN # (only in MacBinary III) +# 106 byte # char. code of file name +# 107 byte # still more Finder flags +# 116 belong # total file length +# 120 beshort # length of add'l header +# 122 byte 129 # for MacBinary II +# 122 byte 130 # for MacBinary III +# 123 byte 129 # minimum version that can read fmt +# 124 beshort # checksum +# +# This attempts to use the version numbers as a magic number, requiring +# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second +# be 0x81. This works for the files I have, but maybe not for everyone's. + +# Unfortunately, this magic is quite weak - MPi +#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data + +# MacBinary I doesn't have the version number field at all, but MacBinary II +# has been in use since 1987 so I hope there aren't many really old files +# floating around that this will miss. The original spec calls for using +# the nulls in 0, 74, and 82 as the magic number. +# +# Another possibility, that would also work for MacBinary I, is to use +# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will +# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset, +# and that 74 will be 0. So something like +# +# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data +# +# >73 byte&0x01 0x01 \b, inited +# >73 byte&0x02 0x02 \b, changed +# >73 byte&0x04 0x04 \b, busy +# >73 byte&0x08 0x08 \b, bozo +# >73 byte&0x10 0x10 \b, system +# >73 byte&0x10 0x20 \b, bundle +# >73 byte&0x10 0x40 \b, invisible +# >73 byte&0x10 0x80 \b, locked + +#>65 string x \b, type "%4.4s" + +#>65 string 8BIM (PhotoShop) +#>65 string ALB3 (PageMaker 3) +#>65 string ALB4 (PageMaker 4) +#>65 string ALT3 (PageMaker 3) +#>65 string APPL (application) +#>65 string AWWP (AppleWorks word processor) +#>65 string CIRC (simulated circuit) +#>65 string DRWG (MacDraw) +#>65 string EPSF (Encapsulated PostScript) +#>65 string FFIL (font suitcase) +#>65 string FKEY (function key) +#>65 string FNDR (Macintosh Finder) +#>65 string GIFf (GIF image) +#>65 string Gzip (GNU gzip) +#>65 string INIT (system extension) +#>65 string LIB\ (library) +#>65 string LWFN (PostScript font) +#>65 string MSBC (Microsoft BASIC) +#>65 string PACT (Compact Pro archive) +#>65 string PDF\ (Portable Document Format) +#>65 string PICT (picture) +#>65 string PNTG (MacPaint picture) +#>65 string PREF (preferences) +#>65 string PROJ (Think C project) +#>65 string QPRJ (Think Pascal project) +#>65 string SCFL (Defender scores) +#>65 string SCRN (startup screen) +#>65 string SITD (StuffIt Deluxe) +#>65 string SPn3 (SuperPaint) +#>65 string STAK (HyperCard stack) +#>65 string Seg\ (StuffIt segment) +#>65 string TARF (Unix tar archive) +#>65 string TEXT (ASCII) +#>65 string TIFF (TIFF image) +#>65 string TOVF (Eudora table of contents) +#>65 string WDBN (Microsoft Word word processor) +#>65 string WORD (MacWrite word processor) +#>65 string XLS\ (Microsoft Excel) +#>65 string ZIVM (compress (.Z)) +#>65 string ZSYS (Pre-System 7 system file) +#>65 string acf3 (Aldus FreeHand) +#>65 string cdev (control panel) +#>65 string dfil (Desk Acessory suitcase) +#>65 string libr (library) +#>65 string nX^d (WriteNow word processor) +#>65 string nX^w (WriteNow dictionary) +#>65 string rsrc (resource) +#>65 string scbk (Scrapbook) +#>65 string shlb (shared library) +#>65 string ttro (SimpleText read-only) +#>65 string zsys (system file) + +#>69 string x \b, creator "%4.4s" + +# Somewhere, Apple has a repository of registered Creator IDs. These are +# just the ones that I happened to have files from and was able to identify. + +#>69 string 8BIM (Adobe Photoshop) +#>69 string ALD3 (PageMaker 3) +#>69 string ALD4 (PageMaker 4) +#>69 string ALFA (Alpha editor) +#>69 string APLS (Apple Scanner) +#>69 string APSC (Apple Scanner) +#>69 string BRKL (Brickles) +#>69 string BTFT (BitFont) +#>69 string CCL2 (Common Lisp 2) +#>69 string CCL\ (Common Lisp) +#>69 string CDmo (The Talking Moose) +#>69 string CPCT (Compact Pro) +#>69 string CSOm (Eudora) +#>69 string DMOV (Font/DA Mover) +#>69 string DSIM (DigSim) +#>69 string EDIT (Macintosh Edit) +#>69 string ERIK (Macintosh Finder) +#>69 string EXTR (self-extracting archive) +#>69 string Gzip (GNU gzip) +#>69 string KAHL (Think C) +#>69 string LWFU (LaserWriter Utility) +#>69 string LZIV (compress) +#>69 string MACA (MacWrite) +#>69 string MACS (Macintosh operating system) +#>69 string MAcK (MacKnowledge terminal emulator) +#>69 string MLND (Defender) +#>69 string MPNT (MacPaint) +#>69 string MSBB (Microsoft BASIC (binary)) +#>69 string MSWD (Microsoft Word) +#>69 string NCSA (NCSA Telnet) +#>69 string PJMM (Think Pascal) +#>69 string PSAL (Hunt the Wumpus) +#>69 string PSI2 (Apple File Exchange) +#>69 string R*ch (BBEdit) +#>69 string RMKR (Resource Maker) +#>69 string RSED (Resource Editor) +#>69 string Rich (BBEdit) +#>69 string SIT! (StuffIt) +#>69 string SPNT (SuperPaint) +#>69 string Unix (NeXT Mac filesystem) +#>69 string VIM! (Vim editor) +#>69 string WILD (HyperCard) +#>69 string XCEL (Microsoft Excel) +#>69 string aCa2 (Fontographer) +#>69 string aca3 (Aldus FreeHand) +#>69 string dosa (Macintosh MS-DOS file system) +#>69 string movr (Font/DA Mover) +#>69 string nX^n (WriteNow) +#>69 string pdos (Apple ProDOS file system) +#>69 string scbk (Scrapbook) +#>69 string ttxt (SimpleText) +#>69 string ufox (Foreign File Access) + +# Just in case... + +102 string mBIN MacBinary III data with surprising version number + +# sas magic from Bruce Foster (bef@nwu.edu) +# +#0 string SAS SAS +#>8 string x %s +0 string SAS SAS +>24 string DATA data file +>24 string CATALOG catalog +>24 string INDEX data file index +>24 string VIEW data view +# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com) +# +0x54 string SAS SAS 7+ +>0x9C string DATA data file +>0x9C string CATALOG catalog +>0x9C string INDEX data file index +>0x9C string VIEW data view + +# spss magic for SPSS system and portable files, +# from Bruce Foster (bef@nwu.edu). + +0 long 0xc1e2c3c9 SPSS Portable File +>40 string x %s + +0 string $FL2 SPSS System File +>24 string x %s + +# Macintosh filesystem data +# From "Tom N Harris" +# Fixed HFS+ and Partition map magic: Ethan Benson +# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these +# entries depend on the data arithmetic added after v.35 +# There's also some Pascal strings in here, ditto... + +# The boot block signature, according to IM:Files, is +# "for HFS volumes, this field always contains the value 0x4C4B." +# But if this is true for MFS or HFS+ volumes, I don't know. +# Alternatively, the boot block is supposed to be zeroed if it's +# unused, so a simply >0 should suffice. + +0x400 beshort 0xD2D7 Macintosh MFS data +>0 beshort 0x4C4B (bootable) +>0x40a beshort &0x8000 (locked) +>0x402 beldate-0x7C25B080 x created: %s, +>0x406 beldate-0x7C25B080 >0 last backup: %s, +>0x414 belong x block size: %d, +>0x412 beshort x number of blocks: %d, +>0x424 pstring x volume name: %s + +# "BD" is has many false positives +#0x400 beshort 0x4244 Macintosh HFS data +#>0 beshort 0x4C4B (bootable) +#>0x40a beshort &0x8000 (locked) +#>0x40a beshort ^0x0100 (mounted) +#>0x40a beshort &0x0200 (spared blocks) +#>0x40a beshort &0x0800 (unclean) +#>0x47C beshort 0x482B (Embedded HFS+ Volume) +#>0x402 beldate-0x7C25B080 x created: %s, +#>0x406 beldate-0x7C25B080 x last modified: %s, +#>0x440 beldate-0x7C25B080 >0 last backup: %s, +#>0x414 belong x block size: %d, +#>0x412 beshort x number of blocks: %d, +#>0x424 pstring x volume name: %s + +0x400 beshort 0x482B Macintosh HFS Extended +>&0 beshort x version %d data +>0 beshort 0x4C4B (bootable) +>0x404 belong ^0x00000100 (mounted) +>&2 belong &0x00000200 (spared blocks) +>&2 belong &0x00000800 (unclean) +>&2 belong &0x00008000 (locked) +>&6 string x last mounted by: '%.4s', +# really, that should be treated as a belong and we print a string +# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1" +>&14 beldate-0x7C25B080 x created: %s, +# only the creation date is local time, all other timestamps in HFS+ are UTC. +>&18 bedate-0x7C25B080 x last modified: %s, +>&22 bedate-0x7C25B080 >0 last backup: %s, +>&26 bedate-0x7C25B080 >0 last checked: %s, +>&38 belong x block size: %d, +>&42 belong x number of blocks: %d, +>&46 belong x free blocks: %d + +# I don't think this is really necessary since it doesn't do much and +# anything with a valid driver descriptor will also have a valid +# partition map +#0 beshort 0x4552 Apple Device Driver data +#>&24 beshort =1 \b, MacOS + +# Is that the partition type a cstring or a pstring? Well, IM says "strings +# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a +# cstring. Of course, partitions can contain more than four entries, but +# what're you gonna do? +# GRR: This magic is too weak, it is just "PM" +#0x200 beshort 0x504D Apple Partition data +#>0x2 beshort x (block size: %d): +#>0x230 string x first type: %s, +#>0x210 string x name: %s, +#>0x254 belong x number of blocks: %d, +#>0x400 beshort 0x504D +#>>0x430 string x second type: %s, +#>>0x410 string x name: %s, +#>>0x454 belong x number of blocks: %d, +#>>0x600 beshort 0x504D +#>>>0x630 string x third type: %s, +#>>>0x610 string x name: %s, +#>>>0x654 belong x number of blocks: %d, +#>>0x800 beshort 0x504D +#>>>0x830 string x fourth type: %s, +#>>>0x810 string x name: %s, +#>>>0x854 belong x number of blocks: %d, +#>>>0xa00 beshort 0x504D +#>>>>0xa30 string x fifth type: %s, +#>>>>0xa10 string x name: %s, +#>>>>0xa54 belong x number of blocks: %d +#>>>0xc00 beshort 0x504D +#>>>>0xc30 string x sixth type: %s, +#>>>>0xc10 string x name: %s, +#>>>>0xc54 belong x number of blocks: %d +## AFAIK, only the signature is different +#0x200 beshort 0x5453 Apple Old Partition data +#>0x2 beshort x block size: %d, +#>0x230 string x first type: %s, +#>0x210 string x name: %s, +#>0x254 belong x number of blocks: %d, +#>0x400 beshort 0x504D +#>>0x430 string x second type: %s, +#>>0x410 string x name: %s, +#>>0x454 belong x number of blocks: %d, +#>>0x800 beshort 0x504D +#>>>0x830 string x third type: %s, +#>>>0x810 string x name: %s, +#>>>0x854 belong x number of blocks: %d, +#>>>0xa00 beshort 0x504D +#>>>>0xa30 string x fourth type: %s, +#>>>>0xa10 string x name: %s, +#>>>>0xa54 belong x number of blocks: %d + +# From: Remi Mommsen +0 string BOMStore Mac OS X bill of materials (BOM) file + +#------------------------------------------------------------------------------ +# magic: file(1) magic for magic files +# +0 string #\ Magic magic text file for file(1) cmd +0 lelong 0xF11E041C magic binary file for file(1) cmd +>4 lelong x (version %d) (little endian) +0 belong 0xF11E041C magic binary file for file(1) cmd +>4 belong x (version %d) (big endian) +#------------------------------------------------------------------------------ +# mail.news: file(1) magic for mail and news +# +# Unfortunately, saved netnews also has From line added in some news software. +#0 string From mail text +# There are tests to ascmagic.c to cope with mail and news. +0 string Relay-Version: old news text +!:mime message/rfc822 +0 string #!\ rnews batched news text +!:mime message/rfc822 +0 string N#!\ rnews mailed, batched news text +!:mime message/rfc822 +0 string Forward\ to mail forwarding text +!:mime message/rfc822 +0 string Pipe\ to mail piping text +!:mime message/rfc822 +0 string Return-Path: smtp mail text +!:mime message/rfc822 +0 string Path: news text +!:mime message/news +0 string Xref: news text +!:mime message/news +0 string From: news or mail text +!:mime message/rfc822 +0 string Article saved news text +!:mime message/news +0 string BABYL Emacs RMAIL text +0 string Received: RFC 822 mail text +!:mime message/rfc822 +0 string MIME-Version: MIME entity text +#0 string Content- MIME entity text + +# TNEF files... +0 lelong 0x223E9F78 Transport Neutral Encapsulation Format + +# From: Kevin Sullivan +0 string *mbx* MBX mail folder + +# From: Simon Matter +0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB + +# JAM(mbp) Fidonet message area databases +# JHR file +0 string JAM\0 JAM message area header file +>12 leshort >0 (%d messages) + +# Squish Fidonet message area databases +# SQD file (requires at least one message in the area) +# XXX: Weak magic +#256 leshort 0xAFAE4453 Squish message area data file +#>4 leshort >0 (%d messages) + +#0 string \ + + + + + + + + \ No newline at end of file diff --git a/bin/Debug/Notepad Ultra.exe.manifest b/bin/Debug/Notepad Ultra.exe.manifest new file mode 100644 index 0000000..c806873 --- /dev/null +++ b/bin/Debug/Notepad Ultra.exe.manifest @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ZXgYf93cK2fBNTQEaSbhwAjLrxYL363iEvlDJSqgskQ= + + + + + + + + + + + + LctraFQOGS+3I9OAK/JA7D/no1zC+UaPBSMYItK3Rxs= + + + + + + + + + + + + cpuSNzboLrm9Lt6PKcc6RhQRUwkHopYND2IPAGwJ6WY= + + + + + + + + + + 4HosnFGZSItjK+oH24L1iux4kymxFqToTuMrifLblhc= + + + + + + + + + M8xgfw8onNntULouCxSQVU42MySt+97ELh/6LX1OHIY= + + + + + + + + + OnG/kOi937gTtE+cvOz0MTEaeXnB3ryXZ2ez5eWQMa8= + + + + + + + + + 8YQ3epO91YNQaheTWs8bUFXz9bI3AbjXji45ETofUQw= + + + + + + + + + frOFu95dIii29/YrYlKZSV+N3k/KhYm4ArpGB878A90= + + + + + + + + + u68FWWKOngOy7tQW8x4E59be26JqgShNsxj8wd3a1uQ= + + + + + + + + + VHKKCRRFg5x8eyHBK8vRer3EXdW6nv1xgGCx/IdZL/g= + + + + + + + + + eD7xcSQ5NTYOHQz2hshvPZuP/TWjPKW/EwTBvx/rJyU= + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bin/Debug/Notepad Ultra.pdb b/bin/Debug/Notepad Ultra.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3146fb36145b6192f6d2543292c874619ff8469e GIT binary patch literal 253440 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

pq8hO!&Ofyx$*r0IhyJym96sC(%# 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 literal 0 HcmV?d00001 diff --git a/bin/Debug/Notepad Ultra.vshost.application b/bin/Debug/Notepad Ultra.vshost.application new file mode 100644 index 0000000..9cbf9e5 --- /dev/null +++ b/bin/Debug/Notepad Ultra.vshost.application @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + OY27wJLJ8YmHQHi3EH5f6faT5TNDm+dZQzEvZiTjE8o= + + + + \ No newline at end of file diff --git a/bin/Debug/Notepad Ultra.vshost.exe b/bin/Debug/Notepad Ultra.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..8f90da475a8319aa76856e089ccc9e517eeb134a GIT binary patch literal 22688 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 literal 0 HcmV?d00001 diff --git a/bin/Debug/Notepad Ultra.vshost.exe.config b/bin/Debug/Notepad Ultra.vshost.exe.config new file mode 100644 index 0000000..e741a33 --- /dev/null +++ b/bin/Debug/Notepad Ultra.vshost.exe.config @@ -0,0 +1,213 @@ + + + + +

+ + + + + + + + + Lucida Console, 12pt + + + True + + + ///FIRST RUN/// + + + True + + + 0 + + + True + + + True + + + 50 + + + 256 + + + White + + + Black + + + Black + + + 224, 224, 224 + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + RoyalBlue + + + White + + + Control + + + Black + + + Black + + + Control + + + Black + + + Control + + + + + txt + cfg + ini + log + + + + + Black + + + White + + + White + + + Black + + + White + + + RoyalBlue + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + Red + + + Orange + + + Green + + + White + + + White + + + White + + + 0 + + + False + + + True + + + False + + + True + + + True + + + True + + + True + + + True + + + + + + + + + + True + + + True + + + 0 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bin/Debug/Notepad Ultra.vshost.exe.manifest b/bin/Debug/Notepad Ultra.vshost.exe.manifest new file mode 100644 index 0000000..c806873 --- /dev/null +++ b/bin/Debug/Notepad Ultra.vshost.exe.manifest @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ZXgYf93cK2fBNTQEaSbhwAjLrxYL363iEvlDJSqgskQ= + + + + + + + + + + + + LctraFQOGS+3I9OAK/JA7D/no1zC+UaPBSMYItK3Rxs= + + + + + + + + + + + + cpuSNzboLrm9Lt6PKcc6RhQRUwkHopYND2IPAGwJ6WY= + + + + + + + + + + 4HosnFGZSItjK+oH24L1iux4kymxFqToTuMrifLblhc= + + + + + + + + + M8xgfw8onNntULouCxSQVU42MySt+97ELh/6LX1OHIY= + + + + + + + + + OnG/kOi937gTtE+cvOz0MTEaeXnB3ryXZ2ez5eWQMa8= + + + + + + + + + 8YQ3epO91YNQaheTWs8bUFXz9bI3AbjXji45ETofUQw= + + + + + + + + + frOFu95dIii29/YrYlKZSV+N3k/KhYm4ArpGB878A90= + + + + + + + + + u68FWWKOngOy7tQW8x4E59be26JqgShNsxj8wd3a1uQ= + + + + + + + + + VHKKCRRFg5x8eyHBK8vRer3EXdW6nv1xgGCx/IdZL/g= + + + + + + + + + eD7xcSQ5NTYOHQz2hshvPZuP/TWjPKW/EwTBvx/rJyU= + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bin/Debug/Notepad Ultra.xml b/bin/Debug/Notepad Ultra.xml new file mode 100644 index 0000000..9ca20e6 --- /dev/null +++ b/bin/Debug/Notepad Ultra.xml @@ -0,0 +1,56 @@ + + + + +Notepad Ultra + + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + diff --git a/bin/Debug/PostSharp.dll b/bin/Debug/PostSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..306521d6d9556acdf150cebb5927323369ae935a GIT binary patch literal 227408 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 + + + PostSharp + + + + + Instructs PostSharp to ignore warnings and information messages. Errors cannot be ignored. + + + + + Creates a new instance of . + + Identifier of the ignored warning. + + + + Gets the identifier of the ignored warning. + + + + + Gets or set the reason (a human-readable text) why the warning must be ignored. + + + + + Represents the location of a message, which means, for the end-user, a line in a file of source code. + From the aspect developer, the location can be known as an object representing an element of code + (for instance a or ). Such implicit locations are resolved + by PostSharp to a file and line number. + + + + + Element of code (reflection object or Declaration) from which the location must be resolved. + + + + + Gets the ending column in the file that caused the + message. + + + + + Gets the ending line in the file that caused the message. + + + + + Builds a explicitly by specifying a filename, when the + + File name. + A . + + + + Builds a explicitly by specifying a filename, line, and column. + + File name. + Line number. + Column number. + A . + + + + Builds a explicitly by specifying a filename, line, and column. + + File name. + Starting line number. + Starting column number. + Ending line number. + Ending column number. + A . + + + + Gets the name of the file that caused the message. + + + + + Builds a from a . + + A . + A . + + + + Builds a from a . + + A . + A corresponding to . + + + + Builds a from an . + + An . + A . + + + + Builds a from an object representing an + element of code (, , , + , , , , , + or, if + you are using PostSharp SDK, any Declaration). + + an object representing an + element of code (, , , + , , , , + , or, if you are using PostSharp SDK, any Declaration. + A representing . + + + + Builds a from an . + + An ( or its wrapper). + A . + + + + Builds a from a (, + , , , + , ). + + An element of code (, + , , , + , ). + A . + + + + Builds a from a . + + A . + A . + + + + Gets the starting column in the file that caused the message. + + + + + Gets the starting line in the file that caused the message. + + + + + Represents an unknown or indeterminate location of the error message. + + + + + Provides some methods that are transformed during post-compilation. + + + + + At post-compile time, casts an instance of a type into another. + A post-compile time error is reported if the source type cannot be + assigned to the target type. + + Instance to be casted. + Source type. + Target type. + The object casted as . + + + + When used to retrieve the value of a field, forces the compiler to retrieve a copy + of the field value instead of an address to this field. This allows to call + instance methods of value-type fields without loading the field address. + + Value. + Type of the value to retrieve (this type parameter can generally be omitted). + + , exactly. + + + + Determines whether the calling program has been transformed by PostSharp. + + + + + Base class for arguments of all advices. + + + + + Initializes a new . + + The instance related to the advice invocation, or + null if the advice is associated to a static element of code. + + + + Gets the of the declaration to which the + advice has been applied. + + + + + Gets or sets the object instance on which the method is being executed. + + + + + Encapsulation of method arguments. + + + + + Returns a shallow copy of the current object. + + A shallow copy of the current object. + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + + + + Gets the number of arguments encapsulated by the current object. + + + + + Creates a weakly-typed object representing any number of arguments. + + + + + + returns + M:PostSharp.Aspects.Arguments.Create(System.Object[]) + + + + + + + Creates a strongly-typed object representing 1 argument. + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``1(``0) + + + + + + + Creates a strongly-typed object representing 2 arguments. + + + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``2(``0,``1) + + + + + + + Creates a strongly-typed object representing 3 arguments. + + + + + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``3(``0,``1,``2) + + + + + + + Creates a strongly-typed object representing 4 arguments. + + + + + + + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``4(``0,``1,``2,``3) + + + + + + + Creates a strongly-typed object representing 5 arguments. + + + + + + + + + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``5(``0,``1,``2,``3,``4) + + + + + + + Creates a strongly-typed object representing 6 arguments. + + + + + + + + + + + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``6(``0,``1,``2,``3,``4,``5) + + + + + + + Creates a strongly-typed object representing 7 arguments. + + + + + + + + + + + + + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``7(``0,``1,``2,``3,``4,``5,``6) + + + + + + + Creates a strongly-typed object representing 8 arguments. + + + + + + + + + + + + + + + + + + + + + returns + M:PostSharp.Aspects.Arguments.Create``8(``0,``1,``2,``3,``4,``5,``6,``7) + + + + + + + Empty list of . + + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + + Gets or sets the value of an argument. + + Argument index. + The argument value. + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Converts the current argument list into an . + + An whose elements are equal to the values encapsulated by the current . + + + + Base class for all aspects that are declared using multicast custom attributes (). + + + + + + + PostSharp.Aspects.Aspect + + + + + + + Gets or sets the weaving priority of the aspect. + + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Code element (, , + , , , , + , or ) to which the aspect has been applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Method invoked at build tome to get the imperative configuration of the current . + + Code element (, , + , , , , + , or ) to which the current + has been applied. + + An representing the imperative configuration + of the current . + + + + Gets or sets the of the serializer (a type derived + from ) used to serialize the aspect instance + at build time and deserialize it at runtime. + + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Code element (, , + , , , , + , or ) to which the current + has been applied. + + + + + Custom attribute that, when applied to an aspect class, specifies a human-readable description of the aspect + that can be displayed in PostSharp Tools for Visual Studio. + + + + + Initializes a new instance of the class. + + A human-readable description of the aspect class to which + the custom attribute is applied. + + + + Gets a human-readable description of the aspect class to which + the custom attribute is applied. + + + + + Reserved for future usage. + + + + + + + PostSharp.Aspects.AspectInfo + + + + + + + Completely specifies an aspect instance, including its target code element. An + contains either the aspect instance itself ( property), either information allowing to construct the aspect + () and configure the weaver (). + + + + + Initializes a new from a runtime aspect instance (). + + Code element (, , + , , , , + , or ) to which the current + is applied. + The aspect runtime instance. + + + + Initializes a new from a runtime aspect instance () + and its . + + Code element (, , + , , , , + , or ) to which the current + is applied. + The aspect runtime instance. + The aspect configuration (the type of this parameter should be equal to the + type configuration objects expected by the concrete ). + + + + Initializes a new from + + Code element (, , + , , , , + , or ) to which the current + is applied. + An instructing how the aspect instance + should be constructed. + An optional configuration object whose type corresponds to + the aspect type. + + + + Determines whether the should be represented as a stand-alone instance + in PostSharp Tools for Visual Studio. If false, the current + will be not be represented as a standalone node, and its advices will be merged with the ones provided + by the parent aspect (implementing ). The default value is false. + + + + + Gets the code element (, , + , , , , + , or ) to which the current + is applied. + + + + + Completely specifies an aspect instance (but not its target). An either the aspect instance itself + ( property), either information allowing to construct the aspect () and configure the weaver (). + + + + + Initializes a new when one cannot provide an aspect instance, + i.e. from an and a . + + Aspect construction. + Aspect configuration. + + + + Gets the aspect instance. + + + + + Gets the assembly-qualified type name of the aspect. + + + + + Gets the aspect configuration. + + + + + Gets the aspect construction. + + + + + Gets the type name of the aspect. + + + + + Utility methods for PostSharp.Aspects. + + + + + + + PostSharp.Aspects.AspectUtilities + + + + + + + Gets the of the calling instance. This method must be + invoked from an instance method (not a static method) of a type that has been enhanced + by an aspect. + + The of the calling instance. + + + + Initializes the all the aspects of the calling instance. This method must be + invoked from an instance method (not a static method) of a type that has been enhanced + by an aspect. + + + + + Base class for all aspects applied on assemblies. + + + + + + + PostSharp.Aspects.AssemblyLevelAspect + + + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Assembly to which the current aspect is applied + Reserved for future usage. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Code element (, , + , , , , + , or ) to which the aspect has been applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Assembly on which the current aspect is applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Code element (, , + , , , , + , or ) to which the current + has been applied. + + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Assembly to which the current aspect has been applied. + + + + Aspect that, when applied on a type, introduces one or many new interfaces + into that type. + + + + + + + PostSharp.Aspects.CompositionAspect + + + + + + + Specifies the action ( or ) + to be overtaken when an ancestor of one of the interfaces returned by + is already implemented by the type to which the current aspect is applied. + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Method invoked at runtime, during the initialization of instances of the target type, + to create the composed object. + + + + + param + args + M:PostSharp.Aspects.CompositionAspect.CreateImplementationObject(PostSharp.Aspects.AdviceArgs) + + + + The composed object. This interface should implement the interfaces specified + by the method. + + + + Determines whether the interface should be introduced into the type to which the aspect + is applied for each interface returned by the method. + + + + + Gets the array of interfaces that should be introduced publicly into + the target type of the current aspect. + + + to which the current aspect is applied. + The array of interfaces that should be introduced publicly into , or null if no interface should + be introduced publicly. + + + + Determines whether the field containing the interface implementation (and storing the object returned by + ) should be excluded from serialization by . + The same effect is typically obtained by applying the custom attribute to the field. + + + + + Specifies the action ( or ) + to be overtaken when one of the interfaces returned by the method + is already implemented by the type to which the current aspect is applied. + + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Type to which the current aspect has been applied. + + + + System type used in the implementation of the . Do not use in user code. + + + + + Creates a new instance of the type with a depth level that is one more than the current one. + + A new , incremented of one from the current . + + + + Determines whether the current depth is zero. + + + + Returns the fully qualified type name of this instance. + A containing a fully qualified type name. + + + + Gets a instance representing zero. + + + + + Aspect that, when applied to a target, adds a custom attribute to this target. + + + + + Initializes a new by specifying an . + + Construction of the custom attribute to be added to the target. + + + + Initializes a new by specifying a + . + + Construction of the custom attribute to be added to the target. + + + + Gets the construction of the custom attribute that must be applied to the target of this aspect. + + + + + Arguments of handlers of aspects of the type . + + + + + Adds a handler to the event by invoking the Add semantic of the next node in the chain of invocation. + + The handler to add to the event. + + + + Gets the delegate arguments. + + + + + Gets an interface that allows to invoke the next node in the chain of invocation of the intercepted method. + + + + + Gets the event to which the current aspect has been applied. + + + + + Gets the delegate being added, removed, or invoked. + + + + + Invokes a handler by calling the Invoke semantic of the next node in the chain of invocation. + + Handler to be invoked. + Arguments passed to the handler. + Return value of the handler. + + + + Proceeds with adding the to the event to which the current aspect. + This method invokes the next handler in chain. + It is typically invoked from the implementation of . + + + + + Proceeds with invoking the with the arguments specified in the property. + The delegate may change the and set the . + This method invokes the next handler in chain. + It is typically invoked from the implementation of . + + + + + Proceeds with removing the from the event to which the current aspect. + This method invokes the next handler in chain. + It is typically invoked from the implementation of . + + + + + Removes a handler from the event by invoking the Remove semantic of the next node in the chain of invocation. + + Handler to be removed. + + + + Gets the return value of the delegate. + + + + + Aspect that, when applied on an event, intercepts invocations of its semantics Add (), + Remove () and Invoke (). + + + + + + + PostSharp.Aspects.EventInterceptionAspect + + + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Method invoked instead of the Add semantic of the event to which the current aspect is applied, + i.e. when a new delegate is added to this event. + + Handler arguments. + + + + Method invoked when the event to which the current aspect is applied is fired, for each delegate + of this event, and instead of invoking this delegate. + + Handler arguments. + + + + Method invoked instead of the Remove semantic of the event to which the current aspect is applied, + i.e. when a delegate is removed from this event. + + Handler arguments. + + + + Base class for all aspects applied on events. + + + + + + + PostSharp.Aspects.EventLevelAspect + + + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Event to which the current aspect is applied + Reserved for future usage. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Code element (, , + , , , , + , or ) to which the aspect has been applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Event to which the aspect has been applied + + true if the aspect was applied to an acceptable event, otherwise + false. + + + + Initializes the current aspect. + + Event to which the current aspect is applied. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Code element (, , + , , , , + , or ) to which the current + has been applied. + + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Event to which the current aspect has been applied. + + + + Base class for all aspects applied on fields. + + + + + + + PostSharp.Aspects.FieldLevelAspect + + + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Field to which the current aspect is applied + Reserved for future usage. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Code element (, , + , , , , + , or ) to which the aspect has been applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Field to which the aspect has been applied + + true if the aspect was applied to an acceptable field, otherwise + false. + + + + Method invoked at runtime before any other method of the aspect is invoked. + + Field on which this instance is applied. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Code element (, , + , , , , + , or ) to which the current + has been applied. + + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Field to which the current aspect has been applied. + + + + Enumerates the possible behaviors of the calling method after the calling method has returned. + + + + + Default flow behavior for the current method. For , and , the fault flow is + , for it is . + + + + + Continue normally. In an advice, the behavior does not rethrow + the exception, but continues the normal execution flow after the block protected by the advise. + If there is another aspect before the current aspect on the current method, + the behavior calls the + method of the other aspect. + + + + + The current exception will be rethrown. Available only for . + + + + + Return immediately from the current method. Available only for and + . Note that you may want to set the + property, otherwise you may get a . If there is another + aspect before the current aspect on the current method, + the behavior skips the + method of the other aspect. However, the method of the other aspect + will be invoked. + + + + + Throws the exception contained in the property. Available only for . + + + + + Yields a value or awaits for an awaiter. Available only for iterators and async methods with the + and advices. + + + + + Base interface for run-time semantics of all aspects. + + + + + Compile-time semantics of . + + + + + Method invoked at build time to get the imperative configuration of the current . + + Code element (, , + , , , , + , or ) to which the current aspect has been applied. + + An representing the imperative configuration + of the current . + + + + Represents an instance of an aspect applied to a declaration. + + + + + Gets the aspect instance. + + + + + Gets the aspect configuration. + + + + + Gets the aspect construction. + + + + + Gets the type of the aspect. + + + + + Interface that, when implemented by an aspect class, allows aspect instances + to provide other aspects to the weaver. + + + + + Provides new aspects. + + Code element (, , + , , , , + , or ) to which the current aspect has been applied. + + A set of aspect instances. + + + + Service that allows to determine which aspects have been applied to a given declaration, whether declaratively through custom attributes or , + or programmatically using . + + + + + Event invoked after all the aspects in the current project have been discovered and initialized. + + + + + Gets the list of aspect instances on a given declaration. + + The declaration (in the current assembly) for which the list of aspect instances is required. + The list of aspect instances applied on . + + + + Determines whether an aspect of a given type has been applied to a given declaration. + + The declaration on which the presence of the aspect must be checked. + The type of aspect. + + true if an aspect of type has been applied to , otherwise false. + + + + Runtime semantics of aspects applied at assembly level. + + + + + Build-time semantics of aspects applied at assembly level. + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Assembly to which the current aspect is applied + Reserved for future usage. + + + + Defines the semantics of aspects that require to be notified after + a target object is cloned using . + + + + + Method called after the an object enhanced by the current aspect has been + cloned using . The this + parameter refers to the new aspect instance in the cloned object. + + Aspect instance corresponding to the current + aspect instance in the cloned target object. + + + + Interface exposing the implementation of another interface introduced + by a . + + Interface whose implementation is expose. + + + + Gets the object implementing the interface + on behalf of the current instance. + + Credentials provided by the current instance. + The object implementing the interface + on behalf of the current instance. + + + + + Defines the semantics of an aspect that, when applied on a type, introduce one or many new interfaces + into that type, and let these interfaces be implemented by an object created + at runtime. + + + + + Method invoked at runtime, during the initialization of instances of the target type, + to create the composed object. + + + + + param + args + M:PostSharp.Aspects.ICompositionAspect.CreateImplementationObject(PostSharp.Aspects.AdviceArgs) + + + + The composed object. This interface should implement the interfaces specified + by the and + collections. + + + + Semantics of an aspect that, when applied to a target, adds a custom attribute to this target. + + + + + Interface through which an event-level aspect or advice can + invoke the next node in the chain of invocation. + + + + + Invoke the Add semantic on the next node in the chain of invocation. + + Target instance on which the event is defined (null if the event is static). + Handler to be added to the event. + + + + Invoke the Invoke semantic on the next node in the chain of invocation. + + Target instance on which the event is defined (null if the event is static). + Handler to be removed from the event. + Arguments with which the should be invoked. + The value returned by the handler. + + + + Invoke the Remove semantic on the next node in the chain of invocation. + + Target instance on which the event is defined (null if the event is static). + Handler to be removed from the event. + + + + Runtime semantics of an aspect that, when applied on an event, intercepts invocations of its semantics Add (), + Remove () and Invoke () semantics. + + + + + Method invoked instead of the Add semantic of the event to which the current aspect is applied, + i.e. when a new delegate is added to this event. + + Handler arguments. + + + + Method invoked when the event to which the current aspect is applied is fired, for each delegate + of this event, and instead of invoking this delegate. + + Handler arguments. + + + + Method invoked instead of the Remove semantic of the event to which the current aspect is applied, + i.e. when a delegate is removed from this event. + + Handler arguments. + + + + Runtime semantics of aspects that can be applied on events. + + + + + Initializes the current aspect. + + Event to which the current aspect is applied. + + + + Build-time semantics of aspects that can be applied on events. + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Event to which the current aspect is applied + Reserved for future usage. + + + + Run-time semantics of aspects applied to fields. + + + + + Method invoked at runtime before any other method of the aspect is invoked. + + Field on which this instance is applied. + + + + Compile-time semantics of . + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Field to which the current aspect is applied + Reserved for future usage. + + + + Runtime semantics of aspects that have the same lifetime as instance of types + to which their are applied (or instance of the declaring type of members to which they are applied). + + + + + Creates a new instance of the aspect based on the current instance, serving as a prototype. + + Aspect arguments. + A new instance of the aspect, typically a clone of the current prototype instance. + + + + Initializes the aspect instance. This method is invoked when all system elements of the aspect (like member imports) + have completed. + + + + + Interface through which a field- or property-level aspect or advice can + invoke the next node in the chain of invocation. + + + + + Gets the of the declaration that the binding represents. + + + + + Provides a mechanism to execute a strongly-typed action that depends on the type of the current location. + + Action. + Payload. + Type of the payload passed to the parameter. + + + + Invokes the Get semantic on the next node in the chain of invocation. + + Target instance from which the field or property should be retrieved (null if the field or property is static). + Index arguments, if the location is an indexer property. + The value stored at the location. + + + + Gets metadata information about the field or property represented by the current binding. + + + + + Gets the type of the field or property. + + + + + Invokes the Set semantic on the next node in the chain of invocation. + + Target instance from which the field or property should be retrieved (null if the field or property is static). + Index arguments, if the location is an indexer property. + New value to be stored at the location. + + + + A strongly-typed variant for . + + + + + + Invokes the Get semantic on the next node in the chain of invocation. + + Target instance from which the field or property should be retrieved (null if the field or property is static). + Index arguments, if the location is an indexer property. + The value stored at the location. + + + + Invokes the Set semantic on the next node in the chain of invocation. + + Target instance from which the field or property should be retrieved (null if the field or property is static). + Index arguments, if the location is an indexer property. + New value to be stored at the location. + + + + Exposes an method invoked by the method, + which allows to execute strongly-typed operations and avoid boxing required by the weakly typed interface. + + Type of the payload of the method. + + + + Method invoked by the method. + + The typed . + Payload. + Type of the value of the object. + + + + An interface for . + + + + + Gets an interface that allows to invoke the next node in the chain of invocation of the intercepted method. + + + + + Executes a delegate for the current . This method allows to + execute strongly-typed operations and avoid boxing required by the weakly typed interface. + + Class (typically a singleton) that contains the generic method + that will be executed with the right method generic argument. + An argument being passed to the method of the + parameter. + Type of the payload. + + + + Retrieves the current value of the location without overwriting the property. + + The current value of the location, as returned by the next node in the chain of invocation (see ). + + + + Gets the current index arguments (in case of a property with parameters). + + + + + Gets or sets the object instance on which the method is being executed. + + + + + Gets the location (field, property or parameter) related to the aspect or advice being executed. + + + + + Gets the full name (including the full name of the declaring type) of the location (field, property or parameter) related to the aspect or advice being executed. + + + + + Gets the name of the location (field, property or parameter) related to the aspect or advice being executed. + + + + + Invokes the Get Location Value semantic on the next node in the chain of invocation and stores the location value in the property. + + + + + Invokes the Set Location Value semantic on the next node in the chain of invocation and stores the value of the property into + the location. + + + + + Sets the value of the location without overwriting the property. + + The value to be passed to the next node in the chain of invocation (see ). + + + + Gets or sets the location value. + + + + + A strongly-typed specialization of the interface. + + Type of the location value. + + + + Gets an interface that allows to invoke the next node in the chain of invocation of the intercepted method. + + + + + Retrieves the current value of the location without overwriting the property. + + The current value of the location, as returned by the next node in the chain of invocation (see ). + + + + Sets the value of the location without overwriting the property. + + The value to be passed to the next node in the chain of invocation (see ). + + + + Gets or sets the location value. + + + + + Exposes an method invoked by the method, + which allows to execute strongly-typed operations and avoid boxing required by the weakly typed interface. + + Type of the payload of the method. + + + + Method invoked by the method. + + The typed . + Payload passed to the method. + Type of the value of the object. + + + + Runtime semantics of an aspect that, when applied on a location (field or property), intercepts invocations of + the Get () and Set () semantics. + + + + + Method invoked instead of the Get semantic of the field or property to which the current aspect is applied, + i.e. when the value of this field or property is retrieved. + + Advice arguments. + + + + Method invoked instead of the Set semantic of the field or property to which the current aspect is applied, + i.e. when the value of this field or property is changed. + + Advice arguments. + + + + Runtime semantics of aspects defined on a field, property, or parameter. + + + + + Initializes the current aspect. + + Location to which the current aspect is applied. + + + + Compile-time semantics of . + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Location to which the current aspect is applied + Reserved for future usage. + + + + Ancestor of . + + + + + Runtime semantics of an aspect that, when applied on a location (field, property, or parameter), + validates the value assigned to this location using method , and throws + the exception returned by this method if any. + + Type of values validated by the current aspect. + + + + Validates the value being assigned to the location to which the current aspect has been applied. + + Value being applied to the location. + Name of the location. + Location kind (, , or + ). + + The to be thrown, or null if no exception needs to be thrown. + + + + Semantics of an aspect that, when applied to an assembly, adds a managed resource to this assembly. + + + + + Interface through which a method-level aspect or advice can + invoke the next node in the chain of invocation. + + + + + Invokes the next node in the chain of invocation. + + Target instance on which the method should be invoked (null if the method is static). + Method arguments. + Return value of the method. + + + + Runtime semantics of an aspect that, when applied on a method, intercepts invocations of this method. + + + + + Method invoked instead of the method to which the aspect has been applied. + + Advice arguments. + + + + Runtime semantics of aspects applied to methods. + + + + + Initializes the current aspect. + + Method to which the current aspect is applied. + + + + Compile-time semantics of . + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Method to which the current aspect is applied + Reserved for future usage. + + + + Credentials that give access to 'protected' semantics. + + + + + Throws an exception if given credentials are not equal + to the current one. + + Other credentials. + + + Indicates whether the current object is equal to another object of the same type. + An object to compare with this object. + true if the current object is equal to the parameter; otherwise, false. + + + Indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if and this instance are the same type and represent the same value; otherwise, false. + + + Returns the hash code for this instance. + A 32-bit signed integer that is the hash code for this instance. + + + + Creates a new . + + A new . + + + + Gets a null (or empty) / + + + + + Determines whether two are equal. + + An object. + An object. + + true if equals , + otherwise false. + + + + Determines whether two are different. + + An object. + An object. + + true if is different than , + otherwise false. + + + Returns the fully qualified type name of this instance. + A containing a fully qualified type name. + + + + Base class for aspects applied on types, but having the same lifetime as + instances of the type to which they are applied. + + + + + + + PostSharp.Aspects.InstanceLevelAspect + + + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Creates a new instance of the aspect based on the current instance, serving as a prototype. + + Aspect arguments. + A new instance of the aspect, typically a clone of the current prototype instance. + + + + Gets the object to which the current aspect has been applied. + + + + + Method called after the an object enhanced by the current aspect has been + cloned using . The this + parameter refers to the new aspect instance in the cloned object. + + Aspect instance corresponding to the current + aspect instance in the cloned target object. + + + + Initializes the aspect instance. This method is invoked when all system elements of the aspect (like member imports) + have completed. + + + + + Runtime semantics of an aspect that, when applied on a method, + defines an exception handler around the whole method body + and let the implementation of this interface handle the exception. + + + + + Method executed after the body of methods to which this aspect is applied, + in case that the method resulted with an exception (i.e., in a catch block). + + Advice arguments. + + + + Runtime semantics of . + + + + + Method executed before the body of methods to which this aspect is applied. + + Event arguments specifying which method + is being executed, which are its arguments, and how should the execution continue + after the execution of . + + + + Method executed after the body of methods to which this aspect is applied, + in case that the method resulted with an exception. + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Method executed after the body of methods to which this aspect is applied, + even when the method exists with an exception (this method is invoked from + the finally block). + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Method executed after the body of methods to which this aspect is applied, + but only when the method successfully returns (i.e. when no exception flies out + the method.). + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Extends the interface with two advises + to be applied on state machines. + + + + + Method executed when a state machine resumes execution after an yield return or + await statement. + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Method executed when a state machine yields, as the result of an yield return or + await statement. + + Event arguments specifying which method + is being executed and which are its arguments. In iterator methods, the + property gives access to the operand of the yield return statement. + + + + Gives access to a 'protected' interface, typically introduced + by a or a + Exposed interface. + + + + Gets a protected interface. + + Credentials of the current instance. + The implementation of the interface . + + + + Run-time semantics of aspects applied to types. + + + + + Initializes the current aspect. + + Type to which the current aspect is applied. + + + + Compile-time semantics of . + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Type to which the current aspect is applied + Reserved for future usage. + + + + Custom attribute that, when applied to an aspect class, specifies how many manual lines of code + are avoided every time the aspect is being used. + + + + + Initializes a new . + + Number of lines of code saved every time the aspect is applied to a target class. + + + + Gets the number of lines of code saved every time the aspect is applied to a target class. + + + + + Extension methods for the interface. + + + + + Gets the value of a field or property. + + The binding for the field or property. + The instance for which the field or property is evaluated, or null if the location is static. + The field or property value. + + + + Gets the value of an indexer (property with arguments). + + The binding for the indexer. + The instance for which the indexer is evaluated, or null if the indexer is static. + The arguments of the indexer. + The indexer value. + + + + Gets the value of a field or property. + + The binding for the field or property. + The instance for which the field or property is evaluated, or null if the location is static. + + + + typeparam + T + M:PostSharp.Aspects.LocationBindingExtensions.GetValue``1(PostSharp.Aspects.ILocationBinding{``0},System.Object) + + + + The field or property value. + + + + Gets the value of an indexer (property with arguments). + + The binding for the indexer. + The instance for which the indexer is evaluated, or null if the indexer is static. + The arguments of the indexer. + + + + typeparam + T + M:PostSharp.Aspects.LocationBindingExtensions.GetValue``1(PostSharp.Aspects.ILocationBinding{``0},System.Object,PostSharp.Aspects.Arguments) + + + + The indexer value. + + + + Sets the value of an indexer (property with arguments). + + The binding for the indexer. + The instance for which the indexer is set, or null if the indexer is static. + The arguments of the indexer. + The new value. + The indexer value. + + + + Sets the value of a field or property. + + The binding for the field or property. + The instance for which the field or property is set, or null if the location is static. + The new value assigned to the field or property. + The field or property value. + + + + Sets the value of an indexer (property with arguments). + + The binding for the indexer. + The instance for which the indexer is set, or null if the indexer is static. + The arguments of the indexer. + The new value. + + + + typeparam + T + M:PostSharp.Aspects.LocationBindingExtensions.SetValue``1(PostSharp.Aspects.ILocationBinding{``0},System.Object,PostSharp.Aspects.Arguments,``0) + + + + The indexer value. + + + + Sets the value of a field or property. + + The binding for the field or property. + The instance for which the field or property is set, or null if the location is static. + The new value assigned to the field or property. + + + + typeparam + T + M:PostSharp.Aspects.LocationBindingExtensions.SetValue``1(PostSharp.Aspects.ILocationBinding{``0},System.Object,``0) + + + + The field or property value. + + + + Arguments of advices of aspect type . + + + + + Gets an interface that allows to invoke the next node in the chain of invocation of the intercepted method. + + + + + Executes a delegate for the current . This method allows to + + + + + + + + Retrieves the current value of the location without overwriting the property. + + The current value of the location, as returned by the next node in the chain of invocation (see ). + + + + Gets the current index arguments (in case of a property with parameters). + + + + + Gets the location (field, property or parameter) related to the aspect or advice being executed. + + + + + Gets the full name (including the full name of the declaring type) of the location (field, property or parameter) related to the aspect or advice being executed. + + + + + Gets the name of the location (field, property or parameter) related to the aspect or advice being executed. + + + + + Invokes the Get Location Value semantic on the next node in the chain of invocation and stores the location value in the property. + + + + + Invokes the Set Location Value semantic on the next node in the chain of invocation and stores the value of the property into + the location. + + + + + Sets the value of the location without overwriting the property. + + The value to be passed to the next node in the chain of invocation (see ). + + + + Gets or sets the location value. + + + + + Aspect that, when applied on a location (field or property), intercepts invocations of + the Get () and Set () semantics. + + + + + + + PostSharp.Aspects.LocationInterceptionAspect + + + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Method invoked instead of the Get semantic of the field or property to which the current aspect is applied, + i.e. when the value of this field or property is retrieved. + + Advice arguments. + + + + Method invoked instead of the Set semantic of the field or property to which the current aspect is applied, + i.e. when the value of this field or property is changed. + + Advice arguments. + + + + Base class for aspects defined in fields, properties, or parameters. + + + + + + + PostSharp.Aspects.LocationLevelAspect + + + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Location to which the current aspect is applied + Reserved for future usage. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Location to which the aspect has been applied + + true if the aspect was applied to an acceptable field, otherwise + false. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Code element (, , + , , , , + , or ) to which the aspect has been applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Initializes the current aspect. + + Location to which the current aspect is applied. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Location to which the current aspect has been applied. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Code element (, , + , , , , + , or ) to which the current + has been applied. + + + + + Enumerates the possible contexts in which the location validation advices can be invoked. + + + + + The value is being validated on method entry. + + + + + The value is being validated just before the method successfully returns. + + + + + Aspect that, when applied to an assembly, adds a custom attribute to this assembly. + + + + + Initializes a new . + + Name of the managed resource. + Content of the managed resource. + + + + Gets the content of the managed resource. + + + + + Gets the name of the managed resource. + + + + + Arguments of advices of aspects of type and + + + + Gets the arguments with which the method has been invoked. + + + + + Gets the exception currently flying. + + + + + Determines the control flow of the target method once the advice is exited. + + + + + Gets the method being executed. + + + + + User-defined state information whose lifetime is linked to the + current method execution. Aspects derived from + should use this property to save state information between + different events (, + and ). + + + + + Gets or sets the method return value. + + + + + Gets or sets the value yielded by the iterator method. + + + + + Aspect that, when applied on an abstract or extern method, creates an implementation for this method. + + + + + + + PostSharp.Aspects.MethodImplementationAspect + + + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Method invoked instead of the method to which the aspect has been applied. + + Advice arguments. + + + + Arguments of advices of aspect type . + + + + + Gets the list of arguments with which the method has been invoked. + + + + + Gets an interface that allows to invoke the next node in the chain of invocation of the intercepted method. + + + + + Invokes the method that has been intercepted by calling the next node in the chain of invocation with given arguments, + without affecting the property . + + Arguments passed to the intercepted method. + Value returned by the intercepted method. + + + + Gets the method being executed. + + + + + Proceeds with invocation of the method that has been intercepted by calling the next node in the chain of invocation, + passing the current to that method and + storing its return value into the property . + + + + + Gets or sets the return value of the method. + + + + + Aspect that, when applied on a method, intercepts invocations of this method. + + + + + + + PostSharp.Aspects.MethodInterceptionAspect + + + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Method invoked instead of the method to which the aspect has been applied. + + Advice arguments. + + + + Base class for all aspects applied on methods. + + + + + + + PostSharp.Aspects.MethodLevelAspect + + + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Method to which the current aspect is applied + Reserved for future usage. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Code element (, , + , , , , + , or ) to which the aspect has been applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Method to which the aspect has been applied + + true if the aspect was applied to an acceptable field, otherwise + false. + + + + Initializes the current aspect. + + Method to which the current aspect is applied. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Code element (, , + , , , , + , or ) to which the current + has been applied. + + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Method to which the current aspect has been applied. + + + + Custom attribute that, when added to a static method, causes the method to be executed immediately + after the assembly is loaded by the CLR. The target method must be public, parameterless, void, and non-generic. + + + + + Initializes a new . + + Order in which the will be executed if the + current project contains several initializers. Initializers with smaller values of the + parameter get invoked first. + + + + Gets the order in which the will be executed if the + current project contains several initializers. Initializers with smaller values of the + property get invoked first. + + + + + Aspect that, when applied to a method, defines an exception + handler around the whole method and calls a custom method in this exception + handler. + + + + + + + PostSharp.Aspects.OnExceptionAspect + + + + + + + Determines how the aspect should behave when it is applied to an iterator or + async methods, which are compiled into state machines. + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Gets the type of exception handled by this aspect. + + Method to which the current aspect is applied. + The type (derived from ) of exceptions handled + by this aspect. + + + + Method executed after the body of methods to which this aspect is applied, + in case that the method resulted with an exception (i.e., in a catch block). + + Advice arguments. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Method to which the current aspect has been applied. + + + + Aspect that, when applied to a method defined in the current assembly, inserts a piece + of code before and after the body of these methods. + + + + + + + PostSharp.Aspects.OnMethodBoundaryAspect + + + + + + + Determines how the aspect should behave when it is applied to an iterator or + async methods, which are compiled into state machines. + + + + + Method invoked at build time to create a concrete instance specifically + for the current type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Method executed before the body of methods to which this aspect is applied. + + Event arguments specifying which method + is being executed, which are its arguments, and how should the execution continue + after the execution of . + + + + Method executed after the body of methods to which this aspect is applied, + in case that the method resulted with an exception. + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Method executed after the body of methods to which this aspect is applied, + even when the method exists with an exception (this method is invoked from + the finally block). + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Method executed when a state machine resumes execution after an yield return or + await statement. + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Method executed after the body of methods to which this aspect is applied, + but only when the method successfully returns (i.e. when no exception flies out + the method.). + + Event arguments specifying which method + is being executed and which are its arguments. + + + + Method executed when a state machine yields, as the result of an yield return or + await statement. + + Event arguments specifying which method + is being executed and which are its arguments. In iterator methods, the + property gives access to the operand of the yield return statement. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Method to which the current aspect has been applied. + + + + Wraps a or a type name. + + + + + Wraps a into a . + + A . + A wrapping . + + + + Wraps a type name into a . + + The type name. + A wrapping the type name. + + + + Wraps an array of type names into an array of . + + An array of type names. + An array of wrapping . + + + + Wraps an array of into an array of . + + An array of . + An array of wrapping . + + + + Converts a into a . + + + + + returns + M:PostSharp.Aspects.TypeIdentity.ToType + + + + + + + Gets the wrapped , or null it the property is set. + + + + + Gets the wrapped type name, or null it the property is set. + + + + + Base class for all aspects applied on types. + + + + + + + PostSharp.Aspects.TypeLevelAspect + + + + + + + Method invoked at build time to initialize the instance fields of the current aspect. This method is invoked + before any other build-time method. + + Type to which the current aspect is applied + Reserved for future usage. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Code element (, , + , , , , + , or ) to which the aspect has been applied. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Method invoked at build time to ensure that the aspect has been applied to the right target. + + Type to which the aspect has been applied + + true if the aspect was applied to an acceptable field, otherwise + false. + + + + Initializes the current aspect. + + Type to which the current aspect is applied. + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Code element (, , + , , , , + , or ) to which the current + has been applied. + + + + + Method invoked at build time to set up an object according to the current + instance and a specified target element of the current aspect. + + The instance previously returned by the + method. + Type to which the current aspect has been applied. + + + + Base class for all custom attributes representing an advice. + + + + + + + PostSharp.Aspects.Advices.Advice + + + + + + + A human-readable description of the current advice. + + + + + Reduction in the code lines count achieved by applying the advice instance to one code element. + + + + + Base class for advice instances, which can be provided dynamically by the aspect thanks to the interface. + + + + + + + PostSharp.Aspects.Advices.AdviceInstance + + + + + + + A human-readable description of the current advice instance. + + + + + The number of lines of hand-written code avoided by this specific . + + + + + Gets the main field or method of the aspect class that the current relates to. + + + + + Enumerates the reasons why the target method of the has been invoked. + + + + + None. + + + + + Manual call of the InitializeAspects method. + + + + + Call from the instance constructor. + + + + + Call from MemberwiseClone. + + + + + Call during deserialization. + + + + + Custom attribute that, when applied on an aspect class, requires custom + attributes present on the aspect class to be copied to the target of this class. + When applied on an introduced member (see ), + this custom attribute requires custom attributes present on the aspect member + to be copied to the introduced member. + + + + + Requires custom attributes present on the aspect class or aspect class member + to be copied to the aspect target or to the introduced member, respectively. + + Base type of custom attributes to be copied. + + + + Requires custom attributes present on the aspect class or aspect class member + to be copied to the aspect target or to the introduced member, respectively. + + Base types of custom attributes to be copied. + + + + Determines what should happen when a custom attribute of the same + type is already present on the target declaration. + + + + + Gets the list of custom attribute types to be copied. + + + + + Behavior of when a custom + attribute of the same type already exists on the target declaration. + + + + + Default (). + + + + + Emits an error message. + + + + + Silently ignore this custom attribute (does not copy it, without + error message). + + + + + Adds a new copy (possibly duplicate) of the custom attribute. + + + + + Merges the existing custom attribute with the template custom attribute + by adding properties and fields. If the existing custom attribute defines + the same properties and fields as the template custom attribute, + they are not overridden. + + + + + Merges the existing custom attribute with the template custom attribute + by adding and replacing properties and fields. If the existing custom + attribute defines the same properties and fields as the template custom + attribute, they are replaced by the values defined in the template + custom attribute. + + + + + Exposes the semantics of an event for use with the aspect extension. + + Handler type (derived from ). + + + + Gets a delegate enabling to invoke the add accessor + of the imported event. + + + + + Gets a delegate enabling to invoke the remove accessor + of the imported event. + + + + + Defines the signature of methods implementing the + and semantics of an event. + + Handler. + Handler type (derived from ). + + + + Base class for all advices that are possibly composed of + multiple advices that can be grouped together using the + property. + + + + + + + PostSharp.Aspects.Advices.GroupingAdvice + + + + + + + Name of the master advice method. If this property is not set, + the current method is itself the master of the group. Only + master methods can define selectors () + and dependencies (). + + + + + Interface that allows an aspect to provide aspects dynamically, instead of declaratively using custom attributes. + + + + + Provides an enumeration of advices, represented as instances of the class, for the current aspect instance. + + Element of code to which the current aspect has been applied. + A collection of advices to be added to the current aspect instance. + + + + Represents an advice that imports a field or property (represented by a ) of the target class + into a field of the aspect class. This class is the imperative equivalent of the declarative advise. + + + + + Initializes a new instance of the class and specifies which field or property should be imported by giving its reflection representation. + + A field of the aspect class to which should be bound at runtime. + This field can be of type , , or a type that is both (a) derived from ICollection<ILocationBinding> and (b) has a parameterless constructor. + The field or property to import. + + + + Initializes a new instance of the class and specifies the name of the property to be imported; the type of this + property will be matched according to the type of the aspect field. + + A field of the aspect class to which the field or property should be bound at build time. + This field must be of type . + The name of the property to import. + Determines whether a build-time error should be emitted if the member cannot be found. + If false, the binding field will be null in case the imported member is absent. + + Determines whether the should be bound to the member + as resolved before or after introduction of new members into the target class by the current advise. + + + + Initializes a new instance of the class and specifies the name of the property to be imported; the type of this + property will be matched according to the type of the aspect field. + + A field of the aspect class to which the field or property should be bound at build time. + This field must be of type . + Fallback list of possible names of the property to import. + Determines whether a build-time error should be emitted if the member cannot be found. + If false, the binding field will be null in case the imported member is absent. + + Determines whether the should be bound to the member + as resolved before or after introduction of new members into the target class by the current advise. + + + + Gets the field or property of the target class that needs to be imported into the aspect. + + + + + Gets the reflection object ( or ) that needs to be + imported, or null if the exact member is unknown and must be matched by name and signature. + + + + + Gets the fallback list of possible names of the member to be imported. + + + + + Base class for and . + + + + + Gets the field of the aspect class to which the field or property needs to be bound. + + + + + Determines whether a build-time error should be emitted if the member cannot be found. + If false, the binding field will be null in case the imported member is absent. + + + + + Gets the main field or method of the aspect class that the current relates to. + + + + + Gets the reflection object ( or ) that needs to be + imported, or null if the exact member is unknown and must be matched by name and signature. + + + + + Gets the fallback list of possible names of the member to be imported. + + + + + Determines whether the should be bound to the member + as resolved before or after introduction of new members into the target class by the current advise. + + + + + Custom attribute that, when applied to an instance field of an aspect class, determines + that this field should be bound to a method, event or property, of the + target class of this aspect. Valid types for fields are + a concrete (to bind to a method), + or + (to bind to a property), or (to bind to an event). + + + + + Initializes a new . + + + + + + + PostSharp.Aspects.Advices.ImportMemberAttribute + + + + + + + param + memberName + M:PostSharp.Aspects.Advices.ImportMemberAttribute.#ctor(System.String) + + + + + + + Initializes a new . + + Possible names of the member to import in the order of precedence. + + + + Determines whether a build time error must be issued if the member to be + imported is absent. If false, the binding field will be null + in case the imported member is absent. + + + + + Name of the imported member. + + + + + Array of possible names of imported member in the order of precedence. + + + + + Determines when the member should be imported: either before () + or after () members have been introduced by the current aspect. + Default is . + + + + + Enumeration of moments when members should be imported into an aspect. + + + + + + + + + + Before the aspect introduces its own members. This is similar to calling the overridden method using the + base keyword in C#. The overridden method implementation is always selected, even if the method + is virtual. + + + + + After the aspect introduces its own members. Note that importing a member introduced by the current + aspect makes sense only if the member has been introduced as virtual; in this case, the + the imported member is dynamically resolved using the virtual table of the target object. + + + + + Represents an advises that import a method of the target class into the aspect class. + + + + + Initializes a new instance of the . + + A field of the aspect class into that will be assigned to a delegate of the imported method at runtime. The field type should be a delegate of the same signature than the method to import. + Name of the method to import. + + true if the build should fail if there no matching method in the target class, false to set to null in this case. + Determines whether the should be bound to the member + as resolved before or after introduction of new members into the target class by the current advise. + + + + + Initializes a new instance of the . + + A field of the aspect class into that will be assigned to a delegate of the imported method at runtime. The field type should be a delegate of the same signature than the method to import. + Fallback list of possible names of the member to be imported. + + true if the build should fail if there no matching method in the target class, false to set to null in this case. + Determines whether the should be bound to the member + as resolved before or after introduction of new members into the target class by the current advise. + + + + + Gets the reflection object ( or ) that needs to be + imported, or null if the exact member is unknown and must be matched by name and signature. + + + + + Gets the fallback list of possible names of the member to be imported. + + + + + Custom attribute that, when applied to a method of an aspect class, specifies that this method + should be invoked whenever the aspect instance needs to be initialized. The target method + must have a void return value and have a single parameter of type . + This method is equivalent to + + + + + + PostSharp.Aspects.Advices.InitializeAspectInstanceAdvice + + + + + + + Enumeration of actions to be overtaken when an interface that should be introduced into a type is already + implemented by that type. + + + + + . + + + + + Fails and emits an error message. + + + + + Silently ignore this interface (does not introduce it). + + + + + Represents an advise that introduces an interface into the target class. The interface must be implemented by the aspect class. + + + + + Initializes a new instance of the class. + + Interface to introduce to the target class. Must be implemented by the aspect class itself. + Specifies the action ( or ) + to be overtaken when the interface specified in the constructor of this custom attribute + is already implemented by the type to which the current aspect is applied. + Specifies the action ( or ) + to be overtaken when an ancestor of the interface specified in the constructor of this custom attribute + is already implemented by the type to which the current aspect is applied. + + + + Specifies the action ( or ) + to be overtaken when an ancestor of the interface specified in the constructor of this custom attribute + is already implemented by the type to which the current aspect is applied. + + + + + Gets the interface to be introduced into the target class. + + + + + + + summary + P:PostSharp.Aspects.Advices.IntroduceInterfaceAdviceInstance.MasterAspectMember + + + + + + + Specifies the action ( or ) + to be overtaken when the interface specified in the constructor of this custom attribute + is already implemented by the type to which the current aspect is applied. + + + + + Custom attribute that, when applied to an aspect class, specifies that the aspect should + introduce a given interface into the type to which the aspect is applied. + + + + + Initializes a new . + + Interface that should be introduced into the types + to which the aspect is applied. + + + + Specifies the action ( or ) + to be overtaken when an ancestor of the interface specified in the constructor of this custom attribute + is already implemented by the type to which the current aspect is applied. + + + + + Determines whether the interface should be exposed indirectly through the + interface. If false, the interface + will be implemented directly by the type. + + + + + Specifies the action ( or ) + to be overtaken when the interface specified in the constructor of this custom attribute + is already implemented by the type to which the current aspect is applied. + + + + + Base class for . + + + + + Determines whether the introduced member should be virtual. + + + + + Determines the action to be overtaken when the member to be introduced already exists + in the type to which the aspect is applied, or to a base type. + + + + + Gets the visibility of the introduced member. + + + + + Custom attribute that, when applied on a method, event or property of an aspect class, specifies + that this method, event or property should be introduced into the types to which the aspect is applied. + + + + + + + PostSharp.Aspects.Advices.IntroduceMemberAttribute + + + + + + + Determines whether the property has been specified. + + + + + Determines whether the introduced member should be virtual. + + + + + Determines the action to be overtaken when the member to be introduced already exists + in the type to which the aspect is applied, or to a base type. + + + + + Determines the visibility (, (, ...) + of the introduced member. + + + + + Represents an advice that introduces a method of the aspect class into the target class. + + + + + Initializes a new instance of the class. + + A public method of the aspect class. + Visibility of the introduced method. + + true if the introduced method should be virtual, false if it should be non-virtual (or sealed, if the method is overriding another one), + or null if the method should be virtual only if the overridden method is also virtual. See for details. + Determines the action to be overtaken when the member to be introduced already exists + in the type to which the aspect is applied, or to a base type. + + + + + Gets the main field or method of the aspect class that the current relates to. + + + + + A weakly-typed interface for the class. + + + + + Gets the property value. + + The property value. + + + + Sets the property value. + + The new property value. + + + + Custom attribute that, when applied on a method of an aspect class, specifies that this method + has the same semantic as the method + of the interface. + + + + + + + PostSharp.Aspects.Advices.LocationValidationAdvice + + + + + + + Enumeration of actions to be overtaken by the aspect extension + when the member to be introduced already exists in the aspect target type or its base type. + + + + + + + + + + Emits a build time error. + + + + + Silently ignore the member introduction. + + + + + Tries to override the member, and fails if it is impossible (i.e. if the existing member is defined + in a base type and is sealed or non-virtual). + + + + + Tries to override the member, and silently ignore if it is impossible (i.e. if the existing member is defined + in a base type and is sealed or non-virtual). + + + + + Custom attribute that, when applied on an advice method, specifies the name of + the method that will be invoked at build-time to return the set of elements of code + to which the advice applies. + + + + + Initializes a new . + + Name of the method returning the set of targets. This method should have + a specific signature as discussed in the class documentation. + + + + Gets the name of the method returning the set of code elements. + + + + + Custom attribute that, when applied on an advice method, specifies to which elements of + code this advice applies, based on the kind, name and attributes of code elements. + Works similarly as . + + + + + + + PostSharp.Aspects.Advices.MulticastPointcut + + + + + + + Gets or sets the visibilities, scopes, virtualities, and implementation + of members to which this attribute applies. + + + + + Gets or sets the expression specifying to which members + the aspect extension applies. + + + + + Gets or sets the kind of elements to which this aspect extension applies. + + + + + Custom attribute that, when applied to a method of an aspect class, specifies that this method + should be invoked after the instances of all the aspects applied on the same target has been initialized. The target method + must have a void return value and have a single parameter of type . + + + + + + + PostSharp.Aspects.Advices.OnAspectsInitializedAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnEventAddHandlerAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnEventInvokeHandlerAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies that this method is an advice + having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnEventRemoveHandlerAdvice + + + + + + + Custom attribute that, when applied to a method of an aspect implementing , specifies that this method should be executed + after the last instance constructor of the target class of the aspect has completed execution. That is, this method will be invoked when the target object + will be fully constructed. This custom attribute can be applied only on methods that have void return type and accepts no parameter. + + + + + + + PostSharp.Aspects.Advices.OnInstanceConstructedAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnLocationGetValueAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnLocationSetValueAdvice + + + + + + + Base class for , , + or . + + + + + Determines how the advice should behave when it is applied to an iterator or + async methods, which are compiled into state machines. + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnMethodEntryAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnMethodExceptionAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnMethodExitAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnMethodInvokeAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnMethodResumeAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnMethodSuccessAdvice + + + + + + + Custom attribute that, when applied on a method of an aspect class, specifies + that this method is an advice having the same semantics as . + + + + + + + PostSharp.Aspects.Advices.OnMethodYieldAdvice + + + + + + + Custom attribute, typically accompanying an advice, specifying + to which code elements the advice applies. + + + + + + + PostSharp.Aspects.Advices.Pointcut + + + + + + + Exposes the semantics of a parameterless property for use + with the aspect extension. + + Property value type. + + + + Gets a delegate enabling to invoke the get accessor + of the imported property. + + + + + Gets a delegate enabling to invoke the set accessor + of the imported property. + + + + + Mimics the semantics of a property accepting a single index parameter, for use + with the aspect extension. + + Property index type. + Property value type. + + + + Gets a delegate enabling to invoke the get accessor + of the imported property. + + + + + Gets a delegate enabling to invoke the set accessor + of the imported property. + + + + + Defines the signature of methods implementing the + semantic of a parameterless property. + + Property value type. + The property value. + + + + Defines the signature of methods implementing the + semantic of a property with a single index parameter. + + Index. + Property value type. + Property index type. + The property value. + + + + Defines the signature of methods implementing the + semantic of a parameterless property. + + The property value. + Property value type. + + + + Defines the signature of methods implementing the + semantic of a property with a single index parameter. + + Index. + The property value. + Property value type. + Property index type. + + + + that selects exactly the aspect target. + + + + + + + PostSharp.Aspects.Advices.SelfPointcut + + + + + + + Configuration of an . + + + + + + + PostSharp.Aspects.Configuration.AspectConfiguration + + + + + + + Gets or sets the aspect priority. Aspects with smaller priority are processed first. The default priority is zero. + + + + + Gets or sets the collection of dependencies. + + + + + Gets or sets the type of the serializer that will be used + to configure the current aspect. + + + + + Configures an aspect of type . + + + + + + + PostSharp.Aspects.Configuration.AspectConfigurationAttribute + + + + + + + Gets or sets the weaving priority of the aspect. + + + + + Creates a concrete instance specifically for the current + type. + + A new and empty instance of , whose concrete type corresponds to + the concrete type of the . + + + + Gets the corresponding to the current custom attribute. + + An corresponding to the current custom attribute. + + + + Gets or sets the of the serializer that will be used + to configure the current aspect. + + + + + Sets up an object according to the current custom attribute instance. + + The instance previously returned by the + method. + + + + Custom attribute that, when applied to an aspect, specifies which custom attribute type + (derived from ) can provide declarative configuration for the aspect. + + + + + Initializes a new . + + Custom attribute type + (derived from ). + + + + Configuration of aspects of type . + + + + + + + PostSharp.Aspects.Configuration.CompositionAspectConfiguration + + + + + + + Specifies the action ( or ) + to be overtaken when an ancestor of one of the interfaces specified by + is already implemented by the type to which the current aspect is applied. + + + + + Determines whether the interface should be introduced into the type to which the aspect + is applied for each interface specified by the property. + + + + + Determines whether the field containing the interface implementation (and storing the object returned by + ) should be excluded from serialization by . + The same effect is typically obtained by applying the custom attribute to the field. + + + + + Specifies the action ( or ) + to be overtaken when one of the interfaces specified by or + is already implemented by the type to which the aspect is applied. + + + + + Gets or sets the array of interfaces to be introduced indirectly into the target type of the aspect. These + interfaces will become accessible through the interface. + + + + + Gets or sets the array of interfaces that should be introduced publicly into the target type of the aspect. + + + + + Custom attribute that, when applied on a class implementing , + defines the declarative configuration of that aspect. + + + + + + + PostSharp.Aspects.Configuration.CompositionAspectConfigurationAttribute + + + + + + + Specifies the action ( or ) + to be overtaken when an ancestor of one of the interfaces specified by + is already implemented by the type to which the current aspect is applied. + + + + + Determines whether the interface should be introduced into the type to which the aspect + is applied for each interface specified by the property. + + + + + Determines whether the field containing the interface implementation (and storing the object returned by + ) should be excluded from serialization by . + The same effect is typically obtained by applying the custom attribute to the field. + + + + + Specifies the action ( or ) + to be overtaken when one of the interfaces specified by or + is already implemented by the type to which the aspect is applied. + + + + + Gets or sets the array of type names of interfaces to be introduced indirectly into the target type of the aspect. These + interfaces will become accessible through the interface. + + + + + Gets or sets the array of type names of interfaces that should be introduced publicly into + the target type of the aspect. + + + + + Configuration of aspects of type . + + + + + + + PostSharp.Aspects.Configuration.CustomAttributeIntroductionAspectConfiguration + + + + + + + Gets or sets the construction of the custom attribute that must be applied to the target of this aspect. + + + + + Configuration of aspects of type . + + + + + + + PostSharp.Aspects.Configuration.EventInterceptionAspectConfiguration + + + + + + + Custom attribute that, when applied on a class implementing , + defines the declarative configuration of that aspect. + + + + + + + PostSharp.Aspects.Configuration.EventInterceptionAspectConfigurationAttribute + + + + + + + Allows an to depend on a profile, i.e. + an external piece of configuration stored as a resource in the project file. + Classes derived from may implement this interface. + + + + + Applies the profile to the current configuration object. + + The profile object, represented by the resource named + in section named , with namespace . + + + + + Gets the name of the profile, i.e. the name of the resource representing the profile. + + + + + Gets the name of the project section in which the profile resource is stored. + + + + + Gets the namespace of the project section in which the profile resource is stored. + + + + + Configuration of aspects of type . + + + + + + + PostSharp.Aspects.Configuration.LocationInterceptionAspectConfiguration + + + + + + + Custom attribute that, when applied on a class implementing , + defines the declarative configuration of that aspect. + + + + + + + PostSharp.Aspects.Configuration.LocationInterceptionAspectConfigurationAttribute + + + + + + + Configuration of aspects of type . + + + + + Initializes a new . + + Name of the managed resource. + Content of the managed resource. + + + + Gets the content of the managed resource. + + + + + Gets the name of the managed resource. + + + + + Configuration of aspects of type . + + + + + + + PostSharp.Aspects.Configuration.MethodInterceptionAspectConfiguration + + + + + + + Custom attribute that, when applied on a class implementing , + defines the declarative configuration of that aspect. + + + + + + + PostSharp.Aspects.Configuration.MethodInterceptionAspectConfigurationAttribute + + + + + + + Configuration of the aspect. + + + + + + + PostSharp.Aspects.Configuration.OnExceptionAspectConfiguration + + + + + + + Determines how the aspect should behave when it is applied to an iterator or + async methods, which are compiled into state machines. + + + + + Gets or sets the type of exceptions that are caught by this aspect. + + + + + Custom attribute that, when applied on a class implementing , + defines the configuration of that aspect. + + + + + + + PostSharp.Aspects.Configuration.OnExceptionAspectConfigurationAttribute + + + + + + + Gets or sets the type of exceptions that are caught by this aspect. + + + + + Configuration of the aspect. + + + + + + + PostSharp.Aspects.Configuration.OnMethodBoundaryAspectConfiguration + + + + + + + Determines how the aspect should behave when it is applied to an iterator or + async methods, which are compiled into state machines. + + + + + Custom attribute that, when applied on a class implementing , + defines the configuration of that aspect. + + + + + + + PostSharp.Aspects.Configuration.OnMethodBoundaryAspectConfigurationAttribute + + + + + + + Specifies an aspect dependency matching an advice of the same aspect instance. + + + + + Initializes a new and specifies a position. + + Dependency action. + Dependency position. + Name of the advice method. + + + + Initializes a new without specifying the position, + implicitly set to . + + Dependency action. + Name of the advice method. + + + + Gets the name of the method implementing the advice. + + + + + Enumeration of the different kinds of relationships of specified by aspect dependencies. + + + + + The dependency is ignored. + + + + + The dependency specifies an order relationship. + + + + + The dependency specifies that the current aspect or advice requires + another aspect or advice. + + + + + The dependency specifies that the current aspect or advice + conflicts with another aspect or advice. + + + + + The dependency specifies that the current aspect or advice + commutes with another aspect or advice. + + + + + Base class for all custom attributes defining aspect dependencies. An aspect dependency determines the + behavior of aspects or advices when used in conjunction with other aspects and advices. + Aspect dependencies determine ordering, requirements, conflicts, and commutativity of aspects and advices. + + + + + Initializes a new without specifying the position, + implicitly set to . + + Dependency action. + + + + Initializes a new and specifies a position. + + Dependency action. + Dependency position. + + + + Gets the dependency action, i.e. the kind of relationship specified by the dependency + (, , + , or ). + + + + + If true, specifies that the constraint (of type + or ) should emit a warning instead of an error if not + respected. + + + + + Gets the position of the current dependency, i.e. actually the position of the other + aspect or advices with respect to the one related to this dependency. + + + + + Determines the target ( or ) + to which the aspect dependency apply. + + + + + Aspect type to which this dependency applies. This property is required when the + custom attribute is applied at assembly level. It is ignored when applied on + class or method level. + + + + + Collection of . + + + + + + + PostSharp.Aspects.Dependencies.AspectDependencyAttributeCollection + + + + + + + Enumeration of the direction of the relationship specified by an aspect dependency. + + + + + Any order possible (or order not relevant). + + + + + The current aspect or advice is positioned before the other aspect or handler. + + + + + The current aspect or advice is positioned after the other aspect or handler. + + + + + Enumeration of targets ( or ) + to which the aspect dependency apply. + + + + + Natural target of the aspect. + + + + + Declaring type of the natural target of the aspect. + + + + + Specifies an aspect dependency matching aspects or advices having a given effect. + + + + + Initializes a new and specifies a position. + + Dependency action. + Dependency position. + Effect (see ). + + + + Initializes a new without specifying the position, + implicitly set to . + + Dependency action. + Effect (see ). + + + + Gets the effect that the aspects or advices must have in order to match the current dependency. + + + + + Specifies an aspect dependency matching aspects or advices that are a part of a given role. + + + + + Initializes a new and specifies a position. + + Dependency action. + Dependency position. + Role. + + + + Initializes a new without specifying the position, + implicitly set to . + + Dependency action. + Role. + + + + Gets the role that the aspects or advices must be a part of in order to match the current dependency. + + + + + Specifies an aspect dependency matching aspects of a specified type, and all its advices. + + + + + Initializes a new and specifies a position. + + Dependency action. + Dependency position. + Aspect type (derived from ). + + + + Initializes a new without specifying the position, + implicitly set to . + + Dependency action. + Aspect type (derived from ). + + + + Gets the type from which the aspects should be derived in order to match the current dependency. + + + + + Specifies that the aspect or aspect advice to which this custom attribute is applied is a + part of a given role. This aspect or advice can then be matched by / + + + + + Initializes a new . + + Role. + + + + Gets the role into which the aspect or advice to which this custom + attribute is applied will be enrolled. + + + + + List of standard effects. + + + + + Change the flow control (for instance by having the possibility to skip execution of an + intercepted method). + + + + + Custom effect (implemented in an aspect advice). All advices have this effect by default, + unless they are annotated by . + + + + + Introduction of a custom attribute. + + + + + Gets a string representing the effect of introducing an interface into a type. + + Name of the introduced interface. + A string that, by convention, represents the introduction of an interface named + into a type. + + + + Gets a string representing the effect of importing a member into from the target + type into the aspect. + + Name of the imported member. + A string that, by convention, represents the import of a member named + from the target type into the aspect. + + + + Gets a string representing the effect of introducing a member into a type. + + Name of the introduced member. + A string that, by convention, represents the introduction of a member named + into a type. + + + + Introduction of an interface. + + + + + Import of a type member. + + + + + Introduction of a type member. + + + + + List of standard roles. + + + + + Caching. + + + + + Data binding (for instance implementation of ). + + + + + Event broker (a system role used internally by PostSharp to realize + the handler). + + + + + Exception handling. + + + + + Performance instrumentation (for instance performance counters). + + + + + Object persistence (for instance Object-Relational Mapper). + + + + + Security enforcing (typically authorization). + + + + + Threading (locking). + + + + + Tracing and logging. + + + + + Transaction handling. + + + + + Validation of field, property, or parameter value. + + + + + Declares that the aspect class or advice to which this custom attribute is applied + is exempt of a given effect. + + + + + Initializes a new declaring that + the aspect class or advice to which this custom attribute is applied has + no effect at all. + + + + + Initializes a new declaring that + the aspect class or advice to which this custom attribute is applied is + exempt of the specified effects. + + List of effects of which the aspect class or advice + to which this custom attribute is applied is guaranteed to be exempt. + + + + Implementation of representing a list of 1 argument. + + Type of the first argument. + + + + Initializes a new . + + + + + First Argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a list of 2 arguments. + + Type of the first argument. + Type of the second argument. + + + + Initializes a new . + + + + + First argument. + + + + + Second argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a list of 3 arguments. + + Type of the first argument. + Type of the second argument. + Type of the third argument. + + + + Initializes a new . + + + + + First argument. + + + + + Second argument. + + + + + Third argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a list of 4 arguments. + + Type of the first argument. + Type of the second argument. + Type of the third argument. + Type of the fourth argument. + + + + Initializes a new . + + + + + First argument. + + + + + Second argument. + + + + + Third argument. + + + + + Fourth argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a list of 5 arguments. + + Type of the first argument. + Type of the second argument. + Type of the third argument. + Type of the fourth argument. + Type of the fifth argument. + + + + Initializes a new . + + + + + First argument. + + + + + Second argument. + + + + + Third argument. + + + + + Fourth argument. + + + + + Fifth argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a list of 6 arguments. + + Type of the first argument. + Type of the second argument. + Type of the third argument. + Type of the fourth argument. + Type of the fifth argument. + Type of the sixth argument. + + + + Initializes a new . + + + + + First argument. + + + + + Second argument. + + + + + Third argument. + + + + + Fourth argument. + + + + + Fifth argument. + + + + + Sixth argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a list of 7 arguments. + + Type of the first argument. + Type of the second argument. + Type of the third argument. + Type of the fourth argument. + Type of the fifth argument. + Type of the sixth argument. + Type of the seventh argument. + + + + Initializes a new . + + + + + First argument. + + + + + Second argument. + + + + + Third argument. + + + + + Fourth argument. + + + + + Fifth argument. + + + + + Sixth argument. + + + + + Seventh argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a list of 8 arguments. + + Type of the first argument. + Type of the second argument. + Type of the third argument. + Type of the fourth argument. + Type of the fifth argument. + Type of the sixth argument. + Type of the seventh argument. + Type of the eighth argument. + + + + Initializes a new . + + + + + First argument. + + + + + Second argument. + + + + + Third argument. + + + + + Fourth argument. + + + + + Fifth argument. + + + + + Sixth argument. + + + + + Seventh argument. + + + + + Eighth argument. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Implementation of representing a + list of arguments of arbitrary length and type. + + + + + Initializes a new . + + + containing the argument values. + + + + Gets or sets the underlying array of arguments. + + + + + Copies all the argument values from the elements of . + + The array that is the source of the argument values copied into the current . + An integer that represents the index in at which copying begins. + + is null. + + is lower than zero. + + + + Copies all arguments values to the specified starting at the specified destination index. + + The array that is the destination of argument values copied from the current . + An integer that represents the index in at which copying begins + The zero-based index in at which copying begins. + + is null. + + is less than 0. + The number of elements in the source is greater than the available space from to the end of the destination . + + + + Gets the value of the argument at a given index. + + Argument index. + The value of the argument at position . + + is lower than zero or greater or equal than . + + + + Sets the value of the argument at a given index. + + Argument index. + New value of the argument at position . + + is not assignable to parameter + at position . + + is lower than zero or greater or equal than . + + + + Base class for Laos serializers, whose role is to serialize aspect instances at compile-time and + deserialize them at runtime. + + + + + + + PostSharp.Aspects.Serialization.AspectSerializer + + + + + + + Deserializes a stream into an array if aspects. + + Stream containing serialized aspects. + Metadata dispenser to be used to resolve serialized metadata references in . + An array of aspects. + + + + Deserializes aspects contained in a managed resource of an assembly. + + Assembly containing the serialized aspects. + Name of the managed resources into which aspects have been serialized. + Metadata dispenser to be used to resolve serialized metadata references in this resource. + An array of aspects. + + + + Serializes an array of aspects into a stream. + + Array of aspects to be serialized. + Stream into which aspects have to be serialized. + A metadata emitter for the current module. + + + + Implementation of used at runtime when aspect instances + are deserialized. By overriding the default binder, you can resolve assembly names differently. + This can be useful if assemblies have been renamed or merged between PostSharp run and execution + + + + + Initializes a new . + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + The type of the object the formatter creates a new instance of. + + + + Implementation of based on the + provided by the full version + of the .NET Framework. + + + + + + + PostSharp.Aspects.Serialization.BinaryAspectSerializer + + + + + + + Adds an item to the chain of surrogate selectors + used during the process of serializing aspects. + + A new surrogate selector. + + + + Deserializes a stream into an array if aspects. + + Stream containing serialized aspects. + Metadata dispenser to be used to resolve serialized metadata references in . + An array of aspects. + + + + Serializes an array of aspects into a stream. + + Array of aspects to be serialized. + Stream into which aspects have to be serialized. + A metadata emitter for the current module. + + + + A that receives an + before serialization. + + + + + Sets the . + + An . + + + + When used as a value of . + property, specifies that the aspect should not be serialized but should instead be constructed at runtime using MSIL instructions. + + + + + + + PostSharp.Aspects.Serialization.MsilAspectSerializer + + + + + + + Serializes an array of aspects into a stream. + + Array of aspects to be serialized. + Stream into which aspects have to be serialized. + A metadata emitter for the current module. + + + + Implementation of based on the , for use on any supported .NET platform. + + + + + + + PostSharp.Aspects.Serialization.PortableAspectSerializer + + + + + + + Gets or sets the used to deserialize aspects. + + + + + Serializes an array of aspects into a stream. + + Array of aspects to be serialized. + Stream into which aspects have to be serialized. + A metadata emitter for the current module. + + + + Represents a node in a double-linked list. + + Type of values stored in the list. + + + + Gets the next node in the list, or null if the current node is the last one in the list. + + + + + Gets the previous node in the list, or null if the current node is the first one in the list. + + + + + Gets the value stored in the current node. + + + + + Represents a double linked list. + + Type of values stored in the link list. + + + + Gets the first node in the list, or null if the list is empty. + + + + + Determines whether the list is empty. + + + + + Gets the last node in the list, or null if the list is empty. + + + + + Represents a node in a singly linked list. + + Type of values stored in the list. + + + + Gets the next node in the list, or null if the current node is the last one in the list. + + + + + Gets the value stored in the current node. + + + + + Extensions to the interface. + + + + + Transforms an into an . + + A , or null. + Type of values. + An that can enumerate all elements in . + If is null, an empty enumerable is returned. + + + + + Transforms a into an . + + An . + Type of values. + An that can enumerate all elements in . + If is null, an empty enumerable is returned. + + + + + A value-type implementation of the interface. + + + + + + + + summary + P:PostSharp.Collections.ReadOnlyLinkedList`1.First + + + + + + + + + summary + P:PostSharp.Collections.ReadOnlyLinkedList`1.IsEmpty + + + + + + + + + summary + P:PostSharp.Collections.ReadOnlyLinkedList`1.Last + + + + + + + Represents a single-listed link. + + Type of values stored in the list. + + + + Gets the first node of the list. + + + + + Gets a value-type enumerator. + + An enumerator. + + + + Determines whether the list is empty. + + + + + An enumerator allowing to enumerate a . + + + + Gets the element in the collection at the current position of the enumerator. + The element in the collection at the current position of the enumerator. + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Advances the enumerator to the next element of the collection. + true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + The collection was modified after the enumerator was created. + + + + that, when applied on a declaration, limits the scope (namespace or type) in which this declaration + can be used. This constraint is useful to isolate several components from each other, even if they are implemented in + the same assembly. The ComponentInternal constraint sets the visibility of a declaration between internal and private. + The constraint cannot be applied to public or protected declarations. + + + + + Initializes a restricting the target declaration from being used + from another namespace than the namespace of the declaration. + + + + + Initializes a restricting the target declaration from being used + outside of given types or namespaces, given by strings. + + List of types or namespaces from which the target declaration + can be used. + + + + Initializes a restricting the target declaration from being used + outside of given types or namespaces, given as . + + List of types from which the target declaration can be used. If the name of a + type is NamespaceType, the whole namespace of this type is allowed. + + + + Gets or sets the severity of messages emitted by this constraint. + + + + + Validates the constraint. + + Declaration (, , + , , , + , , ) to which + the constraint has been applied. + The assembly being currently processed. + + + + Validates the fact that the constraint has been applied on a valid element of code. When this + method returns false, the constraint is silently ignored. + + + + true if the constraint has been applied on a valid element of code, otherwise false. + + + + Root class for all constraints based on . + A constraint is a piece validation logic executed at build time. Constraints + are applied to elements of code ((, , + , , , + , , ) + typically using multicast custom attributes, and verified + at build time for every assembly using this element of code. + + + + + + + PostSharp.Constraints.Constraint + + + + + + + Validates the fact that the constraint has been applied on a valid element of code. When this + method returns false, the constraint is silently ignored. + + + + true if the constraint has been applied on a valid element of code, otherwise false. + + + + Custom attribute that, when applied on a declaration, causes PostSharp to emit a warning if the declaration is being used. + + + + + + + PostSharp.Constraints.ExperimentalAttribute + + + + + + + Validates the constraint. + + Declaration (, , + , , , + , , ) to which + the constraint has been applied. + The assembly being currently processed. + + + + A constraint is a piece of validation logic executed at build time. Constraints + are applied to elements of code (, , + , , , + , , ), + typically (but not necessarily) using custom attributes or . + + + + + Validates the fact that the constraint has been applied on a valid element of code. When this + method returns false, the constraint is silently ignored. + + + + true if the constraint has been applied on a valid element of code, otherwise false. + + + + , when applied to a declaration, prevents it to be used from an different assembly. + This constraint can be used when a declaration must be made public for technical reasons, but its author do + not want it to be used in external code. + + + + + Initializes a new . + + + + + Gets or sets the severity of messages emitted by this constraint. + + + + + Validates the constraint. + + Declaration (, , + , , , + , , ) to which + the constraint has been applied. + The assembly being currently processed. + + + + Validates the fact that the constraint has been applied on a valid element of code. When this + method returns false, the constraint is silently ignored. + + + + true if the constraint has been applied on a valid element of code, otherwise false. + + + + that, when applied on an interface, prevents it to be implemented + in a different assembly. This constraint should be used when the author of an interface + does not expect users to implement the interface and wants to reserve the possibility + to add new methods to the interface. + + + + + Initializes a new . + + + + + Gets or sets the severity of messages emitted by this constraint. + + + + + Validates the constraint. + + Declaration (, , + , , , + , , ) to which + the constraint has been applied. + The assembly being currently processed. + + + + A constraint is a piece validation logic executed at build time. Constraints + are applied to elements of code ((, , + , , , + , , ), + typically using custom attributes or , and verified + at build time for every assembly using this element of code. + + + + + Validates the constraint. + + Declaration (, , + , , , + , , ) to which + the constraint has been applied. + The assembly being currently processed. + + + + A constraint that validates a specific element of code. Use an + to validate relationships between elements of code. + + + + + Validates the element of code to which the constraint is applied. + + Element of code to which the constraint is applied (, , + , , , + , , ). + + + + Custom attribute that, when applied to a target declaration, causes PostSharp to emit a warning if the declaration + is being referenced from classes that are not derived from the target class. This constraint is similar to the + C# keyword protected and should be used only when the target declaration must be made public or internal + for non-architectural reasons. + + + + + Initializes a new . + + + + + Gets or sets the severity of messages emitted by this constraint. + + + + + Validates the constraint. + + Declaration (, , + , , , + , , ) to which + the constraint has been applied. + The assembly being currently processed. + + + + Validates the fact that the constraint has been applied on a valid element of code. When this + method returns false, the constraint is silently ignored. + + + + + param + target + M:PostSharp.Constraints.ProtectedAttribute.ValidateConstraint(System.Object) + + + + + true if the constraint has been applied on a valid element of code, otherwise false. + + + + Implementation of based on . + + + + + + + PostSharp.Constraints.ReferentialConstraint + + + + + + + Validates the constraint. + + Declaration (, , + , , , + , , ) to which + the constraint has been applied. + The assembly being currently processed. + + + + Implementation of based on . + + + + + + + PostSharp.Constraints.ScalarConstraint + + + + + + + Validates the element of code to which the constraint is applied. + + Element of code to which the constraint is applied (, , + , , , + , , ). + + + + Assigns a unique identifier to an assembly. This assembly identifier is used + to generate unique attribute identifiers. + + + + + Initializes a new . + + Assembly identifier. + + + + Enumeration of contexts in which assemblies can be loaded. + + + + + Reference assemblies the ones the project is being linked against. They are typically located + in directory C:\Program Files\Reference Assemblies for the proper target platform. + + + + + Runtime assemblies are the ones loaded at build time in the CLR. They are typically located + in GAC. + + + + + Enumeration of standard levels of backward compatibility. + + + + + No compatibility level defined (latest at execution time). + + + + + Compatibility level for PostSharp 3.0. + + + + + Latest at build time. + + + + + Sets the level of backward compatibility required by aspects in the current assembly. + + + + + Initializes a new . + + Level of backward compatibility required by aspects in the current assembly. + + + + Custom attribute added to the assembly manifest of modules processed by PostSharp. + + + + + Instantiates a new and specifies the license number + (not the full license key). + + License number. + + + + Instantiate a new with a text message, + typically used when PostSharp runs in evaluation mode. + + The watermark text. + + + + Custom attribute that, when applied on an assembly, means that a given message + should be escalated to an error during the current PostSharp session. + + + + + Initializes a new . + + Identifier of the message to be disabled. + + + + Gets the identifier of the message to be disabled. + + + + + Defines constants identifying the different variants of the + .NET Framework (, , ). + + + + + .NET Compact Framework. + + + + + Convert a byte array (typically containing the public key token of mscorlib) + into a string that can be compared to one of the constants defined in this class. + + A byte array (typically containing the public key token of mscorlib) + A string that can be compared to one of the constants defined in this class + + + + Normal, full .NET Framework. + + + + + Micro Framework. + + + + + Silverlight. + + + + + Internal Only. Custom attribute used internally by PostSharp to mark + elements having inherited custom attributes. This custom attribute should not + be used in custom code, otherwise PostSharp may not work properly. + + + + + Gets a text given its key. + + + + + Gets a message text given a message key. + + Message key. + The text corresponding to . + + + + Receives messages. + + + + + Writes a message to the sink. + + A message. + + + + Custom attribute meaning that custom attributes of a given type are + bound to the implementation, not to the semantics. + + + + + Initializes the new . + + Type of the custom attribute that + should not be moved from implementation to semantic. + + + + Gets the type of the custom attribute that + should not be moved from implementation to semantic + + + + + Exception thrown at build time by implementation of + when an annotation is invalid. + + + + + Initializes a new with default message. + + + + + Deserialization constructor. + + Info. + Context. + + + + Initializes a new and with a specified exception message. + + Exception message + + + + Initializes a new with a specified exception message + and inner . + + Exception message. + Inner exception. + + + + Provides information about the current PostSharp environment. + + + + + Gets the currently executing project. + + + + + + + summary + M:PostSharp.Extensibility.IPostSharpEnvironment.FindAssembly(System.Reflection.AssemblyName) + + + + + + + param + name + M:PostSharp.Extensibility.IPostSharpEnvironment.FindAssembly(System.Reflection.AssemblyName) + + + + + + + returns + M:PostSharp.Extensibility.IPostSharpEnvironment.FindAssembly(System.Reflection.AssemblyName) + + + + + + + Finds the location of an assembly given its name. + + Assembly name. + + or . + The full path of the assembly, or null if the assembly could not be found. + + + + Loads an given its file name. + + Full assembly path. + The . + + + + Provides information about the currently executing project. + + + + + Evaluates an expression (that is, replace parameters by their actual value). + + An expression. + The evaluated expression, or null if one parameter could not be + resolved. + + + + Gets the set of project extension elements () given their name and XML namespace. + + Local name of the project extension element. + XML namespace of the project extension element. + The set of project elements named in all loaded projects. + + + + Gets the variant of the .NET Framework against which the .NET assembly + currently processed is linked. + + A string uniquely identifying the framework variant, to be compared + to the constants defined in the class. + Actually, the public key token of mscorlib is returned. + + + + Gets a build-time service exposed by PostSharp. + + + true whether an exception should be thrown in case the service cannot be acquired, otherwise false. + The default value is true. + An interface derived from . + The service , or null if the service could not be acquired and + was set to false. + + + + Gets the assembly that is being transformed by PostSharp. + + + false if the system has to be returned, true if a wrapper has to be returned. + The assembly being processed. If is true, this method returns an instance of a PostSharp internal + type implementing the interface. Otherwise, the reflection is returned. + + + + Gets the context of the current project that serves as a project-scoped cache. + + + + + Gets the variant and version of the .NET Framework that the assembly being built targets. + + + + + Exposes the method, which gets the reference identity of + the assembly declaring a given type. + + + + + Returns the reference identity of the assembly declaring a type. + + A . + The identity of the reference assembly defining . This assembly is possibly + different than the runtime assembly, which is available from the property + of the class. This method may return null if is + an internal type of a system assembly. + + + + A service exposed by the build-time part of PostSharp. + + + + + Exposes build-time services. + + + + + Gets a build-time service exposed by PostSharp. + + + true whether an exception should be thrown in case the service cannot be acquired, otherwise false. + The default value is true. + An interface derived from . + The service , or null if the service could not be acquired and + was set to false. + + + + A context that provides storage for arbitrary items. + + + + + Gets a value of a given type from the store. + + Type of the value. + The value whose type is , or null if the store + does not contain such value. + + + + Gets a value from the cache or adds it if it does not exist yet. + + The delegate invoked if no value of type is + present in the cache. + Type of the value. + Either the value of type present in the cache, + either the result of the delegate. + + + + Gets a value from the cache or adds a default value if it does not exist yet. + + Type of value. + Either the value of type present in the cache, + either a new object of type . + + + + Adds a value to the store or replace it if a value of the same type already exists. + + The new value. + Type of the new value. + + + + Represents a version and variant of the .NET framework (running on a device) on which the project being built is design to run. + + + + + Unique string identifier of the target device. + + + + + Gets the target profile of the framework (e.g. WindowsPhone). + + + + + Identifier of the framework family (, + , , + ). + + + + + Gets the version of the target profile. + + + + + Interface that, when implemented by a custom attribute (), + causes PostSharp to invoke a validation method for every instance + of that custom attribute. + + + + + Method invoked at build time to ensure that the aspect has been applied to + the right target. + + Target element. + + true if the aspect was applied to an acceptable target, otherwise + false. + + + + Service that allows build-time code to push annotations (both programmatic and user-visible) + to PostSharp Tools for Visual Studio. + + + + + Pushes an annotation to PostSharp Tools for Visual Studio. + + The declaration to which the annotation relate. + The type of the annotation. + Arguments of the annotation. + A human-readable description of the annotation. + A number incrementing the number of lines of code saved on . + + + + Encapsulates a message (error, warning, info, ...). + + + + + Initializes a new and specifies only required parameters. + + Message severity (fatal error, error, info, debug). + Identifier of the message type. + Name of the component emitting the message. + Fully formatted message text. + + + + Initializes a new and specifies all its properties. + + Message severity (fatal error, error, info, debug). + Identifier of the message type. + File that caused the error, or null if + the file is unknown or does not apply. + Position (line) in the file that caused the error, + or if the line is + unknown or does not apply. + Position (column) in the file that caused the error, + or if the line is + unknown or does not apply. + The that caused this message, + or null if this message was not caused by an + exception. + Name of the component emitting the message. + Link to the help file page associated to this message. + Fully formatted message text. + + + + Initializes a new and specifies all its properties. + + Message severity (fatal error, error, info, debug). + Identifier of the message type. + File that caused the error, or null if + the file is unknown or does not apply. + Start position (line) in the file that caused the error, + or if the line is + unknown or does not apply. + Start position (column) in the file that caused the error, + or if the line is + unknown or does not apply. + End position (line) in the file that caused the error, + or if the line is + unknown or does not apply. + End position (column) in the file that caused the error, + or if the line is + unknown or does not apply. + The that caused this message, + or null if this message was not caused by an + exception. + Name of the component emitting the message. + Link to the help file page associated to this message. + Fully formatted message text. + + + + Initializes a new and specifies all its properties. + + Element of code (, , , + , , or ) + to which the message applies. When called from PostSharp.Sdk, the parameter can also contain a MetadataDeclaration. + Message severity (fatal error, error, info, debug). + Identifier of the message type. + Fully formatted message text. + Link to the help file page associated to this message. + Name of the component emitting the message. + The that caused this message, + or null if this message was not caused by an + exception. + + + + Returns a string composed of the messages of + all inner exceptions. + + The outer exception. + A string composed of the messages of all + and all inner exceptions, + concatenated by the string -->. + + + + Gets the help link. + + + + + Gets the + + + + + Location of the source code artifact causing the message. + + + + + Gets the end column in the file that caused the message. + + + + + Gets the end line in the file that caused the message. + + + + + Gets the name of the file that caused + the message. + + + + + Gets the start column in the file that caused the message. + + + + + Gets the start line in the file that caused the message. + + + + + Gets the message type identifier. + + + + + Gets the message formatted text. + + + + + When set to the locationLine or locationColumn constructor parameter or the , + , , , means that the value of this property is unknown. + + + + + Gets the message severity. + + + + + Gets or sets the name of the source component. + + + + + Writes a message by providing a object. + + A . + + + + Obsolete. + + + + + param + severity + M:PostSharp.Extensibility.Message.Write(PostSharp.Extensibility.SeverityType,System.String,System.String) + + + + + + + param + errorCode + M:PostSharp.Extensibility.Message.Write(PostSharp.Extensibility.SeverityType,System.String,System.String) + + + + + + + param + message + M:PostSharp.Extensibility.Message.Write(PostSharp.Extensibility.SeverityType,System.String,System.String) + + + + + + + Writes a message. + + Severity. + Error code. + Error message formatting string. + Error message arguments. + + + + Writes a message. + + Severity. + Error code. + Error message. + Element of code (, , , + , , or ) + to which the message applies. When called from PostSharp.Sdk, the parameter can also contain a MetadataDeclaration. + + + + Writes a message. + + Severity. + Error code. + Error message formatting string. + Formatting string arguments. + Element of code (, , , + , , or ) + to which the message applies. When called from PostSharp.Sdk, the parameter can also contain a MetadataDeclaration. + + + + Writes a message. + + Severity. + Error code. + Error message formatting string. + Formatting string arguments. + Element of code to which the message applies. + + + + Writes a message. + + Severity. + Error code. + Error message formatting string. + Formatting string arguments. + Element of code to which the message applies. + + + + Writes a message. + + Severity. + Error code. + Error message formatting string. + Formatting string arguments. + Element of code to which the message applies. + + + + Writes a message. + + Severity. + Error code. + Error message formatting string. + Formatting string arguments. + Element of code to which the message applies. + + + + Writes a message. + + Severity. + Error code. + Error message formatting string. + Formatting string arguments. + Element of code to which the message applies. + + + + Provides a base implementation of + where the message key is supposed to be in format PRE0000, where + PRE is a prefix and 0000 is an integer. Keys for help URLs + have the format PRE0000?. + + + + + Initializes a new . + + Prefix of all messages provided by the new dispenser. + + + + Gets the message help URL of a given number. + + Message number. + The message help URL corresponding to . + + + + Gets the message text of a given number. + + Message number. + The message text corresponding to . + + + + Gets a message text given a message key. + + Message key. + The text corresponding to . + + + + Gets the message prefix. + + + + + Exception embedding a . + + + + + Initializes a new from + an existing . + + A . + + + + Serializes the current object. + + Serialization information. + Serialization context. + + + + Gets the em + + + + + Provides commodity methods to work with an . + + + + + Initializes a new backed by a . + + Name of the component emitting. the messages. + The that will be used to + retrieve message texts. + + + + Instantiates a backed by a . + + Source name. + The . + + + + + + summary + M:PostSharp.Extensibility.MessageSource.CreateMessage(PostSharp.Extensibility.SeverityType,System.String,System.Object[],System.String,System.Int32,System.Int32,System.Exception) + + + + + + + + + + + + + + returns + M:PostSharp.Extensibility.MessageSource.CreateMessage(PostSharp.Extensibility.SeverityType,System.String,System.Object[],System.String,System.Int32,System.Int32,System.Exception) + + + + + + + Creates a from the current . + + Location of the source code artifact causing the message. + Severity. + Message identifier (resolved by the current ). + Exception causing the message, or null. + Arguments of the message text. + A . + + + + Gets the current message sink. + + + + + Writes a message to the sink. + + A message. + + + + + + summary + M:PostSharp.Extensibility.MessageSource.Write(PostSharp.Extensibility.SeverityType,System.String,System.Object[]) + + + + + + + + + + + + summary + M:PostSharp.Extensibility.MessageSource.Write(PostSharp.Extensibility.SeverityType,System.String,System.Object[],PostSharp.Reflection.SymbolSequencePoint) + + + + + + + + + + + + + summary + M:PostSharp.Extensibility.MessageSource.Write(PostSharp.Extensibility.SeverityType,System.String,System.Object[],System.String) + + + + + + + + + + + + + summary + M:PostSharp.Extensibility.MessageSource.Write(PostSharp.Extensibility.SeverityType,System.String,System.Object[],System.String,System.Int32) + + + + + + + + + + + + + + summary + M:PostSharp.Extensibility.MessageSource.Write(PostSharp.Extensibility.SeverityType,System.String,System.Object[],System.String,System.Int32,System.Int32) + + + + + + + + + + + + + + + summary + M:PostSharp.Extensibility.MessageSource.Write(PostSharp.Extensibility.SeverityType,System.String,System.Object[],System.String,System.Int32,System.Int32,System.Exception) + + + + + + + + + + + + + + Emits a and specifies an inner . + + Location of the source code artifact that caused the message. + Message severity (fatal error, error, info, debug). + Identifier of the message type. + Array of arguments used to format the message text, + or null if this message has no argument. + The that caused this message, + or null if this message was not caused by an + exception. + + + + Emits a . + + Location of the source code artifact that caused the message. + Message severity (fatal error, error, info, debug). + Identifier of the message type. + Array of arguments used to format the message text, + or null if this message has no argument. + + + + Emits a . + + Source code artifact that caused the message. + Message severity (fatal error, error, info, debug). + Identifier of the message type. + Array of arguments used to format the message text, + or null if this message has no argument. + + + + Emits a . + + Source code artifact (, , , + , , ) that caused the message. + Message severity (fatal error, error, info, debug). + Identifier of the message type. + Array of arguments used to format the message text, + or null if this message has no argument. + + + + Emits a . + + Source code artifact that caused the message. + Message severity (fatal error, error, info, debug). + Identifier of the message type. + Array of arguments used to format the message text, + or null if this message has no argument. + + + + Custom attribute that, when applied on an aspect, causes the aspect to increment some metric at build time. + + + + + Initializes a new . + + Metric name. + Metric operand. + + + + Determines whether the usage of features used by the target aspects must be instrumented. + + + + + Gets the name of the metric. + + + + + Gets the operand of the metric. + + + + + Custom attribute that can be applied to multiple elements + using wildcards. + + + + + + + PostSharp.Extensibility.MulticastAttribute + + + + + + + If true, indicates that this attribute removes all other instances of the + same attribute type from the set of elements defined by the current instance. + + + + + Determines whether this attribute is inherited + + + + + Gets or sets the priority of the current attribute in case that multiple + instances are defined on the same element (lower values are processed before). + + + + + Determines whether this attribute replaces other attributes found on the + target declarations. + + + + + Gets or sets the assemblies to which the current attribute apply. + + + + + Gets or sets the kind of elements to which this custom attributes applies. + + + + + Gets or sets the visibilities, scopes, virtualities, and implementation + of members to which this attribute applies, when the member is external to the current module. + + + + + Gets or sets the visibilities of types to which this attribute applies, + when this type is external to the current module. + + + + + Gets or sets the visibilities, scopes, virtualities, and implementation + of members to which this attribute applies. + + + + + Gets or sets the expression specifying to which members + this instance applies. + + + + + Gets or sets the passing style (by value, out or ref) + of parameters to which this attribute applies. + + + + + Gets or sets the expression specifying to which parameters + this instance applies. + + + + + Gets or sets the visibilities of types to which this attribute applies. + + + + + Gets or sets the expression specifying to which types + this instance applies. + + + + + Attributes of elements to which multicast custom attributes () + apply. + + + + + Specifies that the set of target attributes is inherited from + the parent custom attribute. + + + + + Private (visible inside the current type). + + + + + Protected (visible inside derived types). + + + + + Internal (visible inside the current assembly). + + + + + Internal and protected (visible inside derived types that are defined in the current assembly). + + + + + Internal or protected (visible inside all derived types and in the current assembly). + + + + + Public (visible everywhere). + + + + + Any visibility. + + + + + Static scope. + + + + + Instance scope. + + + + + Any scope ( | ). + + + + + Abstract methods. + + + + + Concrete (non-abstract) methods. + + + + + Any abstraction ( | ). + + + + + Virtual methods. + + + + + Non-virtual methods. + + + + + Any virtuality ( | ). + + + + + Managed code implementation. + + + + + Non-managed code implementation (external or system). + + + + + Any implementation ( | ). + + + + + Literal fields. + + + + + Non-literal fields. + + + + + Any field literality ( | ). + + + + + Input parameters. + + + + + Compiler-generated code (for instance closure types of anonymous method, iterator type, ...). + + + + + User-generated code (anything expected ). + + + + + Any code generation ( | )l + + + + + Output (out in C#) parameters. + + + + + Input/Output (ref in C#) parameters. + + + + + Any kind of parameter passing ( | | ). + + + + + All members. + + + + + Custom attribute that determines the usage of a . + + + + + Initializes a new . + + + + + Initializes a new . + + Kinds of targets that instances of the related + apply to. + + + + Determines whether this attribute can be applied to declaration of external assemblies + (i.e. to other assemblies than the one in which the custom attribute is instantiated). + + + + + Determines whether many instances of the custom attribute are allowed on a single declaration. + + + + + Determines whether instances of the target + should be hidden from the Aspect Browser, in the Visual Studio extension. + + + + + Determines whether the custom attribute in inherited along the lines of inheritance + of the target element. + + + + + Determines whether the custom attribute should be persisted in metadata, so that + it would be available for System.Reflection. + + + + + Gets or sets the attributes of the members (fields or methods) to which + the custom attribute can be applied, when the members are external to + the current module. + + + + + Gets or sets the attributes of the types to which + the custom attribute can be applied, when the type is external to + the current module. If the custom attribute relates to + fields or methods, this property specifies which attributes + of the declaring type are acceptable. + + + + + Gets or sets the attributes of the members (fields or methods) to which + the custom attribute can be applied. + + + + + Gets or sets the attributes of the parameter to which + the custom attribute can be applied. + + + + + Gets or sets the attributes of the types to which + the custom attribute can be applied. If the custom attribute relates to + fields or methods, this property specifies which attributes + of the declaring type are acceptable. + + + + + Gets the kinds of targets that instances of the related + apply to. + + + + + Kind of inheritance of . + + + + + No inheritance. + + + + + The instance is inherited to children of the original element, + but multicasting is not applied to members of children. + + + + + The instance is inherited to children of the original element + and multicasting is applied to members of children. + + + + + Kinds of targets to which multicast custom attributes () + can apply. + + + + + Specifies that the set of target elements is inherited from + the parent custom attribute. + + + + + Class. + + + + + Structure. + + + + + Enumeration. + + + + + Delegate. + + + + + Interface. + + + + + Any type (, , , + or ). + + + + + Field. + + + + + Method (but not constructor). + + + + + Instance constructor. + + + + + Static constructor. + + + + + Property (but not methods inside the property). + + + + + Event (but not methods inside the event). + + + + + Any member (, , , + , + , ). + + + + + Assembly. + + + + + Method or property parameter. + + + + + Method or property return value. + + + + + All element kinds. + + + + + Provides access to the current PostSharp environment (). + + + + + Gets the current PostSharp environment, or null + if the PostSharp Platform is not loaded in the current + context. + + + + + Gets the current PostSharp project. + + + + + Determines whether the PostSharp Platform is currently loaded. + + + + + Provides tracing functionality. An instance of the type + implements a trace sink. + + + + + Initialize a new sink. + + Category of messages. + + + + Enables a trace category known by its object. + + A object. + + + + Enables a trace category known by its name. + + The category name. + + + + Determines whether the current trace sink is enabled. + + + + + Writes a message to the current sink without formatting parameter. + + Message. + + + + Writes a message to the current sink with a single formatting parameter. + + Message formatting string. + The first formatting parameter. + + + + Writes a message to the current sink with two formatting parameters. + + Message formatting string. + The first formatting parameter. + The second formatting parameter. + + + + Writes a message to the current sink with three formatting parameters. + + Message formatting string. + The first formatting parameter. + The second formatting parameter. + The third formatting parameter. + + + + Writes a message to the current sink with many formatting parameters. + + Message formatting string. + Formatting parameters. + + + + Writes a message to the current sink without parameter, + and issues a line break. + + Message formatting string. + + + + Writes a message to the current sink with a single formatting parameter, + and issues a line break. + + Message formatting string. + The first formatting parameter. + + + + Writes a message to the current sink with two formatting parameters, + and issues a line break. + + Message formatting string. + The first formatting parameter. + The second formatting parameter. + + + + Writes a message to the current sink with three formatting parameters, + and issues a line break. + + Message formatting string. + The first formatting parameter. + The second formatting parameter. + The third formatting parameter. + + + + Writes a message to the current sink with many formatting parameters, and issues a line break. + + Message formatting string. + Formatting parameters. + + + + Represents a custom element (or section) in the XML project type. + + + + + Gets the full path of the file in which the element is defined. + + + + + Gets the text representation of the materializing the project extension. + + + + + Gets the materializing the project extension. + + + + + Represents an element of a resource section, i.e. a named object deserialized from XML. + + + + + Initializes a new . + + Resource name. + Resource value. + + + + Gets the name of the resource section, i.e. the name of the XML element containing the resource. + + + + + Gets the resource value, i.e. the object that has been constructed by deserializing the XML element. + + + + + Custom attribute that, when applied on another custom attribute (a class derived + from ), means that assemblies with elements + annotated with that custom attribute should be processed by PostSharp. + + + + + Initializes a new . + + Name of the required plug-in (file name without extension). + Name of the required task (should be defined in ). + + + + Determines whether the requirement should apply only to assemblies referencing the declaration to + which the custom attribute is applied. If true, the requirement will not apply to the assembly + where the custom attribute is used. + + + + + Gets the name of the required plug-in (file name without the extension). + + + + + Gets the name of the required task (should be defined in ). + + + + + Custom attribute that, when applied on a type, specifies that all build-time semantics of this type + require reflection wrappers to be passed instead of real reflection objects. + + + + + + + PostSharp.Extensibility.RequireReflectionWrapperAttribute + + + + + + + Types of message severities. + + + + + Debugging information (typically trace). + + + + + Verbose (lowly important information). + + + + + Information. + + + + + Important information. + + + + + Command line. + + + + + Warning. + + + + + Error. + + + + + Fatal error. + + + + + No message. + + + + + Instructs PostSharp that the validation of is done by another component, and should + not be processed by the default component. + + + + + + + PostSharp.Extensibility.SuppressAnnotationValidationAttribute + + + + + + + Represents a variant of family (variant) of the .NET Framework, e.g. , , + or . + + + + Indicates whether the current object is equal to another object of the same type. + An object to compare with this object. + true if the current object is equal to the parameter; otherwise, false. + + + Indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if and this instance are the same type and represent the same value; otherwise, false. + + + Returns the hash code for this instance. + A 32-bit signed integer that is the hash code for this instance. + + + + Determines whether the current object represents a null instance. + + + + + Instance of representing MonoAndroid. + + + + + Instance of representing MonoTouch. + + + + + Instance of representing .NET Framework for Windows Store. + + + + + Instance of representing the full .NET Framework. + + + + + Instance of representing .NET Portable Class Library. + + + + + Determines whether two instances are equal. + + A . + A . + + true if and are equal, otherwise false. + + + + Determines whether two instances are different. + + A . + A . + + true if and are different, otherwise false + + + + Instance of representing Silverlight. + + + + + Gets the string identity of the current object. + + + + + Instance of representing Windows Phone (Silverlight). + + + + + Instance of representing Xamarin.iOS. + + + + + Kinds of code references (). + + + + + No code reference. + + + + + Type inheritance. The base type is the ; + the child type is the . + See . + + + + + Member type (field or property type, method return type, or parameter type). + The member type is the . + See . + + + + + Operand of an instruction in a method body. The + is the method. See . + + + + + Instance of a custom attribute on a target declaration. + + + + + Gets the custom attribute. + + + + + Gets the (including given constructor + arguments and named arguments) used to construct + the . + + + + + Gets the declaration on which the custom attribute is defined. + + + + + Custom implementation of a reflection that select + methods based on exact matches using the . + + + + Selects a field from the given set of fields, based on the specified criteria. + A bitwise combination of values. + The set of fields that are candidates for matching. For example, when a object is used by , this parameter specifies the set of fields that reflection has determined to be possible matches, typically because they have the correct member name. The default implementation provided by changes the order of this array. + The field value used to locate a matching field. + An instance of that is used to control the coercion of data types, in binder implementations that coerce types. If is null, the for the current thread is used.Note   For example, if a binder implementation allows coercion of string values to numeric types, this parameter is necessary to convert a String that represents 1000 to a Double value, because 1000 is represented differently by different cultures. The default binder does not do such string coercions. + + + + param + bindingFlags + M:PostSharp.Reflection.CustomReflectionBinder.BindToField(System.Reflection.BindingFlags,System.Reflection.FieldInfo[],System.Object,System.Globalization.CultureInfo) + + + + The matching field. + For the default binder, includes , and contains multiple fields that are equally good matches for . For example, contains a MyClass object that implements the IMyClass interface, and contains a field of type MyClass and a field of type IMyClass. + For the default binder, includes , and contains no fields that can accept . + For the default binder, includes , and is null or an empty array.-or- includes , and is null. + + + Selects a method to invoke from the given set of methods, based on the supplied arguments. + A bitwise combination of values. + The set of methods that are candidates for matching. For example, when a object is used by , this parameter specifies the set of methods that reflection has determined to be possible matches, typically because they have the correct member name. The default implementation provided by changes the order of this array. + The arguments that are passed in. The binder can change the order of the arguments in this array; for example, the default binder changes the order of arguments if the parameter is used to specify an order other than positional order. If a binder implementation coerces argument types, the types and values of the arguments can be changed as well. + An array of parameter modifiers that enable binding to work with parameter signatures in which the types have been modified. The default binder implementation does not use this parameter. + An instance of that is used to control the coercion of data types, in binder implementations that coerce types. If is null, the for the current thread is used. Note   For example, if a binder implementation allows coercion of string values to numeric types, this parameter is necessary to convert a String that represents 1000 to a Double value, because 1000 is represented differently by different cultures. The default binder does not do such string coercions. + The parameter names, if parameter names are to be considered when matching, or null if arguments are to be treated as purely positional. For example, parameter names must be used if arguments are not supplied in positional order. + After the method returns, contains a binder-provided object that keeps track of argument reordering. The binder creates this object, and the binder is the sole consumer of this object. If is not null when BindToMethod returns, you must pass to the method if you want to restore to its original order, for example, so that you can retrieve the values of ref parameters (ByRef parameters in Visual Basic). + + + + param + bindingFlags + M:PostSharp.Reflection.CustomReflectionBinder.BindToMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[]@,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object@) + + + + The matching method. + For the default binder, contains multiple methods that are equally good matches for . For example, contains a MyClass object that implements the IMyClass interface, and contains a method that takes MyClass and a method that takes IMyClass. + For the default binder, contains no methods that can accept the arguments supplied in . + For the default binder, is null or an empty array. + + + Changes the type of the given Object to the given Type. + The object to change into a new Type. + The new Type that will become. + An instance of that is used to control the coercion of data types. If is null, the for the current thread is used.Note   For example, this parameter is necessary to convert a String that represents 1000 to a Double value, because 1000 is represented differently by different cultures. + An object that contains the given value as the new type. + + + + Singleton instance. + + + + Upon returning from , restores the argument to what it was when it came from BindToMethod. + The actual arguments that are passed in. Both the types and values of the arguments can be changed. + A binder-provided object that keeps track of argument reordering. + + + Selects a method from the given set of methods, based on the argument type. + A bitwise combination of values. + The set of methods that are candidates for matching. For example, when a object is used by , this parameter specifies the set of methods that reflection has determined to be possible matches, typically because they have the correct member name. The default implementation provided by changes the order of this array. + The parameter types used to locate a matching method. + An array of parameter modifiers that enable binding to work with parameter signatures in which the types have been modified. + + + + param + bindingFlags + M:PostSharp.Reflection.CustomReflectionBinder.SelectMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]) + + + + The matching method, if found; otherwise, null. + For the default binder, contains multiple methods that are equally good matches for the parameter types described by . For example, the array in contains a object for MyClass and the array in contains a method that takes a base class of MyClass and a method that takes an interface that MyClass implements. + For the default binder, is null or an empty array.-or-An element of derives from , but is not of type RuntimeType. + + + Selects a property from the given set of properties, based on the specified criteria. + A bitwise combination of values. + The set of properties that are candidates for matching. For example, when a object is used by , this parameter specifies the set of properties that reflection has determined to be possible matches, typically because they have the correct member name. The default implementation provided by changes the order of this array. + The return value the matching property must have. + The index types of the property being searched for. Used for index properties such as the indexer for a class. + An array of parameter modifiers that enable binding to work with parameter signatures in which the types have been modified. + + + + param + bindingFlags + M:PostSharp.Reflection.CustomReflectionBinder.SelectProperty(System.Reflection.BindingFlags,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]) + + + + The matching property. + For the default binder, contains multiple properties that are equally good matches for and . + For the default binder, is null or an empty array. + + + + Encapsulates a unique identifier of a declaration. The identifier does not contain the kind of declaration. Different declarations of different kinds can have the same identifier. + + + + + Gets a 29-bit of the name of the assembly containing the declaration represented by the current . + + + + Indicates whether the current object is equal to another object of the same type. + An object to compare with this object. + true if the current object is equal to the parameter; otherwise, false. + + + Indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if and this instance are the same type and represent the same value; otherwise, false. + + + + Gets the for a given declaration. + + A , , , , or . + A that identifies . + + + + Gets the that represents the declaring type of the declaration represented by the current . + + The that represents the declaring type of the declaration represented by the current . + If the current already represents a type, this method returns the current . + + + + Returns the hash code for this instance. + A 32-bit signed integer that is the hash code for this instance. + + + + Determines whether the current is null. + + + + + Maximum number of the same kind in the same type supported by the class. + + + + + Maximum number of types per assembly supported by the class. + + + + + Gets a number that uniquely identifies the member inside its declaring type, for the given member kind. + + + + + Gets a null instance of the type/ + + + + + Determines whether two instances of the type are equal. + + + + + + + returns + M:PostSharp.Reflection.DeclarationIdentifier.op_Equality(PostSharp.Reflection.DeclarationIdentifier,PostSharp.Reflection.DeclarationIdentifier) + + + + + + + Determines whether two instances of the type are different. + + + + + + + returns + M:PostSharp.Reflection.DeclarationIdentifier.op_Inequality(PostSharp.Reflection.DeclarationIdentifier,PostSharp.Reflection.DeclarationIdentifier) + + + + + + + Gets a number that uniquely identifies the type inside its declaring assembly. + + + + + Defines the semantics of an assembly name. + + + + + Gets the assembly culture name. + + + + + Gets the assembly public key. + + An array of bytes containing the public key, + or null if no public key is specified. + + + + Gets the assembly public key token. + + An array of bytes containing the public key token, + or null if no public key is specified. + + + + Determines whether the current assembly (or assembly reference) is mscorlib. + + + + + Determines whether the reference is retargetable by the CLR, i.e. can be accommodated by + an assembly whose identity does not match the current assembly reference. + + + + + Determines whether the current assembly (or assembly reference) contains a strong name signature. + + + + + Gets the assembly friendly name. + + + + + Gets the processor architecture that the current assembly targets. + + + + + Gets the assembly version. + + + + + Represents a reference between two declarations. + + + + + Gets the declaration referenced by the other. + + + + + Gets the kind of code reference. + + + + + Gets the declaration referencing the other. + + + + + Semantics of service that deserializes metadata objects (i.e. reflection objects) that have + been serialized by . + + + + + Gets the reflection object corresponding to the given index. + + Index returned by + at build time. + The reflection object corresponding to . + + + + Semantics of a service that allows build-time code to serialize references + to metadata objects (i.e. reflection objects) in a way that is compatible with obfuscators. + References are deserialized at run-time using . + + + + + Gets the index of a serialized metadata reference. + + A reflection object. + The index of , to be serialized + and deserialized at runtime with . + + + + Represents a file of source code. + + + + + Document type ( according to Microsoft PDB specification). + + + + + Full path of the file. + + + + + Language ( according to Microsoft PDB specification). + + + + + Language vendor ( according to Microsoft PDB specification). + + + + + Represents a , or + , which all have the semantics of a location (get value, set value). + + + + + Initializes a new from a . + + The field represented by the . + + + + Initializes a new from a . + + The parameter represented by the . + + + + Initializes a new from a . + + The property represented by the . + + + + Gets the declaring type of the underlying field, property, parameter, or return value. + + + + Indicates whether the current object is equal to another object of the same type. + An object to compare with this object. + true if the current object is equal to the parameter; otherwise, false. + + + Determines whether the specified object is equal to the current object. + The object to compare with the current object. + true if the specified object is equal to the current object; otherwise, false. + + + + Gets the underlying , + or null if the underlying code element is not a property. + + + + Serves as the default hash function. + A hash code for the current object. + + + + Returns the value of the field or property represented by the current object. + + The object whose field or property value will be returned (null if the + field or property is static). + The value of the field or property. + + + + Returns the value of the field or property represented by the current object + with optional index values for indexed properties. + + The object whose field or property value will be returned (null if the + field or property is static). + Optional index values for indexed properties. null for fields or non-index + properties. + The value of the field or property. + + + + Determines whether the underlying field or property is static. + + + + + Gets the location kind (, + , + or + ). + + + + + Gets the type of values that can be stored in the location. + + + + + Gets the name of the underlying field, property, parameter, or return value. + + + + + Determines whether two instances of represent the same element of code. + + A . + A . + + true if and are equal, otherwise false. + + + + Determines whether two instances of represent different elements of code. + + A . + A . + + true if and are different, otherwise false. + + + + Gets the underlying , + or null if the underlying code element is not a property. + + + + + Gets the underlying , + or null if the underlying code element is not a property. + + + + + Sets the value of the field or property represented by the current object to a given value. + + The object whose field or property value will be changed (null if the + field or property is static). + New value. + + + + Sets the value of the field or property represented by the current object to a given value + with optional index values for indexed properties. + + The object whose field or property value will be changed (null if the + field or property is static). + New value. + Optional index values for indexed properties. null for fields or non-index + properties. + + + + Initializes a new from a + , , or . + + + + + + returns + M:PostSharp.Reflection.LocationInfo.ToLocationInfo(System.Object) + + + + + + + Converts a collection of into an array of . + + A collection of . + An array of . + + + + Converts a collection of into an array of . + + A collection of . + An array of . + + + + Converts a collection of into an array of . + + A collection of . + An array of . + + + Returns a string that represents the current object. + A string that represents the current object. + + + + Enumerates the kinds of code elements that can be encapsulated by a . + + + + + . + + + + + . + + + + + A representing a parameter (not a ). + + + + + A representing a return value. + + + + + Represents a relationship between a type and a member of this type. + A member can be a , , or + . + + + + + Gets the member (, , or + ). + + + + + Gets the member type. + + + + + Represents a relationship between a declaration (, + , or ) + and a method whose instructions (method body) use the declaration. + + + + + Gets the instructions that reference . + + + + + Gets the declaration (, + or ) used by the method. + + + + + Gets the used by the method. If the current + object represents a reference to a + or , this property returns the declaring + type of the method or constructor. + + + + + Gets the method ( or ) + whose body uses the declaration. + + + + + Instructions whose operands can reference a declaration. + + + + + No instruction. + + + + + Get field value. + + + + + Set field value. + + + + + Call to a static or sealed method. + + + + + Call to a virtual method. + + + + + Creation of a new instance (invoke the constructor). + + + + + Get field address. + + + + + Load the metadata token (for instance typeof). + + + + + Load the address of a static or sealed method (delegate instantiation). + + + + + Load the address of a virtual method (delegate instantiation). + + + + + Type casting. + + + + + "Safe" type casting (as or is in C#). + + + + + Get the size of a value type (sizeof in C#). + + + + + Create a new array of a type. + + + + + Specifies how an object should be constructed, i.e. specifies the constructor to be + used, the arguments to be passed to this constructor, and the fields or properties to + be set. + + + + + Initializes a new type-safe from a . + + Constructor. + Arguments passed to the constructor. + + + + Initializes a new type-safe from a + A + + + + Initializes a new by specifying a type name and a list of constructor arguments. + + Name of the object type. + Arguments passed to the constructor. + + + + Initializes a new by specifying a type name and a list of constructor arguments. + + Object type. + Arguments passed to the constructor. + + + + Gets the custom attribute constructor. + + + + + Gets the arguments passed to the custom attribute constructor. + + + + + Gets the collection of named arguments. + + + + + Gets the assembly-qualified type name of the object. + + + + + Provides utility methods to work with the System.Reflection namespace. + + + + + Gets the whose a given field is the backing field from the current type or base types. + + A field. + The representing the property whose is the backing field, or null + if is not the backing field of an automatic property. + + + + Gets the whose a given field is the backing field and specifies whether base types should be considered. + + A field. + + true if the property should be looked for in the base, otherwise false. + The representing the property whose is the backing field, or null + if is not the backing field of an automatic property. + + + + Gets the backing field of a given property. + + A property. + The representing the backing field of , or null if + is not an automatic property. + + + + Gets the kind of state machine (typically , or ) that implements a given method. + + A method. + A value, or if is not implemented by a state machine. + + + + Determines whether a given property is an automatic property. + + A property. + + true if represents an automatic property, otherwise false. + + + + Provides helper methods for work with . + + + + + Determines whether the attribute relationship exists between two assemblies. + + The assembly defining the attribute. + The assembly referenced by the attribute. + + + + returns + M:PostSharp.Reflection.ReflectionHelper.AreInternalsVisibleTo(System.Reflection.Assembly,System.Reflection.Assembly) + + + + + + + + + summary + M:PostSharp.Reflection.ReflectionHelper.GetAssemblyQualifiedTypeName(System.String,System.String) + + + + + + + param + typeName + M:PostSharp.Reflection.ReflectionHelper.GetAssemblyQualifiedTypeName(System.String,System.String) + + + + + + + param + assemblyName + M:PostSharp.Reflection.ReflectionHelper.GetAssemblyQualifiedTypeName(System.String,System.String) + + + + + + + returns + M:PostSharp.Reflection.ReflectionHelper.GetAssemblyQualifiedTypeName(System.String,System.String) + + + + + + + + + summary + M:PostSharp.Reflection.ReflectionHelper.GetEvent(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + declaringType + M:PostSharp.Reflection.ReflectionHelper.GetEvent(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + addMethod + M:PostSharp.Reflection.ReflectionHelper.GetEvent(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + removeMethod + M:PostSharp.Reflection.ReflectionHelper.GetEvent(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + raiseMethod + M:PostSharp.Reflection.ReflectionHelper.GetEvent(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + returns + M:PostSharp.Reflection.ReflectionHelper.GetEvent(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + + + summary + M:PostSharp.Reflection.ReflectionHelper.GetLocation(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + declaringType + M:PostSharp.Reflection.ReflectionHelper.GetLocation(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + getter + M:PostSharp.Reflection.ReflectionHelper.GetLocation(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + setter + M:PostSharp.Reflection.ReflectionHelper.GetLocation(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + returns + M:PostSharp.Reflection.ReflectionHelper.GetLocation(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + + + summary + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + declaringType + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + getter + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + param + setter + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + returns + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo) + + + + + + + + + summary + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Boolean) + + + + + + + param + declaringType + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Boolean) + + + + + + + param + getter + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Boolean) + + + + + + + param + setter + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Boolean) + + + + + + + param + throwOnMissingMember + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Boolean) + + + + + + + returns + M:PostSharp.Reflection.ReflectionHelper.GetProperty(System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Boolean) + + + + + + + Determines whether a is compiler-generated. + + A . + + true if is compiler-generated, false if it is hand-coded. + + + + Determines whether a is compiler-generated. + + A . + + true if is compiler-generated, false if it is hand-coded. + + + + + + summary + M:PostSharp.Reflection.ReflectionHelper.ParseAssemblyQualifiedTypeName(System.String,System.String@,System.String@) + + + + + + + param + typeFullName + M:PostSharp.Reflection.ReflectionHelper.ParseAssemblyQualifiedTypeName(System.String,System.String@,System.String@) + + + + + + + param + typeName + M:PostSharp.Reflection.ReflectionHelper.ParseAssemblyQualifiedTypeName(System.String,System.String@,System.String@) + + + + + + + param + assemblyName + M:PostSharp.Reflection.ReflectionHelper.ParseAssemblyQualifiedTypeName(System.String,System.String@,System.String@) + + + + + + + Set of static methods providing broader access to assembly metadata than + the System.Reflection namespace. These methods are only + available at build time. + + + + + Gets all custom attributes of a given type in the assembly being currently processed. + + + of the custom attribute. + The set of all custom attributes of type + defined in the assembly being currently processed. + + + + Gets all custom attributes of a given type in the assembly being currently processed and specifies + additional options. + + + of the custom attribute. + Any combination of options and + . + The set of all custom attributes of type (or any type derived + from , if the option + is true) defined in the assembly being currently processed. + + + + Gets all custom attributes on a given element of code, including those who have been added indirectly, for + instance through . + + Element of code (, , ...) whose + custom attributes are requested. + The set of all custom attributes added, directly or indirectly, to . + + + + Gets all custom attributes on a given element of code, including those who have been added indirectly, for + instance through and specifies additional options. + + Element of code (, , ...) whose + custom attributes are requested. + + or . + The set of all custom attributes added, directly or indirectly, to . + + + + Gets all custom attributes of a given type on a given element of code, including those who have been added indirectly, for + instance through and specifies additional options. + + Element of code (, , ...) whose + custom attributes are requested. + + or . + Type of the custom attribute. + The set of all custom attributes added, directly or indirectly, to . + + + + Gets all declarations (, + , or ) used + by the body of a given method or constructor. + + A or . + An array of containing one + item for each declaration used by the body of . + + + + Gets all declarations (, + , or ) used + by the body of a given method or constructor and specifies additional options. + + A or . + + or . + An array of containing one + item for each declaration used by the body of . + + + + + Gets the set of types derived from a given class or implementing a given interface. + + A class or interface. + The set of types derived from or implementing . + + + + Gets the set of types derived from a given class or implementing a given interface. + and specifies additional options. + + A class or interface. + Any valid combination of the options , + (partial type match), and + (deep search). + and + cannot be used together. + The set of types derived from or implementing . + + + + Gets all members (, , or + ) of the assembly being processed of a given type. + + Member type. + The set of all members of type in the assembly being processed + + + + Gets all members (, , or + ) of the assembly being processed of a given type and specifies additional options. + + Member type. + Any combination of the options and + (partial type match). + + The set of all members of type in the assembly being processed + + + + Gets the set of methods and constructors whose body references a given (, + , or ). + + The , + , or + whose references are requested. + An array of containing one + item for each method or constructor whose body references . + + + + + Gets the set of methods and constructors whose body references a given (, + , or ) + and specifies whether + reflection wrappers should be used instead of runtime reflection objects. + + The , + , or + whose references are requested. + Any combination of the options + and (partial type match). + An array of containing one + item for each method or constructor whose body references . + + + + + Determines whether a declaration has a custom attribute of a given type, including those who have been added indirectly, for + instance through . + + Element of code (, , ...) whose + custom attributes are requested. + The type of custom attributes. + + true to consider custom attributes derived from , false to consider + only custom attributes strictly of type . + True if has a custom attribute of type , otherwise false. + + + + + + summary + T:PostSharp.Reflection.ReflectionSearchOptions + + + + + + + No option. + + + + + Include relationships referencing a derived type (instead of exactly that type). + + + + + Include relationships referencing a type signature including the given type (instead of only the given type). + + + + + Use reflection wrappers instead of runtime reflection objects. + Reflection wrappers implement standard reflection classes + (, , ...), but do not require the CLR + to load the type. Reflection wrappers should be used only when the CLR is not able to load the type, + for instance because the type is not valid for runtime execution. This happens for instance when the + type has an extern method implemented after compilation by PostSharp. + + + + + Comparer of reflection types () based on content, not reference. + Supports the unbound generic parameters derived from the class. + + + + Determines whether the specified objects are equal. + The first object of type to compare. + The second object of type to compare. + true if the specified objects are equal; otherwise, false. + + + Determines whether the specified objects are equal. + The first object of type to compare. + The second object of type to compare. + true if the specified objects are equal; otherwise, false. + + + Returns a hash code for the specified object. + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + Returns a hash code for the specified object. + The for which a hash code is to be returned. + + + + param + types + M:PostSharp.Reflection.ReflectionTypeComparer.GetHashCode(System.Type[]) + + + + A hash code for the specified object. + The type of is a reference type and is null. + + + + Gets an instance of that does not perform + substitution of generic parameters. + + An instance of . + + + + Gets an instance of that performs + substitution of generic parameters. + + Array of types to be substituted to the + generic method parameters of the left member. + Array of types to be substituted to the + generic type parameters of the left member. + Array of types to be substituted to the + generic method parameters of the right member. + Array of types to be substituted to the + generic type parameters of the right member. + An instance of . + + + + Enumeration of kinds of state machines. + + + + + The method is not implemented by a state machine. + + + + + Iterator method returning an . + + + + + Iterator method returning an . + + + + + Async method. + + + + + Maps a point in IL instructions to location in source code. + + + + + Gets the end column in the source file. + + + + + Gets the end line in the source file. + + + + Indicates whether the current object is equal to another object of the same type. + An object to compare with this object. + true if the current object is equal to the parameter; otherwise, false. + + + Determines whether the specified object is equal to the current object. + The object to compare with the current object. + true if the specified object is equal to the current object; otherwise, false. + + + Serves as the default hash function. + A hash code for the current object. + + + + Gets a symbol meaning that the associated instructions have no source code. + + + + + Determines whether the current symbol means that the associated + instructions have no source code. + + + + + Determines whether the current symbol is a special, non-standard, defined + by PostSharp and supported by PostSharp Tools for Visual Studio. + + + + + Determines whether two sequence points are equal. + + A . + A . + + true if both sequence points are equal, otherwise false. + + + + Determines whether two sequence points are different. + + A . + A . + + true if both sequence points are different, otherwise false. + + + + Document (file of source code) containing the current sequence point. + + + + + Gets the start column in the source file. + + + + + Gets the start line in the source file. + + + + Returns a string that represents the current object. + A string that represents the current object. + + + + Represents a inheritance relationship between two types. + + + + + Gets the base type. If the base type is a generic type, this property contains + a generic type instance. + + + + + Gets the derived type. + + + + + Visibility of types and type members. + + + + + Public. + + + + + Family (protected). + + + + + Assembly (internal). + + + + + Family or assembly (protected internal). + + + + + Family and assembly (no C# equivalent: protected types inside the current assembly). + + + + + Private. + + + + + Classes derived from represent unbound generic arguments. + It is a 'trick' to create unbound generic instances, because C# and System.Reflection + does not make it possible. Use the method to bind the unbound + generic arguments to concrete types. + + + + + Binds unbound generic arguments to concrete types. + + A containing unbound generic arguments + (derived from ). + Array of types to which + the unbound generic type arguments should be bound. + Array of types to which + the unbound generic method parameters should be bound. + A where unbound generic arguments have been replaced + by and . + + + + Classes derived from represent unbound generic method parameters. + + + + + Unbound generic method argument. Reference to the 0-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 1-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 2-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 3-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 4-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 5-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 6-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 7-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 8-th generic method argument. + + + + + Initializes a new . + + + + + Unbound generic method argument. Reference to the 9-th generic method argument. + + + + + Initializes a new . + + + + + Classes derived from represent unbound generic type parameters. + + + + + Unbound generic type argument. Reference to the 0-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 1-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 2-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 3-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 4-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 5-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 6-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 7-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 8-th generic type argument. + + + + + Initializes a new . + + + + + Unbound generic type argument. Reference to the 9-th generic type argument. + + + + + Initializes a new . + + + + + Enumeration of address alignments for access to unmanaged memory represented + by , or . + + + + + Default alignment (machine word). + + + + + 1-byte alignment. + + + + + 2-byte alignment. + + + + + 4-byte alignment. + + + + + Expression that takes the address of the operand. Equivalent to the C# operator &. + + + + + Determines whether the returned pointer is a read-only pointer. + + + + + Expression that has two operands, and . + + + + + Gets the left operand. + + + + + Gets the right operand. + + + + + Block containing other blocks or instructions. + + + + + Gets the collection of exception handlers that protect the block. + + + + + Gets the collection of items in the block. + + + + + Gets a string that uniquely identifies the block (inside the current method body) as a possible branching target. + + + + + Gets the collection of local variables defined for the current block. + + + + + Conditional expression, corresponding to the if keyword in C#. + + + + + Gets the condition expression (the return type does not need to be bool. Zero and null values are considered false). + + + + + Gets the expression executed when evaluates to false, zero, or null. + + + + + Gets the expression executed when evaluates to true or a non-null and non-zero vale. + + + + + Expression representing a build-time constant. + + + + + Gets the constant value. + + + + + Expression equivalent to the instruction. + + + + + Gets the alignment of source and destination buffers. + + + + + Gets the destination address. + + + + + Determines whether the buffers can be modified from a different thread. + + + + + Gets the number of bytes to be copied. + + + + + Gets the source address. + + + + + Represents an expression or an instruction. + + + + + Gets the type of the return value of the current expression, + or if the expression does not return anything (i.e. for pure instructions, for instance a goto + or throw instruction). + + + + + Expression that represents a field. + + + + + Gets the field alignment. + + + + + Gets the field. + + + + + Gets the object containing the field, or null if the field is static. + + + + + Determine whether the field is can be written by a different thread than the current one. + + + + + Unconditional branching instruction. + + + + + Instruction block that must receive control. + + + + + Expression equivalent to the instruction. + + + + + Gets the alignment of the buffers. + + + + + Gets the address of the buffer to be initialized. + + + + + Determines whether the buffers can be modified from a different thread. + + + + + Gets the number of bytes to be initialized. + + + + + Expression that represents a local variable. + + + + + Returns an array of all possible assignments of the at this specific point of the program execution. + + List of possible assignments. + + + + Gets the local variable. + + + + + Gets the value of the at this specific point of the program execution, in case this value + can be determined trivially. + + + + + Expression that depends on a metadata declaration. This expression + is used when compiling the typeof, sizeof or default keywords of C#, among others. + + + + + Gets the declaration (, , , ). + + + + + Expression representing a method call. + + + + + Gets the method arguments. + + + + + Gets the type to which the virtual method call is constrained to (see ). + + + + + Gets the instance on which the method is called, or null if the method is static. + + + + + Determines whether the call is a tail call (see ). + + + + + Determines whether the call is a virtual call. + + + + + Gets the called method. + + + + + Expression that represents a C-like pointer to a method. + + + + + Gets the instance on which the method is defined, or null if the method is static. + + + + + Gets the method. + + + + + Expression that returns a new array. + + + + + Gets the type of elements of the array. + + + + + Gets the number of elements in the array. + + + + + Expression that creates a new object by invoking a constructor. + + + + + Gets the arguments passed to the constructor. + + + + + Gets the constructor. + + + + + Expression that represents a method parameter. + + + + + Gets the parameter. + + + + + Sequence of instructions. + + + + + Gets the list of local variables that the current sequence assigns, and the value to which the local variable is assigned when the current sequence + is fully executed. + + + + + Gets the list of sequences that can branch to the current sequence. + + + + + Gets the list of sequences to which the current sequence branch. + + + + + Represents a statement. A statement is the root of an expression tree. + + + + + Expression evaluated by the statement. + + + + + Gets a next sibling of the current expression within . + + + + + Gets a previous sibling of the current expression within . + + + + + Expression that represent a switch (conditional statement with multiple branches). + + + + + Gets the condition expression. + + + + + Gets the list of target blocks. + + + + + Represents an element of the syntax tree representing a method body. + + + + + Gets the parent element in the tree. + + + + + Gets the parent method body. + + + + + Gets the kind of syntax element. + + + + + Represents an exception handler (either catch, finally or filter) attached to a block. + + + + + Gets the type of handled exception, or null if all exceptions are handled. + + + + + Gets the exception filtering block, or null if all exceptions are handled. + + + + + Gets the local variable containing the exception in the . + + + + + Gets the exception handling block. + + + + + Gets the local variable containing the exception in the . + + + + + Expression that represents a local variable. + + + + + Gets the name of the local variable. + + + + + Gets the ordinal of the local variable. + + + + + Gets the type of the local variable. + + + + + Represents the body of a method. + + + + + Gets the method whose body is represented by the current object. + + + + + Gets the root instruction block of the method. + + + + + Service that exposes the method , which allows to decompile + a method and get a AST representation. + + + + + Decompiles a method and gets an AST representation of it. + + The method to decompile. + The required level of abstraction and detail. + AST representing the at the required level of abstraction and detail. + + + + Represents an expression with a single operand. + + + + + Operand of the unary expression. + + + + + Expression that returns the value stored at an address. Equivalent to the C# keyword *. + + + + + Gets the alignment of the value at the address. + + + + + Determines whether if the location at the address is volatile, i.e. if it can be changed + by a different thread than the current one. + + + + + Expression with no operand. + + + + + Represents the assignment of a local variable to an expression. + + + + + Gets the expression to which the local variable is being assigned. + + + + + Gets the local variable being assigned. + + + + + Enumerates the level of abstraction and the level of details produced by the AST decompiler. + + + + + Returns only the block structure (exception handlers). + + + + + Returns the expression tree. + + + + + Enumeration of kinds of syntax elements (). + + + + + Addition (). + + + + + Addition with overflow checking (). + + + + + Bitwise And (). + + + + + Element of an array ( where is the + array and is the index). + + + + + Length of an array (). + + + + + Assignment (). + + + + + Unconditional branch (). + + + + + Local variable expression (). + + + + + Conditional expression (). + + + + + Cast ( where is the destination type). + + + + + Division (). + + + + + Less than (). + + + + + Less than or equal (). + + + + + Modulo (). + + + + + Multiply with overflow checking (). + + + + + Multiply (). + + + + + Greater than (). + + + + + Greater than (). + + + + + Substract (). + + + + + Substract with overflow checking (). + + + + + Parameter (). + + + + + Current object (this keyword in C#, ). + + + + + Referencing operator (& in C#, see ). + + + + + Constant (). + + + + + Equal (). + + + + + Logical negation (). + + + + + Different (). + + + + + Dereferencing operator (* in C#, see ). + + + + + Bitwise Or (). + + + + + Bitwise And (). + + + + + Bitwise shift to left (). + + + + + Bitwise shit to right (). + + + + + Bitwise negation (). + + + + + Safe cast ( where is the destination type). + + + + + Unbox (). + + + + + Throw exception (). + + + + + Field (). + + + + + Box (). + + + + + Create new array (). + + + + + Get value of typed reference (). + + + + + Check that the value is finite (). + + + + + Make typed reference (). + + + + + Get argument list (). + + + + + Get pointer of method (). + + + + + Allocate on local stack (). + + + + + Default value for given type (). + + + + + Copy buffer (). + + + + + Initialize buffer (). + + + + + Load metadata token (). + + + + + Size of type (). + + + + + Get type of typed reference (). + + + + + Convert to integral type with overflow check (). + + + + + Convert to integral type (). + + + + + Method call (). + + + + + Return (). + + + + + Creates new object (). + + + + + Switch (). + + + + + Instruction block (). + + + + + Catch exception handler (). + + + + + Filter exception handler (). + + + + + Finally exception handler (). + + + + + Method body (). + + + + + Local variable definition (). + + + + + Statement (). + + + + + Formats an to a textual representation, for debugging purposes. + + + + + Initializes a new . + + A where the textual representation will be written. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeFormatter.VisitBinaryExpression(PostSharp.Reflection.Syntax.IBinaryExpression) + + + + + + + Visits an instruction block and, recursively, all syntax nodes. + + The method body to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeFormatter.VisitConditionalExpression(PostSharp.Reflection.Syntax.IConditionalExpression) + + + + + + + Visits an expression of type . + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeFormatter.VisitConstantExpression(PostSharp.Reflection.Syntax.IConstantExpression) + + + + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeFormatter.VisitCopyBufferExpression(PostSharp.Reflection.Syntax.ICopyBufferExpression) + + + + + + + Visits an exception handler and, recursively, the and + (if any). + + The exception handler to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeFormatter.VisitFieldExpression(PostSharp.Reflection.Syntax.IFieldExpression) + + + + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeFormatter.VisitUnaryExpression(PostSharp.Reflection.Syntax.IUnaryExpression) + + + + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Abstract implementation of a visitor of method bodies ( and ). + + + + + + + PostSharp.Reflection.Syntax.SyntaxTreeVisitor + + + + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeVisitor.VisitBinaryExpression(PostSharp.Reflection.Syntax.IBinaryExpression) + + + + + + + Visits an instruction block and, recursively, all syntax nodes. + + The method body to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeVisitor.VisitConditionalExpression(PostSharp.Reflection.Syntax.IConditionalExpression) + + + + + + + Visits an expression of type . + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeVisitor.VisitConstantExpression(PostSharp.Reflection.Syntax.IConstantExpression) + + + + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeVisitor.VisitCopyBufferExpression(PostSharp.Reflection.Syntax.ICopyBufferExpression) + + + + + + + Visits an exception handler and, recursively, the and + (if any). + + The exception handler to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeVisitor.VisitFieldExpression(PostSharp.Reflection.Syntax.IFieldExpression) + + + + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits a local variable definition. + + The local variable to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits a method body and, recursively, all syntax nodes. + + The method body to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits an instruction block and, recursively, all syntax nodes. + + The statement to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits a syntax element and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + + + returns + M:PostSharp.Reflection.Syntax.SyntaxTreeVisitor.VisitUnaryExpression(PostSharp.Reflection.Syntax.IUnaryExpression) + + + + + + + Visits an expression of type and, recursively, all children elements. + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Visits an expression of type . + + The element to be visited. + + , unless the override returns something else. + + + + Provides instances of classes implementing the interface. You should not use this class in user code. + + + + + Gets an instance of a given class implementing the interface. + + A type implementing the interface. + An instance of type . + + + + Security token passed to the method of the interface. + + + + + Custom attribute that, when applied to an assembly, points to a type in the assembly implementing . + + + + + Initializes a new . + + A type derived from in the current assembly. This type must be public and have + a default constructor. + + + + Gets the activator type. + + + + + Encapsulates dotted strings such as namespaces and type names, so their + serialization by can be optimized. + + + + + Initializes a new . + + Value. + + + + Determines whether the current is equal to another one. + + Another . + + true if the current equals other, otherwise false. + + + Indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if and this instance are the same type and represent the same value; otherwise, false. + + + Returns the hash code for this instance. + A 32-bit signed integer that is the hash code for this instance. + + + + Determines whether the current represents a null string. + + + + + Gets an instance of representing a null string. + + + + + Converts a into a . + + A . + The encapsulated by . + + + + Converts a into a . + + A . + A encapsulating . + + + Returns the fully qualified type name of this instance. + A containing a fully qualified type name. + + + + Gets the string encapsulated by the current . + + + + + Exposes a method , which allows to create an instance of a type using the facility. + + + + + Creates an instance of a give type. + + Type of object whose an instance is requested. + A security token. + A new instance of type . + + + + Provides read access to the collection of deserialized arguments. + + + + + Reads a value from the collection, and throws an exception if the value does not exist. + + Argument name. + An optional prefix of , similar to a namespace. + Value type. + The value of the argument named in the given optional . + + + + When deserializing PostSharp aspects, gets the corresponding to the + used at build time. + + + + + Attempts to read a value from the collection, and does not throw an exception if the value does not exist. + + Argument name. + At output, set to the value of the argument named in the given optional . + An optional prefix of , similar to a namespace. + Value type. + + true if the value is defined, otherwise false. + + + + Provides write access to a collection of arguments that need to be serialized. + + + + + When serializing PostSharp access, gets a facility that can be used to serialize metadata (System.Reflection) objects + as MSIL, therefore making them transparent to obfuscation. + + + + + Sets the value of an argument. + + Argument name. + Argument value. The value can be null or must be serializable. + An optional prefix of , similar to a namespace. + + + + Custom attribute that, when applied to a serializable type, specifies that the serializer of this type has + a dependency on another serializer. The custom attribute can be applied at assembly level; it then + applies to all serializable types in this assembly. + + + + + Initializes a new . + + Type of the object to be made serializable. + Serializer type. This type must implement or , + and must have a public default constructor. If is a generic type, if must have the same number + of generic type parameters as , and have a compatible set of constraints. + + + + Gets the type of the object to be made serializable + + + + + Gets the serializer type. + + + + + Interface that can be implemented by serializable classes. + It defines methods and called during serialization. + + + + + Method called after the object has been deserialized. + + + + + Method called before the object is being serialized. + + + + + Defines the semantics of an object serializer. + + + + + Converts a value into a given target type. + + Value to be converted. + target type. + The converted to . + + + + Creates an instance of the given type. + + Type of the instance to be created. + Gives access to arguments required to create the instance. + An instance of type initialized using . + + + + Completes the second phase of deserialization by setting fields and other properties. + + The object being deserialized. + Gives access to field values. + + + + Determines whether should be invoked during deserialization. + The value is false if return fully created object, true otherwise. + + + + + Serializes an object + + + Gives access to arguments that will be passed to the method during deserialization. + Gives access to arguments that will be passed to the method during deserialization. + + + + Exposes a method that allows implementations + of the interface to discover serializer types + for each type being serialized. + + + + + Invoked by once for every type that needs to be serialized, + before is invoked. + + Type being serialized. + + + + Defines a method , which creates instances of the interface for + given object types. + + + + + Creates an instance of the interface for a given object type. + + Type of object being serialized or deserialized. + A new instance implementing the interface. + + + + Provides instances of the interface given the object type. + + + + + Gets the instance of + Type of object being serialized or deserialized. If a surrogate type has been specified during serialization, + this parameter is set to the surrogate type during deserialization. + An instance of able to serialize or deserialize , or null + if there is no known serializer factory for this object. + + + + Gets the surrogate type for a given object type. + + Type of the object being serialized. + The surrogate type for , or null (or ) is + does not require a surrogate type. + + + + Gets the next provider in the chain. + + + + + Custom attribute that, when applied to a field of a class annotated with , + specifies that this field should not be serialized. + + + + + + + PostSharp.Serialization.PNonSerializedAttribute + + + + + + + A serializer designed to serialize the internal structure of types with support for cyclic object graphs. + The is very similar in function and design to the , + but is supported on most platforms and does not require full trust. Both formatters have similar usage: + is replaced by and + by . + + + + + Initializes a new . + + A customizing bindings between types and type names, or null to use the default implementation. + A custom implementation of , or null to use the default implementation. + + + + Deserializes a stream. + + A containing a serialized object graph. + The root object of the object graph serialized in . + + + + When deserializing PostSharp aspects, gets the corresponding to the + used at build time. + + + + + When serializing PostSharp access, gets or sets a facility that can be used to serialize metadata (System.Reflection) objects + as MSIL, therefore making them transparent to obfuscation. + + + + + Serializes an object (and the complete graph whose this object is the root) into a . + + The object to serialize. + The stream where needs to be serialized. + + + + Binds types to names and names to types. Used by the . + + + + + Initializes a new instance of the class. + + + + + Gets the name and the assembly name of a given . + + The . + At output, the name of . + At output, the name of . + + + + Gets a given a type name and an assembly name. + + The type name. + The assembly name. + The required . + + + + Exception thrown by the . + + + + + Initializes a new . + + + + + Deserialization constructor. + + + + + + + Initializes a new and specifies the message. + + Message. + + + + Initializes a new and specifies the message and inner exception. + + Message. + Inner exception. + + + + Custom attribute that, when applied to a type, causes PostSharp to generate a serializer for use by the . + + + + + + + PostSharp.Serialization.PSerializableAttribute + + + + + + + Base serializer for all reference types. + + + + + + + PostSharp.Serialization.ReferenceTypeSerializer + + + + + + + Converts a value into a given target type. + + Value to be converted. + target type. + The converted to . + + + + Creates an instance of the given type. + + Type of the instance to be created. + Gives access to arguments required to create the instance. + An instance of type initialized using . + + + + Completes the second phase of deserialization by setting fields and other properties. + + The object being deserialized. + Gives access to field values. + + + + Serializes an object + + + Gives access to arguments that will be passed to the method during deserialization. + Gives access to arguments that will be passed to the method during deserialization. + + + + Provides some utility method for the current namespace. + + + + + Checks whether a given can be safely serialized. + + The declaration to be serialized. + + null if can be safely serialized, otherwise an exception where the text describes + the reason why the declaration is not serializable. + + + + Checks whether a given , , , , + or can be safely serialized. + + The declaration to be serialized. + + null if can be safely serialized, otherwise an exception where the text describes + the reason why the declaration is not serializable. + + + + Checks whether a given can be safely serialized. + + The declaration to be serialized. + + null if can be safely serialized, otherwise an exception where the text describes + the reason why the declaration is not serializable. + + + + Custom attribute that, when applied to a type, specifies its serializer for use by the . + + + + + Initializes a new . + + Serializer type. This type must implement or , + and must have a public default constructor. If is a generic type, if must have the same number + of generic type parameters as the target type, and have a compatible set of constraints. + + + + Gets the serializer type. + + + + + Provides instances of the interface for object types that have been previously registered + using . + + + + + Initializes a new . + + The next provider in the chain, or null if there is none. + + + + + Maps an object type to a serializer type (using generic type parameters). + + Type of the serialized object. + Type of the serializer. + + + + Maps an object type to a serializer type. + + Type of the serialized object. + Type of the serializer (must be derived from ). + + + + Gets the instance that supports built-in types. + + + + + Gets the instance of + Type of object being serialized or deserialized. If a surrogate type has been specified during serialization, + this parameter is set to the surrogate type during deserialization. + An instance of able to serialize or deserialize , or null + if there is no known serializer factory for this object. + + + + Gets the surrogate type for a given object type. + + Type of the object being serialized. + The surrogate type for , or null (or ) is + does not require a surrogate type. + + + + Forbids further changes in the current . + + + + + Gets the next provider in the chain. + + + + + Base serializer for all value types. + + + + + typeparam + T + T:PostSharp.Serialization.ValueTypeSerializer`1 + + + + + + + + + PostSharp.Serialization.ValueTypeSerializer`1 + + + + + + + Converts a value into a given target type. + + Value to be converted. + target type. + The converted to . + + + + Creates an instance of the given type. + + Gives access to arguments required to create the instance. + An instance of type initialized using . + + + + Serializes an object + + + Gives access to arguments that will be passed to the method during deserialization. + + + \ No newline at end of file diff --git a/bin/Debug/RichTextBoxPrintCtrl.dll b/bin/Debug/RichTextBoxPrintCtrl.dll new file mode 100644 index 0000000000000000000000000000000000000000..d2fbed8b976bb5d99c8f30c2c5df4e4c5cc158fd GIT binary patch literal 10752 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 H^RE6M0V&V& literal 0 HcmV?d00001 diff --git a/bin/Debug/Text files - Shortcut.lnk b/bin/Debug/Text files - Shortcut.lnk new file mode 100644 index 0000000000000000000000000000000000000000..9c662d59ad763d364d656ba8a2cfbf20b05ce722 GIT binary patch literal 1171 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

Pj)TPX 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 literal 0 HcmV?d00001 diff --git a/bin/Debug/bin/Debug/dependencies/RichTextBoxPrintCtrl.dll b/bin/Debug/bin/Debug/dependencies/RichTextBoxPrintCtrl.dll new file mode 100644 index 0000000000000000000000000000000000000000..d2fbed8b976bb5d99c8f30c2c5df4e4c5cc158fd GIT binary patch literal 10752 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 H^RE6M0V&V& literal 0 HcmV?d00001 diff --git a/bin/Debug/bin/Debug/dependencies/file/bin/file.exe b/bin/Debug/bin/Debug/dependencies/file/bin/file.exe new file mode 100644 index 0000000000000000000000000000000000000000..4860ef247d129c9c90fbf00770abec9d7e0a9c42 GIT binary patch literal 45056 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 bSDrH`W#sI&HA7uHKw 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

uE8C`b!oCP?c<8b_vtEXJ5JX-te` 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%0D=`8e|aE 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 NC?KQ3ge(=+{|Anlhphkr literal 0 HcmV?d00001 diff --git a/bin/Debug/dependencies/dimg/imageres_18.ico b/bin/Debug/dependencies/dimg/imageres_18.ico new file mode 100644 index 0000000000000000000000000000000000000000..a16c08b0b3d88631d5ab75d05cbe23beeab93651 GIT binary patch literal 63913 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 literal 0 HcmV?d00001 diff --git a/bin/Debug/dependencies/dimg/imageres_5304.ico b/bin/Debug/dependencies/dimg/imageres_5304.ico new file mode 100644 index 0000000000000000000000000000000000000000..2e03bedb3030c7d2fec5b19d10fe47dc5f988772 GIT binary patch literal 50269 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 literal 0 HcmV?d00001 diff --git a/bin/Debug/dependencies/dimg/imageres_84.ico b/bin/Debug/dependencies/dimg/imageres_84.ico new file mode 100644 index 0000000000000000000000000000000000000000..48d31a2d1467089862c88f0c16458fe7664b4040 GIT binary patch literal 168619 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

Pp*?b+)ecx-6rY2BZR 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

Cl#3KIj`d%d>v@0%%>qUFr+lX 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 $GVrJo4Ig)P-q)GC{ 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]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 Au>b%7 literal 0 HcmV?d00001 diff --git a/bin/Debug/dependencies/file/bin/regex2.dll b/bin/Debug/dependencies/file/bin/regex2.dll new file mode 100644 index 0000000000000000000000000000000000000000..f84a847a0de92fc59fa2ff8494ff700e62b87326 GIT binary patch literal 79360 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 string OBJ_ \b, AOF object +>12 string LIB_ \b, ALF library + +# RISC OS AIF, contains "SWI OS_Exit" at offset 16. +16 lelong 0xef000011 RISC OS AIF executable + +# RISC OS Draw files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string Draw RISC OS Draw file data + +# RISC OS new format font files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string FONT\0 RISC OS outline font data, +>5 byte x version %d +0 string FONT\1 RISC OS 1bpp font data, +>5 byte x version %d +0 string FONT\4 RISC OS 4bpp font data +>5 byte x version %d + +# RISC OS Music files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string Maestro\r RISC OS music file +>8 byte x version %d + +>8 byte x type %d + +# Digital Symphony data files +# From: Bernard Jungen (bern8817@euphonynet.be) +0 string \x02\x01\x13\x13\x13\x01\x0d\x10 Digital Symphony sound sample (RISC OS), +>8 byte x version %d, +>9 pstring x named "%s", +>(9.b+19) byte =0 8-bit logarithmic +>(9.b+19) byte =1 LZW-compressed linear +>(9.b+19) byte =2 8-bit linear signed +>(9.b+19) byte =3 16-bit linear signed +>(9.b+19) byte =4 SigmaDelta-compressed linear +>(9.b+19) byte =5 SigmaDelta-compressed logarithmic +>(9.b+19) byte >5 unknown format + +0 string \x02\x01\x13\x13\x14\x12\x01\x0b Digital Symphony song (RISC OS), +>8 byte x version %d, +>9 byte =1 1 voice, +>9 byte !1 %d voices, +>10 leshort =1 1 track, +>10 leshort !1 %d tracks, +>12 leshort =1 1 pattern +>12 leshort !1 %d patterns + +0 string \x02\x01\x13\x13\x10\x14\x12\x0e +>9 byte =0 Digital Symphony sequence (RISC OS), +>>8 byte x version %d, +>>10 byte =1 1 line, +>>10 byte !1 %d lines, +>>11 leshort =1 1 position +>>11 leshort !1 %d positions +>9 byte =1 Digital Symphony pattern data (RISC OS), +>>8 byte x version %d, +>>10 leshort =1 1 pattern +>>10 leshort !1 %d patterns + +#------------------------------------------------------------------------------ +# adi: file(1) magic for ADi's objects +# From Gregory McGarry +# +0 leshort 0x521c COFF DSP21k +>18 lelong &02 executable, +>18 lelong ^02 +>>18 lelong &01 static object, +>>18 lelong ^01 relocatable object, +>18 lelong &010 stripped +>18 lelong ^010 not stripped + +#------------------------------------------------------------------------------ +# adventure: file(1) magic for Adventure game files +# +# from Allen Garvin +# Edited by Dave Chapeskie Jun 28, 1998 +# Edited by Chris Chittleborough , March 2002 +# +# ALAN +# I assume there are other, lower versions, but these are the only ones I +# saw in the archive. +0 beshort 0x0206 ALAN game data +>2 byte <10 version 2.6%d + + +# Infocom (see z-machine) +#------------------------------------------------------------------------------ +# Z-machine: file(1) magic for Z-machine binaries. +# +# This will match ${TEX_BASE}/texmf/omega/ocp/char2uni/inbig5.ocp which +# appears to be a version-0 Z-machine binary. +# +# The (false match) message is to correct that behavior. Perhaps it is +# not needed. +# +16 belong&0xfe00f0f0 0x3030 Infocom game data +>0 ubyte 0 (false match) +>0 ubyte >0 (Z-machine %d, +>>2 ubeshort x Release %d / +>>18 string >\0 Serial %.6s) + +#------------------------------------------------------------------------------ +# Glulx: file(1) magic for Glulx binaries. +# +# I haven't checked for false matches yet. +# +0 string Glul Glulx game data +>4 beshort x (Version %d +>>6 byte x \b.%d +>>8 byte x \b.%d) +>36 string Info Compiled by Inform + + + +# For Quetzal and blorb magic see iff + + +# TADS (Text Adventure Development System) +# All files are machine-independent (games compile to byte-code) and are tagged +# with a version string of the form "V2..\0" (but TADS 3 is +# on the way). +# Game files start with "TADS2 bin\n\r\032\0" then the compiler version. +0 string TADS2\ bin TADS +>9 belong !0x0A0D1A00 game data, CORRUPTED +>9 belong 0x0A0D1A00 +>>13 string >\0 %s game data +# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version. +0 string TADS2\ rsc TADS +>9 belong !0x0A0D1A00 resource data, CORRUPTED +>9 belong 0x0A0D1A00 +>>13 string >\0 %s resource data +# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian +# 2-byte length N, the N-char name of the game file *without* a NUL (darn!), +# "TADS2 save\n\r\032\0" and the interpreter version. +0 string TADS2\ save/g TADS +>12 belong !0x0A0D1A00 saved game data, CORRUPTED +>12 belong 0x0A0D1A00 +>>(16.s+32) string >\0 %s saved game data +# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter +# version. +0 string TADS2\ save TADS +>10 belong !0x0A0D1A00 saved game data, CORRUPTED +>10 belong 0x0A0D1A00 +>>14 string >\0 %s saved game data + +# Danny Milosavljevic +# this are adrift (adventure game standard) game files, extension .taf +# depending on version magic continues with 0x93453E6139FA (V 4.0) +# 0x9445376139FA (V 3.90) +# 0x9445366139FA (V 3.80) +# this is from source (http://www.adrift.org.uk/) and I have some taf +# files, and checked them. +#0 belong 0x3C423FC9 +#>4 belong 0x6A87C2CF Adrift game file +#!:mime application/x-adrift +#------------------------------------------------------------------------------ +# allegro: file(1) magic for Allegro datafiles +# Toby Deshane +# +0 belong 0x736C6821 Allegro datafile (packed) +0 belong 0x736C682E Allegro datafile (not packed/autodetect) +0 belong 0x736C682B Allegro datafile (appended exe data) + +#------------------------------------------------------------------------------ +# alliant: file(1) magic for Alliant FX series a.out files +# +# If the FX series is the one that had a processor with a 68K-derived +# instruction set, the "short" should probably become "beshort" and the +# "long" should probably become "belong". +# If it's the i860-based one, they should probably become either the +# big-endian or little-endian versions, depending on the mode they ran +# the 860 in.... +# +0 short 0420 0420 Alliant virtual executable +>2 short &0x0020 common library +>16 long >0 not stripped +0 short 0421 0421 Alliant compact executable +>2 short &0x0020 common library +>16 long >0 not stripped +#------------------------------------------------------------------------------ +# alpha architecture description +# + +0 leshort 0603 COFF format alpha +>22 leshort&030000 !020000 executable +>24 leshort 0410 pure +>24 leshort 0413 paged +>22 leshort&020000 !0 dynamically linked +>16 lelong !0 not stripped +>16 lelong 0 stripped +>22 leshort&030000 020000 shared library +>24 leshort 0407 object +>27 byte x - version %d +>26 byte x .%d +>28 byte x -%d + +# Basic recognition of Digital UNIX core dumps - Mike Bremford +# +# The actual magic number is just "Core", followed by a 2-byte version +# number; however, treating any file that begins with "Core" as a Digital +# UNIX core dump file may produce too many false hits, so we include one +# byte of the version number as well; DU 5.0 appears only to be up to +# version 2. +# +0 string Core\001 Alpha COFF format core dump (Digital UNIX) +>24 string >\0 \b, from '%s' +0 string Core\002 Alpha COFF format core dump (Digital UNIX) +>24 string >\0 \b, from '%s' + +#------------------------------------------------------------------------------ +# amanda: file(1) magic for amanda file format +# +0 string AMANDA:\ AMANDA +>8 string TAPESTART\ DATE tape header file, +>>23 string X +>>>25 string >\ Unused %s +>>23 string >\ DATE %s +>8 string FILE\ dump file, +>>13 string >\ DATE %s +#------------------------------------------------------------------------------ +# amigaos: file(1) magic for AmigaOS binary formats: + +# +# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis) +# +0 belong 0x000003fa AmigaOS shared library +0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary +0 belong 0x000003e7 AmigaOS object/library data +# +0 beshort 0xe310 Amiga Workbench +>2 beshort 1 +>>48 byte 1 disk icon +>>48 byte 2 drawer icon +>>48 byte 3 tool icon +>>48 byte 4 project icon +>>48 byte 5 garbage icon +>>48 byte 6 device icon +>>48 byte 7 kickstart icon +>>48 byte 8 workbench application icon +>2 beshort >1 icon, vers. %d +# +# various sound formats from the Amiga +# G=F6tz Waschk +# +0 string FC14 Future Composer 1.4 Module sound file +0 string SMOD Future Composer 1.3 Module sound file +0 string AON4artofnoise Art Of Noise Module sound file +1 string MUGICIAN/SOFTEYES Mugician Module sound file +58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file +0 string Synth4.0 Synthesis Module sound file +0 string ARP. The Holy Noise Module sound file +0 string BeEp\0 JamCracker Module sound file +0 string COSO\0 Hippel-COSO Module sound file +# Too simple (short, pure ASCII, deep), MPi +#26 string V.3 Brian Postma's Soundmon Module sound file v3 +#26 string BPSM Brian Postma's Soundmon Module sound file v3 +#26 string V.2 Brian Postma's Soundmon Module sound file v2 + +# The following are from: "Stefan A. Haubenthal" +0 beshort 0x0f00 AmigaOS bitmap font +0 beshort 0x0f03 AmigaOS outline font +0 belong 0x80001001 AmigaOS outline tag +0 string ##\ version catalog translation +0 string EMOD\0 Amiga E module +8 string ECXM\0 ECX module +0 string/c @database AmigaGuide file + +# Amiga disk types +# +0 string RDSK Rigid Disk Block +>160 string x on %.24s +0 string DOS\0 Amiga DOS disk +0 string DOS\1 Amiga FFS disk +0 string DOS\2 Amiga Inter DOS disk +0 string DOS\3 Amiga Inter FFS disk +0 string DOS\4 Amiga Fastdir DOS disk +0 string DOS\5 Amiga Fastdir FFS disk +0 string KICK Kickstart disk + +# From: Alex Beregszaszi +0 string LZX LZX compressed archive (Amiga) + + +#------------------------------------------------------------------------------ +# animation: file(1) magic for animation/movie formats +# +# animation formats +# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8) +# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com) + +# SGI and Apple formats +0 string MOVI Silicon Graphics movie file +!:mime video/x-sgi-movie +4 string moov Apple QuickTime +!:mime video/quicktime +>12 string mvhd \b movie (fast start) +>12 string mdra \b URL +>12 string cmov \b movie (fast start, compressed header) +>12 string rmra \b multiple URLs +4 string mdat Apple QuickTime movie (unoptimized) +!:mime video/quicktime +#4 string wide Apple QuickTime movie (unoptimized) +#!:mime video/quicktime +#4 string skip Apple QuickTime movie (modified) +#!:mime video/quicktime +#4 string free Apple QuickTime movie (modified) +#!:mime video/quicktime +4 string idsc Apple QuickTime image (fast start) +!:mime image/x-quicktime +#4 string idat Apple QuickTime image (unoptimized) +#!:mime image/x-quicktime +4 string pckg Apple QuickTime compressed archive +!:mime application/x-quicktime-player +4 string/B jP JPEG 2000 image +!:mime image/jp2 +4 string ftyp ISO Media +>8 string isom \b, MPEG v4 system, version 1 +!:mime video/mp4 +>8 string iso2 \b, MPEG v4 system, part 12 revision +>8 string mp41 \b, MPEG v4 system, version 1 +!:mime video/mp4 +>8 string mp42 \b, MPEG v4 system, version 2 +!:mime video/mp4 +>8 string mp7t \b, MPEG v4 system, MPEG v7 XML +>8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML +>8 string/B jp2 \b, JPEG 2000 +!:mime image/jp2 +>8 string 3gp \b, MPEG v4 system, 3GPP +!:mime video/3gpp +>>11 byte 4 \b v4 (H.263/AMR GSM 6.10) +>>11 byte 5 \b v5 (H.263/AMR GSM 6.10) +>>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10) +>8 string mmp4 \b, MPEG v4 system, 3GPP Mobile +!:mime video/mp4 +>8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC +!:mime video/3gpp +>8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC +!:mime audio/mp4 +>8 string/B M4V \b, MPEG v4 system, iTunes AVC-LC +!:mime video/mp4 +>8 string/B M4P \b, MPEG v4 system, iTunes AES encrypted +>8 string/B M4B \b, MPEG v4 system, iTunes bookmarked +>8 string/B qt \b, Apple QuickTime movie +!:mime video/quicktime + +# MPEG sequences +# Scans for all common MPEG header start codes +0 belong 0x00000001 +>4 byte&0x1F 0x07 JVT NAL sequence, H.264 video +>>5 byte 66 \b, baseline +>>5 byte 77 \b, main +>>5 byte 88 \b, extended +>>7 byte x \b @ L %u +0 belong&0xFFFFFF00 0x00000100 +>3 byte 0xBA MPEG sequence +>>4 byte &0x40 \b, v2, program multiplex +>>4 byte ^0x40 \b, v1, system multiplex +>3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header) +>3 byte&0x1F 0x07 MPEG sequence, H.264 video +>>4 byte 66 \b, baseline +>>4 byte 77 \b, main +>>4 byte 88 \b, extended +>>6 byte x \b @ L %u +>3 byte 0xB0 MPEG sequence, v4 +>>5 belong 0x000001B5 +>>>9 byte &0x80 +>>>>10 byte&0xF0 16 \b, video +>>>>10 byte&0xF0 32 \b, still texture +>>>>10 byte&0xF0 48 \b, mesh +>>>>10 byte&0xF0 64 \b, face +>>>9 byte&0xF8 8 \b, video +>>>9 byte&0xF8 16 \b, still texture +>>>9 byte&0xF8 24 \b, mesh +>>>9 byte&0xF8 32 \b, face +>>4 byte 1 \b, simple @ L1 +>>4 byte 2 \b, simple @ L2 +>>4 byte 3 \b, simple @ L3 +>>4 byte 4 \b, simple @ L0 +>>4 byte 17 \b, simple scalable @ L1 +>>4 byte 18 \b, simple scalable @ L2 +>>4 byte 33 \b, core @ L1 +>>4 byte 34 \b, core @ L2 +>>4 byte 50 \b, main @ L2 +>>4 byte 51 \b, main @ L3 +>>4 byte 53 \b, main @ L4 +>>4 byte 66 \b, n-bit @ L2 +>>4 byte 81 \b, scalable texture @ L1 +>>4 byte 97 \b, simple face animation @ L1 +>>4 byte 98 \b, simple face animation @ L2 +>>4 byte 99 \b, simple face basic animation @ L1 +>>4 byte 100 \b, simple face basic animation @ L2 +>>4 byte 113 \b, basic animation text @ L1 +>>4 byte 114 \b, basic animation text @ L2 +>>4 byte 129 \b, hybrid @ L1 +>>4 byte 130 \b, hybrid @ L2 +>>4 byte 145 \b, advanced RT simple @ L! +>>4 byte 146 \b, advanced RT simple @ L2 +>>4 byte 147 \b, advanced RT simple @ L3 +>>4 byte 148 \b, advanced RT simple @ L4 +>>4 byte 161 \b, core scalable @ L1 +>>4 byte 162 \b, core scalable @ L2 +>>4 byte 163 \b, core scalable @ L3 +>>4 byte 177 \b, advanced coding efficiency @ L1 +>>4 byte 178 \b, advanced coding efficiency @ L2 +>>4 byte 179 \b, advanced coding efficiency @ L3 +>>4 byte 180 \b, advanced coding efficiency @ L4 +>>4 byte 193 \b, advanced core @ L1 +>>4 byte 194 \b, advanced core @ L2 +>>4 byte 209 \b, advanced scalable texture @ L1 +>>4 byte 210 \b, advanced scalable texture @ L2 +>>4 byte 211 \b, advanced scalable texture @ L3 +>>4 byte 225 \b, simple studio @ L1 +>>4 byte 226 \b, simple studio @ L2 +>>4 byte 227 \b, simple studio @ L3 +>>4 byte 228 \b, simple studio @ L4 +>>4 byte 229 \b, core studio @ L1 +>>4 byte 230 \b, core studio @ L2 +>>4 byte 231 \b, core studio @ L3 +>>4 byte 232 \b, core studio @ L4 +>>4 byte 240 \b, advanced simple @ L0 +>>4 byte 241 \b, advanced simple @ L1 +>>4 byte 242 \b, advanced simple @ L2 +>>4 byte 243 \b, advanced simple @ L3 +>>4 byte 244 \b, advanced simple @ L4 +>>4 byte 245 \b, advanced simple @ L5 +>>4 byte 247 \b, advanced simple @ L3b +>>4 byte 248 \b, FGS @ L0 +>>4 byte 249 \b, FGS @ L1 +>>4 byte 250 \b, FGS @ L2 +>>4 byte 251 \b, FGS @ L3 +>>4 byte 252 \b, FGS @ L4 +>>4 byte 253 \b, FGS @ L5 +>3 byte 0xB5 MPEG sequence, v4 +>>4 byte &0x80 +>>>5 byte&0xF0 16 \b, video (missing profile header) +>>>5 byte&0xF0 32 \b, still texture (missing profile header) +>>>5 byte&0xF0 48 \b, mesh (missing profile header) +>>>5 byte&0xF0 64 \b, face (missing profile header) +>>4 byte&0xF8 8 \b, video (missing profile header) +>>4 byte&0xF8 16 \b, still texture (missing profile header) +>>4 byte&0xF8 24 \b, mesh (missing profile header) +>>4 byte&0xF8 32 \b, face (missing profile header) +>3 byte 0xB3 MPEG sequence +>>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>12 belong 0x000001B5 \b, v2, +>>>16 byte&0x0F 1 \b HP +>>>16 byte&0x0F 2 \b Spt +>>>16 byte&0x0F 3 \b SNR +>>>16 byte&0x0F 4 \b MP +>>>16 byte&0x0F 5 \b SP +>>>17 byte&0xF0 64 \b@HL +>>>17 byte&0xF0 96 \b@H-14 +>>>17 byte&0xF0 128 \b@ML +>>>17 byte&0xF0 160 \b@LL +>>>17 byte &0x08 \b progressive +>>>17 byte ^0x08 \b interlaced +>>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>11 byte &0x02 +>>>75 byte &0x01 +>>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>>>140 belong 0x000001B5 \b, v2, +>>>>>144 byte&0x0F 1 \b HP +>>>>>144 byte&0x0F 2 \b Spt +>>>>>144 byte&0x0F 3 \b SNR +>>>>>144 byte&0x0F 4 \b MP +>>>>>144 byte&0x0F 5 \b SP +>>>>>145 byte&0xF0 64 \b@HL +>>>>>145 byte&0xF0 96 \b@H-14 +>>>>>145 byte&0xF0 128 \b@ML +>>>>>145 byte&0xF0 160 \b@LL +>>>>>145 byte &0x08 \b progressive +>>>>>145 byte ^0x08 \b interlaced +>>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>76 belong 0x000001B5 \b, v2, +>>>80 byte&0x0F 1 \b HP +>>>80 byte&0x0F 2 \b Spt +>>>80 byte&0x0F 3 \b SNR +>>>80 byte&0x0F 4 \b MP +>>>80 byte&0x0F 5 \b SP +>>>81 byte&0xF0 64 \b@HL +>>>81 byte&0xF0 96 \b@H-14 +>>>81 byte&0xF0 128 \b@ML +>>>81 byte&0xF0 160 \b@LL +>>>81 byte &0x08 \b progressive +>>>81 byte ^0x08 \b interlaced +>>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P +>>>7 byte&0xF0 0x10 \b, 16:9 +>>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I +>>>7 byte&0xF0 0x10 \b, 16:9 +>>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 beshort&0xFFF0 0x2C00 \b, 4CIF +>>>5 beshort&0x0FFF 0x01E0 \b NTSC +>>>5 beshort&0x0FFF 0x0240 \b PAL +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>>7 byte&0xF0 0x80 \b, PAL 4:3 +>>>7 byte&0xF0 0xC0 \b, NTSC 4:3 +>>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 beshort&0xFFF0 0x1600 \b, CIF +>>>5 beshort&0x0FFF 0x00F0 \b NTSC +>>>5 beshort&0x0FFF 0x0120 \b PAL +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>>7 byte&0xF0 0x80 \b, PAL 4:3 +>>>7 byte&0xF0 0xC0 \b, NTSC 4:3 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>>7 byte&0xF0 0x20 \b, 4:3 +>>>>7 byte&0xF0 0x30 \b, 16:9 +>>>>7 byte&0xF0 0x40 \b, 11:5 +>>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU +>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>4 beshort&0xFFF0 0x1E00 \b, SVCD +>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>7 byte&0x0F 1 \b, 23.976 fps +>>7 byte&0x0F 2 \b, 24 fps +>>7 byte&0x0F 3 \b, 25 fps +>>7 byte&0x0F 4 \b, 29.97 fps +>>7 byte&0x0F 5 \b, 30 fps +>>7 byte&0x0F 6 \b, 50 fps +>>7 byte&0x0F 7 \b, 59.94 fps +>>7 byte&0x0F 8 \b, 60 fps +>>11 byte &0x04 \b, Constrained + +# MPEG ADTS Audio (*.mpx/mxa/aac) +# from dreesen@math.fu-berlin.de +# modified to fully support MPEG ADTS + +# MP3, M1A +# modified by Joerg Jenderek +# GRR the original test are too common for many DOS files +# so don't accept as MP3 until we've tested the rate +0 beshort&0xFFFE 0xFFFA +# rates +>2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x20 MPEG ADTS, layer III, v1, 40 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x30 MPEG ADTS, layer III, v1, 48 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x40 MPEG ADTS, layer III, v1, 56 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x50 MPEG ADTS, layer III, v1, 64 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x60 MPEG ADTS, layer III, v1, 80 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x70 MPEG ADTS, layer III, v1, 96 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x80 MPEG ADTS, layer III, v1, 112 kbps +!:mime audio/mpeg +>2 byte&0xF0 0x90 MPEG ADTS, layer III, v1, 128 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xA0 MPEG ADTS, layer III, v1, 160 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xB0 MPEG ADTS, layer III, v1, 192 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xC0 MPEG ADTS, layer III, v1, 224 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xD0 MPEG ADTS, layer III, v1, 256 kbps +!:mime audio/mpeg +>2 byte&0xF0 0xE0 MPEG ADTS, layer III, v1, 320 kbps +!:mime audio/mpeg +# timing +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP2, M1A +0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 +!:mime audio/mpeg +# rates +>2 byte&0xF0 0x10 \b, 32 kbps +>2 byte&0xF0 0x20 \b, 48 kbps +>2 byte&0xF0 0x30 \b, 56 kbps +>2 byte&0xF0 0x40 \b, 64 kbps +>2 byte&0xF0 0x50 \b, 80 kbps +>2 byte&0xF0 0x60 \b, 96 kbps +>2 byte&0xF0 0x70 \b, 112 kbps +>2 byte&0xF0 0x80 \b, 128 kbps +>2 byte&0xF0 0x90 \b, 160 kbps +>2 byte&0xF0 0xA0 \b, 192 kbps +>2 byte&0xF0 0xB0 \b, 224 kbps +>2 byte&0xF0 0xC0 \b, 256 kbps +>2 byte&0xF0 0xD0 \b, 320 kbps +>2 byte&0xF0 0xE0 \b, 384 kbps +# timing +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MPA, M1A +# updated by Joerg Jenderek +# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448 +# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE) +# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries +#0 beshort&0xFFFE 0xFFFE +#>2 ubyte&0xF0 >0x0F +#>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1 +## rate +#>>>2 byte&0xF0 0x10 \b, 32 kbps +#>>>2 byte&0xF0 0x20 \b, 64 kbps +#>>>2 byte&0xF0 0x30 \b, 96 kbps +#>>>2 byte&0xF0 0x40 \b, 128 kbps +#>>>2 byte&0xF0 0x50 \b, 160 kbps +#>>>2 byte&0xF0 0x60 \b, 192 kbps +#>>>2 byte&0xF0 0x70 \b, 224 kbps +#>>>2 byte&0xF0 0x80 \b, 256 kbps +#>>>2 byte&0xF0 0x90 \b, 288 kbps +#>>>2 byte&0xF0 0xA0 \b, 320 kbps +#>>>2 byte&0xF0 0xB0 \b, 352 kbps +#>>>2 byte&0xF0 0xC0 \b, 384 kbps +#>>>2 byte&0xF0 0xD0 \b, 416 kbps +#>>>2 byte&0xF0 0xE0 \b, 448 kbps +## timing +#>>>2 byte&0x0C 0x00 \b, 44.1 kHz +#>>>2 byte&0x0C 0x04 \b, 48 kHz +#>>>2 byte&0x0C 0x08 \b, 32 kHz +## channels/options +#>>>3 byte&0xC0 0x00 \b, Stereo +#>>>3 byte&0xC0 0x40 \b, JntStereo +#>>>3 byte&0xC0 0x80 \b, 2x Monaural +#>>>3 byte&0xC0 0xC0 \b, Monaural +##>1 byte ^0x01 \b, Data Verify +##>2 byte &0x02 \b, Packet Pad +##>2 byte &0x01 \b, Custom Flag +##>3 byte &0x08 \b, Copyrighted +##>3 byte &0x04 \b, Original Source +##>3 byte&0x03 1 \b, NR: 50/15 ms +##>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP3, M2A +0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2 +!:mime audio/mpeg +# rate +>2 byte&0xF0 0x10 \b, 8 kbps +>2 byte&0xF0 0x20 \b, 16 kbps +>2 byte&0xF0 0x30 \b, 24 kbps +>2 byte&0xF0 0x40 \b, 32 kbps +>2 byte&0xF0 0x50 \b, 40 kbps +>2 byte&0xF0 0x60 \b, 48 kbps +>2 byte&0xF0 0x70 \b, 56 kbps +>2 byte&0xF0 0x80 \b, 64 kbps +>2 byte&0xF0 0x90 \b, 80 kbps +>2 byte&0xF0 0xA0 \b, 96 kbps +>2 byte&0xF0 0xB0 \b, 112 kbps +>2 byte&0xF0 0xC0 \b, 128 kbps +>2 byte&0xF0 0xD0 \b, 144 kbps +>2 byte&0xF0 0xE0 \b, 160 kbps +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP2, M2A +0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2 +# rate +>2 byte&0xF0 0x10 \b, 8 kbps +>2 byte&0xF0 0x20 \b, 16 kbps +>2 byte&0xF0 0x30 \b, 24 kbps +>2 byte&0xF0 0x40 \b, 32 kbps +>2 byte&0xF0 0x50 \b, 40 kbps +>2 byte&0xF0 0x60 \b, 48 kbps +>2 byte&0xF0 0x70 \b, 56 kbps +>2 byte&0xF0 0x80 \b, 64 kbps +>2 byte&0xF0 0x90 \b, 80 kbps +>2 byte&0xF0 0xA0 \b, 96 kbps +>2 byte&0xF0 0xB0 \b, 112 kbps +>2 byte&0xF0 0xC0 \b, 128 kbps +>2 byte&0xF0 0xD0 \b, 144 kbps +>2 byte&0xF0 0xE0 \b, 160 kbps +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MPA, M2A +0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2 +# rate +>2 byte&0xF0 0x10 \b, 32 kbps +>2 byte&0xF0 0x20 \b, 48 kbps +>2 byte&0xF0 0x30 \b, 56 kbps +>2 byte&0xF0 0x40 \b, 64 kbps +>2 byte&0xF0 0x50 \b, 80 kbps +>2 byte&0xF0 0x60 \b, 96 kbps +>2 byte&0xF0 0x70 \b, 112 kbps +>2 byte&0xF0 0x80 \b, 128 kbps +>2 byte&0xF0 0x90 \b, 144 kbps +>2 byte&0xF0 0xA0 \b, 160 kbps +>2 byte&0xF0 0xB0 \b, 176 kbps +>2 byte&0xF0 0xC0 \b, 192 kbps +>2 byte&0xF0 0xD0 \b, 224 kbps +>2 byte&0xF0 0xE0 \b, 256 kbps +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP3, M25A +0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5 +# rate +>2 byte&0xF0 0x10 \b, 8 kbps +>2 byte&0xF0 0x20 \b, 16 kbps +>2 byte&0xF0 0x30 \b, 24 kbps +>2 byte&0xF0 0x40 \b, 32 kbps +>2 byte&0xF0 0x50 \b, 40 kbps +>2 byte&0xF0 0x60 \b, 48 kbps +>2 byte&0xF0 0x70 \b, 56 kbps +>2 byte&0xF0 0x80 \b, 64 kbps +>2 byte&0xF0 0x90 \b, 80 kbps +>2 byte&0xF0 0xA0 \b, 96 kbps +>2 byte&0xF0 0xB0 \b, 112 kbps +>2 byte&0xF0 0xC0 \b, 128 kbps +>2 byte&0xF0 0xD0 \b, 144 kbps +>2 byte&0xF0 0xE0 \b, 160 kbps +# timing +>2 byte&0x0C 0x00 \b, 11.025 kHz +>2 byte&0x0C 0x04 \b, 12 kHz +>2 byte&0x0C 0x08 \b, 8 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio + +# Stored AAC streams (instead of the MP4 format) +0 string ADIF MPEG ADIF, AAC +!:mime audio/x-hx-aac-adif +>4 byte &0x80 +>>13 byte &0x10 \b, VBR +>>13 byte ^0x10 \b, CBR +>>16 byte&0x1E 0x02 \b, single stream +>>16 byte&0x1E 0x04 \b, 2 streams +>>16 byte&0x1E 0x06 \b, 3 streams +>>16 byte &0x08 \b, 4 or more streams +>>16 byte &0x10 \b, 8 or more streams +>>4 byte &0x80 \b, Copyrighted +>>13 byte &0x40 \b, Original Source +>>13 byte &0x20 \b, Home Flag +>4 byte ^0x80 +>>4 byte &0x10 \b, VBR +>>4 byte ^0x10 \b, CBR +>>7 byte&0x1E 0x02 \b, single stream +>>7 byte&0x1E 0x04 \b, 2 streams +>>7 byte&0x1E 0x06 \b, 3 streams +>>7 byte &0x08 \b, 4 or more streams +>>7 byte &0x10 \b, 8 or more streams +>>4 byte &0x40 \b, Original Stream(s) +>>4 byte &0x20 \b, Home Source + +# Live or stored single AAC stream (used with MPEG-2 systems) +0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC +!:mime audio/x-hx-aac-adts +>1 byte &0x08 \b, v2 +>1 byte ^0x08 \b, v4 +# profile +>>2 byte &0xC0 \b LTP +>2 byte&0xc0 0x00 \b Main +>2 byte&0xc0 0x40 \b LC +>2 byte&0xc0 0x80 \b SSR +# timing +>2 byte&0x3c 0x00 \b, 96 kHz +>2 byte&0x3c 0x04 \b, 88.2 kHz +>2 byte&0x3c 0x08 \b, 64 kHz +>2 byte&0x3c 0x0c \b, 48 kHz +>2 byte&0x3c 0x10 \b, 44.1 kHz +>2 byte&0x3c 0x14 \b, 32 kHz +>2 byte&0x3c 0x18 \b, 24 kHz +>2 byte&0x3c 0x1c \b, 22.05 kHz +>2 byte&0x3c 0x20 \b, 16 kHz +>2 byte&0x3c 0x24 \b, 12 kHz +>2 byte&0x3c 0x28 \b, 11.025 kHz +>2 byte&0x3c 0x2c \b, 8 kHz +# channels +>2 beshort&0x01c0 0x0040 \b, monaural +>2 beshort&0x01c0 0x0080 \b, stereo +>2 beshort&0x01c0 0x00c0 \b, stereo + center +>2 beshort&0x01c0 0x0100 \b, stereo+center+LFE +>2 beshort&0x01c0 0x0140 \b, surround +>2 beshort&0x01c0 0x0180 \b, surround + LFE +>2 beshort &0x01C0 \b, surround + side +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Custom Flag +#>3 byte &0x20 \b, Original Stream +#>3 byte &0x10 \b, Home Source +#>3 byte &0x08 \b, Copyrighted + +# Live MPEG-4 audio streams (instead of RTP FlexMux) +0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS +!:mime audio/x-mp4a-latm +#>1 beshort&0x1FFF x \b, %u byte packet +>3 byte&0xE0 0x40 +>>4 byte&0x3C 0x04 \b, single stream +>>4 byte&0x3C 0x08 \b, 2 streams +>>4 byte&0x3C 0x0C \b, 3 streams +>>4 byte &0x08 \b, 4 or more streams +>>4 byte &0x20 \b, 8 or more streams +>3 byte&0xC0 0 +>>4 byte&0x78 0x08 \b, single stream +>>4 byte&0x78 0x10 \b, 2 streams +>>4 byte&0x78 0x18 \b, 3 streams +>>4 byte &0x20 \b, 4 or more streams +>>4 byte &0x40 \b, 8 or more streams +# This magic isn't strong enough (matches plausible ISO-8859-1 text) +#0 beshort 0x4DE1 MPEG-4 LO-EP audio stream +#!:mime audio/x-mp4a-latm + +# Summary: FLI animation format +# Created by: Daniel Quinlan +# Modified by (1): Abel Cheung (avoid over-generic detection) +4 leshort 0xAF11 +# standard FLI always has 320x200 resolution and 8 bit color +>8 leshort 320 +>>10 leshort 200 +>>>12 leshort 8 FLI animation, 320x200x8 +!:mime video/x-fli +>>>>6 leshort x \b, %d frames +# frame speed is multiple of 1/70s +>>>>16 leshort x \b, %d/70s per frame + +# Summary: FLC animation format +# Created by: Daniel Quinlan +# Modified by (1): Abel Cheung (avoid over-generic detection) +4 leshort 0xAF12 +# standard FLC always use 8 bit color +>12 leshort 8 FLC animation +!:mime video/x-flc +>>8 leshort x \b, %d +>>10 leshort x \bx%dx8 +>>6 uleshort x \b, %d frames +>>16 uleshort x \b, %dms per frame + +# DL animation format +# XXX - collision with most `mips' magic +# +# I couldn't find a real magic number for these, however, this +# -appears- to work. Note that it might catch other files, too, so be +# careful! +# +# Note that title and author appear in the two 20-byte chunks +# at decimal offsets 2 and 22, respectively, but they are XOR'ed with +# 255 (hex FF)! The DL format is really bad. +# +#0 byte 1 DL version 1, medium format (160x100, 4 images/screen) +#!:mime video/x-unknown +#>42 byte x - %d screens, +#>43 byte x %d commands +#0 byte 2 DL version 2 +#!:mime video/x-unknown +#>1 byte 1 - large format (320x200,1 image/screen), +#>1 byte 2 - medium format (160x100,4 images/screen), +#>1 byte >2 - unknown format, +#>42 byte x %d screens, +#>43 byte x %d commands +# Based on empirical evidence, DL version 3 have several nulls following the +# \003. Most of them start with non-null values at hex offset 0x34 or so. +#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3 + +# iso 13818 transport stream +# +# from Oskar Schirmer Feb 3, 2001 (ISO 13818.1) +# (the following is a little bit restrictive and works fine for a stream +# that starts with PAT properly. it won't work for stream data, that is +# cut from an input device data right in the middle, but this shouldn't +# disturb) +# syncbyte 8 bit 0x47 +# error_ind 1 bit - +# payload_start 1 bit 1 +# priority 1 bit - +# PID 13 bit 0x0000 +# scrambling 2 bit - +# adaptfld_ctrl 2 bit 1 or 3 +# conti_count 4 bit 0 +0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data +>188 byte !0x47 CORRUPTED + +# DIF digital video file format +0 belong&0xffffff00 0x1f070000 DIF +>4 byte &0x01 (DVCPRO) movie file +>4 byte ^0x01 (DV) movie file +>3 byte &0x80 (PAL) +>3 byte ^0x80 (NTSC) + +# Microsoft Advanced Streaming Format (ASF) +0 belong 0x3026b275 Microsoft ASF + +# MNG Video Format, +0 string \x8aMNG MNG video data, +!:mime video/x-mng +>4 belong !0x0d0a1a0a CORRUPTED, +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + +# JNG Video Format, +0 string \x8bJNG JNG video data, +!:mime video/x-jng +>4 belong !0x0d0a1a0a CORRUPTED, +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + +# Vivo video (Wolfram Kleff) +3 string \x0D\x0AVersion:Vivo Vivo video data + +# VRML (Virtual Reality Modelling Language) +0 string/b #VRML\ V1.0\ ascii VRML 1 file +!:mime model/vrml +0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file +!:mime model/vrml + +# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd] +# From Michel Briand +0 string \20 search/1000/cb \, 2002-10-03 +# +0 string HVQM4 %s +>6 string >\0 v%s +>0 byte x GameCube movie, +>0x34 ubeshort x %d x +>0x36 ubeshort x %d, +>0x26 ubeshort x %dµs, +>0x42 ubeshort 0 no audio +>0x42 ubeshort >0 %dHz audio + +# From: "Stefan A. Haubenthal" +0 string DVDVIDEO-VTS Video title set, +>0x21 byte x v%x +0 string DVDVIDEO-VMG Video manager, +>0x21 byte x v%x + +# From: Behan Webster +# NuppelVideo used by Mythtv (*.nuv) +# Note: there are two identical stanzas here differing only in the +# initial string matched. It used to be done with a regex, but we're +# trying to get rid of those. +0 string NuppelVideo MythTV NuppelVideo +>12 string x v%s +>20 lelong x (%d +>24 lelong x \bx%d), +>36 string P \bprogressive, +>36 string I \binterlaced, +>40 ledouble x \baspect:%.2f, +>48 ledouble x \bfps:%.2f +0 string MythTV MythTV NuppelVideo +>12 string x v%s +>20 lelong x (%d +>24 lelong x \bx%d), +>36 string P \bprogressive, +>36 string I \binterlaced, +>40 ledouble x \baspect:%.2f, +>48 ledouble x \bfps:%.2f + +# MPEG file +# MPEG sequences +# FIXME: This section is from the old magic.mime file and needs integrating with the rest +0 belong 0x000001BA +>4 byte &0x40 +!:mime video/mp2p +>4 byte ^0x40 +!:mime video/mpeg +0 belong 0x000001BB +!:mime video/mpeg +0 belong 0x000001B0 +!:mime video/mp4v-es +0 belong 0x000001B5 +!:mime video/mp4v-es +0 belong 0x000001B3 +!:mime video/mpv +0 belong&0xFF5FFF1F 0x47400010 +!:mime video/mp2t +0 belong 0x00000001 +>4 byte&0x1F 0x07 +!:mime video/h264 + +# Type: Bink Video +# URL: http://wiki.multimedia.cx/index.php?title=3DBink_Container +# From: 2008-07-18 +0 string BIK Bink Video +>3 regex =[a-z] rev.%s +#>4 ulelong x size %d +>20 ulelong x \b, %d +>24 ulelong x \bx%d +>8 ulelong x \b, %d frames +>32 ulelong x at rate %d/ +>28 ulelong >1 \b%d +>40 ulelong =0 \b, no audio +>40 ulelong !0 \b, %d audio track +>>40 ulelong !1 \bs +# follow properties of the first audio track only +>>48 uleshort x %dHz +>>51 byte&0x20 0 mono +>>51 byte&0x20 !0 stereo +#>>51 byte&0x10 0 FFT +#>>51 byte&0x10 !0 DCT + +#------------------------------------------------------------------------------ +# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL +# workspaces) +# +0 long 0100554 APL workspace (Ken's original?) +#------------------------------------------------------------------------------ +# apple: file(1) magic for Apple file formats +# +0 search/1 FiLeStArTfIlEsTaRt binscii (apple ][) text +0 string \x0aGL Binary II (apple ][) data +0 string \x76\xff Squeezed (apple ][) data +0 string NuFile NuFile archive (apple ][) data +0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data +0 belong 0x00051600 AppleSingle encoded Macintosh file +0 belong 0x00051607 AppleDouble encoded Macintosh file + +# Type: Apple Emulator 2IMG format +# From: Radek Vokal +0 string 2IMG Apple ][ 2IMG Disk Image +>4 string XGS! \b, XGS +>4 string CTKG \b, Catakig +>4 string ShIm \b, Sheppy's ImageMaker +>4 string WOOF \b, Sweet 16 +>4 string B2TR \b, Bernie ][ the Rescue +>4 string !nfc \b, ASIMOV2 +>4 string x \b, Unknown Format +>0xc byte 00 \b, DOS 3.3 sector order +>>0x10 byte 00 \b, Volume 254 +>>0x10 byte&0x7f x \b, Volume %u +>0xc byte 01 \b, ProDOS sector order +>>0x14 short x \b, %u Blocks +>0xc byte 02 \b, NIB data + +# magic for Newton PDA package formats +# from Ruda Moura +0 string package0 Newton package, NOS 1.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, +>12 belong &0x04000000 Relocation, +>12 belong &0x02000000 UseFasterCompression, +>16 belong x version %d + +0 string package1 Newton package, NOS 2.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, +>12 belong &0x04000000 Relocation, +>12 belong &0x02000000 UseFasterCompression, +>16 belong x version %d + +0 string package4 Newton package, +>8 byte 8 NOS 1.x, +>8 byte 9 NOS 2.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, + +# The following entries for the Apple II are for files that have +# been transferred as raw binary data from an Apple, without having +# been encapsulated by any of the above archivers. +# +# In general, Apple II formats are hard to identify because Apple DOS +# and especially Apple ProDOS have strong typing in the file system and +# therefore programmers never felt much need to include type information +# in the files themselves. +# +# Eric Fischer + +# AppleWorks word processor: +# +# This matches the standard tab stops for an AppleWorks file, but if +# a file has a tab stop set in the first four columns this will fail. +# +# The "O" is really the magic number, but that's so common that it's +# necessary to check the tab stops that follow it to avoid false positives. + +4 string O==== AppleWorks word processor data +>85 byte&0x01 >0 \b, zoomed +>90 byte&0x01 >0 \b, paginated +>92 byte&0x01 >0 \b, with mail merge +#>91 byte x \b, left margin %d + +# AppleWorks database: +# +# This isn't really a magic number, but it's the closest thing to one +# that I could find. The 1 and 2 really mean "order in which you defined +# categories" and "left to right, top to bottom," respectively; the D and R +# mean that the cursor should move either down or right when you press Return. + +#30 string \x01D AppleWorks database data +#30 string \x02D AppleWorks database data +#30 string \x01R AppleWorks database data +#30 string \x02R AppleWorks database data + +# AppleWorks spreadsheet: +# +# Likewise, this isn't really meant as a magic number. The R or C means +# row- or column-order recalculation; the A or M means automatic or manual +# recalculation. + +#131 string RA AppleWorks spreadsheet data +#131 string RM AppleWorks spreadsheet data +#131 string CA AppleWorks spreadsheet data +#131 string CM AppleWorks spreadsheet data + +# Applesoft BASIC: +# +# This is incredibly sloppy, but will be true if the program was +# written at its usual memory location of 2048 and its first line +# number is less than 256. Yuck. + +0 belong&0xff00ff 0x80000 Applesoft BASIC program data +#>2 leshort x \b, first line number %d + +# ORCA/EZ assembler: +# +# This will not identify ORCA/M source files, since those have +# some sort of date code instead of the two zero bytes at 6 and 7 +# XXX Conflicts with ELF +#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data +#>5 byte x \b, build number %d + +# Broderbund Fantavision +# +# I don't know what these values really mean, but they seem to recur. +# Will they cause too many conflicts? + +# Probably :-) +#2 belong&0xFF00FF 0x040008 Fantavision movie data + +# Some attempts at images. +# +# These are actually just bit-for-bit dumps of the frame buffer, so +# there's really no reasonably way to distinguish them except for their +# address (if preserved) -- 8192 or 16384 -- and their length -- 8192 +# or, occasionally, 8184. +# +# Nevertheless this will manage to catch a lot of images that happen +# to have a solid-colored line at the bottom of the screen. + +# GRR: Magic too weak +#8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background +#8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background +#8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background +#8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background +#8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background + +# Beagle Bros. Apple Mechanic fonts + +0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font + +# Apple Universal Disk Image Format (UDIF) - dmg files. +# From Johan Gade. +# These entries are disabled for now until we fix the following issues. +# +# Note there might be some problems with the "VAX COFF executable" +# entry. Note this entry should be placed before the mac filesystem section, +# particularly the "Apple Partition data" entry. +# +# The intended meaning of these tests is, that the file is only of the +# specified type if both of the lines are correct - i.e. if the first +# line matches and the second doesn't then it is not of that type. +# +#0 long 0x7801730d +#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO) +# +# Note that this entry is recognized correctly by the "Apple Partition +# data" entry - however since this entry is more specific - this +# information seems to be more useful. +#0 long 0x45520200 +#>0x410 string disk\ image UDIF read/write image (UDRW) + +# From: Toby Peterson +0 string bplist00 Apple binary property list + +# Apple binary property list (bplist) +# Assumes version bytes are hex. +# Provides content hints for version 0 files. Assumes that the root +# object is the first object (true for CoreFoundation implementation). +# From: David Remahl +0 string bplist +>6 byte x \bCoreFoundation binary property list data, version 0x%c +>>7 byte x \b%c +>6 string 00 \b +>>8 byte&0xF0 0x00 \b +>>>8 byte&0x0F 0x00 \b, root type: null +>>>8 byte&0x0F 0x08 \b, root type: false boolean +>>>8 byte&0x0F 0x09 \b, root type: true boolean +>>8 byte&0xF0 0x10 \b, root type: integer +>>8 byte&0xF0 0x20 \b, root type: real +>>8 byte&0xF0 0x30 \b, root type: date +>>8 byte&0xF0 0x40 \b, root type: data +>>8 byte&0xF0 0x50 \b, root type: ascii string +>>8 byte&0xF0 0x60 \b, root type: unicode string +>>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT) +>>8 byte&0xF0 0xa0 \b, root type: array +>>8 byte&0xF0 0xd0 \b, root type: dictionary + +# Apple/NeXT typedstream data +# Serialization format used by NeXT and Apple for various +# purposes in YellowStep/Cocoa, including some nib files. +# From: David Remahl +2 string typedstream NeXT/Apple typedstream data, big endian +>0 byte x \b, version %hhd +>0 byte <5 \b +>>13 byte 0x81 \b +>>>14 ubeshort x \b, system %hd +2 string streamtyped NeXT/Apple typedstream data, little endian +>0 byte x \b, version %hhd +>0 byte <5 \b +>>13 byte 0x81 \b +>>>14 uleshort x \b, system %hd + +#------------------------------------------------------------------------------ +# CAF: Apple CoreAudio File Format +# +# Container format for high-end audio purposes. +# From: David Remahl +# +0 string caff CoreAudio Format audio file +>4 beshort <10 version %d +>6 beshort x + + +#------------------------------------------------------------------------------ +# Keychain database files +0 string kych Mac OS X Keychain File + +#------------------------------------------------------------------------------ +# Code Signing related file types +0 belong 0xfade0c00 Mac OS X Code Requirement +>8 belong 1 (opExpr) +>4 belong x - %d bytes + +0 belong 0xfade0c01 Mac OS X Code Requirement Set +>8 belong >1 containing %d items +>4 belong x - %d bytes + +0 belong 0xfade0c02 Mac OS X Code Directory +>8 belong x version %x +>12 belong >0 flags 0x%x +>4 belong x - %d bytes + +0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable) +>4 belong x - %d bytes + +0 belong 0xfade0cc1 Mac OS X Detached Code Signature +>8 belong >1 (%d elements) +>4 belong x - %d bytes + +# From: "Nelson A. de Oliveira" +# .vdi +4 string innotek\ VirtualBox\ Disk\ Image %s + +#------------------------------------------------------------------------------ +# applix: file(1) magic for Applixware +# From: Peter Soos +# +0 string *BEGIN Applixware +>7 string WORDS Words Document +>7 string GRAPHICS Graphic +>7 string RASTER Bitmap +>7 string SPREADSHEETS Spreadsheet +>7 string MACRO Macro +>7 string BUILDER Builder Object +#------------------------------------------------------------------------------ +# archive: file(1) magic for archive formats (see also "msdos" for self- +# extracting compressed archives) +# +# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc. +# pre-POSIX "tar" archives are handled in the C code. + +# POSIX tar archives +257 string ustar\0 POSIX tar archive +!:mime application/x-tar # encoding: posix +257 string ustar\040\040\0 GNU tar archive +!:mime application/x-tar # encoding: gnu + +# cpio archives +# +# Yes, the top two "cpio archive" formats *are* supposed to just be "short". +# The idea is to indicate archives produced on machines with the same +# byte order as the machine running "file" with "cpio archive", and +# to indicate archives produced on machines with the opposite byte order +# from the machine running "file" with "byte-swapped cpio archive". +# +# The SVR4 "cpio(4)" hints that there are additional formats, but they +# are defined as "short"s; I think all the new formats are +# character-header formats and thus are strings, not numbers. +0 short 070707 cpio archive +!:mime application/x-cpio +0 short 0143561 byte-swapped cpio archive +!:mime application/x-cpio # encoding: swapped +0 string 070707 ASCII cpio archive (pre-SVR4 or odc) +0 string 070701 ASCII cpio archive (SVR4 with no CRC) +0 string 070702 ASCII cpio archive (SVR4 with CRC) + +# Debian package (needs to go before regular portable archives) +# +0 string =!\ndebian +!:mime application/x-debian-package +>8 string debian-split part of multipart Debian package +>8 string debian-binary Debian binary package +>8 string !debian +>68 string >\0 (format %s) +# These next two lines do not work, because a bzip2 Debian archive +# still uses gzip for the control.tar (first in the archive). Only +# data.tar varies, and the location of its filename varies too. +# file/libmagic does not current have support for ascii-string based +# (offsets) as of 2005-09-15. +#>81 string bz2 \b, uses bzip2 compression +#>84 string gz \b, uses gzip compression +#>136 ledate x created: %s + +# other archives +0 long 0177555 very old archive +0 short 0177555 very old PDP-11 archive +0 long 0177545 old archive +0 short 0177545 old PDP-11 archive +0 long 0100554 apl workspace +0 string = archive +!:mime application/x-archive + +# MIPS archive (needs to go before regular portable archives) +# +0 string =!\n__________E MIPS archive +>20 string U with MIPS Ucode members +>21 string L with MIPSEL members +>21 string B with MIPSEB members +>19 string L and an EL hash table +>19 string B and an EB hash table +>22 string X -- out of date + +0 search/1 -h- Software Tools format archive text + +# +# XXX - why are there multiple thingies? Note that 0x213c6172 is +# "! current ar archive +# 0 long 0x213c6172 archive file +# +# and for SVR1 archives, we have: +# +# 0 string \ System V Release 1 ar archive +# 0 string = archive +# +# XXX - did Aegis really store shared libraries, breakpointed modules, +# and absolute code program modules in the same format as new-style +# "ar" archives? +# +0 string =! current ar archive +!:mime application/x-archive +>8 string __.SYMDEF random library +>0 belong =65538 - pre SR9.5 +>0 belong =65539 - post SR9.5 +>0 beshort 2 - object archive +>0 beshort 3 - shared library module +>0 beshort 4 - debug break-pointed module +>0 beshort 5 - absolute code program module +0 string \ System V Release 1 ar archive +0 string = archive +# +# XXX - from "vax", which appears to collect a bunch of byte-swapped +# thingies, to help you recognize VAX files on big-endian machines; +# with "leshort", "lelong", and "string", that's no longer necessary.... +# +0 belong 0x65ff0000 VAX 3.0 archive +0 belong 0x3c61723e VAX 5.0 archive +# +0 long 0x213c6172 archive file +0 lelong 0177555 very old VAX archive +0 leshort 0177555 very old PDP-11 archive +# +# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus +# be a random library (it said 0xff65 rather than 0177545). +# +0 lelong 0177545 old VAX archive +>8 string __.SYMDEF random library +0 leshort 0177545 old PDP-11 archive +>8 string __.SYMDEF random library +# +# From "pdp" (but why a 4-byte quantity?) +# +0 lelong 0x39bed PDP-11 old archive +0 lelong 0x39bee PDP-11 4.0 archive + +# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com) +# +# The first byte is the magic (0x1a), byte 2 is the compression type for +# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS +# filename of the first file (null terminated). Since some types collide +# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%), +# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo. +0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000031a ARC archive data, packed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched +!:mime application/x-arc +# [JW] stuff taken from idarc, obviously ARC successors: +0 lelong&0x8080ffff 0x00000a1a PAK archive data +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000141a ARC+ archive data +!:mime application/x-arc +0 lelong&0x8080ffff 0x0000481a HYP archive data +!:mime application/x-arc + +# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk) +# I can't create either SPARK or ArcFS archives so I have not tested this stuff +# [GRR: the original entries collide with ARC, above; replaced with combined +# version (not tested)] +#0 byte 0x1a RISC OS archive (spark format) +0 string \032archive RISC OS archive (ArcFS format) +0 string Archive\000 RISC OS archive (ArcFS format) + +# All these were taken from idarc, many could not be verified. Unfortunately, +# there were many low-quality sigs, i.e. easy to trigger false positives. +# Please notify me of any real-world fishy/ambiguous signatures and I'll try +# to get my hands on the actual archiver and see if I find something better. [JW] +# probably many can be enhanced by finding some 0-byte or control char near the start + +# idarc calls this Crush/Uncompressed... *shrug* +0 string CRUSH Crush archive data +# Squeeze It (.sqz) +0 string HLSQZ Squeeze It archive data +# SQWEZ +0 string SQWEZ SQWEZ archive data +# HPack (.hpk) +0 string HPAK HPack archive data +# HAP +0 string \x91\x33HF HAP archive data +# MD/MDCD +0 string MDmd MDCD archive data +# LIM +0 string LIM\x1a LIM archive data +# SAR +3 string LH5 SAR archive data +# BSArc/BS2 +0 string \212\3SB \0 BSArc/BS2 archive data +# MAR +2 string =-ah MAR archive data +# ACB +0 belong&0x00f800ff 0x00800000 ACB archive data +# CPZ +# TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data +# JRC +0 string JRchive JRC archive data +# Quantum +0 string DS\0 Quantum archive data +# ReSOF +0 string PK\3\6 ReSOF archive data +# QuArk +0 string 7\4 QuArk archive data +# YAC +14 string YC YAC archive data +# X1 +0 string X1 X1 archive data +0 string XhDr X1 archive data +# CDC Codec (.dqt) +0 belong&0xffffe000 0x76ff2000 CDC Codec archive data +# AMGC +0 string \xad6" AMGC archive data +# NuLIB +0 string NõFélå NuLIB archive data +# PakLeo +0 string LEOLZW PAKLeo archive data +# ChArc +0 string SChF ChArc archive data +# PSA +0 string PSA PSA archive data +# CrossePAC +0 string DSIGDCC CrossePAC archive data +# Freeze +0 string \x1f\x9f\x4a\x10\x0a Freeze archive data +# KBoom +0 string ¨MP¨ KBoom archive data +# NSQ, must go after CDC Codec +0 string \x76\xff NSQ archive data +# DPA +0 string Dirk\ Paehl DPA archive data +# BA +# TODO: idarc says "bytes 0-2 == bytes 3-5" +# TTComp +0 string \0\6 TTComp archive data +# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation? +0 string ESP ESP archive data +# ZPack +0 string \1ZPK\1 ZPack archive data +# Sky +0 string \xbc\x40 Sky archive data +# UFA +0 string UFA UFA archive data +# Dry +0 string =-H2O DRY archive data +# FoxSQZ +0 string FOXSQZ FoxSQZ archive data +# AR7 +0 string ,AR7 AR7 archive data +# PPMZ +0 string PPMZ PPMZ archive data +# MS Compress +4 string \x88\xf0\x27 MS Compress archive data +# updated by Joerg Jenderek +>9 string \0 +>>0 string KWAJ +>>>7 string \321\003 MS Compress archive data +>>>>14 ulong >0 \b, original size: %ld bytes +>>>>18 ubyte >0x65 +>>>>>18 string x \b, was %.8s +>>>>>(10.b-4) string x \b.%.3s +# MP3 (archiver, not lossy audio compression) +0 string MP3\x1a MP3-Archiver archive data +# ZET +0 string OZÝ ZET archive data +# TSComp +0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data +# ARQ +0 string gW\4\1 ARQ archive data +# Squash +3 string OctSqu Squash archive data +# Terse +0 string \5\1\1\0 Terse archive data +# PUCrunch +0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data +# UHarc +0 string UHA UHarc archive data +# ABComp +0 string \2AB ABComp archive data +0 string \3AB2 ABComp archive data +# CMP +0 string CO\0 CMP archive data +# Splint +0 string \x93\xb9\x06 Splint archive data +# InstallShield +0 string \x13\x5d\x65\x8c InstallShield Z archive Data +# Gather +1 string GTH Gather archive data +# BOA +0 string BOA BOA archive data +# RAX +0 string ULEB\xa RAX archive data +# Xtreme +0 string ULEB\0 Xtreme archive data +# Pack Magic +0 string @â\1\0 Pack Magic archive data +# BTS +0 belong&0xfeffffff 0x1a034465 BTS archive data +# ELI 5750 +0 string Ora\ ELI 5750 archive data +# QFC +0 string \x1aFC\x1a QFC archive data +0 string \x1aQF\x1a QFC archive data +# PRO-PACK +0 string RNC PRO-PACK archive data +# 777 +0 string 777 777 archive data +# LZS221 +0 string sTaC LZS221 archive data +# HPA +0 string HPA HPA archive data +# Arhangel +0 string LG Arhangel archive data +# EXP1, uses bzip2 +0 string 0123456789012345BZh EXP1 archive data +# IMP +0 string IMP\xa IMP archive data +# NRV +0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data +# Squish +0 string \x73\xb2\x90\xf4 Squish archive data +# Par +0 string PHILIPP Par archive data +0 string PAR Par archive data +# HIT +0 string UB HIT archive data +# SBX +0 belong&0xfffff000 0x53423000 SBX archive data +# NaShrink +0 string NSK NaShrink archive data +# SAPCAR +0 string #\ CAR\ archive\ header SAPCAR archive data +0 string CAR\ 2.00RG SAPCAR archive data +# Disintegrator +0 string DST Disintegrator archive data +# ASD +0 string ASD ASD archive data +# InstallShield CAB +0 string ISc( InstallShield CAB +# TOP4 +0 string T4\x1a TOP4 archive data +# BatComp left out: sig looks like COM executable +# so TODO: get real 4dos batcomp file and find sig +# BlakHole +0 string BH\5\7 BlakHole archive data +# BIX +0 string BIX0 BIX archive data +# ChiefLZA +0 string ChfLZ ChiefLZA archive data +# Blink +0 string Blink Blink archive data +# Logitech Compress +0 string \xda\xfa Logitech Compress archive data +# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE) +1 string (C)\ STEPANYUK ARS-Sfx archive data +# AKT/AKT32 +0 string AKT32 AKT32 archive data +0 string AKT AKT archive data +# NPack +0 string MSTSM NPack archive data +# PFT +0 string \0\x50\0\x14 PFT archive data +# SemOne +0 string SEM SemOne archive data +# PPMD +0 string \x8f\xaf\xac\x84 PPMD archive data +# FIZ +0 string FIZ FIZ archive data +# MSXiE +0 belong&0xfffff0f0 0x4d530000 MSXiE archive data +# DeepFreezer +0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data +# DC +0 string =2 byte x \b, version %i +>3 byte x \b.%i +# ZZip archiver (.zz) +0 string ZZ\ \0\0 ZZip archive data +0 string ZZ0 ZZip archive data +# PAQ archiver (.paq) +0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data +0 string PAQ PAQ archive data +>3 byte&0xf0 0x30 +>>3 byte x (v%c) +# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP) +0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data +0 string JARCS JAR (ARJ Software, Inc.) archive data + +# ARJ archiver (jason@jarthur.Claremont.EDU) +0 leshort 0xea60 ARJ archive data +!:mime application/x-arj +>5 byte x \b, v%d, +>8 byte &0x04 multi-volume, +>8 byte &0x10 slash-switched, +>8 byte &0x20 backup, +>34 string x original name: %s, +>7 byte 0 os: MS-DOS +>7 byte 1 os: PRIMOS +>7 byte 2 os: Unix +>7 byte 3 os: Amiga +>7 byte 4 os: Macintosh +>7 byte 5 os: OS/2 +>7 byte 6 os: Apple ][ GS +>7 byte 7 os: Atari ST +>7 byte 8 os: NeXT +>7 byte 9 os: VAX/VMS +>3 byte >0 %d] +# [JW] idarc says this is also possible +2 leshort 0xea60 ARJ archive data + +# HA archiver (Greg Roelofs, newt@uchicago.edu) +# This is a really bad format. A file containing HAWAII will match this... +#0 string HA HA archive data, +#>2 leshort =1 1 file, +#>2 leshort >1 %u files, +#>4 byte&0x0f =0 first is type CPY +#>4 byte&0x0f =1 first is type ASC +#>4 byte&0x0f =2 first is type HSC +#>4 byte&0x0f =0x0e first is type DIR +#>4 byte&0x0f =0x0f first is type SPECIAL +# suggestion: at least identify small archives (<1024 files) +0 belong&0xffff00fc 0x48410000 HA archive data +>2 leshort =1 1 file, +>2 leshort >1 %u files, +>4 byte&0x0f =0 first is type CPY +>4 byte&0x0f =1 first is type ASC +>4 byte&0x0f =2 first is type HSC +>4 byte&0x0f =0x0e first is type DIR +>4 byte&0x0f =0x0f first is type SPECIAL + +# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz) +0 string HPAK HPACK archive data + +# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net +0 string \351,\001JAM\ JAM archive, +>7 string >\0 version %.4s +>0x26 byte =0x27 - +>>0x2b string >\0 label %.11s, +>>0x27 lelong x serial %08x, +>>0x36 string >\0 fstype %.8s + +# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) +2 string -lh0- LHarc 1.x/ARX archive data [lh0] +!:mime application/x-lharc +2 string -lh1- LHarc 1.x/ARX archive data [lh1] +!:mime application/x-lharc +2 string -lz4- LHarc 1.x archive data [lz4] +!:mime application/x-lharc +2 string -lz5- LHarc 1.x archive data [lz5] +!:mime application/x-lharc +# [never seen any but the last; -lh4- reported in comp.compression:] +2 string -lzs- LHa/LZS archive data [lzs] +!:mime application/x-lha +2 string -lh\40- LHa 2.x? archive data [lh ] +!:mime application/x-lha +2 string -lhd- LHa 2.x? archive data [lhd] +!:mime application/x-lha +2 string -lh2- LHa 2.x? archive data [lh2] +!:mime application/x-lha +2 string -lh3- LHa 2.x? archive data [lh3] +!:mime application/x-lha +2 string -lh4- LHa (2.x) archive data [lh4] +!:mime application/x-lha +2 string -lh5- LHa (2.x) archive data [lh5] +!:mime application/x-lha +2 string -lh6- LHa (2.x) archive data [lh6] +!:mime application/x-lha +2 string -lh7- LHa (2.x)/LHark archive data [lh7] +!:mime application/x-lha +>20 byte x - header level %d +# taken from idarc [JW] +2 string -lZ PUT archive data +2 string -lz LZS archive data +2 string -sw1- Swag archive data + +# RAR archiver (Greg Roelofs, newt@uchicago.edu) +0 string Rar! RAR archive data, +!:mime application/x-rar +>44 byte x v%0x, +>10 byte >0 flags: +>>10 byte &0x01 Archive volume, +>>10 byte &0x02 Commented, +>>10 byte &0x04 Locked, +>>10 byte &0x08 Solid, +>>10 byte &0x20 Authenticated, +>35 byte 0 os: MS-DOS +>35 byte 1 os: OS/2 +>35 byte 2 os: Win32 +>35 byte 3 os: Unix +# some old version? idarc says: +0 string RE\x7e\x5e RAR archive data + +# SQUISH archiver (Greg Roelofs, newt@uchicago.edu) +0 string SQSH squished archive data (Acorn RISCOS) + +# UC2 archiver (Greg Roelofs, newt@uchicago.edu) +# [JW] see exe section for self-extracting version +0 string UC2\x1a UC2 archive data + +# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) +0 string PK\003\004 +>4 byte 0x00 Zip archive data +!:mime application/zip +>4 byte 0x09 Zip archive data, at least v0.9 to extract +!:mime application/zip +>4 byte 0x0a Zip archive data, at least v1.0 to extract +!:mime application/zip +>4 byte 0x0b Zip archive data, at least v1.1 to extract +!:mime application/zip +>0x161 string WINZIP Zip archive data, WinZIP self-extracting +!:mime application/zip +>4 byte 0x14 +>>30 ubelong !0x6d696d65 Zip archive data, at least v2.0 to extract +!:mime application/zip + +# OpenOffice.org / KOffice / StarOffice documents +# Listed here because they ARE zip files +# +# From: Abel Cheung +>4 byte 0x14 +>>30 string mimetype + +# KOffice (1.2 or above) formats +>>>50 string vnd.kde. KOffice (>=1.2) +>>>>58 string karbon Karbon document +>>>>58 string kchart KChart document +>>>>58 string kformula KFormula document +>>>>58 string kivio Kivio document +>>>>58 string kontour Kontour document +>>>>58 string kpresenter KPresenter document +>>>>58 string kspread KSpread document +>>>>58 string kword KWord document + +# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7) +>>>50 string vnd.sun.xml. OpenOffice.org 1.x +>>>>62 string writer Writer +>>>>>68 byte !0x2e document +>>>>>68 string .template template +>>>>>68 string .global global document +>>>>62 string calc Calc +>>>>>66 byte !0x2e spreadsheet +>>>>>66 string .template template +>>>>62 string draw Draw +>>>>>66 byte !0x2e document +>>>>>66 string .template template +>>>>62 string impress Impress +>>>>>69 byte !0x2e presentation +>>>>>69 string .template template +>>>>62 string math Math document +>>>>62 string base Database file + +# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8) +# http://lists.oasis-open.org/archives/office/200505/msg00006.html +>>>50 string vnd.oasis.opendocument. OpenDocument +>>>>73 string text +>>>>>77 byte !0x2d Text +!:mime application/vnd.oasis.opendocument.text +>>>>>77 string -template Text Template +>>>>>77 string -web HTML Document Template +>>>>>77 string -master Master Document +>>>>73 string graphics Drawing +>>>>>81 string -template Template +>>>>73 string presentation Presentation +>>>>>85 string -template Template +>>>>73 string spreadsheet Spreadsheet +>>>>>84 string -template Template +>>>>73 string chart Chart +>>>>>78 string -template Template +>>>>73 string formula Formula +>>>>>80 string -template Template +>>>>73 string database Database +>>>>73 string image Image + +# Zoo archiver +20 lelong 0xfdc4a7dc Zoo archive data +!:mime application/x-zoo +>4 byte >48 \b, v%c. +>>6 byte >47 \b%c +>>>7 byte >47 \b%c +>32 byte >0 \b, modify: v%d +>>33 byte x \b.%d+ +>42 lelong 0xfdc4a7dc \b, +>>70 byte >0 extract: v%d +>>>71 byte x \b.%d+ + +# Shell archives +10 string #\ This\ is\ a\ shell\ archive shell archive text +!:mime application/octet-stream + +# +# LBR. NB: May conflict with the questionable +# "binary Computer Graphics Metafile" format. +# +0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data +# +# PMA (CP/M derivative of LHA) +# +2 string -pm0- PMarc archive data [pm0] +2 string -pm1- PMarc archive data [pm1] +2 string -pm2- PMarc archive data [pm2] +2 string -pms- PMarc SFX archive (CP/M, DOS) +5 string -pc1- PopCom compressed executable (CP/M) + +# From Rafael Laboissiere +# The Project Revision Control System (see +# http://prcs.sourceforge.net) generates a packaged project +# file which is recognized by the following entry: +0 leshort 0xeb81 PRCS packaged project + +# Microsoft cabinets +# by David Necas (Yeti) +#0 string MSCF\0\0\0\0 Microsoft cabinet file data, +#>25 byte x v%d +#>24 byte x \b.%d +# MPi: All CABs have version 1.3, so this is pointless. +# Better magic in debian-additions. + +# GTKtalog catalogs +# by David Necas (Yeti) +4 string gtktalog\ GTKtalog catalog data, +>13 string 3 version 3 +>>14 beshort 0x677a (gzipped) +>>14 beshort !0x677a (not gzipped) +>13 string >3 version %s + +############################################################################ +# Parity archive reconstruction file, the 'par' file format now used on Usenet. +0 string PAR\0 PARity archive data +>48 leshort =0 - Index file +>48 leshort >0 - file number %d + +# Felix von Leitner +0 string d8:announce BitTorrent file +!:mime application/x-bittorrent + +# Atari MSA archive - Teemu Hukkanen +0 beshort 0x0e0f Atari MSA archive data +>2 beshort x \b, %d sectors per track +>4 beshort 0 \b, 1 sided +>4 beshort 1 \b, 2 sided +>6 beshort x \b, starting track: %d +>8 beshort x \b, ending track: %d + +# Alternate ZIP string (amc@arwen.cs.berkeley.edu) +0 string PK00PK\003\004 Zip archive data + +# ACE archive (from http://www.wotsit.org/download.asp?f=ace) +# by Stefan `Sec` Zehl +7 string **ACE** ACE archive data +>15 byte >0 version %d +>16 byte =0x00 \b, from MS-DOS +>16 byte =0x01 \b, from OS/2 +>16 byte =0x02 \b, from Win/32 +>16 byte =0x03 \b, from Unix +>16 byte =0x04 \b, from MacOS +>16 byte =0x05 \b, from WinNT +>16 byte =0x06 \b, from Primos +>16 byte =0x07 \b, from AppleGS +>16 byte =0x08 \b, from Atari +>16 byte =0x09 \b, from Vax/VMS +>16 byte =0x0A \b, from Amiga +>16 byte =0x0B \b, from Next +>14 byte x \b, version %d to extract +>5 leshort &0x0080 \b, multiple volumes, +>>17 byte x \b (part %d), +>5 leshort &0x0002 \b, contains comment +>5 leshort &0x0200 \b, sfx +>5 leshort &0x0400 \b, small dictionary +>5 leshort &0x0800 \b, multi-volume +>5 leshort &0x1000 \b, contains AV-String +>>30 string \x16*UNREGISTERED\x20VERSION* (unregistered) +>5 leshort &0x2000 \b, with recovery record +>5 leshort &0x4000 \b, locked +>5 leshort &0x8000 \b, solid +# Date in MS-DOS format (whatever that is) +#>18 lelong x Created on + +# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann +# +0x1A string sfArk sfArk compressed Soundfont +>0x15 string 2 +>>0x1 string >\0 Version %s +>>0x2A string >\0 : %s + +# DR-DOS 7.03 Packed File *.??_ +0 string Packed\ File\ Personal NetWare Packed File +>12 string x \b, was "%.12s" + +# EET archive +# From: Tilman Sauerbeck +0 belong 0x1ee7ff00 EET archive +!:mime application/x-eet + +# rzip archives +0 string RZIP rzip compressed data +>4 byte x - version %d +>5 byte x \b.%d +>6 belong x (%d bytes) + +# From: "Robert Dale" +0 belong 123 dar archive, +>4 belong x label "%.8x +>>8 belong x %.8x +>>>12 beshort x %.4x" +>14 byte 0x54 end slice +>14 beshort 0x4e4e multi-part +>14 beshort 0x4e53 multi-part, with -S + +# Symbian installation files +# http://www.thouky.co.uk/software/psifs/sis.html +# http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf +8 lelong 0x10000419 Symbian installation file +!:mime application/vnd.symbian.install +>4 lelong 0x1000006D (EPOC release 3/4/5) +>4 lelong 0x10003A12 (EPOC release 6) +0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x) +!:mime x-epoc/x-sisx-app + +# From "Nelson A. de Oliveira" +0 string MPQ\032 MoPaQ (MPQ) archive + +# From: Dirk Jagdmann +# xar archive format: http://code.google.com/p/xar/ +0 string xar! xar archive +>6 beshort x - version %ld + +# From: "Nelson A. de Oliveira" +# .kgb +0 string KGB_arch KGB Archiver file +>10 string x with compression level %.1s + +# xar (eXtensible ARchiver) archive +# From: "David Remahl" +0 string xar! xar archive +#>4 beshort x header size %d +>6 beshort x version %d, +#>8 quad x compressed TOC: %d, +#>16 quad x uncompressed TOC: %d, +>24 belong 0 no checksum +>24 belong 1 SHA-1 checksum +>24 belong 2 MD5 checksum + + +#------------------------------------------------------------------------------ +# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character +# strings as "long" - we assume they're just strings: +# From: guy@netapp.com (Guy Harris) +# +0 string *STA Aster*x +>7 string WORD Words Document +>7 string GRAP Graphic +>7 string SPRE Spreadsheet +>7 string MACR Macro +0 string 2278 Aster*x Version 2 +>29 byte 0x36 Words Document +>29 byte 0x35 Graphic +>29 byte 0x32 Spreadsheet +>29 byte 0x38 Macro + + +#------------------------------------------------------------------------------ +# att3b: file(1) magic for AT&T 3B machines +# +# The `versions' should be un-commented if they work for you. +# (Was the problem just one of endianness?) +# +# 3B20 +# +# The 3B20 conflicts with SCCS. +#0 beshort 0550 3b20 COFF executable +#>12 belong >0 not stripped +#>22 beshort >0 - version %ld +#0 beshort 0551 3b20 COFF executable (TV) +#>12 belong >0 not stripped +#>22 beshort >0 - version %ld +# +# WE32K +# +0 beshort 0560 WE32000 COFF +>18 beshort ^00000020 object +>18 beshort &00000020 executable +>12 belong >0 not stripped +>18 beshort ^00010000 N/A on 3b2/300 w/paging +>18 beshort &00020000 32100 required +>18 beshort &00040000 and MAU hardware required +>20 beshort 0407 (impure) +>20 beshort 0410 (pure) +>20 beshort 0413 (demand paged) +>20 beshort 0443 (target shared library) +>22 beshort >0 - version %ld +0 beshort 0561 WE32000 COFF executable (TV) +>12 belong >0 not stripped +#>18 beshort &00020000 - 32100 required +#>18 beshort &00040000 and MAU hardware required +#>22 beshort >0 - version %ld +# +# core file for 3b2 +0 string \000\004\036\212\200 3b2 core file +>364 string >\0 of '%s' +#------------------------------------------------------------------------------ +# audio: file(1) magic for sound formats (see also "iff") +# +# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), +# and others +# + +# Sun/NeXT audio data +0 string .snd Sun/NeXT audio data: +>12 belong 1 8-bit ISDN mu-law, +!:mime audio/basic +>12 belong 2 8-bit linear PCM [REF-PCM], +!:mime audio/basic +>12 belong 3 16-bit linear PCM, +!:mime audio/basic +>12 belong 4 24-bit linear PCM, +!:mime audio/basic +>12 belong 5 32-bit linear PCM, +!:mime audio/basic +>12 belong 6 32-bit IEEE floating point, +!:mime audio/basic +>12 belong 7 64-bit IEEE floating point, +!:mime audio/basic +>12 belong 8 Fragmented sample data, +>12 belong 10 DSP program, +>12 belong 11 8-bit fixed point, +>12 belong 12 16-bit fixed point, +>12 belong 13 24-bit fixed point, +>12 belong 14 32-bit fixed point, +>12 belong 18 16-bit linear with emphasis, +>12 belong 19 16-bit linear compressed, +>12 belong 20 16-bit linear with emphasis and compression, +>12 belong 21 Music kit DSP commands, +>12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), +!:mime audio/x-adpcm +>12 belong 24 compressed (8-bit CCITT G.722 ADPCM) +>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), +>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), +>12 belong 27 8-bit A-law (CCITT G.711), +>20 belong 1 mono, +>20 belong 2 stereo, +>20 belong 4 quad, +>16 belong >0 %d Hz + +# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format +# that uses little-endian encoding and has a different magic number +0 lelong 0x0064732E DEC audio data: +>12 lelong 1 8-bit ISDN mu-law, +!:mime audio/x-dec-basic +>12 lelong 2 8-bit linear PCM [REF-PCM], +!:mime audio/x-dec-basic +>12 lelong 3 16-bit linear PCM, +!:mime audio/x-dec-basic +>12 lelong 4 24-bit linear PCM, +!:mime audio/x-dec-basic +>12 lelong 5 32-bit linear PCM, +!:mime audio/x-dec-basic +>12 lelong 6 32-bit IEEE floating point, +!:mime audio/x-dec-basic +>12 lelong 7 64-bit IEEE floating point, +!:mime audio/x-dec-basic +>12 belong 8 Fragmented sample data, +>12 belong 10 DSP program, +>12 belong 11 8-bit fixed point, +>12 belong 12 16-bit fixed point, +>12 belong 13 24-bit fixed point, +>12 belong 14 32-bit fixed point, +>12 belong 18 16-bit linear with emphasis, +>12 belong 19 16-bit linear compressed, +>12 belong 20 16-bit linear with emphasis and compression, +>12 belong 21 Music kit DSP commands, +>12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), +!:mime audio/x-dec-basic +>12 belong 24 compressed (8-bit CCITT G.722 ADPCM) +>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), +>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), +>12 belong 27 8-bit A-law (CCITT G.711), +>20 lelong 1 mono, +>20 lelong 2 stereo, +>20 lelong 4 quad, +>16 lelong >0 %d Hz + +# Creative Labs AUDIO stuff +0 string MThd Standard MIDI data +!:mime audio/midi +>8 beshort x (format %d) +>10 beshort x using %d track +>10 beshort >1 \bs +>12 beshort&0x7fff x at 1/%d +>12 beshort&0x8000 >0 SMPTE + +0 string CTMF Creative Music (CMF) data +!:mime audio/x-unknown +0 string SBI SoundBlaster instrument data +!:mime audio/x-unknown +0 string Creative\ Voice\ File Creative Labs voice data +!:mime audio/x-unknown +# is this next line right? it came this way... +>19 byte 0x1A +>23 byte >0 - version %d +>22 byte >0 \b.%d + +# first entry is also the string "NTRK" +0 belong 0x4e54524b MultiTrack sound data +>4 belong x - version %ld + +# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED +# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi] +0 string EMOD Extended MOD sound data, +>4 byte&0xf0 x version %d +>4 byte&0x0f x \b.%d, +>45 byte x %d instruments +>83 byte 0 (module) +>83 byte 1 (song) + +# Real Audio (Magic .ra\0375) +0 belong 0x2e7261fd RealAudio sound file +!:mime audio/x-pn-realaudio +0 string .RMF RealMedia file +!:mime application/vnd.rn-realmedia +#video/x-pn-realvideo +#video/vnd.rn-realvideo +#application/vnd.rn-realmedia +# sigh, there are many mimes for that but the above are the most common. + +# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net] +# Oct 31, 1995 +# fixed by 2003-06-24 +# Too short... +#0 string MTM MultiTracker Module sound file +#0 string if Composer 669 Module sound data +#0 string JN Composer 669 Module sound data (extended format) +0 string MAS_U ULT(imate) Module sound data + +#0 string FAR Module sound data +#>4 string >\15 Title: "%s" + +0x2c string SCRM ScreamTracker III Module sound data +>0 string >\0 Title: "%s" + +# Gravis UltraSound patches +# From + +0 string GF1PATCH110\0ID#000002\0 GUS patch +0 string GF1PATCH100\0ID#000002\0 Old GUS patch + +# mime types according to http://www.geocities.com/nevilo/mod.htm: +# audio/it .it +# audio/x-zipped-it .itz +# audio/xm fasttracker modules +# audio/x-s3m screamtracker modules +# audio/s3m screamtracker modules +# audio/x-zipped-mod mdz +# audio/mod mod +# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z) + +# +# Taken from loader code from mikmod version 2.14 +# by Steve McIntyre (stevem@chiark.greenend.org.uk) +# added title printing on 2003-06-24 +0 string MAS_UTrack_V00 +>14 string >/0 ultratracker V1.%.1s module sound data +!:mime audio/x-mod +#audio/x-tracker-module + +0 string UN05 MikMod UNI format module sound data + +0 string Extended\ Module: Fasttracker II module sound data +!:mime audio/x-mod +#audio/x-tracker-module +>17 string >\0 Title: "%s" + +21 string/c =!SCREAM! Screamtracker 2 module sound data +!:mime audio/x-mod +#audio/x-screamtracker-module +21 string BMOD2STM Screamtracker 2 module sound data +!:mime audio/x-mod +#audio/x-screamtracker-module +1080 string M.K. 4-channel Protracker module sound data +!:mime audio/x-mod +#audio/x-protracker-module +>0 string >\0 Title: "%s" +1080 string M!K! 4-channel Protracker module sound data +!:mime audio/x-mod +#audio/x-protracker-module +>0 string >\0 Title: "%s" +1080 string FLT4 4-channel Startracker module sound data +!:mime audio/x-mod +#audio/x-startracker-module +>0 string >\0 Title: "%s" +1080 string FLT8 8-channel Startracker module sound data +!:mime audio/x-mod +#audio/x-startracker-module +>0 string >\0 Title: "%s" +1080 string 4CHN 4-channel Fasttracker module sound data +!:mime audio/x-mod +#audio/x-fasttracker-module +>0 string >\0 Title: "%s" +1080 string 6CHN 6-channel Fasttracker module sound data +!:mime audio/x-mod +#audio/x-fasttracker-module +>0 string >\0 Title: "%s" +1080 string 8CHN 8-channel Fasttracker module sound data +!:mime audio/x-mod +#audio/x-fasttracker-module +>0 string >\0 Title: "%s" +1080 string CD81 8-channel Octalyser module sound data +!:mime audio/x-mod +#audio/x-octalysertracker-module +>0 string >\0 Title: "%s" +1080 string OKTA 8-channel Octalyzer module sound data +!:mime audio/x-mod +#audio/x-octalysertracker-module +>0 string >\0 Title: "%s" +# Not good enough. +#1082 string CH +#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data +1080 string 16CN 16-channel Taketracker module sound data +!:mime audio/x-mod +#audio/x-taketracker-module +>0 string >\0 Title: "%s" +1080 string 32CN 32-channel Taketracker module sound data +!:mime audio/x-mod +#audio/x-taketracker-module +>0 string >\0 Title: "%s" + +# TOC sound files -Trevor Johnson +# +0 string TOC TOC sound file + +# sidfiles +# added name,author,(c) and new RSID type by 2003-06-24 +0 string SIDPLAY\ INFOFILE Sidplay info file + +0 string PSID PlaySID v2.2+ (AMIGA) sidtune +>4 beshort >0 w/ header v%d, +>14 beshort =1 single song, +>14 beshort >1 %d songs, +>16 beshort >0 default song: %d +>0x16 string >\0 name: "%s" +>0x36 string >\0 author: "%s" +>0x56 string >\0 copyright: "%s" + +0 string RSID RSID sidtune PlaySID compatible +>4 beshort >0 w/ header v%d, +>14 beshort =1 single song, +>14 beshort >1 %d songs, +>16 beshort >0 default song: %d +>0x16 string >\0 name: "%s" +>0x36 string >\0 author: "%s" +>0x56 string >\0 copyright: "%s" + +# IRCAM +# VAX and MIPS files are little-endian; Sun and NeXT are big-endian +0 belong 0x64a30100 IRCAM file (VAX) +0 belong 0x64a30200 IRCAM file (Sun) +0 belong 0x64a30300 IRCAM file (MIPS little-endian) +0 belong 0x64a30400 IRCAM file (NeXT) + +# NIST SPHERE +0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file + +# Sample Vision +0 string SOUND\ SAMPLE\ DATA\ Sample Vision file + +# Audio Visual Research +0 string 2BIT Audio Visual Research file, +>12 beshort =0 mono, +>12 beshort =-1 stereo, +>14 beshort x %d bits +>16 beshort =0 unsigned, +>16 beshort =-1 signed, +>22 belong&0x00ffffff x %d Hz, +>18 beshort =0 no loop, +>18 beshort =-1 loop, +>21 ubyte <128 note %d, +>22 byte =0 replay 5.485 KHz +>22 byte =1 replay 8.084 KHz +>22 byte =2 replay 10.971 Khz +>22 byte =3 replay 16.168 Khz +>22 byte =4 replay 21.942 KHz +>22 byte =5 replay 32.336 KHz +>22 byte =6 replay 43.885 KHz +>22 byte =7 replay 47.261 KHz + +# SGI SoundTrack +0 string _SGI_SoundTrack SGI SoundTrack project file +# ID3 version 2 tags +0 string ID3 Audio file with ID3 version 2 +>3 byte x \b.%d +>4 byte x \b.%d +>>5 byte &0x80 \b, unsynchronized frames +>>5 byte &0x40 \b, extended header +>>5 byte &0x20 \b, experimental +>>5 byte &0x10 \b, footer present +>(6.I) indirect x \b, contains: + +# NSF (NES sound file) magic +0 string NESM\x1a NES Sound File +>14 string >\0 ("%s" by +>46 string >\0 %s, copyright +>78 string >\0 %s), +>5 byte x version %d, +>6 byte x %d tracks, +>122 byte&0x2 =1 dual PAL/NTSC +>122 byte&0x1 =1 PAL +>122 byte&0x1 =0 NTSC + +# Impulse tracker module (audio/x-it) +0 string IMPM Impulse Tracker module sound data - +!:mime audio/x-mod +>4 string >\0 "%s" +>40 leshort !0 compatible w/ITv%x +>42 leshort !0 created w/ITv%x + +# Imago Orpheus module (audio/x-imf) +60 string IM10 Imago Orpheus module sound data - +>0 string >\0 "%s" + +# From +# These are the /etc/magic entries to decode modules, instruments, and +# samples in Impulse Tracker's native format. + +0 string IMPS Impulse Tracker Sample +>18 byte &2 16 bit +>18 byte ^2 8 bit +>18 byte &4 stereo +>18 byte ^4 mono +0 string IMPI Impulse Tracker Instrument +>28 leshort !0 ITv%x +>30 byte !0 %d samples + +# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files +# From +0 string LM8953 Yamaha TX Wave +>22 byte 0x49 looped +>22 byte 0xC9 non-looped +>23 byte 1 33kHz +>23 byte 2 50kHz +>23 byte 3 16kHz + +# scream tracker: file(1) magic for Scream Tracker sample files +# +# From +76 string SCRS Scream Tracker Sample +>0 byte 1 sample +>0 byte 2 adlib melody +>0 byte >2 adlib drum +>31 byte &2 stereo +>31 byte ^2 mono +>31 byte &4 16bit little endian +>31 byte ^4 8bit +>30 byte 0 unpacked +>30 byte 1 packed + +# audio +# From: Cory Dikkers +0 string MMD0 MED music file, version 0 +0 string MMD1 OctaMED Pro music file, version 1 +0 string MMD3 OctaMED Soundstudio music file, version 3 +0 string OctaMEDCmpr OctaMED Soundstudio compressed file +0 string MED MED_Song +0 string SymM Symphonie SymMOD music file +# +0 string THX AHX version +>3 byte =0 1 module data +>3 byte =1 2 module data +# +0 string OKTASONG Oktalyzer module data +# +0 string DIGI\ Booster\ module\0 %s +>20 byte >0 %c +>>21 byte >0 \b%c +>>>22 byte >0 \b%c +>>>>23 byte >0 \b%c +>610 string >\0 \b, "%s" +# +0 string DBM0 DIGI Booster Pro Module +>4 byte >0 V%X. +>>5 byte x \b%02X +>16 string >\0 \b, "%s" +# +0 string FTMN FaceTheMusic module +>16 string >\0d \b, "%s" + +# From: 2003-06-24 +0 string AMShdr\32 Velvet Studio AMS Module v2.2 +0 string Extreme Extreme Tracker AMS Module v1.3 +0 string DDMF Xtracker DMF Module +>4 byte x v%i +>0xD string >\0 Title: "%s" +>0x2B string >\0 Composer: "%s" +0 string DSM\32 Dynamic Studio Module DSM +0 string SONG DigiTrekker DTM Module +0 string DMDL DigiTrakker MDL Module +0 string PSM\32 Protracker Studio PSM Module +44 string PTMF Poly Tracker PTM Module +>0 string >\32 Title: "%s" +0 string MT20 MadTracker 2.0 Module MT2 +0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD +0 string RTMM RTM Module +0x426 string MaDoKaN96 XMS Adlib Module +>0 string >\0 Composer: "%s" +0 string AMF AMF Module +>4 string >\0 Title: "%s" +0 string MODINFO1 Open Cubic Player Module Inforation MDZ +0 string Extended\40Instrument: Fast Tracker II Instrument + +# From: Takeshi Hamasaki +# NOA Nancy Codec file +0 string \210NOA\015\012\032 NOA Nancy Codec Movie file +# Yamaha SMAF format +0 string MMMD Yamaha SMAF file +# Sharp Jisaku Melody format for PDC +0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody +>20 string Ver01.00 Ver. 1.00 +>>32 byte x , %d tracks + +# Free lossless audio codec +# From: Przemyslaw Augustyniak +0 string fLaC FLAC audio bitstream data +!:mime audio/x-flac +>4 byte&0x7f >0 \b, unknown version +>4 byte&0x7f 0 \b +# some common bits/sample values +>>20 beshort&0x1f0 0x030 \b, 4 bit +>>20 beshort&0x1f0 0x050 \b, 6 bit +>>20 beshort&0x1f0 0x070 \b, 8 bit +>>20 beshort&0x1f0 0x0b0 \b, 12 bit +>>20 beshort&0x1f0 0x0f0 \b, 16 bit +>>20 beshort&0x1f0 0x170 \b, 24 bit +>>20 byte&0xe 0x0 \b, mono +>>20 byte&0xe 0x2 \b, stereo +>>20 byte&0xe 0x4 \b, 3 channels +>>20 byte&0xe 0x6 \b, 4 channels +>>20 byte&0xe 0x8 \b, 5 channels +>>20 byte&0xe 0xa \b, 6 channels +>>20 byte&0xe 0xc \b, 7 channels +>>20 byte&0xe 0xe \b, 8 channels +# some common sample rates +>>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz +>>17 belong&0xfffff0 0x0bb800 \b, 48 kHz +>>17 belong&0xfffff0 0x07d000 \b, 32 kHz +>>17 belong&0xfffff0 0x056220 \b, 22.05 kHz +>>17 belong&0xfffff0 0x05dc00 \b, 24 kHz +>>17 belong&0xfffff0 0x03e800 \b, 16 kHz +>>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz +>>17 belong&0xfffff0 0x02ee00 \b, 12 kHz +>>17 belong&0xfffff0 0x01f400 \b, 8 kHz +>>17 belong&0xfffff0 0x177000 \b, 96 kHz +>>17 belong&0xfffff0 0x0fa000 \b, 64 kHz +>>21 byte&0xf >0 \b, >4G samples +>>21 byte&0xf 0 \b +>>>22 belong >0 \b, %u samples +>>>22 belong 0 \b, length unknown + +# (ISDN) VBOX voice message file (Wolfram Kleff) +0 string VBOX VBOX voice message data + +# ReBorn Song Files (.rbs) +# David J. Singer +8 string RB40 RBS Song file +>29 string ReBorn created by ReBorn +>37 string Propellerhead created by ReBirth + +# Synthesizer Generator and Kimwitu share their file format +0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data +# Kimwitu++ uses a slightly different magic +0 string A#S#C#S#S#L#HUB Kimwitu++ data + +# From "Simon Hosie +0 string TFMX-SONG TFMX module sound data + +# Monkey's Audio compressed audio format (.ape) +# From danny.milo@gmx.net (Danny Milosavljevic) +# New version from Abel Cheung +0 string MAC\040 Monkey's Audio compressed format +>4 uleshort >0x0F8B version %d +>>(0x08.l) uleshort =1000 with fast compression +>>(0x08.l) uleshort =2000 with normal compression +>>(0x08.l) uleshort =3000 with high compression +>>(0x08.l) uleshort =4000 with extra high compression +>>(0x08.l) uleshort =5000 with insane compression +>>(0x08.l+18) uleshort =1 \b, mono +>>(0x08.l+18) uleshort =2 \b, stereo +>>(0x08.l+20) ulelong x \b, sample rate %d +>4 uleshort <0x0F8C version %d +>>6 uleshort =1000 with fast compression +>>6 uleshort =2000 with normal compression +>>6 uleshort =3000 with high compression +>>6 uleshort =4000 with extra high compression +>>6 uleshort =5000 with insane compression +>>10 uleshort =1 \b, mono +>>10 uleshort =2 \b, stereo +>>12 ulelong x \b, sample rate %d + +# adlib sound files +# From Gürkan Sengün , http://www.linuks.mine.nu +0 string RAWADATA RdosPlay RAW + +1068 string RoR AMUSIC Adlib Tracker + +0 string JCH EdLib + +0 string mpu401tr MPU-401 Trakker + +0 string SAdT Surprise! Adlib Tracker +>4 byte x Version %d + +0 string XAD! eXotic ADlib + +0 string ofTAZ! eXtra Simple Music + +# Spectrum 128 tunes (.ay files). +# From: Emanuel Haupt +0 string ZXAYEMUL Spectrum 128 tune + +0 string \0BONK BONK, +#>5 byte x version %d +>14 byte x %d channel(s), +>15 byte =1 lossless, +>15 byte =0 lossy, +>16 byte x mid-side + +384 string LockStream LockStream Embedded file (mostly MP3 on old Nokia phones) + +# format VQF (proprietary codec for sound) +# some infos on the header file available at : +# http://www.twinvq.org/english/technology_format.html +0 string TWIN97012000 VQF data +>27 short 0 \b, Mono +>27 short 1 \b, Stereo +>31 short >0 \b, %d kbit/s +>35 short >0 \b, %d kHz + +# Nelson A. de Oliveira (naoliv@gmail.com) +# .eqf +0 string Winamp\ EQ\ library\ file %s +# it will match only versions like v. +# Since I saw only eqf files with version v1.1 I think that it's OK +>23 string x \b%.4s +# .preset +0 string [Equalizer\ preset] XMMS equalizer preset +# .m3u +0 search/1 #EXTM3U M3U playlist text +# .pls +0 search/1 [playlist] PLS playlist text +# licq.conf +1 string [licq] LICQ configuration file + +# Atari ST audio files by Dirk Jagdmann +0 string ICE! SNDH Atari ST music +0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music + +# musepak support From: "Jiri Pejchal" +0 string MP+ Musepack audio +>3 byte 255 \b, SV pre8 +>3 byte&0xF 0x6 \b, SV 6 +>3 byte&0xF 0x8 \b, SV 8 +>3 byte&0xF 0x7 \b, SV 7 +>>3 byte&0xF0 0x0 \b.0 +>>3 byte&0xF0 0x10 \b.1 +>>3 byte&0xF0 240 \b.15 +>>10 byte&0xF0 0x0 \b, no profile +>>10 byte&0xF0 0x10 \b, profile 'Unstable/Experimental' +>>10 byte&0xF0 0x50 \b, quality 0 +>>10 byte&0xF0 0x60 \b, quality 1 +>>10 byte&0xF0 0x70 \b, quality 2 (Telephone) +>>10 byte&0xF0 0x80 \b, quality 3 (Thumb) +>>10 byte&0xF0 0x90 \b, quality 4 (Radio) +>>10 byte&0xF0 0xA0 \b, quality 5 (Standard) +>>10 byte&0xF0 0xB0 \b, quality 6 (Xtreme) +>>10 byte&0xF0 0xC0 \b, quality 7 (Insane) +>>10 byte&0xF0 0xD0 \b, quality 8 (BrainDead) +>>10 byte&0xF0 0xE0 \b, quality 9 +>>10 byte&0xF0 0xF0 \b, quality 10 +>>27 byte 0x0 \b, Buschmann 1.7.0-9, Klemm 0.90-1.05 +>>27 byte 102 \b, Beta 1.02 +>>27 byte 104 \b, Beta 1.04 +>>27 byte 105 \b, Alpha 1.05 +>>27 byte 106 \b, Beta 1.06 +>>27 byte 110 \b, Release 1.1 +>>27 byte 111 \b, Alpha 1.11 +>>27 byte 112 \b, Beta 1.12 +>>27 byte 113 \b, Alpha 1.13 +>>27 byte 114 \b, Beta 1.14 +>>27 byte 115 \b, Alpha 1.15 + +# IMY +# from http://filext.com/detaillist.php?extdetail=IMY +# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm +# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html +# http://www.wx800.com/msg/download/irda/iMelody.pdf +0 string BEGIN:IMELODY iMelody Ringtone Format + +# From: "Mateus Caruccio" +# guitar pro v3,4,5 from http://filext.com/file-extension/gp3 +0 string \030FICHIER\ GUITAR\ PRO\ v3. Guitar Pro Ver. 3 Tablature + +# From: "Leslie P. Polzer" +60 string SONG SoundFX Module sound file + +# Type: Adaptive Multi-Rate Codec +# URL: http://filext.com/detaillist.php?extdetail=AMR +# From: Russell Coker +0 string #!AMR Adaptive Multi-Rate Codec (GSM telephony) +#---------------------------------------------------------------- +# basis: file(1) magic for BBx/Pro5-files +# Oliver Dammer 2005/11/07 +# http://www.basis.com business-basic-files. +# +0 string \074\074bbx\076\076 BBx +>7 string \000 indexed file +>7 string \001 serial file +>7 string \002 keyed file +>>13 short 0 (sort) +>7 string \004 program +>>18 byte x (LEVEL %d) +>>>23 string >\000 psaved +>7 string \006 mkeyed file +>>13 short 0 (sort) +>>8 string \000 (mkey) +#------------------------------------------------------------------------------ +# bFLT: file(1) magic for BFLT uclinux binary files +# +# From Philippe De Muyter +# +0 string bFLT BFLT executable +>4 belong x - version %ld +>4 belong 4 +>>36 belong&0x1 0x1 ram +>>36 belong&0x2 0x2 gotpic +>>36 belong&0x4 0x4 gzip +>>36 belong&0x8 0x8 gzdata +#------------------------------------------------------------------------------ +# blender: file(1) magic for Blender 3D related files +# +# Native format rule v1.2. For questions use the developers list +# http://lists.blender.org/mailman/listinfo/bf-committers +# GLOB chunk was moved near start and provides subversion info since 2.42 + +0 string =BLENDER Blender3D, +>7 string =_ saved as 32-bits +>>8 string =v little endian +>>>9 byte x with version %c. +>>>10 byte x \b%c +>>>11 byte x \b%c +>>>0x40 string =GLOB \b. +>>>>0x58 leshort x \b%.4d +>>8 string =V big endian +>>>9 byte x with version %c. +>>>10 byte x \b%c +>>>11 byte x \b%c +>>>0x40 string =GLOB \b. +>>>>0x58 beshort x \b%.4d +>7 string =- saved as 64-bits +>>8 string =v little endian +>>9 byte x with version %c. +>>10 byte x \b%c +>>11 byte x \b%c +>>0x44 string =GLOB \b. +>>>0x60 leshort x \b%.4d +>>8 string =V big endian +>>>9 byte x with version %c. +>>>10 byte x \b%c +>>>11 byte x \b%c +>>>0x44 string =GLOB \b. +>>>>0x60 beshort x \b%.4d + +# Scripts that run in the embeded Python interpreter +0 string #!BPY Blender3D BPython script + +#------------------------------------------------------------------------------ +# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine +# +# Note that this 0407 conflicts with several other a.out formats... +# +# XXX - should this be redone with "be" and "le", so that it works on +# little-endian machines as well? If so, what's the deal with +# "VAX-order" and "VAX-order2"? +# +#0 long 0407 68K Blit (standalone) executable +#0 short 0407 VAX-order2 68K Blit (standalone) executable +0 short 03401 VAX-order 68K Blit (standalone) executable +0 long 0406 68k Blit mpx/mux executable +0 short 0406 VAX-order2 68k Blit mpx/mux executable +0 short 03001 VAX-order 68k Blit mpx/mux executable +# Need more values for WE32 DMD executables. +# Note that 0520 is the same as COFF +#0 short 0520 tty630 layers executable +# +# i80960 b.out objects and archives +# +0 long 0x10d i960 b.out relocatable object +>16 long >0 not stripped +# +# b.out archive (hp-rt on i960) +0 string =! b.out archive +>8 string __.SYMDEF random library +#------------------------------------------------------------------------------ +# bsdi: file(1) magic for BSD/OS (from BSDI) objects +# + +0 lelong 0314 386 compact demand paged pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0407 386 executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0410 386 pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0413 386 demand paged pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +# same as in SunOS 4.x, except for static shared libraries +0 belong&077777777 0600413 sparc demand paged +>0 byte &0x80 +>>20 belong <4096 shared library +>>20 belong =4096 dynamically linked executable +>>20 belong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) + +0 belong&077777777 0600410 sparc pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) + +0 belong&077777777 0600407 sparc +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) +#------------------------------------------------------------------------------ +# BTSnoop: file(1) magic for BTSnoop files +# +# From +0 string btsnoop\0 BTSnoop +>8 belong x version %d, +>12 belong 1001 Unencapsulated HCI +>12 belong 1002 HCI UART (H4) +>12 belong 1003 HCI BCSP +>12 belong 1004 HCI Serial (H5) +>>12 belong x type %d +#------------------------------------------------------------------------------ +# c-lang: file(1) magic for C programs (or REXX) +# + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# if you uncomment "/*" for C/REXX below, also uncomment this entry +#0 string /*\ XPM\ */ X pixmap image data +#!:mime image/x-xpmi + +# 3DS (3d Studio files) Conflicts with diff output 0x3d '=' +#16 beshort 0x3d3d image/x-3ds + +# this first will upset you if you're a PL/1 shop... +# in which case rm it; ascmagic will catch real C programs +#0 search/1 /* C or REXX program text +#0 search/1 // C++ program text + +# From: Mikhail Teterin +0 string cscope cscope reference data +>7 string x version %.2s +# We skip the path here, because it is often long (so file will +# truncate it) and mostly redundant. +# The inverted index functionality was added some time betwen +# versions 11 and 15, so look for -q if version is above 14: +>7 string >14 +>>10 search/100 \ -q\ with inverted index +>10 search/100 \ -c\ text (non-compressed) +#------------------------------------------------------------------------------ +# c64: file(1) magic for various commodore 64 related files +# +# From: Dirk Jagdmann + +0x16500 belong 0x12014100 D64 Image +0x16500 belong 0x12014180 D71 Image +0x61800 belong 0x28034400 D81 Image +0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image +0 belong 0x43154164 X64 Image + +0 string GCR-1541 GCR Image +>8 byte x version: %i +>9 byte x tracks: %i + +9 string PSUR ARC archive (c64) +2 string -LH1- LHA archive (c64) + +0 string C64File PC64 Emulator file +>8 string >\0 "%s" +0 string C64Image PC64 Freezer Image + +0 beshort 0x38CD C64 PCLink Image +0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot + +0 belong 0xFF424CFF WRAptor packer (c64) + +0 string C64S\x20tape\x20file T64 tape Image +>32 leshort x Version:0x%x +>36 leshort !0 Entries:%i +>40 string x Name:%.24s + +0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image +>32 leshort x Version:0x%x +>36 leshort !0 Entries:%i +>40 string x Name:%.24s + +0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image +>32 leshort x Version:0x%x +>36 leshort !0 Entries:%i +>40 string x Name:%.24s + +#------------------------------------------------------------------------------ +# autocad: file(1) magic for cad files +# + +# AutoCAD DWG versions R13/R14 (www.autodesk.com) +# Written December 01, 2003 by Lester Hightower +# Based on the DWG File Format Specifications at http://www.opendwg.org/ +0 string \101\103\061\060\061 AutoCAD +>5 string \062\000\000\000\000 DWG ver. R13 +>5 string \064\000\000\000\000 DWG ver. R14 + +# Microstation DGN/CIT Files (www.bentley.com) +# Last updated July 29, 2005 by Lester Hightower +# DGN is the default file extension of Microstation/Intergraph CAD files. +# CIT is the proprietary raster format (similar to TIFF) used to attach +# raster underlays to Microstation DGN (vector) drawings. +# +# http://www.wotsit.org/search.asp +# http://filext.com/detaillist.php?extdetail=DGN +# http://filext.com/detaillist.php?extdetail=CIT +# +# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2 +# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928 +# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682 +# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F +0 string \010\011\376 Microstation +>3 string \002 +>>30 string \026\105 DGNFile +>>30 string \034\105 DGNFile +>>30 string \073\107 DGNFile +>>30 string \073\110 DGNFile +>>30 string \106\107 DGNFile +>>30 string \110\103 DGNFile +>>30 string \120\104 DGNFile +>>30 string \172\104 DGNFile +>>30 string \172\105 DGNFile +>>30 string \172\106 DGNFile +>>30 string \234\106 DGNFile +>>30 string \273\105 DGNFile +>>30 string \306\106 DGNFile +>>30 string \310\104 DGNFile +>>30 string \341\104 DGNFile +>>30 string \372\103 DGNFile +>>30 string \372\104 DGNFile +>>30 string \372\106 DGNFile +>>30 string \376\103 DGNFile +>4 string \030\000\000 CITFile +>4 string \030\000\003 CITFile + +# AutoCad, from Nahuel Greco +# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com) +0 string AC1012 AutoCad (release 12) +0 string AC1013 AutoCad (release 13) +0 string AC1014 AutoCad (release 14) + +# CAD: file(1) magic for computer aided design files +# Phillip Griffith +# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications. +# +0 belong 0x08051700 Bentley/Intergraph MicroStation DGN cell library +0 belong 0x0809fe02 Bentley/Intergraph MicroStation DGN vector CAD +0 belong 0xc809fe02 Bentley/Intergraph MicroStation DGN vector CAD +0 beshort 0x0809 Bentley/Intergraph MicroStation +>0x02 byte 0xfe +>>0x04 beshort 0x1800 CIT raster CAD +0 string AC1012 AutoDesk AutoCAD R13 +0 string AC1014 AutoDesk AutoCAD R14 +0 string AC1015 AutoDesk AutoCAD R2000 +#------------------------------------------------------------------------------ +# Cafe Babes unite! +# +# Since Java bytecode and Mach-O fat-files have the same magic number, the test +# must be performed in the same "magic" sequence to get both right. The long +# at offset 4 in a mach-O fat file tells the number of architectures; the short at +# offset 4 in a Java bytecode file is the JVM minor version and the +# short at offset 6 is the JVM major version. Since there are only +# only 18 labeled Mach-O architectures at current, and the first released +# Java class format was version 43.0, we can safely choose any number +# between 18 and 39 to test the number of architectures against +# (and use as a hack). Let's not use 18, because the Mach-O people +# might add another one or two as time goes by... +# +0 belong 0xcafebabe +!:mime application/x-java-applet +>4 belong >30 compiled Java class data, +>>6 beshort x version %d. +>>4 beshort x \b%d +# Which is which? +#>>4 belong 0x032d (Java 1.0) +#>>4 belong 0x032d (Java 1.1) +>>4 belong 0x002e (Java 1.2) +>>4 belong 0x002f (Java 1.3) +>>4 belong 0x0030 (Java 1.4) +>>4 belong 0x0031 (Java 1.5) +>>4 belong 0x0032 (Java 1.6) + + +0 belong 0xcafebabe +>4 belong 1 Mach-O fat file with 1 architecture +>4 belong >1 +>>4 belong <20 Mach-O fat file with %ld architectures + +0 belong 0xcafed00d JAR compressed with pack200, +>>5 byte x version %d. +>>4 byte x \b%d +!:mime application/x-java-pack200 +#------------------------------------------------------------------------------ +# CDDB: file(1) magic for CDDB(tm) format CD text data files +# +# From +# +# This is the /etc/magic entry to decode datafiles as used by +# CDDB-enabled CD player applications. +# + +0 search/1/b #\040xmcd CDDB(tm) format CD text data + +#------------------------------------------------------------------------------ +# chord: file(1) magic for Chord music sheet typesetting utility input files +# +# From Philippe De Muyter +# File format is actually free, but many distributed files begin with `{title' +# +0 string {title Chord text file + +#------------------------------------------------------------------------------ +# cisco: file(1) magic for cisco Systems routers +# +# Most cisco file-formats are covered by the generic elf code +# +# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha. +0 belong&0xffffff00 0x85011400 cisco IOS microcode +>7 string >\0 for '%s' +0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode +>7 string >\0 for '%s' +#------------------------------------------------------------------------------ +# citrus locale declaration +# + +0 string RuneCT Citrus locale declaration for LC_CTYPE + + +#------------------------------------------------------------------------------ +# clarion: file(1) magic for # Clarion Personal/Professional Developer +# (v2 and above) +# From: Julien Blache + +# Database files +# signature +0 leshort 0x3343 Clarion Developer (v2 and above) data file +# attributes +>2 leshort &0x0001 \b, locked +>2 leshort &0x0004 \b, encrypted +>2 leshort &0x0008 \b, memo file exists +>2 leshort &0x0010 \b, compressed +>2 leshort &0x0040 \b, read only +# number of records +>5 lelong x \b, %ld records + +# Memo files +0 leshort 0x334d Clarion Developer (v2 and above) memo data + +# Key/Index files +# No magic? :( + +# Help files +0 leshort 0x49e0 Clarion Developer (v2 and above) help data + +#------------------------------------------------------------------------------ +# claris: file(1) magic for claris +# "H. Nanosecond" +# Claris Works a word processor, etc. +# Version 3.0 + +# .pct claris works clip art files +#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 +#* +#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000 +#null to byte 1000 octal +514 string \377\377\377\377\000 Claris clip art? +>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. +514 string \377\377\377\377\001 Claris clip art? +>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. + +# Claris works files +# .cwk +0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document +# .plt +0 string \020\341\000\000\010\010 Claris Works pallete files .plt + +# .msp a dictionary file I am not sure about this I have only one .msp file +0 string \002\271\262\000\040\002\000\164 Claris works dictionary + +# .usp are user dictionary bits +# I am not sure about a magic header: +#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151 +# soh S p f 8 U D sp ^ S cr nl p o d i +#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043 +# a t r i s t sp ^ S cr nl d i v sp # + +# .mth Thesaurus +# starts with \0 but no magic header + +# .chy Hyphenation file +# I am not sure: 000 210 034 000 000 + +# other claris files +#./windows/claris/useng.ndx: data +#./windows/claris/xtndtran.l32: data +#./windows/claris/xtndtran.lst: data +#./windows/claris/clworks.lbl: data +#./windows/claris/clworks.prf: data +#./windows/claris/userd.spl: data + +#------------------------------------------------------------------------------ +# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper. +# +# XXX - what byte order does the Clipper use? +# +# XXX - what's the "!" stuff: +# +# >18 short !074000,000000 C1 R1 +# >18 short !074000,004000 C2 R1 +# >18 short !074000,010000 C3 R1 +# >18 short !074000,074000 TEST +# +# I shall assume it's ANDing the field with the first value and +# comparing it with the second, and rewrite it as: +# +# >18 short&074000 000000 C1 R1 +# >18 short&074000 004000 C2 R1 +# >18 short&074000 010000 C3 R1 +# >18 short&074000 074000 TEST +# +# as SVR3.1's "file" doesn't support anything of the "!074000,000000" +# sort, nor does SunOS 4.x, so either it's something Intergraph added +# in CLIX, or something AT&T added in SVR3.2 or later, or something +# somebody else thought was a good idea; it's not documented in the +# man page for this version of "magic", nor does it appear to be +# implemented (at least not after I blew off the bogus code to turn +# old-style "&"s into new-style "&"s, which just didn't work at all). +# +0 short 0575 CLIPPER COFF executable (VAX #) +>20 short 0407 (impure) +>20 short 0410 (5.2 compatible) +>20 short 0411 (pure) +>20 short 0413 (demand paged) +>20 short 0443 (target shared library) +>12 long >0 not stripped +>22 short >0 - version %ld +0 short 0577 CLIPPER COFF executable +>18 short&074000 000000 C1 R1 +>18 short&074000 004000 C2 R1 +>18 short&074000 010000 C3 R1 +>18 short&074000 074000 TEST +>20 short 0407 (impure) +>20 short 0410 (pure) +>20 short 0411 (separate I&D) +>20 short 0413 (paged) +>20 short 0443 (target shared library) +>12 long >0 not stripped +>22 short >0 - version %ld +>48 long&01 01 alignment trap enabled +>52 byte 1 -Ctnc +>52 byte 2 -Ctsw +>52 byte 3 -Ctpw +>52 byte 4 -Ctcb +>53 byte 1 -Cdnc +>53 byte 2 -Cdsw +>53 byte 3 -Cdpw +>53 byte 4 -Cdcb +>54 byte 1 -Csnc +>54 byte 2 -Cssw +>54 byte 3 -Cspw +>54 byte 4 -Cscb +4 string pipe CLIPPER instruction trace +4 string prof CLIPPER instruction profile + +#------------------------------------------------------------------------------ +# commands: file(1) magic for various shells and interpreters +# +#0 string : shell archive or script for antique kernel text +0 string/b #!\ /bin/sh POSIX shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /bin/csh C shell script text executable +!:mime text/x-shellscript +# korn shell magic, sent by George Wu, gwu@clyde.att.com +0 string/b #!\ /bin/ksh Korn shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /bin/tcsh Tenex C shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable +!:mime text/x-shellscript + +# +# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) +0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable +!:mime text/x-shellscript +0 string/b #!\ /bin/nawk new awk script text executable +!:mime text/x-nawk +0 string/b #!\ /usr/bin/nawk new awk script text executable +!:mime text/x-nawk +0 string/b #!\ /usr/local/bin/nawk new awk script text executable +!:mime text/x-nawk +0 string/b #!\ /bin/gawk GNU awk script text executable +!:mime text/x-gawk +0 string/b #!\ /usr/bin/gawk GNU awk script text executable +!:mime text/x-gawk +0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable +!:mime text/x-gawk +# +0 string/b #!\ /bin/awk awk script text executable +!:mime text/x-awk +0 string/b #!\ /usr/bin/awk awk script text executable +!:mime text/x-awk +# update to distinguish from *.vcf files +# this is broken because postscript has /EBEGIN{ for example. +#0 search/Bb BEGIN { awk script text + +# AT&T Bell Labs' Plan 9 shell +0 string/b #!\ /bin/rc Plan 9 rc shell script text executable + +# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) +0 string/b #!\ /bin/bash Bourne-Again shell script text executable +!:mime text/x-shellscript +0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable +!:mime text/x-shellscript + +# using env +0 string #!/usr/bin/env a +>15 string >\0 %s script text executable +0 string #!\ /usr/bin/env a +>16 string >\0 %s script text executable + +# PHP scripts +# Ulf Harnhammar +0 search/1/c =. +0 string $Suite TTCN Abstract Test Suite +>&1 string $SuiteId +>>&1 string >\n %s +>&2 string $SuiteId +>>&1 string >\n %s +>&3 string $SuiteId +>>&1 string >\n %s + +# MSC (message sequence charts) are a formal description technique, +# described in ITU-T Z.120, mainly used for communication protocols. +# Added by W. Borgert . +0 string mscdocument Message Sequence Chart (document) +0 string msc Message Sequence Chart (chart) +0 string submsc Message Sequence Chart (subchart) + +#------------------------------------------------------------------------------ +# compress: file(1) magic for pure-compression formats (no archives) +# +# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. +# +# Formats for various forms of compressed data +# Formats for "compress" proper have been moved into "compress.c", +# because it tries to uncompress it to figure out what's inside. + +# standard unix compress +0 string \037\235 compress'd data +!:mime application/x-compress +!:apple LZIVZIVU +>2 byte&0x80 >0 block compressed +>2 byte&0x1f x %d bits + +# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) +# Edited by Chris Chittleborough , March 2002 +# * Original filename is only at offset 10 if "extra field" absent +# * Produce shorter output - notably, only report compression methods +# other than 8 ("deflate", the only method defined in RFC 1952). +0 string \037\213 gzip compressed data +!:mime application/x-gzip +>2 byte <8 \b, reserved method +>2 byte >8 \b, unknown method +>3 byte &0x01 \b, ASCII +>3 byte &0x02 \b, has CRC +>3 byte &0x04 \b, extra field +>3 byte&0xC =0x08 +>>10 string x \b, was "%s" +>3 byte &0x10 \b, has comment +>9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT) +>9 byte =0x01 \b, from Amiga +>9 byte =0x02 \b, from VMS +>9 byte =0x03 \b, from Unix +>9 byte =0x04 \b, from VM/CMS +>9 byte =0x05 \b, from Atari +>9 byte =0x06 \b, from HPFS filesystem (OS/2, NT) +>9 byte =0x07 \b, from MacOS +>9 byte =0x08 \b, from Z-System +>9 byte =0x09 \b, from CP/M +>9 byte =0x0A \b, from TOPS/20 +>9 byte =0x0B \b, from NTFS filesystem (NT) +>9 byte =0x0C \b, from QDOS +>9 byte =0x0D \b, from Acorn RISCOS +>3 byte &0x10 \b, comment +>3 byte &0x20 \b, encrypted +>4 ledate >0 \b, last modified: %s +>8 byte 2 \b, max compression +>8 byte 4 \b, max speed + +# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis +0 string \037\036 packed data +!:mime application/octet-stream +>2 belong >1 \b, %d characters originally +>2 belong =1 \b, %d character originally +# +# This magic number is byte-order-independent. +0 short 0x1f1f old packed data +!:mime application/octet-stream + +# XXX - why *two* entries for "compacted data", one of which is +# byte-order independent, and one of which is byte-order dependent? +# +0 short 0x1fff compacted data +!:mime application/octet-stream +# This string is valid for SunOS (BE) and a matching "short" is listed +# in the Ultrix (LE) magic file. +0 string \377\037 compacted data +!:mime application/octet-stream +0 short 0145405 huf output +!:mime application/octet-stream + +# bzip2 +0 string BZh bzip2 compressed data +!:mime application/x-bzip2 +>3 byte >47 \b, block size = %c00k + +# lzip +0 string LZIP lzip compressed data +!:mime application/x-lzip +>4 byte x \b, version: %d + +# squeeze and crunch +# Michael Haardt +0 beshort 0x76FF squeezed data, +>4 string x original name %s +0 beshort 0x76FE crunched data, +>2 string x original name %s +0 beshort 0x76FD LZH compressed data, +>2 string x original name %s + +# Freeze +0 string \037\237 frozen file 2.1 +0 string \037\236 frozen file 1.0 (or gzip 0.5) + +# SCO compress -H (LZH) +0 string \037\240 SCO compress -H (LZH) data + +# European GSM 06.10 is a provisional standard for full-rate speech +# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse +# excitation/long term prediction) coding at 13 kbit/s. +# +# There's only a magic nibble (4 bits); that nibble repeats every 33 +# bytes. This isn't suited for use, but maybe we can use it someday. +# +# This will cause very short GSM files to be declared as data and +# mismatches to be declared as data too! +#0 byte&0xF0 0xd0 data +#>33 byte&0xF0 0xd0 +#>66 byte&0xF0 0xd0 +#>99 byte&0xF0 0xd0 +#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio + +# bzip a block-sorting file compressor +# by Julian Seward and others +# +#0 string BZ bzip compressed data +#>2 byte x \b, version: %c +#>3 string =1 \b, compression block size 100k +#>3 string =2 \b, compression block size 200k +#>3 string =3 \b, compression block size 300k +#>3 string =4 \b, compression block size 400k +#>3 string =5 \b, compression block size 500k +#>3 string =6 \b, compression block size 600k +#>3 string =7 \b, compression block size 700k +#>3 string =8 \b, compression block size 800k +#>3 string =9 \b, compression block size 900k + +# lzop from +0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data +>9 beshort <0x0940 +>>9 byte&0xf0 =0x00 - version 0. +>>9 beshort&0x0fff x \b%03x, +>>13 byte 1 LZO1X-1, +>>13 byte 2 LZO1X-1(15), +>>13 byte 3 LZO1X-999, +## >>22 bedate >0 last modified: %s, +>>14 byte =0x00 os: MS-DOS +>>14 byte =0x01 os: Amiga +>>14 byte =0x02 os: VMS +>>14 byte =0x03 os: Unix +>>14 byte =0x05 os: Atari +>>14 byte =0x06 os: OS/2 +>>14 byte =0x07 os: MacOS +>>14 byte =0x0A os: Tops/20 +>>14 byte =0x0B os: WinNT +>>14 byte =0x0E os: Win32 +>9 beshort >0x0939 +>>9 byte&0xf0 =0x00 - version 0. +>>9 byte&0xf0 =0x10 - version 1. +>>9 byte&0xf0 =0x20 - version 2. +>>9 beshort&0x0fff x \b%03x, +>>15 byte 1 LZO1X-1, +>>15 byte 2 LZO1X-1(15), +>>15 byte 3 LZO1X-999, +## >>25 bedate >0 last modified: %s, +>>17 byte =0x00 os: MS-DOS +>>17 byte =0x01 os: Amiga +>>17 byte =0x02 os: VMS +>>17 byte =0x03 os: Unix +>>17 byte =0x05 os: Atari +>>17 byte =0x06 os: OS/2 +>>17 byte =0x07 os: MacOS +>>17 byte =0x0A os: Tops/20 +>>17 byte =0x0B os: WinNT +>>17 byte =0x0E os: Win32 + +# 4.3BSD-Quasijarus Strong Compression +# http://minnie.tuhs.org/Quasijarus/compress.html +0 string \037\241 Quasijarus strong compressed data + +# From: Cory Dikkers +0 string XPKF Amiga xpkf.library compressed data +0 string PP11 Power Packer 1.1 compressed data +0 string PP20 Power Packer 2.0 compressed data, +>4 belong 0x09090909 fast compression +>4 belong 0x090A0A0A mediocre compression +>4 belong 0x090A0B0B good compression +>4 belong 0x090A0C0C very good compression +>4 belong 0x090A0C0D best compression + +# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) +# http://www.7-zip.org or DOC/7zFormat.txt +# +0 string 7z\274\257\047\034 7-zip archive data, +>6 byte x version %d +>7 byte x \b.%d + +# Type: LZMA +# URL: http://www.7-zip.org/sdk.html +# From: Robert Millan and Reuben Thomas +# Commented out because apparently not reliable (according to Debian +# bug #364260) +#0 string ]\000\000\200\000 LZMA compressed data + +# http://tukaani.org/xz/xz-file-format.txt +0 ustring \xFD7zXZ\x00 xz compressed data +!:mime application/x-xz + +# AFX compressed files (Wolfram Kleff) +2 string -afx- AFX compressed file data + +# Supplementary magic data for the file(1) command to support +# rzip(1). The format is described in magic(5). +# +# Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with +# this file. +# +0 string RZIP rzip compressed data +>4 byte x - version %d +>5 byte x \b.%d +>6 belong x (%d bytes) + +# Type: XZ +# URL: http://tukaani.org/xz/ +0 string \xfd\x37\x7a\x58\x5a\x00 XZ compressed data +!:mime application/x-xz +#------------------------------------------------------------------------------ +# Console game magic +# Toby Deshane +# ines: file(1) magic for Marat's iNES Nintendo Entertainment System +# ROM dump format + +0 string NES\032 iNES ROM dump, +>4 byte x %dx16k PRG +>5 byte x \b, %dx8k CHR +>6 byte&0x01 =0x1 \b, [Vert.] +>6 byte&0x01 =0x0 \b, [Horiz.] +>6 byte&0x02 =0x2 \b, [SRAM] +>6 byte&0x04 =0x4 \b, [Trainer] +>6 byte&0x04 =0x8 \b, [4-Scr] + +#------------------------------------------------------------------------------ +# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format +# +0x104 belong 0xCEED6666 Gameboy ROM: +>0x134 string >\0 "%.16s" +>0x146 byte 0x03 \b,[SGB] +>0x147 byte 0x00 \b, [ROM ONLY] +>0x147 byte 0x01 \b, [ROM+MBC1] +>0x147 byte 0x02 \b, [ROM+MBC1+RAM] +>0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT] +>0x147 byte 0x05 \b, [ROM+MBC2] +>0x147 byte 0x06 \b, [ROM+MBC2+BATTERY] +>0x147 byte 0x08 \b, [ROM+RAM] +>0x147 byte 0x09 \b, [ROM+RAM+BATTERY] +>0x147 byte 0x0B \b, [ROM+MMM01] +>0x147 byte 0x0C \b, [ROM+MMM01+SRAM] +>0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT] +>0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT] +>0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT] +>0x147 byte 0x11 \b, [ROM+MBC3] +>0x147 byte 0x12 \b, [ROM+MBC3+RAM] +>0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT] +>0x147 byte 0x19 \b, [ROM+MBC5] +>0x147 byte 0x1A \b, [ROM+MBC5+RAM] +>0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT] +>0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE] +>0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM] +>0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT] +>0x147 byte 0x1F \b, [Pocket Camera] +>0x147 byte 0xFD \b, [Bandai TAMA5] +>0x147 byte 0xFE \b, [Hudson HuC-3] +>0x147 byte 0xFF \b, [Hudson HuC-1] + +>0x148 byte 0 \b, ROM: 256Kbit +>0x148 byte 1 \b, ROM: 512Kbit +>0x148 byte 2 \b, ROM: 1Mbit +>0x148 byte 3 \b, ROM: 2Mbit +>0x148 byte 4 \b, ROM: 4Mbit +>0x148 byte 5 \b, ROM: 8Mbit +>0x148 byte 6 \b, ROM: 16Mbit +>0x148 byte 0x52 \b, ROM: 9Mbit +>0x148 byte 0x53 \b, ROM: 10Mbit +>0x148 byte 0x54 \b, ROM: 12Mbit + +>0x149 byte 1 \b, RAM: 16Kbit +>0x149 byte 2 \b, RAM: 64Kbit +>0x149 byte 3 \b, RAM: 128Kbit +>0x149 byte 4 \b, RAM: 1Mbit + +#>0x14e long x \b, CRC: %x + +#------------------------------------------------------------------------------ +# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format +# +0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump +>0x120 string >\0 Name: "%.16s" +>0x110 string >\0 %.16s +>0x1B0 string RA with SRAM + +#------------------------------------------------------------------------------ +# genesis: file(1) magic for the Super MegaDrive ROM dump format +# +0x280 string EAGN Super MagicDrive ROM dump +>0 byte x %dx16k blocks +>2 byte 0 \b, last in series or standalone +>2 byte >0 \b, split ROM +>8 byte 0xAA +>9 byte 0xBB + +#------------------------------------------------------------------------------ +# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format +# +0x280 string EAMG Super MagicDrive ROM dump +>0 byte x %dx16k blocks +>2 byte x \b, last in series or standalone +>8 byte 0xAA +>9 byte 0xBB + +#------------------------------------------------------------------------------ +# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps +# +# Does not detect all images. Very preliminary guesswork. Need more data +# on format. +# +# FIXME: need a little more info...;P +# +#0 byte 0xF3 +#>1 byte 0xED Sega Master System/Game Gear ROM dump +#>1 byte 0x31 Sega Master System/Game Gear ROM dump +#>1 byte 0xDB Sega Master System/Game Gear ROM dump +#>1 byte 0xAF Sega Master System/Game Gear ROM dump +#>1 byte 0xC3 Sega Master System/Game Gear ROM dump + +#------------------------------------------------------------------------------ +# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format +# +0 belong 0x21068028 Sega Dreamcast VMU game image +0 string LCDi Dream Animator file + +#------------------------------------------------------------------------------ +# v64: file(1) uncertain magic for the V64 format N64 ROM dumps +# +0 belong 0x37804012 V64 Nintendo 64 ROM dump + +# From: "Nelson A. de Oliveira" +# Nintendo .nds +192 string \044\377\256Qi\232 Nintendo DS Game ROM Image +# Nintendo .gba +0 string \056\000\000\352$\377\256Qi Nintendo Game Boy Advance ROM Image + +#------------------------------------------------------------------------------ +# msx: file(1) magic for MSX game cartridge dumps +# Too simple - MPi +#0 beshort 0x4142 MSX game cartridge dump + +#------------------------------------------------------------------------------ +# Sony Playstation executables (Adam Sjoegren ) : +0 string PS-X\ EXE Sony Playstation executable +# Area: +>113 string x (%s) + +#------------------------------------------------------------------------------ +# Microsoft Xbox executables .xbe (Esa Hyytiä ) +0 string XBEH XBE, Microsoft Xbox executable +# probabilistic checks whether signed or not +>0x0004 ulelong =0x0 +>>&2 ulelong =0x0 +>>>&2 ulelong =0x0 \b, not signed +>0x0004 ulelong >0 +>>&2 ulelong >0 +>>>&2 ulelong >0 \b, signed +# expect base address of 0x10000 +>0x0104 ulelong =0x10000 +>>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions +>>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007 +>>>(0x0118-0x0FF60) ulelong >0 (regions: +>>>>(0x0118-0x0FF60) ulelong &0x00000001 NA +>>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan +>>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World +>>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer +>>>(0x0118-0x0FF60) ulelong >0 \b) + +# -------------------------------- +# Microsoft Xbox data file formats +0 string XIP0 XIP, Microsoft Xbox data +0 string XTF0 XTF, Microsoft Xbox data + +# Atari Lynx cartridge dump (EXE/BLL header) +# From: "Stefan A. Haubenthal" + +0 beshort 0x8008 Lynx cartridge, +>2 beshort x RAM start $%04x +>6 string BS93 + +# Opera file system that is used on the 3DO console +# From: Serge van den Boom +0 string \x01ZZZZZ\x01 3DO "Opera" file system + +# From Gürkan Sengün , www.linuks.mine.nu +0 string GBS Nintendo Gameboy Music/Audio Data +12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module + +# Playstations Patch Files from: From: Thomas Klausner +0 string PPF30 Playstation Patch File version 3.0 +>5 byte 0 \b, PPF 1.0 patch +>5 byte 1 \b, PPF 2.0 patch +>5 byte 2 \b, PPF 3.0 patch +>>56 byte 0 \b, Imagetype BIN (any) +>>56 byte 1 \b, Imagetype GI (PrimoDVD) +>>57 byte 0 \b, Blockcheck disabled +>>57 byte 1 \b, Blockcheck enabled +>>58 byte 0 \b, Undo data not available +>>58 byte 1 \b, Undo data available +>6 string x \b, description: %s + +0 string PPF20 Playstation Patch File version 2.0 +>5 byte 0 \b, PPF 1.0 patch +>5 byte 1 \b, PPF 2.0 patch +>>56 lelong >0 \b, size of file to patch %d +>6 string x \b, description: %s + +0 string PPF10 Playstation Patch File version 1.0 +>5 byte 0 \b, Simple Encoding +>6 string x \b, description: %s + +# From: Daniel Dawson +# SNES9x .smv "movie" file format. +0 string SMV\x1A SNES9x input recording +>0x4 lelong x \b, version %d +# version 4 is latest so far +>0x4 lelong <5 +>>0x8 ledate x \b, recorded at %s +>>0xc lelong >0 \b, rerecorded %d times +>>0x10 lelong x \b, %d frames long +>>0x14 byte >0 \b, data for controller(s): +>>>0x14 byte &0x1 #1 +>>>0x14 byte &0x2 #2 +>>>0x14 byte &0x4 #3 +>>>0x14 byte &0x8 #4 +>>>0x14 byte &0x10 #5 +>>0x15 byte ^0x1 \b, begins from snapshot +>>0x15 byte &0x1 \b, begins from reset +>>0x15 byte ^0x2 \b, NTSC standard +>>0x15 byte &0x2 \b, PAL standard +>>0x17 byte &0x1 \b, settings: +# WIP1Timing not used as of version 4 +>>>0x4 lelong <4 +>>>>0x17 byte &0x2 WIP1Timing +>>>0x17 byte &0x4 Left+Right +>>>0x17 byte &0x8 VolumeEnvX +>>>0x17 byte &0x10 FakeMute +>>>0x17 byte &0x20 SyncSound +# New flag as of version 4 +>>>0x4 lelong >3 +>>>>0x17 byte &0x80 NoCPUShutdown +>>0x4 lelong <4 +>>>0x18 lelong >0x23 +>>>>0x20 leshort !0 +>>>>>0x20 lestring16 x \b, metadata: "%s" +>>0x4 lelong >3 +>>>0x24 byte >0 \b, port 1: +>>>>0x24 byte 1 joypad +>>>>0x24 byte 2 mouse +>>>>0x24 byte 3 SuperScope +>>>>0x24 byte 4 Justifier +>>>>0x24 byte 5 multitap +>>>0x24 byte >0 \b, port 2: +>>>>0x25 byte 1 joypad +>>>>0x25 byte 2 mouse +>>>>0x25 byte 3 SuperScope +>>>>0x25 byte 4 Justifier +>>>>0x25 byte 5 multitap +>>>0x18 lelong >0x43 +>>>>0x40 leshort !0 +>>>>>0x40 lestring16 x \b, metadata: "%s" +>>0x17 byte &0x40 \b, ROM: +>>>(0x18.l-26) lelong x CRC32 0x%08x +>>>(0x18.l-23) string x "%s" + +#------------------------------------------------------------------------------ +# convex: file(1) magic for Convex boxes +# +# Convexes are big-endian. +# +# /*\ +# * Below are the magic numbers and tests added for Convex. +# * Added at beginning, because they are expected to be used most. +# \*/ +0 belong 0507 Convex old-style object +>16 belong >0 not stripped +0 belong 0513 Convex old-style demand paged executable +>16 belong >0 not stripped +0 belong 0515 Convex old-style pre-paged executable +>16 belong >0 not stripped +0 belong 0517 Convex old-style pre-paged, non-swapped executable +>16 belong >0 not stripped +0 belong 0x011257 Core file +# +# The following are a series of dump format magic numbers. Each one +# corresponds to a drastically different dump format. The first on is +# the original dump format on a 4.1 BSD or earlier file system. The +# second marks the change between the 4.1 file system and the 4.2 file +# system. The Third marks the changing of the block size from 1K +# to 2K to be compatible with an IDC file system. The fourth indicates +# a dump that is dependent on Convex Storage Manager, because data in +# secondary storage is not physically contained within the dump. +# The restore program uses these number to determine how the data is +# to be extracted. +# +24 belong =60011 dump format, 4.1 BSD or earlier +24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC +24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible) +24 belong =60014 dump format, Convex Storage Manager by-reference dump +# +# what follows is a bunch of bit-mask checks on the flags field of the opthdr. +# If there is no `=' sign, assume just checking for whether the bit is set? +# +0 belong 0601 Convex SOFF +>88 belong&0x000f0000 =0x00000000 c1 +>88 belong &0x00010000 c2 +>88 belong &0x00020000 c2mp +>88 belong &0x00040000 parallel +>88 belong &0x00080000 intrinsic +>88 belong &0x00000001 demand paged +>88 belong &0x00000002 pre-paged +>88 belong &0x00000004 non-swapped +>88 belong &0x00000008 POSIX +# +>84 belong &0x80000000 executable +>84 belong &0x40000000 object +>84 belong&0x20000000 =0 not stripped +>84 belong&0x18000000 =0x00000000 native fpmode +>84 belong&0x18000000 =0x10000000 ieee fpmode +>84 belong&0x18000000 =0x18000000 undefined fpmode +# +0 belong 0605 Convex SOFF core +# +0 belong 0607 Convex SOFF checkpoint +>88 belong&0x000f0000 =0x00000000 c1 +>88 belong &0x00010000 c2 +>88 belong &0x00020000 c2mp +>88 belong &0x00040000 parallel +>88 belong &0x00080000 intrinsic +>88 belong &0x00000008 POSIX +# +>84 belong&0x18000000 =0x00000000 native fpmode +>84 belong&0x18000000 =0x10000000 ieee fpmode +>84 belong&0x18000000 =0x18000000 undefined fpmode + +#------------------------------------------------------------------------------ +# cracklib: file (1) magic for cracklib v2.7 + +0 lelong 0x70775631 Cracklib password index, little endian +>4 long >0 (%i words) +>4 long 0 ("64-bit") +>>8 long >-1 (%i words) +0 belong 0x70775631 Cracklib password index, big endian +>4 belong >-1 (%i words) +# really bellong 0x0000000070775631 +0 search/1 \0\0\0\0pwV1 Cracklib password index, big endian ("64-bit") +>12 belong >0 (%i words) +# ---------------------------------------------------------------------------- +# ctags: file (1) magic for Exuberant Ctags files +# From: Alexander Mai +0 search/1 =!_TAG Exuberant Ctags tag file text + +#------------------------------------------------------------------------------ +# dact: file(1) magic for DACT compressed files +# +0 long 0x444354C3 DACT compressed data +>4 byte >-1 (version %i. +>5 byte >-1 $BS%i. +>6 byte >-1 $BS%i) +>7 long >0 $BS, original size: %i bytes +>15 long >30 $BS, block size: %i bytes + +#------------------------------------------------------------------------------ +# database: file(1) magic for various databases +# +# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) +# +# +# GDBM magic numbers +# Will be maintained as part of the GDBM distribution in the future. +# +0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian +!:mime application/x-gdbm +0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian +!:mime application/x-gdbm +0 string GDBM GNU dbm 2.x database +!:mime application/x-gdbm +# +# Berkeley DB +# +# Ian Darwin's file /etc/magic files: big/little-endian version. +# +# Hash 1.85/1.86 databases store metadata in network byte order. +# Btree 1.85/1.86 databases store the metadata in host byte order. +# Hash and Btree 2.X and later databases store the metadata in host byte order. + +0 long 0x00061561 Berkeley DB +!:mime application/x-dbm +>8 belong 4321 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, native byte-order) +>8 belong 1234 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, little-endian) + +0 belong 0x00061561 Berkeley DB +>8 belong 4321 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, big-endian) +>8 belong 1234 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, native byte-order) + +0 long 0x00053162 Berkeley DB 1.85/1.86 +>4 long >0 (Btree, version %d, native byte-order) +0 belong 0x00053162 Berkeley DB 1.85/1.86 +>4 belong >0 (Btree, version %d, big-endian) +0 lelong 0x00053162 Berkeley DB 1.85/1.86 +>4 lelong >0 (Btree, version %d, little-endian) + +12 long 0x00061561 Berkeley DB +>16 long >0 (Hash, version %d, native byte-order) +12 belong 0x00061561 Berkeley DB +>16 belong >0 (Hash, version %d, big-endian) +12 lelong 0x00061561 Berkeley DB +>16 lelong >0 (Hash, version %d, little-endian) + +12 long 0x00053162 Berkeley DB +>16 long >0 (Btree, version %d, native byte-order) +12 belong 0x00053162 Berkeley DB +>16 belong >0 (Btree, version %d, big-endian) +12 lelong 0x00053162 Berkeley DB +>16 lelong >0 (Btree, version %d, little-endian) + +12 long 0x00042253 Berkeley DB +>16 long >0 (Queue, version %d, native byte-order) +12 belong 0x00042253 Berkeley DB +>16 belong >0 (Queue, version %d, big-endian) +12 lelong 0x00042253 Berkeley DB +>16 lelong >0 (Queue, version %d, little-endian) + +# From Max Bowsher. +12 long 0x00040988 Berkeley DB +>16 long >0 (Log, version %d, native byte-order) +12 belong 0x00040988 Berkeley DB +>16 belong >0 (Log, version %d, big-endian) +12 lelong 0x00040988 Berkeley DB +>16 lelong >0 (Log, version %d, little-endian) + +# +# +# Round Robin Database Tool by Tobias Oetiker +0 string RRD RRDTool DB +>4 string x version %s +#---------------------------------------------------------------------- +# ROOT: file(1) magic for ROOT databases +# +0 string root\0 ROOT file +>4 belong x Version %d +>33 belong x (Compression: %d) + +# XXX: Weak magic. +# Alex Ott +## Paradox file formats +#2 leshort 0x0800 Paradox +#>0x39 byte 3 v. 3.0 +#>0x39 byte 4 v. 3.5 +#>0x39 byte 9 v. 4.x +#>0x39 byte 10 v. 5.x +#>0x39 byte 11 v. 5.x +#>0x39 byte 12 v. 7.x +#>>0x04 byte 0 indexed .DB data file +#>>0x04 byte 1 primary index .PX file +#>>0x04 byte 2 non-indexed .DB data file +#>>0x04 byte 3 non-incrementing secondary index .Xnn file +#>>0x04 byte 4 secondary index .Ynn file +#>>0x04 byte 5 incrementing secondary index .Xnn file +#>>0x04 byte 6 non-incrementing secondary index .XGn file +#>>0x04 byte 7 secondary index .YGn file +#>>>0x04 byte 8 incrementing secondary index .XGn file + +## XBase database files +#0 byte 0x02 +#>8 leshort >0 +#>>12 leshort 0 FoxBase +#!:mime application/x-dbf +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x03 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x04 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBASE IV no memo file +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x05 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBASE V no memo file +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x30 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 Visual FoxPro +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x43 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FlagShip with memo var size +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x7b +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBASEIV with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x83 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FoxBase+, dBaseIII+ with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x8b +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBaseIV with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x8e +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 dBaseIV with SQL Table +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0xb3 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FlagShip with .dbt memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0xf5 +#!:mime application/x-dbf +#>8 leshort >0 +#>>12 leshort 0 FoxPro with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 leshort 0x0006 DBase 3 index file + +# MS Access database +4 string Standard\ Jet\ DB Microsoft Access Database +!:mime application/x-msaccess + +# TDB database from Samba et al - Martin Pool +0 string TDB\ file TDB database +>32 lelong 0x2601196D version 6, little-endian +>>36 lelong x hash size %d bytes + +# SE Linux policy database +0 lelong 0xf97cff8c SE Linux policy +>16 lelong x v%d +>20 lelong 1 MLS +>24 lelong x %d symbols +>28 lelong x %d ocons + +# ICE authority file data (Wolfram Kleff) +2 string ICE ICE authority data + +# X11 Xauthority file (Wolfram Kleff) +10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data + +# From: Maxime Henrion +# PostgreSQL's custom dump format, Maxime Henrion +0 string PGDMP PostgreSQL custom database dump +>5 byte x - v%d +>6 byte x \b.%d +>5 beshort <0x101 \b-0 +>5 beshort >0x100 +>>7 byte x \b-%d + +# Type: Advanced Data Format (ADF) database +# URL: http://www.grc.nasa.gov/WWW/cgns/adf/ +# From: Nicolas Chauvat +0 string @(#)ADF\ Database CGNS Advanced Data Format + +# Tokyo Cabinet magic data +# http://tokyocabinet.sourceforge.net/index.html +0 string ToKyO\ CaBiNeT\n Tokyo Cabinet +>14 string x \b (%s) +>32 byte 0 \b, Hash +!:mime application/x-tokyocabinet-hash +>32 byte 1 \b, B+ tree +!:mime application/x-tokyocabinet-btree +>32 byte 2 \b, Fixed-length +!:mime application/x-tokyocabinet-fixed +>32 byte 3 \b, Table +!:mime application/x-tokyocabinet-table +>33 byte &1 \b, [open] +>33 byte &2 \b, [fatal] +>34 byte x \b, apow=%d +>35 byte x \b, fpow=%d +>36 byte &0x01 \b, [large] +>36 byte &0x02 \b, [deflate] +>36 byte &0x04 \b, [bzip] +>36 byte &0x08 \b, [tcbs] +>36 byte &0x10 \b, [excodec] +>40 lequad x \b, bnum=%lld +>48 lequad x \b, rnum=%lld +>56 lequad x \b, fsiz=%lld + +#------------------------------------------------------------------------------ +# diamond: file(1) magic for Diamond system +# +# ... diamond is a multi-media mail and electronic conferencing system.... +# +# XXX - I think it was either renamed Slate, or replaced by Slate.... +# +# The full deal is too long... +#0 string \n Diamond Multimedia Document +0 string =\n\n________64E Alpha archive +>22 string X -- out of date +# +# Alpha COFF Based Executables +# The stripped stuff really needs to be an 8 byte (64 bit) compare, +# but this works +0 leshort 0x183 COFF format alpha +>22 leshort&020000 &010000 sharable library, +>22 leshort&020000 ^010000 dynamically linked, +>24 leshort 0410 pure +>24 leshort 0413 demand paged +>8 lelong >0 executable or object module, not stripped +>8 lelong 0 +>>12 lelong 0 executable or object module, stripped +>>12 lelong >0 executable or object module, not stripped +>27 byte >0 - version %d. +>26 byte >0 %d- +>28 leshort >0 %d +# +# The next is incomplete, we could tell more about this format, +# but its not worth it. +0 leshort 0x188 Alpha compressed COFF +0 leshort 0x18f Alpha u-code object +# +# +# Some other interesting Digital formats, +0 string \377\377\177 ddis/ddif +0 string \377\377\174 ddis/dots archive +0 string \377\377\176 ddis/dtif table data +0 string \033c\033 LN03 output +0 long 04553207 X image +# +0 string =!!\n profiling data file +# +# Locale data tables (MIPS and Alpha). +# +0 short 0x0501 locale data table +>6 short 0x24 for MIPS +>6 short 0x40 for Alpha +# ATSC A/53 aka AC-3 aka Dolby Digital +# from http://www.atsc.org/standards/a_52a.pdf +# corrections, additions, etc. are always welcome! +# +# syncword +0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream, +# fscod +>4 byte&0xc0 0x00 48 kHz, +>4 byte&0xc0 0x40 44.1 kHz, +>4 byte&0xc0 0x80 32 kHz, +# is this one used for 96 kHz? +>4 byte&0xc0 0xc0 reserved frequency, +# +>5 byte&7 = 0 \b, complete main (CM) +>5 byte&7 = 1 \b, music and effects (ME) +>5 byte&7 = 2 \b, visually impaired (VI) +>5 byte&7 = 3 \b, hearing impaired (HI) +>5 byte&7 = 4 \b, dialogue (D) +>5 byte&7 = 5 \b, commentary (C) +>5 byte&7 = 6 \b, emergency (E) +# acmod +>6 byte&0xe0 0x00 1+1 front, +>6 byte&0xe0 0x20 1 front/0 rear, +>6 byte&0xe0 0x40 2 front/0 rear, +>6 byte&0xe0 0x60 3 front/0 rear, +>6 byte&0xe0 0x80 2 front/1 rear, +>6 byte&0xe0 0xa0 3 front/1 rear, +>6 byte&0xe0 0xc0 2 front/2 rear, +>6 byte&0xe0 0xe0 3 front/2 rear, +# lfeon (these may be incorrect) +>7 byte&0x40 0x00 LFE off, +>7 byte&0x40 0x40 LFE on, +# +>4 byte&0x3e = 0x00 \b, 32 kbit/s +>4 byte&0x3e = 0x02 \b, 40 kbit/s +>4 byte&0x3e = 0x04 \b, 48 kbit/s +>4 byte&0x3e = 0x06 \b, 56 kbit/s +>4 byte&0x3e = 0x08 \b, 64 kbit/s +>4 byte&0x3e = 0x0a \b, 80 kbit/s +>4 byte&0x3e = 0x0c \b, 96 kbit/s +>4 byte&0x3e = 0x0e \b, 112 kbit/s +>4 byte&0x3e = 0x10 \b, 128 kbit/s +>4 byte&0x3e = 0x12 \b, 160 kbit/s +>4 byte&0x3e = 0x14 \b, 192 kbit/s +>4 byte&0x3e = 0x16 \b, 224 kbit/s +>4 byte&0x3e = 0x18 \b, 256 kbit/s +>4 byte&0x3e = 0x1a \b, 320 kbit/s +>4 byte&0x3e = 0x1c \b, 384 kbit/s +>4 byte&0x3e = 0x1e \b, 448 kbit/s +>4 byte&0x3e = 0x20 \b, 512 kbit/s +>4 byte&0x3e = 0x22 \b, 576 kbit/s +>4 byte&0x3e = 0x24 \b, 640 kbit/s +# dsurmod (these may be incorrect) +>6 beshort&0x0180 0x0000 Dolby Surround not indicated +>6 beshort&0x0180 0x0080 not Dolby Surround encoded +>6 beshort&0x0180 0x0100 Dolby Surround encoded +>6 beshort&0x0180 0x0180 reserved Dolby Surround mode + +#------------------------------------------------------------------------------ +# dump: file(1) magic for dump file format--for new and old dump filesystems +# +# We specify both byte orders in order to recognize byte-swapped dumps. +# +24 belong 60012 new-fs dump file (big endian), +>4 bedate x Previous dump %s, +>8 bedate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 belong 60011 old-fs dump file (big endian), +#>4 bedate x Previous dump %s, +#>8 bedate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 lelong 60012 new-fs dump file (little endian), +>4 ledate x This dump %s, +>8 ledate x Previous dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +24 lelong 60011 old-fs dump file (little endian), +#>4 ledate x Previous dump %s, +#>8 ledate x This dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +18 leshort 60011 old-fs dump file (16-bit, assuming PDP-11 endianness), +>2 medate x Previous dump %s, +>6 medate x This dump %s, +>10 leshort >0 Volume %ld, +>0 leshort 1 tape header. +>0 leshort 2 beginning of file record. +>0 leshort 3 map of inodes on tape. +>0 leshort 4 continuation of file record. +>0 leshort 5 end of volume. +>0 leshort 6 map of inodes deleted. +>0 leshort 7 end of medium (for floppy). + +24 belong 0x19540119 new-fs dump file (ufs2, big endian), +>896 beqdate x Previous dump %s, +>904 beqdate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 lelong 0x19540119 new-fs dump file (ufs2, little endian), +>896 leqdate x This dump %s, +>904 leqdate x Previous dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +#------------------------------------------------------------------------------ +# Dyadic: file(1) magic for Dyalog APL. +# +0 byte 0xaa +>1 byte <4 Dyalog APL +>>1 byte 0x00 incomplete workspace +>>1 byte 0x01 component file +>>1 byte 0x02 external variable +>>1 byte 0x03 workspace +>>2 byte x version %d +>>3 byte x .%d + +#------------------------------------------------------------------------------ +# T602 editor documents +# by David Necas +0 string @CT\ T602 document data, +>4 string 0 Kamenicky +>4 string 1 CP 852 +>4 string 2 KOI8-CS +>4 string >2 unknown encoding + +# Vi IMproved Encrypted file +# by David Necas +0 string VimCrypt~ Vim encrypted file data +# Vi IMproved Swap file +# by Sven Wegener +0 string b0VIM\ Vim swap file +>&0 string >\0 \b, version %s + +#------------------------------------------------------------------------------ +# efi: file(1) magic for Universal EFI binaries + +0 lelong 0x0ef1fab9 +>4 lelong 1 Universal EFI binary with 1 architecture +>>&0 lelong 7 \b, i386 +>>&0 lelong 0x01000007 \b, x86_64 +>4 lelong 2 Universal EFI binary with 2 architectures +>>&0 lelong 7 \b, i386 +>>&0 lelong 0x01000007 \b, x86_64 +>>&20 lelong 7 \b, i386 +>>&20 lelong 0x01000007 \b, x86_64 +>4 lelong >2 Universal EFI binary with %ld architectures + +#------------------------------------------------------------------------------ +# elf: file(1) magic for ELF executables +# +# We have to check the byte order flag to see what byte order all the +# other stuff in the header is in. +# +# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? +# +# Created by: unknown +# Modified by (1): Daniel Quinlan +# Modified by (2): Peter Tobias (core support) +# Modified by (3): Christian 'Dr. Disk' Hechelmann (fix of core support) +# Modified by (4): (VMS Itanium) +# Modified by (5): Matthias Urlichs (Listing of many architectures) +0 string \177ELF ELF +>4 byte 0 invalid class +>4 byte 1 32-bit +>4 byte 2 64-bit +>5 byte 0 invalid byte order +>5 byte 1 LSB +>>16 leshort 0 no file type, +!:strength *2 +!:mime application/octet-stream +>>16 leshort 1 relocatable, +!:mime application/x-object +>>16 leshort 2 executable, +!:mime application/x-executable +>>16 leshort 3 shared object, +!:mime application/x-sharedlib +>>16 leshort 4 core file +!:mime application/x-coredump +# Core file detection is not reliable. +#>>>(0x38+0xcc) string >\0 of '%s' +#>>>(0x38+0x10) lelong >0 (signal %d), +>>16 leshort &0xff00 processor-specific, +>>18 leshort 0 no machine, +>>18 leshort 1 AT&T WE32100 - invalid byte order, +>>18 leshort 2 SPARC - invalid byte order, +>>18 leshort 3 Intel 80386, +>>18 leshort 4 Motorola +>>>36 lelong &0x01000000 68000 - invalid byte order, +>>>36 lelong &0x00810000 CPU32 - invalid byte order, +>>>36 lelong 0 68020 - invalid byte order, +>>18 leshort 5 Motorola 88000 - invalid byte order, +>>18 leshort 6 Intel 80486, +>>18 leshort 7 Intel 80860, +# The official e_machine number for MIPS is now #8, regardless of endianness. +# The second number (#10) will be deprecated later. For now, we still +# say something if #10 is encountered, but only gory details for #8. +>>18 leshort 8 MIPS, +>>>36 lelong &0x20 N32 +>>18 leshort 10 MIPS, +>>>36 lelong &0x20 N32 +>>18 leshort 8 +# only for 32-bit +>>>4 byte 1 +>>>>36 lelong&0xf0000000 0x00000000 MIPS-I +>>>>36 lelong&0xf0000000 0x10000000 MIPS-II +>>>>36 lelong&0xf0000000 0x20000000 MIPS-III +>>>>36 lelong&0xf0000000 0x30000000 MIPS-IV +>>>>36 lelong&0xf0000000 0x40000000 MIPS-V +>>>>36 lelong&0xf0000000 0x50000000 MIPS32 +>>>>36 lelong&0xf0000000 0x60000000 MIPS64 +>>>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2 +# only for 64-bit +>>>4 byte 2 +>>>>48 lelong&0xf0000000 0x00000000 MIPS-I +>>>>48 lelong&0xf0000000 0x10000000 MIPS-II +>>>>48 lelong&0xf0000000 0x20000000 MIPS-III +>>>>48 lelong&0xf0000000 0x30000000 MIPS-IV +>>>>48 lelong&0xf0000000 0x40000000 MIPS-V +>>>>48 lelong&0xf0000000 0x50000000 MIPS32 +>>>>48 lelong&0xf0000000 0x60000000 MIPS64 +>>>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2 +>>18 leshort 9 Amdahl - invalid byte order, +>>18 leshort 10 MIPS (deprecated), +>>18 leshort 11 RS6000 - invalid byte order, +>>18 leshort 15 PA-RISC - invalid byte order, +>>>50 leshort 0x0214 2.0 +>>>48 leshort &0x0008 (LP64), +>>18 leshort 16 nCUBE, +>>18 leshort 17 Fujitsu VPP500, +>>18 leshort 18 SPARC32PLUS - invalid byte order, +>>18 leshort 20 PowerPC, +>>18 leshort 22 IBM S/390, +>>18 leshort 36 NEC V800, +>>18 leshort 37 Fujitsu FR20, +>>18 leshort 38 TRW RH-32, +>>18 leshort 39 Motorola RCE, +>>18 leshort 40 ARM, +>>18 leshort 41 Alpha, +>>18 leshort 0xa390 IBM S/390 (obsolete), +>>18 leshort 42 Renesas SH, +>>18 leshort 43 SPARC V9 - invalid byte order, +>>18 leshort 44 Siemens Tricore Embedded Processor, +>>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc., +>>18 leshort 46 Renesas H8/300, +>>18 leshort 47 Renesas H8/300H, +>>18 leshort 48 Renesas H8S, +>>18 leshort 49 Renesas H8/500, +>>18 leshort 50 IA-64, +>>18 leshort 51 Stanford MIPS-X, +>>18 leshort 52 Motorola Coldfire, +>>18 leshort 53 Motorola M68HC12, +>>18 leshort 54 Fujitsu MMA, +>>18 leshort 55 Siemens PCP, +>>18 leshort 56 Sony nCPU, +>>18 leshort 57 Denso NDR1, +>>18 leshort 58 Start*Core, +>>18 leshort 59 Toyota ME16, +>>18 leshort 60 ST100, +>>18 leshort 61 Tinyj emb., +>>18 leshort 62 x86-64, +>>18 leshort 63 Sony DSP, +>>18 leshort 66 FX66, +>>18 leshort 67 ST9+ 8/16 bit, +>>18 leshort 68 ST7 8 bit, +>>18 leshort 69 MC68HC16, +>>18 leshort 70 MC68HC11, +>>18 leshort 71 MC68HC08, +>>18 leshort 72 MC68HC05, +>>18 leshort 73 SGI SVx, +>>18 leshort 74 ST19 8 bit, +>>18 leshort 75 Digital VAX, +>>18 leshort 76 Axis cris, +>>18 leshort 77 Infineon 32-bit embedded, +>>18 leshort 78 Element 14 64-bit DSP, +>>18 leshort 79 LSI Logic 16-bit DSP, +>>18 leshort 80 MMIX, +>>18 leshort 81 Harvard machine-independent, +>>18 leshort 82 SiTera Prism, +>>18 leshort 83 Atmel AVR 8-bit, +>>18 leshort 84 Fujitsu FR30, +>>18 leshort 85 Mitsubishi D10V, +>>18 leshort 86 Mitsubishi D30V, +>>18 leshort 87 NEC v850, +>>18 leshort 88 Renesas M32R, +>>18 leshort 89 Matsushita MN10300, +>>18 leshort 90 Matsushita MN10200, +>>18 leshort 91 picoJava, +>>18 leshort 92 OpenRISC, +>>18 leshort 93 ARC Cores Tangent-A5, +>>18 leshort 94 Tensilica Xtensa, +>>18 leshort 97 NatSemi 32k, +>>18 leshort 106 Analog Devices Blackfin, +>>18 leshort 113 Altera Nios II, +>>18 leshort 0xae META, +>>18 leshort 0x3426 OpenRISC (obsolete), +>>18 leshort 0x8472 OpenRISC (obsolete), +>>18 leshort 0x9026 Alpha (unofficial), +>>20 lelong 0 invalid version +>>20 lelong 1 version 1 +>>36 lelong 1 MathCoPro/FPU/MAU Required +>5 byte 2 MSB +>>16 beshort 0 no file type, +!:mime application/octet-stream +>>16 beshort 1 relocatable, +!:mime application/x-object +>>16 beshort 2 executable, +!:mime application/x-executable +>>16 beshort 3 shared object, +!:mime application/x-sharedlib +>>16 beshort 4 core file, +!:mime application/x-coredump +#>>>(0x38+0xcc) string >\0 of '%s' +#>>>(0x38+0x10) belong >0 (signal %d), +>>16 beshort &0xff00 processor-specific, +>>18 beshort 0 no machine, +>>18 beshort 1 AT&T WE32100, +>>18 beshort 2 SPARC, +>>18 beshort 3 Intel 80386 - invalid byte order, +>>18 beshort 4 Motorola +>>>36 belong &0x01000000 68000, +>>>36 belong &0x00810000 CPU32, +>>>36 belong 0 68020, +>>18 beshort 5 Motorola 88000, +>>18 beshort 6 Intel 80486 - invalid byte order, +>>18 beshort 7 Intel 80860, +# only for MIPS - see comment in little-endian section above. +>>18 beshort 8 MIPS, +>>>36 belong &0x20 N32 +>>18 beshort 10 MIPS, +>>>36 belong &0x20 N32 +>>18 beshort 8 +# only for 32-bit +>>>4 byte 1 +>>>>36 belong&0xf0000000 0x00000000 MIPS-I +>>>>36 belong&0xf0000000 0x10000000 MIPS-II +>>>>36 belong&0xf0000000 0x20000000 MIPS-III +>>>>36 belong&0xf0000000 0x30000000 MIPS-IV +>>>>36 belong&0xf0000000 0x40000000 MIPS-V +>>>>36 belong&0xf0000000 0x50000000 MIPS32 +>>>>36 belong&0xf0000000 0x60000000 MIPS64 +>>>>36 belong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>36 belong&0xf0000000 0x80000000 MIPS64 rel2 +# only for 64-bit +>>>4 byte 2 +>>>>48 belong&0xf0000000 0x00000000 MIPS-I +>>>>48 belong&0xf0000000 0x10000000 MIPS-II +>>>>48 belong&0xf0000000 0x20000000 MIPS-III +>>>>48 belong&0xf0000000 0x30000000 MIPS-IV +>>>>48 belong&0xf0000000 0x40000000 MIPS-V +>>>>48 belong&0xf0000000 0x50000000 MIPS32 +>>>>48 belong&0xf0000000 0x60000000 MIPS64 +>>>>48 belong&0xf0000000 0x70000000 MIPS32 rel2 +>>>>48 belong&0xf0000000 0x80000000 MIPS64 rel2 +>>18 beshort 9 Amdahl, +>>18 beshort 10 MIPS (deprecated), +>>18 beshort 11 RS6000, +>>18 beshort 15 PA-RISC +>>>50 beshort 0x0214 2.0 +>>>48 beshort &0x0008 (LP64) +>>18 beshort 16 nCUBE, +>>18 beshort 17 Fujitsu VPP500, +>>18 beshort 18 SPARC32PLUS, +>>>36 belong&0xffff00 0x000100 V8+ Required, +>>>36 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, +>>>36 belong&0xffff00 0x000400 HaL R1 Extensions Required, +>>>36 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, +>>18 beshort 20 PowerPC or cisco 4500, +>>18 beshort 21 64-bit PowerPC or cisco 7500, +>>18 beshort 22 IBM S/390, +>>18 beshort 23 Cell SPU, +>>18 beshort 24 cisco SVIP, +>>18 beshort 25 cisco 7200, +>>18 beshort 36 NEC V800 or cisco 12000, +>>18 beshort 37 Fujitsu FR20, +>>18 beshort 38 TRW RH-32, +>>18 beshort 39 Motorola RCE, +>>18 beshort 40 ARM, +>>18 beshort 41 Alpha, +>>18 beshort 42 Renesas SH, +>>18 beshort 43 SPARC V9, +>>>48 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, +>>>48 belong&0xffff00 0x000400 HaL R1 Extensions Required, +>>>48 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, +>>>48 belong&0x3 0 total store ordering, +>>>48 belong&0x3 1 partial store ordering, +>>>48 belong&0x3 2 relaxed memory ordering, +>>18 beshort 44 Siemens Tricore Embedded Processor, +>>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc., +>>18 beshort 46 Renesas H8/300, +>>18 beshort 47 Renesas H8/300H, +>>18 beshort 48 Renesas H8S, +>>18 beshort 49 Renesas H8/500, +>>18 beshort 50 IA-64, +>>18 beshort 51 Stanford MIPS-X, +>>18 beshort 52 Motorola Coldfire, +>>18 beshort 53 Motorola M68HC12, +>>18 beshort 73 Cray NV1, +>>18 beshort 75 Digital VAX, +>>18 beshort 88 Renesas M32R, +>>18 leshort 92 OpenRISC, +>>18 leshort 0x3426 OpenRISC (obsolete), +>>18 leshort 0x8472 OpenRISC (obsolete), +>>18 beshort 94 Tensilica Xtensa, +>>18 beshort 97 NatSemi 32k, +>>18 beshort 0x18ad AVR32 (unofficial), +>>18 beshort 0x9026 Alpha (unofficial), +>>18 beshort 0xa390 IBM S/390 (obsolete), +>>20 belong 0 invalid version +>>20 belong 1 version 1 +>>36 belong 1 MathCoPro/FPU/MAU Required +# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed +# like proper ELF, but extracting the string had bad results. +>4 byte <0x80 +>>8 string >\0 (%s) +>8 string \0 +>>7 byte 0 (SYSV) +>>7 byte 1 (HP-UX) +>>7 byte 2 (NetBSD) +>>7 byte 3 (GNU/Linux) +>>7 byte 4 (GNU/Hurd) +>>7 byte 5 (86Open) +>>7 byte 6 (Solaris) +>>7 byte 7 (Monterey) +>>7 byte 8 (IRIX) +>>7 byte 9 (FreeBSD) +>>7 byte 10 (Tru64) +>>7 byte 11 (Novell Modesto) +>>7 byte 12 (OpenBSD) +>8 string \2 +>>7 byte 13 (OpenVMS) +>>7 byte 97 (ARM) +>>7 byte 255 (embedded) + +#------------------------------------------------------------------------------ +# encore: file(1) magic for Encore machines +# +# XXX - needs to have the byte order specified (NS32K was little-endian, +# dunno whether they run the 88K in little-endian mode or not). +# +0 short 0x154 Encore +>20 short 0x107 executable +>20 short 0x108 pure executable +>20 short 0x10b demand-paged executable +>20 short 0x10f unsupported executable +>12 long >0 not stripped +>22 short >0 - version %ld +>22 short 0 - +#>4 date x stamp %s +0 short 0x155 Encore unsupported executable +>12 long >0 not stripped +>22 short >0 - version %ld +>22 short 0 - +#>4 date x stamp %s +#------------------------------------------------------------------------------ +# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1] +# Stefan Praszalowicz (hpicollo@worldnet.fr) +# Useful information for improving this file can be found at: +# http://software.frodo.looijaard.name/psiconv/formats/Index.html +0 lelong 0x10000037 +>4 lelong 0x1000006D +>>8 lelong 0x1000007F Psion Word +>>8 lelong 0x10000088 Psion Sheet +>>8 lelong 0x1000007D Psion Sketch +>>8 lelong 0x10000085 Psion TextEd + +#------------------------------------------------------------------------------ +# erlang: file(1) magic for Erlang JAM and BEAM files +# URL: http://www.erlang.org/faq/x779.html#AEN812 + +# OTP R3-R4 +0 string \0177BEAM! Old Erlang BEAM file +>6 short >0 - version %d + +# OTP R5 and onwards +0 string FOR1 +>8 string BEAM Erlang BEAM file + +# 4.2 version may have a copyright notice! +4 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 +79 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 + +4 string 1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995 Erlang JAM file - version 4.3 + +#------------------------------------------------------------------------------ +# ESRI Shapefile format (.shp .shx .dbf=DBaseIII) +# Based on info from +# +0 belong 9994 ESRI Shapefile +>4 belong =0 +>8 belong =0 +>12 belong =0 +>16 belong =0 +>20 belong =0 +>28 lelong x version %d +>24 belong x length %d +>32 lelong =0 type Null Shape +>32 lelong =1 type Point +>32 lelong =3 type PolyLine +>32 lelong =5 type Polygon +>32 lelong =8 type MultiPoint +>32 lelong =11 type PointZ +>32 lelong =13 type PolyLineZ +>32 lelong =15 type PolygonZ +>32 lelong =18 type MultiPointZ +>32 lelong =21 type PointM +>32 lelong =23 type PolyLineM +>32 lelong =25 type PolygonM +>32 lelong =28 type MultiPointM +>32 lelong =31 type MultiPatch + +#------------------------------------------------------------------------------ +# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files +# From Roger Leigh +0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0 +0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0 +0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0 + + +#------------------------------------------------------------------------------ +# filesystems: file(1) magic for different filesystems +# +0 string \366\366\366\366 PC formatted floppy with no filesystem +# Sun disk labels +# From /usr/include/sun/dklabel.h: +0774 beshort 0xdabe +# modified by Joerg Jenderek, because original test +# succeeds for Cabinet archive dao360.dl_ with negative blocks +>0770 long >0 Sun disk label +>>0 string x '%s +>>>31 string >\0 \b%s +>>>>63 string >\0 \b%s +>>>>>95 string >\0 \b%s +>>0 string x \b' +>>0734 short >0 %d rpm, +>>0736 short >0 %d phys cys, +>>0740 short >0 %d alts/cyl, +>>0746 short >0 %d interleave, +>>0750 short >0 %d data cyls, +>>0752 short >0 %d alt cyls, +>>0754 short >0 %d heads/partition, +>>0756 short >0 %d sectors/track, +>>0764 long >0 start cyl %ld, +>>0770 long x %ld blocks +# Is there a boot block written 1 sector in? +>512 belong&077777777 0600407 \b, boot block present +# Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc +# (http://btmgr.sourceforge.net/docs/user-guide-3.html) +0 string SBMBAKUP_ Smart Boot Manager backup file +>9 string x \b, version %-5.5s +>>14 string =_ +>>>15 string x %-.1s +>>>>16 string =_ \b. +>>>>>17 string x \b%-.1s +>>>>>>18 string =_ \b. +>>>>>>>19 string x \b%-.1s +>>>22 ubyte 0 +>>>>21 ubyte x \b, from drive 0x%x +>>>22 ubyte >0 +>>>>21 string x \b, from drive %s + +# Joerg Jenderek +# DOS Emulator image is 128 byte, null right padded header + harddisc image +0 string DOSEMU\0 +>0x27E leshort 0xAA55 +#offset is 128 +>>19 ubyte 128 +>>>(19.b-1) ubyte 0x0 DOS Emulator image +>>>>7 ulelong >0 \b, %u heads +>>>>11 ulelong >0 \b, %d sectors/track +>>>>15 ulelong >0 \b, %d cylinders + +# updated by Joerg Jenderek at Sep 2007 +# only for sector sizes with 512 or more Bytes +0x1FE leshort 0xAA55 x86 boot sector +# to do also for sectors < than 512 Bytes and some other files, GRR +#30 search/481 \x55\xAA x86 boot sector +# not for BeOS floppy 1440k, MBRs +#(11.s-2) uleshort 0xAA55 x86 boot sector +>2 string OSBS \b, OS/BS MBR +# J\xf6rg Jenderek +>0x8C string Invalid\ partition\ table \b, MS-DOS MBR +# dr-dos with some upper-, lowercase variants +>0x9D string Invalid\ partition\ table$ +>>181 string No\ Operating\ System$ +>>>201 string Operating\ System\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 +>0x9D string Invalid\ partition\ table$ +>>181 string No\ operating\ system$ +>>>201 string Operating\ system\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 +>342 string Invalid\ partition\ table$ +>>366 string No\ operating\ system$ +>>>386 string Operating\ system\ load\ error$ \b, DR-DOS MBR, version 7.01 to 7.03 +>295 string NEWLDR\0 +>>302 string Bad\ PT\ $ +>>>310 string No\ OS\ $ +>>>>317 string OS\ load\ err$ +>>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r +>>>>>>358 string Press\ any\ key\ to\ continue.\n\r$ +>>>>>>>387 string Copyright\ (c)\ 1984,1998 +>>>>>>>>411 string Caldera\ Inc.\0 \b, DR-DOS MBR (IBMBIO.LDR) +>0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222 +>>0x1B8 ubelong >0 \b, Serial 0x%-.4x +>0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950 +>271 string Invalid\ partition\ table\0 +>>295 string Error\ loading\ operating\ system\0 +>>>326 string Missing\ operating\ system\0 \b, mbr +# +>139 string Invalid\ partition\ table\0 +>>163 string Error\ loading\ operating\ system\0 +>>>194 string Missing\ operating\ system\0 \b, Microsoft Windows XP mbr +# http://www.heise.de/ct/05/09/006/ page 184 +#HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\?:=Serial4Bytes+8Bytes +>>>>0x1B8 ulelong >0 \b,Serial 0x%-.4x +>300 string Invalid\ partition\ table\0 +>>324 string Error\ loading\ operating\ system\0 +>>>355 string Missing\ operating\ system\0 \b, Microsoft Windows XP MBR +#??>>>389 string Invalid\ system\ disk +>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x +>300 string Ung\201ltige\ Partitionstabelle +#split string to avoid error: String too long +>>328 string Fehler\ beim\ Laden\ +>>>346 string des\ Betriebssystems +>>>>366 string Betriebssystem\ nicht\ vorhanden \b, Microsoft Windows XP MBR (german) +>>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x +#>0x145 string Default:\ F \b, FREE-DOS MBR +#>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR +>0x145 search/7 Default:\ F \b, FREE-DOS MBR +#>>313 string F0\ .\ .\ . +#>>>322 string disk\ 1 +#>>>>382 string FAT3 +>64 string no\ active\ partition\ found +>>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR +# Ranish Partition Manager http://www.ranish.com/part/ +>387 search/4 \0\ Error!\r +>>378 search/7 Virus! +>>>397 search/4 Booting\ +>>>>408 search/4 HD1/\0 \b, Ranish MBR ( +>>>>>416 string Writing\ changes... \b2.37 +>>>>>>438 ubyte x \b,0x%x dots +>>>>>>440 ubyte >0 \b,virus check +>>>>>>441 ubyte >0 \b,partition %c +#2.38,2.42,2.44 +>>>>>416 string !Writing\ changes... \b +>>>>>>418 ubyte 1 \bvirus check, +>>>>>>419 ubyte x \b0x%x seconds +>>>>>>420 ubyte&0x0F >0 \b,partition +>>>>>>>420 ubyte&0x0F <5 \b %x +>>>>>>>420 ubyte&0x0F 0Xf \b ask +>>>>>420 ubyte x \b) +# +>271 string Operating\ system\ loading +>>296 string error\r \b, SYSLINUX MBR (2.10) +# http://www.acronis.de/ +>362 string MBR\ Error\ \0\r +>>376 string ress\ any\ key\ to\ +>>>392 string boot\ from\ floppy...\0 \b, Acronis MBR +# added by Joerg Jenderek +# http://www.visopsys.org/ +# http://partitionlogic.org.uk/ +>309 string No\ bootable\ partition\ found\r +>>339 string I/O\ Error\ reading\ boot\ sector\r \b, Visopsys MBR +>349 string No\ bootable\ partition\ found\r +>>379 string I/O\ Error\ reading\ boot\ sector\r \b, simple Visopsys MBR +# bootloader, bootmanager +>0x40 string SBML +# label with 11 characters of FAT 12 bit filesystem +>>43 string SMART\ BTMGR +>>>430 string SBMK\ Bad!\r \b, Smart Boot Manager +# OEM-ID not always "SBM" +#>>>>3 strings SBM +>>>>6 string >\0 \b, version %s +>382 string XOSLLOADXCF \b, eXtended Operating System Loader +>6 string LILO \b, LInux i386 boot LOader +>>120 string LILO \b, version 22.3.4 SuSe +>>172 string LILO \b, version 22.5.8 Debian +# updated by Joerg Jenderek at Oct 2008 +# variables according to grub-0.97/stage1/stage1.S or +# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data +# usual values are marked with comments to get only informations of strange GRUB loaders +>342 search/60 \0Geom\0 +#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0 +>>0x41 ubyte <2 +>>>0x3E ubyte >2 \b; GRand Unified Bootloader +# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 +>>>>0x3E ubyte x \b, stage1 version 0x%x +#If it is 0xFF, use a drive passed by BIOS +>>>>0x40 ubyte <0xFF \b, boot drive 0x%x +# in most case 0,1,0x2e for GRUB 0.5.95 +>>>>0x41 ubyte >0 \b, LBA flag 0x%x +>>>>0x42 uleshort <0x8000 \b, stage2 address 0x%x +#>>>>0x42 uleshort =0x8000 \b, stage2 address 0x%x (usual) +>>>>0x42 uleshort >0x8000 \b, stage2 address 0x%x +#>>>>0x44 ulelong =1 \b, 1st sector stage2 0x%x (default) +>>>>0x44 ulelong >1 \b, 1st sector stage2 0x%x +>>>>0x48 uleshort <0x800 \b, stage2 segment 0x%x +#>>>>0x48 uleshort =0x800 \b, stage2 segment 0x%x (usual) +>>>>0x48 uleshort >0x800 \b, stage2 segment 0x%x +>>>>402 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>394 string stage1 \b, GRUB version 0.5.95 +>>>>382 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>376 string GRUB\ \0 \b, GRUB version 0.93 or 1.94 +>>>>383 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>377 string GRUB\ \0 \b, GRUB version 0.94 +>>>>385 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>379 string GRUB\ \0 \b, GRUB version 0.95 or 0.96 +>>>>391 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>>385 string GRUB\ \0 \b, GRUB version 0.97 +#unkown version +>>>343 string Geom\0Read\0\ Error\0 +>>>>321 string Loading\ stage1.5 \b, GRUB version x.y +>>>380 string Geom\0Hard\ Disk\0Read\0\ Error\0 +>>>>374 string GRUB\ \0 \b, GRUB version n.m +# http://syslinux.zytor.com/ +>478 string Boot\ failed\r +>>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (1.62) +>480 string Boot\ failed\r +>>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (2.06 or 2.11) +>484 string Boot\ error\r \b, SYSLINUX bootloader (3.11) +>395 string chksum\0\ ERROR!\0 \b, Gujin bootloader +# http://www.bcdwb.de/bcdw/index_e.htm +>3 string BCDL +>>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z) +# mbr partion table entries +# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs +>3 string !MS +>>3 string !SYSLINUX +>>>3 string !MTOOL +>>>>3 string !NEWLDR +>>>>>5 string !DOS +# not FAT (32 bit) +>>>>>>82 string !FAT32 +#not Linux kernel +>>>>>>>514 string !HdrS +#not BeOS +>>>>>>>>422 string !Be\ Boot\ Loader +# active flag 0 or 0x80 and type > 0 +>>>>>>>>>446 ubyte <0x81 +>>>>>>>>>>446 ubyte&0x7F 0 +>>>>>>>>>>>450 ubyte >0 \b; partition 1: ID=0x%x +>>>>>>>>>>>>446 ubyte 0x80 \b, active +>>>>>>>>>>>>447 ubyte x \b, starthead %u +#>>>>>>>>>>>>448 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>448 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>454 ulelong x \b, startsector %u +>>>>>>>>>>>>458 ulelong x \b, %u sectors +# +>>>>>>>>>462 ubyte <0x81 +>>>>>>>>>>462 ubyte&0x7F 0 +>>>>>>>>>>>466 ubyte >0 \b; partition 2: ID=0x%x +>>>>>>>>>>>>462 ubyte 0x80 \b, active +>>>>>>>>>>>>463 ubyte x \b, starthead %u +#>>>>>>>>>>>>464 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>464 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>470 ulelong x \b, startsector %u +>>>>>>>>>>>>474 ulelong x \b, %u sectors +# +>>>>>>>>>478 ubyte <0x81 +>>>>>>>>>>478 ubyte&0x7F 0 +>>>>>>>>>>>482 ubyte >0 \b; partition 3: ID=0x%x +>>>>>>>>>>>>478 ubyte 0x80 \b, active +>>>>>>>>>>>>479 ubyte x \b, starthead %u +#>>>>>>>>>>>>480 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>481 ubyte x \b, start C2S: 0x%x +#>>>>>>>>>>>>480 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>486 ulelong x \b, startsector %u +>>>>>>>>>>>>490 ulelong x \b, %u sectors +# +>>>>>>>>>494 ubyte <0x81 +>>>>>>>>>>494 ubyte&0x7F 0 +>>>>>>>>>>>498 ubyte >0 \b; partition 4: ID=0x%x +>>>>>>>>>>>>494 ubyte 0x80 \b, active +>>>>>>>>>>>>495 ubyte x \b, starthead %u +#>>>>>>>>>>>>496 ubyte x \b, start C_S: 0x%x +#>>>>>>>>>>>>496 ubeshort&1023 x \b, startcylinder? %d +>>>>>>>>>>>>502 ulelong x \b, startsector %u +>>>>>>>>>>>>506 ulelong x \b, %u sectors +# mbr partion table entries end +# http://www.acronis.de/ +#FAT label=ACRONIS\ SZ +#OEM-ID=BOOTWIZ0 +>442 string Non-system\ disk,\ +>>459 string press\ any\ key...\x7\0 \b, Acronis Startup Recovery Loader +# DOS names like F11.SYS are 8 right space padded bytes+3 bytes +>>>477 ubyte&0xDF >0 +>>>>477 string x \b %-.3s +>>>>>480 ubyte&0xDF >0 +>>>>>>480 string x \b%-.5s +>>>>485 ubyte&0xDF >0 +>>>>>485 string x \b.%-.3s +# +>185 string FDBOOT\ Version\ +>>204 string \rNo\ Systemdisk.\ +>>>220 string Booting\ from\ harddisk.\n\r +>>>245 string Cannot\ load\ from\ harddisk.\n\r +>>>>273 string Insert\ Systemdisk\ +>>>>>291 string and\ press\ any\ key.\n\r \b, FDBOOT harddisk Bootloader +>>>>>>200 string >\0 \b, version %-3s +>242 string Bootsector\ from\ C.H.\ Hochst\204 +>>278 string No\ Systemdisk.\ +>>>293 string Booting\ from\ harddisk.\n\r +>>>441 string Cannot\ load\ from\ harddisk.\n\r +>>>>469 string Insert\ Systemdisk\ +>>>>>487 string and\ press\ any\ key.\n\r \b, WinImage harddisk Bootloader +>>>>>>209 string >\0 \b, version %-4.4s +>(1.b+2) ubyte 0xe +>>(1.b+3) ubyte 0x1f +>>>(1.b+4) ubyte 0xbe +>>>>(1.b+5) ubyte 0x77 +>>>>(1.b+6) ubyte 0x7c +>>>>>(1.b+7) ubyte 0xac +>>>>>>(1.b+8) ubyte 0x22 +>>>>>>>(1.b+9) ubyte 0xc0 +>>>>>>>>(1.b+10) ubyte 0x74 +>>>>>>>>>(1.b+11) ubyte 0xb +>>>>>>>>>>(1.b+12) ubyte 0x56 +>>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display +>214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display +#>>244 string from\ dosemu-freedos-*-bin.tgz\r +#>>>170 string Sorry,\ could\ not\ load\ an\ +#>>>>195 string operating\ system.\r\n +# +>103 string This\ is\ not\ a\ bootable\ disk.\ +>>132 string Please\ insert\ a\ bootable\ +>>>157 string floppy\ and\r\n +>>>>169 string press\ any\ key\ to\ try\ again...\r \b, FREE-DOS message display +# +>66 string Solaris\ Boot\ Sector +>>99 string Incomplete\ MDBoot\ load. +>>>89 string Version \b, Sun Solaris Bootloader +>>>>97 byte x version %c +# +>408 string OS/2\ !!\ SYS01475\r\0 +>>429 string OS/2\ !!\ SYS02025\r\0 +>>>450 string OS/2\ !!\ SYS02027\r\0 +>>>469 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp bootloader +# +>409 string OS/2\ !!\ SYS01475\r\0 +>>430 string OS/2\ !!\ SYS02025\r\0 +>>>451 string OS/2\ !!\ SYS02027\r\0 +>>>470 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp Bootloader +>112 string This\ disk\ is\ not\ bootable\r +>>142 string If\ you\ wish\ to\ make\ it\ bootable +>>>176 string run\ the\ DOS\ program\ SYS\ +>>>200 string after\ the\r +>>>>216 string system\ has\ been\ loaded\r\n +>>>>>242 string Please\ insert\ a\ DOS\ diskette\ +>>>>>271 string into\r\n\ the\ drive\ and\ +>>>>>>292 string strike\ any\ key...\0 \b, IBM OS/2 Warp message display +# XP +>430 string NTLDR\ is\ missing\xFF\r\n +>>449 string Disk\ error\xFF\r\n +>>>462 string Press\ any\ key\ to\ restart\r \b, Microsoft Windows XP Bootloader +# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# +>>>>371 ubyte >0x20 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# +>430 string NTLDR\ nicht\ gefunden\xFF\r\n +>>453 string Datentr\204gerfehler\xFF\r\n +>>>473 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (german) +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# offset variant +>>>>379 string \0 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +# +>430 string NTLDR\ fehlt\xFF\r\n +>>444 string Datentr\204gerfehler\xFF\r\n +>>>464 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (2.german) +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# variant +>>>>371 ubyte >0x20 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# +>430 string NTLDR\ fehlt\xFF\r\n +>>444 string Medienfehler\xFF\r\n +>>>459 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (3.german) +>>>>371 ubyte >0x20 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# variant +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# +>430 string Datentr\204ger\ entfernen\xFF\r\n +>>454 string Medienfehler\xFF\r\n +>>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german) +>>>>379 string \0 +>>>>>368 ubyte&0xDF >0 +>>>>>>368 string x %-.5s +>>>>>>>373 ubyte&0xDF >0 +>>>>>>>>373 string x \b%-.3s +>>>>>>376 ubyte&0xDF >0 +>>>>>>>376 string x \b.%-.3s +# variant +>>>>417 ubyte&0xDF >0 +>>>>>417 string x %-.5s +>>>>>>422 ubyte&0xDF >0 +>>>>>>>422 string x \b%-.3s +>>>>>425 ubyte&0xDF >0 +>>>>>>425 string >\ \b.%-.3s +# + +#>3 string NTFS\ \ \ \ +>389 string Fehler\ beim\ Lesen\ +>>407 string des\ Datentr\204gers +>>>426 string NTLDR\ fehlt +>>>>440 string NTLDR\ ist\ komprimiert +>>>>>464 string Neustart\ mit\ Strg+Alt+Entf\r \b, Microsoft Windows XP Bootloader NTFS (german) +#>3 string NTFS\ \ \ \ +>313 string A\ disk\ read\ error\ occurred.\r +>>345 string A\ kernel\ file\ is\ missing\ +>>>370 string from\ the\ disk.\r +>>>>484 string NTLDR\ is\ compressed +>>>>>429 string Insert\ a\ system\ diskette\ +>>>>>>454 string and\ restart\r\nthe\ system.\r \b, Microsoft Windows XP Bootloader NTFS +# DOS loader variants different languages,offsets +>472 ubyte&0xDF >0 +>>389 string Invalid\ system\ disk\xFF\r\n +>>>411 string Disk\ I/O\ error +>>>>428 string Replace\ the\ disk,\ and\ +>>>>>455 string press\ any\ key \b, Microsoft Windows 98 Bootloader +#IO.SYS +>>>>>>472 ubyte&0xDF >0 +>>>>>>>472 string x \b %-.2s +>>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>>474 string x \b%-.5s +>>>>>>>>>>479 ubyte&0xDF >0 +>>>>>>>>>>>479 string x \b%-.1s +>>>>>>>480 ubyte&0xDF >0 +>>>>>>>>480 string x \b.%-.3s +#MSDOS.SYS +>>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>>483 string x \b%-.5s +>>>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>>>488 string x \b%-.3s +>>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>>491 string x \b.%-.3s +# +>>390 string Invalid\ system\ disk\xFF\r\n +>>>412 string Disk\ I/O\ error\xFF\r\n +>>>>429 string Replace\ the\ disk,\ and\ +>>>>>451 string then\ press\ any\ key\r \b, Microsoft Windows 98 Bootloader +>>388 string Ungueltiges\ System\ \xFF\r\n +>>>410 string E/A-Fehler\ \ \ \ \xFF\r\n +>>>>427 string Datentraeger\ wechseln\ und\ +>>>>>453 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (german) +#WINBOOT.SYS only not spaces (0xDF) +>>>>>>497 ubyte&0xDF >0 +>>>>>>>497 string x %-.5s +>>>>>>>>502 ubyte&0xDF >0 +>>>>>>>>>502 string x \b%-.1s +>>>>>>>>>>503 ubyte&0xDF >0 +>>>>>>>>>>>503 string x \b%-.1s +>>>>>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>>>>>504 string x \b%-.1s +>>>>>>505 ubyte&0xDF >0 +>>>>>>>505 string x \b.%-.3s +#IO.SYS +>>>>>>472 ubyte&0xDF >0 or +>>>>>>>472 string x \b %-.2s +>>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>>474 string x \b%-.5s +>>>>>>>>>>479 ubyte&0xDF >0 +>>>>>>>>>>>479 string x \b%-.1s +>>>>>>>480 ubyte&0xDF >0 +>>>>>>>>480 string x \b.%-.3s +#MSDOS.SYS +>>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>>483 string x \b%-.5s +>>>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>>>488 string x \b%-.3s +>>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>>491 string x \b.%-.3s +# +>>390 string Ungueltiges\ System\ \xFF\r\n +>>>412 string E/A-Fehler\ \ \ \ \xFF\r\n +>>>>429 string Datentraeger\ wechseln\ und\ +>>>>>455 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (German) +#WINBOOT.SYS only not spaces (0xDF) +>>>>>>497 ubyte&0xDF >0 +>>>>>>>497 string x %-.7s +>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>504 string x \b%-.1s +>>>>>>505 ubyte&0xDF >0 +>>>>>>>505 string x \b.%-.3s +#IO.SYS +>>>>>>472 ubyte&0xDF >0 or +>>>>>>>472 string x \b %-.2s +>>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>>474 string x \b%-.6s +>>>>>>>480 ubyte&0xDF >0 +>>>>>>>>480 string x \b.%-.3s +#MSDOS.SYS +>>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>>483 string x \b%-.5s +>>>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>>>488 string x \b%-.3s +>>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>>491 string x \b.%-.3s +# +>>389 string Ungueltiges\ System\ \xFF\r\n +>>>411 string E/A-Fehler\ \ \ \ \xFF\r\n +>>>>428 string Datentraeger\ wechseln\ und\ +>>>>>454 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (GERMAN) +# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes +>>>>>>472 string x %-.2s +>>>>>>>474 ubyte&0xDF >0 +>>>>>>>>474 string x \b%-.5s +>>>>>>>>479 ubyte&0xDF >0 +>>>>>>>>>479 string x \b%-.1s +>>>>>>480 ubyte&0xDF >0 +>>>>>>>480 string x \b.%-.3s +>>>>>>483 ubyte&0xDF >0 \b+ +>>>>>>>483 string x \b%-.5s +>>>>>>>488 ubyte&0xDF >0 +>>>>>>>>488 string x \b%-.2s +>>>>>>>>490 ubyte&0xDF >0 +>>>>>>>>>490 string x \b%-.1s +>>>>>>>491 ubyte&0xDF >0 +>>>>>>>>491 string x \b.%-.3s +>479 ubyte&0xDF >0 +>>416 string Kein\ System\ oder\ +>>>433 string Laufwerksfehler +>>>>450 string Wechseln\ und\ Taste\ dr\201cken \b, Microsoft DOS Bootloader (german) +#IO.SYS +>>>>>479 string x \b %-.2s +>>>>>>481 ubyte&0xDF >0 +>>>>>>>481 string x \b%-.6s +>>>>>487 ubyte&0xDF >0 +>>>>>>487 string x \b.%-.3s +#MSDOS.SYS +>>>>>>490 ubyte&0xDF >0 \b+ +>>>>>>>490 string x \b%-.5s +>>>>>>>>495 ubyte&0xDF >0 +>>>>>>>>>495 string x \b%-.3s +>>>>>>>498 ubyte&0xDF >0 +>>>>>>>>498 string x \b.%-.3s +# +>376 search/41 Non-System\ disk\ or\ +>>395 search/41 disk\ error\r +>>>407 search/41 Replace\ and\ +>>>>419 search/41 press\ \b, +>>>>419 search/41 strike\ \b, old +>>>>426 search/41 any\ key\ when\ ready\r MS or PC-DOS bootloader +#449 Disk\ Boot\ failure\r MS 3.21 +#466 Boot\ Failure\r MS 3.30 +>>>>>468 search/18 \0 +#IO.SYS,IBMBIO.COM +>>>>>>&0 string x \b %-.2s +>>>>>>>&-20 ubyte&0xDF >0 +>>>>>>>>&-1 string x \b%-.4s +>>>>>>>>>&-16 ubyte&0xDF >0 +>>>>>>>>>>&-1 string x \b%-.2s +>>>>>>&8 ubyte&0xDF >0 \b. +>>>>>>>&-1 string x \b%-.3s +#MSDOS.SYS,IBMDOS.COM +>>>>>>&11 ubyte&0xDF >0 \b+ +>>>>>>>&-1 string x \b%-.5s +>>>>>>>>&-6 ubyte&0xDF >0 +>>>>>>>>>&-1 string x \b%-.1s +>>>>>>>>>>&-5 ubyte&0xDF >0 +>>>>>>>>>>>&-1 string x \b%-.2s +>>>>>>>&7 ubyte&0xDF >0 \b. +>>>>>>>>&-1 string x \b%-.3s +>441 string Cannot\ load\ from\ harddisk.\n\r +>>469 string Insert\ Systemdisk\ +>>>487 string and\ press\ any\ key.\n\r \b, MS (2.11) DOS bootloader +#>43 string \224R-LOADER\ \ SYS =label +>54 string SYS +>>324 string VASKK +>>>495 string NEWLDR\0 \b, DR-DOS Bootloader (LOADER.SYS) +# +>98 string Press\ a\ key\ to\ retry\0\r +>>120 string Cannot\ find\ file\ \0\r +>>>139 string Disk\ read\ error\0\r +>>>>156 string Loading\ ...\0 \b, DR-DOS (3.41) Bootloader +#DRBIOS.SYS +>>>>>44 ubyte&0xDF >0 +>>>>>>44 string x \b %-.6s +>>>>>>>50 ubyte&0xDF >0 +>>>>>>>>50 string x \b%-.2s +>>>>>>52 ubyte&0xDF >0 +>>>>>>>52 string x \b.%-.3s +# +>70 string IBMBIO\ \ COM +>>472 string Cannot\ load\ DOS!\ +>>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader +>>471 string Cannot\ load\ DOS\ +>>487 string press\ key\ to\ retry \b, Open-DOS Bootloader +#?? +>444 string KERNEL\ \ SYS +>>314 string BOOT\ error! \b, FREE-DOS Bootloader +>499 string KERNEL\ \ SYS +>>305 string BOOT\ err!\0 \b, Free-DOS Bootloader +>449 string KERNEL\ \ SYS +>>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader +# +>449 string Loading\ FreeDOS +>>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +# +>331 string Error!.0 \b, FREE-DOS 1.0 bootloader +# +>125 string Loading\ FreeDOS...\r +>>311 string BOOT\ error!\r \b, FREE-DOS bootloader +>>>441 ubyte&0xDF >0 +>>>>441 string x \b %-.6s +>>>>>447 ubyte&0xDF >0 +>>>>>>447 string x \b%-.1s +>>>>>>>448 ubyte&0xDF >0 +>>>>>>>>448 string x \b%-.1s +>>>>449 ubyte&0xDF >0 +>>>>>449 string x \b.%-.3s +>124 string FreeDOS\0 +>>331 string \ err\0 \b, FREE-DOS BETa 0.9 Bootloader +# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +>>333 string \ err\0 \b, FREE-DOS BEta 0.9 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +>>334 string \ err\0 \b, FREE-DOS Beta 0.9 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +>336 string Error!\ +>>343 string Hit\ a\ key\ to\ reboot. \b, FREE-DOS Beta 0.9sr1 Bootloader +>>>497 ubyte&0xDF >0 +>>>>497 string x \b %-.6s +>>>>>503 ubyte&0xDF >0 +>>>>>>503 string x \b%-.1s +>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>504 string x \b%-.1s +>>>>505 ubyte&0xDF >0 +>>>>>505 string x \b.%-.3s +# added by Joerg Jenderek +# http://www.visopsys.org/ +# http://partitionlogic.org.uk/ +# OEM-ID=Visopsys +>478 ulelong 0 +>>(1.b+326) string I/O\ Error\ reading\ +>>>(1.b+344) string Visopsys\ loader\r +>>>>(1.b+361) string Press\ any\ key\ to\ continue.\r \b, Visopsys loader +# http://alexfru.chat.ru/epm.html#bootprog +>494 ubyte >0x4D +>>495 string >E +>>>495 string >>>3 string BootProg +# It just looks for a program file name at the root directory +# and loads corresponding file with following execution. +# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes +>>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader +>>>>>499 string x \b %-.1s +>>>>>>500 ubyte&0xDF >0 +>>>>>>>500 string x \b%-.1s +>>>>>>>>501 ubyte&0xDF >0 +>>>>>>>>>501 string x \b%-.1s +>>>>>>>>>>502 ubyte&0xDF >0 +>>>>>>>>>>>502 string x \b%-.1s +>>>>>>>>>>>>503 ubyte&0xDF >0 +>>>>>>>>>>>>>503 string x \b%-.1s +>>>>>>>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>>>>>>>504 string x \b%-.1s +>>>>>>>>>>>>>>>>505 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>505 string x \b%-.1s +>>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>>>506 string x \b%-.1s +#name extension +>>>>>507 ubyte&0xDF >0 \b. +>>>>>>507 string x \b%-.1s +>>>>>>>508 ubyte&0xDF >0 +>>>>>>>>508 string x \b%-.1s +>>>>>>>>>509 ubyte&0xDF >0 +>>>>>>>>>>509 string x \b%-.1s +#If the boot sector fails to read any other sector, +#it prints a very short message ("RE") to the screen and hangs the computer. +#If the boot sector fails to find needed program in the root directory, +#it also hangs with another message ("NF"). +>>>>>492 string RENF \b, FAT (12 bit) +>>>>>495 string RENF \b, FAT (16 bit) +# http://alexfru.chat.ru/epm.html#bootprog +>494 ubyte >0x4D +>>495 string >E +>>>495 string >>>3 string BootProg +# It just looks for a program file name at the root directory +# and loads corresponding file with following execution. +# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes +>>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader +>>>>>499 string x \b %-.1s +>>>>>>500 ubyte&0xDF >0 +>>>>>>>500 string x \b%-.1s +>>>>>>>>501 ubyte&0xDF >0 +>>>>>>>>>501 string x \b%-.1s +>>>>>>>>>>502 ubyte&0xDF >0 +>>>>>>>>>>>502 string x \b%-.1s +>>>>>>>>>>>>503 ubyte&0xDF >0 +>>>>>>>>>>>>>503 string x \b%-.1s +>>>>>>>>>>>>>>504 ubyte&0xDF >0 +>>>>>>>>>>>>>>>504 string x \b%-.1s +>>>>>>>>>>>>>>>>505 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>505 string x \b%-.1s +>>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 +>>>>>>>>>>>>>>>>>>>506 string x \b%-.1s +#name extension +>>>>>507 ubyte&0xDF >0 \b. +>>>>>>507 string x \b%-.1s +>>>>>>>508 ubyte&0xDF >0 +>>>>>>>>508 string x \b%-.1s +>>>>>>>>>509 ubyte&0xDF >0 +>>>>>>>>>>509 string x \b%-.1s +#If the boot sector fails to read any other sector, +#it prints a very short message ("RE") to the screen and hangs the computer. +#If the boot sector fails to find needed program in the root directory, +#it also hangs with another message ("NF"). +>>>>>492 string RENF \b, FAT (12 bit) +>>>>>495 string RENF \b, FAT (16 bit) +# x86 bootloader end +# updated by Joerg Jenderek at Sep 2007 +>3 ubyte 0 +#no active flag +>>446 ubyte 0 +# partition 1 not empty +>>>450 ubyte >0 +# partitions 3,4 empty +>>>>482 ubyte 0 +>>>>>498 ubyte 0 +# partition 2 ID=0,5,15 +>>>>>>466 ubyte <0x10 +>>>>>>>466 ubyte 0x05 \b, extended partition table +>>>>>>>466 ubyte 0x0F \b, extended partition table (LBA) +>>>>>>>466 ubyte 0x0 \b, extended partition table (last) +# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90 +# http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD +# older drives may use Near JuMP instruction E9 xx xx +>0 lelong&0x009000EB 0x009000EB +>0 lelong&0x000000E9 0x000000E9 +# minimal short forward jump found 03cx?? +# maximal short forward jump is 07fx +>1 ubyte <0xff \b, code offset 0x%x +# mtools-3.9.8/msdos.h +# usual values are marked with comments to get only informations of strange FAT systems +# valid sectorsize must be a power of 2 from 32 to 32768 +>>11 uleshort&0x000f x +>>>11 uleshort <32769 +>>>>11 uleshort >31 +>>>>>21 ubyte&0xf0 0xF0 +>>>>>>3 string >\0 \b, OEM-ID "%8.8s" +#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC +>>>>>>>8 string IHC \b cached by Windows 9M +>>>>>>11 uleshort >512 \b, Bytes/sector %u +#>>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual) +>>>>>>11 uleshort <512 \b, Bytes/sector %u +>>>>>>13 ubyte >1 \b, sectors/cluster %u +#>>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies) +>>>>>>14 uleshort >32 \b, reserved sectors %u +#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32) +#>>>>>>14 uleshort >1 \b, reserved sectors %u +#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16) +>>>>>>14 uleshort <1 \b, reserved sectors %u +>>>>>>16 ubyte >2 \b, FATs %u +#>>>>>>16 ubyte =2 \b, FATs %u (usual) +>>>>>>16 ubyte =1 \b, FAT %u +>>>>>>16 ubyte >0 +>>>>>>17 uleshort >0 \b, root entries %u +#>>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) +>>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) +#>>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) +>>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x +#>>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy) +>>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x +>>>>>>22 uleshort >0 \b, sectors/FAT %u +#>>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) +>>>>>>26 ubyte >2 \b, heads %u +#>>>>>>26 ubyte =2 \b, heads %u (usual floppy) +>>>>>>26 ubyte =1 \b, heads %u +#skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk +>>>>>>38 ubyte !0x70 +>>>>>>>28 ulelong >0 \b, hidden sectors %u +#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy) +>>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB) +#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB) +# FAT<32 specific +>>>>>>82 string !FAT32 +#>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk) +#>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>>36 ubyte !0x80 +>>>>>>>>36 ubyte !0 \b, physical drive 0x%x +>>>>>>>37 ubyte >0 \b, reserved 0x%x +#>>>>>>>37 ubyte =0 \b, reserved 0x%x +>>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>38 ubyte =0x29 +>>>>>>>>39 ulelong x \b, serial number 0x%x +>>>>>>>>43 string >>>>>>>43 string >NO\ NAME \b, label: "%11.11s" +>>>>>>>>43 string =NO\ NAME \b, unlabeled +>>>>>>>54 string FAT \b, FAT +>>>>>>>>54 string FAT12 \b (12 bit) +>>>>>>>>54 string FAT16 \b (16 bit) +# FAT32 specific +>>>>>>82 string FAT32 \b, FAT (32 bit) +>>>>>>>36 ulelong x \b, sectors/FAT %u +>>>>>>>40 uleshort >0 \b, extension flags %u +#>>>>>>>40 uleshort =0 \b, extension flags %u +>>>>>>>42 uleshort >0 \b, fsVersion %u +#>>>>>>>42 uleshort =0 \b, fsVersion %u (usual) +>>>>>>>44 ulelong >2 \b, rootdir cluster %u +#>>>>>>>44 ulelong =2 \b, rootdir cluster %u +#>>>>>>>44 ulelong =1 \b, rootdir cluster %u +>>>>>>>48 uleshort >1 \b, infoSector %u +#>>>>>>>48 uleshort =1 \b, infoSector %u (usual) +>>>>>>>48 uleshort <1 \b, infoSector %u +>>>>>>>50 uleshort >6 \b, Backup boot sector %u +#>>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual) +>>>>>>>50 uleshort <6 \b, Backup boot sector %u +>>>>>>>54 ulelong >0 \b, reserved1 0x%x +>>>>>>>58 ulelong >0 \b, reserved2 0x%x +>>>>>>>62 ulelong >0 \b, reserved3 0x%x +# same structure as FAT1X +>>>>>>>64 ubyte >0x80 \b, physical drive 0x%x +#>>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk) +>>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x +#>>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>>65 ubyte >0 \b, reserved 0x%x +>>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>>66 ubyte =0x29 +>>>>>>>>67 ulelong x \b, serial number 0x%x +>>>>>>>>71 string >>>>>>71 string >NO\ NAME \b, label: "%11.11s" +>>>>>>>71 string =NO\ NAME \b, unlabeled +### FATs end +>0x200 lelong 0x82564557 \b, BSD disklabel +# FATX +0 string FATX FATX filesystem data + + +# Minix filesystems - Juan Cespedes +0x410 leshort 0x137f Minix filesystem +0x410 beshort 0x137f Minix filesystem (big endian) +>0x402 beshort !0 \b, %d zones +>0x1e string minix \b, bootable +0x410 leshort 0x138f Minix filesystem, 30 char names +0x410 leshort 0x2468 Minix filesystem, version 2 +0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names + +# romfs filesystems - Juan Cespedes +0 string -rom1fs- romfs filesystem, version 1 +>8 belong x %d bytes, +>16 string x named %s. + +# netboot image - Juan Cespedes +0 lelong 0x1b031336L Netboot image, +>4 lelong&0xFFFFFF00 0 +>>4 lelong&0x100 0x000 mode 2 +>>4 lelong&0x100 0x100 mode 3 +>4 lelong&0xFFFFFF00 !0 unknown mode + +0x18b string OS/2 OS/2 Boot Manager + +# updated by Joerg Jenderek at Oct 2008!! +# http://syslinux.zytor.com/iso.php +0 ulelong 0x7c40eafa isolinux Loader +# http://syslinux.zytor.com/pxe.php +0 ulelong 0x007c05ea pxelinux Loader +0 ulelong 0x60669c66 pxelinux Loader + +# added by Joerg Jenderek +# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or +# grub-1.94/kern/i386/pc/startup.S +# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data +# usual values are marked with comments to get only informations of strange GRUB loaders +0x200 uleshort 0x70EA +# found only version 3.{1,2} +>0x206 ubeshort >0x0300 +# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00" +>>0x212 ubyte >0x29 +>>>0x213 ubyte >0x29 +# not iso9660_stage1_5 +#>>>0 ulelong&0x00BE5652 0x00BE5652 +>>>>0x213 ubyte >0x29 GRand Unified Bootloader +# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2" +>>>>0x217 ubyte 0xFF stage1_5 +>>>>0x217 ubyte <0xFF stage2 +>>>>0x206 ubyte x \b version %u +>>>>0x207 ubyte x \b.%u +# module_size for 1.94 +>>>>0x208 ulelong <0xffffff \b, installed partition %u +#>>>>0x208 ulelong =0xffffff \b, %u (default) +>>>>0x208 ulelong >0xffffff \b, installed partition %u +# GRUB 0.5.95 unofficial +>>>>0x20C ulelong&0x2E300000 0x2E300000 +# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs +>>>>>0x20C ubyte x \b, identifier 0x%x +#>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default) +>>>>>0x20D ubyte >0 \b, LBA flag 0x%x +# GRUB version as string +>>>>>0x20E string >\0 \b, GRUB version %-s +# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default +>>>>>>0x215 ulong 0xffffffff +>>>>>>>0x219 string >\0 \b, configuration file %-s +>>>>>>0x215 ulong !0xffffffff +>>>>>>>0x215 string >\0 \b, configuration file %-s +# newer GRUB versions +>>>>0x20C ulelong&0x2E300000 !0x2E300000 +##>>>>>0x20C ulelong =0 \b, saved entry %d (usual) +>>>>>0x20C ulelong >0 \b, saved entry %d +# for 1.94 contains kernel image size +# for 0.93,0.94,0.96,0.97 +# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2 +>>>>>0x210 ubyte x \b, identifier 0x%x +# The flag for LBA forcing is in most cases 0 +#>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default) +>>>>>0x211 ubyte >0 \b, LBA flag 0x%x +# GRUB version as string +>>>>>0x212 string >\0 \b, GRUB version %-s +# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default +>>>>>0x217 ulong 0xffffffff +>>>>>>0x21b string >\0 \b, configuration file %-s +>>>>>0x217 ulong !0xffffffff +>>>>>>0x217 string >\0 \b, configuration file %-s + +9564 lelong 0x00011954 Unix Fast File system [v1] (little-endian), +>8404 string x last mounted on %s, +#>9504 ledate x last checked at %s, +>8224 ledate x last written at %s, +>8401 byte x clean flag %d, +>8228 lelong x number of blocks %d, +>8232 lelong x number of data blocks %d, +>8236 lelong x number of cylinder groups %d, +>8240 lelong x block size %d, +>8244 lelong x fragment size %d, +>8252 lelong x minimum percentage of free blocks %d, +>8256 lelong x rotational delay %dms, +>8260 lelong x disk rotational speed %drps, +>8320 lelong 0 TIME optimization +>8320 lelong 1 SPACE optimization + +42332 lelong 0x19540119 Unix Fast File system [v2] (little-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 leqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 lequad x number of blocks %lld, +>&-288 lequad x number of data blocks %lld, +>&-1332 lelong x number of cylinder groups %d, +>&-1328 lelong x block size %d, +>&-1324 lelong x fragment size %d, +>&-180 lelong x average file size %d, +>&-176 lelong x average number of files in dir %d, +>&-272 lequad x pending blocks to free %lld, +>&-264 lelong x pending inodes to free %ld, +>&-664 lequad x system-wide uuid %0llx, +>&-1316 lelong x minimum percentage of free blocks %d, +>&-1248 lelong 0 TIME optimization +>&-1248 lelong 1 SPACE optimization + +66908 lelong 0x19540119 Unix Fast File system [v2] (little-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 leqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 lequad x number of blocks %lld, +>&-288 lequad x number of data blocks %lld, +>&-1332 lelong x number of cylinder groups %d, +>&-1328 lelong x block size %d, +>&-1324 lelong x fragment size %d, +>&-180 lelong x average file size %d, +>&-176 lelong x average number of files in dir %d, +>&-272 lequad x pending blocks to free %lld, +>&-264 lelong x pending inodes to free %ld, +>&-664 lequad x system-wide uuid %0llx, +>&-1316 lelong x minimum percentage of free blocks %d, +>&-1248 lelong 0 TIME optimization +>&-1248 lelong 1 SPACE optimization + +9564 belong 0x00011954 Unix Fast File system [v1] (big-endian), +>7168 belong 0x4c41424c Apple UFS Volume +>>7186 string x named %s, +>>7176 belong x volume label version %d, +>>7180 bedate x created on %s, +>8404 string x last mounted on %s, +#>9504 bedate x last checked at %s, +>8224 bedate x last written at %s, +>8401 byte x clean flag %d, +>8228 belong x number of blocks %d, +>8232 belong x number of data blocks %d, +>8236 belong x number of cylinder groups %d, +>8240 belong x block size %d, +>8244 belong x fragment size %d, +>8252 belong x minimum percentage of free blocks %d, +>8256 belong x rotational delay %dms, +>8260 belong x disk rotational speed %drps, +>8320 belong 0 TIME optimization +>8320 belong 1 SPACE optimization + +42332 belong 0x19540119 Unix Fast File system [v2] (big-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 beqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 bequad x number of blocks %lld, +>&-288 bequad x number of data blocks %lld, +>&-1332 belong x number of cylinder groups %d, +>&-1328 belong x block size %d, +>&-1324 belong x fragment size %d, +>&-180 belong x average file size %d, +>&-176 belong x average number of files in dir %d, +>&-272 bequad x pending blocks to free %lld, +>&-264 belong x pending inodes to free %ld, +>&-664 bequad x system-wide uuid %0llx, +>&-1316 belong x minimum percentage of free blocks %d, +>&-1248 belong 0 TIME optimization +>&-1248 belong 1 SPACE optimization + +66908 belong 0x19540119 Unix Fast File system [v2] (big-endian) +>&-1164 string x last mounted on %s, +>&-696 string >\0 volume name %s, +>&-304 beqldate x last written at %s, +>&-1167 byte x clean flag %d, +>&-1168 byte x readonly flag %d, +>&-296 bequad x number of blocks %lld, +>&-288 bequad x number of data blocks %lld, +>&-1332 belong x number of cylinder groups %d, +>&-1328 belong x block size %d, +>&-1324 belong x fragment size %d, +>&-180 belong x average file size %d, +>&-176 belong x average number of files in dir %d, +>&-272 bequad x pending blocks to free %lld, +>&-264 belong x pending inodes to free %ld, +>&-664 bequad x system-wide uuid %0llx, +>&-1316 belong x minimum percentage of free blocks %d, +>&-1248 belong 0 TIME optimization +>&-1248 belong 1 SPACE optimization + +# ext2/ext3 filesystems - Andreas Dilger +# ext4 filesystem - Eric Sandeen +0x438 leshort 0xEF53 Linux +>0x44c lelong x rev %d +>0x43e leshort x \b.%d +# No journal? ext2 +>0x45c lelong ^0x0000004 ext2 filesystem data +>>0x43a leshort ^0x0000001 (mounted or unclean) +# Has a journal? ext3 or ext4 +>0x45c lelong &0x0000004 +# and small INCOMPAT? +>>0x460 lelong <0x0000040 +# and small RO_COMPAT? +>>>0x464 lelong <0x0000008 ext3 filesystem data +# else large RO_COMPAT? +>>>0x464 lelong >0x0000007 ext4 filesystem data +# else large INCOMPAT? +>>0x460 lelong >0x000003f ext4 filesystem data +# General flags for any ext* fs +>0x460 lelong &0x0000004 (needs journal recovery) +>0x43a leshort &0x0000002 (errors) +# INCOMPAT flags +>0x460 lelong &0x0000001 (compressed) +#>0x460 lelong &0x0000002 (filetype) +#>0x460 lelong &0x0000010 (meta bg) +>0x460 lelong &0x0000040 (extents) +>0x460 lelong &0x0000080 (64bit) +#>0x460 lelong &0x0000100 (mmp) +#>0x460 lelong &0x0000200 (flex bg) +# RO_INCOMPAT flags +#>0x464 lelong &0x0000001 (sparse super) +>0x464 lelong &0x0000002 (large files) +>0x464 lelong &0x0000008 (huge files) +#>0x464 lelong &0x0000010 (gdt checksum) +#>0x464 lelong &0x0000020 (many subdirs) +#>0x463 lelong &0x0000040 (extra isize) + +# SGI disk labels - Nathan Scott +0 belong 0x0BE5A941 SGI disk label (volume header) + +# SGI XFS filesystem - Nathan Scott +0 belong 0x58465342 SGI XFS filesystem data +>0x4 belong x (blksz %d, +>0x68 beshort x inosz %d, +>0x64 beshort ^0x2004 v1 dirs) +>0x64 beshort &0x2004 v2 dirs) + +############################################################################ +# Minix-ST kernel floppy +0x800 belong 0x46fc2700 Atari-ST Minix kernel image +>19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy +>19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy + +############################################################################ +# Hmmm, is this a better way of detecting _standard_ floppy images ? +19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector + +19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector + +19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k +19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k + +# Valid media descriptor bytes for MS-DOS: +# +# Byte Capacity Media Size and Type +# ------------------------------------------------- +# +# F0 2.88 MB 3.5-inch, 2-sided, 36-sector +# F0 1.44 MB 3.5-inch, 2-sided, 18-sector +# F9 720K 3.5-inch, 2-sided, 9-sector +# F9 1.2 MB 5.25-inch, 2-sided, 15-sector +# FD 360K 5.25-inch, 2-sided, 9-sector +# FF 320K 5.25-inch, 2-sided, 8-sector +# FC 180K 5.25-inch, 1-sided, 9-sector +# FE 160K 5.25-inch, 1-sided, 8-sector +# FE 250K 8-inch, 1-sided, single-density +# FD 500K 8-inch, 2-sided, single-density +# FE 1.2 MB 8-inch, 2-sided, double-density +# F8 ----- Fixed disk +# +# FC xxxK Apricot 70x1x9 boot disk. +# +# Originally a bitmap: +# xxxxxxx0 Not two sided +# xxxxxxx1 Double sided +# xxxxxx0x Not 8 SPT +# xxxxxx1x 8 SPT +# xxxxx0xx Not Removable drive +# xxxxx1xx Removable drive +# 11111xxx Must be one. +# +# But now it's rather random: +# 111111xx Low density disk +# 00 SS, Not 8 SPT +# 01 DS, Not 8 SPT +# 10 SS, 8 SPT +# 11 DS, 8 SPT +# +# 11111001 Double density 3 floppy disk, high density 5 +# 11110000 High density 3 floppy disk +# 11111000 Hard disk any format +# + +# CDROM Filesystems +# Modified for UDF by gerardo.cacciari@gmail.com +32769 string CD001 +!:mime application/x-iso9660-image +>38913 string !NSR0 ISO 9660 CD-ROM filesystem data +>38913 string NSR0 UDF filesystem data +>>38917 string 1 (version 1.0) +>>38917 string 2 (version 1.5) +>>38917 string 3 (version 2.0) +>>38917 byte >0x33 (unknown version, ID 0x%X) +>>38917 byte <0x31 (unknown version, ID 0x%X) +# "application id" which appears to be used as a volume label +>32808 string >\0 '%s' +>34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable) +37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors) +!:mime application/x-iso9660-image +32776 string CDROM High Sierra CD-ROM filesystem data + +# cramfs filesystem - russell@coker.com.au +0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian +>4 lelong x size %lu +>8 lelong &1 version #2 +>8 lelong &2 sorted_dirs +>8 lelong &4 hole_support +>32 lelong x CRC 0x%x, +>36 lelong x edition %lu, +>40 lelong x %lu blocks, +>44 lelong x %lu files + +0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian +>4 belong x size %lu +>8 belong &1 version #2 +>8 belong &2 sorted_dirs +>8 belong &4 hole_support +>32 belong x CRC 0x%x, +>36 belong x edition %lu, +>40 belong x %lu blocks, +>44 belong x %lu files + +# reiserfs - russell@coker.com.au +0x10034 string ReIsErFs ReiserFS V3.5 +0x10034 string ReIsEr2Fs ReiserFS V3.6 +>0x1002c leshort x block size %d +>0x10032 leshort &2 (mounted or unclean) +>0x10000 lelong x num blocks %d +>0x10040 lelong 1 tea hash +>0x10040 lelong 2 yura hash +>0x10040 lelong 3 r5 hash + +# JFFS - russell@coker.com.au +0 lelong 0x34383931 Linux Journalled Flash File system, little endian +0 belong 0x34383931 Linux Journalled Flash File system, big endian + +# EST flat binary format (which isn't, but anyway) +# From: Mark Brown +0 string ESTFBINR EST flat binary + +# Aculab VoIP firmware +# From: Mark Brown +0 string VoIP\ Startup\ and Aculab VoIP firmware +>35 string x format %s + +# u-boot/PPCBoot image file +# From: Mark Brown +0 belong 0x27051956 u-boot/PPCBoot image +>4 string PPCBoot +>>12 string x version %s + +# JFFS2 file system +0 leshort 0x1984 Linux old jffs2 filesystem data little endian +0 leshort 0x1985 Linux jffs2 filesystem data little endian + +# Squashfs +0 string sqsh Squashfs filesystem, big endian, +>28 beshort x version %d. +>30 beshort x \b%d, +>28 beshort <3 +>>8 belong x %d bytes, +>28 beshort >2 +>>63 bequad x %lld bytes, +#>>67 belong x %d bytes, +>4 belong x %d inodes, +>28 beshort <2 +>>32 beshort x blocksize: %d bytes, +>28 beshort >1 +>>51 belong x blocksize: %d bytes, +>39 bedate x created: %s +0 string hsqs Squashfs filesystem, little endian, +>28 leshort x version %d. +>30 leshort x \b%d, +>28 leshort <3 +>>8 lelong x %d bytes, +>28 leshort >2 +>>63 lequad x %lld bytes, +#>>63 lelong x %d bytes, +>4 lelong x %d inodes, +>28 leshort <2 +>>32 leshort x blocksize: %d bytes, +>28 leshort >1 +>>51 lelong x blocksize: %d bytes, +>39 ledate x created: %s + +0 string td\000 floppy image data (TeleDisk) + +# AFS Dump Magic +# From: Ty Sarna +0 string \x01\xb3\xa1\x13\x22 AFS Dump +>&0 belong x (v%d) +>>&0 byte 0x76 +>>>&0 belong x Vol %d, +>>>>&0 byte 0x6e +>>>>>&0 string x %s +>>>>>>&1 byte 0x74 +>>>>>>>&0 beshort 2 +>>>>>>>>&4 bedate x on: %s +>>>>>>>>&0 bedate =0 full dump +>>>>>>>>&0 bedate !0 incremental since: %s + +#---------------------------------------------------------- +# VMS backup savesets - gerardo.cacciari@gmail.com +# +4 string \x01\x00\x01\x00\x01\x00 +>(0.s+16) string \x01\x01 +>>&(&0.b+8) byte 0x42 OpenVMS backup saveset data +>>>40 lelong x (block size %d, +>>>49 string >\0 original name '%s', +>>>2 short 1024 VAX generated) +>>>2 short 2048 AXP generated) +>>>2 short 4096 I64 generated) + +# Summary: Oracle Clustered Filesystem +# Created by: Aaron Botsis +8 string OracleCFS Oracle Clustered Filesystem, +>4 long x rev %d +>0 long x \b.%d, +>560 string x label: %.64s, +>136 string x mountpoint: %.128s + +# Summary: Oracle ASM tagged volume +# Created by: Aaron Botsis +32 string ORCLDISK Oracle ASM Volume, +>40 string x Disk Name: %0.12s +32 string ORCLCLRD Oracle ASM Volume (cleared), +>40 string x Disk Name: %0.12s + +# Oracle Clustered Filesystem - Aaron Botsis +8 string OracleCFS Oracle Clustered Filesystem, +>4 long x rev %d +>0 long x \b.%d, +>560 string x label: %.64s, +>136 string x mountpoint: %.128s + +# Oracle ASM tagged volume - Aaron Botsis +32 string ORCLDISK Oracle ASM Volume, +>40 string x Disk Name: %0.12s +32 string ORCLCLRD Oracle ASM Volume (cleared), +>40 string x Disk Name: %0.12s + +# Compaq/HP RILOE floppy image +# From: Dirk Jagdmann +0 string CPQRFBLO Compaq/HP RILOE floppy image + +#------------------------------------------------------------------------------ +# Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari@gmail.com +# These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is +# mapped to VBN 2 of [000000]INDEXF.SYS;1 +# +1008 string DECFILE11B Files-11 On-Disk Structure +>525 byte x Level %d +>525 byte x (ODS-%d OpenVMS file system), +>984 string x volume label is '%-12.12s' + +# From: Thomas Klausner +# http://filext.com/file-extension/DAA +# describes the daa file format. The magic would be: +0 string DAA\x0\x0\x0\x0\x0 PowerISO Direct-Access-Archive + +# From Albert Cahalan +# really le32 operation,destination,payloadsize (but quite predictable) +# 01 00 00 00 00 00 00 c0 00 02 00 00 +0 string \1\0\0\0\0\0\0\300\0\2\0\0 Marvell Libertas firmware + +# From Eric Sandeen +# GFS2 +0x10000 belong 0x01161970 GFS2 Filesystem +>0x10024 belong x (blocksize %d, +>0x10060 string >\0 lockproto %s) + +# BTRFS +0x10040 string _BHRfS_M BTRFS Filesystem +>0x1012b string >\0 (label "%s", +>0x10090 lelong x sectorsize %d, +>0x10094 lelong x nodesize %d, +>0x10098 lelong x leafsize %d) + + +# dvdisaster's .ecc +# From: "Nelson A. de Oliveira" +0 string *dvdisaster* dvdisaster error correction file + +#------------------------------------------------------------------------------ +# flash: file(1) magic for Macromedia Flash file format +# +# See +# +# http://www.macromedia.com/software/flash/open/ +# +0 string FWS Macromedia Flash data, +>3 byte x version %d +!:mime application/x-shockwave-flash +0 string CWS Macromedia Flash data (compressed), +!:mime application/x-shockwave-flash +>3 byte x version %d +# From: Cal Peake +0 string FLV Macromedia Flash Video +!:mime video/x-flv + +# +# From Dave Wilson +0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document +#------------------------------------------------------------------------------ +# fonts: file(1) magic for font data +# +0 search/1 FONT ASCII vfont text +0 short 0436 Berkeley vfont data +0 short 017001 byte-swapped Berkeley vfont data + +# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com +0 string %!PS-AdobeFont-1. PostScript Type 1 font text +>20 string >\0 (%s) +6 string %!PS-AdobeFont-1. PostScript Type 1 font program data + +# X11 font files in SNF (Server Natural Format) format +0 belong 00000004 X11 SNF font data, MSB first +0 lelong 00000004 X11 SNF font data, LSB first + +# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com) +0 search/1 STARTFONT\ X11 BDF font text + +# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com) +# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides) +0 string \001fcp X11 Portable Compiled Font data +>12 byte 0x02 \b, LSB first +>12 byte 0x0a \b, MSB first +0 string D1.0\015 X11 Speedo font data + +#------------------------------------------------------------------------------ +# FIGlet fonts and controlfiles +# From figmagic supplied with Figlet version 2.2 +# "David E. O'Brien" +0 string flf FIGlet font +>3 string >2a version %-2.2s +0 string flc FIGlet controlfile +>3 string >2a version %-2.2s + +# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu) +# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++ +0 belong 0x14025919 libGrx font data, +>8 leshort x %dx +>10 leshort x \b%d +>40 string x %s +# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu) +0 belong 0xff464f4e DOS code page font data collection +7 belong 0x00454741 DOS code page font data +7 belong 0x00564944 DOS code page font data (from Linux?) +4098 string DOSFONT DOSFONT2 encrypted font data + +# downloadable fonts for browser (prints type) anthon@mnt.org +0 string PFR1 PFR1 font +>102 string >0 \b: %s + +# True Type fonts +0 string \000\001\000\000\000 TrueType font data + +0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font +0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font + +0 string ttcf TrueType font collection data + +# Opentype font data from Avi Bercovich +0 string OTTO OpenType font data + +# Gürkan Sengün , www.linuks.mine.nu +0 string SplineFontDB: Spline Font Database +>14 string x version %s +# FORTRAN source +0 regex/100 \^[Cc][\ \t] FORTRAN program +!:mime text/x-fortran +#------------------------------------------------------------------------------ +# frame: file(1) magic for FrameMaker files +# +# This stuff came on a FrameMaker demo tape, most of which is +# copyright, but this file is "published" as witness the following: +# +# Note that this is the Framemaker Maker Interchange Format, not the +# Normal format which would be application/vnd.framemaker. +# +0 string \11 string 5.5 (5.5 +>11 string 5.0 (5.0 +>11 string 4.0 (4.0 +>11 string 3.0 (3.0 +>11 string 2.0 (2.0 +>11 string 1.0 (1.0 +>14 byte x %c) +0 string \9 string 4.0 (4.0) +>9 string 3.0 (3.0) +>9 string 2.0 (2.0) +>9 string 1.0 (1.x) +0 search/1 \17 string 3.0 (3.0) +>17 string 2.0 (2.0) +>17 string 1.0 (1.x) +0 string \17 string 1.01 (%s) +0 string \10 string 3.0 (3.0 +>10 string 2.0 (2.0 +>10 string 1.0 (1.0 +>13 byte x %c) +# XXX - this book entry should be verified, if you find one, uncomment this +#0 string \6 string 3.0 (3.0) +#>6 string 2.0 (2.0) +#>6 string 1.0 (1.0) +0 string \= 4096 (or >4095, same thing), then it's +# an executable, and is dynamically-linked if the "has run-time +# loader information" bit is set. +# +# On x86, NetBSD says: +# +# If it's neither pure nor demand-paged: +# +# if it has the "has run-time loader information" bit set, it's +# a dynamically-linked executable; +# +# if it doesn't have that bit set, then: +# +# if it has the "is position-independent" bit set, it's +# position-independent; +# +# if the entry point is non-zero, it's an executable, otherwise +# it's an object file. +# +# If it's pure: +# +# if it has the "has run-time loader information" bit set, it's +# a dynamically-linked executable, otherwise it's just an +# executable. +# +# If it's demand-paged: +# +# if it has the "has run-time loader information" bit set, +# then: +# +# if the entry point is < 4096, it's a shared library; +# +# if the entry point is = 4096 or > 4096 (i.e., >= 4096), +# it's a dynamically-linked executable); +# +# if it doesn't have the "has run-time loader information" bit +# set, then it's just an executable. +# +# (On non-x86, NetBSD does much the same thing, except that it uses +# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K +# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's +# had 8K pages; dunno about MIPS.) +# +# I suspect the two will differ only in perverse and uninteresting cases +# ("shared" libraries that aren't demand-paged and whose pages probably +# won't actually be shared, executables with entry points <4096). +# +# I leave it to those more familiar with FreeBSD and NetBSD to figure out +# what the right answer is (although using ">4095", FreeBSD-style, is +# probably better than separately checking for "=4096" and ">4096", +# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged +# executables using the NetBSD technique.) +# +0 lelong&0377777777 041400407 FreeBSD/i386 +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400410 FreeBSD/i386 pure +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400413 FreeBSD/i386 demand paged +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +# XXX gross hack to identify core files +# cores start with a struct tss; we take advantage of the following: +# byte 7: highest byte of the kernel stack pointer, always 0xfe +# 8/9: kernel (ring 0) ss value, always 0x0010 +# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0 +# 28: low order byte of the current PTD entry, always 0 since the +# PTD is page-aligned +# +7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file +>1039 string >\0 from '%s' + +# /var/run/ld.so.hints +# What are you laughing about? +0 lelong 011421044151 ld.so hints file (Little Endian +>4 lelong >0 \b, version %d) +>4 belong <1 \b) +0 belong 011421044151 ld.so hints file (Big Endian +>4 belong >0 \b, version %d) +>4 belong <1 \b) + +# +# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities +# +0 string SCRSHOT_ scrshot(1) screenshot, +>8 byte x version %d, +>9 byte 2 %d bytes in header, +>>10 byte x %d chars wide by +>>11 byte x %d chars high + +#------------------------------------------------------------------------------ +# fsav: file(1) magic for datafellows fsav virus definition files +# Anthon van der Neut (anthon@mnt.org) + +# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def} +0 beshort 0x1575 fsav macro virus signatures +>8 leshort >0 (%d- +>11 byte >0 \b%02d- +>10 byte >0 \b%02d) +# ftp://ftp.f-prot.com/pub/sign.zip +#10 ubyte <12 +#>9 ubyte <32 +#>>8 ubyte 0x0a +#>>>12 ubyte 0x07 +#>>>>11 uleshort >0 fsav DOS/Windows virus signatures (%d- +#>>>>10 byte 0 \b01- +#>>>>10 byte 1 \b02- +#>>>>10 byte 2 \b03- +#>>>>10 byte 3 \b04- +#>>>>10 byte 4 \b05- +#>>>>10 byte 5 \b06- +#>>>>10 byte 6 \b07- +#>>>>10 byte 7 \b08- +#>>>>10 byte 8 \b09- +#>>>>10 byte 9 \b10- +#>>>>10 byte 10 \b11- +#>>>>10 byte 11 \b12- +#>>>>9 ubyte >0 \b%02d) +# ftp://ftp.f-prot.com/pub/sign2.zip +#0 ubyte 0x62 +#>1 ubyte 0xF5 +#>>2 ubyte 0x1 +#>>>3 ubyte 0x1 +#>>>>4 ubyte 0x0e +#>>>>>13 ubyte >0 fsav virus signatures +#>>>>>>11 ubyte x size 0x%02x +#>>>>>>12 ubyte x \b%02x +#>>>>>>13 ubyte x \b%02x bytes + +# Joerg Jenderek: joerg dot jenderek at web dot de +# http://www.clamav.net/doc/latest/html/node45.html +# .cvd files start with a 512 bytes colon separated header +# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime +# + gzipped tarball files +0 string ClamAV-VDB: +>11 string >\0 Clam AntiVirus database %-.23s +>>34 string : +>>>35 string !: \b, version +>>>>35 string x \b%-.1s +>>>>>36 string !: +>>>>>>36 string x \b%-.1s +>>>>>>>37 string !: +>>>>>>>>37 string x \b%-.1s +>>>>>>>>>38 string !: +>>>>>>>>>>38 string x \b%-.1s +>512 string \037\213 \b, gzipped +>769 string ustar\0 \b, tarred + +# Type: Grisoft AVG AntiVirus +# From: David Newgas +0 string AVG7_ANTIVIRUS_VAULT_FILE AVG 7 Antivirus vault file data +#------------------------------------------------------------------------------ +# games: file(1) for games + +# Fabio Bonelli +# Quake II - III data files +0 string IDP2 Quake II 3D Model file, +>20 long x %lu skin(s), +>8 long x (%lu x +>12 long x %lu), +>40 long x %lu frame(s), +>16 long x Frame size %lu bytes, +>24 long x %lu vertices/frame, +>28 long x %lu texture coordinates, +>32 long x %lu triangles/frame + +0 string IBSP Quake +>4 long 0x26 II Map file (BSP) +>4 long 0x2E III Map file (BSP) + +0 string IDS2 Quake II SP2 sprite file + +#--------------------------------------------------------------------------- +# Doom and Quake +# submitted by Nicolas Patrois + +0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo +# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01 + +24 string LxD\ 203 Linuxdoom save +>0 string x , name=%s +>44 string x , world=%s + +# Quake + +0 string PACK Quake I or II world or extension + +#0 string -1\x0a Quake I demo +#>30 string x version %.4s +#>61 string x level %s + +#0 string 5\x0a Quake I save + +# The levels + +# Quake 1 + +0 string 5\x0aIntroduction Quake I save: start Introduction +0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex +0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned +0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis +0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto +0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret) +0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep +0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon +0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon +0 string 5\x0athe_Installation Quake I save: e2m1 The installation +0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel +0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!) +0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret) +0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress +0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse +0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette +0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central +0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin +0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror +0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight +0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret) +0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels +0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment +0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system +0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair +0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine +0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate +0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium +0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret) +0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze +0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony +0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit + +# Quake DeathMatch levels + +0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths +0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis +0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base +0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place +0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern +0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone + +# Scourge of Armagon + +0 string 5\x0aCommand_HQ Quake I save: start Command HQ +0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station +0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility +0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret) +0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine +0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility +0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms +0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret) +0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral +0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs +0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt +0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep +0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment +0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium +0 string 5\x0aLimbo Quake I save: hip3m3 Limbo +0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret) +0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet +0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair + +# Malice + +0 string 5\x0aThe_Academy Quake I save: start The academy +0 string 5\x0aThe_Lab Quake I save: d1 The lab +0 string 5\x0aArea_33 Quake I save: d1b Area 33 +0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions +0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret) +0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret) +0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice +0 string 5\x0aArea44 Quake I save: d1c Area 44 +0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers +0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life +0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood +0 string 5\x0aThe_Flood Quake I save: d5 The flood +0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant +0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant +0 string 5\x0aThe_Foundry Quake I save: d7b The foundry +0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base +0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base +0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories +0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive +0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ +0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown! + +# Malice DeathMatch levels + +0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct +0 string 5\x0aSub_Station Quake I save: ddm2 Sub station +0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights! +0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa +0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse +0 string 5\x0aDOMINO Quake I save: ddm6 Domino +0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder + + +0 string MComprHD MAME CHD compressed hard disk image, +>12 belong x version %lu + +# doom - submitted by Jon Dowland + +0 string =IWAD doom main IWAD data +>4 lelong x containing %d lumps +0 string =PWAD doom patch PWAD data +>4 lelong x containing %d lumps + + +# Summary: Warcraft 3 save +# Extension: .w3g +# Created by: "Nelson A. de Oliveira" +0 string Warcraft\ III\ recorded\ game %s + + +# Summary: Warcraft 3 map +# Extension: .w3m +# Created by: "Nelson A. de Oliveira" +0 string HM3W Warcraft III map file + + +# Summary: SGF Smart Game Format +# Extension: .sgf +# Reference: http://www.red-bean.com/sgf/ +# Created by: Eduardo Sabbatella +# Modified by (1): Abel Cheung (regex, more game format) +# FIXME: Some games don't have GM (game type) +0 regex \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format +>2 search/0x200 GM[ +>>&0 string 1] (Go) +>>&0 string 2] (Othello) +>>&0 string 3] (chess) +>>&0 string 4] (Gomoku+Renju) +>>&0 string 5] (Nine Men's Morris) +>>&0 string 6] (Backgammon) +>>&0 string 7] (Chinese chess) +>>&0 string 8] (Shogi) +>>&0 string 9] (Lines of Action) +>>&0 string 10] (Ataxx) +>>&0 string 11] (Hex) +>>&0 string 12] (Jungle) +>>&0 string 13] (Neutron) +>>&0 string 14] (Philosopher's Football) +>>&0 string 15] (Quadrature) +>>&0 string 16] (Trax) +>>&0 string 17] (Tantrix) +>>&0 string 18] (Amazons) +>>&0 string 19] (Octi) +>>&0 string 20] (Gess) +>>&0 string 21] (Twixt) +>>&0 string 22] (Zertz) +>>&0 string 23] (Plateau) +>>&0 string 24] (Yinsh) +>>&0 string 25] (Punct) +>>&0 string 26] (Gobblet) +>>&0 string 27] (hive) +>>&0 string 28] (Exxit) +>>&0 string 29] (Hnefatal) +>>&0 string 30] (Kuba) +>>&0 string 31] (Tripples) +>>&0 string 32] (Chase) +>>&0 string 33] (Tumbling Down) +>>&0 string 34] (Sahara) +>>&0 string 35] (Byte) +>>&0 string 36] (Focus) +>>&0 string 37] (Dvonn) +>>&0 string 38] (Tamsk) +>>&0 string 39] (Gipf) +>>&0 string 40] (Kropki) + + +# Summary: Civilization 4 video +# Extension: .bik +# Created by: Abel Cheung +0 string BIKi Civilization 4 Video + + +############################################## +# NetImmerse/Gamebryo game engine entries + +# Summary: Gamebryo game engine file +# Extension: .nif, .kf +# Created by: Abel Cheung +0 string Gamebryo\ File\ Format,\ Version\ Gamebryo game engine file +>&0 regex [0-9a-z.]+ \b, version %s + +# Summary: Gamebryo game engine file +# Extension: .kfm +# Created by: Abel Cheung +0 string ;Gamebryo\ KFM\ File\ Version\ Gamebryo game engine animation File +>&0 regex [0-9a-z.]+ \b, version %s + +# Summary: NetImmerse game engine file +# Extension .nif +# Created by: Abel Cheung +0 string NetImmerse\ File\ Format,\ Versio +>&0 string n\ NetImmerse game engine file +>>&0 regex [0-9a-z.]+ \b, version %s + + +#------------------------------------------------------------------------------ +# gcc: file(1) magic for GCC special files +# +0 string gpch GCC precompiled header + +# The version field is annoying. It's 3 characters, not zero-terminated. +>5 byte x (version %c +>6 byte x \b%c +>7 byte x \b%c) + +# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O' +>4 byte 67 for C +>4 byte 111 for Objective C +>4 byte 43 for C++ +>4 byte 79 for Objective C++ + +#------------------------------------------------------------------------------ +# GEOS files (Vidar Madsen, vidar@gimp.org) +# semi-commonly used in embedded and handheld systems. +0 belong 0xc745c153 GEOS +>40 byte 1 executable +>40 byte 2 VMFile +>40 byte 3 binary +>40 byte 4 directory label +>40 byte <1 unknown +>40 byte >4 unknown +>4 string >\0 \b, name "%s" +#>44 short x \b, version %d +#>46 short x \b.%d +#>48 short x \b, rev %d +#>50 short x \b.%d +#>52 short x \b, proto %d +#>54 short x \br%d +#>168 string >\0 \b, copyright "%s" +#------------------------------------------------------------------------------ +# GIMP Gradient: file(1) magic for the GIMP's gradient data files +# by Federico Mena + +0 string GIMP\ Gradient GIMP gradient data + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the XCF image format used in the GIMP developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +0 string gimp\ xcf GIMP XCF image data, +>9 string file version 0, +>9 string v version +>>10 string >\0 %s, +>14 belong x %lu x +>18 belong x %lu, +>22 belong 0 RGB Color +>22 belong 1 Greyscale +>22 belong 2 Indexed Color +>22 belong >2 Unknown Image Type. + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the patterns used in the GIMP, developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +20 string GPAT GIMP pattern data, +>24 string x %s + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the brushes used in the GIMP, developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +20 string GIMP GIMP brush data + +# GIMP Curves File +# From: "Nelson A. de Oliveira" +0 string #\040GIMP\040Curves\040File GIMP curve file +# GNOME keyring +# Contributed by Josh Triplett +# FIXME: Could be simplified if pstring supported two-byte counts +0 string GnomeKeyring\n\r\0\n GNOME keyring +>&0 ubyte 0 \b, major version 0 +>>&0 ubyte 0 \b, minor version 0 +>>>&0 ubyte 0 \b, crypto type 0 (AEL) +>>>&0 ubyte >0 \b, crypto type %hhu (unknown) +>>>&1 ubyte 0 \b, hash type 0 (MD5) +>>>&1 ubyte >0 \b, hash type %hhu (unknown) +>>>&2 ubelong 0xFFFFFFFF \b, name NULL +>>>&2 ubelong !0xFFFFFFFF +>>>>&-4 ubelong >255 \b, name too long for file's pstring type +>>>>&-4 ubelong <256 +>>>>>&-1 pstring x \b, name "%s" +>>>>>>&0 ubeqdate x \b, last modified %s +>>>>>>&8 ubeqdate x \b, created %s +>>>>>>&16 ubelong &1 +>>>>>>>&0 ubelong x \b, locked if idle for %u seconds +>>>>>>&16 ubelong ^1 \b, not locked if idle +>>>>>>&24 ubelong x \b, hash iterations %u +>>>>>>&28 ubequad x \b, salt %llu +>>>>>>&52 ubelong x \b, %u item(s) +#------------------------------------------------------------------------------ +# gnu: file(1) magic for various GNU tools +# +# GNU nlsutils message catalog file format +# +0 string \336\22\4\225 GNU message catalog (little endian), +>4 lelong x revision %d, +>8 lelong x %d messages +0 string \225\4\22\336 GNU message catalog (big endian), +>4 belong x revision %d, +>8 belong x %d messages +# message catalogs, from Mitchum DSouza +0 string *nazgul* Nazgul style compiled message catalog +>8 lelong >0 \b, version %ld + +# GnuPG +# The format is very similar to pgp +0 string \001gpg GPG key trust database +>4 byte x version %d +# Note: magic.mime had 0x8501 for the next line instead of 0x8502 +0 beshort 0x8502 GPG encrypted data +!:mime text/PGP # encoding: data + +# This magic is not particularly good, as the keyrings don't have true +# magic. Nevertheless, it covers many keyrings. +0 beshort 0x9901 GPG key public ring +!:mime application/x-gnupg-keyring + +# Gnumeric spreadsheet +# This entry is only semi-helpful, as Gnumeric compresses its files, so +# they will ordinarily reported as "compressed", but at least -z helps +39 string = +# gnu find magic +0 string \0LOCATE GNU findutils locate database data +>7 string >\0 \b, format %s +>7 string 02 \b (frcode) + +# Files produced by GNU gettext +0 long 0xDE120495 GNU-format message catalog data +0 long 0x950412DE GNU-format message catalog data + +#------------------------------------------------------------------------------ +# gnumeric: file(1) magic for Gnumeric spreadsheet +# This entry is only semi-helpful, as Gnumeric compresses its files, so +# they will ordinarily reported as "compressed", but at least -z helps +39 string =39 byte >0 - version %c +# ACE/gr ascii +0 string #\ xvgr\ parameter\ file ACE/gr ascii file +0 string #\ xmgr\ parameter\ file ACE/gr ascii file +0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file +# Grace projects +0 string #\ Grace\ project\ file Grace project file +>23 string @version\ (version +>>32 byte >0 %c +>>33 string >\0 \b.%.2s +>>35 string >\0 \b.%.2s) +# ACE/gr fit description files +0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file +# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE +#------------------------------------------------------------------------------ +# graphviz: file(1) magic for http://www.graphviz.org/ + +# FIXME: These patterns match too generally. For example, the first +# line matches a LaTeX file containing the word "graph" (with a { +# following later) and the second line matches this file. +#0 regex/100 [\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{ graphviz graph text +#!:mime text/vnd.graphviz +#0 regex/100 [\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{ graphviz digraph text +#!:mime text/vnd.graphviz + +#------------------------------------------------------------------------------ +# gringotts: file(1) magic for Gringotts +# http://devel.pluto.linux.it/projects/Gringotts/ +# author: Germano Rizzo +#GRG3????Y +0 string GRG Gringotts data file +#file format 1 +>3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9 +#file format 2 +>3 string 2 v.2, MCRYPT S2K, +>>8 byte&0x70 0x00 RIJNDAEL-128 crypt, +>>8 byte&0x70 0x10 SERPENT crypt, +>>8 byte&0x70 0x20 TWOFISH crypt, +>>8 byte&0x70 0x30 CAST-256 crypt, +>>8 byte&0x70 0x40 SAFER+ crypt, +>>8 byte&0x70 0x50 LOKI97 crypt, +>>8 byte&0x70 0x60 3DES crypt, +>>8 byte&0x70 0x70 RIJNDAEL-256 crypt, +>>8 byte&0x08 0x00 SHA1 hash, +>>8 byte&0x08 0x08 RIPEMD-160 hash, +>>8 byte&0x04 0x00 ZLib +>>8 byte&0x04 0x04 BZip2 +>>8 byte&0x03 0x00 lvl.0 +>>8 byte&0x03 0x01 lvl.3 +>>8 byte&0x03 0x02 lvl.6 +>>8 byte&0x03 0x03 lvl.9 +#file format 3 +>3 string 3 v.3, OpenPGP S2K, +>>8 byte&0x70 0x00 RIJNDAEL-128 crypt, +>>8 byte&0x70 0x10 SERPENT crypt, +>>8 byte&0x70 0x20 TWOFISH crypt, +>>8 byte&0x70 0x30 CAST-256 crypt, +>>8 byte&0x70 0x40 SAFER+ crypt, +>>8 byte&0x70 0x50 LOKI97 crypt, +>>8 byte&0x70 0x60 3DES crypt, +>>8 byte&0x70 0x70 RIJNDAEL-256 crypt, +>>8 byte&0x08 0x00 SHA1 hash, +>>8 byte&0x08 0x08 RIPEMD-160 hash, +>>8 byte&0x04 0x00 ZLib +>>8 byte&0x04 0x04 BZip2 +>>8 byte&0x03 0x00 lvl.0 +>>8 byte&0x03 0x01 lvl.3 +>>8 byte&0x03 0x02 lvl.6 +>>8 byte&0x03 0x03 lvl.9 +#file format >3 +>3 string >3 v.%.1s (unknown details) + +#------------------------------------------------------------------------------ +# hitach-sh: file(1) magic for Hitachi Super-H +# +# Super-H COFF +# +0 beshort 0x0500 Hitachi SH big-endian COFF +>18 beshort&0x0002 =0x0000 object +>18 beshort&0x0002 =0x0002 executable +>18 beshort&0x0008 =0x0008 \b, stripped +>18 beshort&0x0008 =0x0000 \b, not stripped +# +0 leshort 0x0550 Hitachi SH little-endian COFF +>18 leshort&0x0002 =0x0000 object +>18 leshort&0x0002 =0x0002 executable +>18 leshort&0x0008 =0x0008 \b, stripped +>18 leshort&0x0008 =0x0000 \b, not stripped + +#------------------------------------------------------------------------------ +# hp: file(1) magic for Hewlett Packard machines (see also "printer") +# +# XXX - somebody should figure out whether any byte order needs to be +# applied to the "TML" stuff; I'm assuming the Apollo stuff is +# big-endian as it was mostly 68K-based. +# +# I think the 500 series was the old stack-based machines, running a +# UNIX environment atop the "SUN kernel"; dunno whether it was +# big-endian or little-endian. +# +# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based; +# hp300 are 68020+68881 based; hp400 are also 68k. The following basic +# HP magic is useful for reference, but using "long" magic is a better +# practice in order to avoid collisions. +# +# Guy Harris (guy@netapp.com): some additions to this list came from +# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1, +# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0 +# "/etc/magic", though, except for the "archive file relocatable library" +# stuff, and the 68030 and 68040 stuff isn't there at all - are they not +# used in executables, or have they just not yet updated "/etc/magic" +# completely? +# +# 0 beshort 200 hp200 (68010) BSD binary +# 0 beshort 300 hp300 (68020+68881) BSD binary +# 0 beshort 0x20c hp200/300 HP-UX binary +# 0 beshort 0x20d hp400 (68030) HP-UX binary +# 0 beshort 0x20e hp400 (68040?) HP-UX binary +# 0 beshort 0x20b PA-RISC1.0 HP-UX binary +# 0 beshort 0x210 PA-RISC1.1 HP-UX binary +# 0 beshort 0x211 PA-RISC1.2 HP-UX binary +# 0 beshort 0x214 PA-RISC2.0 HP-UX binary + +# +# The "misc" stuff needs a byte order; the archives look suspiciously +# like the old 177545 archives (0xff65 = 0177545). +# +#### Old Apollo stuff +0 beshort 0627 Apollo m68k COFF executable +>18 beshort ^040000 not stripped +>22 beshort >0 - version %ld +0 beshort 0624 apollo a88k COFF executable +>18 beshort ^040000 not stripped +>22 beshort >0 - version %ld +0 long 01203604016 TML 0123 byte-order format +0 long 01702407010 TML 1032 byte-order format +0 long 01003405017 TML 2301 byte-order format +0 long 01602007412 TML 3210 byte-order format +#### PA-RISC 1.1 +0 belong 0x02100106 PA-RISC1.1 relocatable object +0 belong 0x02100107 PA-RISC1.1 executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x02100108 PA-RISC1.1 shared executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0210010b PA-RISC1.1 demand-load executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0210010e PA-RISC1.1 shared library +>96 belong >0 - not stripped + +0 belong 0x0210010d PA-RISC1.1 dynamic load library +>96 belong >0 - not stripped + +#### PA-RISC 2.0 +0 belong 0x02140106 PA-RISC2.0 relocatable object + +0 belong 0x02140107 PA-RISC2.0 executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x02140108 PA-RISC2.0 shared executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0214010b PA-RISC2.0 demand-load executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0214010e PA-RISC2.0 shared library +>96 belong >0 - not stripped + +0 belong 0x0214010d PA-RISC2.0 dynamic load library +>96 belong >0 - not stripped + +#### 800 +0 belong 0x020b0106 PA-RISC1.0 relocatable object + +0 belong 0x020b0107 PA-RISC1.0 executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b0108 PA-RISC1.0 shared executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b010b PA-RISC1.0 demand-load executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b010e PA-RISC1.0 shared library +>96 belong >0 - not stripped + +0 belong 0x020b010d PA-RISC1.0 dynamic load library +>96 belong >0 - not stripped + +0 belong 0x213c6172 archive file +>68 belong 0x020b0619 - PA-RISC1.0 relocatable library +>68 belong 0x02100619 - PA-RISC1.1 relocatable library +>68 belong 0x02110619 - PA-RISC1.2 relocatable library +>68 belong 0x02140619 - PA-RISC2.0 relocatable library + +#### 500 +0 long 0x02080106 HP s500 relocatable executable +>16 long >0 - version %ld + +0 long 0x02080107 HP s500 executable +>16 long >0 - version %ld + +0 long 0x02080108 HP s500 pure executable +>16 long >0 - version %ld + +#### 200 +0 belong 0x020c0108 HP s200 pure executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c0107 HP s200 executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c010b HP s200 demand-load executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c0106 HP s200 relocatable executable +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>8 belong &0x80000000 save fp regs +>8 belong &0x20000000 debuggable +>8 belong &0x10000000 PIC + +0 belong 0x020a0108 HP s200 (2.x release) pure executable +>4 beshort >0 - version %ld +>36 belong >0 not stripped + +0 belong 0x020a0107 HP s200 (2.x release) executable +>4 beshort >0 - version %ld +>36 belong >0 not stripped + +0 belong 0x020c010e HP s200 shared library +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>36 belong >0 not stripped + +0 belong 0x020c010d HP s200 dynamic load library +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>36 belong >0 not stripped + +#### MISC +0 long 0x0000ff65 HP old archive +0 long 0x020aff65 HP s200 old archive +0 long 0x020cff65 HP s200 old archive +0 long 0x0208ff65 HP s500 old archive + +0 long 0x015821a6 HP core file + +0 long 0x4da7eee8 HP-WINDOWS font +>8 byte >0 - version %ld +0 string Bitmapfile HP Bitmapfile + +0 string IMGfile CIS compimg HP Bitmapfile +# XXX - see "lif" +#0 short 0x8000 lif file +0 long 0x020c010c compiled Lisp + +0 string msgcat01 HP NLS message catalog, +>8 long >0 %d messages + +# Summary: HP-48/49 calculator +# Created by: phk@data.fls.dk +# Modified by (1): AMAKAWA Shuhei +# Modified by (2): Samuel Thibault (HP49 support) +0 string HPHP HP +>4 string 48 48 binary +>4 string 49 49 binary +>7 byte >64 - Rev %c +>8 leshort 0x2911 (ADR) +>8 leshort 0x2933 (REAL) +>8 leshort 0x2955 (LREAL) +>8 leshort 0x2977 (COMPLX) +>8 leshort 0x299d (LCOMPLX) +>8 leshort 0x29bf (CHAR) +>8 leshort 0x29e8 (ARRAY) +>8 leshort 0x2a0a (LNKARRAY) +>8 leshort 0x2a2c (STRING) +>8 leshort 0x2a4e (HXS) +>8 leshort 0x2a74 (LIST) +>8 leshort 0x2a96 (DIR) +>8 leshort 0x2ab8 (ALG) +>8 leshort 0x2ada (UNIT) +>8 leshort 0x2afc (TAGGED) +>8 leshort 0x2b1e (GROB) +>8 leshort 0x2b40 (LIB) +>8 leshort 0x2b62 (BACKUP) +>8 leshort 0x2b88 (LIBDATA) +>8 leshort 0x2d9d (PROG) +>8 leshort 0x2dcc (CODE) +>8 leshort 0x2e48 (GNAME) +>8 leshort 0x2e6d (LNAME) +>8 leshort 0x2e92 (XLIB) + +0 string %%HP: HP text +>6 string T(0) - T(0) +>6 string T(1) - T(1) +>6 string T(2) - T(2) +>6 string T(3) - T(3) +>10 string A(D) A(D) +>10 string A(R) A(R) +>10 string A(G) A(G) +>14 string F(.) F(.); +>14 string F(,) F(,); + + +# Summary: HP-38/39 calculator +# Created by: Samuel Thibault +0 string HP3 +>3 string 8 HP 38 +>3 string 9 HP 39 +>4 string Bin binary +>4 string Asc ASCII +>7 string A (Directory List) +>7 string B (Zaplet) +>7 string C (Note) +>7 string D (Program) +>7 string E (Variable) +>7 string F (List) +>7 string G (Matrix) +>7 string H (Library) +>7 string I (Target List) +>7 string J (ASCII Vector specification) +>7 string K (wildcard) + +# Summary: HP-38/39 calculator +# Created by: Samuel Thibault +0 string HP3 +>3 string 8 HP 38 +>3 string 9 HP 39 +>4 string Bin binary +>4 string Asc ASCII +>7 string A (Directory List) +>7 string B (Zaplet) +>7 string C (Note) +>7 string D (Program) +>7 string E (Variable) +>7 string F (List) +>7 string G (Matrix) +>7 string H (Library) +>7 string I (Target List) +>7 string J (ASCII Vector specification) +>7 string K (wildcard) + +# hpBSD magic numbers +0 beshort 200 hp200 (68010) BSD +>2 beshort 0407 impure binary +>2 beshort 0410 read-only binary +>2 beshort 0413 demand paged binary +0 beshort 300 hp300 (68020+68881) BSD +>2 beshort 0407 impure binary +>2 beshort 0410 read-only binary +>2 beshort 0413 demand paged binary +# +# From David Gero +# HP-UX 10.20 core file format from /usr/include/sys/core.h +# Unfortunately, HP-UX uses corehead blocks without specifying the order +# There are four we care about: +# CORE_KERNEL, which starts with the string "HP-UX" +# CORE_EXEC, which contains the name of the command +# CORE_PROC, which contains the signal number that caused the core dump +# CORE_FORMAT, which contains the version of the core file format (== 1) +# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC +# but we include all 6 variations of the order of the first 3, and +# assume that PROC will always be last +# Order 1: KERNEL, EXEC, FORMAT, PROC +0x10 string HP-UX +>0 belong 2 +>>0xC belong 0x3C +>>>0x4C belong 0x100 +>>>>0x58 belong 0x44 +>>>>>0xA0 belong 1 +>>>>>>0xAC belong 4 +>>>>>>>0xB0 belong 1 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x90 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 2: KERNEL, FORMAT, EXEC, PROC +>>>0x4C belong 1 +>>>>0x58 belong 4 +>>>>>0x5C belong 1 +>>>>>>0x60 belong 0x100 +>>>>>>>0x6C belong 0x44 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0xA4 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 3: FORMAT, KERNEL, EXEC, PROC +0x24 string HP-UX +>0 belong 1 +>>0xC belong 4 +>>>0x10 belong 1 +>>>>0x14 belong 2 +>>>>>0x20 belong 0x3C +>>>>>>0x60 belong 0x100 +>>>>>>>0x6C belong 0x44 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0xA4 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 4: EXEC, KERNEL, FORMAT, PROC +0x64 string HP-UX +>0 belong 0x100 +>>0xC belong 0x44 +>>>0x54 belong 2 +>>>>0x60 belong 0x3C +>>>>>0xA0 belong 1 +>>>>>>0xAC belong 4 +>>>>>>>0xB0 belong 1 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x44 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 5: FORMAT, EXEC, KERNEL, PROC +0x78 string HP-UX +>0 belong 1 +>>0xC belong 4 +>>>0x10 belong 1 +>>>>0x14 belong 0x100 +>>>>>0x20 belong 0x44 +>>>>>>0x68 belong 2 +>>>>>>>0x74 belong 0x3C +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x58 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 6: EXEC, FORMAT, KERNEL, PROC +>0 belong 0x100 +>>0xC belong 0x44 +>>>0x54 belong 1 +>>>>0x60 belong 4 +>>>>>0x64 belong 1 +>>>>>>0x68 belong 2 +>>>>>>>0x74 belong 0x2C +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x44 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ + + + +#------------------------------------------------------------------------------ +# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats +# Magic too short! +#0 string HU Human68k +#>68 string LZX LZX compressed +#>>72 string >\0 (version %s) +#>(8.L+74) string LZX LZX compressed +#>>(8.L+78) string >\0 (version %s) +#>60 belong >0 binded +#>(8.L+66) string #HUPAIR hupair +#>0 string HU X executable +#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1 +#>4 belong >0 - base address 0x%x +#>28 belong >0 not stripped +#>32 belong >0 with debug information +#0 beshort 0x601a Human68k Z executable +#0 beshort 0x6000 Human68k object file +#0 belong 0xd1000000 Human68k ar binary archive +#0 belong 0xd1010000 Human68k ar ascii archive +#0 beshort 0x0068 Human68k lib archive +#4 string LZX Human68k LZX compressed +#>8 string >\0 (version %s) +#>4 string LZX R executable +#2 string #HUPAIR Human68k hupair R executable + +#------------------------------------------------------------------------------ +# ibm370: file(1) magic for IBM 370 and compatibles. +# +# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable". +# What the heck *is* "USS/370"? +# AIX 4.1's "/etc/magic" has +# +# 0 short 0535 370 sysV executable +# >12 long >0 not stripped +# >22 short >0 - version %d +# >30 long >0 - 5.2 format +# 0 short 0530 370 sysV pure executable +# >12 long >0 not stripped +# >22 short >0 - version %d +# >30 long >0 - 5.2 format +# +# instead of the "USS/370" versions of the same magic numbers. +# +0 beshort 0537 370 XA sysV executable +>12 belong >0 not stripped +>22 beshort >0 - version %d +>30 belong >0 - 5.2 format +0 beshort 0532 370 XA sysV pure executable +>12 belong >0 not stripped +>22 beshort >0 - version %d +>30 belong >0 - 5.2 format +0 beshort 054001 370 sysV pure executable +>12 belong >0 not stripped +0 beshort 055001 370 XA sysV pure executable +>12 belong >0 not stripped +0 beshort 056401 370 sysV executable +>12 belong >0 not stripped +0 beshort 057401 370 XA sysV executable +>12 belong >0 not stripped +0 beshort 0531 SVR2 executable (Amdahl-UTS) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0534 SVR2 pure executable (Amdahl-UTS) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0530 SVR2 pure executable (USS/370) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0535 SVR2 executable (USS/370) +>12 belong >0 not stripped +>24 belong >0 - version %ld + +#------------------------------------------------------------------------------ +# ibm6000: file(1) magic for RS/6000 and the RT PC. +# +0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module +>12 belong >0 not stripped +# Breaks sun4 statically linked execs. +#0 beshort 0x0103 executable (RT Version 2) or obj module +#>2 byte 0x50 pure +#>28 belong >0 not stripped +#>6 beshort >0 - version %ld +0 beshort 0x0104 shared library +0 beshort 0x0105 ctab data +0 beshort 0xfe04 structured file +0 string 0xabcdef AIX message catalog +0 belong 0x000001f9 AIX compiled message catalog +0 string \ archive +0 string \ archive (big format) + + +#------------------------------------------------------------------------------ +# iff: file(1) magic for Interchange File Format (see also "audio" & "images") +# +# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic +# Arts for file interchange. It has also been used by Apple, SGI, and +# especially Commodore-Amiga. +# +# IFF files begin with an 8 byte FORM header, followed by a 4 character +# FORM type, which is followed by the first chunk in the FORM. + +0 string FORM IFF data +#>4 belong x \b, FORM is %d bytes long +# audio formats +>8 string AIFF \b, AIFF audio +!:mime audio/x-aiff +>8 string AIFC \b, AIFF-C compressed audio +!:mime audio/x-aiff +>8 string 8SVX \b, 8SVX 8-bit sampled sound voice +!:mime audio/x-aiff +>8 string 16SV \b, 16SV 16-bit sampled sound voice +>8 string SAMP \b, SAMP sampled audio +>8 string MAUD \b, MAUD MacroSystem audio +>8 string SMUS \b, SMUS simple music +>8 string CMUS \b, CMUS complex music +# image formats +>8 string ILBMBMHD \b, ILBM interleaved image +>>20 beshort x \b, %d x +>>22 beshort x %d +>8 string RGBN \b, RGBN 12-bit RGB image +>8 string RGB8 \b, RGB8 24-bit RGB image +>8 string DEEP \b, DEEP TVPaint/XiPaint image +>8 string DR2D \b, DR2D 2-D object +>8 string TDDD \b, TDDD 3-D rendering +>8 string LWOB \b, LWOB 3-D object +>8 string LWO2 \b, LWO2 3-D object, v2 +>8 string LWLO \b, LWLO 3-D layered object +>8 string REAL \b, REAL Real3D rendering +>8 string MC4D \b, MC4D MaxonCinema4D rendering +>8 string ANIM \b, ANIM animation +>8 string YAFA \b, YAFA animation +>8 string SSA\ \b, SSA super smooth animation +>8 string ACBM \b, ACBM continuous image +>8 string FAXX \b, FAXX fax image +# other formats +>8 string FTXT \b, FTXT formatted text +>8 string CTLG \b, CTLG message catalog +>8 string PREF \b, PREF preferences +>8 string DTYP \b, DTYP datatype description +>8 string PTCH \b, PTCH binary patch +>8 string AMFF \b, AMFF AmigaMetaFile format +>8 string WZRD \b, WZRD StormWIZARD resource +>8 string DOC\ \b, DOC desktop publishing document + +# These go at the end of the iff rules +# +# I don't see why these might collide with anything else. +# +# Interactive Fiction related formats +# +>8 string IFRS \b, Blorb Interactive Fiction +>>24 string Exec with executable chunk +>8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal) +#------------------------------------------------------------------------------ +# images: file(1) magic for image formats (see also "iff", and "c-lang" for +# XPM bitmaps) +# +# originally from jef@helios.ee.lbl.gov (Jef Poskanzer), +# additions by janl@ifi.uio.no as well as others. Jan also suggested +# merging several one- and two-line files into here. +# +# little magic: PCX (first byte is 0x0a) + +# Targa - matches `povray', `ppmtotga' and `xv' outputs +# by Philippe De Muyter +# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11 +# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise +# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs +# `xv' recognizes only a subset of the following (RGB with pixelsize = 24) +# `tgatoppm' recognizes a superset (Index may be anything) +1 belong&0xfff7ffff 0x01010000 Targa image data - Map +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd +1 belong&0xfff7ffff 0x00020000 Targa image data - RGB +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd +1 belong&0xfff7ffff 0x00030000 Targa image data - Mono +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd + +# PBMPLUS images +# The next byte following the magic is always whitespace. +0 search/1 P1 Netpbm PBM image text +!:mime image/x-portable-bitmap +0 search/1 P2 Netpbm PGM image text +!:mime image/x-portable-greymap +0 search/1 P3 Netpbm PPM image text +!:mime image/x-portable-pixmap +0 string P4 Netpbm PBM "rawbits" image data +!:mime image/x-portable-bitmap +0 string P5 Netpbm PGM "rawbits" image data +!:mime image/x-portable-greymap +0 string P6 Netpbm PPM "rawbits" image data +!:mime image/x-portable-pixmap +0 string P7 Netpbm PAM image file +!:mime image/x-portable-pixmap + +# From: bryanh@giraffe-data.com (Bryan Henderson) +0 string \117\072 Solitaire Image Recorder format +>4 string \013 MGI Type 11 +>4 string \021 MGI Type 17 +0 string .MDA MicroDesign data +>21 byte 48 version 2 +>21 byte 51 version 3 +0 string .MDP MicroDesign page data +>21 byte 48 version 2 +>21 byte 51 version 3 + +# NIFF (Navy Interchange File Format, a modification of TIFF) images +# [GRR: this *must* go before TIFF] +0 string IIN1 NIFF image data +!:mime image/x-niff + +# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com) +# The second word of TIFF files is the TIFF version number, 42, which has +# never changed. The TIFF specification recommends testing for it. +0 string MM\x00\x2a TIFF image data, big-endian +!:mime image/tiff +0 string II\x2a\x00 TIFF image data, little-endian +!:mime image/tiff + +# PNG [Portable Network Graphics, or "PNG's Not GIF"] images +# (Greg Roelofs, newt@uchicago.edu) +# (Albert Cahalan, acahalan@cs.uml.edu) +# +# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ... +# +0 string \x89PNG\x0d\x0a\x1a\x0a PNG image +!:mime image/png +>16 belong x \b, %ld x +>20 belong x %ld, +>24 byte x %d-bit +>25 byte 0 grayscale, +>25 byte 2 \b/color RGB, +>25 byte 3 colormap, +>25 byte 4 gray+alpha, +>25 byte 6 \b/color RGBA, +#>26 byte 0 deflate/32K, +>28 byte 0 non-interlaced +>28 byte 1 interlaced + +# possible GIF replacements; none yet released! +# (Greg Roelofs, newt@uchicago.edu) +# +# GRR 950115: this was mine ("Zip GIF"): +0 string GIF94z ZIF image (GIF+deflate alpha) +!:mime image/x-unknown +# +# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better): +# +0 string FGF95a FGF image (GIF+deflate beta) +!:mime image/x-unknown +# +# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal +# (best; not yet implemented): +# +0 string PBF PBF image (deflate compression) +!:mime image/x-unknown + +# GIF +0 string GIF8 GIF image data +!:mime image/gif +!:apple 8BIMGIFf +>4 string 7a \b, version 8%s, +>4 string 9a \b, version 8%s, +>6 leshort >0 %hd x +>8 leshort >0 %hd +#>10 byte &0x80 color mapped, +#>10 byte&0x07 =0x00 2 colors +#>10 byte&0x07 =0x01 4 colors +#>10 byte&0x07 =0x02 8 colors +#>10 byte&0x07 =0x03 16 colors +#>10 byte&0x07 =0x04 32 colors +#>10 byte&0x07 =0x05 64 colors +#>10 byte&0x07 =0x06 128 colors +#>10 byte&0x07 =0x07 256 colors + +# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster, +# 1 plane, no encoding. +0 string \361\0\100\273 CMU window manager raster image data +>4 lelong >0 %d x +>8 lelong >0 %d, +>12 lelong >0 %d-bit + +# Magick Image File Format +0 string id=ImageMagick MIFF image data + +# Artisan +0 long 1123028772 Artisan image data +>4 long 1 \b, rectangular 24-bit +>4 long 2 \b, rectangular 8-bit with colormap +>4 long 3 \b, rectangular 32-bit (24-bit with matte) + +# FIG (Facility for Interactive Generation of figures), an object-based format +0 search/1 #FIG FIG image text +>5 string x \b, version %.3s + +# PHIGS +0 string ARF_BEGARF PHIGS clear text archive +0 string @(#)SunPHIGS SunPHIGS +# version number follows, in the form m.n +>40 string SunBin binary +>32 string archive archive + +# GKS (Graphics Kernel System) +0 string GKSM GKS Metafile +>24 string SunGKS \b, SunGKS + +# CGM image files +0 string BEGMF clear text Computer Graphics Metafile + +# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de) +0 string yz MGR bitmap, modern format, 8-bit aligned +0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned +0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned +0 string yx MGR bitmap, modern format, squeezed + +# Fuzzy Bitmap (FBM) images +0 string %bitmap\0 FBM image data +>30 long 0x31 \b, mono +>30 long 0x33 \b, color + +# facsimile data +1 string PC\ Research,\ Inc group 3 fax data +>29 byte 0 \b, normal resolution (204x98 DPI) +>29 byte 1 \b, fine resolution (204x196 DPI) +# From: Herbert Rosmanith +0 string Sfff structured fax file + + +# PC bitmaps (OS/2, Windows BMP files) (Greg Roelofs, newt@uchicago.edu) +0 string BM +>14 leshort 12 PC bitmap, OS/2 1.x format +!:mime image/x-ms-bmp +>>18 leshort x \b, %d x +>>20 leshort x %d +>14 leshort 64 PC bitmap, OS/2 2.x format +!:mime image/x-ms-bmp +>>18 leshort x \b, %d x +>>20 leshort x %d +>14 leshort 40 PC bitmap, Windows 3.x format +!:mime image/x-ms-bmp +>>18 lelong x \b, %d x +>>22 lelong x %d x +>>28 leshort x %d +>14 leshort 128 PC bitmap, Windows NT/2000 format +!:mime image/x-ms-bmp +>>18 lelong x \b, %d x +>>22 lelong x %d x +>>28 leshort x %d +# Too simple - MPi +#0 string IC PC icon data +#0 string PI PC pointer image data +#0 string CI PC color icon data +#0 string CP PC color pointer image data +# Conflicts with other entries [BABYL] +#0 string BA PC bitmap array data + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# note possible collision with C/REXX entry in c-lang; currently commented out +0 search/1 /*\ XPM\ */ X pixmap image text + +# Utah Raster Toolkit RLE images (janl@ifi.uio.no) +0 leshort 0xcc52 RLE image data, +>6 leshort x %d x +>8 leshort x %d +>2 leshort >0 \b, lower left corner: %d +>4 leshort >0 \b, lower right corner: %d +>10 byte&0x1 =0x1 \b, clear first +>10 byte&0x2 =0x2 \b, no background +>10 byte&0x4 =0x4 \b, alpha channel +>10 byte&0x8 =0x8 \b, comment +>11 byte >0 \b, %d color channels +>12 byte >0 \b, %d bits per pixel +>13 byte >0 \b, %d color map channels + +# image file format (Robert Potter, potter@cs.rochester.edu) +0 string Imagefile\ version- iff image data +# this adds the whole header (inc. version number), informative but longish +>10 string >\0 %s + +# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com) +0 belong 0x59a66a95 Sun raster image data +>4 belong >0 \b, %d x +>8 belong >0 %d, +>12 belong >0 %d-bit, +#>16 belong >0 %d bytes long, +>20 belong 0 old format, +#>20 belong 1 standard, +>20 belong 2 compressed, +>20 belong 3 RGB, +>20 belong 4 TIFF, +>20 belong 5 IFF, +>20 belong 0xffff reserved for testing, +>24 belong 0 no colormap +>24 belong 1 RGB colormap +>24 belong 2 raw colormap +#>28 belong >0 colormap is %d bytes long + +# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com) +# +# See +# http://reality.sgi.com/grafica/sgiimage.html +# +0 beshort 474 SGI image data +#>2 byte 0 \b, verbatim +>2 byte 1 \b, RLE +#>3 byte 1 \b, normal precision +>3 byte 2 \b, high precision +>4 beshort x \b, %d-D +>6 beshort x \b, %d x +>8 beshort x %d +>10 beshort x \b, %d channel +>10 beshort !1 \bs +>80 string >0 \b, "%s" + +0 string IT01 FIT image data +>4 belong x \b, %d x +>8 belong x %d x +>12 belong x %d +# +0 string IT02 FIT image data +>4 belong x \b, %d x +>8 belong x %d x +>12 belong x %d +# +2048 string PCD_IPI Kodak Photo CD image pack file +>0xe02 byte&0x03 0x00 , landscape mode +>0xe02 byte&0x03 0x01 , portrait mode +>0xe02 byte&0x03 0x02 , landscape mode +>0xe02 byte&0x03 0x03 , portrait mode +0 string PCD_OPA Kodak Photo CD overview pack file + +# FITS format. Jeff Uphoff +# FITS is the Flexible Image Transport System, the de facto standard for +# data and image transfer, storage, etc., for the astronomical community. +# (FITS floating point formats are big-endian.) +0 string SIMPLE\ \ = FITS image data +>109 string 8 \b, 8-bit, character or unsigned binary integer +>108 string 16 \b, 16-bit, two's complement binary integer +>107 string \ 32 \b, 32-bit, two's complement binary integer +>107 string -32 \b, 32-bit, floating point, single precision +>107 string -64 \b, 64-bit, floating point, double precision + +# other images +0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file + +# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image +# stuff. +# +0 beshort 0x1010 PEX Binary Archive + +# DICOM medical imaging data +128 string DICM DICOM medical imaging data +!:mime application/dicom + +# XWD - X Window Dump file. +# As described in /usr/X11R6/include/X11/XWDFile.h +# used by the xwd program. +# Bradford Castalia, idaeim, 1/01 +4 belong 7 XWD X Window Dump image data +>100 string >\0 \b, "%s" +>16 belong x \b, %dx +>20 belong x \b%dx +>12 belong x \b%d + +# PDS - Planetary Data System +# These files use Parameter Value Language in the header section. +# Unfortunately, there is no certain magic, but the following +# strings have been found to be most likely. +0 string NJPL1I00 PDS (JPL) image data +2 string NJPL1I PDS (JPL) image data +0 string CCSD3ZF PDS (CCSD) image data +2 string CCSD3Z PDS (CCSD) image data +0 string PDS_ PDS image data +0 string LBLSIZE= PDS (VICAR) image data + +# pM8x: ATARI STAD compressed bitmap format +# +# from Oskar Schirmer Feb 2, 2001 +# p M 8 5/6 xx yy zz data... +# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed. +# bytes either run horizontally (pM85) or vertically (pM86). yy is the +# most frequent byte, xx and zz are runlength escape codes, where xx is +# used for runs of yy. +# +0 string pM85 Atari ST STAD bitmap image data (hor) +>5 byte 0x00 (white background) +>5 byte 0xFF (black background) +0 string pM86 Atari ST STAD bitmap image data (vert) +>5 byte 0x00 (white background) +>5 byte 0xFF (black background) + +# Gürkan Sengün , www.linuks.mine.nu +# http://www.atarimax.com/jindroush.atari.org/afmtatr.html +0 leshort 0x0296 Atari ATR image + +# XXX: +# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other +# magic. +# SGI RICE image file +#0 beshort 0x5249 RICE image +#>2 beshort x v%d +#>4 beshort x (%d x +#>6 beshort x %d) +#>8 beshort 0 8 bit +#>8 beshort 1 10 bit +#>8 beshort 2 12 bit +#>8 beshort 3 13 bit +#>10 beshort 0 4:2:2 +#>10 beshort 1 4:2:2:4 +#>10 beshort 2 4:4:4 +#>10 beshort 3 4:4:4:4 +#>12 beshort 1 RGB +#>12 beshort 2 CCIR601 +#>12 beshort 3 RP175 +#>12 beshort 4 YUV + +#------------------------------------------------------------------------------ +# +# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format +# for the EPOC operating system, which is used with PDAs like those from Psion +# +# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description +# of various EPOC file formats + +0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file + +# PCX image files +# From: Dan Fandrich +0 beshort 0x0a00 PCX ver. 2.5 image data +0 beshort 0x0a02 PCX ver. 2.8 image data, with palette +0 beshort 0x0a03 PCX ver. 2.8 image data, without palette +0 beshort 0x0a04 PCX for Windows image data +0 beshort 0x0a05 PCX ver. 3.0 image data +>4 leshort x bounding box [%hd, +>6 leshort x %hd] - +>8 leshort x [%hd, +>10 leshort x %hd], +>65 byte >1 %d planes each of +>3 byte x %hhd-bit +>68 byte 0 image, +>68 byte 1 colour, +>68 byte 2 grayscale, +>68 byte >2 image, +>68 byte <0 image, +>12 leshort >0 %hd x +>>14 leshort x %hd dpi, +>2 byte 0 uncompressed +>2 byte 1 RLE compressed + +# Adobe Photoshop +0 string 8BPS Adobe Photoshop Image +!:mime image/vnd.adobe.photoshop + +# XV thumbnail indicator (ThMO) +0 string P7\ 332 XV thumbnail image data + +# NITF is defined by United States MIL-STD-2500A +0 string NITF National Imagery Transmission Format +>25 string >\0 dated %.14s + +# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff) +0 belong 0x00010008 GEM Image data +>12 beshort x %d x +>14 beshort x %d, +>4 beshort x %d planes, +>8 beshort x %d x +>10 beshort x %d pixelsize + +# GEM Metafile (Wolfram Kleff) +0 lelong 0x0018FFFF GEM Metafile data +>4 leshort x version %d + +# +# SMJPEG. A custom Motion JPEG format used by Loki Entertainment +# Software Torbjorn Andersson . +# +0 string \0\nSMJPEG SMJPEG +>8 belong x %d.x data +# According to the specification you could find any number of _TXT +# headers here, but I can't think of any way of handling that. None of +# the SMJPEG files I tried it on used this feature. Even if such a +# file is encountered the output should still be reasonable. +>16 string _SND \b, +>>24 beshort >0 %d Hz +>>26 byte 8 8-bit +>>26 byte 16 16-bit +>>28 string NONE uncompressed +# >>28 string APCM ADPCM compressed +>>27 byte 1 mono +>>28 byte 2 stereo +# Help! Isn't there any way to avoid writing this part twice? +>>32 string _VID \b, +# >>>48 string JFIF JPEG +>>>40 belong >0 %d frames +>>>44 beshort >0 (%d x +>>>46 beshort >0 %d) +>16 string _VID \b, +# >>32 string JFIF JPEG +>>24 belong >0 %d frames +>>28 beshort >0 (%d x +>>30 beshort >0 %d) + +0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File + +# "thumbnail file" (icon) +# descended from "xv", but in use by other applications as well (Wolfram Kleff) +0 string P7\ 332 XV "thumbnail file" (icon) data + +# taken from fkiss: ( ?) +0 string KiSS KISS/GS +>4 byte 16 color +>>5 byte x %d bit +>>8 leshort x %d colors +>>10 leshort x %d groups +>4 byte 32 cell +>>5 byte x %d bit +>>8 leshort x %d x +>>10 leshort x %d +>>12 leshort x +%d +>>14 leshort x +%d + +# Webshots (www.webshots.com), by John Harrison +0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file + +# Hercules DASD image files +# From Jan Jaeger +0 string CKD_P370 Hercules CKD DASD image file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +0 string CKD_C370 Hercules compressed CKD DASD image file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +0 string CKD_S370 Hercules CKD DASD shadow file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +# Squeak images and programs - etoffi@softhome.net +0 string \146\031\0\0 Squeak image data +0 search/1 'From\040Squeak Squeak program text + +# partimage: file(1) magic for PartImage files (experimental, incomplete) +# Author: Hans-Joachim Baader +0 string PaRtImAgE-VoLuMe PartImage +>0x0020 string 0.6.1 file version %s +>>0x0060 lelong >-1 volume %ld +#>>0x0064 8 byte identifier +#>>0x007c reserved +>>0x0200 string >\0 type %s +>>0x1400 string >\0 device %s, +>>0x1600 string >\0 original filename %s, +# Some fields omitted +>>0x2744 lelong 0 not compressed +>>0x2744 lelong 1 gzip compressed +>>0x2744 lelong 2 bzip2 compressed +>>0x2744 lelong >2 compressed with unknown algorithm +>0x0020 string >0.6.1 file version %s +>0x0020 string <0.6.1 file version %s + +# DCX is multi-page PCX, using a simple header of up to 1024 +# offsets for the respective PCX components. +# From: Joerg Wunsch +0 lelong 987654321 DCX multi-page PCX image data + +# Simon Walton +# Kodak Cineon format for scanned negatives +# http://www.kodak.com/US/en/motion/support/dlad/ +0 lelong 0xd75f2a80 Cineon image data +>200 belong >0 \b, %ld x +>204 belong >0 %ld + + +# Bio-Rad .PIC is an image format used by microscope control systems +# and related image processing software used by biologists. +# From: Vebjorn Ljosa +54 leshort 12345 Bio-Rad .PIC Image File +>0 leshort >0 %hd x +>2 leshort >0 %hd, +>4 leshort =1 1 image in file +>4 leshort >1 %hd images in file + +# From Jan "Yenya" Kasprzak +# The description of *.mrw format can be found at +# http://www.dalibor.cz/minolta/raw_file_format.htm +0 string \000MRM Minolta Dimage camera raw image data + +# Summary: DjVu image / document +# Extension: .djvu +# Reference: http://djvu.org/docs/DjVu3Spec.djvu +# Submitted by: Stephane Loeuillet +# Modified by (1): Abel Cheung +0 string AT&TFORM +!:mime image/vnd.djvu +>12 string DJVM DjVu multiple page document +>12 string DJVU DjVu image or single page document +>12 string DJVI DjVu shared document +>12 string THUM DjVu page thumbnails + + +# From Marc Espie +0 lelong 20000630 OpenEXR image data + +# From: Tom Hilinski +# http://www.unidata.ucar.edu/packages/netcdf/ +0 string CDF\001 NetCDF Data Format data + +#----------------------------------------------------------------------- +# Hierarchical Data Format, used to facilitate scientific data exchange +# specifications at http://hdf.ncsa.uiuc.edu/ +0 belong 0x0e031301 Hierarchical Data Format (version 4) data +!:mime application/x-hdf +0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data +!:mime application/x-hdf + +# From: Tobias Burnus +# Xara (for a while: Corel Xara) is a graphic package, see +# http://www.xara.com/ for Windows and as GPL application for Linux +0 string XARA\243\243 Xara graphics file + +# http://www.cartesianinc.com/Tech/ +0 string CPC\262 Cartesian Perceptual Compression image +!:mime image/x-cpi + +# From Albert Cahalan +# puredigital used it for the CVS disposable camcorder +#8 lelong 4 ZBM bitmap image data +#>4 leshort x %u x +#>6 leshort x %u + +# From Albert Cahalan +# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons +0 string C565 OLPC firmware icon image data +>4 leshort x %u x +>6 leshort x %u + +# Applied Images - Image files from Cytovision +# Gustavo Junior Alves +0 string \xce\xda\xde\xfa Cytovision Metaphases file +0 string \xed\xad\xef\xac Cytovision Karyotype file +0 string \x0b\x00\x03\x00 Cytovision FISH Probe file +0 string \xed\xfe\xda\xbe Cytovision FLEX file +0 string \xed\xab\xed\xfe Cytovision FLEX file +0 string \xad\xfd\xea\xad Cytovision RATS file + +# Wavelet Scalar Quantization format used in gray-scale fingerprint images +# From Tano M Fotang +0 string \xff\xa0\xff\xa8\x00 Wavelet Scalar Quantization image data + +# JPEG 2000 Code Stream Bitmap +# From Petr Splichal +0 string \xFF\x4F\xFF\x51\x00 JPEG-2000 Code Stream Bitmap data + +#------------------------------------------------------------------------------ +# inform: file(1) magic for Inform interactive fiction language + +# URL: http://www.inform-fiction.org/ +# From: Reuben Thomas + +0 search/cB/100 constant\ story Inform source text + +#------------------------------------------------------------------------------ +# intel: file(1) magic for x86 Unix +# +# Various flavors of x86 UNIX executable/object (other than Xenix, which +# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do +# Windows as well. +# +# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and +# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere +# as well, if, as, and when IBM makes it portable. +# +# The `versions' should be un-commented if they work for you. +# (Was the problem just one of endianness?) +# +0 leshort 0502 basic-16 executable +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort 0503 basic-16 executable (TV) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort 0510 x86 executable +>12 lelong >0 not stripped +0 leshort 0511 x86 executable (TV) +>12 lelong >0 not stripped +0 leshort =0512 iAPX 286 executable small model (COFF) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort =0522 iAPX 286 executable large model (COFF) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan +0 leshort =0514 80386 COFF executable +>12 lelong >0 not stripped +>22 leshort >0 - version %ld + +# rom: file(1) magic for BIOS ROM Extensions found in intel machines +# mapped into memory between 0xC0000 and 0xFFFFF +# From Gürkan Sengün , www.linuks.mine.nu +0 beshort 0x55AA BIOS (ia32) ROM Ext. +>5 string USB USB +>7 string LDR UNDI image +>30 string IBM IBM comp. Video +>26 string Adaptec Adaptec +>28 string Adaptec Adaptec +>42 string PROMISE Promise +>2 byte x (%d*512) + +#------------------------------------------------------------------------------ +# interleaf: file(1) magic for InterLeaf TPS: +# +0 string =\210OPS Interleaf saved data +0 string =5 string ,\ Version\ = \b, version +>>17 string >\0 %.3s + +#------------------------------------------------------------------------------ +# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1 +# "/etc/magic": +# From: guy@netapp.com (Guy Harris) +# +4 string pgscriptver IslandWrite document +13 string DrawFile IslandDraw document + + +#------------------------------------------------------------------------------ +# ispell: file(1) magic for ispell +# +# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic +# will match 0x9600 through 0x9603 in *both* little endian and big endian. +# (No other current magic entries collide.) +# +# Updated by Daniel Quinlan (quinlan@yggdrasil.com) +# +0 leshort&0xFFFC 0x9600 little endian ispell +>0 byte 0 hash file (?), +>0 byte 1 3.0 hash file, +>0 byte 2 3.1 hash file, +>0 byte 3 hash file (?), +>2 leshort 0x00 8-bit, no capitalization, 26 flags +>2 leshort 0x01 7-bit, no capitalization, 26 flags +>2 leshort 0x02 8-bit, capitalization, 26 flags +>2 leshort 0x03 7-bit, capitalization, 26 flags +>2 leshort 0x04 8-bit, no capitalization, 52 flags +>2 leshort 0x05 7-bit, no capitalization, 52 flags +>2 leshort 0x06 8-bit, capitalization, 52 flags +>2 leshort 0x07 7-bit, capitalization, 52 flags +>2 leshort 0x08 8-bit, no capitalization, 128 flags +>2 leshort 0x09 7-bit, no capitalization, 128 flags +>2 leshort 0x0A 8-bit, capitalization, 128 flags +>2 leshort 0x0B 7-bit, capitalization, 128 flags +>2 leshort 0x0C 8-bit, no capitalization, 256 flags +>2 leshort 0x0D 7-bit, no capitalization, 256 flags +>2 leshort 0x0E 8-bit, capitalization, 256 flags +>2 leshort 0x0F 7-bit, capitalization, 256 flags +>4 leshort >0 and %d string characters +0 beshort&0xFFFC 0x9600 big endian ispell +>1 byte 0 hash file (?), +>1 byte 1 3.0 hash file, +>1 byte 2 3.1 hash file, +>1 byte 3 hash file (?), +>2 beshort 0x00 8-bit, no capitalization, 26 flags +>2 beshort 0x01 7-bit, no capitalization, 26 flags +>2 beshort 0x02 8-bit, capitalization, 26 flags +>2 beshort 0x03 7-bit, capitalization, 26 flags +>2 beshort 0x04 8-bit, no capitalization, 52 flags +>2 beshort 0x05 7-bit, no capitalization, 52 flags +>2 beshort 0x06 8-bit, capitalization, 52 flags +>2 beshort 0x07 7-bit, capitalization, 52 flags +>2 beshort 0x08 8-bit, no capitalization, 128 flags +>2 beshort 0x09 7-bit, no capitalization, 128 flags +>2 beshort 0x0A 8-bit, capitalization, 128 flags +>2 beshort 0x0B 7-bit, capitalization, 128 flags +>2 beshort 0x0C 8-bit, no capitalization, 256 flags +>2 beshort 0x0D 7-bit, no capitalization, 256 flags +>2 beshort 0x0E 8-bit, capitalization, 256 flags +>2 beshort 0x0F 7-bit, capitalization, 256 flags +>4 beshort >0 and %d string characters +# ispell 4.0 hash files kromJx +# Ispell 4.0 +0 string ISPL ispell +>4 long x hash file version %d, +>8 long x lexletters %d, +>12 long x lexsize %d, +>16 long x hashsize %d, +>20 long x stblsize %d +#------------------------------------------------------------ +# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the +# same magic number, 0xcafebabe, so they are both handled +# in the entry called "cafebabe". +#------------------------------------------------------------ +# Java serialization +# From Martin Pool (m.pool@pharos.com.au) +0 beshort 0xaced Java serialization data +>2 beshort >0x0004 \b, version %d + +0 belong 0xfeedfeed Java KeyStore +!:mime application/x-java-keystore +0 belong 0xcececece Java JCE KeyStore +!:mime application/x-java-jce-keystore + +# Dalvik .dex format. http://retrodev.com/android/dexformat.html +# From "Mike Fleming" +0 string dex\n +>0 regex dex\n[0-9][0-9][0-9]\0 Dalvik dex file +>4 string >000 version %s +0 string dey\n +>0 regex dey\n[0-9][0-9][0-9]\0 Dalvik dex file (optimized for host) +>4 string >000 version %s + + +#------------------------------------------------------------------------------ +# JPEG images +# SunOS 5.5.1 had +# +# 0 string \377\330\377\340 JPEG file +# 0 string \377\330\377\356 JPG file +# +# both of which turn into "JPEG image data" here. +# +0 beshort 0xffd8 JPEG image data +!:mime image/jpeg +!:apple 8BIMJPEG +!:strength +1 +>6 string JFIF \b, JFIF standard +# The following added by Erik Rossen 1999-09-06 +# in a vain attempt to add image size reporting for JFIF. Note that these +# tests are not fool-proof since some perfectly valid JPEGs are currently +# impossible to specify in magic(4) format. +# First, a little JFIF version info: +>>11 byte x \b %d. +>>12 byte x \b%02d +# Next, the resolution or aspect ratio of the image: +#>>13 byte 0 \b, aspect ratio +#>>13 byte 1 \b, resolution (DPI) +#>>13 byte 2 \b, resolution (DPCM) +#>>4 beshort x \b, segment length %d +# Next, show thumbnail info, if it exists: +>>18 byte !0 \b, thumbnail %dx +>>>19 byte x \b%d + +# EXIF moved down here to avoid reporting a bogus version number, +# and EXIF version number printing added. +# - Patrik R=E5dman +>6 string Exif \b, EXIF standard +# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD. +# All possible combinations of entries have to be enumerated, since no looping +# is possible. And both endians are possible... +# The combinations included below are from real-world JPEGs. +# Little-endian +>>12 string II +# IFD 0 Entry #5: +>>>70 leshort 0x8769 +# EXIF IFD Entry #1: +>>>>(78.l+14) leshort 0x9000 +>>>>>(78.l+23) byte x %c +>>>>>(78.l+24) byte x \b.%c +>>>>>(78.l+25) byte !0x30 \b%c +# IFD 0 Entry #9: +>>>118 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(126.l+38) leshort 0x9000 +>>>>>(126.l+47) byte x %c +>>>>>(126.l+48) byte x \b.%c +>>>>>(126.l+49) byte !0x30 \b%c +# IFD 0 Entry #10 +>>>130 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(138.l+38) leshort 0x9000 +>>>>>(138.l+47) byte x %c +>>>>>(138.l+48) byte x \b.%c +>>>>>(138.l+49) byte !0x30 \b%c +# EXIF IFD Entry #4: +>>>>(138.l+50) leshort 0x9000 +>>>>>(138.l+59) byte x %c +>>>>>(138.l+60) byte x \b.%c +>>>>>(138.l+61) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(138.l+62) leshort 0x9000 +>>>>>(138.l+71) byte x %c +>>>>>(138.l+72) byte x \b.%c +>>>>>(138.l+73) byte !0x30 \b%c +# IFD 0 Entry #11 +>>>142 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(150.l+38) leshort 0x9000 +>>>>>(150.l+47) byte x %c +>>>>>(150.l+48) byte x \b.%c +>>>>>(150.l+49) byte !0x30 \b%c +# EXIF IFD Entry #4: +>>>>(150.l+50) leshort 0x9000 +>>>>>(150.l+59) byte x %c +>>>>>(150.l+60) byte x \b.%c +>>>>>(150.l+61) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(150.l+62) leshort 0x9000 +>>>>>(150.l+71) byte x %c +>>>>>(150.l+72) byte x \b.%c +>>>>>(150.l+73) byte !0x30 \b%c +# Big-endian +>>12 string MM +# IFD 0 Entry #9: +>>>118 beshort 0x8769 +# EXIF IFD Entry #1: +>>>>(126.L+14) beshort 0x9000 +>>>>>(126.L+23) byte x %c +>>>>>(126.L+24) byte x \b.%c +>>>>>(126.L+25) byte !0x30 \b%c +# EXIF IFD Entry #3: +>>>>(126.L+38) beshort 0x9000 +>>>>>(126.L+47) byte x %c +>>>>>(126.L+48) byte x \b.%c +>>>>>(126.L+49) byte !0x30 \b%c +# IFD 0 Entry #10 +>>>130 beshort 0x8769 +# EXIF IFD Entry #3: +>>>>(138.L+38) beshort 0x9000 +>>>>>(138.L+47) byte x %c +>>>>>(138.L+48) byte x \b.%c +>>>>>(138.L+49) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(138.L+62) beshort 0x9000 +>>>>>(138.L+71) byte x %c +>>>>>(138.L+72) byte x \b.%c +>>>>>(138.L+73) byte !0x30 \b%c +# IFD 0 Entry #11 +>>>142 beshort 0x8769 +# EXIF IFD Entry #4: +>>>>(150.L+50) beshort 0x9000 +>>>>>(150.L+59) byte x %c +>>>>>(150.L+60) byte x \b.%c +>>>>>(150.L+61) byte !0x30 \b%c +# Here things get sticky. We can do ONE MORE marker segment with +# indirect addressing, and that's all. It would be great if we could +# do pointer arithemetic like in an assembler language. Christos? +# And if there was some sort of looping construct to do searches, plus a few +# named accumulators, it would be even more effective... +# At least we can show a comment if no other segments got inserted before: +>(4.S+5) byte 0xFE +>>(4.S+8) string >\0 \b, comment: "%s" +# FIXME: When we can do non-byte counted strings, we can use that to get +# the string's count, and fix Debian bug #283760 +#>(4.S+5) byte 0xFE \b, comment +#>>(4.S+6) beshort x \b length=%d +#>>(4.S+8) string >\0 \b, "%s" +# Or, we can show the encoding type (I've included only the three most common) +# and image dimensions if we are lucky and the SOFn (image segment) is here: +>(4.S+5) byte 0xC0 \b, baseline +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +>(4.S+5) byte 0xC1 \b, extended sequential +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +>(4.S+5) byte 0xC2 \b, progressive +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +# I've commented-out quantisation table reporting. I doubt anyone cares yet. +#>(4.S+5) byte 0xDB \b, quantisation table +#>>(4.S+6) beshort x \b length=%d +#>14 beshort x \b, %d x +#>16 beshort x \b %d + +# HSI is Handmade Software's proprietary JPEG encoding scheme +0 string hsi1 JPEG image data, HSI proprietary + +# From: David Santinoli +0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data + +# Type: JPEG 2000 codesream +# From: Mathieu Malaterre +0 belong 0xff4fff51 JPEG 2000 codestream +45 beshort 0xff52 + +#------------------------------------------------------------------------------ +# karma: file(1) magic for Karma data files +# +# From + +0 string KarmaRHD Version Karma Data Structure Version +>16 belong x %lu + +#------------------------------------------------------------------------------ +# kde: file(1) magic for KDE + +0 string [KDE\ Desktop\ Entry] KDE desktop entry +!:mime application/x-kdelnk +0 string #\ KDE\ Config\ File KDE config file +!:mime application/x-kdelnk +0 string #\ xmcd xmcd database file for kscd +!:mime text/x-xmcd +#------------------------------------------------------------------------------ +# Type: Google KML, formerly Keyhole Markup Language +# Future development of this format has been handed +# over to the Open Geospatial Consortium. +# http://www.opengeospatial.org/standards/kml/ +# From: Asbjoern Sloth Toennesen +0 string \20 search/400 \ xmlns= +>>&0 regex ['"]http://earth.google.com/kml Google KML document +!:mime application/vnd.google-earth.kml+xml +>>>&1 string 2.0' \b, version 2.0 +>>>&1 string 2.1' \b, version 2.1 +>>>&1 string 2.2' \b, version 2.2 + +#------------------------------------------------------------------------------ +# Type: OpenGIS KML, formerly Keyhole Markup Language +# This standard is maintained by the +# Open Geospatial Consortium. +# http://www.opengeospatial.org/standards/kml/ +# From: Asbjoern Sloth Toennesen +>>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document +!:mime application/vnd.google-earth.kml+xml +>>>&1 string 2.2 \b, version 2.2 + +#------------------------------------------------------------------------------ +# Type: Google KML Archive (ZIP based) +# http://code.google.com/apis/kml/documentation/kml_tut.html +# From: Asbjoern Sloth Toennesen +0 string PK\003\004 +>4 byte 0x14 +>>30 string doc.kml Compressed Google KML Document, including resources. +!:mime application/vnd.google-earth.kmz +#------------------------------------------------------------------------------ +# DEC SRC Virtual Paper: Lectern files +# Karl M. Hegbloom +0 string lect DEC SRC Virtual Paper Lectern file +#------------------------------------------------------------------------------ +# lex: file(1) magic for lex +# +# derived empirically, your offsets may vary! +0 search/100 yyprevious C program text (from lex) +>3 search/1 >\0 for %s +# C program text from GNU flex, from Daniel Quinlan +0 search/100 generated\ by\ flex C program text (from flex) +# lex description file, from Daniel Quinlan +0 search/1 %{ lex description text + +#------------------------------------------------------------------------------ +# lif: file(1) magic for lif +# +# (Daniel Quinlan ) +# +0 beshort 0x8000 lif file +#------------------------------------------------------------------------------ +# linux: file(1) magic for Linux files +# +# Values for Linux/i386 binaries, from Daniel Quinlan +# The following basic Linux magic is useful for reference, but using +# "long" magic is a better practice in order to avoid collisions. +# +# 2 leshort 100 Linux/i386 +# >0 leshort 0407 impure executable (OMAGIC) +# >0 leshort 0410 pure executable (NMAGIC) +# >0 leshort 0413 demand-paged executable (ZMAGIC) +# >0 leshort 0314 demand-paged executable (QMAGIC) +# +0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC) +>16 lelong 0 \b, stripped +# +0 string \007\001\000 Linux/i386 object file +>20 lelong >0x1020 \b, DLL library +# Linux-8086 stuff: +0 string \01\03\020\04 Linux-8086 impure executable +>28 long !0 not stripped +0 string \01\03\040\04 Linux-8086 executable +>28 long !0 not stripped +# +0 string \243\206\001\0 Linux-8086 object file +# +0 string \01\03\020\20 Minix-386 impure executable +>28 long !0 not stripped +0 string \01\03\040\20 Minix-386 executable +>28 long !0 not stripped +# core dump file, from Bill Reynolds +216 lelong 0421 Linux/i386 core file +>220 string >\0 of '%s' +>200 lelong >0 (signal %d) +# +# LILO boot/chain loaders, from Daniel Quinlan +# this can be overridden by the DOS executable (COM) entry +2 string LILO Linux/i386 LILO boot/chain loader +# +# PSF fonts, from H. Peter Anvin +0 leshort 0x0436 Linux/i386 PC Screen Font data, +>2 byte 0 256 characters, no directory, +>2 byte 1 512 characters, no directory, +>2 byte 2 256 characters, Unicode directory, +>2 byte 3 512 characters, Unicode directory, +>3 byte >0 8x%d +# Linux swap file, from Daniel Quinlan +4086 string SWAP-SPACE Linux/i386 swap file +# From: Jeff Bailey +# Linux swap file with swsusp1 image, from Jeff Bailey +4076 string SWAPSPACE2S1SUSPEND Linux/i386 swap file (new style) with SWSUSP1 image +# according to man page of mkswap (8) March 1999 +4086 string SWAPSPACE2 Linux/i386 swap file (new style) +>0x400 long x %d (4K pages) +>0x404 long x size %d pages +>>4086 string SWAPSPACE2 +>>>1052 string >\0 Label %s +# ECOFF magic for OSF/1 and Linux (only tested under Linux though) +# +# from Erik Troan (ewt@redhat.com) examining od dumps, so this +# could be wrong +# updated by David Mosberger (davidm@azstarnet.com) based on +# GNU BFD and MIPS info found below. +# +0 leshort 0x0183 ECOFF alpha +>24 leshort 0407 executable +>24 leshort 0410 pure +>24 leshort 0413 demand paged +>8 long >0 not stripped +>8 long 0 stripped +>23 leshort >0 - version %ld. +# +# Linux kernel boot images, from Albert Cahalan +# and others such as Axel Kohlmeyer +# and Nicols Lichtmaier +# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29 +# Linux kernel boot images (i386 arch) (Wolfram Kleff) +514 string HdrS Linux kernel +>510 leshort 0xAA55 x86 boot executable +>>518 leshort >0x1ff +>>>529 byte 0 zImage, +>>>529 byte 1 bzImage, +>>>(526.s+0x200) string >\0 version %s, +>>498 leshort 1 RO-rootFS, +>>498 leshort 0 RW-rootFS, +>>508 leshort >0 root_dev 0x%X, +>>502 leshort >0 swap_dev 0x%X, +>>504 leshort >0 RAMdisksize %u KB, +>>506 leshort 0xFFFF Normal VGA +>>506 leshort 0xFFFE Extended VGA +>>506 leshort 0xFFFD Prompt for Videomode +>>506 leshort >0 Video mode %d +# This also matches new kernels, which were caught above by "HdrS". +0 belong 0xb8c0078e Linux kernel +>0x1e3 string Loading version 1.3.79 or older +>0x1e9 string Loading from prehistoric times + +# System.map files - Nicols Lichtmaier +8 search/1 \ A\ _text Linux kernel symbol map text + +# LSM entries - Nicols Lichtmaier +0 search/1 Begin3 Linux Software Map entry text +0 search/1 Begin4 Linux Software Map entry text (new format) + +# From Matt Zimmerman, enhanced for v3 by Matthew Palmer +0 belong 0x4f4f4f4d User-mode Linux COW file +>4 belong <3 \b, version %d +>>8 string >\0 \b, backing file %s +>4 belong >2 \b, version %d +>>32 string >\0 \b, backing file %s + +############################################################################ +# Linux kernel versions + +0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux +>497 leshort 0 x86 boot sector +>>514 belong 0x8e of a kernel from the dawn of time! +>>514 belong 0x908ed8b4 version 0.99-1.1.42 +>>514 belong 0x908ed8b8 for memtest86 + +>497 leshort !0 x86 kernel +>>504 leshort >0 RAMdisksize=%u KB +>>502 leshort >0 swap=0x%X +>>508 leshort >0 root=0x%X +>>>498 leshort 1 \b-ro +>>>498 leshort 0 \b-rw +>>506 leshort 0xFFFF vga=normal +>>506 leshort 0xFFFE vga=extended +>>506 leshort 0xFFFD vga=ask +>>506 leshort >0 vga=%d +>>514 belong 0x908ed881 version 1.1.43-1.1.45 +>>514 belong 0x15b281cd +>>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0 +>>>0xa99 belong 0x55AA5a5a version 1.3.1,2 +>>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30 +>>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41 +>>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45 +>>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72 +>>514 string HdrS +>>>518 leshort >0x1FF +>>>>529 byte 0 \b, zImage +>>>>529 byte 1 \b, bzImage +>>>>(526.s+0x200) string >\0 \b, version %s + +# Linux boot sector thefts. +0 belong 0xb8c0078e Linux +>0x1e6 belong 0x454c4b53 ELKS Kernel +>0x1e6 belong !0x454c4b53 style boot sector + +############################################################################ +# Linux 8086 executable +0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless +>5 string . +>>4 string >\0 \b, libc version %s + +0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable +>2 byte&0x01 !0 \b, unmapped zero page +>2 byte&0x20 0 \b, impure +>2 byte&0x20 !0 +>>2 byte&0x10 !0 \b, A_EXEC +>2 byte&0x02 !0 \b, A_PAL +>2 byte&0x04 !0 \b, A_NSYM +>2 byte&0x08 !0 \b, A_STAND +>2 byte&0x40 !0 \b, A_PURE +>2 byte&0x80 !0 \b, A_TOVLY +>28 long !0 \b, not stripped +>37 string . +>>36 string >\0 \b, libc version %s + +# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable +# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable +# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable +# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable + +# SYSLINUX boot logo files (from 'ppmtolss16' sources) +# http://syslinux.zytor.com/ +# +0 lelong =0x1413f33d SYSLINUX' LSS16 image data +>4 leshort x \b, width %d +>6 leshort x \b, height %d + +0 string OOOM User-Mode-Linux's Copy-On-Write disk image +>4 belong x version %d + +# SE Linux policy database +# From: Mike Frysinger +0 lelong 0xf97cff8c SE Linux policy +>16 lelong x v%d +>20 lelong 1 MLS +>24 lelong x %d symbols +>28 lelong x %d ocons + +# Linux Logical Volume Manager (LVM) +# Emmanuel VARAGNAT +# +# System ID, UUID and volume group name are 128 bytes long +# but they should never be full and initialized with zeros... +# +# LVM1 +# +0x0 string HM\001 LVM1 (Linux Logical Volume Manager), version 1 +>0x12c string >\0 , System ID: %s + +0x0 string HM\002 LVM1 (Linux Logical Volume Manager), version 2 +>0x12c string >\0 , System ID: %s + +# LVM2 +# +# It seems that the label header can be in one the four first sector +# of the disk... (from _find_labeller in lib/label/label.c of LVM2) +# +# 0x200 seems to be the common case + +0x218 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +# read the offset to add to the start of the header, and the header +# start in 0x200 +>(0x214.l+0x200) string >\0 , UUID: %s + +0x018 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +>(0x014.l) string >\0 , UUID: %s + +0x418 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +>(0x414.l+0x400) string >\0 , UUID: %s + +0x618 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) +>(0x614.l+0x600) string >\0 , UUID: %s + +# LVM snapshot +# from Jason Farrel +0 string SnAp LVM Snapshot (CopyOnWrite store) +>4 lelong !0 - valid, +>4 lelong 0 - invalid, +>8 lelong x version %d, +>12 lelong x chunk_size %d + +# SE Linux policy database +0 lelong 0xf97cff8c SE Linux policy +>16 lelong x v%d +>20 lelong 1 MLS +>24 lelong x %d symbols +>28 lelong x %d ocons + +# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec +# Anthon van der Neut (anthon@mnt.org) +0 string LUKS\xba\xbe LUKS encrypted file, +>6 beshort x ver %d +>8 string x [%s, +>40 string x %s, +>72 string x %s] +>168 string x UUID: %s + + +# Summary: Xen saved domain file +# Created by: Radek Vokal +0 string LinuxGuestRecord Xen saved domain +>20 search/256 (name +>>&1 string x (name %s) + +#------------------------------------------------------------------------------ +# lisp: file(1) magic for lisp programs +# +# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) + +# updated by Joerg Jenderek +# GRR: This lot is too weak +#0 string ;; +# windows INF files often begin with semicolon and use CRLF as line end +# lisp files are mainly created on unix system with LF as line end +#>2 search/4096 !\r Lisp/Scheme program text +#>2 search/4096 \r Windows INF file + +0 search/4096 (if\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (setq\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (defvar\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (defparam\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (defun\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (autoload\ Lisp/Scheme program text +!:mime text/x-lisp +0 search/4096 (custom-set-variables\ Lisp/Scheme program text +!:mime text/x-lisp + +# Emacs 18 - this is always correct, but not very magical. +0 string \012( Emacs v18 byte-compiled Lisp data +!:mime application/x-elc +# Emacs 19+ - ver. recognition added by Ian Springer +# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs +# - Chris Chittleborough +0 string ;ELC +>4 byte >18 +>4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data +!:mime application/x-elc + +# Files produced by CLISP Common Lisp From: Bruno Haible +0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27) +0 string (|SYSTEM|::|VERSION|\040' CLISP byte-compiled Lisp program text + +0 long 0x70768BD2 CLISP memory image data +0 long 0xD28B7670 CLISP memory image data, other endian + +#.com and .bin for MIT scheme +0 string \372\372\372\372 MIT scheme (library?) + +# From: David Allouche +0 search/1 \ + +0 string llvm LLVM byte-codes, uncompressed +0 string llvc0 LLVM byte-codes, null compression +0 string llvc1 LLVM byte-codes, gzip compression +0 string llvc2 LLVM byte-codes, bzip2 compression +#------------------------------------------------------------------------------ +# lua: file(1) magic for Lua scripting language +# URL: http://www.lua.org/ +# From: Reuben Thomas , Seo Sanghyeon + +# Lua scripts +0 search/1/b #!\ /usr/bin/lua Lua script text executable +!:mime text/x-lua +0 search/1/b #!\ /usr/local/bin/lua Lua script text executable +!:mime text/x-lua +0 search/1 #!/usr/bin/env\ lua Lua script text executable +!:mime text/x-lua +0 search/1 #!\ /usr/bin/env\ lua Lua script text executable +!:mime text/x-lua + +# Lua bytecode +0 string \033Lua Lua bytecode, +>4 byte 0x50 version 5.0 +>4 byte 0x51 version 5.1 + +#------------------------------------------------------------------------------ +# luks: file(1) magic for Linux Unified Key Setup +# URL: http://luks.endorphin.org/spec +# From: Anthon van der Neut + +0 string LUKS\xba\xbe LUKS encrypted file, +>6 beshort x ver %d +>8 string x [%s, +>40 string x %s, +>72 string x %s] +>168 string x UUID: %s +#------------------------------------------------------------ +# Mach has two magic numbers, 0xcafebabe and 0xfeedface. +# Unfortunately the first, cafebabe, is shared with +# Java ByteCode, so they are both handled in the file "cafebabe". +# The "feedface" ones are handled herein. +#------------------------------------------------------------ +0 lelong&0xfffffffe 0xfeedface Mach-O +>0 byte 0xcf 64-bit +>12 lelong 1 object +>12 lelong 2 executable +>12 lelong 3 fixed virtual memory shared library +>12 lelong 4 core +>12 lelong 5 preload executable +>12 lelong 6 dynamically linked shared library +>12 lelong 7 dynamic linker +>12 lelong 8 bundle +>12 lelong 9 dynamically linked shared library stub +>12 lelong >9 +>>12 lelong x filetype=%ld +>4 lelong <0 +>>4 lelong x architecture=%ld +>4 lelong 1 vax +>4 lelong 2 romp +>4 lelong 3 architecture=3 +>4 lelong 4 ns32032 +>4 lelong 5 ns32332 +>4 lelong 6 m68k +>4 lelong 7 i386 +>4 lelong 8 mips +>4 lelong 9 ns32532 +>4 lelong 10 architecture=10 +>4 lelong 11 hppa +>4 lelong 12 acorn +>4 lelong 13 m88k +>4 lelong 14 sparc +>4 lelong 15 i860-big +>4 lelong 16 i860 +>4 lelong 17 rs6000 +>4 lelong 18 ppc +>4 lelong 16777234 ppc64 +>4 lelong >16777234 +>>4 lelong x architecture=%ld +# +0 belong&0xfffffffe 0xfeedface Mach-O +>3 byte 0xcf 64-bit +>12 belong 1 object +>12 belong 2 executable +>12 belong 3 fixed virtual memory shared library +>12 belong 4 core +>12 belong 5 preload executable +>12 belong 6 dynamically linked shared library +>12 belong 7 dynamic linker +>12 belong 8 bundle +>12 belong 9 dynamically linked shared library stub +>12 belong >9 +>>12 belong x filetype=%ld +>4 belong <0 +>>4 belong x architecture=%ld +>4 belong 1 vax +>4 belong 2 romp +>4 belong 3 architecture=3 +>4 belong 4 ns32032 +>4 belong 5 ns32332 +>4 belong 6 for m68k architecture +# from NeXTstep 3.0 +# i.e. mc680x0_all, ignore +# >>8 belong 1 (mc68030) +>>8 belong 2 (mc68040) +>>8 belong 3 (mc68030 only) +>4 belong 7 i386 +>4 belong 8 mips +>4 belong 9 ns32532 +>4 belong 10 architecture=10 +>4 belong 11 hppa +>4 belong 12 acorn +>4 belong 13 m88k +>4 belong 14 sparc +>4 belong 15 i860-big +>4 belong 16 i860 +>4 belong 17 rs6000 +>4 belong 18 ppc +>4 belong 16777234 ppc64 +>4 belong >16777234 +>>4 belong x architecture=%ld + +#------------------------------------------------------------------------------ +# macintosh description +# +# BinHex is the Macintosh ASCII-encoded file format (see also "apple") +# Daniel Quinlan, quinlan@yggdrasil.com +11 string must\ be\ converted\ with\ BinHex BinHex binary text +!:mime application/mac-binhex40 +>41 string x \b, version %.3s + +# Stuffit archives are the de facto standard of compression for Macintosh +# files obtained from most archives. (franklsm@tuns.ca) +0 string SIT! StuffIt Archive (data) +!:mime application/x-stuffit +!:apple SIT!SIT! +>2 string x : %s +0 string SITD StuffIt Deluxe (data) +>2 string x : %s +0 string Seg StuffIt Deluxe Segment (data) +>2 string x : %s + +# Newer StuffIt archives (grant@netbsd.org) +0 string StuffIt StuffIt Archive +!:mime application/x-stuffit +!:apple SIT!SIT! +#>162 string >0 : %s + +# Macintosh Applications and Installation binaries (franklsm@tuns.ca) +# GRR: Too weak +#0 string APPL Macintosh Application (data) +#>2 string x \b: %s + +# Macintosh System files (franklsm@tuns.ca) +# GRR: Too weak +#0 string zsys Macintosh System File (data) +#0 string FNDR Macintosh Finder (data) +#0 string libr Macintosh Library (data) +#>2 string x : %s +#0 string shlb Macintosh Shared Library (data) +#>2 string x : %s +#0 string cdev Macintosh Control Panel (data) +#>2 string x : %s +#0 string INIT Macintosh Extension (data) +#>2 string x : %s +#0 string FFIL Macintosh Truetype Font (data) +#>2 string x : %s +#0 string LWFN Macintosh Postscript Font (data) +#>2 string x : %s + +# Additional Macintosh Files (franklsm@tuns.ca) +# GRR: Too weak +#0 string PACT Macintosh Compact Pro Archive (data) +#>2 string x : %s +#0 string ttro Macintosh TeachText File (data) +#>2 string x : %s +#0 string TEXT Macintosh TeachText File (data) +#>2 string x : %s +#0 string PDF Macintosh PDF File (data) +#>2 string x : %s + +# MacBinary format (Eric Fischer, enf@pobox.com) +# +# Unfortunately MacBinary doesn't really have a magic number prior +# to the MacBinary III format. The checksum is really the way to +# do it, but the magic file format isn't up to the challenge. +# +# 0 byte 0 +# 1 byte # filename length +# 2 string # filename +# 65 string # file type +# 69 string # file creator +# 73 byte # Finder flags +# 74 byte 0 +# 75 beshort # vertical posn in window +# 77 beshort # horiz posn in window +# 79 beshort # window or folder ID +# 81 byte # protected? +# 82 byte 0 +# 83 belong # length of data segment +# 87 belong # length of resource segment +# 91 belong # file creation date +# 95 belong # file modification date +# 99 beshort # length of comment after resource +# 101 byte # new Finder flags +# 102 string mBIN # (only in MacBinary III) +# 106 byte # char. code of file name +# 107 byte # still more Finder flags +# 116 belong # total file length +# 120 beshort # length of add'l header +# 122 byte 129 # for MacBinary II +# 122 byte 130 # for MacBinary III +# 123 byte 129 # minimum version that can read fmt +# 124 beshort # checksum +# +# This attempts to use the version numbers as a magic number, requiring +# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second +# be 0x81. This works for the files I have, but maybe not for everyone's. + +# Unfortunately, this magic is quite weak - MPi +#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data + +# MacBinary I doesn't have the version number field at all, but MacBinary II +# has been in use since 1987 so I hope there aren't many really old files +# floating around that this will miss. The original spec calls for using +# the nulls in 0, 74, and 82 as the magic number. +# +# Another possibility, that would also work for MacBinary I, is to use +# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will +# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset, +# and that 74 will be 0. So something like +# +# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data +# +# >73 byte&0x01 0x01 \b, inited +# >73 byte&0x02 0x02 \b, changed +# >73 byte&0x04 0x04 \b, busy +# >73 byte&0x08 0x08 \b, bozo +# >73 byte&0x10 0x10 \b, system +# >73 byte&0x10 0x20 \b, bundle +# >73 byte&0x10 0x40 \b, invisible +# >73 byte&0x10 0x80 \b, locked + +#>65 string x \b, type "%4.4s" + +#>65 string 8BIM (PhotoShop) +#>65 string ALB3 (PageMaker 3) +#>65 string ALB4 (PageMaker 4) +#>65 string ALT3 (PageMaker 3) +#>65 string APPL (application) +#>65 string AWWP (AppleWorks word processor) +#>65 string CIRC (simulated circuit) +#>65 string DRWG (MacDraw) +#>65 string EPSF (Encapsulated PostScript) +#>65 string FFIL (font suitcase) +#>65 string FKEY (function key) +#>65 string FNDR (Macintosh Finder) +#>65 string GIFf (GIF image) +#>65 string Gzip (GNU gzip) +#>65 string INIT (system extension) +#>65 string LIB\ (library) +#>65 string LWFN (PostScript font) +#>65 string MSBC (Microsoft BASIC) +#>65 string PACT (Compact Pro archive) +#>65 string PDF\ (Portable Document Format) +#>65 string PICT (picture) +#>65 string PNTG (MacPaint picture) +#>65 string PREF (preferences) +#>65 string PROJ (Think C project) +#>65 string QPRJ (Think Pascal project) +#>65 string SCFL (Defender scores) +#>65 string SCRN (startup screen) +#>65 string SITD (StuffIt Deluxe) +#>65 string SPn3 (SuperPaint) +#>65 string STAK (HyperCard stack) +#>65 string Seg\ (StuffIt segment) +#>65 string TARF (Unix tar archive) +#>65 string TEXT (ASCII) +#>65 string TIFF (TIFF image) +#>65 string TOVF (Eudora table of contents) +#>65 string WDBN (Microsoft Word word processor) +#>65 string WORD (MacWrite word processor) +#>65 string XLS\ (Microsoft Excel) +#>65 string ZIVM (compress (.Z)) +#>65 string ZSYS (Pre-System 7 system file) +#>65 string acf3 (Aldus FreeHand) +#>65 string cdev (control panel) +#>65 string dfil (Desk Acessory suitcase) +#>65 string libr (library) +#>65 string nX^d (WriteNow word processor) +#>65 string nX^w (WriteNow dictionary) +#>65 string rsrc (resource) +#>65 string scbk (Scrapbook) +#>65 string shlb (shared library) +#>65 string ttro (SimpleText read-only) +#>65 string zsys (system file) + +#>69 string x \b, creator "%4.4s" + +# Somewhere, Apple has a repository of registered Creator IDs. These are +# just the ones that I happened to have files from and was able to identify. + +#>69 string 8BIM (Adobe Photoshop) +#>69 string ALD3 (PageMaker 3) +#>69 string ALD4 (PageMaker 4) +#>69 string ALFA (Alpha editor) +#>69 string APLS (Apple Scanner) +#>69 string APSC (Apple Scanner) +#>69 string BRKL (Brickles) +#>69 string BTFT (BitFont) +#>69 string CCL2 (Common Lisp 2) +#>69 string CCL\ (Common Lisp) +#>69 string CDmo (The Talking Moose) +#>69 string CPCT (Compact Pro) +#>69 string CSOm (Eudora) +#>69 string DMOV (Font/DA Mover) +#>69 string DSIM (DigSim) +#>69 string EDIT (Macintosh Edit) +#>69 string ERIK (Macintosh Finder) +#>69 string EXTR (self-extracting archive) +#>69 string Gzip (GNU gzip) +#>69 string KAHL (Think C) +#>69 string LWFU (LaserWriter Utility) +#>69 string LZIV (compress) +#>69 string MACA (MacWrite) +#>69 string MACS (Macintosh operating system) +#>69 string MAcK (MacKnowledge terminal emulator) +#>69 string MLND (Defender) +#>69 string MPNT (MacPaint) +#>69 string MSBB (Microsoft BASIC (binary)) +#>69 string MSWD (Microsoft Word) +#>69 string NCSA (NCSA Telnet) +#>69 string PJMM (Think Pascal) +#>69 string PSAL (Hunt the Wumpus) +#>69 string PSI2 (Apple File Exchange) +#>69 string R*ch (BBEdit) +#>69 string RMKR (Resource Maker) +#>69 string RSED (Resource Editor) +#>69 string Rich (BBEdit) +#>69 string SIT! (StuffIt) +#>69 string SPNT (SuperPaint) +#>69 string Unix (NeXT Mac filesystem) +#>69 string VIM! (Vim editor) +#>69 string WILD (HyperCard) +#>69 string XCEL (Microsoft Excel) +#>69 string aCa2 (Fontographer) +#>69 string aca3 (Aldus FreeHand) +#>69 string dosa (Macintosh MS-DOS file system) +#>69 string movr (Font/DA Mover) +#>69 string nX^n (WriteNow) +#>69 string pdos (Apple ProDOS file system) +#>69 string scbk (Scrapbook) +#>69 string ttxt (SimpleText) +#>69 string ufox (Foreign File Access) + +# Just in case... + +102 string mBIN MacBinary III data with surprising version number + +# sas magic from Bruce Foster (bef@nwu.edu) +# +#0 string SAS SAS +#>8 string x %s +0 string SAS SAS +>24 string DATA data file +>24 string CATALOG catalog +>24 string INDEX data file index +>24 string VIEW data view +# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com) +# +0x54 string SAS SAS 7+ +>0x9C string DATA data file +>0x9C string CATALOG catalog +>0x9C string INDEX data file index +>0x9C string VIEW data view + +# spss magic for SPSS system and portable files, +# from Bruce Foster (bef@nwu.edu). + +0 long 0xc1e2c3c9 SPSS Portable File +>40 string x %s + +0 string $FL2 SPSS System File +>24 string x %s + +# Macintosh filesystem data +# From "Tom N Harris" +# Fixed HFS+ and Partition map magic: Ethan Benson +# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these +# entries depend on the data arithmetic added after v.35 +# There's also some Pascal strings in here, ditto... + +# The boot block signature, according to IM:Files, is +# "for HFS volumes, this field always contains the value 0x4C4B." +# But if this is true for MFS or HFS+ volumes, I don't know. +# Alternatively, the boot block is supposed to be zeroed if it's +# unused, so a simply >0 should suffice. + +0x400 beshort 0xD2D7 Macintosh MFS data +>0 beshort 0x4C4B (bootable) +>0x40a beshort &0x8000 (locked) +>0x402 beldate-0x7C25B080 x created: %s, +>0x406 beldate-0x7C25B080 >0 last backup: %s, +>0x414 belong x block size: %d, +>0x412 beshort x number of blocks: %d, +>0x424 pstring x volume name: %s + +# "BD" is has many false positives +#0x400 beshort 0x4244 Macintosh HFS data +#>0 beshort 0x4C4B (bootable) +#>0x40a beshort &0x8000 (locked) +#>0x40a beshort ^0x0100 (mounted) +#>0x40a beshort &0x0200 (spared blocks) +#>0x40a beshort &0x0800 (unclean) +#>0x47C beshort 0x482B (Embedded HFS+ Volume) +#>0x402 beldate-0x7C25B080 x created: %s, +#>0x406 beldate-0x7C25B080 x last modified: %s, +#>0x440 beldate-0x7C25B080 >0 last backup: %s, +#>0x414 belong x block size: %d, +#>0x412 beshort x number of blocks: %d, +#>0x424 pstring x volume name: %s + +0x400 beshort 0x482B Macintosh HFS Extended +>&0 beshort x version %d data +>0 beshort 0x4C4B (bootable) +>0x404 belong ^0x00000100 (mounted) +>&2 belong &0x00000200 (spared blocks) +>&2 belong &0x00000800 (unclean) +>&2 belong &0x00008000 (locked) +>&6 string x last mounted by: '%.4s', +# really, that should be treated as a belong and we print a string +# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1" +>&14 beldate-0x7C25B080 x created: %s, +# only the creation date is local time, all other timestamps in HFS+ are UTC. +>&18 bedate-0x7C25B080 x last modified: %s, +>&22 bedate-0x7C25B080 >0 last backup: %s, +>&26 bedate-0x7C25B080 >0 last checked: %s, +>&38 belong x block size: %d, +>&42 belong x number of blocks: %d, +>&46 belong x free blocks: %d + +# I don't think this is really necessary since it doesn't do much and +# anything with a valid driver descriptor will also have a valid +# partition map +#0 beshort 0x4552 Apple Device Driver data +#>&24 beshort =1 \b, MacOS + +# Is that the partition type a cstring or a pstring? Well, IM says "strings +# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a +# cstring. Of course, partitions can contain more than four entries, but +# what're you gonna do? +# GRR: This magic is too weak, it is just "PM" +#0x200 beshort 0x504D Apple Partition data +#>0x2 beshort x (block size: %d): +#>0x230 string x first type: %s, +#>0x210 string x name: %s, +#>0x254 belong x number of blocks: %d, +#>0x400 beshort 0x504D +#>>0x430 string x second type: %s, +#>>0x410 string x name: %s, +#>>0x454 belong x number of blocks: %d, +#>>0x600 beshort 0x504D +#>>>0x630 string x third type: %s, +#>>>0x610 string x name: %s, +#>>>0x654 belong x number of blocks: %d, +#>>0x800 beshort 0x504D +#>>>0x830 string x fourth type: %s, +#>>>0x810 string x name: %s, +#>>>0x854 belong x number of blocks: %d, +#>>>0xa00 beshort 0x504D +#>>>>0xa30 string x fifth type: %s, +#>>>>0xa10 string x name: %s, +#>>>>0xa54 belong x number of blocks: %d +#>>>0xc00 beshort 0x504D +#>>>>0xc30 string x sixth type: %s, +#>>>>0xc10 string x name: %s, +#>>>>0xc54 belong x number of blocks: %d +## AFAIK, only the signature is different +#0x200 beshort 0x5453 Apple Old Partition data +#>0x2 beshort x block size: %d, +#>0x230 string x first type: %s, +#>0x210 string x name: %s, +#>0x254 belong x number of blocks: %d, +#>0x400 beshort 0x504D +#>>0x430 string x second type: %s, +#>>0x410 string x name: %s, +#>>0x454 belong x number of blocks: %d, +#>>0x800 beshort 0x504D +#>>>0x830 string x third type: %s, +#>>>0x810 string x name: %s, +#>>>0x854 belong x number of blocks: %d, +#>>>0xa00 beshort 0x504D +#>>>>0xa30 string x fourth type: %s, +#>>>>0xa10 string x name: %s, +#>>>>0xa54 belong x number of blocks: %d + +# From: Remi Mommsen +0 string BOMStore Mac OS X bill of materials (BOM) file + +#------------------------------------------------------------------------------ +# magic: file(1) magic for magic files +# +0 string #\ Magic magic text file for file(1) cmd +0 lelong 0xF11E041C magic binary file for file(1) cmd +>4 lelong x (version %d) (little endian) +0 belong 0xF11E041C magic binary file for file(1) cmd +>4 belong x (version %d) (big endian) +#------------------------------------------------------------------------------ +# mail.news: file(1) magic for mail and news +# +# Unfortunately, saved netnews also has From line added in some news software. +#0 string From mail text +# There are tests to ascmagic.c to cope with mail and news. +0 string Relay-Version: old news text +!:mime message/rfc822 +0 string #!\ rnews batched news text +!:mime message/rfc822 +0 string N#!\ rnews mailed, batched news text +!:mime message/rfc822 +0 string Forward\ to mail forwarding text +!:mime message/rfc822 +0 string Pipe\ to mail piping text +!:mime message/rfc822 +0 string Return-Path: smtp mail text +!:mime message/rfc822 +0 string Path: news text +!:mime message/news +0 string Xref: news text +!:mime message/news +0 string From: news or mail text +!:mime message/rfc822 +0 string Article saved news text +!:mime message/news +0 string BABYL Emacs RMAIL text +0 string Received: RFC 822 mail text +!:mime message/rfc822 +0 string MIME-Version: MIME entity text +#0 string Content- MIME entity text + +# TNEF files... +0 lelong 0x223E9F78 Transport Neutral Encapsulation Format + +# From: Kevin Sullivan +0 string *mbx* MBX mail folder + +# From: Simon Matter +0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB + +# JAM(mbp) Fidonet message area databases +# JHR file +0 string JAM\0 JAM message area header file +>12 leshort >0 (%d messages) + +# Squish Fidonet message area databases +# SQD file (requires at least one message in the area) +# XXX: Weak magic +#256 leshort 0xAFAE4453 Squish message area data file +#>4 leshort >0 (%d messages) + +#0 string \ + + + + + + + + + + + + + + + + + + + + + + + + + ZXgYf93cK2fBNTQEaSbhwAjLrxYL363iEvlDJSqgskQ= + + + + + + + + + + + + LctraFQOGS+3I9OAK/JA7D/no1zC+UaPBSMYItK3Rxs= + + + + + + + + + + + + cpuSNzboLrm9Lt6PKcc6RhQRUwkHopYND2IPAGwJ6WY= + + + + + + + + + + 4HosnFGZSItjK+oH24L1iux4kymxFqToTuMrifLblhc= + + + + + + + + + M8xgfw8onNntULouCxSQVU42MySt+97ELh/6LX1OHIY= + + + + + + + + + OnG/kOi937gTtE+cvOz0MTEaeXnB3ryXZ2ez5eWQMa8= + + + + + + + + + 8YQ3epO91YNQaheTWs8bUFXz9bI3AbjXji45ETofUQw= + + + + + + + + + frOFu95dIii29/YrYlKZSV+N3k/KhYm4ArpGB878A90= + + + + + + + + + u68FWWKOngOy7tQW8x4E59be26JqgShNsxj8wd3a1uQ= + + + + + + + + + VHKKCRRFg5x8eyHBK8vRer3EXdW6nv1xgGCx/IdZL/g= + + + + + + + + + eD7xcSQ5NTYOHQz2hshvPZuP/TWjPKW/EwTBvx/rJyU= + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/obj/Debug/Notepad Ultra.pdb b/obj/Debug/Notepad Ultra.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3146fb36145b6192f6d2543292c874619ff8469e GIT binary patch literal 253440 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

pq8hO!&Ofyx$*r0IhyJym96sC(%# z>;rYbA520$7}ka(VKP+RC60!5;4CQpxiAIwDyLTZ@(w|>-k|3XIrY0tvqyvXj0Lp`BZnh`WXC#?_hgyx#ENxM z^ZqK*w;g?p&d5&*{@K{3bk<%Pl{EF$J0nd{`*E{kK=+lCHRc#*IGnGdYJ9CUPKu}| zl09KNPT-l=?gh z?jMGn(+_G97TKq?mHGt8S^A(Aokqu8Z~P@PjjFuRmw9h z3|nGXgblKxM?9H;=~8tk>gSg|UVA9O7rZ9^qW285gi`#xwJAEhzIiE;Z>zuI%#)%X2JI{QXJwdJFY zJzDpu{Laxv?%T81QEGd8rGjMW<8;W*QAK0FtF zDubfhNA^V#UuDG5Y51oHca&E(3#olv%jxG|%f6={@~mopQkd;o>&m`aE$+!Ly0WoX zaX1OKh3vb+9rZIt#p7)Y_wD)V%C(33+*4fWn(FMB1{%R-R}qIp`Hfw;Y@fDyaej`5_mD{ z02aV&A^X)#J1Aa65O^h2i+MRzKDYuZ{dGSJ1~A61F8hr^^*R(@^~L=-QuAPyX{xldXP~3z zJhb#Ht#<1NS2^}6Y|D(j)SXcMrK?~&DF3N1yd3puPAz}0K%EI!!l91x_tmK7Z*dfq zdBw*ys3*W{;R3h{mcZ+wohQ?NLhakLVXE!+btO~pR&7%ht4bfu%j?@`mGc#u1jL?= zj+%4Q(x(=szXHg$8n^WGMwkR|g390WqvpJCM%@OoFS5#9?k%VXa{pF1#_3m@d>{2x zxE9WF_w(Uxs1>%`Vc_mBgFisM3bJR{^abRu=DhDfeGmL0RQ;j*55qfAZ-+mEFTlHD zjQ*C!f6B|ce7?57!}qo4+3QhU`QNr2Sp6y^{=W7G4In=^Fnh4op4hY5)vww87{4ek z?}5rs_d<<*HX1+9!H>$5m2H9SvuCfXx9_LUzMnb!HaYw5Gxn*DZEoxgw|Dk@b@lfB z+}XF;+4q36?-$0t^RY|wO3etbZ9ml}+4Ix%2l=h*I7H=I*A{2rFQMwZhhVsTJdFBu z?mq@KQ@RzZTt5O8_DA7)?)mv}8)~&t_B*3#+)+6`3$-uD+7D#+-FZK*BEs!iYQBxA z$mco*F$n=5$4=e;HLL}fELg_(N0S4#V(R6Eh%VMW!q_qAM2m_$2R zd2f`_r$4rRtdH4_=3b>9tuJUCdO|$ksO_+4v#Vc=ehoh=P5uDY57=$|JOw){=Mffj z-=4Xy+;f-0J@q4Xz2WS5)0kzg9;#kbyr#joP`80^!wmQi90d2ln8`z`Th(Ln^``Pw zWxZJ(qu%_|wq1LpMw?mJ%;mnW_pnE|--n&yes~U)`-BcZ&Bqcmc*WZ_z~*w!;j(Z@NaOl)Y$(EcmTEXi`1_>^&a?l?(cQ?_c`@@@DuKT z=<2%CXTw8q6#N|KK)F8~eu4U0r@jGxiTVMj zW*<-FFzTn^SCG9ck$*wW^NX72{~EH_LkYVK*O#67WuKnK}gN?#Ijm26bswp&<%P_1H8E%+@e^MAf)QQx0 zQgy$)+8JMte0`Qd{<7z}qw(|MJ+Q5>%Xi6ymtaTgK=mtAU|Xno>ICbemT&4om0sP? zg2$m&J(ddRx%(Hv`l!{Pl)f9CTJ=@~?kgYazVe^cY7ZL1yWIVauo3F}om%-)>c=53 zgER9njp1)mp8!9AO`!5!Q>b~CW>91B6JZx9_f(HHN1g4|8iTh$eW_Dl0b8P0-QNnX zfqZ8$xW(~ScoOQh@ML%!JO$nfWk37zB5A1aal99{L9KNt@h7k?v}=F*rtg{fSoNsJ zxN03VpZuSW;YW~f(h%9B{bc`s9;z-M9U=_&{CG5e9$oq4L+C;7zbQRDO~DKZQL|D_=TbOL>p2|8cu^#D(PJ7nfe*aqrRfVMM2iMtzgWyC4x$yY5l!j->Cdy&zx7zainn1x81{?9V1{W_eVmt-J{?ca5PjK zItD85jfF*U9JKoyw3klj0M+kMpIZI@%5OExeS7A-diS%iM`1q~%KZsY?oWhrKO4&Z zNl@-jhH`%jv}?I?-_D&@=YBSN?OF7wYmwA{s@%UZ4SVGNd9Xe_A2xy0p;Gt)X!odT z53ct4RqnyI2{mF14>YHFGyxCFp|0Sq>{eCy<@1fSb^tE`WaWikKmP%{Z{6A7g&b6KP-nCQ2xt=%TSMY z>hVrJ11{&j){iRSYfX*ZiUyQj&TyT4y%qfkDf}btF9V>XuVWpDoHbUzpY{ING5r;3wks!WNQnJ zr|Z)8sjaHZDq&sPL#=P<(ww!{rgYWeWR}hYTG7Z?_c|dhk!DB_q;Fi0?UQL=n(Vj> zJ5`@)Zo}KH8bNeJl>2F~+Xpfru!^{Oyj?Mf?1E{*PA+&pAHO}bA9n}GL{=v4_ zieK&FuN-r1A-MM3JoQEg^*89B;hBv#8t5fhKT=njdaET=3)Bj#kH~K`&L-wf89y1S z&&PP!td*w0i%=5|GuKFp2j!^SLABYWw(08;E;ILn7tC0rBUIV$1XZ@_FPJfE7x)fp z>MXN{)(w7vn)=4{?eJ63n6g983r>c_i|OO_f*MowhJ#@rsJ6K;)cOkjkYElZ*33CQ z<`4q)`TE0aAa%4k_k1S23pM?f;C?s&J_^r<&%lB3709^El;sS_9%hXWf=}UK7>n7n z>XvXQ>;Q+s-jLpWFc6M_qu@w58IFP~)1zS_90MHU(|r`LG9^4$p)a zz+v!0I04Rp7s8p4dFDtCyadjI<#0A+&M}e;Z-=x4!98#eWNwI+71AHhgU`c!$Qa(7 zH-86SjGA$(YJq@pV1#xfV4M;ug!KREDUtrL7}8&4CYtnzC2%mLeFG<+zBs-yWtgZA7tDe9Do7;55qFppf+_k zOoPi{Z&(2{;Z-mTE{D_M3OEn0gr)Fm7{F`bDtIlt8QuUl!qxCYcq9A@-UOQ_+w;n8 zA>;a>4_pgJ!`t9=cn6#he+Vn!UGNroH@pvSfRDqC@Fn;Y_&)q8JOuBDb?eykvu)sJ z)V<*rm<4|c^WZ~pJ$xA62e-oQ@Dcbjd=$P1AA|pb+u(62_Izw>_yp>|z$f7s@G01^ zE^}uv4eo%w;B#;=d>)<$Uw{|Gm*7&k3tk6bhCha{z=z;#@LBi=l1kq|ejW7z_y&yD zW3C5wfp5Xn;a)fbz71!>ci;l}9xR9N!`tD0_%rw++y*~_ufmVvyYLhEDWrcA)IW|n z4|p;>1W$#Z!{P7?I2Ha2=EJYyrI7wia1)HeyJ2m(1t!BMA#2XT8!!ca08`;%NdG5j zlFAqxwujW2K|jd2I2a30gcri*un4w*D_~2w7E-qcKY^!k-1<@22K6hjE&Ma=01v{B z@VNTa*Kj;!oE^-B-Qi-`16~b#!`opW_zTzEE_@D7fN#Tz@Dn%%)@n#S2#<%1--6DN zHX}F_UI<6S8E_V4{1z;Pxv&BSHizSI^@BZuneAXJoOGths)t6hm+uo@CvB2X*a-K@Lu>b+zNjW zpM$T#x8Wb)C-9H37F|Z>6N6Teetysmz6~eAcis0H*5y=J-riQw7EUc(ipZzod!>W z{o%=QBy0=MgYBTchnEgD=x+~igp7xRyCCDC;6d0Gz5u&HeS@zj{0R1fNiFR8ji#_4 z>UQvScot+F6^wxc;05q(xCqkc3YNpc@cVEGydMsSzlI~=AK*y1AC85e!*THVmiF91 zTR0JQA2Cv*0ku_$`1Y}Jico8muZ^06H5Hb!7YPYs~@EgO$sN2CMus@_v8H|Kiz{&7R zxDqnJ2yTOA@TagG{u(ZWyI=);6Rw0G!>eKPN%ULbiST-;Z<5^rGvI1?E?fg=!CT;^ z@K$&&ydAEEKY&lbb?{Ai2mBcR5Pl8sgiTJSzJcxG2G|e&7!HT`z-)Lg)HlI4!poud zMPCo^gLlIF;U@TV_%z%Me-9b|2Jb<}zrhz!`;F_ILVW{!!pGnsxD8H#zk+k&<8U#2 z68;E21%CmbhR?&_z(2z0;C}c#{2aaj>!q=F2iwBm!andtm6Ka(RS2BurX{6Pl0K$7fgo( zVS6|lc7Ri1N0ybgAO8(~-YOV|xQ1DP`m{s8;J{jfj$91ei>(j$=!cp@AG zJHx?nI2;1AVJ6IhLtznQY!%!Ohr=h~2>2=-3EzdIAk&d%|5trD26aoA1>3@Np}xh# z*enYcbNU!>FbfBUkNZuf>SBR%8e=78!%|MMfdIFY2D2 zjdRpJnf3ammW)OQBHo4xjsbxm)Npw$YQEJ&Mz51>D znh%p1`PthqJvvLT{p_OjNssPNaK9%*nU(*wRxBChBm>IaP(=31oa`QsDBctv`9Z(6 z<}N#>PwvR9?35n)QF>%vXP89o=aD_~k2f#7<(Bue_Ic@dI-)rx&5O&frije`4(W#I ztafi?1R^^W2Du|Y=(*hL;nc(2Z~0Abbw_SSr1t?t`%g|sPDbQ+*`vJ!^25lOJ(DFr zbw=dQ^@!9Rku#AS5QRt2<%XWgonFWfkgz}GXFXR~H197z$bY9IJ{{zTHHgCI!*mP3 z!{JaI$_?2eKgfNB+uNb=uSR57SEMZ>cNNZdh`0AJzrA_IX*QyKJPnb1az|#oe%Y&g z-d^cd+RI(puXt716n2GM`AYW6pWY6+w+iubrZ`X>`grIat;|RAdtw|Xs>AmBv`}2g z-kY4giubTNN5+2C_qX&NG zl8)%P(onw>pUW>kT@?oJ2bobk`S8e1m2>&U>zTms@rdm3;ZS~%Io&&m$RBMHUg<9TG7!a=;-n2C|Hw|Il~>E3a^w4m z?CFRo9LjfcM`op8ewTTLQ}<*>b|_7xU(e)6gXBLiQjBk+h!Jf#f1fk&Vc9-8qJ0dfY#mE|D6S4!@i!|@cb7VSFimXSrBKwfTNT<{2TOtKW1)^^l>_848 zsr~Rfl7;9y3u}<45q%q?(dn2)rXqSD|0-kyvIE(RB=sl$kPKuhvJzR3>_YY@BiTrRtVOmWyO4uO>N&(IG6I>01jt5YJF*u! zgf!1U50ZtLmzlAeD+qq`Y*h?}*+> z@9kR}Gi$byox^P&>4JUAD@U*|Z*h9BD)ww3A89?Wc!ae_{z^WwJ+tQ(EzB#__r}uu zk&o>+wvOPoK0}jTr0>1a$jHAqeI)-Dr_-kNK(F%r5$rEoR9d{KG`+8hqk#BXj{_4i zck$TDIAZDUNcIp%dPki7hKo2Zl9cq^Ie&fT!D+9J+}6Hs?6IG1nTa*D_?d*A_JN2` zBGS6?n^VKlSXq9o?8{jBN3n`SvE>b8%P)zh`K2}Bg))1+=IF`d=s7xWj+)B3H4C; z7OZghnLjq_>mgwYm=}$_4Vj0GyaSnEjQklUkq7s|#!&XPh3}$n2j7FI!S~@HxF0g# z75NKfzAN%qI17FN7ecKyE`cAR=G=<0?;-d%)PIBrAbZNqnr)pVyJp)09^`&k_)j

KNUh3G1L<1XJL8cYgz9uYK?ctOxhG`}^T>sI_Mx6`q)E?P&$;qwWbC z!1LYx8L%Ph1&|6ccmOtrPrwu4Z($SoB9wo$XF&WrY{vahpw^Zf)S*uWPk}AqU?_c$ zz?P_=hppfTur<`4fRkXu6ub7^3Z8b(rA%_(;#%-U}#yA|#hi2Nn#g(&QLcWxU*ansb8v+<%m zi%s2qg-3DI)WwVTAli7+*RXwjDQ%T*+HdGD|C>4qKbv(#^GLtD5%f$Od~@&r=08-M z@&3QsDqX!S%wN{`l5cp-w)K&OZ$-)MTFgkl*Yn-CqWswBfB0KbRCVfq`ENxHpxxJ{ zcFSL^(I#*AY56VRic(*Nb$?^l>#zJ)RG%~Y_pxrtJwJA2oy}Zx9i?E+HhJR{F7FJ> zFU*}-x@gWEJ9f;#{=Q=U7tFpS}$4_(5cRh#L9<6%dd%*ABa_Kh*j*0EkD89 z=f7#2q=LbvzN){TAubyJ#>EAm;LG+!CG&GiOZ8!7E`@`&NS!4$=Dgm-I8nHyzg{R# zCgv6J;cfG2Ig?(}{ikw14{0a7}spkVN# z($b>B_(v5Lh7`h{f*msN&D0czR-rJA$yrE@EGo>!Jrft$lY~7>QLlW)##=MOP7-TR zbv!@hEw=jCD9+J8AFOuzm4ArND*6-ikHYSS6J$p-zKS)$&gjrsezd%2w0xY6KmVP? zP541qWlO_&0|)9n>(buFS#KX{3hM~WY(!+n>r0F???<1mXzKov~O4CH^6!v4v)3_%yzAoHZ$9j8QC{MF*B>6G#e^Z^<2pd#foR?FQ zQ#d(l=fYokYg3@ER*ZHdO)DD`SNJ7g~A1B@SA zK-{B;YtMmE_5=B)HS7h+H^JHPWH=HMufZgk26G_cFlVI*hk3sw{x|O`>Ii?p^G>;Y*C&38Zg!ZE1(!(7O8esBpS?*}X3 zS#TYs2W-x;;%9RnVjz5$`-9=Da0vVaX2M!Ad)}cr9EQ3(91aJ<5s{zy0;vNz0}Yq%Gli+UTJ0I4U;xrR4jHtP4`RLI^VRvZZ@mF9WyBzQjT4X49% z;02JqGUogOds!m0P%nbB;R=`w*TOu=yD-c-g-79B)Vyy&b6&x2SO5<|>gymznis+o zU=i#Di{WW-0UQQPpymoLf%D+^Am_!*xdYB!nR5s0;icTa4_*czhfCoLFyOz=9hAY3 zVL8;?!7^BvI%M!87znAz!mUZxDw8WS3}JiTmx6YYvFBh75o{z4n7F4huh%| za3`cM5bTCG!oBb&_&!_%_3b0O9;)?Btv71DTx)?6t&9=1O z9m8+={RAh9ugdrH=91@a|1)a(qA8Sh%DDESnu{bd^-wZY9jdv922kpBSO*Su_bHR6 zPR)aLxlbNfKP^}S8$$A;>S6QUv{ZN-YSpDbhuCS}qbGg8Lfr^5f2fX*c}Her$b1W- zV4ok9KUCk)7cplrJHV-^87Z5y)6688cRDk_8rsD2#>RliPya{mISRve~rzsTKZ&#X~j4cl;E^-fzz#4`)P+!-Y9f-|7( zIoqi<=h&Y6>~*6=uzwMDgfVIjt$FKeK~1T2)|Euwv2!qux##C){C5oJrYCl&3}qnaA=*39CF0Lk9zdV%heu7HTyBz=G#6~Hp4dThn|4jldZQ+-O}mx` zaX%mpO*)Y#lzQ8ao(_M2TJ7Bf@C^7iRD1UhWJb)ipGsf(;VjgDhXWw3!JoSO_rdc}KMBc` z=6w(96C85Szl0Z}X3ja1164=OhB5M_EsJRpl`UPhY3(b2j|u(m&9k{7^=PA4;Xa7D zM#vZy9Io4K7BOiueF*(WWEHX**@5gu4k67+;GW1-q!?L+Y(RD(dl8zWNOL3u`G4t3 zBCvi;sWl~CUt5^JoWW0iez0A)j0`Es%PGy9F=J%m!cq;9X3Q{SB-xRHS()>Czncd< z_Ibc&?2{N*RGL?ulRINlL1{@&kFiUX2p!z`GB-TF{AN;^w8%ie=Kd(Vk%>cWx@q1- zX%sf^=S_A}KGnXT%Ja*d{u?p)S%-BA!WGtICa^~joOk+(i1CMU38f%R?-gpv? zjg8SKDStY)tX6ax?6JY`H}3W5;K?TWq0|saJDn9K9{-(r5lfayOw5ePSvYS-n{f}7K+BW%4MjkgWzPh@dl*XD@rt2_W1Pndp1 z8vF(7&Q9G8K8SjdQ)j|0sOd|Xv+wjJ%vpE(4v~krKLb7t^WFW6;3KF5_$VxckHM>< z`Z0IFZK!|Z)cDEV$4}QmY}D;lr+$foKqn`;MtQglBD)$@HGGS)MDTk7+chvOMpN$N9xQJTq|t)r@cNAOF| zzFkoL#+PAzLe>cXh3&BQQ1#!V`n|K`HK?-m2e^n-KAw?`510I5>jix|!Cq8x@qYMj zXUFSMy}~z)9rt2KmnwGHa$5Nfm#`gsoE>jM#m%2!eR_n6{;*}IdVjp-?AQzC5Aq3N zxf?q=8h@zYsd!TU)TKW8)S=8TA#0GW$S!0bau{hcjPV*W0-1>{Mph#mk^fDX@|dqj z*Eo;$3VASv%5M7QZtbF)_1~H3m42_MvR>-bx6c{2y*-w?Jyy4Be;`Sjp6hcZxV!4& zr|Z0*zGWSAt@LAFX1)IE{HOYSnClPhbMF1pI|iGhVR@O0gDkc}=9SLK%r9Zht*B(l zjIlX|bcsr4XhWfG6H~Bb6CyjjxkPtWudDvthzvyEmu1#|zsA)rRFCKLTz-@s%ep`; zni~8o8vIMg-%K8&vU7UpjYG@MoL!e`f~dWF}g_T$G9n3EZ=FEKoF1j9JKVcz73_xhRJ5t2G*KbM8lM{^%PHkJfxOCoeNzUt)OVM%W##?dsBe ziN8)l!(CO~sj^PWd*~v&5Sj7%s&nU<@*$Baf2qw}huC`Te{S9ESl>gopFD5tvS_?c zR2#cTWr3@?YsXr^`lwq%erx73AkUb2UDekop*|a)3`fFK;3Sv^r^9skJ&2iLC8W5T zJ{CP2GZ)ke(*M#-Y_J1%hku5elT=&Dc+z~6rzdPi9OI_>##3*|{y#I1I3AvkdM2bj z4HiL~jG!Ez2{m7R7F-X{fm>k)M#OHgxU@55}UaUXFLaF*W8k+pW zxS0bhfHP2E0cXP1FbCcRXTdFSHhc!=LamGC!F_NJ)cV+5cnIc0d;VMNL5ZUCYr3cP zA+7O**IZhm_G>@k`&uLVw)=@|FfE<_JE7KCv?enR(R!4A>)e{wR=hc>Wk%=HJFB54AW9W!=KT4Mq7ScGaKAdNI%8xYr& zaMte}iEHK})xWdrHCIEKyB5~v{w7EtFxc$w%dO*3+i$0kGF(Zdc#=lIn6RSrdE{pE ztRKH|fy>YLF6OswJENu@RX8LCh%U;i2?t>_<+dU0#C`dzE0mhNY)D=_b0>F+`q`F=R?(Nifh$t6|fCl0ad@PglX^=cmGz{7PXB(ts}}syRPKZPwR;G zp1wVy{Os46v<_9dwxc@OwtdyFH>BfE6g{d>6?R;5?p9rIuf6d%BsIoq! zJfXDd0ZFGod7?|)&JCz|rwb<*6#obLt+?Kus=K@!jm)eo1KB=|`^W*L$#BLj$W){l zS%qvswj;ZdgGlNK{DEX3(~KCq={dx=Wj=3*6UC7 zzuc1e@klosL|rKs=I;*N8|B@rX8$42_1$`7#_KzhJ8PrJTk zOKlZxS`ftpr$Wv&X|B-hedz@Uqo#isXzb7j&V=|Sm=F8IOQFUPw?K^{?tvOZJO*i_ z1LgIz;p>p18oUPyd+-??0(A~A6Kb#BP^i6jG>zt+!Zd&8{otcvDfh=ijU}?+P4HaE z9(%LS{shz*;&qq}{|YC;7;#L$C1?mWhDd``VRtwko(V62S&+C4rb3M&a^XyPDa?W8 za28wxXTy6SRbsFe=E3LT9JmM0g&I>(WXzZ%A8JfN8U>oaxEQ9w0@wu7j|%v9huMo) z`Oc{u>F=nI=f@t}Tc&q^_;JVG{2qX4&x;=eWbj-2yb{MG>icUUXfitL}Zu7 z7jj$U3ymjaeju_Q(LOfWpN6R4E%Ul3J=#O!#~pG{cIe$1y07OFjXSijY>ZQngtDs% zQgyEw`N!46_S;D*sENk-TsBE;$_-Ix`tY@3jMSBzz8@?*Y#kdl^=+aZb(|gC5BN>* z&G!>k&)aV}$PQb7R&NL0JL3<^uCYU73){!7^v7!Ku=Qfp)RFQ>J){EBrSS$u!i+EE z4=T!_8C0K>zPZ*Y1IoJ@FLZ-VP*eWQc!2U}Ncp2KmfL#Qz4A$S?x=sQeO0XxrG*_o zh5M;`KdP<)II4^CA1NI{e-zn(>_GM+Nh7I?kp4&(Qh-z-8ql*FZDsv-tEj)<~ ztgBoJ@2;C@YiClCnOkO4`;>V_1$k47N^-xsVIDKSU$_|qvd5cEYuZQiLPu43LkpSWn2Tcwr1Hlb%De%c7zQsMKHxJWxbCBbaIxnJw}Of+mj zsM{kmLi$w(!+xQTrrg^;p69s8QJoE_rE;nL7SW5M>_IPU9xa;`D+^M~zK)jHN-ZB2 zEgu#uFLw5;?=lbn*z}6V^FV9vYyDT3>NWjTy++$>>H?MZWYp?ssqVTI5@s{Tt_$x# zO_<{Q$L>e1`srb)`e{2<{q%(6lTdZfS5S4$*RT<4&SV?4_718p8tv5T2S_~;s!p2b z?$3ZHpys{O#@xkFb<`zLa~9u&s+$xb^><>l+O^b@a;4DT=$m}{7JQ0&g6ipT+3!I~ zt@=wc)ZOo7m~3WNv@b3Xy@Z}i-;}mgd!lp0siddf$EGL6cuJRkZ>Qcmfc#HhD*t{j zjPkH9SN)pbcd{>`Et!>Qif=UWWqh&I>z`Maal6;X@1Y=n#LM`9Yp+VK@sQmUVLZy8 z_4u`~_iK2A3D4x`&9Eot$afL1FVW9_JV>66`#EgYF^mmja!1~j89&Bu;_6uPbo}}e z{>}*bJG@s#WpXbf{a#O^pM5;%RrRy6=0ElC4(DHm#b0;f-z@Ln&?XbbF>9rIN3n@x zuP4#JK8`6N@i-1yW8&*5$6r>GjWRvS00r`m45%sD2;GXA#@39D>T{pTqjp zzlr-dY?-Zo|HhZjj>AxGDD4M!oP!-z_mS8#RQ)~@+8Q+nDzs)F31d*~&_0qLv{81S zj>2N|b@l$Jg&EnA1mzFCd!#-+Y`>30@lk--{1uJoQT4HBBDzwX9kh7?ZKY|yGzX;j zk*E(&8))8}lL}j*ZU9s1NgU6ZN>@{}7pUs~BKh0qh3fYM=^Z8VcVnow=mc1w{ZEN| zifnpUZ-?GjB0HKpJ6ae!D)$r}lZw5PNk=AB(LaO zFea~j%e=hifwv+u>-8u4&-W2%WchEe|Hiz$pC`|*rhQ$?SoiL6&i~cygF1kpH7}=j z&+AL{cVgP5si1IOZDIaijys#YJA-ENzBoJUul|$zANvvM_j(fDkUsTsG^aNKeUCW1 z{CqZRsqr|==Xs@{j&9tjHaI#cX1+Hkvp&vNy0C=D2Uif5)0hY~XALt?=T{8n80y^OmUcFo1q zS}zn2;V>Q3n1;wvSbSbxtd0}cMHc4oGQ#o;9~QF+Hn?ap!AVR=`FA~j&A<+s_hzaK z*FN+OKwmrbJ(v)#|4O|QjhQ|B3Y+@E>X+L7L)7FCl+2S<&Z%n-i1{$$g8gImSpYD7 zBGNs+=4RWu|GnQ2%{bM!by3sqDLFqTpnbWoi+X^n=igg%n~J$K%;&;3uo$+5OCjlK z_PwOTHK^Oe^{@ln1c_7gjo?o3dDNZZYp@G^2T~5c`+g{yZw&EpDI5!zLz>+0z8^~a zS42Ggr{53dyq$TE2j5XP@A0@5GLLM&BYGLscSOm{!K3hU_zb)Pz5;1egFnH5|9^#L zQ1A69hcVi&W&el0cLA)bIQRDV4haMW3^xS@n{ZJ;K*CM1pb2*rr5=ek(NFW3O zr9BG;MT-?GwpgWtVg-w>D70d+MT-_%wOX;oBPz6LvDFqVSnSdIe||IX?Cji7PtW)L z&-so^U!KgGdFOsxvu4eP`aRL5@JzT2o&#@!`d!hR;YDycyae6?FNe3nY4Gc?1g?PB z!Q0>p_zk!Q-VQgwl~89Zt%5t?H{ou02Xtd7Jb;G5ov+{VW_e12e1YFA#4X9f!!eUgs2~U6b^%rL7fr273M+S z`$xs_M{pthFz?AzuA@Jh%S8s;5sx^OY92UkI@WqlWFE$fF+Ygjv=)~xox z)8HRr2K)qS9V(-NUx(@dwGPz_HiJW;)|T?2)|SfPnNYvCsxxp`!&dMCs55XMg<0?g z*ap4^+rlHT9gH_*JcO;_Ij|!<7xsqd!GW+doC!0CjflAb2sH1asgFm5Z(g^!A)=& zd;*Suzknm*zr)MmpCRwXBE3i(4I9ES@Ju)XX2Z+jV0Z<*98QGSK;EB43*i)aJG=^R zfV@wOw!u93OPCLT2MggLI0OD2&V=b1?pFEQQnI99RzL!dqY& z{1&_x-Vb?C7ySq>guj4`;C^@=dOX2g?GcRL;a5H3b+lfgwMfM@F3)Uc=SHx+k~iI6SoEyHG^v~XTiH*Pxu`; z7~T!9gsjO#GvQiT4%fr4!~5Vmct6|%H^67%1Mp?I2_AqC!N0-p!&F{uZiX%4!|)vV z1K0yT3NL|=!D(yhgFE1}@JaX@{3$#Pe+G}kpTh>t=tp5Y z_zdg?pM{seU%)HiuV4Xu4laPt!{zV=xEB5zJ_KKcKZbkZ3-A^AHvBF8JNzAN(42l0 zwuJlPIq-GZ7rp^6fp5a8@Bl1^2jL?47F-G6h8y7@;dXc!z5w5Wufg}=VfYvLAMmfR z!Rf3y!z_3dc7^Z5FT)SuSon8%H9P^YhabX~@E>q3{3m<}egdC_Jixf$la0eaU`~NY zU>*1|tOuL%fRzqAL%v~&`omM;Sa>R&3QvQ@FazrMW!d=PeqXi;d;oJ(_$cH(WArn~ z`?%=0kZ=5=zd*jJi#~yTqZT!5L4OIeU?%JevtTZ41INO)a3*XA%VB%C1a^dLU?=zp zJP$qvS*whG3)w#x{Q+jfBd|NH!^1usC8K7rC+rA&!QPOM>Y{=0LU<+oGAx7r;Ej-T z@S`=5{dmy>Z~%N14usFZLGZV5F#Izd0#Cr9Fzrmf`+=?C2-p*jgo7bxT18jFQE(<4 z2g~7jcr%;;*TBo+!%)9d`vjZ_e*q`MHy~$WMIXScV7;^GFJUW~2Rp(7*c%qY;cy1L z63&FBa28w)i{LGAHe3fw;Ny_9wW2+64txX7g@1)?0bHh4FD8r}nc4cEc9;d=N_cpp6NZ2C*s z4sL+ia3j13Zh~XrLvR}WK3o7d!=>NQ`?Y_=ydASPwmt!y z!k@r)a0l!QpM*o;PvJQDG`t%A9NqwT!8_nHa3g#cZiBysPs3lqSKxE-ZTLL=5BLI1 z&!oSE&Edw9tZ@?$voA8(L0Q?<11pflx zg7vff@7JCQ|A_f~co_DB@515mJvbTu1acnW+LHi9oh z_Sr^n!wmR$$Y!vpL0jgRuqA8?&w=_K-2SiyoCsUOBFMLX(bu4U2X_Vh61)p$!p$%X zJ_*~v-@vx;P1p{;3p>C%?dUJz*{~BlAL@5-2f@y8EbIoS!faRuIde0*5%z#b{zaCupQ(Z$S51?_i-hYKKQl}5M1YvJ8+0el25gipdn@R#tb@F3*d&FCZeZ?Itp`b*dbE`iU;Tm`@ybJb& z-+{y7-SBdFFPsh6!R2s0ybIn3e*o`?JK%$G58Md%!%gr#_z+C#M1KiSgPUP1_z3I) zx4_Hbqi`yG43@*K@CNueyd7?b_rWLNWAG<%H{1bVfltEU!>8bf@M+lWJo-!69`1q{ z!e`(xxCc&vzl5{kuizs19Q+1+9^MUKfE(d&;LqU8@ON-8JPcofAH(0mQ#<3?mW8fR`D)=V62L1uw01v_Mz_;M{;oER0{3Cn;{u#ao--UmH@4-*tUtqH? z^p`LT9)VrqF*q0=hg0AOumt`c-Uv^?Rq!MDUHCEF0{;o0hM&OS!B{H&0F1+ore+kckzlSa0 z-ypy56X`c0&xEH#)&!%r@Jp~a%!ET>7Mu**z#`ZdUJK8Kx4{l@1MCR5!A|g(klzi8 z_QCVvTd*5E0kdKKZuFP%Y}f;y2YW*O{$w9G3igFF;DvAj{4!ht`@!$P9QYv2g-^f% z@K%k)&ZfVF?ct@cHyi;kg(Kl4I0nvuW8oq=4&DmK!+YTbxEWp! zx5F!;eh2d_@DOBQR&*Rrfv0q*zl1H|G}sF;WhAfSPbun zv!Q-ZvjpyerSNxf9y|og;osqWnBIf_61Ij5U?;c`UH})v%OGd8MbqHd;5^6~XVG#P z!EeE(@P4=q{s`U#e*tfX`yua^qjw;`0~LJ$Z-Whc(qF)>Yib@(t`1Gm5j;G^&-@GS z2Ydn!hChKzE= z@D+F-{4MMce+NgweJ~%s3g^Lphs)q=@Y`@d+yq~TKY?$+=i!_1O?Utvg$H4szO1Lh z=I{^jTzClfg>S)2;oEQu{39%dhv5?V4!i^Y2|fV-41WyYg?r$8@HO}s_#XT#`~)6> zjW1*#4BNu@VK4YMI20a(li+c94g3JkgMWwD!xQjE_#wO<{sZ0({{ub%ddK%rF7ZfN8KTtP8urdaxf%hr=OfqDK?pDR3G* z6_&sT@Osz~-VAxS60L^(?pm}CX26FbA5BEtVH5Z)Yzlt^o543>bNFX?Iy?c-fT{f$ zPhex%61IlCvxz!E&SsB#!&Y!0Yz;@jv*Bd;B{&Oa!uc=@E`e>}H(*=%9oP;&2;0NQ zAn$^ro$y?!-^uL&UxgjvTd)&+AD##Q2|L46`?J0Q&wyQFJ9s|q2D`!jFdGhsykm+k zhdtml*b|n*UhsO@8!m?zz}1kwBGG!-7d{LxgipXP!)IYX_%iGd--Nuoir$5sRUe&z zIWX-a#xd9!4uEIFfv^)C1TTPt;XpV9j)p_wWH<~K!QpT|yae6=FNNQLBjDX|BzzEF z2Didda3>rMpNC`Mt8grQ8;*nT!}0JFI02q|G219lzkemJcek{)o!!vLw;Bqn{@F2K2wX=xiUQ;|`>zZ(^11 zn(XvFuD-MVCZc*QKf<@P`c77Mx>was-@(>&zc=@FmbqjzqO*teE$$#hzu_Q1)eiJ+ zt-{fnDf*69-`~o=RY=va`f;zSPA2!HGY=VssBDwJEzYw0Q=!7IY8UisveP~JtutQ~ zuG+J{3D(&|`W9I6k)7hH`^ww!`xHup(x^1)UO4|K+&h{6|0%a2KR-(x{wKLr8HI1j zLtWDM->M7Bd)cX;==VLoaQj6*RILwH`;?Q_o&U*h&!YZ+*0g=$){jg7oAcrSMxXj= z`Kxg#%n|-4xYgMGS>yYE!mZ{enqz6K)BL49qA^hOu`eTvTh%icHFpW;pJ@EloJQ{c zyUS;pizla{D`~2#qj^{m^^L(^b3M)7B+U@H8IdHKPiT(!uTt|hC&j<-Y&6DxUZ*t0DI`BD&CXe$Jp-U zcV1ULe6LHbs7p<$$9?^-z07i($~{RqPc)R{KJ@(eRD2KOd~x+7aULq=>B^CiT^;0= zNJJWWqW0&)_JS-o>zkP<2P*!mlQNHoEV)M$?fw+l2ea};?&g{~g7^__fGiQa^KMy+ zCH>P=)d$ui_k8{A5KC1Fa%IK_CeotkWnCTkPTW5uw@%cLJnsANr{an4uV{-p3(Z|D zRl4+1wvp-{OLMM1S#gj5)^iq7rSUfb&`L+@AQEk?L&lHbc&EL9IXYX-;vF?d} zoWBP_g)t;gzt=3o8#;xrDc3$)@qFU8?Gwf8A~@0k^A7L z>NjQj&g=7h_m)zhcNXY`b1+g}z;6F7q4?`2;xsbE=_KD7uaR@~*}EGH?rVx)a(Lwy z-sKjSz@Ff`Z;Z7(@ZU!km(IMrsBl5zXCK_RgX!q9pIPVo#e)0V!VBkau>aLvoju&Y zD+sUWI16uVVL@5`0_Xoi+_G<0eON5m*XIBGxKSJMkdJ_hlF)U*=g>sHBHS$^{gan4zKx;`sL(#eVE^BPTa!WRLq$c zk{(|lAS}QA5w?G3`1cpBcYMGo;^kV=_HlM0(x)Xac0El9q|+X&xg{ z*ry^5kW28_pI0~xx4yo{UENjK>O05_cb$Si3jb87F0lcmJluRL#jQ_kj^57s7y8f- znmg54S7Ro|7f15`7SYFf?T~&*9@>#M_S-(p;@1v8D``{*N-09o9xBBJG z#&S>p=%~MgH)ms~s+DXvges9+R+hhr`?AOTO7>$5%jcJsj4b4~i$f+3*!!&hJGRB* zc{+NkhspjHVb*vqxiFTRy656QJ^R?C-wxl=zJAJ2zP~jOYo<$s+>Bmxi`2TYI*c)N z_3^ZL&jzF7qf(-KF-t$pi*{RnO_Q=+>u~Vbr2JBPWTpISh5OZr+y^(cCwoqXWURYjOqV^_-iaYx%wdYLZSuD7( z8uxRotm*#~Wj(gAx|g3L9W|cg#$Ew;UEtyVW&eNOn?pLNU{w>LG^{56ndnL{xcw|? zsKGl|4?bgAR7yiQ%j6zC^l>DylE z1b0>A-^R*-c}SuRs(9u6T8Urd@oO!9{o2CpWbG|kx1eZVesOW>0(SsNS^ji>>~)?Z ztN854kJ0#{dFRDjeH~KU_i^zR&Q(K&?w?F62zg%Z`TAa^Liu3n~^LH!9 zc}P(ik>*kzX@JfOL^{FUXOFk{>OY&;;aO4NQ|qEnO5j_rRwjjCupTu7mx})` z;yw|5=?3>z9c(0k)_hGl86bZFd2_*;ZoWh(hR zzgwuWxIveA7wLsFJ@a@t&^6h^{mZvrbsKF9V_JSmLFsHar5H8sYJQv1=gB(a*%@8w z1-Di6B#dW_7m2u!t?u3DDbq^ha+qJI^I)SZ5eR?tom$ zjkoe#?pr5$ITkOJZ~sc4b-?1O=j?Ft9bMh)Lpx4fT%a z;zaV3yy1D>&k>XD3BjFZ#9Wl&sO0mc%krOJYa}ni`Q{@U`PA_3O5)Tsc{=O+USz4 z@g*OmTo5lwiJnMV!dNRmLVJDO@_LveYZu>M)*ZUt+AA46sBlL9{Ni#KZA~^5@6qUO zMWh$pR?XWG-}ljBo!p*3FcvOr545g8}Qo8r3KD|?Ya!`77TlOpyPdo>aWr=q{ zXW(Atz_UTr6jHa{x|7zQ+F;hYvBnCmL-mB@NyHkuyU$v-+GI4?%)`w*1~NWI6QI_u zQesnCHSUUN-Nuhvsl=~hE!mI2Uvlqtn~<(XF7CzX`{#jeoZ()_+X%!B7b#YJmNx>DVqKAlzGI}v6-?)&F~n$PL#h#v~G6I6bj z2UFa;f=QM9@bmGw{Zd}#_fB2RkFHShHck)$sc|h)w|Q&nXw^S59yzx`(R(V z(d>T!$)9Koqz*(p7V<`(?_6Mi_yoKNrtnKEdT*~Qo!`Vrb#Kg6xAgu`HCbzJszq9J zYhv$@sJUDfzdM(~-;EOap>pwa+nUcb&LLctOD?2Y@kT=N&|ZR^N`CmcW;`)ZRlV^s z^6yOK#}IUzz@g5MeEb+%$qzs8i@P}>&akiW;}Ue_$EC0p9O3+!hMTFC{P1(HxV47L zelR#XKSskg_(6LjEmz~ml!PBkx$oyb@x59&ma@TnCgEknYa_4e*8dSNfo?L-B z6HbI`k-FajPQu(7UJ144S&teX$}*MOQPF0bCE}8Ydq3xhC+00`hs42MlkrP=G6kyd zQCJyfrr(KO#eKpfhZLsPezh{LzD9c(&P#-&I^gFB@x)-0ocH+_&NQgBPIvxkZMjXt zk73;RV|Uzofy!&Nj3X|tGobpKnUFrx{iaX~t-fCDCj1+c@K5hG{MZTl;m>Xfsme#EZDOc}H-o)Q1&;%MQ|y+4z95KtKnkIcfzm2tuW&MzriK2J88KA&V~39Jp%C~ z;tY}4GT4=b-3({L<&e3CJ74V2@K(&7D5S5$B1o7K-{iV;#rW3Noh#<|2-J*2TIeeiqmez*-j2!9DT!ozSA{1`q2&mxZBhn?VN z*cUzwhru5}y|eitoBA#961@}BduECL zz9@;>|0L0SBK1XbqrbHuOq74}JDIinulF{`$j5XfL;r9^$i~Y^1F{b}f~1d%#WImT z$Yi7(S&eK)b|VK6o%h;|2H6c6h7=%+k#)%9$X?`Kq`?^GB}gA+G%^c`kVlZ+$YJD* z>%Tq+Qt>i8pK?Z(yVO?0#jU#f+gXjwFDl`0&C{i~hMU2y?7w(l6W+^w_V+cX^FF82 z`C&@KxEO}&>e@m7h4nr<#pb#8uZ6m! z`9z-GXFP}$-bmLsx>vbwUO+eE=4W&jZVpO!5S@*?v9LaUUPD%SGZ@nvGK2Nfo?a{? z@x0{oDem$_U0QOOE%8HPp6UGZ&vcD3x5A8_dzQcC0%{{%NlW#6+$UtiBY&stP%`+vsjVa_hj zl&kw}h|_1-|0CVtzNYx8t%dgtJFOjXzDMFZMtCjCEe{gMr5Ed`W?dW5Gb!hQ=}eGV za91^)@V9KxGOc;k?POnfm?H~ssVWL;jR z&*4ovT3%1{Q_eMW`wf4bq^Gu!tmoF{crzIE4x=|3y;5$xZhBfvI;DzU5$4cu1zz>p z-od7*y~LxZWmlvudoAV0J}Ec7 zmU8p8Da+~L6i(}mEFMnlIexTuFQ6k9=)fP+hAX{%t9K%`-KtHJypO;4Ain+o_uXeUf`ayaKs*-uk{=T99IGtkQKUT4SkM4!EKt6k1?ijJ zSkMi&#;m%kv0xa~STG)D!aSG-HO94pDv!2sDa4OxC2S9sUpy~G8{xTdE9?MwLdKWq zIY`xZ`_ayWf5O}uegM0`6e8LcHiGBFGa+${&Vdx7doJw`FT$*KFYQxf$d9gsec&~a zt~t69UI?`>?aOdIByG_TVGev2=0eWgbn8a+gKj@rE{wwzm!(ZD$o^I32b z>;SLi5u7v7+}g+`FpvA3H5SW<#c&$r3@^9V!I@f&)SQn3=?tUIkiIJ7%qgC1IR^&P zl}AS*Wf#>?^}m69CS<-FoeSyvq5*IY90lh>?UN{jv!T`-mO{Fkh%;&2`T}RcxOD~2 zaB=GjoT1{@8#v>{om^J~ zTmbKdI!}BZTnE>~hv9wjr|^FGEBGM%J)~|&e}kJ~BL*4EgIXnp0!QaCz@DFegJOqCW--3UHZ^L7dJ|T*q;?Muq zIpFVN{t|o-_JV(b{o!BXD0l?s!=rE>d><}@e}mtK$KWP-9R37;0H23{hi}3Y@Xzo= z_;>gZn0l%|FFXT&gjwfbr}eLPh|V||jc8p&YvP>|t*z)CjP}=R z9YyjHts3B{~KXxoiMMKuoOq-pW>;worzq8s66!Dh{{ZH)P7~< ziQI_6PHttVGLqfBi0Xp!Htc;?euOhC!gs78EcvA}?1ZTN6qfW_Ac~XXr+k;loS7v0 zHd5u>8&Moa)IgPO#lGr8b;5irebEiRkt4v zfpnA6P~$L2H|FLP_!s42rn$K}0?o#)dp3YibH5?{C2R!gUt*_0`Vl=hMznK1Xt?#z zCQ#2PO<{AWwe*%|Zf|C-lQzfxJa{_nYWI7nSR&D`J2nsey> zK%<^h6rVA$9UKc=zRY< zy1AI19dtj_%$;F3?9Yc?U^mzmavmxzmb0Ir+;fhpGnYZRp9izy64)Ky0DHjOU{A<- zp|k|%6tFj32Q`;_81{jjv+3q?zknBF*4$llIn~X6FohXKo!A6wgX-O2gc&|743c{I zEYVtXD(m}clyDmBCwhnkU?>axOJSE=F(-@f^8;X1l| zoruY)Xx5`W>PpvJBd#K5N%gSNRS*AkwID9tN$Ca5u>3c4jR^ZI&aUS8kqcaPV|fTA z%5^TY&x-H#YPzrVHpGq6-VkYkG)L4wNYuBh4`@mo_TMm&m-d_(ch8J!>twOY&|MeB zd|SU5(tcw(Fva<=bv*A!2kMZ2_TxPrf6EW$U@QLCHNgBB2x;4Hj;(%UFlOaGeMO`k zR6WXplteVe%z0*>0f%varcpUP9P=tDJ?4Szhw=T%rEn+aY4BM%0{#Mygs(uk-v=+l zd;*SwjOT97-j;Sd26H<&7V2HtIH>+&Jj{jEx@Z8r9FB%pz%ei%>ix?^I1x^QCGbl4 z4M=H655dWBH&i@WhjQ;pUxin3|7|!GHX!fvU_)agn2-51I1OgN0+>Q5{u>qb`6_dj zsOs^pj$h}^TWA+`lmpIg1oo;6YA@OkL5t=}!#<5(Hx0AuXgzuk&&&kV=#BlmIK6x8 zfn17QjQF-#Hzv1|x!lt?rT$w{g%#=x{bPRT))Vs>9CUq)!9thn?@9`ABeD}YgnWdwpfI~3!;m~=DRK|81Nq|m ze^saA;76;K^=(^N-?*C>kQ};nSBX?_9(ac%y2SIa-i~ai9)Pa5}II$L-jvvwwI#t8e zTCIFOD`_oQo05l=&M%>_a{i1!KNWu#W1dGRudub|s^}%_6)yDdDJM7KoDHrw_ib>m zF)G>pkfM@;k%a>ZsXTug3(8@QQ~X@NxtW&IF}~zT{01hUUbmA=ljcFXdK>jO@6PMK zZ*hwGJnJ4ZP3w)?>vsr|PH&*Y9yO}|?ZQ=fk(oxhT-yi^@-m6Vq=NaNVTd2B88 zar5Q-nZ5;zXW~~%JY`TUWy${d4Q*3yxFuz2|CFUgDa$sybcVInHI}}A!+p3OC7m7e zt)378zE0sq8JkzxNGdl2?_AuRXdN=ZT3 zvnodl>mI^shpzO3+p1xyj>vuMr2MPuo#OL(+OV&R6>W+$Yu$Cdhx?c3g1QGo{Kpo~ zDbAl>IEvNzDox6zL+fmuORTlCSkS4Oj?WQCMr>EcS4k(V?H8x{$T8PST-%7_Xpw7-mzJTbc6ev;+Gs=UR@u|Wy&nOenfcdLwK%<`qr8|XHH>$nciK@bNQk5 zzYge2H@L4FUienwOG)Kgij7w53QJUW;efJ=KjQH>Sj$kwS z>c@$AEQ~h`i1#|~>tYTTskrn!toiwwkiXq?aC=A}6lFu&lAEXNd6&7jd*0QoFB5Y< z%!2Bt+rUMzEnEiM!Br5yqBW4Gr|1Ew=g=pioK(uZa2D(X7s0;pCfFa|0rf1S{Z1Fdr(q8K9n6LL7IXmo7!HI@ zQv7pDCLD}88|ryu2-I_i-c#y1qX_Ex;%jguTmdhGYoVSi_zuE7KRgYYZbbUllRS&w zf_i@V2h{UJJ^HkXP~Wglg6-iH*dOY-U=*AR^I#sF5A&g(tEa&`;B>eSYTmpJYTm5p zXU&_nc5^l4_Zi$f0e)}6t^GHl|Cz&m^`~=TFIWag!g=sYNL`6$!iBILQnt|wcpY2| z>Axb*gLiuhcfzk?eja`ea*nxsC%`%5u^TaS4tQ)S%t-Tl3A5l$m^m-n?I|1tmt*D} zW%q7i8oUkjb?_T-1-u=ug)8Bskh&H941N>72=9Qe!*9dmkUAIDqhGlTwt(M(UEtmD zLP#5qE`@8MzE4~aOW=L*T6jNP0XM+!!Uy0Z@O$uS_#oU1H^R5!CU^oq1W#d(_I=n2 zZiZdq!!QT_0O}pV4`Bg(1nM_Lw?MrscoZ&$kHHmiE4%~#2>LZdV(c0xe6Rnko^-zVYwF>!}94GnP1yP(7_o{29TIbF|v>vMTDsEcW(0X&YuXt!p zTKAMjrC0tAKolS8$xdlj{%KuRB0Hr|y1`Cq9gNhpMlK!YvFsF%!qA$lM1Cl5IwG=@ zf4VO>t&tIk@`%xv-Zyy-b|3wppJ&J2oI4$J2J#%Di|Xb2?D~+V?AB6gT5e5&dzuSG z^ee0g&^N(Ga5X#)?t=IgJp)gL@>6ROFT=)|_rfOdFR&>bPM_EeUII^tDfB4y+?q16 z;7X$Q>;OALt^H_By9&zvGDo)C`#Y6(kxEU_zU_*&ql+;& zMVi>XS+E&G3c0ja6x^m$Z&FoqTxrC>ugNk4$Bmb-!HGy8#Jg)n4yI~m!gVHnNGhvn zsl2^TB?nTK+g#^49lax|SYyiLzJCshyJr&BFV)uZh^~GyU%xarXp8wGcnQ?p;2M|% z)oyZO3Z>%v73IrNMBf)wte^U4khpsuQ8;9ytINR6B`8*UH}*)w!OlOm|5E($-~KG+ z{=t0B$K&ohu*j8>c%Rf`p=La!mzo1Tyd?oHaF7Zav3D=+#H9rxwX?2b|L7S6_tPR?+AA5 zr}?yLUaz##x9I(^yNIt#+c>Bar+i#_XpTf1aA~4WySY*UoXGt$yRUXV2{YrjUt6{N zjIVBu^=UW-`#(X=olcnjf51Gj!4oD6%3yF|>kgdpGvbOBjy`YCz)5?IrKj;jZi9W&GicvFJu22-!usMd z^HlXUTyNn2nJ<|CRrZ&v9`8itKDenVjL)++kwP6yehx37PV3ShpK!g2gG)o4PO`qJ zc9Ms_bc6ev;-~P2#QgeL4r7ci+H>N17YAj(u{;pdLo3Tdmf-_Wm7X}xt9BAwu_YFfg2X}hF2C+}_jyz%C%@M+2MUa5hI>qZav zFTZbEx5dj=CN->CengxnqbHrA74nmMk*EWO3(Loqm-&TC)t%??XAu4j!kVzCtTT>|Ay?sUjQOXvJGD{fSc&o}@ZZX7S8+v` zfE)R-82uwid(5|(A1W(~u#z9iW#!ZNnbyQpn&D4MJbrxxzJ7~#`Z9Z;d(6SD?~l82 z03&^fdp6LYZcf5;i0(x)>wTy6G!OCpxnB#^Tu09?D-m5hy1Tg!_apgNA2xxSw>5{% zETSxkPSnPzwCh<;^S*{qv$jT1aXbyC#d7ec0e0jnS7UOkA@gyGz7uK46O5RK8^uv` zf8VFaUH`5)I!$FNR}1`988PFI2+uulY4*+BEK*!rL5*9jq2_;Q!{P8ta5QWSOJF;A zJwzwE1rq=00Mzr-ao7RYC7_N_&r_XXS9l)$G9;bRI7m7pjb()C*7UkVt?AJ&qHn{V za0BcEcR*&i5#Ld`=a}EaFJsnstNow~j5xb@>bbBz<^ixb90)IkgP@+H21Bjw4T0Cf zOW-P~x%7RICLaA5j)dyxFN3eZQSkS09Q+uLhmFYF2~f{lTJzJp5}wVYTsRS42AOk2 z1#k*1hO`^Ewl@{3@5_VVgZc1rI1TdKv2Oml9~NNdw^-dgmfu=+@6h=zRks#cH`T8N zYOSvbcW1+^;W@AvrcpY6%}DD;RYhw?+OMYd3$5`iMYJZPzqNLw^$V?CT!?6`L+c>A zC(&9;)%#la2q^P%FLGN|C0kv=HgS$Tl;s@<~8eyG*P&2voY#Y9*56?*I zH~btS?&b?}m)vitU!V%Ret~x9`UADa5We~ap4(l&K)qJy8V!Q#AE?J}tw-t7ed?v2 zzlhg3`lCGJ(uO;V*V#yThS#1Dm2<`O^iJIP`9M4|pP(PonxwnvOI;l4$D$1GC~i%m z){AJf&fE*0fq5WQe?r@G{moFQ{zm0MzZ(6U*+)?Q%@X4cko3E_t4`=jb-lHo)8_EE z))BNXB^S|}L|A*MNQd&;&mZD$E+IdX^IH9w@;Vbzo^G9pIJA8?ZM%Ms zHtg=xhFyO*6H-51KX@+md96K|TCY^iQM^@e6@u0a)W#~-#uP_C=EvRmFE`0?RG+Ch zs?StCRh(ph9%k~(nMsE;D>UL8p`#p&&~a-}^r!B=%0_*y|1AM(23M+9{J9pgauU{V zQi(xweNegk@jsrJKWMzzC`B&(cX7o3h+Pcw(4$A?vH@f373yb1AU`gucB{q z>r*9A_sd`(+|4tVL-q4M&R@Z#IBT787*xtsAI|4*<&N^#?+a9WJBC^HGlRygs|}4? z*D&M|o%9JLgNSrMa*zUKF|rxig&aUmAkFB&J0ru8JY+Gl8hHfy;`;wT2UNUa{(Vf1 zg-dNDT;HJEjvCqgduCzz)TB)YntMurCwkHe?!NdA{J-uy@bIigTU7VpuB0M}eU4|F zlm=+4h^6yB?1%U=izmul&78TUyBgNz{x0#WNT?m_X%@^>w5R!-MKd8Wlp!zs&PaCUr8u!hk6* zVj}0w26s>>7GToo*$aOlPtehS^DnmZT3tsq?c>)m}~KGZ29^Q4}`LxG{AGa#qS^!H{CDF z^8ApAh|Jkc3Y>cecyYFwkDFdc^KZ!*Z@0k5A&_O-|FezXIX`Ymp`Ut;Ckx~n&jF>dSb z%`L6GvvR$;i-ns_-zNR~RuAsF$eUlW^3G*~EBjn4xB6!Os@1Dy7ETw-kM&vJ{Vi4x zaxJ}^EWLMGygQmdPg!|&WHP95UN?8gnT*O@Sl4sA`KM=Z-EVF8pSOIT!~>4*ZyWFV z;XuzRR&H@CxB3>&9xJz(te(7N?R$&0*G=`ke%$KE(M!E~y_Mr}%fB?MuYIll+-B|n ztIQ1*pQ1*d?^$_vWKeSPw|bvt>3qx5v#5!;Ut;<6v6XMj9Dn~6%lBU9-&||A$8){? zTN6CHSiI+2yayX!vV6Lwi+A@@D35c!`6)}czU@^!=UVx_W9fX=%6pT=x24sSWw@35 zG1fn+}i5Lc8hnG*>5uU%|kk^e!OD- zWm&lowsP-J= z!g;{T{Q)bdJsIBpQR^=!Sw2j#_V$dG`*tgjC#~G;TY3*#`)@eL`;$G+bCZ?-mRxV1 zYx(??_22caer>n=6RfQz}-ERHWabvEPS5^b> zuCLXEr+IgitiE@#^4MnW^(8B(3FdyS*r}^`(*i{#vVF^DSOaS$mmc{nt|iyt_0jmyfM}OtAL)sC3JEWT^4eZF;tx7Yqz<^LkfSABCYbKg;(TTbBWma#RTR3xVzVp1v1 z!_mvUUdQpCW2`(rwDNe#>T`dK&nhdAwV^yL|Km0eO(1fL-|Lp|+btg+uzuu2%ePl^ zyt_TEJXcx%Z?gPfANp;JSN0(9uCe8B;rZS?#qxiT-G9>ZyKsWJxBg>~rF*UA_k7Fm zju!uy%-wp+|4EkKxzf2h2|7^RzXPCF2G}LJM z^0AfEam)Wb*6ueA_wI5BdycH*epiXYo2{ z`8wC?)t#2F+dF!9%`Kj9S^XvBlES-16lmOV51kk6yQU*SBy7XM2BMv3R~`>3R5ayKmu4O7Z3o zL;hXi%|#Z!mX_ZQtv+qB@b9vEaI~#=pKp2%L-~gK)y~^*8tb{%@+aT=zrI$lCWP{_ z{Cdga|FG4gRn5HqZ38^JSa`2m{`a!@W?8=J>>ahkC6=$lZM=BK(*Lo=r~U}|t84_bacY~``u^d7Kq9x(r(GXK|FxfEHxY`6BO zvv?H$56wK>^6^89{}QW*bIsq@7XMt!|G9&_{sR`zmn@uK7EZ3EtD)uRhgQyeEPZJN zuJE;|R(!z9zooUqS1kNj8+iNq##b#q?~V5N``Z1u>9w@_xWvl+7VEEGF+OkQJjKfK zsgVB`zrNNE8rJvzFSBxe)%eu8{{9wAht5Y({6|`OG`4U+3n$m~)2yC6W$i6){yl%G5BCAnKWgL1ZI+&+Rxf*5 z{q17;w#>@6ewx?6rH%G1IU99}(cCz@}Jn2KLA4jwN{kyCk&24J#tpCrq`yK86c5}bo z;&XVcr>?q^I>DVf12l9_Go;?a_>9G`E`7d1( zOJ^@@O2+Qk^30vF)Ew%$(`UfK{|Nom7SzcmIhk=6elyO}%j%FZASE?kzkci#h6#L3 zp|o;N=TBWZ`X>di;ykQkk-juFB|S5i^G)54V(B?T%7D~ZohY+YdPeM~)U1?Po79{E z84(uoSmT@typ?B}O_?MBHc>}5$*r)1l-45xoT`eR2N*NZ*n-#lZ z2`}jR`N#A&vE}jQ>9HG9qq>7erxPena(2aXZ}vI1FyY(TV!Y&WtOIe_T9&=W{1vDcX^I@6{DqVJUEAd8XZ$U0;* z@;IXXVEYj^9=QE>Eui*%4MWBw+TXPhS&Hae_KnC^WGABisfUmwNII!)hGZgxkkN>~ z8J~sdJ4}6pxdz#Q>_GM+2atCWeP@|U+tPQI+Ow&%7keT($OxnWnS(4xRwL_>7m>qA ztS<3JS|II^e#kInJW`A-MOGsE4akkiPGlc)2swf@V=j`3=sd(e$Y^9YasYW3If0~7 zF?9xiE2JlqgXsLiiAVu52U(1)M%E#lk;jo2k^RUqq(Ob+h;&2xA;XY7WGSNGjJpTf zitIxUA?frjnMh|u?*vC9laX0SIT9f&kTu8#WCyYvIe?r%bRJ+UqysVnnTQl1bCBi8 zI%G5QII;`bj~qshAuX6UwnO?Me17+Hv{L^dL$8xkL+9MR^>704Q71MD`+B- zKu#d3jffM{3duqAJ75!$0%S3=9NCQQLiQtvkzELE$S@=iDMpqeE0L|p zPUJacA94seg3xEgnjx7;XJimE8kvlgBP)MBvK4s_IfQ(KWHSEtK?Wg{ zky%KDtU)#)JCMD|0ptXdN44-QBak`BVq`h88d-;IMjl6YA%~G;NQ>sg73qfb zL&hU{NHMY$S&3{!wjw)`=a56l5#%Ezou0fI(i!Q43_?aDvycc`fown?L3SW}kpsxP z$O$BsF+2llh2$U;kpg56vKU#8tVY%$n~}$nUC4{be&iU^f{wKt(hnJi6eA0frN~O; z9%Li371@bAhwMWRAxDsAjQ5?9KFAg_I-O zJhuW_gKR(^L3SX!k-f+P45Y^a*z?oM5F+jgDgf?BkPdO$S&kXWIu8Y(T2zdNIRq((hnJij7Rd2 zg~(E5C9)COiadwxLk=NFkdF{X_E<9{6X}ffK?WhCky%JNvI1FyY(RD(yOF)fyT}P7 zwJm8vIv_d72xKBsfXqP_Bg>K1$U0;*^2PPPBL~ioHPYx2i@Vv(z)>U5n>x6pylm0b z(WONt<=U6r-q|xvit(-T^y%fLWpaOdOe@ILErfGjdw0{-OZ$?&`vP}g8wLlK&Ym-$ z-|wu@@ph)uTTR>R=**HjG3jvP4QFcQm-`VJiR9EdTl><=;f&=yeBjj@A6K!XzDU=fmqm{)If(H!Eo|j-8rX zUB}y*4tW>ih__!{|BG`VlX|8)SaJRF*ZMni-5-A)_6G6@;l3lKnW>-n-*hSI|4(1# zuFp^(RWw^&Q{lX+y?XTQGqqdyiayG_vA%a@c0{HevIGfSs- z@3}D1zj-&No7AW38M{KaXnJYM)a>rAkM@1Bw>Lfd)G$WqdAo{U_g?gYp%3@=rZ=r3 zu6pM7dh=!#78m#EJ~g{XPnXIHUGK(pr&s9i;5odCuH{gLu6JX)3~K4Tv*vNNMlzUZ_;U;4P(i_Ka)FMLug{pe&Y9Nd>(uE z&Y$kxdRB}hOPxQJKh_Rmdppxf8n3ke)3D0njzP!UnNHGpuRLh!#>b(B<-<$nmFtK* z?gc$>@AP`+qu0dJxzp+S!w7;~f6v?|%?;#7MlJcD;q$+H57H6pwDLA1_UZYb&`lbD zCz1ylE4gEJ&oq+xa}`Lpum#w${or+?ZWm$J?1szP^?6^NNK|XW;yK<)yQW z<`pu-DrRs;zIdNckNkQSlfwS^UW)krv zf4qD1hjtO__GGXD{lU>nAJ(r}D-6MPzUJ;hJH$D28mI%w)nNE+2y6~L4?+zOsm|tEvv$Sl{_)_~}_2fCKcW3&v^^l*38R3*Cz6Q9m zNoa?#y&Ka_YV%q%4Dk&Ix&|F@XF5r3WQ5iSEk8rn1RZZ@I<(=?=O0Sa$xPR#OPb7F5~jAEp(|%swdvw^pe`7))_+_`&KCjZ)ZA5ZE_gvjO632qVn=Z zE*z@a6{Tg@Cc;0x*)lIj4Yftk5M@(&fcBr(-uRYNVABg z@O-Anvk;cQ=iGKv{~p?{?sJxTjn8s?C+eT&h+D|V0_Q$=etD^KvEu8a5RSJuJq)2f zYqFT?`a`QyN$K!*rb7Zl-1J_->kKLN&!2v*^7qX>Z92FwrY}o%{byzO{=Rpgoz$LR zbnZ3Zp>ztaD9fKy(JsB6>Cm1-I+oMV`7o;McstXfEr)ic_YyuGss)^@F{r4FPL}3b z5uSHry0qz_`#1%Z2(K1h@5Xc~+fY_|f8oO&M_n36|2i!{`FYdZn;vaB=pAx;dUmW? z&)b_G?K#ACG<{vAG9Fwqy|f^lBjU@>yD{CQXHUKV@aeSrQG>2`W4g5M&|Y-jqYrmz zSz%!bKcQMQ!&VH`?IqfPcW3&v@u07FC_e0y>w9;mPkRsP-r@9Bk4Bc#vv4}^ygB&{ zM$?nZ*Sj%Y+EdWgdlw&e?YiEL>C(x#_FT9=UB(=lM^q)Sw z>N?)ebZCd6J~X56^!Y2Dk@*Wp7S2}X4Q<}rn;z{k=Mhg2g8Z_A@f=ArU}$n#dN-y^`wY5FJS~0WYSr~_OgE{W7CT+#XR_{)O5u7prkm7G zJM)gn=WFe{-i_%dwbM0DSK(e(R9;v;t=``BlG^EL-YfYqYu5Ajrbjys9_=$ci|liH$@%J<=psMw8dz3TPHQc$Xs6!2`9nJm{yfeq zW92+Pxj){$`9pgR{`71je`<@*75QZ)mHRC3-u$8M27fY|o-97q{qgS2AKG!43$Jkg z)E1xNB{NDZ^2WP0KWNv%kAh|=i%Vrcyj$~wcHZ6Qv}h)OTQB0Jel{CmBXd)tujt{ zH>OKp5_DVXour#9hB#N(^=?czX}n+VbXD%jx|QSX-I#9Dct4Eym(|0qtn1yFF8xG^ z^H!&uT;CMu%DUc->C!(0-E!WGR_;5i>v}h)OTQ3w4>;Yb;Z`1xy&Kb|9|*eZ^d8ma zGvT?hym~%+H(s|V?LLfC4Kk&xa5cVFkFU2kJ=%EC+vW6Br)t*o_NGUB4tkxls)koN zjo#k$Xum;E?`VA*LwJ?-yuInsUK8`qHX*#kL623=bMtfN5zd|I(`JKyi?$)$lk0nT zrk~VqS2+DjLf7YS26E^b+;ghnJ-1?M<(+qOFbZ5W-9JOV#4)-I#7tJ8ji5q_K8g@5bx)qMe2| zzQXA$omF&`;_Tg+Zqj^xe5YE%P15ylOqcc=<~+NcZph!0&jr0(^Mke<{J7`55WdRx zd+^19R(kIM50 z@6PmT(?P#m*V^);vc7j``bqQr4Nkvuc~s2Ns?YPid-I1j9_B+!&#xYjllkM_n?JPo z;7^P?TG9S|o>ur%Jzu?h^N02y{MqmPsa!TE^T)e4f9MZF8Be6%*B+nBdFAEl z?Rit#5AW9eAPwPJWwZ06dO20pz3OG|}m<9rG)x|5->Ma`Jdp&Uf$L{7LG6CSLeyc~#jT@80}L zns4lN{;2#aznltl9B*%WN%M`>Uk>5dtmo}bFKND^P5nOoZjPN_Hm>M8ntftU8T8A*7NqJhlgRF(xHEq@OWQXHm@Q)Z*O|^8$s`|(@P4kik`RkdKb`71ikSW zRS9npZ@H4v=j}}|>3JaI;*g(~zAAd&-t_1PLU@avp2{!i6_pWOB0s&o>CyIsUeBDW z;Z@f2_NGUB5A&#doL*9RdW}(~480rErF{q8yxb~b)}ZU%m@e%(#P>y~n-s2+JHKKr z+1r~QZ8zwx98e|9Dtg}D^k}C+?<1#|6yC_vg5+}a_NGU>40?|btP)-oJ#TM%N$s%R zAn7SQ_5_YCoW5v!ap8cXl0-Rrd(%s5hliY=>S@h--rn?RhoLM+4-Vn+vJv(0x~Itf zW}m$Wac)ePwit9<3<+thUDvxYT{14r-5xIevHt1eeL?*o!9R}`wVg4>GVVR{w2W(#UUwd@5XeKo&%N+OAfncUGK(pX{RCF zV@_A$+Pfp2jPAF)B+A&kF6=cVoJ=*Cw`Jno7D(tKmKCX||Uno3aV- zCMjavR^R*M?>oP{XHym-UMHOUlkYw8ZoIDEpM5Vy#=AIEQC&YLxL+;qKjv)x1$eWQ0{x=H0+P)A|8_lizG zdB;Zx*Sj&@r2crX(;Zk`I5_*be%gC>y7uDe z$8i(CZQ}b$Z|8M-6JF4n<8&(j7)QuEZ)ZA$6UL8yPN%R$KXyDazo_I2ejB)SK}DVQ z_NGTUh3ASv&4YbgU~6;8iqTIs^6?vKKP8umze_ue1PUqYOBIDdSc!w*-4ID0$O zp}hp1c9h-eR^DN|OVIIlrb9akIxCWNs_v`tcBVrc34Q-Dr^8_7w~~czWZ~zmiGwc> z@6Pn;3qzO%RE!YM@FOHa$J?0>bC#g?87arbAm#?zfuP&~G)jerrZjnQLEVb2rDCmOrnsz)d(qet0|QfA<-b zd5F_G>SJ@aHeX%G+nG*MIj2)kd^l{J(>R-yc5i1oN#(r5>1ZBRUB}y*4&@x;){eT- zJf@y8J9LeSJoa{`lQbXIzP;wL33Cc~EKt-&vyU+O8xU`AdX#DC>lW9O9^++MKD|Lj zS^E3tp0W(}NZ;NzkBumrS6=&;$&mNnt@%OOhCW5#-!_khJw)S6ON;fBJ99=Bmdqbs zUO2m2o%Zg{ANuy-&wl66AolFBbD*j(p|ej)lXq|aOs`1ObLs6@e!cN2c(&Z{jd!4L1&{Gh+?ZS%5q>>p_! z8&y&`sH}+nIJ^T@ZK&0|M7q45^RGv@q<*^{`$C$>d?!(L-=McM9Xf)Lj&$~PG>;8l zSX5qHDk|!kcWZvorbF54JZ|#Sk2|${lZd}}Z~oBE!?@Rh{T|I@^If~}k7xrb?*nu8 zrkB*#cYD2(dF=FKoMYUph_kmd9ol+mO9dGUt8`BO^vZKjf8X5G&O;jYeRK2J^jW3T zON(i?qvtaPEtxs$+QO3LnPEk^-o5!l+YkQCX)J#dnZ)F@$cBgPseYL7Ls_Uh-o5!l zUl978cbz}wr88$17ls{kLC4#f4*fw0Ti;Zx|Cm>vUv`q>PLz{(Z~o9Hgs}DPHT`jo z`zpPi>CpazPS2*&DP-I9Ol>$*<4c6&?M#QZ9@@vSX3`lqY}6HF2M-*4+4yn829F(_ z$hvA>P{Kd2XZ|I%``ykzYag|={E&y5TFP`DKNy z>wJcC_B!SleMM;Z`<-8d2bE5rKbubvY8_xgIeGWyPtx3QBKt|2$MV@zJ!G_>y;Ssf z-p+LBE5bZ@r_&jke@&ql`bOl_{L8{18^ZH$OqV_*=;pDHqodT%1r2y55cH z(su-11{HM27S3R0YnF;b(;y2t=z2G%OFt3vYmU<$$A<}p6NcAbgo(P~-J3u36~Ujw z&Yyv$CG!|FYR&bEJoN6(ANq?>7Yf*$!aQ#N^rC`%?_2dLRMkB7I^Hj>xr8_!a(;zp z*xC~p^2ob4f9N~Hb68%c;xw?hFu!CJP2c7&!%B+_+^52cyz%Z#KWWbJqSM#dsYUK; z@u=3`ynFM9z9W?Lh%Cj!z0b3))FCG-^3}UBUHXhL2Y9?fcM((1M4bJ7bDz{dv}mKS zv?i1sUd`jbcWZvoKZG$&=NdGR4dB^_)z&NW%csv8onJnyTKW@-2<71Q%s={xkba$k z&^)H)TYU{Lfdh|m@W zu@6OhEbvXQJ?0hRd-vu~(!64a^Jgf%{im0scWZu7NTH4QWN(Tedw9~Po%7X2t)7Lv z^g8Aj{Y9t~sq8oL^>ld2;DvLFOUwSh_Ra)4tKx3s6N`X=D2jqgYg|xNmL!BMxRHbe z6c7YN)M(7cqJhK&R9q^87T0Q9RJ2xc-|K?4?!~(AyP|c$9j!~XwsrUW{bzaKn@MIu zzw^EEobNFDaNpc#p4sO=bMKuyH)S?cZQS@V+T=acd0IQBUSEn#ZIs3?6D=-q)8%0N zSZ!iHF`hLlw1xJs@oYnIX*Ygt7}y18SF%}OvKjBnv5|utub3Fu&zwD1pG&3R__KQK zfzvN-Pp_qu^h-%De&f&T6Z427)~49_J1l?W*M@r1H1dcID}GSBMfi8Y7O zH`C>3c&o!UxO!Wyb^6^z?4o@(ZQn9<={A0>Hem-Qu@;3o*Y~Q&&2DH&S|z77eykQd z;L^KNYbQ>s@Ptlhc&nrDyRsh4xMJoy<_?B5l&XnM^>$f$s;-PbtEbPqc%RUEJ(q6x zeM-YyU82ADqPgew-zN58n>a6C*nwomLms~s1tW!F}TV0}m zkEMNyotRraCuk;ISsA}J4EndTwcTkS%w^=go4}PvIvvKZ4TFB|?A2=8N-!O%5i=c* z@o&PB^{OtMeCnQS{<*cy3!1{S_H;PLzYT}}?!viVhr=~+^SlL3YmqPG--bh7xUv~U zo5F7JlqP)h!$-HYFzz-(TzvVO|&b+Sq*jQ<{ztAKS91{w>0sjDB<6nxBe4- z{BqVKY}Uau9OK7osUH_t7sB6Cx4(UutEKDKoY(&It0}{z|4rISoA}?v-q)>8j5*I_ z$@%zm72`+8l~+T1ba9PZPqcC^J7wPd88bL;=WAM5#!I}6;u0}$ zuGd%dx}VtsC{@13pVebuU7Dqi`>C?#dS>QTRc@1mswz&Ww8oFt<`-gPomTcE>gU>x zCw66J{8(+B|$;W`FH(6>Z4}|cG39Japl%f4o*9r^6qK& zsz}TSWqv5>F*efpG1}UMt$IXj+qYGQvzkQx=1^BX1J7^`XEn+EY0c#7Ir_ePa@Ltn z<1+2XYRR9QKT!O9wO8Az{bw~c)XP(*_6(NGtMPBbDfaqN|8{JF`0sD(B)>Re3vSZq z+qVUV({bciCv3qi%Co=N56>2u^VWaD7W602{oAnx=DhV!9$Z~Nq5a2guJL2F%zd2p zZ2C)o*Cqot*Z8qo<~q*ivXBaGYnyA%S-*_C&aaebH_xv*r~T#>QO3@;T}XL#b7?~7 z>d>4w{);JJmj`KI-8$$e#*fuf)~+A_Lu=c&ONP^$Tp6dFM#hP5O5e9`^W4^OR#TVO z$n)H8f$`sPR>NT7;*ouvoudwPPY zAFHKZxH;)kDkBwFLg?z&@K#6LaQ$F9ZL*Kj_qHUJ`*0~u`t2B|Ijf;PIL&g}U?1iz zjWe68=j_FHYl*TjoYf?*-KNt9`*3X_c^hBNgnIIBrqyY*t7gws^aZq_1~Hp5v> zqWwIO&`3OPmON3{i^-SqW3`E~S@tjId(?9C*CaHNM#EVRW3wyw<*a)kjl7!LIH#n! zxq5-UspQgWc&lT4b~an~Fh^H1F%gG3XZ=>E+fgspBiK6HZ}NCKZ}MTzTmSR}H-5jX z{ZHl|O!Hi~e~?}p$C8LyJnHrDdl~;W9QudL+oawSFBdp=xs(<&t9S7m-sXobJ}lC4(-;J!*cpmmN#~pbJj0y)ul%Ha>-20QnbxHi$n{%k4}HCUYtCuEd3AN^w!=^Sww*ti^VWZTy6t?W z{l~ATjUTJUwmaK5i#E|$rQT<+l0mI1H6FIz*UB=9l~1oE@#d5hTB-f)3-Gu)sB9Caz8LXhe;uD9UAn;tCU< zQZ9Vit6I*vzYV{;{x**MmghiZy_IX7KYjhGiYrQriVE{aJC82B_QT&pt+JVrYvXwM z=4N&3`bg!Ml$Dg06_=Tq;_>XN_um$u3yCjYZZfE`=l&d~_@xE8r8(urMK&|>I7(Gr zSK~2t|}f+o4t=!Y3YcvisIqU40VvFJ=NV@Cy8s|`Z3<0(i0I?kXKYNdU!EYZ0+LZ zR;Zq#yu`^jvEuoW{)A~8ky~1{R&_F5^|I|-_VbK~ZC3GAv37#>1hO4?iz+QD9$lU{ zy2K=}gR&}9Mb<9J_sBYkYkpHxV>9oc`g1r{R8mn7Z(-el{14fE*?j|8er>3CIcPh%UvYo6_$-CDk|rq02dFxNM+k{>yK@S zw=u@n2@4qGWNiz-6&F%R&M3s=+D#p5+rt1d@?XW3{G>@yUTOL8{NZcYE{5vw z14=pE4gQNbSu|2#T{oqAhP|mlzK`U6hvq|bRZeMPS$TPJfrQ#o`4;H!{E5Gnlyf}( zR2vyOt#o_o5WEXmJ8Smb`l`I*s`yJiWhKMQDhftRpC5AP(9ih-CU1r)g^99mOMU$> ze+Vb%S@vaJYi=*jZt5tNm^W;-sCno~ti|3(eK9j&QeIPUba7 zZIGKKK5`teY#Q~_$S^rM=9BhS)6=F zGTzU0KS+N3C$FGpG^0SNj(#~O4lAn0H zOZICfFoiiIaw|%8D&u*{RfG37nd!C7TE*e!$ttg?B6oC!>@H(mJRYfC<0Ky!Q#qmQ zq7`tV>y$?$y4NGRe@1lODC2=PZML}eUy{zjoCu{;-fa%)>La=Z5#2=*-7OK_%Msn* zBf5>T<)Qq^v$0VA_KN5Zj_4LebmvBNcSUqhM|AS6EtEf*+lKNt1TLg2iRflTbjL(= z7e{m}BDz%(-NzAKAI7mz{szJg4D^S+Bf3K(y2TOQc@f>+5#2Kp-M=Eb4Va6C?90}0 zq5C{T;X>sy1uj&cGb6e)B072A8jA11i0+k$?uUqO6YkH1;wyv;C*KSX=}wC1 zu8HXGiRj*r=>8qiZN-Erl+Iyrp>mlT(annJ&Wz|TiRd1R=w6NJevIfgW&Rb)pL~-! zR4(Hqx+5aGlOwuoBf5Jdx_2VF|3q~1?dVYca^OOCq9UR@Frt(1QitL@DWba|qWfb+ zC*Qmd#kVS=`!u3kk9&5Za*=OphvFL?(UnGY(;_B=4sc5*DYZ+0y9MsBcDWCp z9_mm6~R#HeCJ`b1$Gh-Jx)cY?$3!#i!KUQ`2c- zxJxx^TT`#?$`iV zS)=cbw5z)WZl6FpKdVjWo#8I!#Cvuf-x%jQNSx2@HcQrD8|QO-!@2(MbCV<7fpEMc zqn)oi2hQ~)*AK;`r1K%T$@Zkr^`EEId$t~Y?)#(C>GZkvk7kV$*Z$&sZu4Vg4XtrL zHx$mL6Z4#MlFll)hi#ZXx5M%2^7OfUICn44=cd59cH(oDa4s#b-%EldEoZ`gZOg^y zes!W!e-e*4pWAhjQgaN|hPxW>zyP=2Vx`UtaOcChJoxcl3O6pG`vh($%el5Fe@gx~ zKPjDepBn?$*S2e)JLr`3`T(ChA;Mh-H`LaxuY2~iblv*gn{eF&dH4X%)!#QZR`MNXU*p8xI?kc!l zBr`Z)_uQ3AePO6J+yhso#~fex8Js)kjuMPS^8=i-yFPdP)k?{l1aUt1#kER}HB=jJ zE%x; zvt@Am2e{ARY69H8E7Ef!Kg=a?g#q2YaPq81oUc3P*7P}_I}NU{k+soX1jp7K+WES> z;kFNOtKo(QxZW5@c^)Fp5A!fM*Z+L(SUB@+qOEQz+zQ(!eBGEkXoI$HeeSHg(sshd zE9sK@TM4&jefcY$CiyMg)%Phi)5hoPHhNI0v&AFM=Prhm^=<8O-5yTca$mPG+!03B zCd?DzMh3XM;N1Mh4|4;I(hRHH#2)1!$!mnmwdZ_pIov@u?>_hK6G}}8=*B*&R9S#K z9WIoX&*65mx=rm-4wB9-pGv3G=f=V9XvZp_YkrP-j}6P`9)Oz~;QBwW)Zzg5d$`5` z*W-osGd@4Q-Qng3bhp60YPr7lC=886D3W8-{o8Qib{_i#k_Je+%o?}ypzC8e&g z_3m>wzrqtk+pc}?;=d_%Vt~tjJw0#rbqB%i7s$g+a13+W`MPOuC{-HZmci-5{o(`JtH3xv%t>(0hWp&1a5n^W z8?H%@jlS+tI5&>@+$V6m2ErWlVfuc7uNw(BE}%OZ?vnu5{82c6i{L&Bw9g|x4%fp% zxXl9bodXvt&nw`T1ayPRK!{rb7Yg%!xKO$D{xr-T5aBL|+b)pKhv6m!xW1n$H6_5! zgc}gx7Q+n>aJRv^d8FSahI|pOhf=s6fw~?4&-DD$4|675Wk7fTmrB(K(mCi~ECva1 zx50(_!>e!`1#}<6H3hf>{vEEP{Gb217ZI1Kk50BUoK1F_6_J(!LuztXU7Cpc$A{4k5)<_5yNG7{$P5$-X# zA8nYM+oK$$JRdE~NO5+4csOH?i;vX0j?{H&o+w4Y)Vmi#hMclxttw zK!4ul+KN1Ht+rt{F_4t*s0I;3R_Z^APkLYSzvSP}r=(*^5Bb-)9Z8QQQ;rvOXI($o zpZq)kcIEd|J-Met#UIv9sh7dGXlHXy#;A|MlCDa94`gqUZ-9*V4}n4Wdt!a=v%tyP zH+c{JJi=LjL)L6|QK}klH;$Krq!Uh+jjUv++~$_bdF(;ZSm`zpY^j_!yM>K{ve{mW zJrT0=a&kvh+Lg;KmG+IAZ2iWN_t%64+16iW`aPo2^)0h!&aH1AdSuQ2eT?Rfi)?wF zFx$Lwk?qz=4*kg@&O}D_OWxV#b+g&&GP5~r6;md%l4vEJQ&;Adm2C4#ql`4e)-hzX z;hA?mvU%4d+rI0OnH=eF#kGniv)Qt*Uu3pzr`lU4+I1_-n2}0p9YaRzLta zkm1%BjxA{pLdtq(< z-esrt$g6(ql*QNdhQ`{%&50RYW3>#c z9a%X)am`rgK9W*-q`78nNnA5FnYUeAD(9MACbIdqUvsthSBsnYQT00FOvh7~xE{@9 zgsn0?^rwk6(`D-31<#gB%dU4D3-bRxe4k)C^~fTWfRZ8RouCXU5f8McJaip^@F9zZczkeV|pW87|i*y~Rp4UteYK zhQ{Uv*>kGrR`X%5Om~T3yq#6IP1P-YNzEAd>RQ=YB)hYQ>sZvCm3{W3nwyySmAIeUITR zRJnScLx0i=)!DCwO&g0psJcpOZyF7MPFY%mqTaNee+;w}74g9?g z$Ib8{Yc0>@xHZS_Tx;*d@zmZtx8-;mkVo1Z^7oD$#qqdSUCBv#?*0&w%Q}H0xNs*( zRZIf5z zNjd4=j^n*NZm)dIY2+LYOZInIPQ$)+8SNT>eQC_|I5!Gz6%AJQ=e-^6>fKp8L0`F^ zMk(te@@dqo>A1(yn5WZr<(s3UIDWUk>F2K#m$cnC!D{dpcpJO}-UaUgf>rl%l)Y!~ z0r!HxfR*4b@K1r(La0rK8P9vBYt!3acZ=?@P|CYWlc13KF*d4KbVn4)2h}{ueBX)>l)^ffE|I<{Z3$Kum{)^i~=Q~6wqwdXiyF+z!)HHW-qWe7zf6K31A;E5ljNI z26Qr*0;Yofz%)R$tLfkXa3DAcNFO*D90IDqp`aSnfLc%o>cI>!6U+j$!C~NV&;aIu zxq#-X*ESx(u^F_0d0;*`5*!7N1`EJ3;8<`RI3D~GoB$Sr6Tu>|7@P!72EPJJz$xHV zAY;kt;0$mk_%%2SoDF^hehYpFmV$G@x!^po44e-x0KW$pf;3 z;6CtIa6fneJO~~F4}(X*qu?>{ICug)37!H^gJ;0A;5qO-cmcc!UIH(JRp1ryD)<|C z4ZIHC0B?fT;4Sbrcn7=--UIK055OAmA@~UV9efNv0iS};z(2s};0y3i@Fn;c_&4|u z_zHXtz5(BY@4)xq2k;|MS^N*y13v>@!1|yo=mxrj4L}dj6UZLivL3EC*a&P4`hZQq zrl2p_3~Ubif&O3%uqD_E3;;g|zW`fnomHbi2`B|+U^FNP6<`b)3-$tg zgK=Oym;hJ;s3w9*U|%p9OaW7Yyx%ho><^{`c`$MyI0#gNgTW!73LFZmK@F${b)X*1 z05icXFdG~O4hIcj4wwrXK@&IvG=ml}56lNgf}_CEU;#J=91D&E$Ae#j6Tm`nB3J|# zgOk9?;8$P?I0c*vP6MZdGr(Ek*WgTWHuw$rE%+T+3eExNg7d&Ka6Y&I{2p8g{s1ll z7lY;C5^yQF3|tPb09S&mz}4Uya4onFTn}yle*`yzo50QB7O(=`3jPFc1Ahj$gFC>T qV4cfM3A|6)egM{h55Y%Zom*D|>q=l<39KuDbtSN_1pa@Q!2bYT9!81) literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad Ultra.vbproj.FileListAbsolute.txt b/obj/Debug/Notepad Ultra.vbproj.FileListAbsolute.txt new file mode 100644 index 0000000..25d092a --- /dev/null +++ b/obj/Debug/Notepad Ultra.vbproj.FileListAbsolute.txt @@ -0,0 +1,61 @@ +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.exe.config +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.exe +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.pdb +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.xml +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Form1.resources +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Resources.resources +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.vbproj.GenerateResource.Cache +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.exe +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.xml +e:\documents\visual studio 2013\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.pdb +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.exe.config +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.exe +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.xml +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.pdb +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.exe +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.pdb +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.xml +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.vbprojResolveAssemblyReference.cache +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Resources.resources +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.vbproj.GenerateResource.Cache +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Find.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.exe.config +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.exe +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.pdb +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.xml +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Find.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Resources.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.vbproj.GenerateResource.Cache +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.exe +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.xml +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.pdb +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Settings.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.NPUWindow.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.About.resources +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.About.resources +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.NPUWindow.resources +E:\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Settings.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Customise_Colours.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Status_Bar_Options.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Supported_File_Extensions.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.exe.manifest +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Notepad Ultra.application +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.exe.manifest +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.application +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Preset_Directory_Manager.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.FindReplace.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\RichTextBoxPrintCtrl.dll +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.LoadTimeWarning.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Splash_Screen.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\PostSharp.dll +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\PostSharp.xml +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Open_Passed_File.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.Passed_File_Action_Settings.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\Changelog.txt +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad_Ultra.ChangelogViewer.resources +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\bin\Debug\dependencies\file\bin\file.exe +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\bin\Debug\dependencies\file\bin\magic1.dll +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\bin\Debug\dependencies\file\bin\regex2.dll +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\bin\Debug\dependencies\file\bin\zlib1.dll +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\bin\Debug\bin\Debug\dependencies\RichTextBoxPrintCtrl.dll +C:\Users\theco\Documents\Visual Studio 2015\Projects\Notepad Ultra\Notepad Ultra\obj\Debug\Notepad Ultra.vbprojResolveAssemblyReference.cache diff --git a/obj/Debug/Notepad Ultra.vbproj.GenerateResource.Cache b/obj/Debug/Notepad Ultra.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..dbe754492f1f4b787991f83eeccca75e89a18440 GIT binary patch literal 2356 zcmb_d&2Jl35Vw=q&E^BVZ9)kB+Ln~IBsH;}(4Z)S#7Ww;F%5ANI9No_-m&wV^{%yV zmwX%%5+GC%Qn}`U;L3p$7le@d4}g#gH^>zvR8>M8kjng?oi?NviVzcJ^7j4a&CHwm z%}XR2i9{Z-;4h@Bh1HumS@J#Qm4oC|C>=YwB-FY}W<8&VtQGQ=^xTQmNOBlILsm9) zg3zZ4m%_jo&XBbb79Cl-PFqXfI=K_Y;Y@k7e7T%T*`vcEBVq`4p?Qo&Qdh{GrW(06 zxg|-ejg1YT)El$XA!XJ)KM+NS=4H_rKI45wq4>*PCmR;i(x+13`CC>#5CLIpiVX%= z75P#)a+~bN4cgkGk+aRS*dHGSIiy(&Y>ieZWZlsk!}<`1QIIZs-=$kmH{QvrKeuIZ&NsPK1*VV}`Xy3HX3b{2i{YN^ zns6)Rc$F1N8|2rKZbo`Q2&04zxQ9xn$%RX@)QJ|dBa&B zTO|;GkvRWSqXbX$ZudV8`+2JmV-+fEO8C}|TAi4va{^sMd5mYEjzgV*Itg_O>NJ!E zbq4Az)U!|nP`dxmVRatr0;>eN4N0KmkQkh&nh!1a{lL>P$Xoi^z?gJ858nvY_i(_s z(DT7ED_2zM_8c*szAkgbi1Q^ATM$d17tjX=DXdI;UC_MMo|S_ zjzM5x;=eCOBQ zpYwyjP+^T_fPs=Xr+V+a^93-Azce<=3j?(5|KO9mRqYe~(AZ^Q;N$YZ+n;`Y5$Dh* zjlBd6?R&&Vd;k%K`&K?|%61`;NW?2&1tXV4&)czyFf|@*JNt z(HcA`@hhxy``(IVvQU(6VVa6zrLg}2F36JS7MR$Dnp-IpDG&v>7Ft+X{ET>3di2H3 zBxCWb|C`HHdaUkpj$Mu)F3W1Apw`H7GU?US$k?Ufw9e_;e{+x-*>iB69ZVcL16jpm zMrw65^C*XTcCmao7mt-Xtf`W4$Ua!}5nUe>(*!XwIuH|c0x>ZZ5EBysF+q2T32sA7 d5E){EwGa~&g_!zZ4Hh6D#01kICTIoe{2SF=X2Spg literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad Ultra.vbprojResolveAssemblyReference.cache b/obj/Debug/Notepad Ultra.vbprojResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..56d1ba31e49d9507b9a2e7300d8c81e04d3ff0f9 GIT binary patch literal 14406 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 + + + +Notepad Ultra + + + + +

+ A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + diff --git a/obj/Debug/Notepad_Ultra.About.resources b/obj/Debug/Notepad_Ultra.About.resources new file mode 100644 index 0000000000000000000000000000000000000000..66324b052bb43fc02f5f4e674665285090ab1340 GIT binary patch literal 3060 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J znW3ezNveT`r81^vrFkWpxv4PQgHubGfR17YVvqwfpz2+U63a95()FA&OL7wnbQDm9 z$#Iy0ahhqGd77bNim5@Oabkd@3lO!xUw@gaeetE1l(0UL^0^*B6x0nSmWHKZ( zlrWSs6fvYSI5FfiR4^Da=mA-YK=Evbbf9=XP&SVtg~5{{7buzzR0je|*t8k}wIY<= z!exUoK^taqFfcfPL+d{ffIYi6x2bOdz{CL2<|r zBFup@Oq~IK?z~)5TtGgrr-w@rkZu5B7LW=g7G06UBxO3sc1)xWpc<;Oc%AN9baSX}0_x9RB-opw!tQYn-g(t9v zCA6-)AiAfH-?zh6r1Kg}z>ohNKV+L46%g{>+yhtq82(&7#oORyn99w#b8Z-$2usLm z;gqxzk%aT#<~rnZ2qp8 zC7|HYz`)2<%=n1iWs&kFhK~I3M+FRZ4#$}H<$hsm;+KuN@$kj+{p~c1UT9bsg^G(>E_(SSX z9p}Fvht8h;@tE7({BghjojX1D`wEJUp@N4$WYy{X`zK$QQg38q%YKIOkgxljg|1UH zG!CmRc5?Nmh^?XF{3J+6M0jH0!bPfOB2yHLG{w3)Ppk;IC}hobN?@l5_feOWkQEu7 zvaG2cFBt+i{~ z4d-qRXZ;Nv=G;IiyRls?uq`e@Fi#8!t&;e47xC;ppmawE2uqI0MY%{;HM;JI1j3gc zwp%)kzA$wcYzD&1g}3AzmbcFCyZn#AM)yw1oNw$8G9NB`yv3fuA86|Gzl;@8J6_&+ ziUVB`Gm$MQL4%f$XaI3Q!dZu6YscXdQx`WeRJ1L|@Le!qcYHIEo|c84eO&0yYl zk`biEGJ&t+9OJj|8)VMUV1Cx%Z{slM8&K@WIra^2;#wiHNb33xfDs@6q=El$wEk1& z`)%>vKqVJ~4}U27w}+*^=HaunKOb9X&;EE^JTLEdIoeUSuGQOX#E9hia0*`zv2_H=9-{c2Ws6kK^r8OHwqq5;BgKN`@j{c zsJ-F8kLN@uMS;G>llMy%-`I0%O0qG7oWs;9)}@9F`x=~#MGi>6NM!igAjWipdrNvl z%z^Y5=?fW(7#G_$=oi>s{JqqbX#?YyJ~`$e%)2~tis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Customise_Colours.resources b/obj/Debug/Notepad_Ultra.Customise_Colours.resources new file mode 100644 index 0000000000000000000000000000000000000000..0f6e2f60e7dfff2e7ee1e4b3cdae004f3b6969ae GIT binary patch literal 998 zcmZWnS#H!o5bcD&NZ|~H5DG}nXn=$yNcqU}6R|~^3IFAGId0sG)k|iaTW|&rzzq=J z2yq0izzLA3wzGinB6n4n>(zU&e|-D(Wkm?_kzYOQLnJdfqu`R46mC~%gcbP$OpwlN zRTl7`d{EBrZ%wB8F5oEXm^|%UO3|Y(;53z5$ye0RT}yVq+}Xixx&7kl-t#S*?(RMO zA1v9Z4Bep5D6aBQ`OVkq!Et`(zpuXgpI>K>#;mx{!^0clgcPkf5-2(mh2q$XiI@u# zOOEq(TXd5=edToNK1BzP7%0QbX?&peG1K%3eThR4CwN!vNME zRh9QW7{Z`?kj``|l82y7mt(ZnMQG4gn)p`&qb`~V9FGxxpb&d-HN5VvCG;?JbzCss zMu1vb-UaCiBg+jv#g{PWCUs)9RftL!5HwNCA6oVW9Hi*Zy9%S*WY=_7G@?v8_w6*< zO4T)ack1a<(c;i8VRt&6K3HFS#}u$H#~C~CE<75Bku6n_x(S>_;B1K{le$ZqBy;~p|0 z!|Ww$MoyU;&*;EYtx4XsR{6kY!?J_ihEcQHk(R7Jv3n{&b|NPOGICH?1Qis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.FindReplace.resources b/obj/Debug/Notepad_Ultra.FindReplace.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Form1.resources b/obj/Debug/Notepad_Ultra.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.LoadTimeWarning.resources b/obj/Debug/Notepad_Ultra.LoadTimeWarning.resources new file mode 100644 index 0000000000000000000000000000000000000000..23c4a9eb134f8d5c62046d3f9fe83797ccd2ed7a GIT binary patch literal 618 zcmZXRO={dg5QW?E&fuJ(z>6dxghTujFJ_USjR^!}PwaI`dKxuubr0RuV=D*9-scJA z014y{K0&UK>haIQmQ?W66!pGW{rC63UmM1l8!dM>CBayqB841Vq(^lM?hq>)QyZeQ zO-1L3$p$~$t9Q#=(WmSrN6b93M0OROV6Kgr`caj}jUSuG@+y(= zrS%J9S|Lv4g6iT%5-4gqlEEhGtwT*8!I7+|(fV@ELSKVmsZHOUW}|@<`5@E)o;oDE z@aU)yk#gb%=*r4Kj-yJ!wXCP6dV6bo>$s;WWNk=8wN@ifYM+GTQ`hJcd#SUWyQd+&oS2uQFv>E9&h}QdCSgC(m0H<5|1PZK)>N2Ew!4%Lyn3(+ sOGFmEVT#%Na#~Qaf|tzBO^TKio-9Up*`N)&)$BD><4{2Q2z*EVAAK3kC;$Ke literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.NPUWindow.resources b/obj/Debug/Notepad_Ultra.NPUWindow.resources new file mode 100644 index 0000000000000000000000000000000000000000..967cf42c17bbaaa1f07df772dc421f21902f41ba GIT binary patch literal 65512 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 RM?|~FJGEWiy6>b?{|8tL1p5F0 literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Open_Passed_File.resources b/obj/Debug/Notepad_Ultra.Open_Passed_File.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Passed_File_Action_Settings.resources b/obj/Debug/Notepad_Ultra.Passed_File_Action_Settings.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Preset_Directory_Manager.resources b/obj/Debug/Notepad_Ultra.Preset_Directory_Manager.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Resources.resources b/obj/Debug/Notepad_Ultra.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..0f8579f7d81a6b3f8e8d4b9222f5f4746ecb3d7c GIT binary patch literal 15232 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 literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Settings.resources b/obj/Debug/Notepad_Ultra.Settings.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Splash_Screen.resources b/obj/Debug/Notepad_Ultra.Splash_Screen.resources new file mode 100644 index 0000000000000000000000000000000000000000..d3c6d82f81b6d2039a9b9a3878453fc9589c4eb9 GIT binary patch literal 964 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J znW3ezNveT`r81^vrFkWpxv4PQgHubGfQ|w=4umtH>RpNw%QN%R^_((GauW-56i|i9 zahQQ|nrWJOnxSEesX?M~Vt}Iy5OMX-WCq&G5D&E5EPx@CA(^3sp_HMBA(g?2A)ldw z!H_`@$Vvo?XEUS&#q)u(c?>BGo(#D_(R83X5O4sy{XYjO zg@zGGhQ%eZB$1s7WH%?sU;H5A5KxAxGr-TCmrIHZ$mjL+a0!BiI15O{x|pq@K#C>Z z(btiIVPik{pF~z5Un0OK#1%-hv$JzCa7ao@Dly3ZXSj3W!Udp5n|SZM0U8qO>Eakt zaqI1ki>1v9B5Vm^1+3u(tYIg(A{Ad>pR;ATqrukaOZIl%|G$Le&U@E@OBU+vPvfK$ z_#30Ej zKX$P(FjyErC}d|~D9AgI+;qL++KeI_hyM-djjrZvA24Km&j+&vLLVq(JiWN>(}#t2 zJs#Rq8TxoMqF+aP-K)}PU}$*E6vchfDq*Jq;}-^v=)G+W4Bwin7Baq&{jd(z5M&+? zvx7~-3}aTH{}tp6e6Jty5k7E}@v{|&0G~u#b^^mU#*RBZz}V8PWtdZ$yzaL9#lIl! Np00i_>zoprxB-JOC};ox literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Status_Bar_Options.resources b/obj/Debug/Notepad_Ultra.Status_Bar_Options.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/Notepad_Ultra.Supported_File_Extensions.resources b/obj/Debug/Notepad_Ultra.Supported_File_Extensions.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..365fc6cfe0a370b52f04a9c321ad642d73e291d4 GIT binary patch literal 20992 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 + + + \ No newline at end of file

Cl#3KIj`d%d>v@0%%>qUFr+lX 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 $GVrJo4Ig)P-q)GC{ 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]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 Au>b%7 literal 0 HcmV?d00001 diff --git a/bin/Debug/bin/Debug/dependencies/file/bin/regex2.dll b/bin/Debug/bin/Debug/dependencies/file/bin/regex2.dll new file mode 100644 index 0000000000000000000000000000000000000000..f84a847a0de92fc59fa2ff8494ff700e62b87326 GIT binary patch literal 79360 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 H^RE6M0V&V& literal 0 HcmV?d00001 diff --git a/bin/Debug/dependencies/dimg/imageres_112.ico b/bin/Debug/dependencies/dimg/imageres_112.ico new file mode 100644 index 0000000000000000000000000000000000000000..cc0445ea9dd5f018b9228674566f75ea8acc1c26 GIT binary patch literal 54506 zcmeIb2|QKn_dmYRF{dI8G?EIp3C#mJO`;T)Qc*NdiWHf0jv-S*=FBCfB$@|fg9Zu> zBnladkSQ}~|DUzb*_=dI>3%++|Mz##>pu5sJHvk7YprKm>%E?hVHAuXgBJypz}`>B zFnjcG8jW==vk1esO~EiZIo5T=1PpUFz%UsZ*7cqd7&grt!z3iw?+as?e>8@PiLtI7 z1u$$;5{3;K!n(f0i(x6xFiaSI4(_*y8^dfeFw99~)v^KoM)X6s9-ykSWDUFvg&%z$ z(=m$Jg>HeVE?KB)8d!Nu+kHo}*(cw1A2MGn9*eZ+RrsK2YbRSFDIi??<(|#fgQfQ? zPTVlhu77-OtG34k_ZZqozRHL8Lt6{7`5zj-R8*TR>$Cdu;-Zr`lLqxqwG~~#5F5UA z|KcJ>Nm~CS)88hn|N8LaT5oCfEldU9OPH>EK9_Hreelz&w zR&@yp2|ZJOZed}K?c7v;{s?(01-&C?jZvxlTxb}DGE-TC!C;ISCrqQ!P7dOikO+PJ zpZoY@dqwNX*=CjL&F^Mgxu&I=N4q5B*UnAe{>6x4eO2?!n=AR(=LmCorkLGc$u%lY zJG$J<`q}HP@${AuJJtF%3(u;q5&r8LuX=s-m=k|}8aFKUm>i}cKU?aEpHJ1w)$$>E zvSP;q)Y?X=1-~A_aKIXLM@-VyUd#~jN^C6)=gZK4p?9$Pq1gTx*~jlzPhRkf$5lA@ zaisq%Avau0MKJs<%^*R-9W!zS%DFa&B-%sR{uP` z|Co&9zQ{-}zkF2j%0XT}URs;)xQIdi74-Z}}lAb2;&3UPB z@FHr>hD&qHa;9?$7?vG-C1^N~@=!-5mP=>}u7r-1<7zSIn?GpOrqtq{J&mtYG zdk*ostLF$!&z^EqalA_6k+IgU30w~?v>dkxtd4VVU6qn0r_4_=N;05g*bzpWlz-F* zzx-C!8QRlhE+!5hd+sUC^8Ab;bzHoX1;->+8pFh9MM@_bJE;%->qtDKzr0n0hQtX` zVfUfIB8+WYjc+Aw;5xiQ{NbZ-9^nUSKdSMj%+3C^Z|xf^WAmvalFJ_PY*b+^-*zuy zrroK23fE*}F0PcYll=G>B_fHEAW%J}VvD7?iEKiCRFvTGa}T)o;a(r8LDIsF<7TR# zVweqUmyc-1?hlsx=I1^%@06l{=(okzjoeAM^LYKL<(pG9L$~MKe?vll!CLbQ z#mhU~C8@cKhQ?D?sDyfJxMP1Qtd@!N;U04AjvaNXz`|qFyfrlbrCVq4ht8EA`V|Wr zFhe_5{7C77qzc>SZf+gFDTT{-l$qRWv16GjQgW7}lhB`GO( z{XNEtYV?bf#uVq#c5}JNKc9N6e^i;G%BFoUN34BDvkDhpJ<(}ZwvWV&lNZNXADKK= z@TKP33)%PPjkFQfSn4u_a_#}ekP$sDMbHw9m2GD{qD&jB@sv?IXpRFn@9^VqLu6Ll za}69{a74w?MJ7RcdK7($^}IwUr9>RjNQva7cHx%S}u;~ z$7tsiMJWl^7n957ZkldR)CnJWQF68F%=QZwgD%O8rO?Jw{H67zgNmPo1q(g(5!R&7 zw@<%VF<$1_>WHzFBQM`!^F%ZJw>)@Wd$K)_CL}e@y^ecY|E&wp3XPV@Q#bwe~!}-tfzX`xFMin;ybCQ_cb<1&^rcau;P{v7O^#w^A zh4G=ICU0CXCh&9%;1q%4)*L;@RbDVROicGvz9 z*C#okF>Qk8=Exm|xpvbc4s*S$qw=aJIdP9#L@BSlt9AxS#gwuRXewBsIsJvL0cgZQ-WIoH@K8MNlnTZJPAR7;tczie>7J-Lx5O1EHd*KzN#3*nY4%}=;KP(S+2 z+yy63dyl(VN8KgquKUG%eD0HJcRqhK25+RJKB%$|}kKtI|>-nA?| z;H7__ugL0JoVA_y~l+mrRI-j9zG-NrJOeBR*I*< za^3M%%8vVK8}&Z--}Kr-KK=;p&}hoc@iPA05vmK9%IKAiyJ)*qin}%aT^xg3X|LhRx6}OH@D8$ot6ms^*}NjMR2)XfPvOXuHL=!b?w2j@)-(tEz+x ze2dR=WVY4F{-a*6;PW!0B#DTKdD<>L#h4&YvniL~dPx*}dRyde3g2egQP!AI7?*w` zS4H5H;z9?xyG>)myb&9?e1==4mYP#84S)B(t=|=j5E_*=2aPJ#!EUVzLux4VR{yI?mXaA7QXKX*L;FJIAB`U1zvy^HUk6pAI zQM9{$!<(=XDO8;Td5UJ)lh4m~=TUC0;+p?i&a7;JU)+piTWI>>ljYqRxp5JwALmEj z2-@Vbn3AG!#8zOM*K6x_EoF)hPq;N!I|{^C&eXFQS`@1lW0C&iQ61GQka0hxp%M-I?LnpuVz}DS;bZdmHL}mJJ zex6YxHp&rk*vgQFRf6aX4??wXD5MDLCkQ;ABPH9)|2*Z~Bvnt^rIo`(RJ`vU7u&U0 z^z2!;;Tof;lwupbiBaX#QUqr_K0ivt_ENv|(bpb)T$OlMG-+q;%NY_SR2i<%@hUP5 zXBu|=VX=Td*L+d=S$Ch@7jZs#cT=#B_uJ&UOLn0vuD!?%aUPM`0Bdyd3U>WF9ahVR4I)>J<@)_2kMLsxLD9i z)QFan5h8L@ys82-KPZgOJ^yV%>I=2vDjTCjj9XR@Lk1=2nx&gNz?=J#^Npce6TS_w zJ)f_=m~u&!_G0FS7S(vcEwq>X+y(s?Pd;Grf^uZm(0Wbvq+6xye6r<-$Q_lv5$+OI zuARS3-ng00)`)&G(|A4uHCzvwsUAOmPOh#tSIvAmDUr%C8kZaHZP^fJ zE#8)_TTm3z^r)@KP06Y)H=mitOh0zTYP>MNgy4*;x0lj3?v}FFJf78@R~BKge3dfq zf%CJ=(z1Or1}~tG_h+7)yjomzB7f+l&)aPI zS5M-3_}U;xt*p+I|7_C3MUn!Rb=vtO%tZLP_3YAG=Fb?KU)m7%{N(XMiYawLQ~iXn z4+o2qtj*nN64>q?H<*Dk(mwa>M{zB)SD>xRx6;U86#L=veJ(ypk)}_j9_T|;`rTrh zQ=$Y@*KQY*6Bl-uu;yFl#Z9HmvDRx}=U{asOV>+2Q`LZ5L}m6Q*(%*-H*yb*QZUs^ z$V9>@n4LJ+2(_5zG%8E?ozOa+`01g_YE+$xYvTt#wKa)7xtLGLMA7=Cq%{ruOJiVr z@ona&eHlT6V(f?VOtdU;9b!ISE^i()$u?{;)f!WidET-j+BksvI8U>g@!WIL==~!{ zw|#2VeLOpO)5r$Rev47l&n!MAU7chrHqjnxzp{MSEno6Mz8B%X)@AbnIl3Zv+(K_Daz{xiSYP)IabXB98M|l+BxXXaX^I+ z^9vA*pD^rH(wXKg)AFWvp{AA8kNc9w=xnFo_1o9}+Iy6LOhDb6gt>ftMVIN;LFUTJ zUaCUUs}2-ikjeGT?<)^G)56(P*FgxaM{GmK<3X z9g)kiqvl)@o%DXHz`#Tl$#hzS0NA7{?w>L!%-RyKK^^`DT>H_6oI23X+VojYBK5=J&ay2phVw3%j z_WJF6GdCU0Um%&H$@ERrFKQH5^o|v;(XOsMSRg2POuZnXwW`q`iQZ9TOwO52xI)RZ zdy;PxJVOd*7%DOG=T~QYA4;4;k$Koyw@gs*z^J*FPbY~)%%$*W<*zHBrcK{;;R;%7 zC`{{LX=k8t(|+)US@KFRRgzmTPNCH*QtBR>s3%>EiHTv1a}Y|u{aE{nTb|Z2_(4>mu|e&QK@xk#OvJ`pR3T{dhcAN|_C&_rg^g9lXCQBDu6FL}~V3h1e1 zg)F;uI$*~&^%i5H`j!PXoR&pBs zplg`Yd|PSVjZfN^aJjuVpNq)|NSxxz*b@~kO}Xf(T3}$+R$61>mUkOZJ^Fsj#fOV# zj>nu|`5b63GU6S`yZ(z*(5_OK0m)$r`HI)}D3l(qEVR4%Bu|x=DnJXpqtx%gT)72V zk90pN2&g0@kt{GyJ=L7pT;t}JZ}F{^DVu+2*-n+v$77S+FDIT=6YrNj*k+ZsWtujZ z>g5ARs>=?($76A$d4n32np5s=)!*kAcC@N}rGT=dN`X)F`bgup;IL(r1`mAWf~DMI z`Uly(xiqZxg(`Jh_+E9n*>kL_UamDQdu}58^|rNnf4_uvzDi8-T}%lnYp3<)O^S`{ zZMpX;WAZXt`Q!C+#+guhkF zSsz^e`YW}6cKd}<*oavNCQqJRur}o0&M`?fW7Wf5RcZa-wLCE{T&XzR{4MkFtia8b z7dmf|dBlI6kZ^m;%;UMyAro%KnOt33d)w1_AJem7=bftj=Cq^ERbGytnwr`&c&pAz zaTkneO-){^O}C9Z#oZE>D$UsAs$03GFxJ4NKT=DCH}me1;W4>EjA?sJcpG)w=H9w} z)Udi>tp34+yMh+p^FDBzUu^%Z8ry{j7W;jYuMp@z>|S=rw#({g2zkjq!`r-SqL7VfW z$n5V7&nP747 zL7iFRT&va$*J}?fHC)j+eX_R@$O@%2>%-849sLR9MH805V z7CcCNw!%_9Fh}h}nY66fyB1N~g$DQl(>u?_4pD_K-!7MZFw~&mRpu=x{(fncUG>!3 zsW;CRabU%a&)B5{?G~pD49w5&(~zpD zJ!4upHevACErqQiN;y)0B~J3wYp*;w_dt2NPg~@dOxtySS&kN%rdHqzS>uW=?)4Y0 zsDz2qLb!}g4!y^pm27TmS*EZ3rv2{as0-Ii#Wl<@kMihNg&g(M|y2e~RYeN&JOT@y}b^U&T3&NI7HF{=&EI{G@BiOv)}7 z2}-deG1@%K$`^^glsDmu*twMs{hG73wA|5+Zma!^c2~&fe!c9pgR)sI0Uxufsy90f z8i!3)Of9j0JHFiD%iEn+&l)vlL;dD{yL#*8{g2DGJjqe!s~bGPvOVm;aj!xJn{z>r z*D^e6%MUh;Jrca0IqEcCC_nG3lAIB@M5tW3dNp@oV|(&QGnMh~`xaJHr!8t*yCv~( zrq_ddEwfS2-i=-xIM8yol$}>?`Dc&J`rBtxPAwdIXS*GL=;ZR~DW$^#tdx^Y?avL# zP;Ac~{N{k*C+&GxbHzjI_=;1_X0F%W+PrQzwkj~^k!Q42mGBO?)}?djUE6@~yMu2W zF~sfVd*1Oo{Pr4e6rq39y%}BjGO|f=@tXG50e1|8Ff%di)HPFNd|3TZ^;2$C zA@OmGFsj#xg)biX?rC2uuryw*JV9g3;8mjrPBZaNiqcxSwJ5DIhbLLvcT)8y(T1|m zQ7+B(o-R&Ru(u=S-Jw`b8~sm<*r=kO7hT1(V@u}J z%2V=lcbu7+xN8LWZK)IWvTK_K>n7S`=>ihb^}cyt2iuM7ymzjd7(Mvdbr#s&J^w)yN&~cQtpdJB0Dd(k#q)A@0zQdJnzzo|o@{s8{%E;(n8P&pteX21>1b+O;N{mAiA_K0 z%7;my6}!0*Z}a5Wr~2(}P+F8P=pK71A+u`5oe6D{8)IvwpJ;sB8ldyy<3&E2Q}~pX zCo5B(+gsZWqx7#?`U&2-knhw#QLNneLYwAQqs_QT6n!b$t4Gi@l&8LRGT;+#J&{Wv zeS1)=Xg}38J1;-Da&UThVea5#i$tGZYV$g$d-n=mvEUHD`z!v&hN&e>A2Szybybai zwO!bR+sJ0|g*`SQi;gsUuJI2r7xvDdJkD)GrnW_lYeDU-BL0VsV-=*ZLEJmXIM(|{ zT{}Jg$kq6-n;73V-*54GXOFk1%mbV8(5EfXxwAb#<^s(gxsA@%OK+&sx!pX=C2Gaj z@Z#56eB;yli9Dz=d=l7iThl;BG`ECgbp6|*kFo+=CasR5i)hM9SWQV?ySot$SJ`*! z6jO$^yOpMidOMIwIAKd6$*&;e!*|+jXDvMFCZy5#nDFE8BcQ1hpmB+RW=!K)_y7IsC(TbYoKjT4p)Y@C1Xc@*aGKu%!PNDVg1z= zu?Mo})V$p{wmehU>yDz!q$tVl4yEP@RS8JgmuZdk zs+WE~X?5D!tLN5TiLaIYFmDj=j@93`{AE04Ua*wW&6Yx)6fNdL6NMYrm#h6SHQmC{ zsKhfFd)mv^t`6dpZl^ll5BKdiN%48MF4w?;=kM0%*(-+X_Cpuch0p`M{Wd1&Vj(86cHyca zhG%HQlHGEQOAZ)0PvZ@}FDVj1^*_01fpUM{&x4WkL&i|E>D4xR{Lzd?>KhTS>6BIF z7YioYX!=&(o4CMTF>m+g67k5VyBb`*T}*4&@jOjBOqIKf7v^r=M1Nq~@4(v+{WTA? z?zO01I@YalS!L`2eIvVsi6s=d6MPz!_Sr?tGd$j7Xo?1Dj`djTqeg!GU)FY?y zH|3h+76t9Mm|Y(Ij=NM#+td0}!zx`}g|12e|HRi1ia-sYhUt@ix zqcnUnMelEz#uu}{|D9c{6?5KC)yp6CaMJEM=e65wZ`Swc+8>%m@zcRSu4P={mN@(L zQAoK^VX0Y!qtn%32fu{RAyfJnwB!AnMpBj*58^x1B>72-;WqiI-I{X4l2Pct6%`}& zk22^AFAlYwy<7Rs^hRz>!hp+FOSV34o2qBz^07kdNzS~OAW6oTdrbK@DeTqlO*iVb zZibojw_7gR6twYdo{3aa=G+aNHz!XI4&hdi8NI`Q4^>N6?uPW9$|nI|t_f{PtF8#p zDI1`6n~}d~`i-OYsc8qP(*+)E&HjR=<4Ofb3Xk~gTr^aVCs9DcT5>ym^Ey}gBXKY5 z8fHp!4femX-hwx_e#?eEMHyQiJQ>_iM=hUl?rc{363;U)Rir7`3yz)WzrXzII==O9 zt>2~}irXE$baTSuV3BR%+1D11qzXyd%7J z+}q07Yv){XWaoPGP}8NQqq!#*q@Et`Hb#D!v~{xTZP$SQ*|T#e)Huf?=o1(^HRe9M zuAuG6LyPDgZmVw=Yu>fCTdOfm^QA{*nz#H)-cYA){Gt3VGa2i-iiNa!jF8h?lQ+&N zOLxfC(~T+*J-5<~X48E6WVr5qQyHc>$>P-Pkx5yP=e8A>B_=Di6;@%Gr)O+U^uakU zjfn;^S|uk{cZ*yKEtu7$ilxb0Ib|g}wqc>E6sb)UqM1JdvS9~RWaT6F~SDfyMTuxl~ zX!5cFTt|k+#fE7-((RYNLe6&cw^0|=6Yc43C9nNjZ{Au{nE7@UQK~|$`iC%Q>n5cH zN5;f`j`#BqT%VG7Y!{boywyO1_`wJGo>z={lAs&#xOfS@RnKJKs3QMJH~-1~RCN|S zj6r>rw$*y&^56@)OLdo)@U1z`Ji=2RzryEk=w%JF3}^A}yZPo=+_POJJuh$etow2^ zpJa?uzuofDE#b5&uC2BCgm-vjVTl$#9Fx1-DpC=QAHb5rPiS#rX~Fpq>Jm4ttT#@6 zFg0#>`i!YTE59na9v$paT(!NarD{55j+MpG8_bKm@$m||CVC=jy6Z;RUpMg#Gb-Cq z)xc}(_5nql`uhSG;K}LRlBcsYm+-1xU)q%FDP4`qxmQmtqNi?-ySI!RGkg}Fm^q1F z6l5G%lQwVt)PM)A`STstza6({7DIXI)RpHSY^P#dhnnlPpLtn1v9kS4zsD&DcmqV| znB1DP$#Zhf)KRI= zex~ZnTX2a%sJea{JH2O>8*f!1i+DXY% zHt)%PlD%Y!NYP;0{;wi2pX{m?uRj``WY|)%G0=+nr0JdPn3dnI$KO3(cOn0NCCl}v3aO(07*?^W0adWz{(?(OdedKIf|HrX00tv7Vo_7PGxJpP00vg50yo=?Tk zpAoXp6Q5G1IKrv1f4fnd*q!CWS{iD?u3J&!YSNd|1;QWbQZaY6w!K46>bGxxJpIPX z4fOcu5{hm6Cf*jXA0BJv*A#f9@Kl7FPb2feDZh=YZ}_%iuk-Sv?g*__Xd90eHSStt zwOJZX{?5`gJDUlwa_tqC(wS#z$$Z>9zYdkS_zhb-QQ=iTgVJ%UONJ|?ZghTnO|mvZ zAhTugj()|CFRf#1a}%d}9~Vs-+)rrcpmSda7%IA~w$9H*GvLCNZDlzcmlG#%FH4o# z?os~s(Eh}s8x)TxB{}*`9OvQ_i+f$RU4#!f=k6C066_Z;mi97B>F^qLEq(W`?K`)n zbKMEzs}_9s{@A+A(^^b}dvdq3;>V9^8Mfs})z~)^7V*yIcK={?_n6N45R0L(CXg}D zP1oBic$HbZ|HZyR^?B#36HbrHwHxh)+tX{tw0--C`&%gQs@}2bVs@~@z;prHlFJcG zA8p;ak^beJ@&LR1a|La>@-phpkyN+C*qh2Yk0_v?bU(6a%98fthkRovruk6C zFy1q55Ak|59Z~hv+U7pZPFb53GHFX$%hkIB9_lVpH7s6d=@-e%ploFJYdaEbk8QkG zdBw!@%dK58OrNP1bEQuztWbF^*KamYJ`j zTxs@?Fo$*_dzC%6b1%kz`DAO`oZ?FrlTcRr z*rmZ|FhpF;zEZVIP5d#C)4_A2{w&w7p z;lYC$1D7Txrd9|K7+!OL_F7c`MEl`Q zbgBB}5wx)5Cw6b)tJ2TCz$b(DfZOxTUE&nwNT3+AVM7LE-X_-x#~G19p;%2JPoOJ+T2_+)lDWPWC>-eeQE(-H?Y z&5zUE+;~g(Yi)gbFHCYOo#&%0WxU=?#`A;mSF-Q7aAErkAH+rv&za*DaDJU!o0iv? zjqR82t5XecGIJUiZ5*4WoBuYg!T$U)5fqa+>5mEC?#cIvDR^f2#F&od75talVGSiPZi-X}1PXCtn2ST&DJL4tC#&>`9hnRgOnp*DS|?yO?%OUhOw_8!T6AFv_u9$MGx zOi8#BrTS(yW1&TT?byJ9*#OV{Jf2Kv&g4?kevA~G+D zFFm2urj8^pmN2LM=yDBHXM;-p_7CnUlP2md7k3?~yt*bfB8jgCtvf?E(D$FYEB-l~ zUV6K}hWpF8eLUZG78lH=6hCYGe1myuT%wP>=IqAM4J|Da2P$L3$2m>3oQnG5B6Tx9 zy>{=VuJif19)0;TF?hf-Yd#ypA*K>fJ)19VpufJQ>w4hf*@dIdZ@wFrv~PcYlz^Bp zqI#%OZno0U`e5Pdi&=@qFU%9YmX6Nd?@Z;z)CCySO*&VmPJPuf*r!27n)+?Ify_Yk zC27pzQGUi{`sg!9t730buuIh|O;=%|6PWrX4{tDOtICzymhQM->vO5)ELGR}33ov# zhYo5(Av9Y#mSi_ zr+2DFzVbWM_^`#Z%H_(zl@pEjj4l|C8vJd&`2Nil{h(FD7Fh*MS1Q=nKH%KhmchEo z<8iYsQlYLQa@(qXF_+Mm$fXMLPSf>h36r!KV}|L79p}1G5p^;vM6zg4 z`|u}2#c`{@&f|Gu%kIVrTzX&`TbVh$exAgZ(JCHEv}Z}F^Ql+E)AM<&=eJHkql1Uq z)N-YMu^5Gm#`SW!X9%CjBy&|n8SzOl6k@bvSuNq*;UoR(-Ik`TW74MNg^g9@UCx^) zf?+Y?vI>;ya*D#+NjJu{y!2jsS;KJ7=iNt<|tg%l7Uln2A_|+AR-7DHVK8 zi`!oXW+g_X9^;FdDO#YoV}jOS39dto2HP|u`j~#1(A(@+q6S<~g32~6*ID)Ky;epG zpQ&r!R4iFA2kc`Tnvo`X#Q?8L5Jg z#3<$Ba{XfN;#ZI7Q)0#{m}E%X>e#-eqW47ynNfu%Ow@@=ESpS`Hsz;KHdpV7kC@gn zdP%*9E>FMt`lf1DxDwSjKqSX6hf<)Et9*O-BhR7Qj$ZBC z8t0lc^IdZkYczE8ziRU}tgbd>vp_*~(xJ__xu5MWySX=CcLg?TkD5(o`|_Jr+#+)P za!Zu8wg`?oRwCPf$cHN{2hw`dd{Z&t-u@R0Zuv z@7;}$szf7+({wg?|N_AG2zy$QGv~=xEw}gt73;Cs+@lE3w>xTlENex!UCoAJu zJQb8F*ws#HERW|J&h6z&!+2xjkE%9`8s1TsnBrezZqV!;P2;B=mlS63=;wb>5A_u- z{UY96v1HNI)cU;RdF>MdW%X} ztDqe32K9009mhr%I=D-O&OmW*?%3L|rE%Ey{i-4{TQrLcTLQd-!sx?gv`&f%)0Rpw z`s=lRwW7uai0ZBUc9;uoG^MZKY1`(ItD-w_gqMMODo$~enr5y<=%1)>rxsaP%V-SC+Ud*J# zTaT~Awa#MX4>zN(JTk9snd1=p=wtiEy%y+|M$}KapTbKoQ#YU*4rW+nCq#!=O-BS? zNtt_<6A*isdx)(t^|wj9xX|clb>{EPOiv-E8m78*)sicV^lT7S8l$1YKm|C@|Gxf} zz<){tPVZZ`qk931{{N|$^G96xL;;?D;vplDqN`ipMD|SatL=7V0U5R zAA|r4q0%1}0aSQUK})CqdoP4p4{$?qLgge2KP0#SX3+irN!*~xlZAMQOCbw8vVRNLveG(-CR%Nu24?8;3rR> zz)!lIz+Fx_<0noy;U}D(aA#*n+}X(icXD*V9Ubj)M+bY{!TvZZcDVg^sgHDEL<&=>iBXv}Z^!LtaLL-?!Qi*VcxVFekGHURif{S5yp zcf7T=uhHf}!M~-+TF%;33{6I1czd*)r&A1JDq%{(z7I=HJ#gr=f00tP-+}+f@z2M{8*ghv<6l!Ft2Cne zyVCQRz$u@K3xWW zM%cQs0T}Pe^#I`aMc3YiZTR*lEdB4|nE!lzeF*&n{+`N@w()bD=*|{E|FBl>6W}gi z4&uQ7GaG<$F&N2d2Z6r=@4)|}8u#<{{agH`Tz*9kU1b3HVZYD?LZ2=He{XC6@P`2Y zr=b5%{CfevAK-68x^Mbr`-gFYt~Cv}(wc$WZe57G8EfOgF6MYdkUM@U)EkdFA3zjx z{R4ZZJ^}9XZObLAP@+tTV z9R*xnZvn2VGY8*!WCgB&Y%PA`A@HNMFX$hweRrpR#R0$n>C-Iy%?LYZ`9T)l%V9RczW%TZZfL8G2c18TKTnCq z%QCLvjrmXTrlJ>k;;qOI{IGZK6W}gi4rSy2I~xFboMq$R)fK;gC;nd@|6yF%p}!ix zb;ApPeE%$tf6c`4n)f(fn~&qw?}+QfYaztC8T1eSgDw#Iba@8h?~M(>`sW<_><+;G zv~%wR`VR>3$Jb24*ma*{U;n+jQ?E${IJIcUs|64clk1bzZW(DYvcf;Z;RjjtT?PbxpnE^5q%%(qSUf*imiSwBRwOY7mPXFQf3=YI4>6WL0q*i;z~37ifc3$Za#H`Sd4FG8HLjn5 z@P~#X{O!p0Q49o?ZzZW6_+cFU^57W$F?_)feSw@4el{O)+5p%;#F@H4=+h z-X|L2-^1?vFz@eAuOaZCIrBY!kiplCKtcv2b{G>o#sv1<0P|wUoXD{@{PLv?FDv~_ zlu}feeunZ1uP86aA=cI>z+Jvf;{Q7v0Q@l(fS)z*??<`^{0ET!&zw2)o&HHXC`Nq% z@K-!@A?5@U|KHjE`Sa&-7Z;aq%PACV>jI%qmn43uK?a=T0O#Ha)`-^tKN|P;zNjLw zv+&p9XV0Ex;YaIpSfi8po9n(1eILdI(0_AXS*H!K=Yx(uz@7)dj{x|;eEEWxm6hS2 zk?u=MO7NnhBK*~>S2*%Dpb+ zx+VhrVF>>Xz>joKjC;`c(b#_=1K|$~W9uLAvt_^@3&9ph`zP`D#{R3TtMRX2zvAVn z&%b;34*3}Ts!*Kik75TocEu0ZoHju2ji6uLti%cI(Dwm5l!FNWxpU`mCXD|C_8)Bk z<^UM~VNC4Me-C3IssFmVI=rf?3V;9pJ?yWmP>kh|WA6z+ITmv6jX);1JMfdbNBCcU zBk&XR-%s#2p}tS*pO8Tp{9Wz8wzd|}&(Ft$0t2d0eBmF#-V=UK8zA>a;Ryd7gr6Aq z(VFi7TlWU9zTx5F;e`Ez47x9E=P?$_6G5!@4*@z#>YQ&A-HsL0y9DUb}o8`3N=I>i@OH_`1Xv3}Y+HiV)8_vjY$8At{ zuH8rGADzzu)33Y$S5NpkZ6E@DF18BC^}+Vhnun$PI^6IT3%k*q2K+F>4)_V|*-f}9 z;Lj!Tw|3xXApF*V|KtBQeqtP8+du?b`^E!)==U#caRavP8?to|_zB&2;BUrFbDD8; zgx`YDeJgH-^iN0nC-K`N-TyD^AMlela1r58sK(j42mIe~!`D#iaYFZ*o%oM}?z2Jn zB!19+Cw^kEK=6mS#p~WpkzyEIB1N>;r@34J@ zpBVShxDWl_jNSJ;b>E5Krl1YCEnxNi|3&;DkLw6KjQ7sD4XpW|J?_D{Z;0l6R=;QA zXX&1eANoFEN98-)&uhiMvwegg`o6<|S^t;1=pXFi2Eu-$f{B~IsUzmQ&h<{`xJUGR znDb%WXWKq8?!9Yb=^oAdfd3e~@6$Q(leQ0i|9=TT$O5oOl(yjpXpP6(=djj$2ibEz z=>8D0eIqpP9Y**`>?Uu~xQDQtvhfqTXXCd**a3gXxX01=9gF_E<6k7g408a~*AVv8 zADfY16Ztn_kB`a$SnCqDkJfr@+b8iKA@IX`53PB!S@_KmeqzptaUbxbv5%#D4*Y1{ z1GW!+|9=7hWi-ZvZ|ivWHv&6}pIGY=`yAGK#}MH^g!FHO^#7gi0Xr&$?$MeL@Dte4 zy2pydpWlkxpfw-M_St+3_6S`_nyqVhn#y>-aVOfkA5G{{TPS}oc-`iFO)aq2KjScbIRemyB`96 zPiyO+%cW=Mi^Ev~oVMDl+-b!7P9*cdAO{ScjnI)7-%~#PpUi~^IdJ5A|FW%;IV_O7 zMCt(ShRo;QmR!op=X+L8VV8A?6&>A%%$#{8`s^r3()?)kcl(_gb&R!=p~(>B;9&-r{wA`9>43;bM4ZeH z`9n?uYJa!6m`&a1-C5b}M0tmvc-D((9It$h@(v47zTsPxcbJPmPmE%Nall({eT=#LH5ue$b2~R92nrl1BVTGd<35n$(`i+LQQfU$sEX3#v1%* z1;*jNy?@&hZu6-P(b;PJI)?o$+5Pqtn|CQAtGO> z5BV~j?I&|0NF6{v2;{@C#vRB90A4K0g&}i+(AtsAgMmCC;Qn*wKy|epm@~S|`+@y* zZ`R7)eTHm5X-CkPNgZ(JbFg?mEN)+Sxjc}^1NnTM?I-63(uT({U0 zY?R;5*WqkG{F_q;@b6oQuLHR#EKWKr7vcL{lujK$Ux4;El;?bBLtWbsITw(3^X^@C zpL0&Swx6>fKt2JPPobX%vPT>f#H|7Td}l62XZu@F9u3&gx8jtawjc5)@;-cE<&1du zEoTJU-<2Cl>HyyB%m*O(;6KZSVCOtQ9t5&=&H}d6nfFitb9fcn$AN#lPcLYD*Y=Y- z0M6IFs!l#TaQT7L2zd--E(6#S^atqEWDWz&4@CX~nx|o{!OC6mC)Ta7_WqN33*EJ! z><1T7`{SVfBsYzNlS%UMj{+B!&BwAJc!+HT2e*TVhd5Y$67b)AxhHNl=m5BOoqTc@ zrq z4l|LvK(wEgxA9MNmw}H8HUu^g{7jJhWyDQ2%=nR$YQ*MZL;G2|H*6kmZYTeq7v}`UhkwcKp;?bIOaEO6JOSB)jv+VZ&)7(*z zIq?6Xui9tVck%;CULXe_mc<8!+@J4xu$&y&&T*%c|M)jUNT1&B;C8-3+)jemS;gjc zviO|PZ%IBYY4;sG-tTyftptac_)PznPM>PZ06jWoVW_<+1l;9e@I%>2yC9Z4Obsf8IXV)!VYFYL*Y7X%|#91Ti zrXK1x_TSOsfcPA8>JT*wZV|Ol6{|)#i0dvjoqdhog!d`zn%-m0!be9HeEz33dJg1>^=MskR{ zzN(s{9T9%!?QZb=X3x^g@Y>uoHpRv^opB@;*cSn+z5~x zl>hZIO|PDz0C76<*#M*rfkOl5qr-XV5PygGDV&Sc!JQ$V1MzFT z8HlyBxjwz(CZYBdua3AhibsL1&>q5rUI5{rRM&O4WNUiMDFY?p-u+O>YjKlW!-_SnjGrg4? z`8hK7%^ACg_QCb3g4T}sH^dP*xgSIf3B@Hl&!PX3^FhjvJX`vAxE^F&mD3J^9|0u@ z#aM~>Jo`Bz$QO=c!##5&pskLZ5vN0M9`0qVg@=1s;?ZY4@T=#2iCFyaa5>1>b$50M zF)(T$!!TlXY7FAy=VC~;i;A@e=LaK()O+9x3~yh& z=j>MSmG>k=;13YChvY|a2iUQ9;_TfP_SvhzA7FD&$eP9H_@1)??facrI~k7vJA}T% zDMOMU0K6pN20-itxB;K<9U$WB-%3(AVscGCji>)^ES+c{k`t+C&hZe=^91e%8Gq(H z$Me(mEkqlE1JH418z*l8#hy9s@ONY7&^}UzoO*_NnK*Bfty|zGaGo;>Fs)#0E(9p=M6z@mC!Bwj4g#LkiV4G+Vt@KPG0qq&{2Ti0 zZ4^JXf7ie|8wBDoMC_Dx77ls#9dQ;05p##w5$nt^IP>XG$9&22iy&49a=V1$qsEBK zz&f*r#VH|VhvJLI=)4jWj@Tj@*JZ_|A+E?elZLdNKT$*b$QYtmeiJMH$(}D*{Q{jQ zL!6_-(k+}JM940eb#@Y*A7jlCbNku4{F+hD1uco8TZ8(ZYp&Ie!a9i|u#M8pL zk}xiG)+`g%6tpH`q819FJsZ^G=!{vSM(YxyM(4{CHG1!l)M(x!ey67ztpnhFCB*lD znvTX4R14u~z9niDvnOgaXAm_S^N1SFX++Ixrw}X-x?UsnM6jZ#8e&WmsL)XP|8tzl zsQ?#7aigmUhA=9>oQsRT^V=^J*N{VTp(=JU}^&lnyu@#74bp0L9 zxCK0O+{FbwZ@eRBf#MYoobd`)ZnL#D9ezg?6?l$xkGZwTj~+t$)#2XV1!in573rvk3MtwrK^eOFMmOt}_5v5&uBG zT(~c^0iFZh_5NNz@!NOx*F&x$+`qTJdhm&oGJrO~bNCEieC5E;^2`4!{@(iHNxw0~ zfZ+ZRC-6n*){$`^@a_2e_z-?=PJamLmm_m4p$0!Yi63kd^!s-&@H3EpVThAKA@V+n zyhB#b8{{0qGef%S8LpqFKf#sMrs8V4^Kl*h<+z>09zy=T%_}7RS&)kjG64C*b1=bg z&hkt5lrzZkuay+$;E@+y@q{~Gc{vCFBAAIzjG64BQ?gZf%C;ZMR z=g4`gL%R{#3YsZ}XDCpTQ{u$UBNcdnVFv%K7{wc-9HziNO6? zvf#+`V*5)8-ygbvZ}W=a{@|}5WdODh&mkgZ|6R@v@;O4j5ZwRkbJy?igO8CjzXs;4 z-sm6hPs#v%pAho_zbE*N$(*0CFplTnpf*6h52sHN{PE=d;kh>OESJ;hSuVZ3KlnsQ z89?3$?DJWEO~fJQ$QdF1hOG^i-}wx|=MK*k0sL86naDSHx(dx%z48}w`nSM02(sw( z3$mVn(CHUs=C2fq#YMc}+^ z(%%LCq@VqEZ{7p{48%cV%9*%T);G4lx0X1Aob($JKCPT4)_L2+dAonk7YH2kh|+f4 z^mQ%at0(=r9eyFej$}{zgb05X@i+HOBnx{{O!B|BeI*|A7$lWANd4n*v5@Qoy)?;oFBI-h>Fl zJr&}99RCA9g%~O@G5xNe0{z@SwkL-(_fYvq`V`t%>yg~aKW%Zahljl@_z=48-(el* z=5~_cCIEke^cy&$b5~eAM_b&^&W7OTvH62PG!OQtz;^=P9kD-0=W4T z{ky{U3H5s z@pp~rImZ2rjTT~GWp*b|T#Ko_uQ1YQlSk-Ixj2)J+K1Z!?sd&54oWB&vD53~-0xI6Fz z;A{lQ4Trr?9jZCGAnc=iQ4&w%x8-*&u-{VY$oPg5;C z$CJds;=#c0_q3-Y_Ym;guzz9k9%_gf7AL0#_Dsfj!?U|!?G8DEux}vuOt5G9)x2IH{+YhVKu1BGXD!1Fi`p%@UvWQn$;eFwy1S?k_56#s9B=Suva zj&U+k2%rrW$c(BkpkUQ#wS)@(>jfS0jnO*_xfFwS*br2p{?&CDiqS}*ulYW_7GV6z#5BeTyOI!;5W(dkTtAB zU`+*Uo~;id9#KxjAz&ONect5SfU|~mLU+D@a{U2$6$hUK@4g&I&wTxEZPU}bpgUha ztOsB%0PXZf{(4xCk!uakGord(2Xy0`hq)8xepn+B>leh!M!c@?)-K)8`z?fyNV$zp4+nSy*l@8s{0HO!4f8xd~sPs92IIB38#{Mpwu5E5Wl>!Pf`R+J)aF=W5nkgFR2Tb^i=`m^a}!p^fmIYgij`@?ksYX4d&v z-_6V2@Jh)!6XXc~Lhw^}%*ALP2A?QvF7EujpUuPM90|T4f>(#;0rIS$&iS`7>(vYcxD{<$B6kA z`6Y?@56w^D7XrUbZ|ByIIS;KNp>5#rVfh%*e24rz!0Q1Y6UyWNNA{y+zxpTZR=gUo z!-Vl7R0_T?Rp=V)rf_^t4jxNE6hsI?Q&%;SPYc8V2~>JBZ}oNW+tyW;f#i literal 0 HcmV?d00001 diff --git a/bin/Debug/dependencies/dimg/imageres_179.ico b/bin/Debug/dependencies/dimg/imageres_179.ico new file mode 100644 index 0000000000000000000000000000000000000000..21cefa86942472f8e7af025e55f003dd0d1c5153 GIT binary patch literal 104822 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