text: var core = require('./core');
  var fs = require('fs');
  var path = require('path');
  var caller = require('./caller.js');
  var nodeModulesPaths = require('./node-modules-paths.js');
  
  module.exports = function (x, opts) {
      if (!opts) opts = {};
      var isFile = opts.isFile || function (file) {
          try { var stat = fs.statSync(file) }
          catch (err) { if (err && err.code === 'ENOENT') return false }
          return stat.isFile() || stat.isFIFO();
      };
      var readFileSync = opts.readFileSync || fs.readFileSync;
      
      var extensions = opts.extensions || [ '.js' ];
      var y = opts.basedir || path.dirname(caller());
  
      opts.paths = opts.paths || [];
  
      if (x.match(/^(?:\.\.?\/|\/|([A-Za-z]:)?\\)/)) {
          var m = loadAsFileSync(path.resolve(y, x))
              || loadAsDirectorySync(path.resolve(y, x));
          if (m) return m;
      } else {
          var n = loadNodeModulesSync(x, y);
          if (n) return n;
      }
      
      if (core[x]) return x;
      
      throw new Error("Cannot find module '" + x + "' from '" + y + "'");
      
      function loadAsFileSync (x) {
          if (isFile(x)) {
              return x;
          }
          
          for (var i = 0; i < extensions.length; i++) {
              var file = x + extensions[i];
              if (isFile(file)) {
                  return file;
              }
          }
      }
      
      function loadAsDirectorySync (x) {
          var pkgfile = path.join(x, '/package.json');
          if (isFile(pkgfile)) {
              var body = readFileSync(pkgfile, 'utf8');
              try {
                  var pkg = JSON.parse(body);
                  if (opts.packageFilter) {
                      pkg = opts.packageFilter(pkg, x);
                  }
                  
                  if (pkg.main) {
                      var m = loadAsFileSync(path.resolve(x, pkg.main));
                      if (m) return m;
                      var n = loadAsDirectorySync(path.resolve(x, pkg.main));
                      if (n) return n;
                  }
              }
              catch (err) {}
          }
          
          return loadAsFileSync(path.join( x, '/index'));
      }
      
      function loadNodeModulesSync (x, start) {
          var dirs = nodeModulesPaths(start, opts);
          for (var i = 0; i < dirs.length; i++) {
              var dir = dirs[i];
              var m = loadAsFileSync(path.join( dir, '/', x));
              if (m) return m;
              var n = loadAsDirectorySync(path.join( dir, '/', x ));
              if (n) return n;
          }
      }
  };
  