# VeeSeeVSTRack *VeeSeeVSTRack* is an adaption of VCV Rack for the VST2.4 format. + supports multiple instances + supports VST MIDI input + supports up to 8 audio outputs + supports up to 8 audio inputs + supports VST program chunks (=> patches are saved with the DAW's project file or as .fxp files) + supports VST host timing (audioMasterGetTime / kVstTempoValid / kVstTransportPlaying, see Core.MIDI-1 module) + supports VST parameters (send / recv) + supports dynamically loaded plugin DLLs - the plugin.dll files are _not_ binary compatible with the VCV Rack plugins ! - there's a [plugin SDK](#dynamically-loaded-plugins-via-plugin-sdk) (for Microsoft Visual Studio 2017 Community Edition) which can be used to build new plugins without checking out this entire GIT repository + supports internal oversampling (up to 16x with configurable quality) - the number of oversampled I/O channels can be limited to save CPU time + supports idle-detection - wake up on MIDI note on or audio input Tested in - Eureka (my own work-in-progress VST host) - Cockos Reaper - Propellerhead Reason 10 - Steinberg Cubase Pro 9.5.30 - LMMS 1.2.0-rc6 - Jeskola Buzz 1.2 (build 1503 / x64) - according to users: works in Bitwig Studio - according to users: works in Nuendo - according to users: works in Ableton Live # Downloads The current release can be found in the [vst2_bin/](vst2_bin/) folder. Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-03Sep2018.7z](https://github.com/bsp2/releases/raw/master/vsvr/veeseevstrack_0_6_1_win64_bin-03Sep2018.7z) (64bit) Note: The effect plugin can used be as an instrument, too. You just have to send it MIDI events ! Note: The idle detection is enabled by default. A side effect of this is that e.g. sequencer modules will not play while the plugin is idle. Please turn off the idle detection in the toolbar menu (set it to "Always Active") in this case. # Installation Extract the 7zip archive and move the `vst2_bin/` folder to a VST2 plugin directory. Alternatively, add the folder to your DAW's plugin directory list. # Changelog see [vst2_bin/CHANGELOG_VST.txt](vst2_bin/CHANGELOG_VST.txt) # Demo Video Here are some demo videos of it: https://vimeo.com/277703414 (early version), https://vimeo.com/287875320 (guitar synthesis sound demo). # Add-on modules The binary distribution contains the following (22) dynamically loaded add-on modules: - bsp.AttenuMixer - bsp.Obxd_VCF - bsp.Scanner - bsp.Sway - bsp.TunedDelayLine - dBiz.dBizBlank - dBiz.Multiple - dBiz.Contorno - dBiz.Chord - dBiz.Utility - dBiz.Transpose - dBiz.Bene - dBiz.Bene2 - dBiz.BenePads - dBiz.SubMix - dBiz.Remix - dBiz.PerfMixer - dBiz.VCA530 - dBiz.Verbo - dBiz.DVCO - dBiz.DAOSC - Template_shared.MyModule The following (632) add-on modules are statically linked with the VST plugin: - 21kHz.D_Inf - 21kHz.PalmLoop - Alikins.IdleSwitch - Alikins.MomentaryOnButtons - Alikins.BigMuteButton - Alikins.ColorPanel - Alikins.GateLength - Alikins.SpecificValue - alto777_LFSR.FG8 - alto777_LFSR.Psychtone - alto777_LFSR.Amuse - alto777_LFSR.a7Utility - alto777_LFSR.cheapFX - alto777_LFSR.Divada - alto777_LFSR.YASeq3 - AmalgamatedHarmonics.Arpeggiator - AmalgamatedHarmonics.Arpeggiator2 - AmalgamatedHarmonics.Circle - AmalgamatedHarmonics.Imperfect - AmalgamatedHarmonics.Imperfect2 - AmalgamatedHarmonics.Progress - AmalgamatedHarmonics.Ruckus - AmalgamatedHarmonics.ScaleQuantizer - AmalgamatedHarmonics.ScaleQuantizer2 - AmalgamatedHarmonics.SLN - AS.ADSR - AS.AtNuVrTr - AS.BPMCalc - AS.BPMClock - AS.BlankPanel4 - AS.BlankPanel6 - AS.BlankPanel8 - AS.BlankPanelSpecial - AS.Cv2T - AS.DelayPlusFx - AS.DelayPlusStereoFx - AS.Flow - AS.KillGate - AS.LaunchGate - AS.Merge2.5 - AS.Mixer8ch - AS.MonoVUmeter - AS.Multiple2.5 - AS.PhaserFx - AS.QuadVCA - AS.ReverbFx - AS.ReverbStereoFx - AS.SEQ16 - AS.SawOsc - AS.SignalDelay - AS.SineOsc - AS.Steps - AS.SuperDriveFx - AS.TremoloFx - AS.TremoloStereoFx - AS.TriLFO - AS.TriggersMKI - AS.TriggersMKII - AS.VCA - AS.WaveShaper - AS.StereoVUmeter - AudibleInstruments.Braids - AudibleInstruments.Elements - AudibleInstruments.Tides - AudibleInstruments.Clouds - AudibleInstruments.Warps - AudibleInstruments.Rings - AudibleInstruments.Links - AudibleInstruments.Kinks - AudibleInstruments.Shades - AudibleInstruments.Branches - AudibleInstruments.Blinds - AudibleInstruments.Veils - AudibleInstruments.Frames - Autodafe.Multiple18 - Autodafe.Multiple28 - Autodafe.LFOWidget - Autodafe.Keyboard - Autodafe.BPMClock - Autodafe.ClockDivider - Autodafe.SEQ8 - Autodafe.SEQ16 - Autodafe.TriggerSeq - Autodafe.FixedFilter - Autodafe.MultiModeFilter - Autodafe.FormantFilter - Autodafe.FoldBack - Autodafe.BitCrusher - Autodafe.PhaserFx - Autodafe.ChorusFx - Autodafe.ReverbFx - BaconMusic.Glissinator - BaconMusic.PolyGnome - BaconMusic.QuantEyes - BaconMusic.SampleDelay - BaconMusic.SortaChorus - BaconMusic.ChipNoise - BaconMusic.ChipWaves - BaconMusic.ChipYourWave - BaconMusic.KarplusStrongPoly - BaconMusic.ALingADing - BaconMusic.Bitulator - Befaco.ABC - Befaco.DualAtenuverter - Befaco.EvenVCO - Befaco.Mixer - Befaco.Rampage - Befaco.SlewLimiter - Befaco.SpringReverb - Bidoo.DTROY - Bidoo.BORDL - Bidoo.MU - Bidoo.TOCANTE - Bidoo.CHUTE - Bidoo.LATE - Bidoo.LOURDE - Bidoo.ACNE - Bidoo.DUKE - Bidoo.MOIRE - Bidoo.FORK - Bidoo.TIARE - Bidoo.CLACOS - Bidoo.ANTN - Bidoo.LIMBO - Bidoo.PERCO - Bidoo.BAR - Bidoo.ZINC - Bidoo.VOID - Bidoo.SIGMA - Bidoo.CANARD - Bidoo.DFUZE - Bidoo.OUAIVE - Bidoo.RABBIT - Bogaudio.VCO - Bogaudio.XCO - Bogaudio.Additator - Bogaudio.FMOp - Bogaudio.LFO - Bogaudio.EightFO - Bogaudio.DADSRH - Bogaudio.DADSRHPlus - Bogaudio.DGate - Bogaudio.Shaper - Bogaudio.ShaperPlus - Bogaudio.ADSR - Bogaudio.Follow - Bogaudio.Mix4 - Bogaudio.Mix8 - Bogaudio.VCM - Bogaudio.Pan - Bogaudio.XFade - Bogaudio.VCA - Bogaudio.VCAmp - Bogaudio.Analyzer - Bogaudio.VU - Bogaudio.Detune - Bogaudio.Stack - Bogaudio.Reftone - Bogaudio.Bool - Bogaudio.CVD - Bogaudio.FlipFlop - Bogaudio.Manual - Bogaudio.Mult - Bogaudio.Noise - Bogaudio.Offset - Bogaudio.SampleHold - Bogaudio.Sums - Bogaudio.Switch - Bogaudio.Lag - Bogaudio.RM - Bogaudio.Test - Bogaudio.Test2 - Bogaudio.ThreeHP - Bogaudio.SixHP - Bogaudio.EightHP - Bogaudio.TenHP - Bogaudio.TwelveHP - Bogaudio.ThirteenHP - Bogaudio.FifteenHP - Bogaudio.EighteenHP - Bogaudio.TwentyHP - Bogaudio.TwentyTwoHP - Bogaudio.TwentyFiveHP - Bogaudio.ThirtyHP - CastleRocktronics.Cubefader - cf.trSEQ - cf.LEDSEQ - cf.L3DS3Q - cf.SLIDERSEQ - cf.PLAYER - cf.STEPS - cf.METRO - cf.EACH - cf.FOUR - cf.PEAK - cf.MONO - cf.STEREO - cf.MASTER - cf.SUB - cf.CUBE - cf.PATCH - cf.LEDS - cf.DAVE - com-soundchasing-stochasm.Resonator - computerscare.ComputerscareDebug - computerscare.ComputerscarePatchSequencer - DHE-Modules.BoosterStage - DHE-Modules.Cubic - DHE-Modules.Hostage - DHE-Modules.Stage - DHE-Modules.Swave - DHE-Modules.Upstage - DrumKit.BD9 - DrumKit.Snare - DrumKit.ClosedHH - DrumKit.OpenHH - DrumKit.DMX - ESeries.E340 - ErraticInstruments.MPEToCV - ErraticInstruments.QuadMPEToCV - FrankBuss.Formula - FrozenWasteland.BPMLFO - FrozenWasteland.BPMLFO2 - FrozenWasteland.DamianLillard - FrozenWasteland.EverlastingGlottalStopper - FrozenWasteland.HairPick - FrozenWasteland.LissajousLFO - FrozenWasteland.MrBlueSky - FrozenWasteland.TheOneRingModulator - FrozenWasteland.PhasedLockedLoop - FrozenWasteland.PortlandWeather - FrozenWasteland.QuadEuclideanRhythm - FrozenWasteland.QuadGolombRulerRhythm - FrozenWasteland.QuantussyCell - FrozenWasteland.RouletteLFO - FrozenWasteland.SeriouslySlowLFO - FrozenWasteland.VoxInhumana - FrozenWasteland.CDCSeriouslySlowLFO - Fundamental.8vert - Fundamental.ADSR - Fundamental.Delay - Fundamental.LFO - Fundamental.LFO2 - Fundamental.Mutes - Fundamental.SEQ3 - Fundamental.SequentialSwitch1 - Fundamental.SequentialSwitch2 - Fundamental.Scope - Fundamental.Unity - Fundamental.VCA - Fundamental.VCA-1 - Fundamental.VCF - Fundamental.VCMixer - Fundamental.VCO - Fundamental.VCO2 - Geodesics.BlackHoles - Geodesics.Pulsars - Geodesics.Branes - Geodesics.Ions - Geodesics.BlankLogo - Geodesics.BlankInfo - Gratrix.VCO_F1 - Gratrix.VCO_F2 - Gratrix.VCF_F1 - Gratrix.VCA_F1 - Gratrix.ADSR_F1 - Gratrix.Chord_G1 - Gratrix.Octave_G1 - Gratrix.Fade_G1 - Gratrix.Fade_G2 - Gratrix.Binary_G1 - Gratrix.Seq_G1 - Gratrix.Keys_G1 - Gratrix.VU_G1 - Gratrix.Blank_03 - Gratrix.Blank_06 - Gratrix.Blank_09 - Gratrix.Blank_12 - HetrickCV.TwoToFour - HetrickCV.AnalogToDigital - HetrickCV.ASR - HetrickCV.Bitshift - HetrickCV.BlankPanel - HetrickCV.Boolean3 - HetrickCV.Comparator - HetrickCV.Contrast - HetrickCV.Crackle - HetrickCV.Delta - HetrickCV.DigitalToAnalog - HetrickCV.Dust - HetrickCV.Exponent - HetrickCV.FlipFlop - HetrickCV.FlipPan - HetrickCV.GateJunction - HetrickCV.LogicCombine - HetrickCV.RandomGates - HetrickCV.Rotator - HetrickCV.Scanner - HetrickCV.Waveshape - huaba.EQ3 - huaba.ABBus - ImpromptuModular.Tact - ImpromptuModular.TwelveKey - ImpromptuModular.Clocked - ImpromptuModular.MidiFile - ImpromptuModular.PhraseSeq16 - ImpromptuModular.PhraseSeq32 - ImpromptuModular.GateSeq64 - ImpromptuModular.WriteSeq32 - ImpromptuModular.WriteSeq64 - ImpromptuModular.BigButtonSeq - ImpromptuModular.SemiModularSynth - ImpromptuModular.BlankPanel - JE.SimpleWaveFolder - JE.RingModulator - JW_Modules.Cat - JW_Modules.BouncyBalls - JW_Modules.FullScope - JW_Modules.GridSeq - JW_Modules.Quantizer - JW_Modules.MinMax - JW_Modules.NoteSeq - JW_Modules.SimpleClock - JW_Modules.ThingThing - JW_Modules.WavHead - JW_Modules.XYPad - Koralfx.Beatovnik - Koralfx.Mixovnik - Koralfx.Nullovnik4 - Koralfx.Nullovnik6 - Koralfx.Presetovnik - Koralfx.Quantovnik - Koralfx.Scorovnik - LindenbergResearch.SimpleFilter - LindenbergResearch.MS20Filter - LindenbergResearch.AlmaFilter - LindenbergResearch.ReShaper - LindenbergResearch.BlankPanel - LindenbergResearch.BlankPanelM1 - LindenbergResearch.VCO - LindenbergResearch.Westcoast (preview) - LOGinstruments.constant - LOGinstruments.constant2 - LOGinstruments.Speck - LOGinstruments.Britix - LOGinstruments.Compa - LOGinstruments.LessMess - LOGinstruments.Velvet - LOGinstruments.Crystal - mental.MentalSubMixer - mental.MentalMults - mental.MentalMixer - mental.MentalFold - mental.MentalClip - mental.MentalGates - mental.MentalABSwitches - mental.MentalQuantiser - mental.MentalChord - mental.MentalMuxes - mental.MentalLogic - mental.MentalButtons - mental.MentalSums - mental.MentalPitchShift - mental.MentalClockDivider - mental.MentalCartesian - mental.MentalPatchMatrix - mental.MentalBinaryDecoder - mental.MentalSwitch8 - mental.MentalMux8 - mental.MentalCounters - mental.MentalKnobs - mental.MentalGateMaker - mental.MentalMasterClock - mental.MentalPatchNotes - mental.MentalQuadLFO - mental.MentalRadioButtons - moDllz.MIDIPoly - moDllz.TwinGlider - moDllz.MIDIdualCV - moDllz.XBender - modular80.Logistiker - mscHack.MasterClockx4 - mscHack.Seq_3x16x16 - mscHack.SEQ_6x32x16 - mscHack.Seq_Triad2 - mscHack.SEQ_Envelope_8 - mscHack.Maude_221 - mscHack.ARP700 - mscHack.SynthDrums - mscHack.XFade - mscHack.Mix_1x4_Stereo - mscHack.Mix_2x4_Stereo - mscHack.Mix_4x4_Stereo - mscHack.Mix_24_4_4 - mscHack.StepDelay - mscHack.PingPong - mscHack.Osc_3Ch - mscHack.Compressor - mscHack.Alienz - mscHack.ASAF8 - mscHack.Dronez - mscHack.Mixer_9_3_4 - mscHack.Mixer_16_4_4 - mscHack.Mixer_24_4_4 - mscHack.Morze - mscHack.OSC_WaveMorph_3 - mscHack.Windz - mtsch_plugins.Sum - mtsch_plugins.Rationals - mtsch_plugins.TriggerPanic - NauModular.Tension - NauModular.Function - NauModular.Perlin - NauModular.S_h_it - NauModular.BitHammer - NauModular.Osc - ML_modules.Quantizer - ML_modules.Quantum - ML_modules.TrigBuf - ML_modules.SeqSwitch - ML_modules.SeqSwitch2 - ML_modules.ShiftRegister - ML_modules.ShiftRegister2 - ML_modules.FreeVerb - ML_modules.Sum8 - ML_modules.Sum8mk2 - ML_modules.SH8 - ML_modules.Constants - ML_modules.Counter - ML_modules.TrigDelay - ML_modules.BPMdetect - ML_modules.VoltMeter - ML_modules.OctaFlop - ML_modules.OctaTrig - ML_modules.OctaSwitch - ML_modules.TrigSwitch - ML_modules.TrigSwitch2 - ML_modules.TrigSwitch3 - ML_modules.TrigSwitch3_2 - Nohmad.Noise - Nohmad.StrangeAttractors - Ohmer.KlokSpid - Ohmer.RKD - Ohmer.RKDBRK - Ohmer.Metriks - Ohmer.Splitter1x9 - Ohmer.BlankPanel1 - Ohmer.BlankPanel2 - Ohmer.BlankPanel4 - Ohmer.BlankPanel8 - Ohmer.BlankPanel16 - Ohmer.BlankPanel32 - add PG-Instruments.PGSEQ3 - add PG-Instruments.PGPanner - add PG-Instruments.PGQuadPanner - add PG-Instruments.PGOctPanner - add PG-Instruments.PGVCF - add PG-Instruments.PGStereoVCF - add PG-Instruments.PGEcho - add PG-Instruments.PGStereoEcho - add PG-Instruments.PGStereoPingPongEcho - Qwelk.Automaton - Qwelk.Byte - Qwelk.Chaos - Qwelk.Column - Qwelk.Gate - Qwelk.Or - Qwelk.Not - Qwelk.Xor - Qwelk.Mix - Qwelk.News - Qwelk.Scaler - Qwelk.Wrap - Qwelk.XFade - RJModules.Supersaw - RJModules.TwinLFO - RJModules.Noise - RJModules.RangeLFO - RJModules.BitCrush - RJModules.Widener - RJModules.FilterDelay - RJModules.Sidechain - RJModules.Stutter - RJModules.Filter - RJModules.Filters - RJModules.Notch - RJModules.Integers - RJModules.Floats - RJModules.Randoms - RJModules.LRMixer - RJModules.Mono - RJModules.Volumes - RJModules.Panner - RJModules.Panners - RJModules.BPM - RJModules.Button - RJModules.Buttons - RJModules.Splitter - RJModules.Splitters - RJModules.Displays - RJModules.Range - SerialRacker.MidiMultiplexer - SonusModular.Addiction - SonusModular.Bitter - SonusModular.Bymidside - SonusModular.Campione - SonusModular.Chainsaw - SonusModular.Ctrl - SonusModular.Deathcrush - SonusModular.Harmony - SonusModular.Ladrone - SonusModular.Luppolo - SonusModular.Luppolo3 - SonusModular.Micromacro - SonusModular.Multimulti - SonusModular.Oktagon - SonusModular.Osculum - SonusModular.Paramath - SonusModular.Piconoise - SonusModular.Pusher - SonusModular.Ringo - SonusModular.Scramblase - SonusModular.Twoff - SonusModular.Yabp - Southpole.Abr - Southpole.Annuli - Southpole.Aux - Southpole.Balaclava - Southpole.Bandana - Southpole.Blank1HP - Southpole.Blank2HP - Southpole.Blank4HP - Southpole.Blank8HP - Southpole.Blank16HP - Southpole.Blank42HP - Southpole.But - Southpole.CornrowsX - Southpole.DeuxEtageres - Southpole.Etagere - Southpole.Falls - Southpole.Ftagn - Southpole.Fuse - Southpole.Gnome - Southpole.Piste - Southpole.Pulse - Southpole.Rakes - Southpole.Riemann - Southpole.Smoke - Southpole.Snake - Southpole.Sns - Southpole.Splash - Southpole.Sssh - Southpole.Wriggle - Southpole-parasites.Annuli - Southpole-parasites.Splash - squinkylabs-plug1.Booty - squinkylabs-plug1.Vocal - squinkylabs-plug1.VocalFilter - squinkylabs-plug1.ColoredNoise - squinkylabs-plug1.Tremolo - squinkylabs-plug1.CPU_Hog - squinkylabs-plug1.ThreadBoost - SubmarineFree.AG106 - SubmarineFree.BB120 - SubmarineFree.FF110 - SubmarineFree.FF120 - SubmarineFree.FF212 - SubmarineFree.LA108 - SubmarineFree.LD106 - SubmarineFree.NG112 - SubmarineFree.OG106 - SubmarineFree.PG112 - SubmarineFree.PO101 - SubmarineFree.PO102 - SubmarineFree.PO204 - SubmarineFree.WK101 - SubmarineFree.WK205 - SubmarineFree.XF101 - SubmarineFree.XF102 - SubmarineFree.XF104 - SubmarineFree.XF201 - SubmarineFree.XF202 - SubmarineFree.XG106 - SubmarineFree.BP101 - SubmarineFree.BP102 - SubmarineFree.BP104 - SubmarineFree.BP108 - SubmarineFree.BP110 - SubmarineFree.BP112 - SubmarineFree.BP116 - SubmarineFree.BP120 - SubmarineFree.BP124 - SubmarineFree.BP132 - SynthKit.Addition - SynthKit.Subtraction - SynthKit.And - SynthKit.Or - SynthKit.M1x8 - SynthKit.M1x8CV - SynthKit.ClockDivider - SynthKit.RotatingClockDivider - SynthKit.RotatingClockDivider2 - SynthKit.PrimeClockDivider - SynthKit.FibonacciClockDivider - SynthKit.Seq4 - SynthKit.Seq8 - Template.MyModule - TheXOR.Klee - TheXOR.M581 - TheXOR.Z8K - TheXOR.Renato - TheXOR.Spiralone - TheXOR.Burst - TheXOR.Uncertain - TheXOR.PwmClock - TheXOR.Quantizer - TheXOR.Attenuator - TheXOR.Boole - TheXOR.Switch - TheXOR.Mplex - trowaSoft.TrigSeq - trowaSoft.TrigSeq64 - trowaSoft.VoltSeq - trowaSoft.OscCV - trowaSoft.MultiScope - trowaSoft.MultiOscillator - unless_modules.Piong - unless_modules.Markov - Valley.Topograph - Valley.UGraph - Valley.Dexter - Valley.Plateau # License All additional source code added by me is placed under the [MIT](https://en.wikipedia.org/wiki/MIT_License) license. # How to build Prerequisites: - GNU Bash (tested with MSYS1.0 / bash v2.04.0(1)) - GNU make (tested with v3.79.1) - Microsoft Visual Studio C++ compiler toolchain (tested with v19.00.24225.1) - Steinberg VST2.4 SDK If you want to build the dependent libraries, you may need additional SDKs. Precompiled libs can be found in the `dep/lib/msvc/` folder. ``` $ git clone https://github.com/bsp2/VeeSeeVSTRack.git ``` ``` $ cd VeeSeeVSTRack/ ``` (contains the source codes and MSVC-precompiled libraries) Edit `dep/yac/install_msvc.mk` and adjust the `LIB_INSTALL_PREFIX`, `WINDDK_PATH`, `VCTK`, `W32API_INC`, `W32API_LIB` as required. ``` $ alias m="make -j 20 makefile.msvc" $ m lib $ cd plugins $ m bin $ cd .. ``` Edit `vst2_common_msvc_pre.mk` and adjust the VST2 SDK path ``` $ m bin ``` If the build succeeded, the effect and instrument plugin DLLs can now be found in the `vst2_bin/` folder. Last but not least, please don't ask me for the VST2 SDK. It is not permitted to redistribute it and Steinberg has discontinued it. I heard that the `aeffect.h` / `aeffectx.h` files are still included in the VST3 SDK. ## Dynamically loaded plugins ``` $ m clean $ m shared_lib ``` (creates `plugins/Rack_shared.lib`) ``` $ cd plugins/community/repos/ $ m bin $ mv ../../../../vst2_bin/plugins//plugin.dll ``` (and don't forget to copy the `res/` directory to `vst2_bin/plugins/`!) ## Dynamically loaded plugins (via plugin SDK) 1. Install the `Microsoft Visual Studio 2017 Community Edition` IDE 2. Download the [VeeSeeVSTRack plugin SDK](https://github.com/bsp2/releases/raw/master/vsvr/VeeSeeVSTRack_SDK-03Sep2018.7z) 3. Open the solution file (`example\Template_shared\vs2017\Template_shared\Template_shared.sln`) 4. Make sure that the `Release` / `x64` configuration is selected 5. Rebuild the solution to create the "plugin.dll" file. # VCV Rack For more info about VCV rack, see https://vcvrack.com/ # Support Keep in mind that this is NOT AN OFFICIAL VCV RACK RELEASE. Please DO NOT contact the VCV Rack team if you need any support. You may get some support at https://www.kvraudio.com/forum/viewtopic.php?f=23&t=507216 ~bsp