b0VIM 8.0aJ\nV isaacstau.local~isaacs/dev/js/tar/lib/mkdir.jsutf-8 3210#"! UtpHad;`_>%q\A=<,   p l k [ E A ? > v M L 6 z ^ D . - | b B 7 * $  M > 7 6 &   ~|{2kKpY9' :/ r?Z;: typeof gid === 'number' && const doChown = typeof uid === 'number' && const gid = opt.gid const uid = opt.uid const needChmod = (mode & umask) !== 0 const mode = opt.mode | 0o0700 const umask = opt.umask // then we'll need an explicit chmod // if there's any overlap between mask and mode,const mkdirSync = module.exports.sync = (dir, opt) => {} } mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) created = created || part } else { }) cb(er) else return cb(new SymlinkError(part, part + '/' + parts.join('/'))) else if (st.isSymbolicLink()) }) fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) return cb(er) if (er) fs.unlink(part, er => { else if (unlink) mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) else if (st.isDirectory()) cb(statEr) if (statEr) fs.lstat(part, (statEr, st) => { return cb(new CwdError(cwd, er.code)) (er.code === 'ENOTDIR' || er.code === 'ENOENT')) if (er.path && path.dirname(er.path) === cwd && if (er) {const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => er => {} fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) if (cache.get(part)) const part = base + '/' + p const p = parts.shift() return cb(null, created) if (!parts.length)const mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) => {} mkdir_(cwd, parts, mode, cache, unlink, cwd, null, done) const parts = sub.split(/\/|\\/) const sub = path.relative(cwd, dir) return mkdirp(dir, mode, done) if (preserve) }) done(er) er = new CwdError(dir, er && er.code || 'ENOTDIR') if (er || !st.isDirectory()) return fs.stat(dir, (er, st) => { if (dir === cwd) return done() if (cache && cache.get(dir) === true) } } cb() else fs.chmod(dir, mode, cb) else if (needChmod) chownr(created, uid, gid, er => done(er)) if (created && doChown) cache.set(dir, true) else { cb(er) if (er) const done = (er, created) => { const cwd = opt.cwd const cache = opt.cache const unlink = opt.unlink const preserve = opt.preserve ( uid !== opt.processUid || gid !== opt.processGid ) typeof gid === 'number' && const doChown = typeof uid === 'number' && const gid = opt.gid const uid = opt.uid const needChmod = (mode & umask) !== 0 const mode = opt.mode | 0o0700 const umask = opt.umask // then we'll need an explicit chmod // if there's any overlap between mask and mode,const mkdir = module.exports = (dir, opt, cb) => {} } return 'CwdError' get name () { } this.code = code this.path = path super(code + ': Cannot cd into \'' + path + '\'') constructor (path, code) {class CwdError extends Error {} } return 'SylinkError' get name () { } this.symlink = symlink this.path = path super('Cannot extract through symbolic link') constructor (symlink, path) {class SymlinkError extends Error {const chownr = require('chownr')const path = require('path')const fs = require('fs')const mkdirp = require('mkdirp')// passing around state in a gazillion args.// TODO: This should probably be a class, not functionally// wrapper around mkdirp for tar's needs.'use strict'adO HpZY;"qp[H/% } r n m ] 5 4  q p W H G =  ^ 4 3  j H *  }} return done(created) } } return new SymlinkError(part, part + '/' + parts.join('/')) } else if (st.isSymbolicLink()) continue cache.set(part, true) created = created || part fs.mkdirSync(part, mode) fs.unlinkSync(part) } else if (unlink) { continue cache.set(part, true) if (st.isDirectory()) { const st = fs.lstatSync(part) return new CwdError(cwd, er.code) (er.code === 'ENOTDIR' || er.code === 'ENOENT')) if (er.path && path.dirname(er.path) === cwd && } catch (er) { cache.set(part, true) created = created || part fs.mkdirSync(part, mode) try { continue if (cache.get(part)) p = parts.shift()) { p && (part += '/' + p); for (let p = parts.shift(), part = cwd; let created = null const parts = sub.split(/\/|\\/) const sub = path.relative(cwd, dir) return done(mkdirp.sync(dir, mode)) if (preserve) } return done() } throw new CwdError(dir, code) if (!ok) } finally { code = er.code } catch (er) { ok = fs.statSync(dir).isDirectory() try { let code = 'ENOTDIR' let ok = false if (dir === cwd) { return done() if (cache && cache.get(dir) === true) } fs.chmodSync(dir, mode) if (needChmod) chownr.sync(created, uid, gid) if (created && doChown) cache.set(dir, true) const done = (created) => { const cwd = opt.cwd const cache = opt.cache const unlink = opt.unlink const preserve = opt.preserve ( uid !== opt.processUid || gid !== opt.processGid )