├── .gitignore ├── CuMediaExtenders.dcf ├── CuMediaExtenders.js ├── CuMediaExtenders.json ├── CuMediaExtenders.osp ├── CuMediaExtenders.psd ├── Custom Browser in advanced settings with user-specified command line - Help & Support - Directory Opus Resource Centre.URL ├── QuickStart.md ├── README.md ├── Screenshots ├── 00-Showcase.png ├── 01.png ├── 02.png ├── 03.png ├── 04.png ├── 05.png ├── 06.png ├── 07.png ├── 08.png ├── 09.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 15.png ├── 16.png ├── 17.png ├── 18.png ├── 19.png └── 20.png ├── StatusMExt.icl ├── _CuMediaExtenders_Package.btm ├── help ├── configOptions.html └── verySimplePage.html └── icons ├── Icons.xml ├── MExt_24_AddUpdate.png ├── MExt_24_Calculate.png ├── MExt_24_ClearCache.png ├── MExt_24_Copy.png ├── MExt_24_Delete.png ├── MExt_24_Dump.png ├── MExt_24_GitHubPage.png ├── MExt_24_Info.png ├── MExt_24_Main.png ├── MExt_24_Settings.png ├── MExt_24_StatusClean.png ├── MExt_24_StatusDirty.png ├── MExt_24_StatusUnknown.png ├── MExt_24_ToggleGroup1.png ├── MExt_24_ToggleGroup2.png ├── MExt_24_ToggleGroup3.png ├── MExt_24_ToggleGroup4.png ├── MExt_32_AddUpdate.png ├── MExt_32_Calculate.png ├── MExt_32_ClearCache.png ├── MExt_32_Copy.png ├── MExt_32_Delete.png ├── MExt_32_Dump.png ├── MExt_32_GitHubPage.png ├── MExt_32_Info.png ├── MExt_32_Main.png ├── MExt_32_Settings.png ├── MExt_32_StatusClean.png ├── MExt_32_StatusDirty.png ├── MExt_32_StatusUnknown.png ├── MExt_32_ToggleGroup1.png ├── MExt_32_ToggleGroup2.png ├── MExt_32_ToggleGroup3.png └── MExt_32_ToggleGroup4.png /.gitignore: -------------------------------------------------------------------------------- 1 | DOpus_CuMediaExtenders.code-workspace 2 | *.rar 3 | CuMediaExtenders.osp 4 | -------------------------------------------------------------------------------- /CuMediaExtenders.dcf: -------------------------------------------------------------------------------- 1 | 2 | 18 | 30 | 38 | 46 | 54 | 62 | 70 | 82 | 94 | 106 | 118 | 126 | 138 | 146 | 147 | -------------------------------------------------------------------------------- /CuMediaExtenders.json: -------------------------------------------------------------------------------- 1 | { 2 | "colRepl": { 3 | }, 4 | "colExtra": { 5 | }, 6 | "colExtraVideo": { 7 | }, 8 | "colExtraAudio": { 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /CuMediaExtenders.osp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/CuMediaExtenders.osp -------------------------------------------------------------------------------- /CuMediaExtenders.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/CuMediaExtenders.psd -------------------------------------------------------------------------------- /Custom Browser in advanced settings with user-specified command line - Help & Support - Directory Opus Resource Centre.URL: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=https://resource.dopus.com/t/custom-browser-in-advanced-settings-with-user-specified-command-line/38924 3 | IDList= 4 | HotKey=0 5 | IconFile=N:\Net\FirefoxPortable\Data\profile\shortcutCache\q7u2mPYN3k39AlvKgkBdRg==.ico 6 | IconIndex=0 7 | -------------------------------------------------------------------------------- /QuickStart.md: -------------------------------------------------------------------------------- 1 | # Quick Start 2 | 3 | * Extract the distro file if you haven't 4 | * Make sure you have MediaInfo ** CLI ** version downloaded from https://mediaarea.net/en/MediaInfo/Download/Windows 5 | * Open DOpus 6 | * Drag and drop the OSP file in Preferences -> Toolbars -> Scripts 7 | * Click the script name or highlight it and click the gear-icon 8 | * Adjust the path to MediaInfo CLI exe 9 | * Close the Preferences window 10 | * Change to toolbar customization mode 11 | * Drag and drop the DCF file to your toolbar 12 | * Close the customization mode 13 | * Done! 14 | 15 | Now you are ready to use the script columns wherever you want: 16 | e.g. by right clicking the column header in your lister, choose "Columns -> Script -> Media Extenders" or use one of the Toggle buttons from the DCF menu, or in Info Tips via File Types customization. 17 | 18 | Of course, don't forget to select some files and click the Update button to scan your files with MediaInfo ;) 19 | 20 | ## Optional 21 | Included in the distro file is an ICL file which you can use as "Status Label" icons, to show clean/dirty status in the Status Column (DOpus accepts only .ICL, .ICO, .EXE... for label icons). Ping me on DOpus forums if you need help setting up Status icons. 22 | 23 | The Photoshop PSD template is also included, because why not? 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CuMediaExtenders 2 | CuMediaExtenders is a script-addin for video and audio files for the marvellous [Directory Opus file manager](https://www.gpsoft.com.au/), using MediaInfo & NTFS ADS as its backend. 3 | It complements & enhances DOpus built-in fields, instead of completely replacing them. 4 | 5 | As of v0.9/20210113 you get: 6 | * 15 commands incl. custom icons 7 | * 41 columns/script fields 8 | * DCF menu with all available commands 9 | * Sample JSON file to customize column labels (requires Script or DOpus restart) 10 | * PSD template used to create the icons 11 | 12 | It has extensive configuration options with descriptions and include samples in config section 'Reference Only'. 13 | 14 | Column labels are customizable with a JSON file, a sample file is in distro (extract OSP if not visible). 15 | 16 | Video & Audio Codec, # of Audio Channels, Duration groups and Resolution fields are customizable without modifying the script. 17 | 18 | 'Dirty' files, i.e. files which are changed since writing to ADS, can be detected. 19 | 20 | Seen files are cached in DOpus memory, to speed up reading process (deactivatable). 21 | 22 | Progress dialog with Pause/Resume & Abort is supported. 23 | 24 | 4 additional buttons are supplied which can toggle on/off field groups, which are customizable. 25 | 26 | 27 | 28 | ![./Screenshots/00-Showcase.png](./Screenshots/00-Showcase.png) 29 | 30 | 31 | 32 | Read the DISCLAIMER! If you blame me for anything nonetheless, you will be readily ignored. 33 | 34 | December 2020/January 2021 35 | 36 | GitHub: https://github.com/cy-gh/DOpus_CuMediaExtenders 37 | 38 | 39 | 40 | ## Quick Start 41 | 42 | * Download [MediaInfo CLI/Portable](https://mediaarea.net/en/MediaInfo/Download/Windows) (not tested with Setup version) 43 | * Open script config and set path to MediaInfo.exe 44 | * Add UPDATE and other optional commands to any toolbar/menu 45 | * Add columns (you can use supplied TOGGLE commands as well) 46 | * Process some files with UPDATE 47 | * ...and voila, happy organizing! 48 | 49 | Although not required, this setting is HIGHLY RECOMMENDED: 50 | 51 | **File Operations->Copy Attributes->Copy all NTFS streams: TRUE** 52 | 53 | This ensures that if you copy a file the Metadata ADS is copied with it. 54 | 55 | 56 | 57 | ## License 58 | 59 | CuMediaExtenders v0.9 - © 2021 cuneytyilmaz.com 60 | 61 | [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/) 62 | 63 | [MediaInfo](https://mediaarea.net/en/MediaInfo) & MediaInfo icon: Copyright (c) 2002-2021 MediaArea.net SARL 64 | 65 | sprintf: https://hexmen.com/blog/2007/03/14/printf-sprintf/ 66 | 67 | Android Material icons Copyright (c) Google https://material.io/resources/icons/ 68 | 69 | 70 | 71 | ## Supported Formats (as of v0.9) 72 | 73 | Containers && Codecs I have tested so far: 74 | 75 | ​ MKV, MP4, AVI, FLV, WEBM, 3GP, 76 | 77 | ​ M4A, M4B, MKA, MP3, MP2, MP1, FLAC, AC3, AAC, DTS, TrueHD (Dolby Atmos), 78 | 79 | ​ Wave, Wave64, ALAC, TAK, TTA, DSD, Ogg Vorbis, AIFF, AMR, WavPack, WMA Lossy & Lossless, MusePack 80 | 81 | ....and any file as long as MediaInfo reports at least a video or audio track. 82 | 83 | 84 | 85 | This means: 86 | 87 | 1. To process multiple files you can select whatever you want, not just video or audio files, and any file which does not have at least 1 video or audio track will be skipped and no ADS data will be stored. 88 | However, you might want to select less files to avoid unnecessary probing into the non-multimedia files. 89 | 2. You can customize the output for any format I forgot or new formats recognized by MediaInfo. If format and/or codec information is shown, the displayed string can be customized arbitrarily WITHOUT reprocessing files. 90 | 91 | A full list can be found @ https://mediaarea.net/en/MediaInfo/Support/Formats 92 | 93 | 94 | 95 | Not processed by definition: 96 | 97 | ​ Directories, reparse points, junctions, symlinks 98 | 99 | 100 | 101 | Some file types are better supported than others, e.g. RG can be saved in WAVs (by Foobar2000) but not recognized by MediaInfo. 102 | 103 | ## Available Fields 104 | 105 | Columns are by default prefixed with ME (Media Extensions); labels can be customized via external config file. 106 | 107 | Note although some of these fields also exist in DOpus, they are not available for all container & codec types 108 | 109 | | Field (not IDs) | Desc | 110 | |------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 111 | |HasADS/IsAvailable | File has Metadata ADS (calculated separately, not Multicol) [++]| 112 | |NeedsUpdate/Dirty | File has been changed since Metadata ADS has been written [++]| 113 | |VCodec | Video codec (only 1st video stream) [+]| 114 | |ACodec | Audio codec (only 1st audio stream) [+]| 115 | |TBitrate | Total bitrate [++]| 116 | |VBitrate | Video bitrate (only 1st video stream) [+]| 117 | |ABitrate | Audio bitrate (only 1st audio stream) [+]| 118 | |VCount | Number of video streams [++]| 119 | |ACount | Number of audio streams [++]| 120 | |TCount | Number of text (subtitle) streams [++]| 121 | |OCount | Number of other (chapters, menus...) streams [++]| 122 | |ABitrate Mode | VBR/CBR if available (ABR is principally recognized as VBR) [++]| 123 | |TDuration | Total container duration [+]/[++]| 124 | |VDuration | Video duration [+]/[++]| 125 | |Auration | Audio duration [+]/[++]| 126 | |Duration (Combo) | Combined duration, only a single one is displayed unless any of 3 differs from each other (5s tolerance), i.e. detects mismatching streams [++]| 127 | |Multi-Audio | File has multiple audio streams (yes/no) [++]| 128 | |Audio Channels | Number of channels in 1st audio track, e.g. 2.0, 5.1, 7.1 [+]| 129 | |ReplayGain | File has ReplayGain (RG) info stored (some format support RG but MediaInfo does not parse it) [++]| 130 | |Audio Compression Mode | Lossy/Lossless [++]| 131 | |AspectRatio (Raw) | Video aspect ratio (AR), i.e. width:height, e.g. 1.333, 2.35, etc. [++]| 132 | |AspectRatio (Disp) | Video display AR if the format supports it and file has a different AR than its raw AR [++]| 133 | |AspectRatio (Combined) | Combined video AR, only a single AR is displayed, if its display AR differs from raw AR, it's shown in parentheses [++]| 134 | |Gross byterate | Gross average KB, kilobytes per second, for the file, simply filesize:duration [++]| 135 | |Bits per Pixel | Video average bits per pixel, i.e. video bitrate/(width*height); only 1st video stream [++]| 136 | |Dimensions | Video dimensions [+]| 137 | |Resolution | 240p, 360p, 480p, 720p, 1080p, 4K, 8K - Customizable, can append '(Vertical)' for vertical videos [++]| 138 | |Frame Rate | Video frame rate [+]| 139 | |Subtitle Language | Subtitle language if available (only 1st text stream) [++]| 140 | |Encoded Library | Library used to encode the video if available, incl. technical info [++]| 141 | |Encoded Lib Name | Library used to encode the video if available no technical info [++]| 142 | |VCodec ID | Video Codec ID (raw), if available [++]| 143 | |ACodec ID | Audio Codec ID (raw), if available [++]| 144 | |AFormat Version | Audio Format Version, if available [++]| 145 | |AFormat Profile | Audio Format Profile, if available [++]| 146 | |Encoder App | Container Encoder App, if available [++]| 147 | |ADS (Formatted) | Formatted ADS data (always as JSON), suitable to show in InfoTips [++]| 148 | |ADS (Raw) | Unformatted ADS data (always as JSON), only for sake of completeness, not very suitable as a column or InfoTip [++]| 149 | |Helpers | 3 helper columns for the container, video & audio tracks, which you can use to adjust display Codec names [++]| 150 | 151 | [+] Recognizes more formats and/or is more accurate than DOpus 152 | 153 | [++] No DOpus counterpart 154 | 155 | 156 | 157 | Unlike DOpus, output of following columns are user-customizable (editing source code is also another option): 158 | 159 | * VCodec 160 | * ACodec 161 | * Audio Channels 162 | * Resolution 163 | 164 | Although there are no fields for the following, they are stored and available in ADS (see section Adding/Adjusting Fields): 165 | 166 | * Overall Bitrate Mode 167 | * Additional & Extra info fields for Container, Video, Audio & Text 168 | These container- and codec-specific fields can contain a lot information e.g. ReplayGain, used encoding settings, date-time of encoding... which can be used show new fields/columns or adjust existing ones. 169 | * Video Stream Size 170 | * Audio Stream Size 171 | * Audio Format Settings Mode 172 | * Audio Sampling Rate 173 | 174 | 175 | 176 | Note some of the fields (e.g. sampling rate) above are already supported by DOpus well close to 100%, albeit not for all containers & codecs. 177 | 178 | Any other info should be used from DOpus builtin fields. 179 | 180 | 181 | 182 | ## Available Actions 183 | 184 | * Update Metadata: Create/Update Metadata ADS for selected file 185 | * Delete Metadata: Delete attached Metadata ADS of selected file 186 | * Clear Cache: Clear in-memory DOpus cache for Metadata read from ADS (see FEATURES) 187 | * Copy Metadata: Copy Metadata ADS of selected files to clipboard 188 | * Dump Metadata: Dump Metadata ADS of selected files to DOpus Output window 189 | * Copy MediaInfo: Run MediaInfo anew and copy its output to clipboard 190 | * Dump MediaInfo: Run MediaInfo anew and dump its output to DOpus Output window 191 | * Estimate Bitrate: Calculate bitrate using a list of target 'bitrate/pixel' values 192 | * Toggle Essential: Toggle a user-configurable list of 'essential' columns, can toggle DOpus columns 193 | * Toggle Optional: Toggle a user-configurable list of 'optional' columns, can toggle DOpus columns 194 | * Toggle Other: Toggle a user-configurable list of 'other' columns, can toggle DOpus columns 195 | * Toggle Verbose: Toggle a user-configurable list of 'verbose' columns, can toggle DOpus columns 196 | * Validate Config: Validate current user configuration 197 | 198 | 199 | 200 | A preconfigured menu button with all available actions is in distro (extract OSP if not visible); see screenshots below. 201 | 202 | ## Customization 203 | 204 | If you want to adjust the VCodec & ACodec output, see options: 205 | 206 | * CODEC_APPEND_ADDINFO 207 | * CODEC_USE_SHORT_VARIANT 208 | * RESOLUTION_APPEND_VERTICAL 209 | * LOOKUP_CODECS - as a LAST resort! 210 | 211 | LOOKUP_CODECS can be used to show identical info to FourCC if you want, but I tell you FourCC is pretty useless, it's not standardized nor filled/respected/recognized by many encoders/muxers. 212 | 213 | Suggested: turn on one or more of the 'HELPER' columns (Toggle Verbose action) to see what info you can use to identify a certain codec. 214 | 215 | 216 | 217 | If you want to rename the labels, you need to create a JSON file in the script directory. 218 | 219 | 220 | 221 | First check the formatted Metadata ADS, e.g. via Tooltip or Dump/Copy for a selected file. 222 | 223 | Some fields are already stored in ADS, but have no dedicated columns, and you'd need to create only a new column. 224 | 225 | Chances are very high that the information you need is already there (except FourCC, since it is a placebo BS field). 226 | 227 | 228 | 229 | If you want to add new buttons or columns based on available info, see OnInit() method 230 | 231 | and use one of the existing commands & fields as template; note few fields e.g. 'Available' does not use MultiCol! 232 | 233 | 234 | 235 | If the info you want is not in the ADS, copy/dump the MediaInfo output for the file. 236 | 237 | If MediaInfo does recognize the field you want, check OnME_Update() and add the field. **HOWEVER,** adding new fields means adding new fields to the structure stored in ADS and that means, you will need to update previously processed files with the ADS before you can use new fields! 238 | 239 | Please keep that in mind. 240 | 241 | 242 | 243 | ### Feature Requests: 244 | 245 | Requesting new fields/user option is ok, with some conditions: 246 | 247 | * No obscure fields, like encoder 'Format_Settings_Matrix', should be usable by many 248 | 249 | * My time allows it 250 | 251 | * You must supply a sample file and MediaInfo output of the sample, where the field(s) you want are marked clearly 252 | 253 | 254 | 255 | ## Features 256 | 257 | ### Nearly constant scanning speed 258 | 259 | File scanning speed does NOT depend on the individual file sizes since most containers store metadata at the front of the files and this is what MediaInfo parses. This means, the overall scanning duration depends more or less on the total number of files, not their sizes. The scanning speed depends on your disk's read speed of course but since SDD & NVMEs ubiquitous these days the speed is pretty acceptable. 260 | 261 | ### Dirty detection: 262 | 263 | If a file has been changed, e.g. overwritten by a program or its file-specific metadata (ID3, keywords, etc.) have been updated, this is automatically recognized and can be used to update its Metadata ADS. 264 | 265 | #### Progress window 266 | 267 | "Pause/Resume" & "Abort" actions are supported fully, Skip seemed unnecessary to me since scanning speed per file is pretty high. 268 | 269 | ### Caching: 270 | 271 | This is an experimental feature and does not bring as much performance gain as you might expect from in-memory caching. 272 | 273 | Can be disabled via option. 274 | 275 | Disabling the cache and/or clearing it does not seem to make a huge impact; YMMV. Read on if you're curious. 276 | 277 | Any seen file, as long as the columns are visible, are cached in DOpus memory, ~1k of data per file. If the file path, name & last modification time have not been changed, the cached info is used. 278 | 279 | The Metadata info is principally processed using POJO/JSON, and my initial concern was reading JSON strings, converting them to POJO and back would be very time-consuming has been removed by another factor. 280 | 281 | DOpus seems to have a minimum overhead for script columns/fields ; i.e. even if you program the simplest fields/columns, updating the columns in a big directory still takes some time, although DOpus-internal fields are shown instantly. 282 | 283 | However, after much testing, it is safe to say, caching does not speed up the refresh speed of columns, since DOpus always has an overhead to display script fields/columns, even if they show a simple 'X' without calculating any information at all. 284 | 285 | The caching only reduces disk accesses, since NTFS ADS streams are practically separate files. 286 | 287 | The cached info is 'stringified JSONs', i.e. POJOs (Plain Old Javascript Objects) converted to readable format. This information is read and parsed (converted back to an in-memory POJO) whenever needed. Even if this takes some computing time, DOpus does not allow you to keep POJOs in memory for too long, these are removed from memory as soon as DOpus show 'Script Completed' in output window, even if you use Script.Vars object. Script.Vars can store simple types (integer, string, etc.) or DOpus objects, e.g. Vector & Map but not POJOs. Since it is too much hassle for me to convert all JS object accesses from object.field to DOPus Map() notation, I'm not planning to rewrite it and cache directly the parsed JSONs. Considering script-addins do not run faster than a certain speed, a rewrite would not bring much speed increase anyway. The only possible solution seems to be developing a DOpus plugin, which I'm not planning at the moment. 288 | 289 | Also added a parameter cache_max_items to limit the number of items in the cache based on timestamp of the item added to the cache but iterating over hash arrays based on an attribute other than the hash's key field turned out to be an unnecessary hassle too much pain for very little gain, so such a feature won't be implemented (again), just use the CLEAR CACHE command 290 | 291 | ### Multiple Video Tracks: 292 | 293 | You might wonder why "only 1st video stream" is mentioned elsewhere. 294 | 295 | The wonderful Matroska format allows to mux multiple video streams. 296 | 297 | But unlike files with multiple audio streams, no media player I know of can play such files in entirety, 298 | 299 | However, for the sake of completeness & OCD I have included them in the script. 300 | 301 | 302 | 303 | ## Features & Screenshots 304 | 305 | This is what you should see when you install the script 306 | 307 | ![DOpus Scripts preferences](./Screenshots/01.png) 308 | 309 | 310 | 311 | 312 | 313 | Script Preferences![02](./Screenshots/02.png) 314 | 315 | 316 | 317 | 318 | 319 | Pay also attention to the group headers & descriptions, they will save you some head scratching. The last section with REF_xxx fields is for reference only, changing these will have no effect. 320 | 321 | Some changes can be directly used without an UPDATE, i.e. rescanning the files and updating the ADS data. Only few, luckily they don't change much, such as which types of codecs are lossless/lossy or VBR need an ADS UPDATE, in case you use formats which I have not tested with yet. 322 | 323 | For example, for the setting LOOKUP_CODECS, there's a corresponding REF_LOOKUP_CODECS, which includes many comments. 324 | 325 | ![03](./Screenshots/03.png) 326 | 327 | 328 | 329 | 330 | 331 | Sample setting for channel count lookup. This must be valid JSON as the description states. With this you can list files as 2.0, 5.1, 7.1 etc. or mono, stereo, etc. The \u2260 is the Unicode ≠ (not equal sign). 332 | 333 | ![04](./Screenshots/04.png) 334 | 335 | 336 | 337 | 338 | 339 | Duration groups which are used when you group your files by duration. 340 | 341 | ![05](./Screenshots/05.png) 342 | 343 | 344 | 345 | 346 | 347 | Resolution lookup, which are used both for the Resolution column and the grouping; the ""(Vertical)" suffix can be separately added via the option RESOLUTION_APPEND_VERTICAL. 348 | 349 | ![06](./Screenshots/06.png) 350 | 351 | 352 | 353 | 354 | 355 | In distro file you will find some buttons which can toggle 4 groups of fields on and off. This is the "Essential Fields" list, which I personally find very useful in addition to DOpus builtin fields. You can also mix it up with DOpus fields like mp3songlength, and toggle them whenever you need them. 356 | 357 | The next option TOGGLEABLE_FIELDS_ESSENTIAL_AFTER is any field name **after** which these fields are shown. It can be any field, incl. this script's fields. If empty, fields are added to/removed from the last column. 358 | 359 | ![07](./Screenshots/07.png) 360 | 361 | 362 | 363 | 364 | 365 | Sample reference variable for external config file. These are automatically converted strings from script source code (via a very ugly but very effective hack). Use these REF fields to read unstripped objects; the real variables they correspond to must be valid JSON; remember what I said above about descriptions, always read them. 366 | 367 | More to this in the screenshots below. 368 | 369 | ![08](./Screenshots/08.png) 370 | 371 | 372 | 373 | 374 | 375 | Some fields more suitable to use in Infotips or to dump into Output Window than others.![09](./Screenshots/09.png) 376 | 377 | 378 | 379 | 380 | 381 | A sample pool of files I used to test the columns. This is the "Essential Fields" in the middle and DOpus fields on the right. Study it and compare them as much as you need. 382 | 383 | ![10](./Screenshots/10.png) 384 | 385 | 386 | 387 | "Optional Fields"![11](./Screenshots/11.png) 388 | 389 | 390 | 391 | "Other fields" - Can be used to tap into already existing ADS data. 392 | 393 | ![12](./Screenshots/12.png) 394 | 395 | 396 | 397 | "Verbose fields" - You wouldn't want to use them as columns. The Formatted version is more suitable for InfoTips and raw one is for copy-paste into an editor. 398 | 399 | ![13](./Screenshots/13.png) 400 | 401 | 402 | 403 | 404 | 405 | Supplied commands as of v0.9. 406 | 407 | ![14](./Screenshots/14.png) 408 | 409 | 410 | 411 | A ready-to-use menu as DCF file to get you started. 412 | 413 | ![15](./Screenshots/15.png) 414 | 415 | 416 | 417 | 418 | 419 | There's no accounting for taste. The column names I personally find useful might not suit your needs and likes. So I made them customizable. Since DOpus reads column headers only during script initialization, there is no way to make them user-configurable... until you create a JSON file as described below in the script folder. See screenshots further below how it is used. 420 | 421 | ![16](./Screenshots/16.png) 422 | 423 | 424 | 425 | The about screen 426 | 427 | ![17](./Screenshots/17.png) 428 | 429 | 430 | 431 | The "codec" fields can be quite overwhelming. Before you start "but FourCC..." shush shush... No! It's a bullshit field, which is neither standardized nor respected by many editors, encoder and muxers. In the past, some encoders even misused it deliberately to maintain compatibility with existing codecs, *cough DivX 3, MP42, XviD, DivX 5... cough*. 432 | 433 | Since video encoding is a world of its own and each codec has a gazillion options and combinations, you have the choice to customize the magical "codec" info as you please. 434 | 435 | Below is the "Additional Info" setting which affects only a handful of codecs like AAC, DTS, Atmos. This info comes straight from MediaInfo, except Opus files, which the script fills separately for you. Note how "AAC (LC SBR)" becomes "AAC" and so on, but not MP3. 436 | 437 | ![18](./Screenshots/18.png) 438 | 439 | 440 | 441 | You might be confused why MP3 (v1) was identical on both sides in the screenshot above, because this is technically not from "Additional Info" field, but you can still use the "short versions" as seen below. 442 | 443 | ![19](./Screenshots/19.png) 444 | 445 | 446 | 447 | 448 | 449 | Where do these "short versions" of codecs come from? From this list. It's not easy to use, but quite powerful if you take the time to look into the existing ADS data (and there are 2 buttons for that) and adjust the LOOKUP_CODECS (must be valid JSON). 450 | 451 | ![20](./Screenshots/20.png) 452 | 453 | 454 | 455 | ## Future 456 | 457 | ### Extra Music fields? 458 | 459 | Since Foobar2000 & MP3Tag both are stellar programs, I see little need at the moment. Probably a 'Cover' field, which is also used in MKVs and I plan to use it. 460 | 461 | ### Images? 462 | 463 | DOpus already does a terrific job with images, I see little need at the moment, maybe a DPI field... but DOpus probably has it somewhere I haven't seen yet :D 464 | 465 | ### Community Feedback 466 | 467 | Although I have tested the script so far with many codecs I daily use or simply know of the world of multimedia is a jungle and some files, container/codec combinations are surely missed. 468 | 469 | Speed, how fast these columns are parsed/displayed, is another topic where I have no idea how it'd work for others. It's pretty fast on my machine, but I do have NVMEs & 12-core machine, so... no idea! 470 | 471 | ## Version History 472 | 473 | v0.5: 474 | 475 | Initial release 476 | 477 | ... 478 | 479 | many unreleased versions, see source if you're really that interested... I thought so. 480 | 481 | ... 482 | -------------------------------------------------------------------------------- /Screenshots/00-Showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/00-Showcase.png -------------------------------------------------------------------------------- /Screenshots/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/01.png -------------------------------------------------------------------------------- /Screenshots/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/02.png -------------------------------------------------------------------------------- /Screenshots/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/03.png -------------------------------------------------------------------------------- /Screenshots/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/04.png -------------------------------------------------------------------------------- /Screenshots/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/05.png -------------------------------------------------------------------------------- /Screenshots/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/06.png -------------------------------------------------------------------------------- /Screenshots/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/07.png -------------------------------------------------------------------------------- /Screenshots/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/08.png -------------------------------------------------------------------------------- /Screenshots/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/09.png -------------------------------------------------------------------------------- /Screenshots/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/10.png -------------------------------------------------------------------------------- /Screenshots/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/11.png -------------------------------------------------------------------------------- /Screenshots/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/12.png -------------------------------------------------------------------------------- /Screenshots/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/13.png -------------------------------------------------------------------------------- /Screenshots/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/14.png -------------------------------------------------------------------------------- /Screenshots/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/15.png -------------------------------------------------------------------------------- /Screenshots/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/16.png -------------------------------------------------------------------------------- /Screenshots/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/17.png -------------------------------------------------------------------------------- /Screenshots/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/18.png -------------------------------------------------------------------------------- /Screenshots/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/19.png -------------------------------------------------------------------------------- /Screenshots/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/Screenshots/20.png -------------------------------------------------------------------------------- /StatusMExt.icl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/StatusMExt.icl -------------------------------------------------------------------------------- /_CuMediaExtenders_Package.btm: -------------------------------------------------------------------------------- 1 | @echo off 2 | *del /qfkz CuMediaExtenders.osp > NUL: 3 | *del /qfkz CuMediaExtenders.rar > NUL: 4 | 5 | winrar a -ep1 -t CuMediaExtenders.zip CuMediaExtenders*.js* icons help 6 | *ren CuMediaExtenders.zip CuMediaExtenders.osp 7 | 8 | winrar a -ep1 -t CuMediaExtenders.rar CuMediaExtenders.osp CuMediaExtenders.dcf CuMediaExtenders.psd StatusMExt.icl QuickStart.md 9 | -------------------------------------------------------------------------------- /help/configOptions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | configOptions 549 | 550 | 551 |

Config Options

For the JSON formatted variables, please keep these in mind:

 

NameTypeDefaultRemarks
DEBUG_LEVELenumERRORLevel of output messages in the Script Log (aka Output Log) shown by the script.

Unless you are adventurous, do not set it above WARN, i.e. NORMAL, INFO, VERBOSE emita ton of information and might freeze your PC/DOpus.

The log can be opened by via:
* View -> Output Window
* by the command Set UTILITY=OtherLog,Toggle
* by opening Find, Synchronize, etc. and choosing "Other Log" in the "Utility Panel" dropdown
FORCE_REFRESH_AFTER_UPDATEbooleantrueAutomatically refresh the current lister after changes.

It keeps the current selection.
MEDIAINFO_PATHstring/programfilesx86/MediaInfo/MediaInfo.exePath to MediaInfo portable CLI.

It can be downloaded from https://mediaarea.net/en/MediaInfo/Download/Windows
TEMP_FILES_DIRstring%TEMP%Temporary directory, in which temporary JSON outputs from MediaInfo are stored.

They are immediately deleted after a file has been processed.

This is ignored in Templess Mode (see below).
TEMPLESS_MODEbooleanfalseExperimental:

In this mode, MediaInfo outputs are read into the script without using temporary files.

This is a highly experimental feature and uses temporary (volatile) environment variables to pass the data from the command output to DOpus.

If you are lucky, it might work just as fast as, if not faster than the normal mode using temp-files. If not, disable it again.
TEMPLESS_CHUNK_SIZEnumber32768Experimental:

Determines how big the chunks, i.e. volatile envvar blocks, should be. Windows has certain limitations on command line and envvar lengths. If templess mode works mostly for you, you can increase the value even further.

The default value is chosen very conservatively.
KEEP_ORIG_MODTSbooleantrueAttaching ADS to files normally changes the last modification timestamps of the parent file.

* true: The script automatically resets the timestamp to original.
* false: The parent files' modification timestamp is changed.
CACHE_ENABLEDbooleantrueCache metadata JS objects in memory for unchanged files to speed up process.

The information stored in ADS is usually small, typically ~1 KB per file, but I cannot guarantee how much memory management overhead Windows/WSH/JScript/DOpus put on top of each object. The cache is used only and only if this script runs, i.e. automatically when any of the columns is visible (incl. in InfoTips/Tiles), or if you trigger a command.

To ensure the information is always up-to-date, the following algorithm is used:

* Caching disabled or file is not in cache => read from disk

* File is already in cache => check file's last modification time against the timestamp in cached info
* If different => read from disk
* If same => use cache
* UPDATE command executed (regardless of file was in cache or not) => add to/update cache
* File is already in cache but DELETE command is executed => remove from cache

WARNING:

The cache will fail for one particular scenario:

Say, you have a file and you copy it to another folder. If the copy is processed, its information will be cached. If you delete the copy via DOpus (or some other program), the script will not receive this information automatically. If you copy the original file, which has the exact same file size & modification timestamp, to the same path again, the new copy will have no ADS but the script will still think that the it is the previously processed file and show the information from the cache. Normally this is not a problem for displaying purposes, but if you copy the copy to another drive, it will have no ADS. If you do this, you should either manually update the 2nd copy, or delete the cache to see that the copy has no ADS.

Please keep this in mind.

CAVEATS:

If you keep DOpus open for a long time and handle thousands of small files (only when any of these extra columns is shown), the memory usage of DOpus will increase. This is not a 'memory leak' though, just the script doing what you tell it to: To cache stuff :)

To avoid high mem usage you can manually call the CLEARCACHE command via button, menu...
TOGGLEABLE_FIELDS_ESSENTIALstring[] as json[
"MExt_HasMetadata",
"MExt_NeedsUpdate",
"MExt_TotalBitrate",
"MExt_VideoCodec",
"MExt_VideoBitrate",
"MExt_AudioCodec",
"MExt_AudioBitrate",
"MExt_CombinedDuration",
"MExt_VDimensions",
"MExt_VResolution",
"MExt_VFrameRate",
"MExt_VARCombined",
"MExt_MultiAudio",
"MExt_AudioChannels",
"MExt_AudioLang",
"MExt_AudioBitrateMode",
"MExt_AudioCompressionMode",
"MExt_HasReplayGain",
"MExt_VBitratePerPixel",
"MExt_SubtitleLang"
]
Essential columns list, which can be toggled on/off via supplied button (default icon: 1).

The list is ordered, i.e. they are added/removed in the same order as configured.

Unlike the list might suggest, you can use any DOpus field in this list, e.g. mix and match standard movie/audio fields from DOpus.

Also see the next setting TOGGLEABLE_FIELDS_ESSENTIAL_AFTER.
TOGGLEABLE_FIELDS_ESSENTIAL_AFTERstringCommentsThe column name after which the Essential fields are added to/removed from.
TOGGLEABLE_FIELDS_OPTIONALstring[] (as json)[
"MExt_GrossByterate",
"MExt_TotalDuration",
"MExt_VideoDuration",
"MExt_AudioDuration",
"MExt_VARDisplay",
"MExt_VARRaw",
"MExt_VideoCount",
"MExt_AudioCount",
"MExt_TextCount",
"MExt_OthersCount",
"MExt_VEncLibName",
"MExt_VEncLib",
"MExt_VCodecID",
"MExt_ACodecID",
"MExt_AFormatVersion",
"MExt_AProfile",
"MExt_EncoderApp",
"MExt_DateEncoded",
"MExt_DateTagged",
]
Optional columns list, which can be toggled on/off via supplied button (default icon: 2).

The rest as in Essential fields above.
TOGGLEABLE_FIELDS_OPTIONAL_AFTERstringMExt_SubtitleLangThe column name after which the Optional fields are added to/removed from.
TOGGLEABLE_FIELDS_OTHERstring[] (as json)[
"MExt_HelperContainer",
"MExt_HelperVideoCodec",
"MExt_HelperAudioCodec",
"MExt_CleanedUpName",
]
Other columns list, which can be toggled on/off via supplied button (default icon: 3).

These fields are usually unnecessary for daily usage..

The rest as in Essential fields above.
TOGGLEABLE_FIELDS_OTHER_AFTERstringThe column name after which the Other fields are added to/removed from.
TOGGLEABLE_FIELDS_VERBOSEstring[] (as json)[
"MExt_ADSDataFormatted",
"MExt_ADSDataRaw",
]
Verbose columns list, which can be toggled on/off via supplied button (default icon: 4).

These fields are usually unnecessary for daily usage..

The rest as in Essential fields above.
TOGGLEABLE_FIELDS_VERBOSE_AFTERstringThe column name after which the Verbose fields are added to/removed from.
CODEC_USE_SHORT_VARIANTbooleanfalseUse short variants of codecs, found via LOOKUP_CODECS
CODEC_APPEND_ADDINFObooleantrueAdd container or codec-specific information to the container/video/audio codec fields automatically.
If an AAC file is encoded with 'LC SBR' it is shown as 'AAC (LC SPR)'.
RESOLUTION_APPEND_VERTICALbooleantrueAppend '(Vertical)' to video resolutions or not, mostly relevant for mobile phone videos.

Example: A file with with 480x640 resolution, will be shown as 480p (Vertical).
FORMATS_REGEX_VBRregexp (as string)/ALAC|Monkey's Audio|TAK|DSD/Audio formats which do not store a VBR/CBR/ABR information separately but are VBR by definition.
Do not change unless necessary.
FORMATS_REGEX_LOSSLESSregexp (as string)/ALAC|PCM|TTA|DSD/Audio formats which do not store a lossless information separately but are lossless by definition.

Do not change unless necessary.
FORMATS_REGEX_LOSSYregexp (as string)/AMR/Audio formats which do not store a lossy information separately but are lossy by definition.

Do not change unless necessary.
LOOKUP_RESOLUTIONS<string, string> (as json){
"240": "240p",
"360": "360p",
"480": "480p",
"576": "576p",
"720": "720p",
"1080": "1080p",
"2160": "2160p",
"4320": "4320p"
}
Video resolution translation hash. These are also used for grouping. For calculation always, the smaller of width/height is taken. Also see RESOLUTION_APPEND_VERTICAL.

The comparison is always <= (less or equal), i.e.
actual resolution <= config values

Alternatively, you can use SD, HD-Ready, HD, UHD, 4K, 8K, etc.

Example: A file with with 640x480 resolution, will be shown as 480p.
LOOKUP_DURATION_GROUPS<string, string> (as json){
"0": " ≠00:00",
"60": "< 01:00",
"120": "01:00-02:00",
"180": "02:00-03:00",
"240": "03:00-04:00",
"300": "04:00-05:00",
"600": "05:00-10:00",
"900": "10:00-15:00",
"1200": "15:00-20:00",
"1800": "20:00-30:00",
"3600": "30:00-1:00:00",
"5400": "Over 1h",
"7200": "Over 1.5h",
"10800": "Over 2h",
"999999": "Over 3h"
}
Duration lookup hash. These are also used for grouping.

The comparison is always <= (less or equal), i.e.
actual duration <= config values

Some raw files extracted from movie containers, notably raw AAC (not M4A), raw DTS, raw Atmos are reported as having a 0 duration by MediaInfo. But if the file definitely has audio, you can recognize this as well.

\u2260 is the Unicode 'not equal' sign.

If the file has no audio track at all, this is grouped automatically under 'No Audio', no need to define it here.

Also note that some values like 'Over 1h' depend on preceeding key's value
LOOKUP_CODECS<string, string> (as json)see below 
LOOKUP_CHANNELS<string, string> (as json){
"0": " ",
"X": "≠0",
"1": "1.0",
"2": "2.0",
"3": "2.1",
"4": "4.0",
"5": "5.0",
"6": "5.1",
"7": "5.2",
"8": "7.1",
"9": "7.2"
}
0 means file has no audio track
X: means file has an audio track, but its channel information cannot be extracted by MediaInfo. Some formats like Musepack, raw DTS report an audio track but not the channel count, sorted between 0 & 1.

Some alternatives for 0:
* "0": "0 (no audio)"
* "0": "0 (n/a)"
* "0": "0"
If you use "0": "" the value 0 will be shown as empty string as well, which impacts sorting.

Some alternatives for X:
* "X": "> 0",
* "X": "≠ 0"
NAME_CLEANUP  Currently only for internal use.

 

566 | 567 | 568 | -------------------------------------------------------------------------------- /help/verySimplePage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | configOptions 5 | 6 | 7 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

8 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

9 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

10 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

11 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

12 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

13 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

14 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

15 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

16 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

17 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

18 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

19 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

20 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

21 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

22 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

23 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

24 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

25 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

26 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

27 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

28 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

29 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

30 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

31 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

32 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

33 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

34 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

35 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

36 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

37 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

38 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

39 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

40 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

41 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

42 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

43 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

44 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

45 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

46 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

47 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

48 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

49 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

50 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

51 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

52 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

53 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

54 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

55 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

56 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

57 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

58 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

59 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

60 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

61 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

62 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

63 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

64 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

65 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

66 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

67 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /icons/Icons.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Media Extenders Icons 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /icons/MExt_24_AddUpdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_AddUpdate.png -------------------------------------------------------------------------------- /icons/MExt_24_Calculate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_Calculate.png -------------------------------------------------------------------------------- /icons/MExt_24_ClearCache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_ClearCache.png -------------------------------------------------------------------------------- /icons/MExt_24_Copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_Copy.png -------------------------------------------------------------------------------- /icons/MExt_24_Delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_Delete.png -------------------------------------------------------------------------------- /icons/MExt_24_Dump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_Dump.png -------------------------------------------------------------------------------- /icons/MExt_24_GitHubPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_GitHubPage.png -------------------------------------------------------------------------------- /icons/MExt_24_Info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_Info.png -------------------------------------------------------------------------------- /icons/MExt_24_Main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_Main.png -------------------------------------------------------------------------------- /icons/MExt_24_Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_Settings.png -------------------------------------------------------------------------------- /icons/MExt_24_StatusClean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_StatusClean.png -------------------------------------------------------------------------------- /icons/MExt_24_StatusDirty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_StatusDirty.png -------------------------------------------------------------------------------- /icons/MExt_24_StatusUnknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_StatusUnknown.png -------------------------------------------------------------------------------- /icons/MExt_24_ToggleGroup1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_ToggleGroup1.png -------------------------------------------------------------------------------- /icons/MExt_24_ToggleGroup2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_ToggleGroup2.png -------------------------------------------------------------------------------- /icons/MExt_24_ToggleGroup3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_ToggleGroup3.png -------------------------------------------------------------------------------- /icons/MExt_24_ToggleGroup4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_24_ToggleGroup4.png -------------------------------------------------------------------------------- /icons/MExt_32_AddUpdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_AddUpdate.png -------------------------------------------------------------------------------- /icons/MExt_32_Calculate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_Calculate.png -------------------------------------------------------------------------------- /icons/MExt_32_ClearCache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_ClearCache.png -------------------------------------------------------------------------------- /icons/MExt_32_Copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_Copy.png -------------------------------------------------------------------------------- /icons/MExt_32_Delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_Delete.png -------------------------------------------------------------------------------- /icons/MExt_32_Dump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_Dump.png -------------------------------------------------------------------------------- /icons/MExt_32_GitHubPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_GitHubPage.png -------------------------------------------------------------------------------- /icons/MExt_32_Info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_Info.png -------------------------------------------------------------------------------- /icons/MExt_32_Main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_Main.png -------------------------------------------------------------------------------- /icons/MExt_32_Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_Settings.png -------------------------------------------------------------------------------- /icons/MExt_32_StatusClean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_StatusClean.png -------------------------------------------------------------------------------- /icons/MExt_32_StatusDirty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_StatusDirty.png -------------------------------------------------------------------------------- /icons/MExt_32_StatusUnknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_StatusUnknown.png -------------------------------------------------------------------------------- /icons/MExt_32_ToggleGroup1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_ToggleGroup1.png -------------------------------------------------------------------------------- /icons/MExt_32_ToggleGroup2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_ToggleGroup2.png -------------------------------------------------------------------------------- /icons/MExt_32_ToggleGroup3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_ToggleGroup3.png -------------------------------------------------------------------------------- /icons/MExt_32_ToggleGroup4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy-gh/DOpus_CuMediaExtenders/cfc1c1fca477611889c41ca05ad39872d3ba55fe/icons/MExt_32_ToggleGroup4.png --------------------------------------------------------------------------------