filer/dist/filer.map

1 line
319 KiB
Plaintext

{"version":3,"sources":["../lib/nodash.js","path.js","shared.js","constants.js","errors.js","../node_modules/node-libs-browser/node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/isarray/index.js","../node_modules/node-libs-browser/node_modules/buffer/index.js","buffer.js","providers/indexeddb.js","../node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","providers/websql.js","../node_modules/node-libs-browser/node_modules/process/browser.js","../lib/async.js","providers/memory.js","providers/index.js","shell/environment.js","encoding.js","shell/shell.js","../lib/eventemitter.js","../lib/intercom.js","fs-watcher.js","directory-entry.js","open-file-description.js","super-node.js","node.js","stats.js","filesystem/implementation.js","filesystem/interface.js","index.js"],"names":["ArrayProto","Array","prototype","nativeForEach","forEach","nativeIndexOf","indexOf","nativeSome","some","ObjProto","Object","hasOwnProperty","nativeKeys","keys","breaker","has","obj","key","call","TypeError","push","size","length","identity","value","each","iterator","context","i","any","result","index","list","contains","target","Wrapped","nodash","isArray","module","exports","normalizeArray","parts","allowAboveRoot","up","last","splice","unshift","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","arguments","path","charAt","split","filter","p","join","normalize","isAbsolute","trailingSlash","substr","paths","slice","relative","from","to","trim","arr","start","end","fromParts","toParts","Math","min","samePartsLength","outputParts","concat","dirname","root","dir","basename","ext","f","extname","isNull","sep","delimiter","guid","replace","c","r","random","v","toString","toUpperCase","nop","u8toArray","u8","array","len","O_READ","O_WRITE","O_CREATE","O_EXCLUSIVE","O_TRUNCATE","O_APPEND","XATTR_CREATE","XATTR_REPLACE","FILE_SYSTEM_NAME","FILE_STORE_NAME","IDB_RO","IDB_RW","WSQL_VERSION","WSQL_SIZE","WSQL_DESC","MODE_FILE","MODE_DIRECTORY","MODE_SYMBOLIC_LINK","MODE_META","SYMLOOP_MAX","BINARY_MIME_TYPE","JSON_MIME_TYPE","ROOT_DIRECTORY_NAME","FS_FORMAT","FS_NOCTIME","FS_NOMTIME","FS_NODUPEIDCHECK","O_FLAGS","FS_READY","FS_PENDING","FS_ERROR","SUPER_NODE_ID","STDIN","STDOUT","STDERR","FIRST_DESCRIPTOR","ENVIRONMENT","TMP","PATH","errors","e","errno","errName","defaultMessage","FilerError","msg","Error","name","code","message","stack","create","constructor","pathInfo","FilerBuffer","subject","encoding","nonZero","ArrayBuffer","Uint8Array","Buffer","require","Errors","indexedDB","global","mozIndexedDB","webkitIndexedDB","msIndexedDB","IndexedDBContext","db","mode","transaction","objectStore","clear","callback","request","onsuccess","event","onerror","error","_get","get","getObject","getBuffer","err","arrayBuffer","_put","put","putObject","putBuffer","uint8BackedBuffer","buffer","delete","IndexedDB","isSupported","open","that","openRequest","onupgradeneeded","objectStoreNames","deleteObjectStore","createObjectStore","EINVAL","getReadOnlyContext","getReadWriteContext","chars","lookup","charCodeAt","encode","arraybuffer","bytes","base64","substring","decode","bufferLength","encoded1","encoded2","encoded3","encoded4","base64ArrayBuffer","WebSQLContext","isReadOnly","getTransaction","onError","onSuccess","executeSql","rows","item","data","JSON","parse","json","stringify","WebSQL","openDatabase","createIndex","process","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","setTimeout","clearTimeout","runTimeout","fun","runClearTimeout","marker","queue","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","timeout","run","nextTick","args","Item","apply","title","browser","env","argv","version","versions","noop","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","async","setImmediate","fn","eachSeries","completed","iterate","forEachSeries","define","amd","asyncCallback","createDB","pool","getOrCreate","MemoryContext","readOnly","Memory","Default","Fallback","NotSupported","defaults","Environment","set","buf","string","Path","Encoding","Shell","fs","options","defineProperty","enumerable","cd","stat","stats","ENOTDIR","type","pwd","sh","readFile","cmd","Function","touch","createFile","writeFile","updateTimes","now","Date","atime","date","mtime","utimes","updateOnly","cat","files","all","append","ls","pathname","readdir","entries","getDirEntry","entry","links","nlinks","modified","recursive","items","contents","rm","remove","unlink","rmdir","ENOTEMPTY","map","tempDir","tmp","mkdir","mkdirp","_mkdirp","isDirectory","isFile","parent","removeItem","EventEmitter","createInterface","space","methods","trigger","self","pvt","_on","_off","_trigger","pub","throttle","delay","extend","a","b","localStorage","window","getItem","setItem","Intercom","origin","lastMessage","receivedIDs","previousValues","storageHandler","_onStorageEvent","document","attachEvent","addEventListener","_transaction","TIMEOUT","WAIT","executed","listening","waitTimer","lock","activeLock","INDEX_LOCK","unlock","_cleanup_emit","threshold","THRESHOLD_TTL_EMIT","changed","messages","INDEX_EMIT","timestamp","_cleanup_once","ttl","table","INDEX_ONCE","_once_expired","THRESHOLD_TTL_ONCE","_localStorageChanged","field","currentValue","id","payload","_emit","String","packet","supported","destroy","getInstance","intercom","FSWatcher","recursivePathPrefix","onchange","filename_","persistent_","recursive_","close","DirectoryEntry","OpenFileDescription","flags","position","Constants","SuperNode","ctime","rnode","Node","xattrs","blksize","undefined","nblocks","ensureID","prop","Stats","fileNode","devName","node","dev","isSymbolicLink","isSocket","isFIFO","isCharacterDevice","isBlockDevice","_","isAbsolutePath","isNullPath","standard_check_result_cb","update_node_times","times","update","complete","changes","make_node","parentPath","parentNode","parentNodeData","create_node_in_parent","parentDirectoryNode","find_node","check_if_node_exists","EEXIST","ENOENT","create_node","update_parent_node_data","update_time","followedCount","read_root_directory_node","superNode","EFILESYSTEMERROR","check_root_directory_node","rootDirectoryNode","read_parent_directory_data","get_node_from_parent_directory_data","parentDirectoryData","nodeId","is_symbolic_link","ELOOP","follow_symbolic_link","set_extended_attribute","path_or_fd","flag","set_xattr","xattr","ENOATTR","ensure_root_directory","directoryNode","directoryData","ensure_super_node","existingNode","write_directory_node","write_directory_data","make_directory","check_if_directory_exists","update_parent_directory_data","remove_directory","EBUSY","check_if_node_is_directory","check_if_directory_is_empty","remove_directory_entry_from_parent_directory_node","remove_directory_node","remove_directory_data","open_file","directoryEntry","fileData","EISDIR","set_file_node","read_directory_data","check_if_file_exists","check_if_symbolic_link","write_file_node","write_file_data","fill","update_directory_data","handle_update_result","replace_data","ofd","offset","return_nbytes","update_file_node","newData","copy","write_data","update_file_data","EIO","_position","newSize","max","read_file_data","read_data","handle_file_data","stat_file","fstat_file","lstat_file","link_node","oldpath","newpath","oldname","oldParentPath","newname","newParentPath","oldDirectoryNode","oldDirectoryData","newDirectoryNode","newDirectoryData","read_directory_entry","check_if_new_file_exists","read_new_directory_data","check_if_old_file_exists","read_old_directory_data","unlink_node","delete_file_data","read_directory","handle_directory_data","make_symbolic_link","srcpath","dstpath","read_link","check_if_symbolic","truncate_file","truncate_file_data","ftruncate_file","utimes_file","update_times","futimes_file","setxattr_file","fsetxattr_file","getxattr_file","get_xattr","fgetxattr_file","removexattr_file","remove_xattr","fremovexattr_file","validate_flags","validate_file_options","enc","fileMode","pathCheck","check_result","openFileDescription","fd","allocDescriptor","openFiles","EBADF","releaseDescriptor","mknod","fstat","link","read","wrapped_cb","bytesRead","cleanup","fstatResult","nbytes","write","appendFile","exists","cb","getxattr","fgetxattr","setxattr","fsetxattr","removexattr","fremovexattr","lseek","whence","update_descriptor_position","currentTime","futimes","rename","unlink_old_node","symlink","readlink","lstat","truncate","ftruncate","ensureRootDirectory","providers","defaultGuidFn","impl","maybeCallback","FileSystem","provider","forceFormatting","readyState","stdin","stdout","stderr","nextDescriptor","queueOrRun","operation","runQueued","bind","watch","listener","watcher","wrappedGuidFn","guidWithCheck","broadcastChanges","change","wrappedContext","methodName","openReadWriteContext","openReadOnlyContext","lastArgIndex","missingCallback","fnArgs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;;AAOA,IAAIA,aAAaC,MAAMC,SAAvB;AACA,IAAIC,gBAAgBH,WAAWI,OAA/B;AACA,IAAIC,gBAAgBL,WAAWM,OAA/B;AACA,IAAIC,aAAaP,WAAWQ,IAA5B;;AAEA,IAAIC,WAAWC,OAAOR,SAAtB;AACA,IAAIS,iBAAiBF,SAASE,cAA9B;AACA,IAAIC,aAAaF,OAAOG,IAAxB;;AAEA,IAAIC,UAAU,EAAd;;AAEA,SAASC,GAAT,CAAaC,GAAb,EAAkBC,GAAlB,EAAuB;AACrB,SAAON,eAAeO,IAAf,CAAoBF,GAApB,EAAyBC,GAAzB,CAAP;AACD;;AAED,IAAIJ,OAAOD,cAAc,UAASI,GAAT,EAAc;AACrC,MAAIA,QAAQN,OAAOM,GAAP,CAAZ,EAAyB,MAAM,IAAIG,SAAJ,CAAc,gBAAd,CAAN;AACzB,MAAIN,OAAO,EAAX;AACA,OAAK,IAAII,GAAT,IAAgBD,GAAhB;AAAqB,QAAID,IAAIC,GAAJ,EAASC,GAAT,CAAJ,EAAmBJ,KAAKO,IAAL,CAAUH,GAAV;AAAxC,GACA,OAAOJ,IAAP;AACD,CALD;;AAOA,SAASQ,IAAT,CAAcL,GAAd,EAAmB;AACjB,MAAIA,OAAO,IAAX,EAAiB,OAAO,CAAP;AACjB,SAAQA,IAAIM,MAAJ,KAAe,CAACN,IAAIM,MAArB,GAA+BN,IAAIM,MAAnC,GAA4CT,KAAKG,GAAL,EAAUM,MAA7D;AACD;;AAED,SAASC,QAAT,CAAkBC,KAAlB,EAAyB;AACvB,SAAOA,KAAP;AACD;;AAED,SAASC,IAAT,CAAcT,GAAd,EAAmBU,QAAnB,EAA6BC,OAA7B,EAAsC;AACpC,MAAIC,CAAJ,EAAON,MAAP;AACA,MAAIN,OAAO,IAAX,EAAiB;AACjB,MAAIb,iBAAiBa,IAAIZ,OAAJ,KAAgBD,aAArC,EAAoD;AAClDa,QAAIZ,OAAJ,CAAYsB,QAAZ,EAAsBC,OAAtB;AACD,GAFD,MAEO,IAAIX,IAAIM,MAAJ,KAAe,CAACN,IAAIM,MAAxB,EAAgC;AACrC,SAAKM,IAAI,CAAJ,EAAON,SAASN,IAAIM,MAAzB,EAAiCM,IAAIN,MAArC,EAA6CM,GAA7C,EAAkD;AAChD,UAAIF,SAASR,IAAT,CAAcS,OAAd,EAAuBX,IAAIY,CAAJ,CAAvB,EAA+BA,CAA/B,EAAkCZ,GAAlC,MAA2CF,OAA/C,EAAwD;AACzD;AACF,GAJM,MAIA;AACL,QAAID,OAAOA,KAAKG,GAAL,CAAX;AACA,SAAKY,IAAI,CAAJ,EAAON,SAAST,KAAKS,MAA1B,EAAkCM,IAAIN,MAAtC,EAA8CM,GAA9C,EAAmD;AACjD,UAAIF,SAASR,IAAT,CAAcS,OAAd,EAAuBX,IAAIH,KAAKe,CAAL,CAAJ,CAAvB,EAAqCf,KAAKe,CAAL,CAArC,EAA8CZ,GAA9C,MAAuDF,OAA3D,EAAoE;AACrE;AACF;AACF;;AAED,SAASe,GAAT,CAAab,GAAb,EAAkBU,QAAlB,EAA4BC,OAA5B,EAAqC;AACnCD,eAAaA,WAAWH,QAAxB;AACA,MAAIO,SAAS,KAAb;AACA,MAAId,OAAO,IAAX,EAAiB,OAAOc,MAAP;AACjB,MAAIvB,cAAcS,IAAIR,IAAJ,KAAaD,UAA/B,EAA2C,OAAOS,IAAIR,IAAJ,CAASkB,QAAT,EAAmBC,OAAnB,CAAP;AAC3CF,OAAKT,GAAL,EAAU,UAASQ,KAAT,EAAgBO,KAAhB,EAAuBC,IAAvB,EAA6B;AACrC,QAAIF,WAAWA,SAASJ,SAASR,IAAT,CAAcS,OAAd,EAAuBH,KAAvB,EAA8BO,KAA9B,EAAqCC,IAArC,CAApB,CAAJ,EAAqE,OAAOlB,OAAP;AACtE,GAFD;AAGA,SAAO,CAAC,CAACgB,MAAT;AACD;;AAED,SAASG,QAAT,CAAkBjB,GAAlB,EAAuBkB,MAAvB,EAA+B;AAC7B,MAAIlB,OAAO,IAAX,EAAiB,OAAO,KAAP;AACjB,MAAIX,iBAAiBW,IAAIV,OAAJ,KAAgBD,aAArC,EAAoD,OAAOW,IAAIV,OAAJ,CAAY4B,MAAZ,KAAuB,CAAC,CAA/B;AACpD,SAAOL,IAAIb,GAAJ,EAAS,UAASQ,KAAT,EAAgB;AAC9B,WAAOA,UAAUU,MAAjB;AACD,GAFM,CAAP;AAGD;;AAED,SAASC,OAAT,CAAiBX,KAAjB,EAAwB;AACtB,OAAKA,KAAL,GAAaA,KAAb;AACD;AACDW,QAAQjC,SAAR,CAAkBa,GAAlB,GAAwB,UAASE,GAAT,EAAc;AACpC,SAAOF,IAAI,KAAKS,KAAT,EAAgBP,GAAhB,CAAP;AACD,CAFD;AAGAkB,QAAQjC,SAAR,CAAkB+B,QAAlB,GAA6B,UAASC,MAAT,EAAiB;AAC5C,SAAOD,SAAS,KAAKT,KAAd,EAAqBU,MAArB,CAAP;AACD,CAFD;AAGAC,QAAQjC,SAAR,CAAkBmB,IAAlB,GAAyB,YAAW;AAClC,SAAOA,KAAK,KAAKG,KAAV,CAAP;AACD,CAFD;;AAIA,SAASY,MAAT,CAAgBZ,KAAhB,EAAuB;AACrB;AACA,SAAQA,SAAS,QAAOA,KAAP,yCAAOA,KAAP,MAAgB,QAAzB,IAAqC,CAACvB,MAAMoC,OAAN,CAAcb,KAAd,CAAtC,IAA8Db,eAAeO,IAAf,CAAoBM,KAApB,EAA2B,aAA3B,CAA/D,GACHA,KADG,GAEH,IAAIW,OAAJ,CAAYX,KAAZ,CAFJ;AAGD;;AAEDc,OAAOC,OAAP,GAAiBH,MAAjB;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAASI,cAAT,CAAwBC,KAAxB,EAA+BC,cAA/B,EAA+C;AAC7C;AACA,MAAIC,KAAK,CAAT;AACA,OAAK,IAAIf,IAAIa,MAAMnB,MAAN,GAAe,CAA5B,EAA+BM,KAAK,CAApC,EAAuCA,GAAvC,EAA4C;AAC1C,QAAIgB,OAAOH,MAAMb,CAAN,CAAX;AACA,QAAIgB,SAAS,GAAb,EAAkB;AAChBH,YAAMI,MAAN,CAAajB,CAAb,EAAgB,CAAhB;AACD,KAFD,MAEO,IAAIgB,SAAS,IAAb,EAAmB;AACxBH,YAAMI,MAAN,CAAajB,CAAb,EAAgB,CAAhB;AACAe;AACD,KAHM,MAGA,IAAIA,EAAJ,EAAQ;AACbF,YAAMI,MAAN,CAAajB,CAAb,EAAgB,CAAhB;AACAe;AACD;AACF;;AAED;AACA,MAAID,cAAJ,EAAoB;AAClB,WAAOC,IAAP,EAAaA,EAAb,EAAiB;AACfF,YAAMK,OAAN,CAAc,IAAd;AACD;AACF;;AAED,SAAOL,KAAP;AACD;;AAED;AACA;AACA,IAAIM,cACE,iEADN;AAEA,IAAIC,YAAY,SAAZA,SAAY,CAASC,QAAT,EAAmB;AACjC,MAAInB,SAASiB,YAAYG,IAAZ,CAAiBD,QAAjB,CAAb;AACA,SAAO,CAACnB,OAAO,CAAP,KAAa,EAAd,EAAkBA,OAAO,CAAP,KAAa,EAA/B,EAAmCA,OAAO,CAAP,KAAa,EAAhD,EAAoDA,OAAO,CAAP,KAAa,EAAjE,CAAP;AACD,CAHD;;AAKA;AACA,SAASqB,OAAT,GAAmB;AACjB,MAAIC,eAAe,EAAnB;AAAA,MACIC,mBAAmB,KADvB;;AAGA,OAAK,IAAIzB,IAAI0B,UAAUhC,MAAV,GAAmB,CAAhC,EAAmCM,KAAK,CAAC,CAAN,IAAW,CAACyB,gBAA/C,EAAiEzB,GAAjE,EAAsE;AACpE;AACA,QAAI2B,OAAQ3B,KAAK,CAAN,GAAW0B,UAAU1B,CAAV,CAAX,GAA0B,GAArC;;AAEA;AACA,QAAI,OAAO2B,IAAP,KAAgB,QAAhB,IAA4B,CAACA,IAAjC,EAAuC;AACrC;AACD;;AAEDH,mBAAeG,OAAO,GAAP,GAAaH,YAA5B;AACAC,uBAAmBE,KAAKC,MAAL,CAAY,CAAZ,MAAmB,GAAtC;AACD;;AAED;AACA;;AAEA;AACAJ,iBAAeZ,eAAeY,aAAaK,KAAb,CAAmB,GAAnB,EAAwBC,MAAxB,CAA+B,UAASC,CAAT,EAAY;AACvE,WAAO,CAAC,CAACA,CAAT;AACD,GAF6B,CAAf,EAEX,CAACN,gBAFU,EAEQO,IAFR,CAEa,GAFb,CAAf;;AAIA,SAAQ,CAACP,mBAAmB,GAAnB,GAAyB,EAA1B,IAAgCD,YAAjC,IAAkD,GAAzD;AACD;;AAED;AACA,SAASS,SAAT,CAAmBN,IAAnB,EAAyB;AACvB,MAAIO,aAAaP,KAAKC,MAAL,CAAY,CAAZ,MAAmB,GAApC;AAAA,MACIO,gBAAgBR,KAAKS,MAAL,CAAY,CAAC,CAAb,MAAoB,GADxC;;AAGA;AACAT,SAAOf,eAAee,KAAKE,KAAL,CAAW,GAAX,EAAgBC,MAAhB,CAAuB,UAASC,CAAT,EAAY;AACvD,WAAO,CAAC,CAACA,CAAT;AACD,GAFqB,CAAf,EAEH,CAACG,UAFE,EAEUF,IAFV,CAEe,GAFf,CAAP;;AAIA,MAAI,CAACL,IAAD,IAAS,CAACO,UAAd,EAA0B;AACxBP,WAAO,GAAP;AACD;AACD;;;;;;AAMA,SAAO,CAACO,aAAa,GAAb,GAAmB,EAApB,IAA0BP,IAAjC;AACD;;AAED,SAASK,IAAT,GAAgB;AACd,MAAIK,QAAQhE,MAAMC,SAAN,CAAgBgE,KAAhB,CAAsBhD,IAAtB,CAA2BoC,SAA3B,EAAsC,CAAtC,CAAZ;AACA,SAAOO,UAAUI,MAAMP,MAAN,CAAa,UAASC,CAAT,EAAY5B,KAAZ,EAAmB;AAC/C,WAAO4B,KAAK,OAAOA,CAAP,KAAa,QAAzB;AACD,GAFgB,EAEdC,IAFc,CAET,GAFS,CAAV,CAAP;AAGD;;AAED;AACA,SAASO,QAAT,CAAkBC,IAAlB,EAAwBC,EAAxB,EAA4B;AAC1BD,SAAO7B,QAAQY,OAAR,CAAgBiB,IAAhB,EAAsBJ,MAAtB,CAA6B,CAA7B,CAAP;AACAK,OAAK9B,QAAQY,OAAR,CAAgBkB,EAAhB,EAAoBL,MAApB,CAA2B,CAA3B,CAAL;;AAEA,WAASM,IAAT,CAAcC,GAAd,EAAmB;AACjB,QAAIC,QAAQ,CAAZ;AACA,WAAOA,QAAQD,IAAIjD,MAAnB,EAA2BkD,OAA3B,EAAoC;AAClC,UAAID,IAAIC,KAAJ,MAAe,EAAnB,EAAuB;AACxB;;AAED,QAAIC,MAAMF,IAAIjD,MAAJ,GAAa,CAAvB;AACA,WAAOmD,OAAO,CAAd,EAAiBA,KAAjB,EAAwB;AACtB,UAAIF,IAAIE,GAAJ,MAAa,EAAjB,EAAqB;AACtB;;AAED,QAAID,QAAQC,GAAZ,EAAiB,OAAO,EAAP;AACjB,WAAOF,IAAIL,KAAJ,CAAUM,KAAV,EAAiBC,MAAMD,KAAN,GAAc,CAA/B,CAAP;AACD;;AAED,MAAIE,YAAYJ,KAAKF,KAAKX,KAAL,CAAW,GAAX,CAAL,CAAhB;AACA,MAAIkB,UAAUL,KAAKD,GAAGZ,KAAH,CAAS,GAAT,CAAL,CAAd;;AAEA,MAAInC,SAASsD,KAAKC,GAAL,CAASH,UAAUpD,MAAnB,EAA2BqD,QAAQrD,MAAnC,CAAb;AACA,MAAIwD,kBAAkBxD,MAAtB;AACA,OAAK,IAAIM,IAAI,CAAb,EAAgBA,IAAIN,MAApB,EAA4BM,GAA5B,EAAiC;AAC/B,QAAI8C,UAAU9C,CAAV,MAAiB+C,QAAQ/C,CAAR,CAArB,EAAiC;AAC/BkD,wBAAkBlD,CAAlB;AACA;AACD;AACF;;AAED,MAAImD,cAAc,EAAlB;AACA,OAAK,IAAInD,IAAIkD,eAAb,EAA8BlD,IAAI8C,UAAUpD,MAA5C,EAAoDM,GAApD,EAAyD;AACvDmD,gBAAY3D,IAAZ,CAAiB,IAAjB;AACD;;AAED2D,gBAAcA,YAAYC,MAAZ,CAAmBL,QAAQT,KAAR,CAAcY,eAAd,CAAnB,CAAd;;AAEA,SAAOC,YAAYnB,IAAZ,CAAiB,GAAjB,CAAP;AACD;;AAED,SAASqB,OAAT,CAAiB1B,IAAjB,EAAuB;AACrB,MAAIzB,SAASkB,UAAUO,IAAV,CAAb;AAAA,MACI2B,OAAOpD,OAAO,CAAP,CADX;AAAA,MAEIqD,MAAMrD,OAAO,CAAP,CAFV;;AAIA,MAAI,CAACoD,IAAD,IAAS,CAACC,GAAd,EAAmB;AACjB;AACA,WAAO,GAAP;AACD;;AAED,MAAIA,GAAJ,EAAS;AACP;AACAA,UAAMA,IAAInB,MAAJ,CAAW,CAAX,EAAcmB,IAAI7D,MAAJ,GAAa,CAA3B,CAAN;AACD;;AAED,SAAO4D,OAAOC,GAAd;AACD;;AAED,SAASC,QAAT,CAAkB7B,IAAlB,EAAwB8B,GAAxB,EAA6B;AAC3B,MAAIC,IAAItC,UAAUO,IAAV,EAAgB,CAAhB,CAAR;AACA;AACA,MAAI8B,OAAOC,EAAEtB,MAAF,CAAS,CAAC,CAAD,GAAKqB,IAAI/D,MAAlB,MAA8B+D,GAAzC,EAA8C;AAC5CC,QAAIA,EAAEtB,MAAF,CAAS,CAAT,EAAYsB,EAAEhE,MAAF,GAAW+D,IAAI/D,MAA3B,CAAJ;AACD;AACD;AACA,SAAOgE,MAAM,EAAN,GAAW,GAAX,GAAiBA,CAAxB;AACD;;AAED,SAASC,OAAT,CAAiBhC,IAAjB,EAAuB;AACrB,SAAOP,UAAUO,IAAV,EAAgB,CAAhB,CAAP;AACD;;AAED,SAASO,UAAT,CAAoBP,IAApB,EAA0B;AACxB,MAAGA,KAAKC,MAAL,CAAY,CAAZ,MAAmB,GAAtB,EAA2B;AACzB,WAAO,IAAP;AACD;AACD,SAAO,KAAP;AACD;;AAED,SAASgC,MAAT,CAAgBjC,IAAhB,EAAsB;AACpB,MAAI,CAAC,KAAKA,IAAN,EAAYjD,OAAZ,CAAoB,IAApB,MAAkC,CAAC,CAAvC,EAA0C;AACxC,WAAO,IAAP;AACD;AACD,SAAO,KAAP;AACD;;AAED;AACA;;AAEAgC,OAAOC,OAAP,GAAiB;AACfsB,aAAWA,SADI;AAEfV,WAASA,OAFM;AAGfS,QAAMA,IAHS;AAIfO,YAAUA,QAJK;AAKfsB,OAAK,GALU;AAMfC,aAAW,GANI;AAOfT,WAASA,OAPM;AAQfG,YAAUA,QARK;AASfG,WAASA,OATM;AAUfzB,cAAYA,UAVG;AAWf0B,UAAQA;AAXO,CAAjB;;ACnNA,SAASG,IAAT,GAAgB;AACd,SAAO,uCAAuCC,OAAvC,CAA+C,OAA/C,EAAwD,UAASC,CAAT,EAAY;AACzE,QAAIC,IAAIlB,KAAKmB,MAAL,KAAc,EAAd,GAAiB,CAAzB;AAAA,QAA4BC,IAAIH,KAAK,GAAL,GAAWC,CAAX,GAAgBA,IAAE,GAAF,GAAM,GAAtD;AACA,WAAOE,EAAEC,QAAF,CAAW,EAAX,CAAP;AACD,GAHM,EAGJC,WAHI,EAAP;AAID;;AAED,SAASC,GAAT,GAAe,CAAE;;AAEjB;;;AAGA,SAASC,SAAT,CAAmBC,EAAnB,EAAuB;AACrB,MAAIC,QAAQ,EAAZ;AACA,MAAIC,MAAMF,GAAG/E,MAAb;AACA,OAAI,IAAIM,IAAI,CAAZ,EAAeA,IAAI2E,GAAnB,EAAwB3E,GAAxB,EAA6B;AAC3B0E,UAAM1E,CAAN,IAAWyE,GAAGzE,CAAH,CAAX;AACD;AACD,SAAO0E,KAAP;AACD;;AAEDhE,OAAOC,OAAP,GAAiB;AACfoD,QAAMA,IADS;AAEfS,aAAWA,SAFI;AAGfD,OAAKA;AAHU,CAAjB;;ACrBA,IAAIK,SAAS,MAAb;AACA,IAAIC,UAAU,OAAd;AACA,IAAIC,WAAW,QAAf;AACA,IAAIC,cAAc,WAAlB;AACA,IAAIC,aAAa,UAAjB;AACA,IAAIC,WAAW,QAAf;AACA,IAAIC,eAAe,QAAnB;AACA,IAAIC,gBAAgB,SAApB;;AAEAzE,OAAOC,OAAP,GAAiB;AACfyE,oBAAkB,OADH;;AAGfC,mBAAiB,OAHF;;AAKfC,UAAQ,UALO;AAMfC,UAAQ,WANO;;AAQfC,gBAAc,GARC;AASfC,aAAW,IAAI,IAAJ,GAAW,IATP;AAUfC,aAAW,oBAVI;;AAYfC,aAAW,MAZI;AAafC,kBAAgB,WAbD;AAcfC,sBAAoB,SAdL;AAefC,aAAW,MAfI;;AAiBfC,eAAa,EAjBE;;AAmBfC,oBAAkB,0BAnBH;AAoBfC,kBAAgB,kBApBD;;AAsBfC,uBAAqB,GAtBN,EAsBW;;AAE1B;AACAC,aAAW,QAzBI;AA0BfC,cAAY,SA1BG;AA2BfC,cAAY,SA3BG;AA4BfC,oBAAkB,kBA5BH;;AA8Bf;AACA1B,UAAQA,MA/BO;AAgCfC,WAASA,OAhCM;AAiCfC,YAAUA,QAjCK;AAkCfC,eAAaA,WAlCE;AAmCfC,cAAYA,UAnCG;AAoCfC,YAAUA,QApCK;;AAsCfsB,WAAS;AACP,SAAK,CAAC3B,MAAD,CADE;AAEP,UAAM,CAACA,MAAD,EAASC,OAAT,CAFC;AAGP,SAAK,CAACA,OAAD,EAAUC,QAAV,EAAoBE,UAApB,CAHE;AAIP,UAAM,CAACH,OAAD,EAAUD,MAAV,EAAkBE,QAAlB,EAA4BE,UAA5B,CAJC;AAKP,UAAM,CAACH,OAAD,EAAUC,QAAV,EAAoBC,WAApB,EAAiCC,UAAjC,CALC;AAMP,WAAO,CAACH,OAAD,EAAUD,MAAV,EAAkBE,QAAlB,EAA4BC,WAA5B,EAAyCC,UAAzC,CANA;AAOP,SAAK,CAACH,OAAD,EAAUC,QAAV,EAAoBG,QAApB,CAPE;AAQP,UAAM,CAACJ,OAAD,EAAUD,MAAV,EAAkBE,QAAlB,EAA4BG,QAA5B,CARC;AASP,UAAM,CAACJ,OAAD,EAAUC,QAAV,EAAoBC,WAApB,EAAiCE,QAAjC,CATC;AAUP,WAAO,CAACJ,OAAD,EAAUD,MAAV,EAAkBE,QAAlB,EAA4BC,WAA5B,EAAyCE,QAAzC;AAVA,GAtCM;;AAmDfC,gBAAcA,YAnDC;AAoDfC,iBAAeA,aApDA;;AAsDfqB,YAAU,OAtDK;AAuDfC,cAAY,SAvDG;AAwDfC,YAAU,OAxDK;;AA0DfC,iBAAe,sCA1DA;;AA4Df;AACAC,SAAO,CA7DQ;AA8DfC,UAAQ,CA9DO;AA+DfC,UAAQ,CA/DO;AAgEfC,oBAAkB,CAhEH;;AAkEfC,eAAa;AACXC,SAAK,MADM;AAEXC,UAAM;AAFK;AAlEE,CAAjB;;ACTA,IAAIC,SAAS,EAAb;AACA;AACE;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAdF,EAeE,kCAfF;AAgBE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAvBF;AAwBE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAhCF,EAiCE,4CAjCF;AAkCE;AACA;AACA;AACA;AACA;AACA,qCAvCF;AAwCE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BApDF;AAqDE;AACA;AACA;AACA,8CAxDF;AAyDE;AACA,kCA1DF;AA2DE;AACA,kBA5DF;AA6DE;AACA;AACA;AACA;;AAEA;;;AAGA,8BArEF,EAsEE,qFAtEF,EAuEE,uCAvEF,EAyEE3I,OAzEF,CAyEU,UAAS4I,CAAT,EAAY;AACpBA,MAAIA,EAAEvF,KAAF,CAAQ,GAAR,CAAJ;AACA,MAAIwF,QAAQ,CAACD,EAAE,CAAF,CAAb;AACA,MAAIE,UAAUF,EAAE,CAAF,CAAd;AACA,MAAIG,iBAAiBH,EAAE,CAAF,CAArB;;AAEA,WAASI,UAAT,CAAoBC,GAApB,EAAyB9F,IAAzB,EAA+B;AAC7B+F,UAAMpI,IAAN,CAAW,IAAX;;AAEA,SAAKqI,IAAL,GAAYL,OAAZ;AACA,SAAKM,IAAL,GAAYN,OAAZ;AACA,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKQ,OAAL,GAAeJ,OAAOF,cAAtB;AACA,QAAG5F,IAAH,EAAS;AACP,WAAKA,IAAL,GAAYA,IAAZ;AACD;AACD,SAAKmG,KAAL,GAAc,IAAIJ,KAAJ,CAAU,KAAKG,OAAf,CAAD,CAA0BC,KAAvC;AACD;AACDN,aAAWlJ,SAAX,GAAuBQ,OAAOiJ,MAAP,CAAcL,MAAMpJ,SAApB,CAAvB;AACAkJ,aAAWlJ,SAAX,CAAqB0J,WAArB,GAAmCR,UAAnC;AACAA,aAAWlJ,SAAX,CAAqB+F,QAArB,GAAgC,YAAW;AACzC,QAAI4D,WAAW,KAAKtG,IAAL,GAAa,SAAS,KAAKA,IAAd,GAAqB,IAAlC,GAA0C,EAAzD;AACA,WAAO,KAAKgG,IAAL,GAAY,IAAZ,GAAmB,KAAKE,OAAxB,GAAkCI,QAAzC;AACD,GAHD;;AAKA;AACAd,SAAOG,OAAP,IAAkBH,OAAOE,KAAP,IAAgBG,UAAlC;AACD,CApGD;;AAsGA9G,OAAOC,OAAP,GAAiBwG,MAAjB;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7vDA,SAASe,WAAT,CAAsBC,OAAtB,EAA+BC,QAA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","file":"filer.map","sourceRoot":"../src","sourcesContent":["// Cherry-picked bits of underscore.js, lodash.js\n\n/**\n * Lo-Dash 2.4.0 <http://lodash.com/>\n * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <http://lodash.com/license>\n */\nvar ArrayProto = Array.prototype;\nvar nativeForEach = ArrayProto.forEach;\nvar nativeIndexOf = ArrayProto.indexOf;\nvar nativeSome = ArrayProto.some;\n\nvar ObjProto = Object.prototype;\nvar hasOwnProperty = ObjProto.hasOwnProperty;\nvar nativeKeys = Object.keys;\n\nvar breaker = {};\n\nfunction has(obj, key) {\n return hasOwnProperty.call(obj, key);\n}\n\nvar keys = nativeKeys || function(obj) {\n if (obj !== Object(obj)) throw new TypeError('Invalid object');\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n return keys;\n};\n\nfunction size(obj) {\n if (obj == null) return 0;\n return (obj.length === +obj.length) ? obj.length : keys(obj).length;\n}\n\nfunction identity(value) {\n return value;\n}\n\nfunction each(obj, iterator, context) {\n var i, length;\n if (obj == null) return;\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n var keys = keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;\n }\n }\n};\n\nfunction any(obj, iterator, context) {\n iterator || (iterator = identity);\n var result = false;\n if (obj == null) return result;\n if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n each(obj, function(value, index, list) {\n if (result || (result = iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n};\n\nfunction contains(obj, target) {\n if (obj == null) return false;\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n return any(obj, function(value) {\n return value === target;\n });\n};\n\nfunction Wrapped(value) {\n this.value = value;\n}\nWrapped.prototype.has = function(key) {\n return has(this.value, key);\n};\nWrapped.prototype.contains = function(target) {\n return contains(this.value, target);\n};\nWrapped.prototype.size = function() {\n return size(this.value);\n};\n\nfunction nodash(value) {\n // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor\n return (value && typeof value == 'object' && !Array.isArray(value) && hasOwnProperty.call(value, '__wrapped__'))\n ? value\n : new Wrapped(value);\n}\n\nmodule.exports = nodash;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// Based on https://github.com/joyent/node/blob/41e53e557992a7d552a8e23de035f9463da25c99/lib/path.js\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?)([\\s\\S]+\\/(?!$)|\\/)?((?:\\.{1,2}$|[\\s\\S]+?)?(\\.[^.\\/]*)?)$/;\nvar splitPath = function(filename) {\n var result = splitPathRe.exec(filename);\n return [result[1] || '', result[2] || '', result[3] || '', result[4] || ''];\n};\n\n// path.resolve([from ...], to)\nfunction resolve() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n // XXXidbfs: we don't have process.cwd() so we use '/' as a fallback\n var path = (i >= 0) ? arguments[i] : '/';\n\n // Skip empty and invalid entries\n if (typeof path !== 'string' || !path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/').filter(function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n}\n\n// path.normalize(path)\nfunction normalize(path) {\n var isAbsolute = path.charAt(0) === '/',\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/').filter(function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n /*\n if (path && trailingSlash) {\n path += '/';\n }\n */\n\n return (isAbsolute ? '/' : '') + path;\n}\n\nfunction join() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return normalize(paths.filter(function(p, index) {\n return p && typeof p === 'string';\n }).join('/'));\n}\n\n// path.relative(from, to)\nfunction relative(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n}\n\nfunction dirname(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n}\n\nfunction basename(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n // XXXidbfs: node.js just does `return f`\n return f === \"\" ? \"/\" : f;\n}\n\nfunction extname(path) {\n return splitPath(path)[3];\n}\n\nfunction isAbsolute(path) {\n if(path.charAt(0) === '/') {\n return true;\n }\n return false;\n}\n\nfunction isNull(path) {\n if (('' + path).indexOf('\\u0000') !== -1) {\n return true;\n }\n return false;\n}\n\n// XXXidbfs: we don't support path.exists() or path.existsSync(), which\n// are deprecated, and need a FileSystem instance to work. Use fs.stat().\n\nmodule.exports = {\n normalize: normalize,\n resolve: resolve,\n join: join,\n relative: relative,\n sep: '/',\n delimiter: ':',\n dirname: dirname,\n basename: basename,\n extname: extname,\n isAbsolute: isAbsolute,\n isNull: isNull\n};\n","function guid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n }).toUpperCase();\n}\n\nfunction nop() {}\n\n/**\n * Convert a Uint8Array to a regular array\n */\nfunction u8toArray(u8) {\n var array = [];\n var len = u8.length;\n for(var i = 0; i < len; i++) {\n array[i] = u8[i];\n }\n return array;\n}\n\nmodule.exports = {\n guid: guid,\n u8toArray: u8toArray,\n nop: nop\n};\n","var O_READ = 'READ';\nvar O_WRITE = 'WRITE';\nvar O_CREATE = 'CREATE';\nvar O_EXCLUSIVE = 'EXCLUSIVE';\nvar O_TRUNCATE = 'TRUNCATE';\nvar O_APPEND = 'APPEND';\nvar XATTR_CREATE = 'CREATE';\nvar XATTR_REPLACE = 'REPLACE';\n\nmodule.exports = {\n FILE_SYSTEM_NAME: 'local',\n\n FILE_STORE_NAME: 'files',\n\n IDB_RO: 'readonly',\n IDB_RW: 'readwrite',\n\n WSQL_VERSION: \"1\",\n WSQL_SIZE: 5 * 1024 * 1024,\n WSQL_DESC: \"FileSystem Storage\",\n\n MODE_FILE: 'FILE',\n MODE_DIRECTORY: 'DIRECTORY',\n MODE_SYMBOLIC_LINK: 'SYMLINK',\n MODE_META: 'META',\n\n SYMLOOP_MAX: 10,\n\n BINARY_MIME_TYPE: 'application/octet-stream',\n JSON_MIME_TYPE: 'application/json',\n\n ROOT_DIRECTORY_NAME: '/', // basename(normalize(path))\n\n // FS Mount Flags\n FS_FORMAT: 'FORMAT',\n FS_NOCTIME: 'NOCTIME',\n FS_NOMTIME: 'NOMTIME',\n FS_NODUPEIDCHECK: 'FS_NODUPEIDCHECK',\n\n // FS File Open Flags\n O_READ: O_READ,\n O_WRITE: O_WRITE,\n O_CREATE: O_CREATE,\n O_EXCLUSIVE: O_EXCLUSIVE,\n O_TRUNCATE: O_TRUNCATE,\n O_APPEND: O_APPEND,\n\n O_FLAGS: {\n 'r': [O_READ],\n 'r+': [O_READ, O_WRITE],\n 'w': [O_WRITE, O_CREATE, O_TRUNCATE],\n 'w+': [O_WRITE, O_READ, O_CREATE, O_TRUNCATE],\n 'wx': [O_WRITE, O_CREATE, O_EXCLUSIVE, O_TRUNCATE],\n 'wx+': [O_WRITE, O_READ, O_CREATE, O_EXCLUSIVE, O_TRUNCATE],\n 'a': [O_WRITE, O_CREATE, O_APPEND],\n 'a+': [O_WRITE, O_READ, O_CREATE, O_APPEND],\n 'ax': [O_WRITE, O_CREATE, O_EXCLUSIVE, O_APPEND],\n 'ax+': [O_WRITE, O_READ, O_CREATE, O_EXCLUSIVE, O_APPEND]\n },\n\n XATTR_CREATE: XATTR_CREATE,\n XATTR_REPLACE: XATTR_REPLACE,\n\n FS_READY: 'READY',\n FS_PENDING: 'PENDING',\n FS_ERROR: 'ERROR',\n\n SUPER_NODE_ID: '00000000-0000-0000-0000-000000000000',\n\n // Reserved File Descriptors for streams\n STDIN: 0,\n STDOUT: 1,\n STDERR: 2,\n FIRST_DESCRIPTOR: 3,\n\n ENVIRONMENT: {\n TMP: '/tmp',\n PATH: ''\n }\n};\n","var errors = {};\n[\n /**\n * node.js errors - we only use some of these, add as needed.\n */\n //'-1:UNKNOWN:unknown error',\n //'0:OK:success',\n //'1:EOF:end of file',\n //'2:EADDRINFO:getaddrinfo error',\n //'3:EACCES:permission denied',\n //'4:EAGAIN:resource temporarily unavailable',\n //'5:EADDRINUSE:address already in use',\n //'6:EADDRNOTAVAIL:address not available',\n //'7:EAFNOSUPPORT:address family not supported',\n //'8:EALREADY:connection already in progress',\n '9:EBADF:bad file descriptor',\n '10:EBUSY:resource busy or locked',\n //'11:ECONNABORTED:software caused connection abort',\n //'12:ECONNREFUSED:connection refused',\n //'13:ECONNRESET:connection reset by peer',\n //'14:EDESTADDRREQ:destination address required',\n //'15:EFAULT:bad address in system call argument',\n //'16:EHOSTUNREACH:host is unreachable',\n //'17:EINTR:interrupted system call',\n '18:EINVAL:invalid argument',\n //'19:EISCONN:socket is already connected',\n //'20:EMFILE:too many open files',\n //'21:EMSGSIZE:message too long',\n //'22:ENETDOWN:network is down',\n //'23:ENETUNREACH:network is unreachable',\n //'24:ENFILE:file table overflow',\n //'25:ENOBUFS:no buffer space available',\n //'26:ENOMEM:not enough memory',\n '27:ENOTDIR:not a directory',\n '28:EISDIR:illegal operation on a directory',\n //'29:ENONET:machine is not on the network',\n // errno 30 skipped, as per https://github.com/rvagg/node-errno/blob/master/errno.js\n //'31:ENOTCONN:socket is not connected',\n //'32:ENOTSOCK:socket operation on non-socket',\n //'33:ENOTSUP:operation not supported on socket',\n '34:ENOENT:no such file or directory',\n //'35:ENOSYS:function not implemented',\n //'36:EPIPE:broken pipe',\n //'37:EPROTO:protocol error',\n //'38:EPROTONOSUPPORT:protocol not supported',\n //'39:EPROTOTYPE:protocol wrong type for socket',\n //'40:ETIMEDOUT:connection timed out',\n //'41:ECHARSET:invalid Unicode character',\n //'42:EAIFAMNOSUPPORT:address family for hostname not supported',\n // errno 43 skipped, as per https://github.com/rvagg/node-errno/blob/master/errno.js\n //'44:EAISERVICE:servname not supported for ai_socktype',\n //'45:EAISOCKTYPE:ai_socktype not supported',\n //'46:ESHUTDOWN:cannot send after transport endpoint shutdown',\n '47:EEXIST:file already exists',\n //'48:ESRCH:no such process',\n //'49:ENAMETOOLONG:name too long',\n //'50:EPERM:operation not permitted',\n '51:ELOOP:too many symbolic links encountered',\n //'52:EXDEV:cross-device link not permitted',\n '53:ENOTEMPTY:directory not empty',\n //'54:ENOSPC:no space left on device',\n '55:EIO:i/o error',\n //'56:EROFS:read-only file system',\n //'57:ENODEV:no such device',\n //'58:ESPIPE:invalid seek',\n //'59:ECANCELED:operation canceled',\n\n /**\n * Filer specific errors\n */\n '1000:ENOTMOUNTED:not mounted',\n '1001:EFILESYSTEMERROR:missing super node, use \\'FORMAT\\' flag to format filesystem.',\n '1002:ENOATTR:attribute does not exist'\n\n].forEach(function(e) {\n e = e.split(':');\n var errno = +e[0];\n var errName = e[1];\n var defaultMessage = e[2];\n\n function FilerError(msg, path) {\n Error.call(this);\n\n this.name = errName;\n this.code = errName;\n this.errno = errno;\n this.message = msg || defaultMessage;\n if(path) {\n this.path = path;\n }\n this.stack = (new Error(this.message)).stack;\n }\n FilerError.prototype = Object.create(Error.prototype);\n FilerError.prototype.constructor = FilerError;\n FilerError.prototype.toString = function() {\n var pathInfo = this.path ? (', \\'' + this.path + '\\'') : '';\n return this.name + ': ' + this.message + pathInfo;\n };\n\n // We expose the error as both Errors.EINVAL and Errors[18]\n errors[errName] = errors[errno] = FilerError;\n});\n\nmodule.exports = errors;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","function FilerBuffer (subject, encoding, nonZero) {\n\n // Automatically turn ArrayBuffer into Uint8Array so that underlying\n // Buffer code doesn't just throw away and ignore ArrayBuffer data.\n if (subject instanceof ArrayBuffer) {\n subject = new Uint8Array(subject);\n }\n\n return new Buffer(subject, encoding, nonZero);\n};\n\n// Inherit prototype from Buffer\nFilerBuffer.prototype = Object.create(Buffer.prototype);\nFilerBuffer.prototype.constructor = FilerBuffer;\n\n// Also copy static methods onto FilerBuffer ctor\nObject.keys(Buffer).forEach(function (p) {\n if (Buffer.hasOwnProperty(p)) {\n FilerBuffer[p] = Buffer[p];\n }\n});\n\nmodule.exports = FilerBuffer;\n","var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;\nvar FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;\nvar IDB_RW = require('../constants.js').IDB_RW;\nvar IDB_RO = require('../constants.js').IDB_RO;\nvar Errors = require('../errors.js');\nvar FilerBuffer = require('../buffer.js');\n\nvar indexedDB = global.indexedDB ||\n global.mozIndexedDB ||\n global.webkitIndexedDB ||\n global.msIndexedDB;\n\nfunction IndexedDBContext(db, mode) {\n var transaction = db.transaction(FILE_STORE_NAME, mode);\n this.objectStore = transaction.objectStore(FILE_STORE_NAME);\n}\n\nIndexedDBContext.prototype.clear = function(callback) {\n try {\n var request = this.objectStore.clear();\n request.onsuccess = function(event) {\n callback();\n };\n request.onerror = function(error) {\n callback(error);\n };\n } catch(e) {\n callback(e);\n }\n};\n\nfunction _get(objectStore, key, callback) {\n try {\n var request = objectStore.get(key);\n request.onsuccess = function onsuccess(event) {\n var result = event.target.result;\n callback(null, result);\n };\n request.onerror = function onerror(error) {\n callback(error);\n };\n } catch(e) {\n callback(e);\n }\n}\nIndexedDBContext.prototype.getObject = function(key, callback) {\n _get(this.objectStore, key, callback);\n};\nIndexedDBContext.prototype.getBuffer = function(key, callback) {\n _get(this.objectStore, key, function(err, arrayBuffer) {\n if(err) {\n return callback(err);\n }\n callback(null, new FilerBuffer(arrayBuffer));\n });\n};\n\nfunction _put(objectStore, key, value, callback) {\n try {\n var request = objectStore.put(value, key);\n request.onsuccess = function onsuccess(event) {\n var result = event.target.result;\n callback(null, result);\n };\n request.onerror = function onerror(error) {\n callback(error);\n };\n } catch(e) {\n callback(e);\n }\n}\nIndexedDBContext.prototype.putObject = function(key, value, callback) {\n _put(this.objectStore, key, value, callback);\n};\nIndexedDBContext.prototype.putBuffer = function(key, uint8BackedBuffer, callback) {\n _put(this.objectStore, key, uint8BackedBuffer.buffer, callback);\n};\n\nIndexedDBContext.prototype.delete = function(key, callback) {\n try {\n var request = this.objectStore.delete(key);\n request.onsuccess = function onsuccess(event) {\n var result = event.target.result;\n callback(null, result);\n };\n request.onerror = function(error) {\n callback(error);\n };\n } catch(e) {\n callback(e);\n }\n};\n\n\nfunction IndexedDB(name) {\n this.name = name || FILE_SYSTEM_NAME;\n this.db = null;\n}\nIndexedDB.isSupported = function() {\n return !!indexedDB;\n};\n\nIndexedDB.prototype.open = function(callback) {\n var that = this;\n\n // Bail if we already have a db open\n if(that.db) {\n return callback();\n }\n\n // NOTE: we're not using versioned databases.\n var openRequest = indexedDB.open(that.name);\n\n // If the db doesn't exist, we'll create it\n openRequest.onupgradeneeded = function onupgradeneeded(event) {\n var db = event.target.result;\n\n if(db.objectStoreNames.contains(FILE_STORE_NAME)) {\n db.deleteObjectStore(FILE_STORE_NAME);\n }\n db.createObjectStore(FILE_STORE_NAME);\n };\n\n openRequest.onsuccess = function onsuccess(event) {\n that.db = event.target.result;\n callback();\n };\n openRequest.onerror = function onerror(error) {\n callback(new Errors.EINVAL('IndexedDB cannot be accessed. If private browsing is enabled, disable it.'));\n };\n};\nIndexedDB.prototype.getReadOnlyContext = function() {\n // Due to timing issues in Chrome with readwrite vs. readonly indexeddb transactions\n // always use readwrite so we can make sure pending commits finish before callbacks.\n // See https://github.com/js-platform/filer/issues/128\n return new IndexedDBContext(this.db, IDB_RW);\n};\nIndexedDB.prototype.getReadWriteContext = function() {\n return new IndexedDBContext(this.db, IDB_RW);\n};\n\nmodule.exports = IndexedDB;\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(){\n \"use strict\";\n\n var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n // Use a lookup table to find the index.\n var lookup = new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i+1)];\n encoded3 = lookup[base64.charCodeAt(i+2)];\n encoded4 = lookup[base64.charCodeAt(i+3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n})();\n","var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;\nvar FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;\nvar WSQL_VERSION = require('../constants.js').WSQL_VERSION;\nvar WSQL_SIZE = require('../constants.js').WSQL_SIZE;\nvar WSQL_DESC = require('../constants.js').WSQL_DESC;\nvar Errors = require('../errors.js');\nvar FilerBuffer = require('../buffer.js');\nvar base64ArrayBuffer = require('base64-arraybuffer');\n\nfunction WebSQLContext(db, isReadOnly) {\n var that = this;\n this.getTransaction = function(callback) {\n if(that.transaction) {\n callback(that.transaction);\n return;\n }\n // Either do readTransaction() (read-only) or transaction() (read/write)\n db[isReadOnly ? 'readTransaction' : 'transaction'](function(transaction) {\n that.transaction = transaction;\n callback(transaction);\n });\n };\n}\n\nWebSQLContext.prototype.clear = function(callback) {\n function onError(transaction, error) {\n callback(error);\n }\n function onSuccess(transaction, result) {\n callback(null);\n }\n this.getTransaction(function(transaction) {\n transaction.executeSql(\"DELETE FROM \" + FILE_STORE_NAME + \";\",\n [], onSuccess, onError);\n });\n};\n\nfunction _get(getTransaction, key, callback) {\n function onSuccess(transaction, result) {\n // If the key isn't found, return null\n var value = result.rows.length === 0 ? null : result.rows.item(0).data;\n callback(null, value);\n }\n function onError(transaction, error) {\n callback(error);\n }\n getTransaction(function(transaction) {\n transaction.executeSql(\"SELECT data FROM \" + FILE_STORE_NAME + \" WHERE id = ? LIMIT 1;\",\n [key], onSuccess, onError);\n });\n}\nWebSQLContext.prototype.getObject = function(key, callback) {\n _get(this.getTransaction, key, function(err, result) {\n if(err) {\n return callback(err);\n }\n\n try {\n if(result) {\n result = JSON.parse(result);\n }\n } catch(e) {\n return callback(e);\n }\n\n callback(null, result);\n });\n};\nWebSQLContext.prototype.getBuffer = function(key, callback) {\n _get(this.getTransaction, key, function(err, result) {\n if(err) {\n return callback(err);\n }\n\n // Deal with zero-length ArrayBuffers, which will be encoded as ''\n if(result || result === '') {\n var arrayBuffer = base64ArrayBuffer.decode(result);\n result = new FilerBuffer(arrayBuffer);\n }\n\n callback(null, result);\n });\n};\n\nfunction _put(getTransaction, key, value, callback) {\n function onSuccess(transaction, result) {\n callback(null);\n }\n function onError(transaction, error) {\n callback(error);\n }\n getTransaction(function(transaction) {\n transaction.executeSql(\"INSERT OR REPLACE INTO \" + FILE_STORE_NAME + \" (id, data) VALUES (?, ?);\",\n [key, value], onSuccess, onError);\n });\n}\nWebSQLContext.prototype.putObject = function(key, value, callback) {\n var json = JSON.stringify(value);\n _put(this.getTransaction, key, json, callback);\n};\nWebSQLContext.prototype.putBuffer = function(key, uint8BackedBuffer, callback) {\n var base64 = base64ArrayBuffer.encode(uint8BackedBuffer.buffer);\n _put(this.getTransaction, key, base64, callback);\n};\n\nWebSQLContext.prototype.delete = function(key, callback) {\n function onSuccess(transaction, result) {\n callback(null);\n }\n function onError(transaction, error) {\n callback(error);\n }\n this.getTransaction(function(transaction) {\n transaction.executeSql(\"DELETE FROM \" + FILE_STORE_NAME + \" WHERE id = ?;\",\n [key], onSuccess, onError);\n });\n};\n\n\nfunction WebSQL(name) {\n this.name = name || FILE_SYSTEM_NAME;\n this.db = null;\n}\nWebSQL.isSupported = function() {\n return !!global.openDatabase;\n};\n\nWebSQL.prototype.open = function(callback) {\n var that = this;\n\n // Bail if we already have a db open\n if(that.db) {\n return callback();\n }\n\n var db = global.openDatabase(that.name, WSQL_VERSION, WSQL_DESC, WSQL_SIZE);\n if(!db) {\n callback(\"[WebSQL] Unable to open database.\");\n return;\n }\n\n function onError(transaction, error) {\n if (error.code === 5) {\n callback(new Errors.EINVAL('WebSQL cannot be accessed. If private browsing is enabled, disable it.'));\n }\n callback(error);\n }\n function onSuccess(transaction, result) {\n that.db = db;\n callback();\n }\n\n // Create the table and index we'll need to store the fs data.\n db.transaction(function(transaction) {\n function createIndex(transaction) {\n transaction.executeSql(\"CREATE INDEX IF NOT EXISTS idx_\" + FILE_STORE_NAME + \"_id\" +\n \" on \" + FILE_STORE_NAME + \" (id);\",\n [], onSuccess, onError);\n }\n transaction.executeSql(\"CREATE TABLE IF NOT EXISTS \" + FILE_STORE_NAME + \" (id unique, data TEXT);\",\n [], createIndex, onError);\n });\n};\nWebSQL.prototype.getReadOnlyContext = function() {\n return new WebSQLContext(this.db, true);\n};\nWebSQL.prototype.getReadWriteContext = function() {\n return new WebSQLContext(this.db, false);\n};\n\nmodule.exports = WebSQL;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*global setImmediate: false, setTimeout: false, console: false */\n\n/**\n * async.js shim, based on https://raw.github.com/caolan/async/master/lib/async.js Feb 18, 2014\n * Used under MIT - https://github.com/caolan/async/blob/master/LICENSE\n */\n\n(function () {\n\n var async = {};\n\n // async.js functions used in Filer\n\n //// nextTick implementation with browser-compatible fallback ////\n if (typeof process === 'undefined' || !(process.nextTick)) {\n if (typeof setImmediate === 'function') {\n async.nextTick = function (fn) {\n // not a direct alias for IE10 compatibility\n setImmediate(fn);\n };\n async.setImmediate = async.nextTick;\n }\n else {\n async.nextTick = function (fn) {\n setTimeout(fn, 0);\n };\n async.setImmediate = async.nextTick;\n }\n }\n else {\n async.nextTick = process.nextTick;\n if (typeof setImmediate !== 'undefined') {\n async.setImmediate = function (fn) {\n // not a direct alias for IE10 compatibility\n setImmediate(fn);\n };\n }\n else {\n async.setImmediate = async.nextTick;\n }\n }\n\n async.eachSeries = function (arr, iterator, callback) {\n callback = callback || function () {};\n if (!arr.length) {\n return callback();\n }\n var completed = 0;\n var iterate = function () {\n iterator(arr[completed], function (err) {\n if (err) {\n callback(err);\n callback = function () {};\n }\n else {\n completed += 1;\n if (completed >= arr.length) {\n callback();\n }\n else {\n iterate();\n }\n }\n });\n };\n iterate();\n };\n async.forEachSeries = async.eachSeries;\n\n // AMD / RequireJS\n if (typeof define !== 'undefined' && define.amd) {\n define([], function () {\n return async;\n });\n }\n // Node.js\n else if (typeof module !== 'undefined' && module.exports) {\n module.exports = async;\n }\n // included directly via <script> tag\n else {\n root.async = async;\n }\n\n}());\n","var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;\n// NOTE: prefer setImmediate to nextTick for proper recursion yielding.\n// see https://github.com/js-platform/filer/pull/24\nvar asyncCallback = require('../../lib/async.js').setImmediate;\n\n/**\n * Make shared in-memory DBs possible when using the same name.\n */\nvar createDB = (function() {\n var pool = {};\n return function getOrCreate(name) {\n if(!pool.hasOwnProperty(name)) {\n pool[name] = {};\n }\n return pool[name];\n };\n}());\n\nfunction MemoryContext(db, readOnly) {\n this.readOnly = readOnly;\n this.objectStore = db;\n}\n\nMemoryContext.prototype.clear = function(callback) {\n if(this.readOnly) {\n asyncCallback(function() {\n callback(\"[MemoryContext] Error: write operation on read only context\");\n });\n return;\n }\n var objectStore = this.objectStore;\n Object.keys(objectStore).forEach(function(key){\n delete objectStore[key];\n });\n asyncCallback(callback);\n};\n\n// Memory context doesn't care about differences between Object and Buffer\nMemoryContext.prototype.getObject =\nMemoryContext.prototype.getBuffer =\nfunction(key, callback) {\n var that = this;\n asyncCallback(function() {\n callback(null, that.objectStore[key]);\n });\n};\nMemoryContext.prototype.putObject =\nMemoryContext.prototype.putBuffer =\nfunction(key, value, callback) {\n if(this.readOnly) {\n asyncCallback(function() {\n callback(\"[MemoryContext] Error: write operation on read only context\");\n });\n return;\n }\n this.objectStore[key] = value;\n asyncCallback(callback);\n};\n\nMemoryContext.prototype.delete = function(key, callback) {\n if(this.readOnly) {\n asyncCallback(function() {\n callback(\"[MemoryContext] Error: write operation on read only context\");\n });\n return;\n }\n delete this.objectStore[key];\n asyncCallback(callback);\n};\n\n\nfunction Memory(name) {\n this.name = name || FILE_SYSTEM_NAME;\n}\nMemory.isSupported = function() {\n return true;\n};\n\nMemory.prototype.open = function(callback) {\n this.db = createDB(this.name);\n asyncCallback(callback);\n};\nMemory.prototype.getReadOnlyContext = function() {\n return new MemoryContext(this.db, true);\n};\nMemory.prototype.getReadWriteContext = function() {\n return new MemoryContext(this.db, false);\n};\n\nmodule.exports = Memory;\n","var IndexedDB = require('./indexeddb.js');\nvar WebSQL = require('./websql.js');\nvar Memory = require('./memory.js');\n\nmodule.exports = {\n IndexedDB: IndexedDB,\n WebSQL: WebSQL,\n Memory: Memory,\n\n /**\n * Convenience Provider references\n */\n\n // The default provider to use when none is specified\n Default: IndexedDB,\n\n // The Fallback provider does automatic fallback checks\n Fallback: (function() {\n if(IndexedDB.isSupported()) {\n return IndexedDB;\n }\n\n if(WebSQL.isSupported()) {\n return WebSQL;\n }\n\n function NotSupported() {\n throw \"[Filer Error] Your browser doesn't support IndexedDB or WebSQL.\";\n }\n NotSupported.isSupported = function() {\n return false;\n };\n return NotSupported;\n }())\n};\n","var defaults = require('../constants.js').ENVIRONMENT;\n\nmodule.exports = function Environment(env) {\n env = env || {};\n env.TMP = env.TMP || defaults.TMP;\n env.PATH = env.PATH || defaults.PATH;\n\n this.get = function(name) {\n return env[name];\n };\n\n this.set = function(name, value) {\n env[name] = value;\n };\n};\n","// Adapt encodings to work with Buffer or Uint8Array, they expect the latter\nfunction decode(buf) {\n return buf.toString('utf8');\n}\n\nfunction encode(string) {\n return new Buffer(string, 'utf8');\n}\n\nmodule.exports = {\n encode: encode,\n decode: decode\n};\n","var Path = require('../path.js');\nvar Errors = require('../errors.js');\nvar Environment = require('./environment.js');\nvar async = require('../../lib/async.js');\nvar Encoding = require('../encoding.js');\n\nfunction Shell(fs, options) {\n options = options || {};\n\n var env = new Environment(options.env);\n var cwd = '/';\n\n /**\n * The bound FileSystem (cannot be changed)\n */\n Object.defineProperty(this, 'fs', {\n get: function() { return fs; },\n enumerable: true\n });\n\n /**\n * The shell's environment (e.g., for things like\n * path, tmp, and other env vars). Use env.get()\n * and env.set() to work with variables.\n */\n Object.defineProperty(this, 'env', {\n get: function() { return env; },\n enumerable: true\n });\n\n /**\n * Change the current working directory. We\n * include `cd` on the `this` vs. proto so that\n * we can access cwd without exposing it externally.\n */\n this.cd = function(path, callback) {\n path = Path.resolve(cwd, path);\n // Make sure the path actually exists, and is a dir\n fs.stat(path, function(err, stats) {\n if(err) {\n callback(new Errors.ENOTDIR(null, path));\n return;\n }\n if(stats.type === 'DIRECTORY') {\n cwd = path;\n callback();\n } else {\n callback(new Errors.ENOTDIR(null, path));\n }\n });\n };\n\n /**\n * Get the current working directory (changed with `cd()`)\n */\n this.pwd = function() {\n return cwd;\n };\n}\n\n/**\n * Execute the .js command located at `path`. Such commands\n * should assume the existence of 3 arguments, which will be\n * defined at runtime:\n *\n * * fs - the current shell's bound filesystem object\n * * args - a list of arguments for the command, or an empty list if none\n * * callback - a callback function(error, result) to call when done.\n *\n * The .js command's contents should be the body of a function\n * that looks like this:\n *\n * function(fs, args, callback) {\n * // .js code here\n * }\n */\nShell.prototype.exec = function(path, args, callback) {\n /* jshint evil:true */\n var sh = this;\n var fs = sh.fs;\n if(typeof args === 'function') {\n callback = args;\n args = [];\n }\n args = args || [];\n callback = callback || function(){};\n path = Path.resolve(sh.pwd(), path);\n\n fs.readFile(path, \"utf8\", function(error, data) {\n if(error) {\n callback(error);\n return;\n }\n try {\n var cmd = new Function('fs', 'args', 'callback', data);\n cmd(fs, args, callback);\n } catch(e) {\n callback(e);\n }\n });\n};\n\n/**\n * Create a file if it does not exist, or update access and\n * modified times if it does. Valid options include:\n *\n * * updateOnly - whether to create the file if missing (defaults to false)\n * * date - use the provided Date value instead of current date/time\n */\nShell.prototype.touch = function(path, options, callback) {\n var sh = this;\n var fs = sh.fs;\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n callback = callback || function(){};\n path = Path.resolve(sh.pwd(), path);\n\n function createFile(path) {\n fs.writeFile(path, '', callback);\n }\n\n function updateTimes(path) {\n var now = Date.now();\n var atime = options.date || now;\n var mtime = options.date || now;\n\n fs.utimes(path, atime, mtime, callback);\n }\n\n fs.stat(path, function(error, stats) {\n if(error) {\n if(options.updateOnly === true) {\n callback();\n } else {\n createFile(path);\n }\n } else {\n updateTimes(path);\n }\n });\n};\n\n/**\n * Concatenate multiple files into a single String, with each\n * file separated by a newline. The `files` argument should\n * be a String (path to single file) or an Array of Strings\n * (multiple file paths).\n */\nShell.prototype.cat = function(files, callback) {\n var sh = this;\n var fs = sh.fs;\n var all = '';\n callback = callback || function(){};\n\n if(!files) {\n callback(new Errors.EINVAL('Missing files argument'));\n return;\n }\n\n files = typeof files === 'string' ? [ files ] : files;\n\n function append(item, callback) {\n var filename = Path.resolve(sh.pwd(), item);\n fs.readFile(filename, 'utf8', function(error, data) {\n if(error) {\n callback(error);\n return;\n }\n all += data + '\\n';\n callback();\n });\n }\n\n async.eachSeries(files, append, function(error) {\n if(error) {\n callback(error);\n } else {\n callback(null, all.replace(/\\n$/, ''));\n }\n });\n};\n\n/**\n * Get the listing of a directory, returning an array of\n * file entries in the following form:\n *\n * {\n * path: <String> the basename of the directory entry\n * links: <Number> the number of links to the entry\n * size: <Number> the size in bytes of the entry\n * modified: <Number> the last modified date/time\n * type: <String> the type of the entry\n * contents: <Array> an optional array of child entries\n * }\n *\n * By default ls() gives a shallow listing. If you want\n * to follow directories as they are encountered, use\n * the `recursive=true` option.\n */\nShell.prototype.ls = function(dir, options, callback) {\n var sh = this;\n var fs = sh.fs;\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n callback = callback || function(){};\n\n if(!dir) {\n callback(new Errors.EINVAL('Missing dir argument'));\n return;\n }\n\n function list(path, callback) {\n var pathname = Path.resolve(sh.pwd(), path);\n var result = [];\n\n fs.readdir(pathname, function(error, entries) {\n if(error) {\n callback(error);\n return;\n }\n\n function getDirEntry(name, callback) {\n name = Path.join(pathname, name);\n fs.stat(name, function(error, stats) {\n if(error) {\n callback(error);\n return;\n }\n var entry = {\n path: Path.basename(name),\n links: stats.nlinks,\n size: stats.size,\n modified: stats.mtime,\n type: stats.type\n };\n\n if(options.recursive && stats.type === 'DIRECTORY') {\n list(Path.join(pathname, entry.path), function(error, items) {\n if(error) {\n callback(error);\n return;\n }\n entry.contents = items;\n result.push(entry);\n callback();\n });\n } else {\n result.push(entry);\n callback();\n }\n });\n }\n\n async.eachSeries(entries, getDirEntry, function(error) {\n callback(error, result);\n });\n });\n }\n\n list(dir, callback);\n};\n\n/**\n * Removes the file or directory at `path`. If `path` is a file\n * it will be removed. If `path` is a directory, it will be\n * removed if it is empty, otherwise the callback will receive\n * an error. In order to remove non-empty directories, use the\n * `recursive=true` option.\n */\nShell.prototype.rm = function(path, options, callback) {\n var sh = this;\n var fs = sh.fs;\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n callback = callback || function(){};\n\n if(!path) {\n callback(new Errors.EINVAL('Missing path argument'));\n return;\n }\n\n function remove(pathname, callback) {\n pathname = Path.resolve(sh.pwd(), pathname);\n fs.stat(pathname, function(error, stats) {\n if(error) {\n callback(error);\n return;\n }\n\n // If this is a file, delete it and we're done\n if(stats.type === 'FILE') {\n fs.unlink(pathname, callback);\n return;\n }\n\n // If it's a dir, check if it's empty\n fs.readdir(pathname, function(error, entries) {\n if(error) {\n callback(error);\n return;\n }\n\n // If dir is empty, delete it and we're done\n if(entries.length === 0) {\n fs.rmdir(pathname, callback);\n return;\n }\n\n // If not, see if we're allowed to delete recursively\n if(!options.recursive) {\n callback(new Errors.ENOTEMPTY(null, pathname));\n return;\n }\n\n // Remove each dir entry recursively, then delete the dir.\n entries = entries.map(function(filename) {\n // Root dir entries absolutely\n return Path.join(pathname, filename);\n });\n async.eachSeries(entries, remove, function(error) {\n if(error) {\n callback(error);\n return;\n }\n fs.rmdir(pathname, callback);\n });\n });\n });\n }\n\n remove(path, callback);\n};\n\n/**\n * Gets the path to the temporary directory, creating it if not\n * present. The directory used is the one specified in\n * env.TMP. The callback receives (error, tempDirName).\n */\nShell.prototype.tempDir = function(callback) {\n var sh = this;\n var fs = sh.fs;\n var tmp = sh.env.get('TMP');\n callback = callback || function(){};\n\n // Try and create it, and it will either work or fail\n // but either way it's now there.\n fs.mkdir(tmp, function(err) {\n callback(null, tmp);\n });\n};\n\n/**\n * Recursively creates the directory at `path`. If the parent\n * of `path` does not exist, it will be created.\n * Based off EnsureDir by Sam X. Xu\n * https://www.npmjs.org/package/ensureDir\n * MIT License\n */\nShell.prototype.mkdirp = function(path, callback) {\n var sh = this;\n var fs = sh.fs;\n callback = callback || function(){};\n\n if(!path) {\n callback(new Errors.EINVAL('Missing path argument'));\n return;\n }\n else if (path === '/') {\n callback();\n return;\n }\n function _mkdirp(path, callback) {\n fs.stat(path, function (err, stat) {\n if(stat) {\n if(stat.isDirectory()) {\n callback();\n return;\n }\n else if (stat.isFile()) {\n callback(new Errors.ENOTDIR(null, path));\n return;\n }\n }\n else if (err && err.code !== 'ENOENT') {\n callback(err);\n return;\n }\n else {\n var parent = Path.dirname(path);\n if(parent === '/') {\n fs.mkdir(path, function (err) {\n if (err && err.code != 'EEXIST') {\n callback(err);\n return;\n }\n callback();\n return;\n });\n }\n else {\n _mkdirp(parent, function (err) {\n if (err) return callback(err);\n fs.mkdir(path, function (err) {\n if (err && err.code != 'EEXIST') {\n callback(err);\n return;\n }\n callback();\n return;\n });\n });\n }\n }\n });\n }\n\n _mkdirp(path, callback);\n};\n\nmodule.exports = Shell;\n","// Based on https://github.com/diy/intercom.js/blob/master/lib/events.js\n// Copyright 2012 DIY Co Apache License, Version 2.0\n// http://www.apache.org/licenses/LICENSE-2.0\n\nfunction removeItem(item, array) {\n for (var i = array.length - 1; i >= 0; i--) {\n if (array[i] === item) {\n array.splice(i, 1);\n }\n }\n return array;\n}\n\nvar EventEmitter = function() {};\n\nEventEmitter.createInterface = function(space) {\n var methods = {};\n\n methods.on = function(name, fn) {\n if (typeof this[space] === 'undefined') {\n this[space] = {};\n }\n if (!this[space].hasOwnProperty(name)) {\n this[space][name] = [];\n }\n this[space][name].push(fn);\n };\n\n methods.off = function(name, fn) {\n if (typeof this[space] === 'undefined') return;\n if (this[space].hasOwnProperty(name)) {\n removeItem(fn, this[space][name]);\n }\n };\n\n methods.trigger = function(name) {\n if (typeof this[space] !== 'undefined' && this[space].hasOwnProperty(name)) {\n var args = Array.prototype.slice.call(arguments, 1);\n for (var i = 0; i < this[space][name].length; i++) {\n this[space][name][i].apply(this[space][name][i], args);\n }\n }\n };\n\n methods.removeAllListeners = function(name) {\n if (typeof this[space] === 'undefined') return;\n var self = this;\n self[space][name].forEach(function(fn) {\n self.off(name, fn);\n });\n };\n\n return methods;\n};\n\nvar pvt = EventEmitter.createInterface('_handlers');\nEventEmitter.prototype._on = pvt.on;\nEventEmitter.prototype._off = pvt.off;\nEventEmitter.prototype._trigger = pvt.trigger;\n\nvar pub = EventEmitter.createInterface('handlers');\nEventEmitter.prototype.on = function() {\n pub.on.apply(this, arguments);\n Array.prototype.unshift.call(arguments, 'on');\n this._trigger.apply(this, arguments);\n};\nEventEmitter.prototype.off = pub.off;\nEventEmitter.prototype.trigger = pub.trigger;\nEventEmitter.prototype.removeAllListeners = pub.removeAllListeners;\n\nmodule.exports = EventEmitter;\n","// Based on https://github.com/diy/intercom.js/blob/master/lib/intercom.js\n// Copyright 2012 DIY Co Apache License, Version 2.0\n// http://www.apache.org/licenses/LICENSE-2.0\n\nvar EventEmitter = require('./eventemitter.js');\nvar guid = require('../src/shared.js').guid;\n\nfunction throttle(delay, fn) {\n var last = 0;\n return function() {\n var now = Date.now();\n if (now - last > delay) {\n last = now;\n fn.apply(this, arguments);\n }\n };\n}\n\nfunction extend(a, b) {\n if (typeof a === 'undefined' || !a) { a = {}; }\n if (typeof b === 'object') {\n for (var key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n }\n return a;\n}\n\nvar localStorage = (function(window) {\n if (typeof window === 'undefined' ||\n typeof window.localStorage === 'undefined') {\n return {\n getItem : function() {},\n setItem : function() {},\n removeItem : function() {}\n };\n }\n return window.localStorage;\n}(global));\n\nfunction Intercom() {\n var self = this;\n var now = Date.now();\n\n this.origin = guid();\n this.lastMessage = now;\n this.receivedIDs = {};\n this.previousValues = {};\n\n var storageHandler = function() {\n self._onStorageEvent.apply(self, arguments);\n };\n\n // If we're in node.js, skip event registration\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.attachEvent) {\n document.attachEvent('onstorage', storageHandler);\n } else {\n global.addEventListener('storage', storageHandler, false);\n }\n}\n\nIntercom.prototype._transaction = function(fn) {\n var TIMEOUT = 1000;\n var WAIT = 20;\n var self = this;\n var executed = false;\n var listening = false;\n var waitTimer = null;\n\n function lock() {\n if (executed) {\n return;\n }\n\n var now = Date.now();\n var activeLock = localStorage.getItem(INDEX_LOCK)|0;\n if (activeLock && now - activeLock < TIMEOUT) {\n if (!listening) {\n self._on('storage', lock);\n listening = true;\n }\n waitTimer = setTimeout(lock, WAIT);\n return;\n }\n executed = true;\n localStorage.setItem(INDEX_LOCK, now);\n\n fn();\n unlock();\n }\n\n function unlock() {\n if (listening) {\n self._off('storage', lock);\n }\n if (waitTimer) {\n clearTimeout(waitTimer);\n }\n localStorage.removeItem(INDEX_LOCK);\n }\n\n lock();\n};\n\nIntercom.prototype._cleanup_emit = throttle(100, function() {\n var self = this;\n\n self._transaction(function() {\n var now = Date.now();\n var threshold = now - THRESHOLD_TTL_EMIT;\n var changed = 0;\n var messages;\n\n try {\n messages = JSON.parse(localStorage.getItem(INDEX_EMIT) || '[]');\n } catch(e) {\n messages = [];\n }\n for (var i = messages.length - 1; i >= 0; i--) {\n if (messages[i].timestamp < threshold) {\n messages.splice(i, 1);\n changed++;\n }\n }\n if (changed > 0) {\n localStorage.setItem(INDEX_EMIT, JSON.stringify(messages));\n }\n });\n});\n\nIntercom.prototype._cleanup_once = throttle(100, function() {\n var self = this;\n\n self._transaction(function() {\n var timestamp, ttl, key;\n var table;\n var now = Date.now();\n var changed = 0;\n\n try {\n table = JSON.parse(localStorage.getItem(INDEX_ONCE) || '{}');\n } catch(e) {\n table = {};\n }\n for (key in table) {\n if (self._once_expired(key, table)) {\n delete table[key];\n changed++;\n }\n }\n\n if (changed > 0) {\n localStorage.setItem(INDEX_ONCE, JSON.stringify(table));\n }\n });\n});\n\nIntercom.prototype._once_expired = function(key, table) {\n if (!table) {\n return true;\n }\n if (!table.hasOwnProperty(key)) {\n return true;\n }\n if (typeof table[key] !== 'object') {\n return true;\n }\n\n var ttl = table[key].ttl || THRESHOLD_TTL_ONCE;\n var now = Date.now();\n var timestamp = table[key].timestamp;\n return timestamp < now - ttl;\n};\n\nIntercom.prototype._localStorageChanged = function(event, field) {\n if (event && event.key) {\n return event.key === field;\n }\n\n var currentValue = localStorage.getItem(field);\n if (currentValue === this.previousValues[field]) {\n return false;\n }\n this.previousValues[field] = currentValue;\n return true;\n};\n\nIntercom.prototype._onStorageEvent = function(event) {\n event = event || global.event;\n var self = this;\n\n if (this._localStorageChanged(event, INDEX_EMIT)) {\n this._transaction(function() {\n var now = Date.now();\n var data = localStorage.getItem(INDEX_EMIT);\n var messages;\n\n try {\n messages = JSON.parse(data || '[]');\n } catch(e) {\n messages = [];\n }\n for (var i = 0; i < messages.length; i++) {\n if (messages[i].origin === self.origin) continue;\n if (messages[i].timestamp < self.lastMessage) continue;\n if (messages[i].id) {\n if (self.receivedIDs.hasOwnProperty(messages[i].id)) continue;\n self.receivedIDs[messages[i].id] = true;\n }\n self.trigger(messages[i].name, messages[i].payload);\n }\n self.lastMessage = now;\n });\n }\n\n this._trigger('storage', event);\n};\n\nIntercom.prototype._emit = function(name, message, id) {\n id = (typeof id === 'string' || typeof id === 'number') ? String(id) : null;\n if (id && id.length) {\n if (this.receivedIDs.hasOwnProperty(id)) return;\n this.receivedIDs[id] = true;\n }\n\n var packet = {\n id : id,\n name : name,\n origin : this.origin,\n timestamp : Date.now(),\n payload : message\n };\n\n var self = this;\n this._transaction(function() {\n var data = localStorage.getItem(INDEX_EMIT) || '[]';\n var delimiter = (data === '[]') ? '' : ',';\n data = [data.substring(0, data.length - 1), delimiter, JSON.stringify(packet), ']'].join('');\n localStorage.setItem(INDEX_EMIT, data);\n self.trigger(name, message);\n\n setTimeout(function() {\n self._cleanup_emit();\n }, 50);\n });\n};\n\nIntercom.prototype.emit = function(name, message) {\n this._emit.apply(this, arguments);\n this._trigger('emit', name, message);\n};\n\nIntercom.prototype.once = function(key, fn, ttl) {\n if (!Intercom.supported) {\n return;\n }\n\n var self = this;\n this._transaction(function() {\n var data;\n try {\n data = JSON.parse(localStorage.getItem(INDEX_ONCE) || '{}');\n } catch(e) {\n data = {};\n }\n if (!self._once_expired(key, data)) {\n return;\n }\n\n data[key] = {};\n data[key].timestamp = Date.now();\n if (typeof ttl === 'number') {\n data[key].ttl = ttl * 1000;\n }\n\n localStorage.setItem(INDEX_ONCE, JSON.stringify(data));\n fn();\n\n setTimeout(function() {\n self._cleanup_once();\n }, 50);\n });\n};\n\nextend(Intercom.prototype, EventEmitter.prototype);\n\nIntercom.supported = (typeof localStorage !== 'undefined');\n\nvar INDEX_EMIT = 'intercom';\nvar INDEX_ONCE = 'intercom_once';\nvar INDEX_LOCK = 'intercom_lock';\n\nvar THRESHOLD_TTL_EMIT = 50000;\nvar THRESHOLD_TTL_ONCE = 1000 * 3600;\n\nIntercom.destroy = function() {\n localStorage.removeItem(INDEX_LOCK);\n localStorage.removeItem(INDEX_EMIT);\n localStorage.removeItem(INDEX_ONCE);\n};\n\nIntercom.getInstance = (function() {\n var intercom;\n return function() {\n if (!intercom) {\n intercom = new Intercom();\n }\n return intercom;\n };\n})();\n\nmodule.exports = Intercom;\n","var EventEmitter = require('../lib/eventemitter.js');\nvar Path = require('./path.js');\nvar Intercom = require('../lib/intercom.js');\n\n/**\n * FSWatcher based on node.js' FSWatcher\n * see https://github.com/joyent/node/blob/master/lib/fs.js\n */\nfunction FSWatcher() {\n EventEmitter.call(this);\n var self = this;\n var recursive = false;\n var recursivePathPrefix;\n var filename;\n\n function onchange(path) {\n // Watch for exact filename, or parent path when recursive is true.\n if(filename === path || (recursive && path.indexOf(recursivePathPrefix) === 0)) {\n self.trigger('change', 'change', path);\n }\n }\n\n // We support, but ignore the second arg, which node.js uses.\n self.start = function(filename_, persistent_, recursive_) {\n // Bail if we've already started (and therefore have a filename);\n if(filename) {\n return;\n }\n\n if(Path.isNull(filename_)) {\n throw new Error('Path must be a string without null bytes.');\n }\n\n // TODO: get realpath for symlinks on filename...\n\n // Filer's Path.normalize strips trailing slashes, which we use here.\n // See https://github.com/js-platform/filer/issues/105\n filename = Path.normalize(filename_);\n\n // Whether to watch beneath this path or not\n recursive = recursive_ === true;\n // If recursive, construct a path prefix portion for comparisons later\n // (i.e., '/path' becomes '/path/' so we can search within a filename for the\n // prefix). We also take care to allow for '/' on its own.\n if(recursive) {\n recursivePathPrefix = filename === '/' ? '/' : filename + '/';\n }\n\n var intercom = Intercom.getInstance();\n intercom.on('change', onchange);\n };\n\n self.close = function() {\n var intercom = Intercom.getInstance();\n intercom.off('change', onchange);\n self.removeAllListeners('change');\n };\n}\nFSWatcher.prototype = new EventEmitter();\nFSWatcher.prototype.constructor = FSWatcher;\n\nmodule.exports = FSWatcher;\n","var MODE_FILE = require('./constants.js').MODE_FILE;\n\nmodule.exports = function DirectoryEntry(id, type) {\n this.id = id;\n this.type = type || MODE_FILE;\n};\n","module.exports = function OpenFileDescription(path, id, flags, position) {\n this.path = path;\n this.id = id;\n this.flags = flags;\n this.position = position;\n};\n","var Constants = require('./constants.js');\n\nfunction SuperNode(options) {\n var now = Date.now();\n\n this.id = Constants.SUPER_NODE_ID;\n this.mode = Constants.MODE_META;\n this.atime = options.atime || now;\n this.ctime = options.ctime || now;\n this.mtime = options.mtime || now;\n // root node id (randomly generated)\n this.rnode = options.rnode;\n}\n\nSuperNode.create = function(options, callback) {\n options.guid(function(err, rnode) {\n if(err) {\n callback(err);\n return;\n }\n options.rnode = options.rnode || rnode;\n callback(null, new SuperNode(options));\n });\n};\n\nmodule.exports = SuperNode;\n","var MODE_FILE = require('./constants.js').MODE_FILE;\n\nfunction Node(options) {\n var now = Date.now();\n\n this.id = options.id;\n this.mode = options.mode || MODE_FILE; // node type (file, directory, etc)\n this.size = options.size || 0; // size (bytes for files, entries for directories)\n this.atime = options.atime || now; // access time (will mirror ctime after creation)\n this.ctime = options.ctime || now; // creation/change time\n this.mtime = options.mtime || now; // modified time\n this.flags = options.flags || []; // file flags\n this.xattrs = options.xattrs || {}; // extended attributes\n this.nlinks = options.nlinks || 0; // links count\n this.version = options.version || 0; // node version\n this.blksize = undefined; // block size\n this.nblocks = 1; // blocks count\n this.data = options.data; // id for data object\n}\n\n// Make sure the options object has an id on property,\n// either from caller or one we generate using supplied guid fn.\nfunction ensureID(options, prop, callback) {\n if(options[prop]) {\n callback(null);\n } else {\n options.guid(function(err, id) {\n options[prop] = id;\n callback(err);\n });\n }\n}\n\nNode.create = function(options, callback) {\n // We expect both options.id and options.data to be provided/generated.\n ensureID(options, 'id', function(err) {\n if(err) {\n callback(err);\n return;\n }\n\n ensureID(options, 'data', function(err) {\n if(err) {\n callback(err);\n return;\n }\n\n callback(null, new Node(options));\n });\n });\n};\n\nmodule.exports = Node;\n","var Constants = require('./constants.js');\n\nfunction Stats(fileNode, devName) {\n this.node = fileNode.id;\n this.dev = devName;\n this.size = fileNode.size;\n this.nlinks = fileNode.nlinks;\n this.atime = fileNode.atime;\n this.mtime = fileNode.mtime;\n this.ctime = fileNode.ctime;\n this.type = fileNode.mode;\n}\n\nStats.prototype.isFile = function() {\n return this.type === Constants.MODE_FILE;\n};\n\nStats.prototype.isDirectory = function() {\n return this.type === Constants.MODE_DIRECTORY;\n};\n\nStats.prototype.isSymbolicLink = function() {\n return this.type === Constants.MODE_SYMBOLIC_LINK;\n};\n\n// These will always be false in Filer.\nStats.prototype.isSocket =\nStats.prototype.isFIFO =\nStats.prototype.isCharacterDevice =\nStats.prototype.isBlockDevice =\nfunction() {\n return false;\n};\n\nmodule.exports = Stats;\n","var _ = require('../../lib/nodash.js');\n\nvar Path = require('../path.js');\nvar normalize = Path.normalize;\nvar dirname = Path.dirname;\nvar basename = Path.basename;\nvar isAbsolutePath = Path.isAbsolute;\nvar isNullPath = Path.isNull;\n\nvar Constants = require('../constants.js');\nvar MODE_FILE = Constants.MODE_FILE;\nvar MODE_DIRECTORY = Constants.MODE_DIRECTORY;\nvar MODE_SYMBOLIC_LINK = Constants.MODE_SYMBOLIC_LINK;\nvar MODE_META = Constants.MODE_META;\n\nvar ROOT_DIRECTORY_NAME = Constants.ROOT_DIRECTORY_NAME;\nvar SUPER_NODE_ID = Constants.SUPER_NODE_ID;\nvar SYMLOOP_MAX = Constants.SYMLOOP_MAX;\n\nvar O_READ = Constants.O_READ;\nvar O_WRITE = Constants.O_WRITE;\nvar O_CREATE = Constants.O_CREATE;\nvar O_EXCLUSIVE = Constants.O_EXCLUSIVE;\nvar O_TRUNCATE = Constants.O_TRUNCATE;\nvar O_APPEND = Constants.O_APPEND;\nvar O_FLAGS = Constants.O_FLAGS;\n\nvar XATTR_CREATE = Constants.XATTR_CREATE;\nvar XATTR_REPLACE = Constants.XATTR_REPLACE;\nvar FS_NOMTIME = Constants.FS_NOMTIME;\nvar FS_NOCTIME = Constants.FS_NOCTIME;\n\nvar Encoding = require('../encoding.js');\nvar Errors = require('../errors.js');\nvar DirectoryEntry = require('../directory-entry.js');\nvar OpenFileDescription = require('../open-file-description.js');\nvar SuperNode = require('../super-node.js');\nvar Node = require('../node.js');\nvar Stats = require('../stats.js');\nvar Buffer = require('../buffer.js');\n\n/**\n * Many functions below use this callback pattern. If it's not\n * re-defined, we use this to generate a callback. NOTE: this\n * can be use for callbacks of both forms without problem (i.e.,\n * since result will be undefined if not returned):\n * - callback(error)\n * - callback(error, result)\n */\nfunction standard_check_result_cb(callback) {\n return function(error, result) {\n if(error) {\n callback(error);\n } else {\n callback(null, result);\n }\n };\n}\n\n/**\n * Update node times. Only passed times are modified (undefined times are ignored)\n * and filesystem flags are examined in order to override update logic.\n */\nfunction update_node_times(context, path, node, times, callback) {\n // Honour mount flags for how we update times\n var flags = context.flags;\n if(_(flags).contains(FS_NOCTIME)) {\n delete times.ctime;\n }\n if(_(flags).contains(FS_NOMTIME)) {\n delete times.mtime;\n }\n\n // Only do the update if required (i.e., times are still present)\n var update = false;\n if(times.ctime) {\n node.ctime = times.ctime;\n // We don't do atime tracking for perf reasons, but do mirror ctime\n node.atime = times.ctime;\n update = true;\n }\n if(times.atime) {\n // The only time we explicitly pass atime is when utimes(), futimes() is called.\n // Override ctime mirror here if so\n node.atime = times.atime;\n update = true;\n }\n if(times.mtime) {\n node.mtime = times.mtime;\n update = true;\n }\n\n function complete(error) {\n // Queue this change so we can send watch events.\n // Unlike node.js, we send the full path vs. basename/dirname only.\n context.changes.push({ event: 'change', path: path });\n callback(error);\n }\n\n if(update) {\n context.putObject(node.id, node, complete);\n } else {\n complete();\n }\n}\n\n/**\n * make_node()\n */\n// in: file or directory path\n// out: new node representing file/directory\nfunction make_node(context, path, mode, callback) {\n if(mode !== MODE_DIRECTORY && mode !== MODE_FILE) {\n return callback(new Errors.EINVAL('mode must be a directory or file', path));\n }\n\n path = normalize(path);\n\n var name = basename(path);\n var parentPath = dirname(path);\n var parentNode;\n var parentNodeData;\n var node;\n\n // Check if the parent node exists\n function create_node_in_parent(error, parentDirectoryNode) {\n if(error) {\n callback(error);\n } else if(parentDirectoryNode.mode !== MODE_DIRECTORY) {\n callback(new Errors.ENOTDIR('a component of the path prefix is not a directory', path));\n } else {\n parentNode = parentDirectoryNode;\n find_node(context, path, check_if_node_exists);\n }\n }\n\n // Check if the node to be created already exists\n function check_if_node_exists(error, result) {\n if(!error && result) {\n callback(new Errors.EEXIST('path name already exists', path));\n } else if(error && !(error instanceof Errors.ENOENT)) {\n callback(error);\n } else {\n context.getObject(parentNode.data, create_node);\n }\n }\n\n // Create the new node\n function create_node(error, result) {\n if(error) {\n callback(error);\n } else {\n parentNodeData = result;\n Node.create({guid: context.guid, mode: mode}, function(error, result) {\n if(error) {\n callback(error);\n return;\n }\n node = result;\n node.nlinks += 1;\n context.putObject(node.id, node, update_parent_node_data);\n });\n }\n }\n\n // Update parent node time\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, parentPath, node, { mtime: now, ctime: now }, callback);\n }\n }\n\n // Update the parent nodes data\n function update_parent_node_data(error) {\n if(error) {\n callback(error);\n } else {\n parentNodeData[name] = new DirectoryEntry(node.id, mode);\n context.putObject(parentNode.data, parentNodeData, update_time);\n }\n }\n\n // Find the parent node\n find_node(context, parentPath, create_node_in_parent);\n}\n\n/**\n * find_node\n */\n// in: file or directory path\n// out: node structure, or error\nfunction find_node(context, path, callback) {\n path = normalize(path);\n if(!path) {\n return callback(new Errors.ENOENT('path is an empty string'));\n }\n var name = basename(path);\n var parentPath = dirname(path);\n var followedCount = 0;\n\n function read_root_directory_node(error, superNode) {\n if(error) {\n callback(error);\n } else if(!superNode || superNode.mode !== MODE_META || !superNode.rnode) {\n callback(new Errors.EFILESYSTEMERROR());\n } else {\n context.getObject(superNode.rnode, check_root_directory_node);\n }\n }\n\n function check_root_directory_node(error, rootDirectoryNode) {\n if(error) {\n callback(error);\n } else if(!rootDirectoryNode) {\n callback(new Errors.ENOENT());\n } else {\n callback(null, rootDirectoryNode);\n }\n }\n\n // in: parent directory node\n // out: parent directory data\n function read_parent_directory_data(error, parentDirectoryNode) {\n if(error) {\n callback(error);\n } else if(parentDirectoryNode.mode !== MODE_DIRECTORY || !parentDirectoryNode.data) {\n callback(new Errors.ENOTDIR('a component of the path prefix is not a directory', path));\n } else {\n context.getObject(parentDirectoryNode.data, get_node_from_parent_directory_data);\n }\n }\n\n // in: parent directory data\n // out: searched node\n function get_node_from_parent_directory_data(error, parentDirectoryData) {\n if(error) {\n callback(error);\n } else {\n if(!_(parentDirectoryData).has(name)) {\n callback(new Errors.ENOENT(null, path));\n } else {\n var nodeId = parentDirectoryData[name].id;\n context.getObject(nodeId, is_symbolic_link);\n }\n }\n }\n\n function is_symbolic_link(error, node) {\n if(error) {\n callback(error);\n } else {\n if(node.mode == MODE_SYMBOLIC_LINK) {\n followedCount++;\n if(followedCount > SYMLOOP_MAX){\n callback(new Errors.ELOOP(null, path));\n } else {\n follow_symbolic_link(node.data);\n }\n } else {\n callback(null, node);\n }\n }\n }\n\n function follow_symbolic_link(data) {\n data = normalize(data);\n parentPath = dirname(data);\n name = basename(data);\n if(ROOT_DIRECTORY_NAME == name) {\n context.getObject(SUPER_NODE_ID, read_root_directory_node);\n } else {\n find_node(context, parentPath, read_parent_directory_data);\n }\n }\n\n if(ROOT_DIRECTORY_NAME == name) {\n context.getObject(SUPER_NODE_ID, read_root_directory_node);\n } else {\n find_node(context, parentPath, read_parent_directory_data);\n }\n}\n\n\n/**\n * set extended attribute (refactor)\n */\nfunction set_extended_attribute (context, path_or_fd, name, value, flag, callback) {\n var path;\n\n function set_xattr (error, node) {\n var xattr = (node ? node.xattrs[name] : null);\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n update_node_times(context, path, node, { ctime: Date.now() }, callback);\n }\n }\n\n if (error) {\n callback(error);\n }\n else if (flag === XATTR_CREATE && node.xattrs.hasOwnProperty(name)) {\n callback(new Errors.EEXIST('attribute already exists', path_or_fd));\n }\n else if (flag === XATTR_REPLACE && !node.xattrs.hasOwnProperty(name)) {\n callback(new Errors.ENOATTR(null, path_or_fd));\n }\n else {\n node.xattrs[name] = value;\n context.putObject(node.id, node, update_time);\n }\n }\n\n if (typeof path_or_fd == 'string') {\n path = path_or_fd;\n find_node(context, path_or_fd, set_xattr);\n }\n else if (typeof path_or_fd == 'object' && typeof path_or_fd.id == 'string') {\n path = path_or_fd.path;\n context.getObject(path_or_fd.id, set_xattr);\n }\n else {\n callback(new Errors.EINVAL('path or file descriptor of wrong type', path_or_fd));\n }\n}\n\n/**\n * ensure_root_directory. Creates a root node if necessary.\n *\n * Note: this should only be invoked when formatting a new file system.\n * Multiple invocations of this by separate instances will still result\n * in only a single super node.\n */\nfunction ensure_root_directory(context, callback) {\n var superNode;\n var directoryNode;\n var directoryData;\n\n function ensure_super_node(error, existingNode) {\n if(!error && existingNode) {\n // Another instance has beat us and already created the super node.\n callback();\n } else if(error && !(error instanceof Errors.ENOENT)) {\n callback(error);\n } else {\n SuperNode.create({guid: context.guid}, function(error, result) {\n if(error) {\n callback(error);\n return;\n }\n superNode = result;\n context.putObject(superNode.id, superNode, write_directory_node);\n });\n }\n }\n\n function write_directory_node(error) {\n if(error) {\n callback(error);\n } else {\n Node.create({guid: context.guid, id: superNode.rnode, mode: MODE_DIRECTORY}, function(error, result) {\n if(error) {\n callback(error);\n return;\n }\n directoryNode = result;\n directoryNode.nlinks += 1;\n context.putObject(directoryNode.id, directoryNode, write_directory_data);\n });\n }\n }\n\n function write_directory_data(error) {\n if(error) {\n callback(error);\n } else {\n directoryData = {};\n context.putObject(directoryNode.data, directoryData, callback);\n }\n }\n\n context.getObject(SUPER_NODE_ID, ensure_super_node);\n}\n\n/**\n * make_directory\n */\nfunction make_directory(context, path, callback) {\n path = normalize(path);\n var name = basename(path);\n var parentPath = dirname(path);\n\n var directoryNode;\n var directoryData;\n var parentDirectoryNode;\n var parentDirectoryData;\n\n function check_if_directory_exists(error, result) {\n if(!error && result) {\n callback(new Errors.EEXIST(null, path));\n } else if(error && !(error instanceof Errors.ENOENT)) {\n callback(error);\n } else {\n find_node(context, parentPath, read_parent_directory_data);\n }\n }\n\n function read_parent_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n parentDirectoryNode = result;\n context.getObject(parentDirectoryNode.data, write_directory_node);\n }\n }\n\n function write_directory_node(error, result) {\n if(error) {\n callback(error);\n } else {\n parentDirectoryData = result;\n Node.create({guid: context.guid, mode: MODE_DIRECTORY}, function(error, result) {\n if(error) {\n callback(error);\n return;\n }\n directoryNode = result;\n directoryNode.nlinks += 1;\n context.putObject(directoryNode.id, directoryNode, write_directory_data);\n });\n }\n }\n\n function write_directory_data(error) {\n if(error) {\n callback(error);\n } else {\n directoryData = {};\n context.putObject(directoryNode.data, directoryData, update_parent_directory_data);\n }\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, parentPath, parentDirectoryNode, { mtime: now, ctime: now }, callback);\n }\n }\n\n function update_parent_directory_data(error) {\n if(error) {\n callback(error);\n } else {\n parentDirectoryData[name] = new DirectoryEntry(directoryNode.id, MODE_DIRECTORY);\n context.putObject(parentDirectoryNode.data, parentDirectoryData, update_time);\n }\n }\n\n find_node(context, path, check_if_directory_exists);\n}\n\n/**\n * remove_directory\n */\nfunction remove_directory(context, path, callback) {\n path = normalize(path);\n var name = basename(path);\n var parentPath = dirname(path);\n\n var directoryNode;\n var directoryData;\n var parentDirectoryNode;\n var parentDirectoryData;\n\n function read_parent_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n parentDirectoryNode = result;\n context.getObject(parentDirectoryNode.data, check_if_node_exists);\n }\n }\n\n function check_if_node_exists(error, result) {\n if(error) {\n callback(error);\n } else if(ROOT_DIRECTORY_NAME == name) {\n callback(new Errors.EBUSY(null, path));\n } else if(!_(result).has(name)) {\n callback(new Errors.ENOENT(null, path));\n } else {\n parentDirectoryData = result;\n directoryNode = parentDirectoryData[name].id;\n context.getObject(directoryNode, check_if_node_is_directory);\n }\n }\n\n function check_if_node_is_directory(error, result) {\n if(error) {\n callback(error);\n } else if(result.mode != MODE_DIRECTORY) {\n callback(new Errors.ENOTDIR(null, path));\n } else {\n directoryNode = result;\n context.getObject(directoryNode.data, check_if_directory_is_empty);\n }\n }\n\n function check_if_directory_is_empty(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryData = result;\n if(_(directoryData).size() > 0) {\n callback(new Errors.ENOTEMPTY(null, path));\n } else {\n remove_directory_entry_from_parent_directory_node();\n }\n }\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, parentPath, parentDirectoryNode, { mtime: now, ctime: now }, remove_directory_node);\n }\n }\n\n function remove_directory_entry_from_parent_directory_node() {\n delete parentDirectoryData[name];\n context.putObject(parentDirectoryNode.data, parentDirectoryData, update_time);\n }\n\n function remove_directory_node(error) {\n if(error) {\n callback(error);\n } else {\n context.delete(directoryNode.id, remove_directory_data);\n }\n }\n\n function remove_directory_data(error) {\n if(error) {\n callback(error);\n } else {\n context.delete(directoryNode.data, callback);\n }\n }\n\n find_node(context, parentPath, read_parent_directory_data);\n}\n\nfunction open_file(context, path, flags, callback) {\n path = normalize(path);\n var name = basename(path);\n var parentPath = dirname(path);\n\n var directoryNode;\n var directoryData;\n var directoryEntry;\n var fileNode;\n var fileData;\n\n var followedCount = 0;\n\n if(ROOT_DIRECTORY_NAME == name) {\n if(_(flags).contains(O_WRITE)) {\n callback(new Errors.EISDIR('the named file is a directory and O_WRITE is set', path));\n } else {\n find_node(context, path, set_file_node);\n }\n } else {\n find_node(context, parentPath, read_directory_data);\n }\n\n function read_directory_data(error, result) {\n if(error) {\n callback(error);\n } else if(result.mode !== MODE_DIRECTORY) {\n callback(new Errors.ENOENT(null, path));\n } else {\n directoryNode = result;\n context.getObject(directoryNode.data, check_if_file_exists);\n }\n }\n\n function check_if_file_exists(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryData = result;\n if(_(directoryData).has(name)) {\n if(_(flags).contains(O_EXCLUSIVE)) {\n callback(new Errors.ENOENT('O_CREATE and O_EXCLUSIVE are set, and the named file exists', path));\n } else {\n directoryEntry = directoryData[name];\n if(directoryEntry.type == MODE_DIRECTORY && _(flags).contains(O_WRITE)) {\n callback(new Errors.EISDIR('the named file is a directory and O_WRITE is set', path));\n } else {\n context.getObject(directoryEntry.id, check_if_symbolic_link);\n }\n }\n } else {\n if(!_(flags).contains(O_CREATE)) {\n callback(new Errors.ENOENT('O_CREATE is not set and the named file does not exist', path));\n } else {\n write_file_node();\n }\n }\n }\n }\n\n function check_if_symbolic_link(error, result) {\n if(error) {\n callback(error);\n } else {\n var node = result;\n if(node.mode == MODE_SYMBOLIC_LINK) {\n followedCount++;\n if(followedCount > SYMLOOP_MAX){\n callback(new Errors.ELOOP(null, path));\n } else {\n follow_symbolic_link(node.data);\n }\n } else {\n set_file_node(undefined, node);\n }\n }\n }\n\n function follow_symbolic_link(data) {\n data = normalize(data);\n parentPath = dirname(data);\n name = basename(data);\n if(ROOT_DIRECTORY_NAME == name) {\n if(_(flags).contains(O_WRITE)) {\n callback(new Errors.EISDIR('the named file is a directory and O_WRITE is set', path));\n } else {\n find_node(context, path, set_file_node);\n }\n }\n find_node(context, parentPath, read_directory_data);\n }\n\n function set_file_node(error, result) {\n if(error) {\n callback(error);\n } else {\n fileNode = result;\n callback(null, fileNode);\n }\n }\n\n function write_file_node() {\n Node.create({guid: context.guid, mode: MODE_FILE}, function(error, result) {\n if(error) {\n callback(error);\n return;\n }\n fileNode = result;\n fileNode.nlinks += 1;\n context.putObject(fileNode.id, fileNode, write_file_data);\n });\n }\n\n function write_file_data(error) {\n if(error) {\n callback(error);\n } else {\n fileData = new Buffer(0);\n fileData.fill(0);\n context.putBuffer(fileNode.data, fileData, update_directory_data);\n }\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, parentPath, directoryNode, { mtime: now, ctime: now }, handle_update_result);\n }\n }\n\n function update_directory_data(error) {\n if(error) {\n callback(error);\n } else {\n directoryData[name] = new DirectoryEntry(fileNode.id, MODE_FILE);\n context.putObject(directoryNode.data, directoryData, update_time);\n }\n }\n\n function handle_update_result(error) {\n if(error) {\n callback(error);\n } else {\n callback(null, fileNode);\n }\n }\n}\n\nfunction replace_data(context, ofd, buffer, offset, length, callback) {\n var fileNode;\n\n function return_nbytes(error) {\n if(error) {\n callback(error);\n } else {\n callback(null, length);\n }\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, ofd.path, fileNode, { mtime: now, ctime: now }, return_nbytes);\n }\n }\n\n function update_file_node(error) {\n if(error) {\n callback(error);\n } else {\n context.putObject(fileNode.id, fileNode, update_time);\n }\n }\n\n function write_file_data(error, result) {\n if(error) {\n callback(error);\n } else {\n fileNode = result;\n var newData = new Buffer(length);\n newData.fill(0);\n buffer.copy(newData, 0, offset, offset + length);\n ofd.position = length;\n\n fileNode.size = length;\n fileNode.version += 1;\n\n context.putBuffer(fileNode.data, newData, update_file_node);\n }\n }\n\n context.getObject(ofd.id, write_file_data);\n}\n\nfunction write_data(context, ofd, buffer, offset, length, position, callback) {\n var fileNode;\n var fileData;\n\n function return_nbytes(error) {\n if(error) {\n callback(error);\n } else {\n callback(null, length);\n }\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, ofd.path, fileNode, { mtime: now, ctime: now }, return_nbytes);\n }\n }\n\n function update_file_node(error) {\n if(error) {\n callback(error);\n } else {\n context.putObject(fileNode.id, fileNode, update_time);\n }\n }\n\n function update_file_data(error, result) {\n if(error) {\n callback(error);\n } else {\n fileData = result;\n if(!fileData) {\n return callback(new Errors.EIO('Expected Buffer'));\n }\n var _position = (!(undefined === position || null === position)) ? position : ofd.position;\n var newSize = Math.max(fileData.length, _position + length);\n var newData = new Buffer(newSize);\n newData.fill(0);\n if(fileData) {\n fileData.copy(newData);\n }\n buffer.copy(newData, _position, offset, offset + length);\n if(undefined === position) {\n ofd.position += length;\n }\n\n fileNode.size = newSize;\n fileNode.version += 1;\n\n context.putBuffer(fileNode.data, newData, update_file_node);\n }\n }\n\n function read_file_data(error, result) {\n if(error) {\n callback(error);\n } else {\n fileNode = result;\n context.getBuffer(fileNode.data, update_file_data);\n }\n }\n\n context.getObject(ofd.id, read_file_data);\n}\n\nfunction read_data(context, ofd, buffer, offset, length, position, callback) {\n var fileNode;\n var fileData;\n\n function handle_file_data(error, result) {\n if(error) {\n callback(error);\n } else {\n fileData = result;\n if(!fileData) {\n return callback(new Errors.EIO('Expected Buffer'));\n }\n var _position = (!(undefined === position || null === position)) ? position : ofd.position;\n length = (_position + length > buffer.length) ? length - _position : length;\n fileData.copy(buffer, offset, _position, _position + length);\n if(undefined === position) {\n ofd.position += length;\n }\n callback(null, length);\n }\n }\n\n function read_file_data(error, result) {\n if(error) {\n callback(error);\n } else {\n fileNode = result;\n context.getBuffer(fileNode.data, handle_file_data);\n }\n }\n\n context.getObject(ofd.id, read_file_data);\n}\n\nfunction stat_file(context, path, callback) {\n path = normalize(path);\n var name = basename(path);\n find_node(context, path, standard_check_result_cb(callback));\n}\n\nfunction fstat_file(context, ofd, callback) {\n context.getObject(ofd.id, standard_check_result_cb(callback));\n}\n\nfunction lstat_file(context, path, callback) {\n path = normalize(path);\n var name = basename(path);\n var parentPath = dirname(path);\n\n var directoryNode;\n var directoryData;\n\n if(ROOT_DIRECTORY_NAME == name) {\n find_node(context, path, standard_check_result_cb(callback));\n } else {\n find_node(context, parentPath, read_directory_data);\n }\n\n function read_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryNode = result;\n context.getObject(directoryNode.data, check_if_file_exists);\n }\n }\n\n function check_if_file_exists(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryData = result;\n if(!_(directoryData).has(name)) {\n callback(new Errors.ENOENT('a component of the path does not name an existing file', path));\n } else {\n context.getObject(directoryData[name].id, standard_check_result_cb(callback));\n }\n }\n }\n}\n\nfunction link_node(context, oldpath, newpath, callback) {\n oldpath = normalize(oldpath);\n var oldname = basename(oldpath);\n var oldParentPath = dirname(oldpath);\n\n newpath = normalize(newpath);\n var newname = basename(newpath);\n var newParentPath = dirname(newpath);\n\n var oldDirectoryNode;\n var oldDirectoryData;\n var newDirectoryNode;\n var newDirectoryData;\n var fileNode;\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n update_node_times(context, newpath, fileNode, { ctime: Date.now() }, callback);\n }\n }\n\n function update_file_node(error, result) {\n if(error) {\n callback(error);\n } else {\n fileNode = result;\n fileNode.nlinks += 1;\n context.putObject(fileNode.id, fileNode, update_time);\n }\n }\n\n function read_directory_entry(error, result) {\n if(error) {\n callback(error);\n } else {\n context.getObject(newDirectoryData[newname].id, update_file_node);\n }\n }\n\n function check_if_new_file_exists(error, result) {\n if(error) {\n callback(error);\n } else {\n newDirectoryData = result;\n if(_(newDirectoryData).has(newname)) {\n callback(new Errors.EEXIST('newpath resolves to an existing file', newname));\n } else {\n newDirectoryData[newname] = oldDirectoryData[oldname];\n context.putObject(newDirectoryNode.data, newDirectoryData, read_directory_entry);\n }\n }\n }\n\n function read_new_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n newDirectoryNode = result;\n context.getObject(newDirectoryNode.data, check_if_new_file_exists);\n }\n }\n\n function check_if_old_file_exists(error, result) {\n if(error) {\n callback(error);\n } else {\n oldDirectoryData = result;\n if(!_(oldDirectoryData).has(oldname)) {\n callback(new Errors.ENOENT('a component of either path prefix does not exist', oldname));\n } else {\n find_node(context, newParentPath, read_new_directory_data);\n }\n }\n }\n\n function read_old_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n oldDirectoryNode = result;\n context.getObject(oldDirectoryNode.data, check_if_old_file_exists);\n }\n }\n\n find_node(context, oldParentPath, read_old_directory_data);\n}\n\nfunction unlink_node(context, path, callback) {\n path = normalize(path);\n var name = basename(path);\n var parentPath = dirname(path);\n\n var directoryNode;\n var directoryData;\n var fileNode;\n\n function update_directory_data(error) {\n if(error) {\n callback(error);\n } else {\n delete directoryData[name];\n context.putObject(directoryNode.data, directoryData, function(error) {\n var now = Date.now();\n update_node_times(context, parentPath, directoryNode, { mtime: now, ctime: now }, callback);\n });\n }\n }\n\n function delete_file_data(error) {\n if(error) {\n callback(error);\n } else {\n context.delete(fileNode.data, update_directory_data);\n }\n }\n\n function update_file_node(error, result) {\n if(error) {\n callback(error);\n } else {\n fileNode = result;\n fileNode.nlinks -= 1;\n if(fileNode.nlinks < 1) {\n context.delete(fileNode.id, delete_file_data);\n } else {\n context.putObject(fileNode.id, fileNode, function(error) {\n update_node_times(context, path, fileNode, { ctime: Date.now() }, update_directory_data);\n });\n }\n }\n }\n\n function check_if_file_exists(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryData = result;\n if(!_(directoryData).has(name)) {\n callback(new Errors.ENOENT('a component of the path does not name an existing file', name));\n } else {\n context.getObject(directoryData[name].id, update_file_node);\n }\n }\n }\n\n function read_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryNode = result;\n context.getObject(directoryNode.data, check_if_file_exists);\n }\n }\n\n find_node(context, parentPath, read_directory_data);\n}\n\nfunction read_directory(context, path, callback) {\n path = normalize(path);\n var name = basename(path);\n\n var directoryNode;\n var directoryData;\n\n function handle_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryData = result;\n var files = Object.keys(directoryData);\n callback(null, files);\n }\n }\n\n function read_directory_data(error, result) {\n if(error) {\n callback(error);\n } else if(result.mode !== MODE_DIRECTORY) {\n callback(new Errors.ENOTDIR(null, path));\n } else {\n directoryNode = result;\n context.getObject(directoryNode.data, handle_directory_data);\n }\n }\n\n find_node(context, path, read_directory_data);\n}\n\nfunction make_symbolic_link(context, srcpath, dstpath, callback) {\n dstpath = normalize(dstpath);\n var name = basename(dstpath);\n var parentPath = dirname(dstpath);\n\n var directoryNode;\n var directoryData;\n var fileNode;\n\n if(ROOT_DIRECTORY_NAME == name) {\n callback(new Errors.EEXIST(null, name));\n } else {\n find_node(context, parentPath, read_directory_data);\n }\n\n function read_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryNode = result;\n context.getObject(directoryNode.data, check_if_file_exists);\n }\n }\n\n function check_if_file_exists(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryData = result;\n if(_(directoryData).has(name)) {\n callback(new Errors.EEXIST(null, name));\n } else {\n write_file_node();\n }\n }\n }\n\n function write_file_node() {\n Node.create({guid: context.guid, mode: MODE_SYMBOLIC_LINK}, function(error, result) {\n if(error) {\n callback(error);\n return;\n }\n fileNode = result;\n fileNode.nlinks += 1;\n fileNode.size = srcpath.length;\n fileNode.data = srcpath;\n context.putObject(fileNode.id, fileNode, update_directory_data);\n });\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, parentPath, directoryNode, { mtime: now, ctime: now }, callback);\n }\n }\n\n function update_directory_data(error) {\n if(error) {\n callback(error);\n } else {\n directoryData[name] = new DirectoryEntry(fileNode.id, MODE_SYMBOLIC_LINK);\n context.putObject(directoryNode.data, directoryData, update_time);\n }\n }\n}\n\nfunction read_link(context, path, callback) {\n path = normalize(path);\n var name = basename(path);\n var parentPath = dirname(path);\n\n var directoryNode;\n var directoryData;\n\n find_node(context, parentPath, read_directory_data);\n\n function read_directory_data(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryNode = result;\n context.getObject(directoryNode.data, check_if_file_exists);\n }\n }\n\n function check_if_file_exists(error, result) {\n if(error) {\n callback(error);\n } else {\n directoryData = result;\n if(!_(directoryData).has(name)) {\n callback(new Errors.ENOENT('a component of the path does not name an existing file', name));\n } else {\n context.getObject(directoryData[name].id, check_if_symbolic);\n }\n }\n }\n\n function check_if_symbolic(error, result) {\n if(error) {\n callback(error);\n } else {\n if(result.mode != MODE_SYMBOLIC_LINK) {\n callback(new Errors.EINVAL('path not a symbolic link', path));\n } else {\n callback(null, result.data);\n }\n }\n }\n}\n\nfunction truncate_file(context, path, length, callback) {\n path = normalize(path);\n\n var fileNode;\n\n function read_file_data (error, node) {\n if (error) {\n callback(error);\n } else if(node.mode == MODE_DIRECTORY ) {\n callback(new Errors.EISDIR(null, path));\n } else{\n fileNode = node;\n context.getBuffer(fileNode.data, truncate_file_data);\n }\n }\n\n function truncate_file_data(error, fileData) {\n if (error) {\n callback(error);\n } else {\n if(!fileData) {\n return callback(new Errors.EIO('Expected Buffer'));\n }\n var data = new Buffer(length);\n data.fill(0);\n if(fileData) {\n fileData.copy(data);\n }\n context.putBuffer(fileNode.data, data, update_file_node);\n }\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, path, fileNode, { mtime: now, ctime: now }, callback);\n }\n }\n\n function update_file_node (error) {\n if(error) {\n callback(error);\n } else {\n fileNode.size = length;\n fileNode.version += 1;\n context.putObject(fileNode.id, fileNode, update_time);\n }\n }\n\n if(length < 0) {\n callback(new Errors.EINVAL('length cannot be negative'));\n } else {\n find_node(context, path, read_file_data);\n }\n}\n\nfunction ftruncate_file(context, ofd, length, callback) {\n var fileNode;\n\n function read_file_data (error, node) {\n if (error) {\n callback(error);\n } else if(node.mode == MODE_DIRECTORY ) {\n callback(new Errors.EISDIR());\n } else{\n fileNode = node;\n context.getBuffer(fileNode.data, truncate_file_data);\n }\n }\n\n function truncate_file_data(error, fileData) {\n if (error) {\n callback(error);\n } else {\n var data;\n if(!fileData) {\n return callback(new Errors.EIO('Expected Buffer'));\n }\n if(fileData) {\n data = fileData.slice(0, length);\n } else {\n data = new Buffer(length);\n data.fill(0);\n }\n context.putBuffer(fileNode.data, data, update_file_node);\n }\n }\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n var now = Date.now();\n update_node_times(context, ofd.path, fileNode, { mtime: now, ctime: now }, callback);\n }\n }\n\n function update_file_node (error) {\n if(error) {\n callback(error);\n } else {\n fileNode.size = length;\n fileNode.version += 1;\n context.putObject(fileNode.id, fileNode, update_time);\n }\n }\n\n if(length < 0) {\n callback(new Errors.EINVAL('length cannot be negative'));\n } else {\n context.getObject(ofd.id, read_file_data);\n }\n}\n\nfunction utimes_file(context, path, atime, mtime, callback) {\n path = normalize(path);\n\n function update_times(error, node) {\n if (error) {\n callback(error);\n } else {\n update_node_times(context, path, node, { atime: atime, ctime: mtime, mtime: mtime }, callback);\n }\n }\n\n if (typeof atime != 'number' || typeof mtime != 'number') {\n callback(new Errors.EINVAL('atime and mtime must be number', path));\n }\n else if (atime < 0 || mtime < 0) {\n callback(new Errors.EINVAL('atime and mtime must be positive integers', path));\n }\n else {\n find_node(context, path, update_times);\n }\n}\n\nfunction futimes_file(context, ofd, atime, mtime, callback) {\n\n function update_times (error, node) {\n if (error) {\n callback(error);\n } else {\n update_node_times(context, ofd.path, node, { atime: atime, ctime: mtime, mtime: mtime }, callback);\n }\n }\n\n if (typeof atime != 'number' || typeof mtime != 'number') {\n callback(new Errors.EINVAL('atime and mtime must be a number'));\n }\n else if (atime < 0 || mtime < 0) {\n callback(new Errors.EINVAL('atime and mtime must be positive integers'));\n }\n else {\n context.getObject(ofd.id, update_times);\n }\n}\n\nfunction setxattr_file(context, path, name, value, flag, callback) {\n path = normalize(path);\n\n if (typeof name != 'string') {\n callback(new Errors.EINVAL('attribute name must be a string', path));\n }\n else if (!name) {\n callback(new Errors.EINVAL('attribute name cannot be an empty string', path));\n }\n else if (flag !== null &&\n flag !== XATTR_CREATE && flag !== XATTR_REPLACE) {\n callback(new Errors.EINVAL('invalid flag, must be null, XATTR_CREATE or XATTR_REPLACE', path));\n }\n else {\n set_extended_attribute(context, path, name, value, flag, callback);\n }\n}\n\nfunction fsetxattr_file (context, ofd, name, value, flag, callback) {\n if (typeof name != 'string') {\n callback(new Errors.EINVAL('attribute name must be a string'));\n }\n else if (!name) {\n callback(new Errors.EINVAL('attribute name cannot be an empty string'));\n }\n else if (flag !== null &&\n flag !== XATTR_CREATE && flag !== XATTR_REPLACE) {\n callback(new Errors.EINVAL('invalid flag, must be null, XATTR_CREATE or XATTR_REPLACE'));\n }\n else {\n set_extended_attribute(context, ofd, name, value, flag, callback);\n }\n}\n\nfunction getxattr_file (context, path, name, callback) {\n path = normalize(path);\n\n function get_xattr(error, node) {\n var xattr = (node ? node.xattrs[name] : null);\n\n if (error) {\n callback (error);\n }\n else if (!node.xattrs.hasOwnProperty(name)) {\n callback(new Errors.ENOATTR(null, path));\n }\n else {\n callback(null, node.xattrs[name]);\n }\n }\n\n if (typeof name != 'string') {\n callback(new Errors.EINVAL('attribute name must be a string', path));\n }\n else if (!name) {\n callback(new Errors.EINVAL('attribute name cannot be an empty string', path));\n }\n else {\n find_node(context, path, get_xattr);\n }\n}\n\nfunction fgetxattr_file (context, ofd, name, callback) {\n\n function get_xattr (error, node) {\n var xattr = (node ? node.xattrs[name] : null);\n\n if (error) {\n callback(error);\n }\n else if (!node.xattrs.hasOwnProperty(name)) {\n callback(new Errors.ENOATTR());\n }\n else {\n callback(null, node.xattrs[name]);\n }\n }\n\n if (typeof name != 'string') {\n callback(new Errors.EINVAL());\n }\n else if (!name) {\n callback(new Errors.EINVAL('attribute name cannot be an empty string'));\n }\n else {\n context.getObject(ofd.id, get_xattr);\n }\n}\n\nfunction removexattr_file (context, path, name, callback) {\n path = normalize(path);\n\n function remove_xattr (error, node) {\n var xattr = (node ? node.xattrs : null);\n\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n update_node_times(context, path, node, { ctime: Date.now() }, callback);\n }\n }\n\n if (error) {\n callback(error);\n }\n else if (!xattr.hasOwnProperty(name)) {\n callback(new Errors.ENOATTR(null, path));\n }\n else {\n delete node.xattrs[name];\n context.putObject(node.id, node, update_time);\n }\n }\n\n if (typeof name != 'string') {\n callback(new Errors.EINVAL('attribute name must be a string', path));\n }\n else if (!name) {\n callback(new Errors.EINVAL('attribute name cannot be an empty string', path));\n }\n else {\n find_node(context, path, remove_xattr);\n }\n}\n\nfunction fremovexattr_file (context, ofd, name, callback) {\n\n function remove_xattr (error, node) {\n function update_time(error) {\n if(error) {\n callback(error);\n } else {\n update_node_times(context, ofd.path, node, { ctime: Date.now() }, callback);\n }\n }\n\n if (error) {\n callback(error);\n }\n else if (!node.xattrs.hasOwnProperty(name)) {\n callback(new Errors.ENOATTR());\n }\n else {\n delete node.xattrs[name];\n context.putObject(node.id, node, update_time);\n }\n }\n\n if (typeof name != 'string') {\n callback(new Errors.EINVAL('attribute name must be a string'));\n }\n else if (!name) {\n callback(new Errors.EINVAL('attribute name cannot be an empty string'));\n }\n else {\n context.getObject(ofd.id, remove_xattr);\n }\n}\n\nfunction validate_flags(flags) {\n if(!_(O_FLAGS).has(flags)) {\n return null;\n }\n return O_FLAGS[flags];\n}\n\nfunction validate_file_options(options, enc, fileMode){\n if(!options) {\n options = { encoding: enc, flag: fileMode };\n } else if(typeof options === \"function\") {\n options = { encoding: enc, flag: fileMode };\n } else if(typeof options === \"string\") {\n options = { encoding: options, flag: fileMode };\n }\n return options;\n}\n\nfunction pathCheck(path, callback) {\n var err;\n\n if(!path) {\n err = new Errors.EINVAL('Path must be a string', path);\n } else if(isNullPath(path)) {\n err = new Errors.EINVAL('Path must be a string without null bytes.', path);\n } else if(!isAbsolutePath(path)) {\n err = new Errors.EINVAL('Path must be absolute.', path);\n }\n\n if(err) {\n callback(err);\n return false;\n }\n return true;\n}\n\n\nfunction open(fs, context, path, flags, mode, callback) {\n // NOTE: we support the same signature as node with a `mode` arg,\n // but ignore it.\n callback = arguments[arguments.length - 1];\n if(!pathCheck(path, callback)) return;\n\n function check_result(error, fileNode) {\n if(error) {\n callback(error);\n } else {\n var position;\n if(_(flags).contains(O_APPEND)) {\n position = fileNode.size;\n } else {\n position = 0;\n }\n var openFileDescription = new OpenFileDescription(path, fileNode.id, flags, position);\n var fd = fs.allocDescriptor(openFileDescription);\n callback(null, fd);\n }\n }\n\n flags = validate_flags(flags);\n if(!flags) {\n callback(new Errors.EINVAL('flags is not valid'), path);\n }\n\n open_file(context, path, flags, check_result);\n}\n\nfunction close(fs, context, fd, callback) {\n if(!_(fs.openFiles).has(fd)) {\n callback(new Errors.EBADF());\n } else {\n fs.releaseDescriptor(fd);\n callback(null);\n }\n}\n\nfunction mknod(fs, context, path, mode, callback) {\n if(!pathCheck(path, callback)) return;\n make_node(context, path, mode, callback);\n}\n\nfunction mkdir(fs, context, path, mode, callback) {\n // NOTE: we support passing a mode arg, but we ignore it internally for now.\n callback = arguments[arguments.length - 1];\n if(!pathCheck(path, callback)) return;\n make_directory(context, path, standard_check_result_cb(callback));\n}\n\nfunction rmdir(fs, context, path, callback) {\n if(!pathCheck(path, callback)) return;\n remove_directory(context, path, standard_check_result_cb(callback));\n}\n\nfunction stat(fs, context, path, callback) {\n if(!pathCheck(path, callback)) return;\n\n function check_result(error, result) {\n if(error) {\n callback(error);\n } else {\n var stats = new Stats(result, fs.name);\n callback(null, stats);\n }\n }\n\n stat_file(context, path, check_result);\n}\n\nfunction fstat(fs, context, fd, callback) {\n function check_result(error, result) {\n if(error) {\n callback(error);\n } else {\n var stats = new Stats(result, fs.name);\n callback(null, stats);\n }\n }\n\n var ofd = fs.openFiles[fd];\n if(!ofd) {\n callback(new Errors.EBADF());\n } else {\n fstat_file(context, ofd, check_result);\n }\n}\n\nfunction link(fs, context, oldpath, newpath, callback) {\n if(!pathCheck(oldpath, callback)) return;\n if(!pathCheck(newpath, callback)) return;\n link_node(context, oldpath, newpath, standard_check_result_cb(callback));\n}\n\nfunction unlink(fs, context, path, callback) {\n if(!pathCheck(path, callback)) return;\n unlink_node(context, path, standard_check_result_cb(callback));\n}\n\nfunction read(fs, context, fd, buffer, offset, length, position, callback) {\n // Follow how node.js does this\n function wrapped_cb(err, bytesRead) {\n // Retain a reference to buffer so that it can't be GC'ed too soon.\n callback(err, bytesRead || 0, buffer);\n }\n\n offset = (undefined === offset) ? 0 : offset;\n length = (undefined === length) ? buffer.length - offset : length;\n callback = arguments[arguments.length - 1];\n\n var ofd = fs.openFiles[fd];\n if(!ofd) {\n callback(new Errors.EBADF());\n } else if(!_(ofd.flags).contains(O_READ)) {\n callback(new Errors.EBADF('descriptor does not permit reading'));\n } else {\n read_data(context, ofd, buffer, offset, length, position, standard_check_result_cb(wrapped_cb));\n }\n}\n\nfunction readFile(fs, context, path, options, callback) {\n callback = arguments[arguments.length - 1];\n options = validate_file_options(options, null, 'r');\n\n if(!pathCheck(path, callback)) return;\n\n var flags = validate_flags(options.flag || 'r');\n if(!flags) {\n return callback(new Errors.EINVAL('flags is not valid', path));\n }\n\n open_file(context, path, flags, function(err, fileNode) {\n if(err) {\n return callback(err);\n }\n var ofd = new OpenFileDescription(path, fileNode.id, flags, 0);\n var fd = fs.allocDescriptor(ofd);\n\n function cleanup() {\n fs.releaseDescriptor(fd);\n }\n\n fstat_file(context, ofd, function(err, fstatResult) {\n if(err) {\n cleanup();\n return callback(err);\n }\n\n var stats = new Stats(fstatResult, fs.name);\n\n if(stats.isDirectory()) {\n cleanup();\n return callback(new Errors.EISDIR('illegal operation on directory', path));\n }\n\n var size = stats.size;\n var buffer = new Buffer(size);\n buffer.fill(0);\n\n read_data(context, ofd, buffer, 0, size, 0, function(err, nbytes) {\n cleanup();\n\n if(err) {\n return callback(err);\n }\n\n var data;\n if(options.encoding === 'utf8') {\n data = Encoding.decode(buffer);\n } else {\n data = buffer;\n }\n callback(null, data);\n });\n });\n });\n}\n\nfunction write(fs, context, fd, buffer, offset, length, position, callback) {\n callback = arguments[arguments.length - 1];\n offset = (undefined === offset) ? 0 : offset;\n length = (undefined === length) ? buffer.length - offset : length;\n\n var ofd = fs.openFiles[fd];\n if(!ofd) {\n callback(new Errors.EBADF());\n } else if(!_(ofd.flags).contains(O_WRITE)) {\n callback(new Errors.EBADF('descriptor does not permit writing'));\n } else if(buffer.length - offset < length) {\n callback(new Errors.EIO('intput buffer is too small'));\n } else {\n write_data(context, ofd, buffer, offset, length, position, standard_check_result_cb(callback));\n }\n}\n\nfunction writeFile(fs, context, path, data, options, callback) {\n callback = arguments[arguments.length - 1];\n options = validate_file_options(options, 'utf8', 'w');\n\n if(!pathCheck(path, callback)) return;\n\n var flags = validate_flags(options.flag || 'w');\n if(!flags) {\n return callback(new Errors.EINVAL('flags is not valid', path));\n }\n\n data = data || '';\n if(typeof data === \"number\") {\n data = '' + data;\n }\n if(typeof data === \"string\" && options.encoding === 'utf8') {\n data = Encoding.encode(data);\n }\n\n open_file(context, path, flags, function(err, fileNode) {\n if(err) {\n return callback(err);\n }\n var ofd = new OpenFileDescription(path, fileNode.id, flags, 0);\n var fd = fs.allocDescriptor(ofd);\n\n replace_data(context, ofd, data, 0, data.length, function(err, nbytes) {\n fs.releaseDescriptor(fd);\n\n if(err) {\n return callback(err);\n }\n callback(null);\n });\n });\n}\n\nfunction appendFile(fs, context, path, data, options, callback) {\n callback = arguments[arguments.length - 1];\n options = validate_file_options(options, 'utf8', 'a');\n\n if(!pathCheck(path, callback)) return;\n\n var flags = validate_flags(options.flag || 'a');\n if(!flags) {\n return callback(new Errors.EINVAL('flags is not valid', path));\n }\n\n data = data || '';\n if(typeof data === \"number\") {\n data = '' + data;\n }\n if(typeof data === \"string\" && options.encoding === 'utf8') {\n data = Encoding.encode(data);\n }\n\n open_file(context, path, flags, function(err, fileNode) {\n if(err) {\n return callback(err);\n }\n var ofd = new OpenFileDescription(path, fileNode.id, flags, fileNode.size);\n var fd = fs.allocDescriptor(ofd);\n\n write_data(context, ofd, data, 0, data.length, ofd.position, function(err, nbytes) {\n fs.releaseDescriptor(fd);\n\n if(err) {\n return callback(err);\n }\n callback(null);\n });\n });\n}\n\nfunction exists(fs, context, path, callback) {\n function cb(err, stats) {\n callback(err ? false : true);\n }\n stat(fs, context, path, cb);\n}\n\nfunction getxattr(fs, context, path, name, callback) {\n if (!pathCheck(path, callback)) return;\n getxattr_file(context, path, name, standard_check_result_cb(callback));\n}\n\nfunction fgetxattr(fs, context, fd, name, callback) {\n var ofd = fs.openFiles[fd];\n if (!ofd) {\n callback(new Errors.EBADF());\n }\n else {\n fgetxattr_file(context, ofd, name, standard_check_result_cb(callback));\n }\n}\n\nfunction setxattr(fs, context, path, name, value, flag, callback) {\n if(typeof flag === 'function') {\n callback = flag;\n flag = null;\n }\n\n if (!pathCheck(path, callback)) return;\n setxattr_file(context, path, name, value, flag, standard_check_result_cb(callback));\n}\n\nfunction fsetxattr(fs, context, fd, name, value, flag, callback) {\n if(typeof flag === 'function') {\n callback = flag;\n flag = null;\n }\n\n var ofd = fs.openFiles[fd];\n if (!ofd) {\n callback(new Errors.EBADF());\n }\n else if (!_(ofd.flags).contains(O_WRITE)) {\n callback(new Errors.EBADF('descriptor does not permit writing'));\n }\n else {\n fsetxattr_file(context, ofd, name, value, flag, standard_check_result_cb(callback));\n }\n}\n\nfunction removexattr(fs, context, path, name, callback) {\n if (!pathCheck(path, callback)) return;\n removexattr_file(context, path, name, standard_check_result_cb(callback));\n}\n\nfunction fremovexattr(fs, context, fd, name, callback) {\n var ofd = fs.openFiles[fd];\n if (!ofd) {\n callback(new Errors.EBADF());\n }\n else if (!_(ofd.flags).contains(O_WRITE)) {\n callback(new Errors.EBADF('descriptor does not permit writing'));\n }\n else {\n fremovexattr_file(context, ofd, name, standard_check_result_cb(callback));\n }\n}\n\nfunction lseek(fs, context, fd, offset, whence, callback) {\n function update_descriptor_position(error, stats) {\n if(error) {\n callback(error);\n } else {\n if(stats.size + offset < 0) {\n callback(new Errors.EINVAL('resulting file offset would be negative'));\n } else {\n ofd.position = stats.size + offset;\n callback(null, ofd.position);\n }\n }\n }\n\n var ofd = fs.openFiles[fd];\n if(!ofd) {\n callback(new Errors.EBADF());\n }\n\n if('SET' === whence) {\n if(offset < 0) {\n callback(new Errors.EINVAL('resulting file offset would be negative'));\n } else {\n ofd.position = offset;\n callback(null, ofd.position);\n }\n } else if('CUR' === whence) {\n if(ofd.position + offset < 0) {\n callback(new Errors.EINVAL('resulting file offset would be negative'));\n } else {\n ofd.position += offset;\n callback(null, ofd.position);\n }\n } else if('END' === whence) {\n fstat_file(context, ofd, update_descriptor_position);\n } else {\n callback(new Errors.EINVAL('whence argument is not a proper value'));\n }\n}\n\nfunction readdir(fs, context, path, callback) {\n if(!pathCheck(path, callback)) return;\n read_directory(context, path, standard_check_result_cb(callback));\n}\n\nfunction utimes(fs, context, path, atime, mtime, callback) {\n if(!pathCheck(path, callback)) return;\n\n var currentTime = Date.now();\n atime = (atime) ? atime : currentTime;\n mtime = (mtime) ? mtime : currentTime;\n\n utimes_file(context, path, atime, mtime, standard_check_result_cb(callback));\n}\n\nfunction futimes(fs, context, fd, atime, mtime, callback) {\n var currentTime = Date.now();\n atime = (atime) ? atime : currentTime;\n mtime = (mtime) ? mtime : currentTime;\n\n var ofd = fs.openFiles[fd];\n if(!ofd) {\n callback(new Errors.EBADF());\n } else if(!_(ofd.flags).contains(O_WRITE)) {\n callback(new Errors.EBADF('descriptor does not permit writing'));\n } else {\n futimes_file(context, ofd, atime, mtime, standard_check_result_cb(callback));\n }\n}\n\nfunction rename(fs, context, oldpath, newpath, callback) {\n if(!pathCheck(oldpath, callback)) return;\n if(!pathCheck(newpath, callback)) return;\n\n function unlink_old_node(error) {\n if(error) {\n callback(error);\n } else {\n unlink_node(context, oldpath, standard_check_result_cb(callback));\n }\n }\n\n link_node(context, oldpath, newpath, unlink_old_node);\n}\n\nfunction symlink(fs, context, srcpath, dstpath, type, callback) {\n // NOTE: we support passing the `type` arg, but ignore it.\n callback = arguments[arguments.length - 1];\n if(!pathCheck(srcpath, callback)) return;\n if(!pathCheck(dstpath, callback)) return;\n make_symbolic_link(context, srcpath, dstpath, standard_check_result_cb(callback));\n}\n\nfunction readlink(fs, context, path, callback) {\n if(!pathCheck(path, callback)) return;\n read_link(context, path, standard_check_result_cb(callback));\n}\n\nfunction lstat(fs, context, path, callback) {\n if(!pathCheck(path, callback)) return;\n\n function check_result(error, result) {\n if(error) {\n callback(error);\n } else {\n var stats = new Stats(result, fs.name);\n callback(null, stats);\n }\n }\n\n lstat_file(context, path, check_result);\n}\n\nfunction truncate(fs, context, path, length, callback) {\n // NOTE: length is optional\n callback = arguments[arguments.length - 1];\n length = length || 0;\n\n if(!pathCheck(path, callback)) return;\n truncate_file(context, path, length, standard_check_result_cb(callback));\n}\n\nfunction ftruncate(fs, context, fd, length, callback) {\n // NOTE: length is optional\n callback = arguments[arguments.length - 1];\n length = length || 0;\n\n var ofd = fs.openFiles[fd];\n if(!ofd) {\n callback(new Errors.EBADF());\n } else if(!_(ofd.flags).contains(O_WRITE)) {\n callback(new Errors.EBADF('descriptor does not permit writing'));\n } else {\n ftruncate_file(context, ofd, length, standard_check_result_cb(callback));\n }\n}\n\nmodule.exports = {\n ensureRootDirectory: ensure_root_directory,\n open: open,\n close: close,\n mknod: mknod,\n mkdir: mkdir,\n rmdir: rmdir,\n unlink: unlink,\n stat: stat,\n fstat: fstat,\n link: link,\n read: read,\n readFile: readFile,\n write: write,\n writeFile: writeFile,\n appendFile: appendFile,\n exists: exists,\n getxattr: getxattr,\n fgetxattr: fgetxattr,\n setxattr: setxattr,\n fsetxattr: fsetxattr,\n removexattr: removexattr,\n fremovexattr: fremovexattr,\n lseek: lseek,\n readdir: readdir,\n utimes: utimes,\n futimes: futimes,\n rename: rename,\n symlink: symlink,\n readlink: readlink,\n lstat: lstat,\n truncate: truncate,\n ftruncate: ftruncate\n};\n","var _ = require('../../lib/nodash.js');\n\nvar isNullPath = require('../path.js').isNull;\nvar nop = require('../shared.js').nop;\n\nvar Constants = require('../constants.js');\nvar FILE_SYSTEM_NAME = Constants.FILE_SYSTEM_NAME;\nvar FS_FORMAT = Constants.FS_FORMAT;\nvar FS_READY = Constants.FS_READY;\nvar FS_PENDING = Constants.FS_PENDING;\nvar FS_ERROR = Constants.FS_ERROR;\nvar FS_NODUPEIDCHECK = Constants.FS_NODUPEIDCHECK;\n\nvar providers = require('../providers/index.js');\n\nvar Shell = require('../shell/shell.js');\nvar Intercom = require('../../lib/intercom.js');\nvar FSWatcher = require('../fs-watcher.js');\nvar Errors = require('../errors.js');\nvar defaultGuidFn = require('../shared.js').guid;\n\nvar STDIN = Constants.STDIN;\nvar STDOUT = Constants.STDOUT;\nvar STDERR = Constants.STDERR;\nvar FIRST_DESCRIPTOR = Constants.FIRST_DESCRIPTOR;\n\n// The core fs operations live on impl\nvar impl = require('./implementation.js');\n\n// node.js supports a calling pattern that leaves off a callback.\nfunction maybeCallback(callback) {\n if(typeof callback === \"function\") {\n return callback;\n }\n return function(err) {\n if(err) {\n throw err;\n }\n };\n}\n\n/**\n * FileSystem\n *\n * A FileSystem takes an `options` object, which can specify a number of,\n * options. All options are optional, and include:\n *\n * name: the name of the file system, defaults to \"local\"\n *\n * flags: one or more flags to use when creating/opening the file system.\n * For example: \"FORMAT\" will cause the file system to be formatted.\n * No explicit flags are set by default.\n *\n * provider: an explicit storage provider to use for the file\n * system's database context provider. A number of context\n * providers are included (see /src/providers), and users\n * can write one of their own and pass it in to be used.\n * By default an IndexedDB provider is used.\n *\n * guid: a function for generating unique IDs for nodes in the filesystem.\n * Use this to override the built-in UUID generation. (Used mainly for tests).\n *\n * callback: a callback function to be executed when the file system becomes\n * ready for use. Depending on the context provider used, this might\n * be right away, or could take some time. The callback should expect\n * an `error` argument, which will be null if everything worked. Also\n * users should check the file system's `readyState` and `error`\n * properties to make sure it is usable.\n */\nfunction FileSystem(options, callback) {\n options = options || {};\n callback = callback || nop;\n\n var flags = options.flags;\n var guid = options.guid ? options.guid : defaultGuidFn;\n var provider = options.provider || new providers.Default(options.name || FILE_SYSTEM_NAME);\n // If we're given a provider, match its name unless we get an explicit name\n var name = options.name || provider.name;\n var forceFormatting = _(flags).contains(FS_FORMAT);\n\n var fs = this;\n fs.readyState = FS_PENDING;\n fs.name = name;\n fs.error = null;\n\n fs.stdin = STDIN;\n fs.stdout = STDOUT;\n fs.stderr = STDERR;\n\n // Safely expose the list of open files and file\n // descriptor management functions\n var openFiles = {};\n var nextDescriptor = FIRST_DESCRIPTOR;\n Object.defineProperty(this, \"openFiles\", {\n get: function() { return openFiles; }\n });\n this.allocDescriptor = function(openFileDescription) {\n var fd = nextDescriptor ++;\n openFiles[fd] = openFileDescription;\n return fd;\n };\n this.releaseDescriptor = function(fd) {\n delete openFiles[fd];\n };\n\n // Safely expose the operation queue\n var queue = [];\n this.queueOrRun = function(operation) {\n var error;\n\n if(FS_READY == fs.readyState) {\n operation.call(fs);\n } else if(FS_ERROR == fs.readyState) {\n error = new Errors.EFILESYSTEMERROR('unknown error');\n } else {\n queue.push(operation);\n }\n\n return error;\n };\n function runQueued() {\n queue.forEach(function(operation) {\n operation.call(this);\n }.bind(fs));\n queue = null;\n }\n\n // We support the optional `options` arg from node, but ignore it\n this.watch = function(filename, options, listener) {\n if(isNullPath(filename)) {\n throw new Error('Path must be a string without null bytes.');\n }\n if(typeof options === 'function') {\n listener = options;\n options = {};\n }\n options = options || {};\n listener = listener || nop;\n\n var watcher = new FSWatcher();\n watcher.start(filename, false, options.recursive);\n watcher.on('change', listener);\n\n return watcher;\n };\n\n // Deal with various approaches to node ID creation\n function wrappedGuidFn(context) {\n return function(callback) {\n // Skip the duplicate ID check if asked to\n if(_(flags).contains(FS_NODUPEIDCHECK)) {\n callback(null, guid());\n return;\n }\n\n // Otherwise (default) make sure this id is unused first\n function guidWithCheck(callback) {\n var id = guid();\n context.getObject(id, function(err, value) {\n if(err) {\n callback(err);\n return;\n }\n\n // If this id is unused, use it, otherwise find another\n if(!value) {\n callback(null, id);\n } else {\n guidWithCheck(callback);\n }\n });\n }\n guidWithCheck(callback);\n };\n }\n\n // Let other instances (in this or other windows) know about\n // any changes to this fs instance.\n function broadcastChanges(changes) {\n if(!changes.length) {\n return;\n }\n var intercom = Intercom.getInstance();\n changes.forEach(function(change) {\n intercom.emit(change.event, change.path);\n });\n }\n\n // Open file system storage provider\n provider.open(function(err) {\n function complete(error) {\n function wrappedContext(methodName) {\n var context = provider[methodName]();\n context.flags = flags;\n context.changes = [];\n context.guid = wrappedGuidFn(context);\n\n // When the context is finished, let the fs deal with any change events\n context.close = function() {\n var changes = context.changes;\n broadcastChanges(changes);\n changes.length = 0;\n };\n\n return context;\n }\n\n // Wrap the provider so we can extend the context with fs flags and\n // an array of changes (e.g., watch event 'change' and 'rename' events\n // for paths updated during the lifetime of the context). From this\n // point forward we won't call open again, so it's safe to drop it.\n fs.provider = {\n openReadWriteContext: function() {\n return wrappedContext('getReadWriteContext');\n },\n openReadOnlyContext: function() {\n return wrappedContext('getReadOnlyContext');\n }\n };\n\n if(error) {\n fs.readyState = FS_ERROR;\n } else {\n fs.readyState = FS_READY;\n }\n runQueued();\n callback(error, fs);\n }\n\n if(err) {\n return complete(err);\n }\n\n var context = provider.getReadWriteContext();\n context.guid = wrappedGuidFn(context);\n\n // Mount the filesystem, formatting if necessary\n if(forceFormatting) {\n // Wipe the storage provider, then write root block\n context.clear(function(err) {\n if(err) {\n return complete(err);\n }\n impl.ensureRootDirectory(context, complete);\n });\n } else {\n // Use existing (or create new) root and mount\n impl.ensureRootDirectory(context, complete);\n }\n });\n}\n\n// Expose storage providers on FileSystem constructor\nFileSystem.providers = providers;\n\n/**\n * Public API for FileSystem\n */\n[\n 'open',\n 'close',\n 'mknod',\n 'mkdir',\n 'rmdir',\n 'stat',\n 'fstat',\n 'link',\n 'unlink',\n 'read',\n 'readFile',\n 'write',\n 'writeFile',\n 'appendFile',\n 'exists',\n 'lseek',\n 'readdir',\n 'rename',\n 'readlink',\n 'symlink',\n 'lstat',\n 'truncate',\n 'ftruncate',\n 'utimes',\n 'futimes',\n 'setxattr',\n 'getxattr',\n 'fsetxattr',\n 'fgetxattr',\n 'removexattr',\n 'fremovexattr'\n].forEach(function(methodName) {\n FileSystem.prototype[methodName] = function() {\n var fs = this;\n var args = Array.prototype.slice.call(arguments, 0);\n var lastArgIndex = args.length - 1;\n\n // We may or may not get a callback, and since node.js supports\n // fire-and-forget style fs operations, we have to dance a bit here.\n var missingCallback = typeof args[lastArgIndex] !== 'function';\n var callback = maybeCallback(args[lastArgIndex]);\n\n var error = fs.queueOrRun(function() {\n var context = fs.provider.openReadWriteContext();\n\n // Fail early if the filesystem is in an error state (e.g.,\n // provider failed to open.\n if(FS_ERROR === fs.readyState) {\n var err = new Errors.EFILESYSTEMERROR('filesystem unavailable, operation canceled');\n return callback.call(fs, err);\n }\n\n // Wrap the callback so we can explicitly close the context\n function complete() {\n context.close();\n callback.apply(fs, arguments);\n }\n\n // Either add or replace the callback with our wrapper complete()\n if(missingCallback) {\n args.push(complete);\n } else {\n args[lastArgIndex] = complete;\n }\n\n // Forward this call to the impl's version, using the following\n // call signature, with complete() as the callback/last-arg now:\n // fn(fs, context, arg0, arg1, ... , complete);\n var fnArgs = [fs, context].concat(args);\n impl[methodName].apply(null, fnArgs);\n });\n if(error) {\n callback(error);\n }\n };\n});\n\nFileSystem.prototype.Shell = function(options) {\n return new Shell(this, options);\n};\n\nmodule.exports = FileSystem;\n","module.exports = {\n FileSystem: require('./filesystem/interface.js'),\n Buffer: require('./buffer.js'),\n Path: require('./path.js'),\n Errors: require('./errors.js')\n};\n"]}