 events = require "eventemitter2"
 assert = require "assert"
 colors = require "colors"
+crypto = require "crypto"
 nconf = require "nconf"
 https = require "https"
 path = require "path"

                    context.scripts.push file if ext ".js"
                    context.sheets.push file if ext ".css"
            return next bowerings.cached context

    # is asynchronously wired in, so consult with `async` package.
    # Please be sure invoke the `next` arg to proceed, if relevant.
    register: (kernel, router, next) ->
        hash = crypto.createHash "md5"
        hash.update @constructor.identify()
        id = hash.digest("hex").toString()
        bowerings = (@constructor.bowerings ?= [])
        options = _.map(bowerings, (b) -> b.options)
        options = _.merge Object.create({}), options...
        directory = kernel?.scope?.envPath "pub", "bower", id
        assert _.isString(directory), "failed to get dir"
        options.directory = bowerings.directory = directory
        targets = _.map bowerings, (b) -> b.target
        running = "Running Bower install for %s service"
        identify = @constructor?.identify().toString()
        logger.info running.grey, identify.underline
        @installation kernel, targets, options, next

    # This server side method is called on the context prior to the
    # context being compiled and flushed down to the client site. The
