Abstract plugin system