file/0040755000567100000000000000000010536046673011347 5ustar jcameronrootfile/config.info.tr0100644000567100000120000000044010225071061014214 0ustar jcameronwheelhide_dot_files=Nokta ile balayan dosyalar gsterilsin mi?,1,0-Evet,1-Hayr iconsize=Ara ubuundaki butonlarn boyutu,1,1-Kk,0-Geni ve etiketli nocharset=Uygun karakter seti kullanlmaya allsn m?,1,0-Evet,1-Hayr extract=JAR'daki .class dosyalar alsn m?,1,1-Evet,0-Hayr file/StaticTextField.java0100644000567100000120000000052210122720133015347 0ustar jcameronwheelimport java.awt.*; // StaticTextField // A text field that is set to be non-editable by default class StaticTextField extends TextField { StaticTextField() { super(); setEditable(false); } StaticTextField(String s) { super(s); setEditable(false); } StaticTextField(String s, int i) { super(s,i); setEditable(false); } } file/show.cgi0100755000567100000120000000667410507374674013157 0ustar jcameronwheel#!/usr/local/bin/perl # show.cgi # Output some file for the browser require './file-lib.pl'; &ReadParse(); use POSIX; $p = $ENV{'PATH_INFO'}; if ($in{'type'}) { # Use the supplied content type $type = $in{'type'}; $download = 1; } elsif ($in{'format'} == 1) { # Type comes from compression format $type = "application/zip"; } elsif ($in{'format'} == 2) { $type = "application/x-gzip"; } elsif ($in{'format'} == 3) { $type = "application/x-tar"; } else { # Try to guess type from filename $type = &guess_mime_type($p, undef); if (!$type) { # No idea .. use the 'file' command $out = &backquote_command("file ". quotemeta(&resolve_links($p)), 1); if ($out =~ /text|script/) { $type = "text/plain"; } else { $type = "application/unknown"; } } } # Dump the file $temp = &transname(); &switch_acl_uid(); $p = &unmake_chroot($p); if (!&can_access($p)) { # ACL rules prevent access to file &error_exit(&text('view_eaccess', $p)); } if ($in{'format'}) { # An archive of a directory was requested .. create it $archive || &error_exit($text{'view_earchive'}); if ($in{'format'} == 1) { $p =~ s/\.zip$//; } elsif ($in{'format'} == 2) { $p =~ s/\.tgz$//; } elsif ($in{'format'} == 3) { $p =~ s/\.tar$//; } -d $p || &error_exit($text{'view_edir'}." ".$p); if ($archive == 2 && $archmax > 0) { # Check if directory is too large to archive local $kb = &disk_usage_kb($p); if ($kb*1024 > $archmax) { &error_exit(&text('view_earchmax', $archmax)); } } # Work out the base directory and filename if ($p =~ /^(.*\/)([^\/]+)$/) { $pdir = $1; $pfile = $2; } else { $pdir = "/"; $pfile = $p; } # Work out the command to run if ($in{'format'} == 1) { &has_command("zip") || &error_exit(&text('view_ecmd', "zip")); $cmd = "zip -r $temp ".quotemeta($pfile); } elsif ($in{'format'} == 2) { &has_command("tar") || &error_exit(&text('view_ecmd', "tar")); &has_command("gzip") || &error_exit(&text('view_ecmd', "gzip")); $cmd = "tar cf - ".quotemeta($pfile)." | gzip -c >$temp"; } elsif ($in{'format'} == 3) { &has_command("tar") || &error_exit(&text('view_ecmd', "tar")); $cmd = "tar cf $temp ".quotemeta($pfile); } if ($in{'test'}) { # Don't actually do anything if in test mode &ok_exit(); } # Run the command, and send back the resulting file local $qpdir = quotemeta($pdir); local $out = `cd $qpdir ; ($cmd) 2>&1 borderIcol1Ljava/awt/Color;col2body()VCodeLineNumberTable(I)V(ILjava/awt/Color;)V$(ILjava/awt/Color;Ljava/awt/Color;)V4(ILjava/awt/Color;Ljava/awt/Color;Ljava/awt/Color;)V#(Ljava/awt/Color;Ljava/awt/Color;)Vinsets()Ljava/awt/Insets;paint(Ljava/awt/Graphics;)V SourceFileBorderPanel.java  ? @  A  java/awt/Insets BC DEF GHI J K LBM $% NB BorderPaneljava/awt/PanelUtil light_edge dark_edge(IIII)Vjava/awt/GraphicssetColor(Ljava/awt/Color;)Vjava/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionwidthheightfillRectjava/awt/ContainerdrawLine @****   I***** R"******, !W'******,*- & ]-******,*-*  !",#!N"*****+*,& '!("#8 Y*`*`*`*` ,$%*+* +* * *+* d=* d>+* 6*%+d+d+* 6*-+ddd+dddбB123#5(6<7D8P9^:l8r<z=>?=A&'file/CbButton.class0100664000567100000120000001127410522475215014237 0ustar jcameronwheel- 8} 9~  8  8  8  8  8  8 8 8 8 8  8  8  8 8 8 8 8 8 5 5 8 8  8 8 8 5 8LEFTI ConstantValueRIGHTABOVEBELOWimageLjava/awt/Image;stringLjava/lang/String;callbackLCbButtonCallback;imodeiwidthiheightpwidthpheighttwidththeightinsideZindentgroupLCbButtonGroup;selectedlc1Ljava/awt/Color;lc2lc3hc1hc2hc3%(Ljava/awt/Image;LCbButtonCallback;)VCodeLineNumberTable'(Ljava/lang/String;LCbButtonCallback;)V8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VsetGroup(LCbButtonGroup;)Vselect()VsetText(Ljava/lang/String;)VsetImage(Ljava/awt/Image;)V setImageText&(Ljava/awt/Image;Ljava/lang/String;I)Vpaint(Ljava/awt/Graphics;)Vupdate mouseEnter(Ljava/awt/Event;II)Z mouseExit mouseDownmouseUp preferredSize()Ljava/awt/Dimension; minimumSizeimgSize(II)Ljava/awt/Dimension; SourceFile CbButton.java ^c ^g X WX X YX X ZX X [X X \X X ]X DE FG J; HI K; L;  O; P; M; N; TU f g QR w ; ; SR VR yz no fgjava/awt/Dimension ^ vwCbButtonjava/awt/CanvasUtil light_edgebody dark_edge light_edge_hibody_hi dark_edge_higetWidth(Ljava/awt/Image;)I getHeightfnmLjava/awt/FontMetrics;java/awt/FontMetrics stringWidth(Ljava/lang/String;)I()Ijava/lang/Mathmax(II)I CbButtonGroupadd (LCbButton;)Vjava/awt/Componentrepaintsizewidthheightjava/awt/GraphicssetColor(Ljava/awt/Color;)VfillRect(IIII)VdrawLinefLjava/awt/Font;setFont(Ljava/awt/Font;)V drawImage5(Ljava/awt/Image;IIIILjava/awt/image/ImageObserver;)Z getDescent drawString(Ljava/lang/String;II)VCbButtonCallbackclick(II)V!89:;<=>;<?@;<AB;<CDEFGHIJ;K;L;M;N;O;P;QRSRTUVRWXYXZX[X\X]X^_`% *+,a ^b`% *+,a  ^c`4***** * * *+*,************u*n*dCC***``***`$***`***``>***`**` ***`**`ar#.$3%8&='C(J)U*`,g-u.014569:;>? @BC(D3Fde`.*+** aMN Ofg`0* **!aUVWhi`S'*+*****"a]^ _`"a&bjk`Q%**+*****"ahi jk l$mlm`zB*+*,*********"a& st uvw'x2y=zA{no` j*# * *M*# * *N*# **:*$%6*$&6*' *(,:*' *(,:+-)+dd*+)+d++d++)+ddd++ddd+*#++)+ddd++ddd++)+,-***z**ddd.: +* %d*ddl &dl % &*/W+* %d*ddl %``*`0dl1**O+**dl*d*ddl***/W+**dl*``1v*nk*<*dd.: +* %dl &dl % &*/W+*$+**dl*`0dl1a$&:Lbx}  4cAHipo`*+2aqr`+ *#*"a sr`+ *#*"a tr`+ *'*"a ur`n>2.*$%#*$&* **3*4*'*"a%/38<vw`(5Y**6axw`*7ayz`nF*nF*n8%%8  85Y*j*j6a ",{|file/MultiColumn.java0100644000567100000120000003074010122720133014564 0ustar jcameronwheel// MultiColumn // A List box that supports multiple columns. import java.awt.*; import java.util.Vector; public class MultiColumn extends BorderPanel implements CbScrollbarCallback { MultiColumnCallback callback; // what to call back to String title[]; // column titles boolean adjustable = true; boolean drawlines = true; Color colors[][] = null; boolean enabled = true; boolean multiselect = false; int cpos[]; // column x positions float cwidth[]; // proportional column widths Vector list[]; // columns of the list CbScrollbar sb; // scrollbar at the right side int width, height; // size, minus the scrollbar Insets in; // used space around the border int sbwidth; // width of the scrollbar int th; // height of title bar Image bim; // backing image Graphics bg; // backing graphics Font font = new Font("timesRoman", Font.PLAIN, 12); FontMetrics fnm; // drawing font size int coldrag = -1; // column being resized int sel = -1; // selected row int sels[] = new int[0]; // all selected rows int top = 0; // first row displayed long last; // last mouse click time int rowh = 16; // row height Event last_event; // last event that triggered callback int sortcol; // Column currently being sorted int sortdir; // Sort direction (0=none, 1=up, 2=down) // Create a new list with the given column titles MultiColumn(String t[]) { super(3, Util.dark_edge_hi, Util.body_hi); title = new String[t.length]; for(int i=0; i= top+r) { top = s-1; if (top > list[0].size() - r) top = list[0].size() - r; sb.setValue(top); repaint(); } } // deleteItem // Remove one row from the list void deleteItem(int n) { for(int i=0; i 0) { System.arraycopy(sels, 0, nsels, 0, i); System.arraycopy(sels, i+1, nsels, i, nsels.length-i); sel = nsels[0]; } break; } } repaint(); compscroll(); } // clear // Remove everything from the list void clear() { for(int i=0; i= top && sels[i] <= bot) { bg.setColor(sels[i] == sel ? Util.body : lighterGray); bg.fillRect(0, th+(sels[i]-top)*rowh, width, rowh); } } } // Draw each column for(int i=0; i w-3) s = s.substring(0, s.length()-1); if (!enabled) bg.setColor(Util.body); else if (colors != null) bg.setColor(colors[j][i]); bg.drawString(s, x+1, th+(j+1-top)*rowh-fd); } else if (o instanceof Image) { // Render image in column Image im = (Image)o; bg.drawImage(im, x+1, th+(j-top)*rowh, this); } } } } // mouseDown // Select a list item or a column to drag public boolean mouseDown(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; coldrag = -1; if (y < th) { // Click in title bar for(int i=0; i 0 && Math.abs(cpos[i] - x) < 3) { // clicked on a column separator coldrag = i; } else if (x >= cpos[i] && x < cpos[i+1]) { // clicked in a title callback.headingClicked(this, i); } } } else { // Item chosen from list int row = (y-th)/rowh + top; if (row < list[0].size()) { // Double-click? boolean dclick = false; if (e.when-last < 1000 && sel == row) dclick = true; else last = e.when; if (e.shiftDown() && multiselect && sel != -1) { // Select all from last selection to this one int zero = sels[0]; if (zero < row) { sels = new int[row-zero+1]; for(int i=zero; i<=row; i++) sels[i-zero] = i; } else { sels = new int[zero-row+1]; for(int i=zero; i>=row; i--) sels[zero-i] = i; } } else if (e.controlDown() && multiselect) { // Add this one to selection int nsels[] = new int[sels.length + 1]; System.arraycopy(sels, 0, nsels, 0,sels.length); nsels[sels.length] = row; sels = nsels; } else { // Select one row only, and de-select others sels = new int[1]; sels[0] = row; } sel = row; repaint(); last_event = e; if (callback != null) { // Callback the right function if (dclick) callback.doubleClick(this, row); else callback.singleClick(this, row); } else { // Send an event getParent().postEvent( new Event(this, Event.ACTION_EVENT, dclick?"Double":"Single")); } } } return true; } // mouseDrag // If a column is selected, change it's width public boolean mouseDrag(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; if (coldrag != -1) { if (x > cpos[coldrag-1]+3 && x < cpos[coldrag+1]-3) { cpos[coldrag] = x; cwidth[coldrag-1] = (cpos[coldrag]-cpos[coldrag-1]) / (float)width; cwidth[coldrag] = (cpos[coldrag+1]-cpos[coldrag]) / (float)width; repaint(); } } return true; } public void moved(CbScrollbar s, int v) { moving(s, v); } public void moving(CbScrollbar s, int v) { top = sb.getValue(); compscroll(); repaint(); } // compscroll // Re-compute the size of the scrollbar private void compscroll() { if (fnm == null) return; // not visible int r = rows(); int c = list[0].size() - r; sb.setValues(top, r==0?1:r, list[0].size()); } // rows // Returns the number of rows visible in the list private int rows() { return Math.min(height/rowh - 1, list[0].size()); } public Dimension minimumSize() { return new Dimension(400, 100); } public Dimension preferredSize() { return minimumSize(); } } // MultiColumnCallback // Objects implementing this interface can be passed to the MultiColumn // class, to have their singleClick() and doubleClick() functions called in // response to single or double click in the list. interface MultiColumnCallback { // singleClick // Called on a single click on a list item void singleClick(MultiColumn list, int num); // doubleClick // Called upon double-clicking on a list item void doubleClick(MultiColumn list, int num); // headingClicked // Called when a column heading is clicked on void headingClicked(MultiColumn list, int col); } file/CbImageChooser.java0100644000567100000120000001111610122720133015122 0ustar jcameronwheelimport java.awt.*; import java.net.*; class CbImageChooser extends Panel implements CbButtonCallback { Image img; String imgsrc; int imgw, imgh; CbButton but; CbImageFileWindow filewin; //CbImageChooserCallback callback; CbImageChooser(Image i) { this(i, null); } CbImageChooser(Image i, String s) { setLayout(new BorderLayout()); add("Center", but = new CbButton("Choose..", this)); setImage(i, s==null ? "" : s); } void setImage(Image i, String s) { img = i; imgsrc = s; if (img != null) but.setImage(img); else but.setText("Choose.."); } public void click(CbButton b) { if (b == but && filewin == null) new CbImageFileWindow(this); } } class CbImageFileWindow extends FixedFrame implements CbButtonCallback { CbImageChooser parent; ScrollImage imgp; TextField url; CbButton browse, ok, cancel; FileDialog filedlog; String lastfile = ""; CbImageFileWindow(CbImageChooser p) { parent = p; parent.filewin = this; setLayout(new BorderLayout()); add("Center", imgp = new ScrollImage(parent.img, 200, 200)); Panel bot = new GrayPanel(); bot.setLayout(new FlowLayout(FlowLayout.LEFT)); bot.add(new Label("URL:")); bot.add(url = new TextField(parent.imgsrc, 20)); bot.add(browse = new CbButton("Browse..", this)); bot.add(new Label(" ")); bot.add(ok = new CbButton("Ok", this)); bot.add(cancel = new CbButton("Cancel", this)); add("South", bot); pack(); show(); setTitle("Choose Image.."); Util.recursiveBackground(this, Util.body); } public void click(CbButton b) { if (b == ok) parent.setImage(imgp.img, lastfile); if (b == ok || b == cancel) dispose(); else if (b == browse) { // Open file chooser here! FileDialog filedlog = new FileDialog(this, "Choose Image",FileDialog.LOAD); filedlog.show(); if (filedlog.getFile() != null) { // file chosen.. load it in String fn = filedlog.getDirectory()+filedlog.getFile(); url.setText(fn); loadFile(fn); } } } public void dispose() { super.dispose(); parent.filewin = null; } public boolean action(Event evt, Object obj) { if (evt.target == url) { String ut = url.getText(); if (ut.startsWith("http:") || ut.startsWith("ftp:")) loadURL(ut); else loadFile(ut); return true; } return false; } private void loadFile(String f) { Image i = Util.tk.getImage(f); if (i == null || !Util.waitForImage(i)) new ErrorWindow("Failed to load image "+f); else { imgp.setImage(i); lastfile = f; } } private void loadURL(String u) { try { Image i = Util.tk.getImage(new URL(u)); if (i == null || !Util.waitForImage(i)) new ErrorWindow("Failed to load image from "+u); else { imgp.setImage(i); lastfile = u; } } catch(MalformedURLException e) { new ErrorWindow(u+" is not a valid URL"); } } } class ScrollImage extends Panel implements CbScrollbarCallback { Image img; int imgw, imgh; int pw, ph; CbScrollbar vsc, hsc; boolean compute_scrollbars = true; ScrollImage(Image i) { this(i, Util.getWidth(i), Util.getHeight(i)); } ScrollImage(Image i, int w, int h) { pw = w; ph = h; setLayout(new BorderLayout()); add("East", vsc = new CbScrollbar(CbScrollbar.VERTICAL, this)); add("South", hsc = new CbScrollbar(CbScrollbar.HORIZONTAL, this)); setImage(i); } void setImage(Image i) { img = i; if (img != null) { imgw = Util.getWidth(img); imgh = Util.getHeight(img); } compute_scrollbars = true; repaint(); } public void paint(Graphics g) { int w = size().width-vsc.size().width, h = size().height-hsc.size().height; if (compute_scrollbars) { if (img == null) { hsc.setValues(0, 1, 1); vsc.setValues(0, 1, 1); } else { if (imgw < w) hsc.setValues(0, 1, 1); else hsc.setValues(0, w, imgw); if (imgh < h) vsc.setValues(0, 1, 1); else vsc.setValues(0, h, imgh); } compute_scrollbars = false; } g.setColor(Util.body); g.fillRect(0, 0, w, h); if (img != null) { if (imgw < w && imgh < h) g.drawImage(img, (w-imgw)/2, (h-imgh)/2, this); else g.drawImage(img, -hsc.getValue(), -vsc.getValue(),this); } else { g.setFont(Util.f); g.setColor(Util.text); String s = ""; g.drawString(s, (w-Util.fnm.stringWidth(s))/2, (h-Util.fnm.getHeight())/2); } } public void update(Graphics g) { paint(g); } public void reshape(int nx, int ny, int nw, int nh) { super.reshape(nx, ny, nw, nh); compute_scrollbars = true; repaint(); } public void moved(CbScrollbar s, int p) { repaint(); } public void moving(CbScrollbar s, int p) { } public Dimension minimumSize() { return new Dimension(pw, ph); } public Dimension preferredSize() { return minimumSize(); } } file/CbButtonCallback.class0100664000567100000120000000021110522475215015641 0ustar jcameronwheel- click (LCbButton;)V SourceFile CbButton.javaCbButtonCallbackjava/lang/Objectfile/makelink.cgi0100755000567100000120000000114610107635755013753 0ustar jcameronwheel#!/usr/local/bin/perl # makelink.cgi # Create a symbolic link require './file-lib.pl'; $disallowed_buttons{'makelink'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("link", undef, $in{'from'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; &lock_file($in{'from'}); if ($access{'ro'} || !&can_access($in{'from'})) { print &text('link_efrom2', $in{'from'}),"\n"; } elsif ($follow) { print $text{'link_efollow'},"\n"; } elsif (!symlink($in{'to'}, $in{'from'})) { print "$!\n"; } else { print "\n"; print &file_info_line($in{'from'}),"\n"; &unlock_file($in{'from'}); } file/file-lib.pl0100644000567100000120000002607310515530450013504 0ustar jcameronwheel# file-lib.pl # Common functions for file manager CGIs do '../web-lib.pl'; &ReadParse(\%prein, 'GET'); if ($prein{'trust'}) { &open_trust_db(); if ($trustdb{$prein{'trust'}}) { $trust_unknown_referers = 1; $trustdb{$prein{'trust'}} = time(); } dbmclose(%trustdb); } &init_config(); @file_buttons = ( "save", "preview", "edit", "info", "acl", "attr", "ext", "search", "delete", "new", "upload", "mkdir", "makelink", "rename", "sharing", "mount", "copy" ); if ($module_info{'usermin'}) { # Usermin gets the allowed list from the module config &switch_to_remote_user(); &create_user_config_dirs(); $hide_dot_files = $userconfig{'hide_dot_files'}; $follow = int($config{'follow'}); $real_home_dir = &simplify_path(&resolve_links($remote_user_info[7])); $upload_max = $config{'max'}; if ($config{'home_only'} == 1) { @allowed_roots = ( $real_home_dir, split(/\s+/, $config{'root'}) ); } elsif ($config{'home_only'} == 2) { @allowed_roots = split(/\s+/, $config{'root'}); } else { @allowed_roots = ( "/" ); } @denied_roots = split(/\s+/, $config{'noroot'}); if ($config{'archive'} eq 'y') { $archive = 1; } elsif ($config{'archive'} eq 'n') { $archive = 0; } else { $archive = 2; $archmax = $config{'archive'}; } $unarchive = 1; $dostounix = 1; $chroot = "/"; @disallowed_buttons = ( ); foreach $k (keys %config) { if ($k =~ /^button_(.*)/ && $config{$k} == 0) { push(@disallowed_buttons, $1); } } $canperms = 1; $canusers = 1; $contents = 1; } else { # Webmin gets the list of allowed directories from the ACL %access = &get_module_acl(); $hide_dot_files = $config{'hide_dot_files'}; $follow = int($access{'follow'}); $upload_max = $access{'max'}; @allowed_roots = split(/\s+/, $access{'root'}); if ($access{'home'}) { local @u = getpwnam($remote_user); if (@u) { push(@allowed_roots, &simplify_path(&resolve_links($u[7]))); } } @denied_roots = split(/\s+/, $access{'noroot'}); $archive = $access{'archive'}; $archmax = $access{'archmax'}; $unarchive = $access{'unarchive'}; $dostounix = $access{'dostounix'}; $chroot = $access{'chroot'}; $access{'button_search'} = 0 if (!&has_command("find")); $access{'button_makelink'} = 0 if (!&supports_symlinks()); $access{'button_info'} = 0 if (!&supports_users()); @disallowed_buttons = grep { !$access{'button_'.$_} } @file_buttons; if (&is_readonly_mode()) { # Force read-only mode for file manager if global readonly # is in effect. $access{'ro'} = 1; } $canperms = $access{'noperms'} ? 0 : 1; $canusers = $access{'nousers'} ? 0 : 1; $contents = $access{'contents'}; } %disallowed_buttons = map { $_, 1 } @disallowed_buttons; $icon_map = ( "c", 1, "txt", 1, "pl", 1, "cgi", 1, "html", 1, "htm", 1, "gif", 2, "jpg", 2, "tar", 3 ); # file_info_line(path, [displaypath]) # Returns a line of text containing encoded details of some file sub file_info_line { local @st; local $islink = (-l $_[0]); local $f = $islink && &must_follow($_[0]); local @st = $f ? stat($_[0]) : lstat($_[0]); local $ext = $_[0] =~ /\S+\.([^\.\/]+)$/ ? $1 : undef; local $dp = $_[1] || $_[0]; $dp =~ s/\\/\\\\/g; $dp =~ s/\t/\\t/g; return undef if ($dp =~ /\r|\n/); if (!@st) { # Work around a broken stat function on large files on redhat 7.x &has_command("stat") || return undef; local $out = `stat -t '$_[0]'`; return undef if ($?); $out =~ /^(.*)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/; local $type = defined($icon_map{$ext}) ? $icon_map{$ext} : 4; local $user = defined(%uid_to_user) ? $uid_to_user{$5} : getpwuid($5); $user = $5 if (!$user); local $group = defined(%gid_to_group) ? $gid_to_group{$6} :getgrgid($6); $group = $6 if (!$group); local $size = $2; local $mtime = $13; local $mode = hex($4); return sprintf ("%s\t%u\t%s\t%s\t%u\t%u\t%u\t%s", $dp, $type, $user, $group, $size, $mode, $mtime, undef); } local $type = $islink && !$f ? 5 : -d _ ? 0 : -b _ ? 6 : -c _ ? 6 : -p _ ? 7 : -S _ ? 7 : defined($icon_map{$ext}) ? $icon_map{$ext} : 4; local $user = !&supports_users() ? "root" : defined(%uid_to_user) ? $uid_to_user{$st[4]} : getpwuid($st[4]); $user = $st[4] if (!$user); local $group = !&supports_users() ? "root" : defined(%gid_to_group) ? $gid_to_group{$st[5]} :getgrgid($st[5]); $group = $st[5] if (!$group); local $rl = readlink($_[0]); return join("\t", $dp, $type, $user, $group, $st[7] < 0 ? 2**32+$st[7] : $st[7], $st[2], $st[9], $f ? "" : $islink && !$rl ? "???" : $rl); } # switch_acl_uid() sub switch_acl_uid { if (!$module_info{'usermin'} && $access{'uid'}) { local @u = $access{'uid'} < 0 ? getpwnam($remote_user) : getpwuid($access{'uid'}); @u || &error($text{'switch_euser'}); $( = $u[3]; $) = "$u[3] ".join(" ", $u[3], &other_groups($u[0])); ($>, $<) = ($u[2], $u[2]); umask(oct($access{'umask'})); } } # switch_acl_uid_and_chroot() # Combines the switch_acl_uid and go_chroot functions sub switch_acl_uid_and_chroot { if (!$module_info{'usermin'} && $access{'uid'}) { local @u = $access{'uid'} < 0 ? getpwnam($remote_user) : getpwuid($access{'uid'}); @u || &error($text{'switch_euser'}); local @other = &other_groups($u[0]); &go_chroot(); $( = $u[3]; $) = "$u[3] ".join(" ", $u[3], @other); ($>, $<) = ($u[2], $u[2]); umask(oct($access{'umask'})); } else { &go_chroot(); } } # can_access(file) # Returns 1 if some file can be edited/deleted sub can_access { return &under_root_dir($_[0], \@allowed_roots) && ($_[0] eq "/" || !&under_root_dir($_[0], \@denied_roots)); } # under_root_dir(file, &roots) # Returns 1 if some file is under one of the given roots sub under_root_dir { local @f = grep { $_ ne '' } split(/\//, $_[0]); local $r; DIR: foreach $r (@{$_[1]}) { return 1 if ($r eq '/' || $_[0] eq '/' || $_[0] eq $r); local @a = grep { $_ ne '' } split(/\//, $r); local $i; for($i=0; $i<@a; $i++) { next DIR if ($a[$i] ne $f[$i]); } return 1; } return 0; } # can_list(dir) # Returns 1 if some directory can be listed. Parent directories of allowed # directories are included as well. sub can_list { return &under_root_dir_or_parent($_[0], \@allowed_roots) && ($_[0] eq "/" || !&under_root_dir($_[0], \@denied_roots)); } # under_root_dir_or_parent(file, &roots) # Returns 1 if some file is under one of the given roots, or their parents sub under_root_dir_or_parent { local @f = grep { $_ ne '' } split(/\//, $_[0]); DIR: foreach $r (@allowed_roots) { return 1 if ($r eq '/' || $_[0] eq '/' || $_[0] eq $r); local @a = grep { $_ ne '' } split(/\//, $r); local $i; for($i=0; $i<@a && $i<@f; $i++) { next DIR if ($a[$i] ne $f[$i]); } return 1; } return 0; } # accessible_subdir(dir) # Returns the path to a dir under the given one that we can access sub accessible_subdir { local ($r, @rv); foreach $r (@allowed_roots) { if ($r =~ /^(\Q$_[0]\E\/[^\/]+)/) { push(@rv, $1); } } return @rv; } sub open_trust_db { local $trust = "$ENV{'WEBMIN_CONFIG'}/file/trust"; eval "use SDBM_File"; dbmopen(%trustdb, $trust, 0700); eval { $trustdb{'1111111111'} = 'foo bar' }; if ($@) { dbmclose(%trustdb); eval "use NDBM_File"; dbmopen(%trustdb, $trust, 0700); } } # must_follow(path) # For symlinks, returns 1 if a link should be follow, 0 if not sub must_follow { if ($follow == 1) { return 1; } elsif ($follow == 0) { return 0; } else { local @s = stat($_[0]); local @l = lstat($_[0]); @st = ($s[4] == $l[4] ? @s : @l); return $s[4] == $l[4]; } } # extract_archive(path, delete) # Called by upload to extract some zip or tar.gz file. Returns undef if something # was actually done, an error message otherwise. sub extract_archive { local $out; $_[0] =~ /^(\S*\/)/ || return 0; local $dir = $1; local $qdir = quotemeta($dir); local $qpath = quotemeta($_[0]); if ($_[0] =~ /\.zip$/i) { # Extract zip file return &text('zip_ecmd', "unzip") if (!&has_command("unzip")); $out = `(cd $qdir; unzip -o $qpath) 2>&1 &1 &1`; if ($?) { return &text('zip_euntar2', $out); } } elsif ($_[0] =~ /\.gz$/i) { # Uncompress gzipped file return &text('zip_ecmd', "gunzip") if (!&has_command("gunzip")); local $final = $_[0]; $final =~ s/\.gz$//; local $qfinal = quotemeta($final); $out = `(cd $qdir; gunzip -c $qpath >$qfinal) 2>&1`; if ($?) { return &text('zip_euntar2', $out); } } else { return $text{'zip_ename'}; } if ($_[1]) { unlink($_[0]); } return undef; } # post_upload(path, dir, unzip) sub post_upload { local ($path, $dir, $zip) = @_; if ($unarchive == 2) { $zip = $path =~ /\.(zip|tgz|tar|tar\.gz)$/i ? 1 : 0; } elsif ($unarchive == 0) { $zip = 0; } local $refresh = $path; local $err; if ($zip) { $err = &extract_archive($path, $zip-1); if (!$err) { # Refresh whole dir $refresh = $in{'dir'}; } } $info = &file_info_line(&unmake_chroot($refresh), $refresh); print "\n"; } sub go_chroot { if ($chroot ne "/" && $chroot ne "") { # First build hash of users and groups, which will not be accessible # after a chroot local (@u, @g); setpwent(); while(@u = getpwent()) { $uid_to_user{$u[2]} = $u[0] if (!defined($uid_to_user{$u[2]})); $user_to_uid{$u[0]} = $u[2] if (!defined($user_to_uid{$u[0]})); } endpwent(); setgrent(); while(@g = getgrent()) { $gid_to_group{$g[2]} = $g[0] if(!defined($gid_to_group{$g[2]})); $group_to_gid{$g[0]} = $g[2] if(!defined($group_to_gid{$g[0]})); } endgrent(); chroot($chroot) || die("chroot to $chroot failed"); } } # make_chroot(dir) # Converts some real directory to the chroot form sub make_chroot { if ($chroot eq "/") { return $_[0]; } elsif ($_[0] eq $chroot) { return "/"; } else { local $rv = $_[0]; if ($rv =~ /^$chroot\//) { $rv =~ s/^$chroot//; return $rv; } else { return undef; } } } # unmake_chroot(dir) # Converts some chroot'd directory to the real form sub unmake_chroot { if ($chroot eq "/") { return $_[0]; } elsif ($_[0] eq "/") { return $chroot; } else { return $chroot.$_[0]; } } # print_content_type() # Prints the content-type header, with a charset sub print_content_type { if ($userconfig{'nocharset'} || $config{'nocharset'}) { # Never try to use charset print "Content-type: text/plain\n\n"; } else { $charset = &get_charset(); print "Content-type: text/plain; charset=$charset\n\n"; } } 1; file/FixedFrame.class0100664000567100000120000000221210522475215014521 0ustar jcameronwheel-Q % & ' () *+ ,- . / 01 % 23 24 56 078 9 :; ;<=mwImh()VCodeLineNumberTable(II)V handleEvent(Ljava/awt/Event;)Z minimumSize()Ljava/awt/Dimension; preferredSize setFixedSize SourceFileFixedFrame.java   > ?@A B C DE F GH IJ KL MN O java/awt/Dimension P   FixedFramejava/awt/FrameUtiltkLjava/awt/Toolkit;java/awt/Toolkit getScreenSizejava/lang/Mathrandom()Dwidthheightjava/awt/Componentmovejava/awt/EventtargetLjava/lang/Object;idjava/awt/Windowdisposejava/awt/Container!d8***LI9*+l(k+lk     7 /* **B+ *+ ɠ * *+ ?#**Y***  !! *&"' ** + ,#$file/save.cgi0100755000567100000120000000155410424456466013123 0ustar jcameronwheel#!/usr/local/bin/perl # save.cgi # Write data to a file require './file-lib.pl'; $disallowed_buttons{'edit'} && &error($text{'ebutton'}); $p = $ENV{'PATH_INFO'}; &webmin_log("save", undef, $p) if ($access{'uid'}); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); if (defined($in{'length'}) && length($buf) != $in{'length'}) { print &text('edit_elength'),"\n"; } else { &lock_file($p); if ($access{'ro'} || !&can_access($p)) { print &text('edit_eaccess', $p),"\n"; } elsif (-l $p && !&must_follow($p)) { print &text('edit_efollow', $p),"\n"; } elsif (!&open_tempfile(FILE, ">$p", 1)) { print "$!\n"; } else { &print_tempfile(FILE, $buf); &close_tempfile(FILE); &unlock_file($p); print "\n"; print &file_info_line($p),"\n"; &webmin_log("save", undef, $p) if (!$access{'uid'}); } } file/acl_security.pl0100644000567100000120000001354210536046673014520 0ustar jcameronwheel require 'file-lib.pl'; do '../ui-lib.pl'; # acl_security_form(&options) # Output HTML for editing security options for the file module sub acl_security_form { print " $text{'acl_user'}\n"; local $u = $_[0]->{'uid'} < 0 ? '' : getpwuid($_[0]->{'uid'}); printf " %s\n", $_[0]->{'uid'} < 0 ? 'checked' : '', $text{'acl_user_def'}; printf "\n", $_[0]->{'uid'} < 0 ? '' : 'checked'; print " ", &user_chooser_button("uid", 0)," \n"; print " $text{'acl_umask'}\n"; print " \n"; print " $text{'acl_follow'} \n"; printf " $text{'yes'}\n", $_[0]->{'follow'} == 1 ? "checked" : ""; printf " $text{'acl_fyes'}\n", $_[0]->{'follow'} == 2 ? "checked" : ""; printf " $text{'no'} \n", $_[0]->{'follow'} == 0 ? "checked" : ""; print " $text{'acl_ro'} \n"; printf " $text{'yes'}\n", $_[0]->{'ro'} ? "checked" : ""; printf " $text{'no'} \n", $_[0]->{'ro'} ? "" : "checked"; print " $text{'acl_max'}\n"; printf " %s\n", $_[0]->{'max'} ? "" : "checked", $text{'acl_unlim'}; printf "\n", $_[0]->{'max'} ? "checked" : ""; printf " %s \n", $_[0]->{'max'}, $text{'acl_b'}; print " $text{'acl_archive'} \n"; printf " $text{'yes'}\n", $_[0]->{'archive'} == 1 ? "checked" : ""; printf " $text{'acl_archmax'}\n", $_[0]->{'archive'} == 2 ? "checked" : ""; printf " %s\n", $_[0]->{'archmax'}, $text{'acl_b'}; printf " $text{'no'} \n", $_[0]->{'archive'} == 0 ? "checked" : ""; print " $text{'acl_unarchive'} \n"; printf " %s\n", $_[0]->{'unarchive'} == 2 ? "checked" : "", $text{'acl_unarchive2'}; printf " %s\n", $_[0]->{'unarchive'} == 1 ? "checked" : "", $text{'acl_unarchive1'}; printf " %s \n", $_[0]->{'unarchive'} == 0 ? "checked" : "", $text{'acl_unarchive0'}; print " $text{'acl_dostounix'} \n"; printf " %s\n", $_[0]->{'dostounix'} == 1 ? "checked" : "", $text{'yes'}; printf " %s \n", $_[0]->{'dostounix'} == 0 ? "checked" : "", $text{'no'}; print " $text{'acl_buttons'} \n"; foreach $b (@file_buttons) { printf " %s
\n", $b, $_[0]->{'button_'.$b} ? "checked" : "", $text{'acl_button_'.$b}; } print " \n"; print " $text{'acl_noperms'}\n"; print "",&ui_radio("noperms", int($_[0]->{'noperms'}), [ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ]),"\n"; print "$text{'acl_nousers'}\n"; print "",&ui_radio("nousers", int($_[0]->{'nousers'}), [ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ])," \n"; print " $text{'acl_filesystems'}\n"; print "",&ui_yesno_radio("filesystems", int($_[0]->{'filesystems'})),"\n"; print "$text{'acl_contents'}\n"; print "",&ui_yesno_radio("contents", int($_[0]->{'contents'}))," \n"; print " $text{'acl_chroot'}\n"; printf "\n", $_[0]->{'chroot'}; print " $text{'acl_dirs'}
$text{'acl_relto'}\n"; print "
\n"; printf " %s
\n", $_[0]->{'home'} ? 'checked' : '', $text{'acl_home'}; printf " %s\n", $_[0]->{'goto'} ? 'checked' : '', $text{'acl_goto'}; print " $text{'acl_nodirs'}
$text{'acl_relto'}\n"; print "
\n"; } # acl_security_save(&options) # Parse the form for security options for the file module sub acl_security_save { $_[0]->{'uid'} = $in{'uid_def'} ? -1 : getpwnam($in{'uid'}); $in{'root'} =~ s/\r//g; local @root = split(/\s+/, $in{'root'}); map { s/\/+/\//g } @root; map { s/([^\/])\/+$/$1/ } @root; $_[0]->{'root'} = join(" ", @root); $in{'noroot'} =~ s/\r//g; local @noroot = split(/\s+/, $in{'noroot'}); map { s/\/+/\//g } @noroot; map { s/([^\/])\/+$/$1/ } @noroot; $_[0]->{'noroot'} = join(" ", @noroot); $_[0]->{'follow'} = $in{'follow'}; $_[0]->{'ro'} = $in{'ro'}; $in{'umask'} =~ /^[0-7]{3}$/ || &error("Invalid umask"); $_[0]->{'umask'} = $in{'umask'}; $_[0]->{'home'} = $in{'home'}; $_[0]->{'goto'} = $in{'goto'}; $_[0]->{'max'} = $in{'max_def'} ? undef : $in{'max'}; $_[0]->{'archive'} = $in{'archive'}; $_[0]->{'archmax'} = $in{'archmax'}; foreach $b (@file_buttons) { $_[0]->{"button_$b"} = $in{"button_$b"}; } $_[0]->{'unarchive'} = $in{'unarchive'}; $_[0]->{'dostounix'} = $in{'dostounix'}; $_[0]->{'chroot'} = $in{'chroot'}; $_[0]->{'noperms'} = $in{'noperms'}; $_[0]->{'nousers'} = $in{'nousers'}; $_[0]->{'filesystems'} = $in{'filesystems'}; $_[0]->{'contents'} = $in{'contents'}; } file/CbButton.java0100644000567100000120000001247310122720133014037 0ustar jcameronwheelimport java.awt.*; import java.util.*; public class CbButton extends Canvas { public static final int LEFT = 0; public static final int RIGHT = 1; public static final int ABOVE = 2; public static final int BELOW = 3; Image image; String string; CbButtonCallback callback; int imode; int iwidth, iheight, pwidth, pheight, twidth, theight; boolean inside, indent; CbButtonGroup group; boolean selected; Color lc1 = Util.light_edge, lc2 = Util.body, lc3 = Util.dark_edge; Color hc1 = Util.light_edge_hi, hc2 = Util.body_hi, hc3 = Util.dark_edge_hi; public CbButton(Image i, CbButtonCallback cb) { this(i, null, LEFT, cb); } public CbButton(String s, CbButtonCallback cb) { this(null, s, LEFT, cb); } public CbButton(Image i, String s, int im, CbButtonCallback cb) { image = i; string = s; imode = im; callback = cb; if (image != null) { iwidth = Util.getWidth(image); iheight = Util.getHeight(image); } if (string != null) { twidth = Util.fnm.stringWidth(string); theight = Util.fnm.getHeight(); } if (image != null && string != null) { switch(imode) { case LEFT: case RIGHT: pwidth = iwidth + twidth + 6; pheight = Math.max(iheight , theight) + 4; break; case ABOVE: case BELOW: pwidth = Math.max(iwidth, twidth) + 4; pheight = iheight + theight + 6; break; } } else if (image != null) { pwidth = iwidth + 4; pheight = iheight + 4; } else if (string != null) { pwidth = twidth + 8; pheight = theight + 8; } } /**Make this button part of a mutual-exclusion group. Only one such * button can be indented at a time */ public void setGroup(CbButtonGroup g) { group = g; group.add(this); } /**Make this button the selected one in it's group */ public void select() { if (group != null) group.select(this); } /**Display the given string */ public void setText(String s) { string = s; image = null; twidth = Util.fnm.stringWidth(string); theight = Util.fnm.getHeight(); repaint(); } /**Display the given image */ public void setImage(Image i) { string = null; image = i; iwidth = Util.getWidth(image); iheight = Util.getHeight(image); repaint(); } /**Display the given image and text, with the given alignment mode */ public void setImageText(Image i, String s, int m) { image = i; string = s; imode = m; twidth = Util.fnm.stringWidth(string); theight = Util.fnm.getHeight(); iwidth = Util.getWidth(image); iheight = Util.getHeight(image); repaint(); } public void paint(Graphics g) { Color c1 = inside ? hc1 : lc1, c2 = inside ? hc2 : lc2, c3 = inside ? hc3 : lc3; int w = size().width, h = size().height; Color hi = indent||selected ? c3 : c1, lo = indent||selected ? c1 : c3; g.setColor(c2); g.fillRect(0, 0, w-1, h-1); g.setColor(hi); g.drawLine(0, 0, w-2, 0); g.drawLine(0, 0, 0, h-2); g.setColor(lo); g.drawLine(w-1, h-1, w-1, 1); g.drawLine(w-1, h-1, 1, h-1); if (inside) { /* g.setColor(hi); g.drawLine(1, 1, w-3, 1); g.drawLine(1, 1, 1, h-3); */ g.setColor(lo); g.drawLine(w-2, h-2, w-2, 2); g.drawLine(w-2, h-2, 2, h-2); } g.setColor(c3); g.setFont(Util.f); if (image != null && string != null) { if (imode == LEFT) { Dimension is = imgSize(w-twidth-6, h-4); g.drawImage(image, (w - is.width - twidth - 2)/2, (h-is.height)/2, is.width, is.height, this); g.drawString(string, (w - is.width - twidth - 2)/2 +is.width +2, (h + theight - Util.fnm.getDescent())/2); } else if (imode == RIGHT) { } else if (imode == ABOVE) { //Dimension is = imgSize(w-4, h-theight-6); g.drawImage(image, (w - iwidth)/2, (h - iheight - theight - 2)/2, iwidth, iheight, this); g.drawString(string, (w - twidth)/2, iheight+Util.fnm.getHeight()+2); } else if (imode == BELOW) { } } else if (image != null) { Dimension is = imgSize(w-4, h-4); g.drawImage(image, (w - is.width)/2, (h-is.height)/2, is.width, is.height, this); } else if (string != null) { g.drawString(string, (w - twidth)/2, (h+theight-Util.fnm.getDescent())/2); } } public void update(Graphics g) { paint(g); } public boolean mouseEnter(Event e, int x, int y) { inside = true; repaint(); return true; } public boolean mouseExit(Event e, int x, int y) { inside = false; repaint(); return true; } public boolean mouseDown(Event e, int x, int y) { indent = true; repaint(); return true; } public boolean mouseUp(Event e, int x, int y) { if (x >= 0 && y >= 0 && x < size().width && y < size().height) { if (callback != null) callback.click(this); select(); } indent = false; repaint(); return true; } public Dimension preferredSize() { return new Dimension(pwidth, pheight); } public Dimension minimumSize() { return preferredSize(); } private Dimension imgSize(int mw, int mh) { float ws = (float)mw/(float)iwidth, hs = (float)mh/(float)iheight; float s = ws < hs ? ws : hs; if (s > 1) s = 1; return new Dimension((int)(iwidth*s), (int)(iheight*s)); } } interface CbButtonCallback { void click(CbButton b); } class CbButtonGroup { Vector buttons = new Vector(); void add(CbButton b) { buttons.addElement(b); } void select(CbButton b) { for(int i=0; i px+3) { // move one tick to the right pos += step; } else { // start dragging dragging = true; dragx = x-px; } checkPos(); if (callback != null) callback.moved(this, pos); repaint(); return true; } public boolean mouseDrag(Event e, int x, int y) { if (dragging) { px = x-dragx; pos = (px-8)*(max - min) / (size().width-16); checkPos(); if (callback != null) callback.moving(this, pos); repaint(); } return dragging; } public boolean mouseUp(Event e, int x, int y) { if (dragging) { dragging = false; if (callback != null) callback.moved(this, pos); repaint(); return true; } return false; } public boolean mouseExit(Event e, int x, int y) { inside = false; repaint(); return true; } protected void checkPos() { if (pos < min) pos = min; else if (pos > max) pos = max; } public Dimension preferredSize() { return new Dimension(100, 20); } public Dimension minimumSize() { return preferredSize(); } } interface CbSliderCallback { /**Callled back when the slider stops at a new position * @param s The slider being moved * @param p New position */ public void moved(CbSlider s, int p); /**Callled back whenever the slider is being dragged * @param s The slider being moved * @param p New position */ public void moving(CbSlider s, int p); } file/rename.cgi0100755000567100000120000000104010107635771013416 0ustar jcameronwheel#!/usr/local/bin/perl # rename.cgi # Rename some file require './file-lib.pl'; $disallowed_buttons{'rename'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("rename", undef, $in{'old'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'old'})) { print &text('rename_eold', $in{'old'}),"\n"; } elsif (!&can_access($in{'new'})) { print &text('rename_enew', $in{'new'}),"\n"; } elsif (!&rename_logged($in{'old'}, $in{'new'})) { print "$!\n"; } else { print "\n"; } file/CbScrollbar.java0100644000567100000120000001717010122720133014506 0ustar jcameronwheel// CbScrollbar.java // A drop-in replacement for the AWT scrollbar class, with callbacks // and a nicer look. This scrollbar is typically used to display some // fraction of a list of items, with values ranging from min to max. // The lvisible parameter determines how many of the list are lvisible // at any one time. The value of the scrollbar ranges from min to // max-lvisible+1 (the highest position in the list to start displaying) import java.awt.*; public class CbScrollbar extends Panel { static final int VERTICAL = 0; static final int HORIZONTAL = 1; CbScrollbarCallback callback; // who to call back to boolean inside, indent; int orient; // horizontal or vertical? int value; // position int lvisible; // the number of lines lvisible int num; // total number of lines int lineinc = 1; // how much the arrow buttons move by Color lc1 = Util.light_edge, lc2 = Util.body, lc3 = Util.dark_edge; Color hc1 = Util.light_edge_hi, hc2 = Util.body_hi, hc3 = Util.dark_edge_hi; Color bc = Util.dark_bg; int y1, y2, x1, x2, drag; CbScrollbarArrow arrow1, arrow2; CbScrollbar(int o, CbScrollbarCallback cb) { this(o, 0, 1, 1, cb); } /**Create a new scrollbar */ CbScrollbar(int o, int v, int vis, int n, CbScrollbarCallback cb) { setValues(v, vis, n); orient = o; callback = cb; setLayout(null); if (orient == VERTICAL) { add(arrow1 = new CbScrollbarArrow(this, 0)); add(arrow2 = new CbScrollbarArrow(this, 1)); } else { add(arrow1 = new CbScrollbarArrow(this, 2)); add(arrow2 = new CbScrollbarArrow(this, 3)); } } /**Set the current scrollbar parameters * @param v Current position * @param vis Number of lines lvisible * @param n Total number of lines */ public void setValues(int v, int vis, int n) { value = v; lvisible = vis; num = n; if (lvisible > num) lvisible = num; checkValue(); repaint(); } public int getValue() { return value; } public void setValue(int v) { value = v; checkValue(); repaint(); } private void checkValue() { if (value < 0) value = 0; else if (value > num-lvisible) value = num-lvisible; } public void paint(Graphics g) { if (num == 0) return; int w = size().width, h = size().height; boolean ins = inside && !(arrow1.inside || arrow2.inside); Color c1 = ins ? hc1 : lc1, c2 = ins ? hc2 : lc2, c3 = ins ? hc3 : lc3; g.setColor(bc); g.fillRect(0, 0, w, h); g.setColor(c3); g.drawLine(0, 0, w-1, 0); g.drawLine(0, 0, 0, h-1); g.setColor(c1); g.drawLine(w-1, h-1, w-1, 0); g.drawLine(w-1, h-1, 0, h-1); if (orient == VERTICAL) { int va = h-w*2; y1 = w+va*value/num; y2 = w+va*(value+lvisible)/num-1; g.setColor(c2); g.fillRect(1, y1, w-2, y2-y1); g.setColor(indent ? c3 : c1); g.drawLine(1, y1, w-2, y1); g.drawLine(1, y1, 1, y2-1); g.setColor(indent ? c1 : c3); g.drawLine(w-2, y2-1, w-2, y1); g.drawLine(w-2, y2-1, 1, y2-1); if (ins) { g.drawLine(w-3, y2-2, w-3, y1+1); g.drawLine(w-3, y2-2, 2, y2-2); } } else if (orient == HORIZONTAL) { int va = w-h*2; x1 = h+va*value/num; x2 = h+va*(value+lvisible)/num-1; g.setColor(c2); g.fillRect(x1, 1, x2-x1, h-2); g.setColor(indent ? c3 : c1); g.drawLine(x1, 1, x1, h-2); g.drawLine(x1, 1, x2-1, 1); g.setColor(indent ? c1 : c3); g.drawLine(x2-1, h-2, x1, h-2); g.drawLine(x2-1, h-2, x2-1, 1); if (ins) { g.drawLine(x2-2, h-3, x1+1, h-3); g.drawLine(x2-2, h-3, x2-2, 2); } } } /**Called by arrows to move the slider */ void arrowClick(int d) { int oldvalue = value; value += d; checkValue(); if (value != oldvalue) { callback.moved(this, value); repaint(); } } public void reshape(int nx, int ny, int nw, int nh) { super.reshape(nx, ny, nw, nh); if (orient == VERTICAL) { arrow1.reshape(1, 1, nw-2, nw-1); arrow2.reshape(1, nh-nw-1, nw-2, nw-1); } else { arrow1.reshape(1, 1, nh-1, nh-2); arrow2.reshape(nw-nh-1, 1, nh-1, nh-2); } repaint(); } public Dimension preferredSize() { return orient==VERTICAL ? new Dimension(16, 100) : new Dimension(100, 16); } public Dimension minimumSize() { return preferredSize(); } public boolean mouseDown(Event e, int mx, int my) { if (orient == VERTICAL) { // move up/down one page, or start dragging if (my < y1) arrowClick(-lvisible); else if (my > y2) arrowClick(lvisible); else { indent = true; drag = my-y1; repaint(); } } else { // move left/right one page, or start dragging if (mx < x1) arrowClick(-lvisible); else if (mx > x2) arrowClick(lvisible); else { indent = true; drag = mx-x1; repaint(); } } return true; } public boolean mouseDrag(Event e, int mx, int my) { if (indent) { int w = size().width, h = size().height; int oldvalue = value; if (orient == VERTICAL) { int va = h-w*2, ny = my-drag-w; value = ny*num/va; } else { int va = w-h*2, nx = mx-drag-h; value = nx*num/va; } checkValue(); if (value != oldvalue) { callback.moving(this, value); repaint(); } } return indent; } public boolean mouseUp(Event e, int mx, int my) { if (indent) { indent = false; repaint(); callback.moved(this, value); return true; } return false; } /* public boolean mouseEnter(Event e, int mx, int my) { inside = true; repaint(); return true; } public boolean mouseExit(Event e, int mx, int my) { inside = false; repaint(); return true; } */ } class CbScrollbarArrow extends Canvas implements Runnable { int mode; CbScrollbar scrollbar; boolean inside, indent; Thread th; CbScrollbarArrow(CbScrollbar p, int m) { scrollbar = p; mode = m; } public void paint(Graphics g) { int w = size().width, h = size().height; Color c1 = inside ? scrollbar.hc1 : scrollbar.lc1, c2 = inside ? scrollbar.hc2 : scrollbar.lc2, c3 = inside ? scrollbar.hc3 : scrollbar.lc3; g.setColor(scrollbar.bc); g.fillRect(0, 0, w, h); int xp[] = new int[3], yp[] = new int[3]; // blank, dark, light if (mode == 0) { // up arrow xp[0] = w/2; xp[1] = w-1; xp[2] = 0; yp[0] = 0; yp[1] = h-1; yp[2] = h-1; } else if (mode == 1) { // down arrow xp[0] = 0; xp[1] = w/2; xp[2] = w-1; yp[0] = 0; yp[1] = h-1; yp[2] = 0; } else if (mode == 2) { // left arrow xp[0] = 0; xp[1] = w-1; xp[2] = w-1; yp[0] = h/2; yp[1] = h-1; yp[2] = 0; } else if (mode == 3) { // right arrow xp[0] = 0; xp[1] = w-1; xp[2] = 0; yp[0] = 0; yp[1] = h/2; yp[2] = h-1; } g.setColor(c2); g.fillPolygon(xp, yp, 3); g.setColor(indent ? c1 : c3); g.drawLine(xp[1], yp[1], xp[2], yp[2]); g.setColor(indent ? c3 : c1); g.drawLine(xp[0], yp[0], xp[2], yp[2]); } public boolean mouseDown(Event e, int mx, int my) { indent = true; repaint(); (th = new Thread(this)).start(); return true; } public boolean mouseUp(Event e, int mx, int my) { indent = false; repaint(); if (th != null) th.stop(); return true; } /**Thread for doing repeated scrolling */ public void run() { int stime = 500; while(true) { scrollbar.arrowClick(mode%2 == 0 ? -1 : 1); try { Thread.sleep(stime); } catch(Exception e) { } stime = 100; } } } // CbScrollbarCallback // Methods for reporting the movement of the scrollbar to another object interface CbScrollbarCallback { /**Called when the scrollbar stops moving. This happens when an * arrow is clicked, the scrollbar is moved by a page, or the user * lets go of the scrollbar after dragging it. * @param sb The scrollar that has been moved * @param v The new value */ void moved(CbScrollbar sb, int v); /**Called upon every pixel movement of the scrollbar when it is * being dragged, but NOT when moved() is called. * @param sb The scrollar that has been moved * @param v The new value */ void moving(CbScrollbar sb, int v); } file/list.cgi0100755000567100000120000000221010415140214013103 0ustar jcameronwheel#!/usr/local/bin/perl # list.cgi # Return a list of files in some directory require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; $d = $in{'dir'} eq "/" ? "" : $in{'dir'}; if (!&can_list($in{'dir'})) { print $text{'list_eaccess'},"\n"; } elsif (!opendir(DIR, $in{'dir'})) { # Cannot list the dir .. but maybe we don't have to! # If a sub-directory was requested, just assume that it exists. local $err = $!; local @alt = &accessible_subdir($in{'dir'}); local $fil = &file_info_line($in{'dir'}); if (@alt && $fil) { print "\n"; foreach $f ("$in{'dir'}/.", "$in{'dir'}/..", @alt) { $fil = &file_info_line($f); print "$fil\n" if (defined($fil)); } } else { print "$err\n"; } } else { # Can list the directory print "\n"; @files = sort { $a cmp $b } readdir(DIR); if ($hide_dot_files) { @files = grep { $_ !~ /^\./ } @files; } else { @files = grep { $_ ne "." && $_ ne ".." } @files; } @files = grep { &can_list("$d/$_") } @files; closedir(DIR); foreach $f (".", "..", @files) { local $fil = &file_info_line("$d/$f"); print "$fil\n" if (defined($fil)); } } file/Makefile0100644000567100000120000000035010225367571013124 0ustar jcameronwheelfile.jar: FileManager.java Util.java CLASSPATH=/usr/local/netscape7/plugins/java2/lib/javaplugin.jar:. javac -target 1.1 *.java jar cf file.jar *.class [ -d "../zomos-virtual" ] && jar cf ../zomos-virtual/file.jar *.class file/CbButtonGroup.class0100664000567100000120000000124310522475215015247 0ustar jcameronwheel-.        !"#buttonsLjava/util/Vector;()VCodeLineNumberTableadd (LCbButton;)Vselect SourceFile CbButton.java java/util/Vector  $% &' ()CbButton *+, - CbButtonGroupjava/lang/Object addElement(Ljava/lang/Object;)Vsize()I elementAt(I)Ljava/lang/Object;selectedZjava/awt/Componentrepaint  ,**Y % *+ ^2=*'*N-+- - Ա '+1file/module.info0100644000567100000120000000145510536046771013636 0ustar jcameronwheeldesc_ko_KR.euc= risk=high desc_ru_SU= desc_zh_TW.Big5=ɮ׺޲z desc_pl=Zarzdzanie plikami desc_de=Datei-Manager (Java erforderlich) name=FileManager desc_zh_CN=ļ desc_pt=Administrador de Ficheiros desc_tr=Dosya Yneticisi desc=File Manager desc_es=Explorador de Archivos desc_sv=Filhanterare desc_fr=Gestionnaire de Fichiers desc_ja_JP.euc=ե ޥ͡ desc_ru_RU= desc_ca=Administrador de Fitxers desc_pt_BR=Gerenciador de Arquivos desc_sk=Sprvca Systmu Sborov longdesc=View, edit and change permissions on files and directories on your system with a Windows-like file manager. readonly=1 desc_zh_TW.UTF-8=檔案管理者 desc_zh_CN.UTF-8=文件管理器 desc_ja_JP.UTF-8=ファイル マネージャ desc_ko_KR.UTF-8=파일 관리자 version=1.311 file/lang/0040755000567100000120000000000010522474703012406 5ustar jcameronwheelfile/lang/zh_TW.Big50100644000567100000120000001051310325033655014144 0ustar jcameronwheelindex_title=ɮ׺޲z index_nojava=oӼҲջݭn Java ~ॿTB@, OzsG䴩 Java top_ret=^ top_config=]w top_down=U top_open=} top_view=˵ top_edit=s top_refresh=Ū top_info=T top_search=jM top_delete=R top_new=sW top_upload=W top_rename=W top_copy=ƻs top_cut=ŤU top_paste=KW right_name=W right_size=jp right_user=ϥΪ right_group=s right_date= edit_enormal=us@몺ɮ edit_title=s $1 edit_title2=إɮפ edit_filename=ɮצW: edit_goto=e edit_find=M edit_gotoline=eC edit_replace=N edit_all=N edit_searchfor=M䤺e edit_replaceby=N edit_eover=$1 LkQл\ edit_esave=Lkxsɮ : $1 edit_eaccess=zQ\xs '$1' edit_efollow=zQ\gJŸs '$1' edit_notfound=䤣o $1 edit_saveclose=xs edit_elength=ɮ׳QI_I info_file=ɮ info_path=|: info_type=O: info_size=jp: info_mod=קɶ: info_link=s: info_perms=v info_user=ϥΪ: info_group=s: info_other=L: info_sticky=]w줸: info_sticky2=u֦̤~Rɮ info_own=Ҧv info_setuid=]w UID: info_setuid2=HϥΪv info_setgid=]w GID: info_setgid2=ɮ~Ӹs info_setgid3=Hsv info_apply=Mܧ info_apply1=uoӥؿ info_apply2=oӥؿP䤤ɮ info_apply3=oӥؿPҦlؿ info_efailed=LkŪ $1 : $2 info_read=Ū info_write=gJ info_list=CX info_exec= search_eaccess=zQ\jMoӥؿ search_title=jMɮ search_ok=jM search_dir=jMؿ search_match=ŦXɮצW search_user=֦ϥΪ search_group=֦s search_any=N search_type=ɮת search_types_=N search_types_f=ɮ search_types_d=ؿ search_types_l=Ÿs(Symbolic link) search_types_p=W޹D(Named pipe) search_size=ɮפjp search_more=WL search_less=p search_xdev=Search past mounts? search_edir=εLĪjMؿ search_ematch=ŦX regexp search_euser=ϥΪ̦W search_egroup=sզW search_esize=ɮתjpO search_crit=jM search_list=jMG delete_dtitle=Rؿ delete_ftitle=Rɮ delete_mtitle=Rhɮ delete_ddesc=zTwnä[Rؿ $1 PҦeܡH delete_fdesc=zTwnä[Rɮ $1 ܡH delete_mdesc=zTwnä[RoɮשMؿܡH : delete_efailed=LkR $1 : $2 mkdir_title=sWؿ mkdir_dir=ؿ: mkdir_eexists=$1 wgsb mkdir_efailed=إߥؿ : $1 mkdir_eaccess=zQ\إ '$1' link_title=إ߳s link_from=s: link_to=s: link_eexists=$1 wgsb link_efailed=s : $1 link_efrom=zQ\s '$1' link_efollow=zQ\إ߲Ÿs rename_title=ܧW $1 rename_old=ɦW: rename_new=ܧ: rename_ok=W rename_eexists=s $1 ɮפwgsb rename_efailed=W : $1 rename_eold=zQ\W '$1' rename_enew=zQ\W '$1' file_type0=ؿ file_type1=r file_type2=v file_type3=Gi file_type4=ɮ file_type5=Ÿs file_type6=]Ʊ file_type7=޽u view_enormal=u@몺ɮץiHQ˵ view_eaccess=zQ\s $1 view_eopen=Lk}n $1 : $2 paste_ecopy=bzKWnŤUνƻs paste_egone=ƻsɮ $1 wgsb paste_eover=$1 LkQ\g paste_eself=zɮ׶K쥻W paste_emfailed=ʥ : $1 paste_ecfailed= : $1 upload_efailed=}ҤWǥ : $1 upload_title=Wɮ upload_file=nWǪɮ upload_dir=WǨؿ upload_ok=W upload_conv=O_n DOS Ÿ? upload_efile=SܭnWǪɮ. upload_edir=WǪؿsb. upload_eperm=zQ\إ $1 upload_ewrite=LkgJ $1 : $2. upload_already=ɮ $1 wgsbAzTwnл\ܡH upload_elink=LkWDzŸs upload_zip=nY ZIP TAR ɮ׶ܡH upload_yes=OAMR find_eaccess=zQ\s $1 find_eexist=$1 sb $2 find_edir=$1 O@ӥؿb $2 cancel= close= eopen=UѡG$1 chmod_eaccess=zQ\s '$1' chmod_euser=$1 : SoӨϥΪ chmod_egroup=$1 : SoӸs chmod_elink=Ÿsd : $1 chmod_echown=ܧ֦̥ : $1 chmod_echmod=ܧv : $1 copy_efrom=zQ\ '$1' copy_eto=zQ\ '$1' copy_elink=Ÿs : $1 delete_eaccess=zQ\R '$1' list_eaccess=zQ\soӥؿ move_eto=zQ\ʨ '$1' move_afrom=zQ\ʦ '$1' acl_user=HϥΪvsAWɮ acl_umask=إɮתBn acl_follow=O_HŸs? acl_dirs=u\sؿ file/lang/zh_CN0100644000567100000120000001622707777120521013343 0ustar jcameronwheelindex_title=ļ index_nojava=ģҪjavaֲ֧ܹ֧java index_eremote=û Webmin¼ $1 Unixû switch_euser=Unix ûڣ top_ret= top_down= top_edit=༭ top_refresh=ˢ top_info=Ϣ top_eacl=ACL top_attr= top_ext=չ top_delete=ɾ top_new=½ top_upload=ϴ top_rename= top_copy= top_cut= top_paste=ճ top_share= top_mount= top_search= top_config= right_name= right_size=С right_user=û right_group= right_date= edit_enormal=ֻܱ༭ļ edit_title=ڱ༭ $1 edit_title2=ڴļ edit_filename=ļ edit_goto=ת edit_find= edit_gotoline=ת edit_replace=滻 edit_all=ȫ滻 edit_searchfor= edit_replaceby=滻 edit_eover=$1 ܱ edit_esave=ļʧ $1 edit_eaccess=δ '$1' edit_notfound=δҵı $1 edit_saveclose=沢ر info_file=ļ info_path=· info_type=ͣ info_size=С info_mod=޸ģ info_link=ᵽ info_perms= info_user=û info_group=飺 info_other= info_octal=˽ƣ info_sticky=ճԣ info_sticky2=ֻ߲ɾļ info_own=Ȩ info_setuid= uid info_setuid2=ûִ info_setgid= gid info_setgid2=ļ̳ info_setgid3=ִ info_apply=Ӧø info_apply1=Ŀ¼ info_apply2=Ŀ¼ļ info_apply3=Ŀ¼Ŀ¼ info_efailed= $1 $2 ʧ info_read=ȡ info_write=д info_list=б info_exec=ִ eacl_eacls=ȡ ACLs ʧ $1 eacl_acltype=ACL eacl_aclname=Ӧõ eacl_aclperms= eacl_add= ͵ACL eacl_remove=ƳACL eacl_efs=ļϵͳ $1 ֧ ACLs eacl_create= ACL eacl_edit=༭ ACL eacl_user=ļ $1 eacl_group=ļ $1 eacl_eowner=ȱҪӦõû eacl_efailed=Ϊ$1 $2ACLsʧ eacl_emask=ֻһ ACL Ŀ eacl_edefmask=ֻһĬ ACL Ŀ eacl_title=$1ACL eacl_owner=ļ eacl_edefaults=һļκĬϵACLĬûACLs acltype_user=û acltype_group= acltype_other= acltype_mask= acltype_default_user=Ĭû acltype_default_group=Ĭ acltype_default_other=Ĭ acltype_default_mask=Ĭ delete_mtitle=ɾļ delete_dtitle=ɾĿ¼ delete_ftitle=ɾļ delete_ddesc=ȷʵҪɾĿ¼ $1 ݣ delete_fdesc=ȷʵҪɾļ $1 delete_mdesc=ȷʵҪɾЩĿ¼ļ delete_efailed=ɾ $1 $2 ʧ mkdir_title=½Ŀ¼ mkdir_dir=½Ŀ¼ mkdir_eexists=$1 Ѿ mkdir_efailed=Ŀ¼ $1 ʧ mkdir_eaccess=Ȩ '$1' link_title= link_from=ԣ link_to=ӵ link_eexists=$1 Ѿ link_efailed=ʧܣ$1 link_efrom=Ȩ '$1' link_efollow=Ȩ rename_title=$1 rename_old=ԭ rename_new= rename_ok= rename_eexists=ļ $1 Ѵ rename_efailed=ʧܣ $1 rename_eold=Ȩ '$1' rename_enew=ȨΪ '$1' file_type0=Ŀ¼ file_type1=ıļ file_type2=ӳļ file_type3=ļ file_type4=ļ file_type5= file_type6=豸ļ file_type7=ܵ view_enormal=ֻܲ鿴ļ view_enormal2=ֻļ view_eaccess=Ȩ $1 view_eopen= $1 $2 ʧ paste_ecopy=ճ֮ǰл򿽱 paste_egone=ļ $1 Ѿ paste_eover=$1 ܸ paste_eself=ܽļճ paste_emfailed=ƶʧܣ$1 paste_ecfailed=ʧܣ$1 over_title=ļ over_msg=ļ $1 ѾڡֶΪҪճļһ over_new=ļ over_ok=ȷ upload_efailed=ϴʧܣ$1 upload_title=ϴļ upload_file=Ҫϴļ upload_dir=ϴĿ¼ upload_ok=ϴ upload_conv=ǷתDOSзţ upload_efile=ûѡҪϴļ upload_edir=ϴĿ¼ڡ upload_eperm=Ȩ $1 upload_ewrite=д $1$2 ʧܡ upload_already=ļ $1 ѾڡȷҪ find_eaccess=Ȩ $1 find_eexist=$2в$1 find_edir=$1 $2 еĿ¼ cancel=ȡ close=ر chmod_eaccess=Ȩ '$1' chmod_euser=$1޴û chmod_egroup=$1޴û chmod_elink=symlink ʧܣ$1 chmod_echown=chown ʧܣ$1 chmod_echmod=chmod ʧܣ$1 chmod_efollow=δ༭ copy_efrom=Ȩ '$1' copy_eto=Ȩ '$1' copy_elink=symlink ʧ '$1' delete_eaccess=Ȩɾ '$1' list_eaccess=ȨʴĿ¼ list_edir=ʾбʧ $1 $2 move_eto=Ȩƶ '$1' move_afrom=Ȩƶ '$1' acl_user=Ϊûʷļ acl_user_def=Webmin¼ͬ acl_umask=ļȥ acl_follow=ǷǸӣ acl_ro=ֻģʽ acl_dirs=Ŀ¼ acl_home=WebminûĿ¼ acl_log=ļ޸ı־ acl_goto=Ŀ¼ share_title= share_samba=Windows share_nfs=NFS share_son= Windows ļ share_soff= Windows ļ share_writable=д룿 share_available=ڻ share_sheader=ѡ share_only= share_guest=Guest ʣ share_comment=ע share_nheader=NFS ѡ share_non= NFS ļ share_noff=ѽ NFS ļ share_desc= share_ro=ֻ share_rw=д share_root=Root share_none= share_all= share_listed=гġ share_host= share_opts=ѡ share_s0=κ share_s1=η Root û share_s2= share_lro=ֻ share_lrw=д log_create_export=Ѵ NFS $1 log_modify_export=޸ĵ NFS $1 log_delete_export=ɾ NFS $1 log_create_share=Ѵ Samba $1 log_modify_share=޸ĵ Samba $1 log_delete_share=ɾ Samba $1 log_save=ѱļ $1 log_chmod=Ѹıļ $1 Ȩ log_mkdir=ѴĿ¼ $1 log_upload=ϴļ $1 log_link=Ѵķ $1 $2 log_relink=޸ĵķ $1 $2 log_copy=ѿļ $1 $2 log_move=ƶļ $1 $2 log_delete=ɾļ $1 log_attr=ļ $1 log_acl=ļ $1 ACL search_eaccess=ȨĿ¼ search_title=ҵļ search_ok= search_dir=Ŀ¼ search_match=ļƥ search_user=û search_group= search_any=κ search_type=ļ search_types_=κ search_types_f=ļ search_types_d=Ŀ¼ search_types_l= search_types_p=ܵ search_size=ļС search_more= search_less= search_xdev=ǰļأ search_edir=ʧЧĿ¼ search_ematch=ʧƥʽ search_euser=ʧû search_egroup=ʧ search_esize=ļСֵ search_crit=׼ search_list= facl_eaccess=δôļACLs attr_eattrs=ȡʧܣ$1 attr_efs=ļϵͳ $1 ֧ attr_add= attr_name= attr_value=ֵ attr_efailed=Ϊ $1 $2 ʧ attr_title=$1ļ attr_create= attr_edit=༭ attr_ename=ȱ ext_eattrs=ȡչʧܣ $1 ext_efs=ļϵͳ $1 ֧չ ext_title=$1 չ ext_header=չļ ext_efailed=Ϊ $1 $2ʧ eattr_A=·ʴ eattr_a=ֻӵļĩβ eattr_c=ѹ eattr_d=ʹdump eattr_i=޸ eattr_s=ɾʱ eattr_S=дͬ eattr_u=Ϊɾ mount_eaccess=δļϵͳ mount_efstab=˼صϲļϵͳ mount_epoint=$1 Ǽص mount_rusure1=ȷҪ $2 $1 mount_rusure2=ȷҪ $2ж $1 mount_err1=ʧ $1 $2 mount_err2=жʧ $1 $2 mount_title1=ļϵͳ mount_title2=жļϵͳ file/lang/en0100644000567100000120000003122510522474703012733 0ustar jcameronwheelindex_title=File Manager index_nojava=This module requires java to function, but your browser does not support java index_eremote=There is no Unix user matching the Webmin login $1. index_index=Return to Webmin index. switch_euser=Unix user does not exist! top_ret=Index top_down=Save top_preview=Preview top_edit=Edit top_html=HTML top_refresh=Refresh top_info=Info top_eacl=ACL top_attr=Attrs top_ext=EXT top_delete=Delete top_new=New top_upload=Upload top_extract=Extract top_rename=Rename top_copy=Copy top_cut=Cut top_paste=Paste top_share=Sharing top_mount=Mount top_search=Find top_config=Config right_name=Name right_size=Size right_user=User right_group=Group right_date=Date edit_enormal=Only normal files can be edited edit_title=Editing $1 edit_title2=Creating file edit_filename=Filename: edit_goto=Goto edit_find=Find edit_gotoline=Go to line edit_replace=Replace edit_all=Replace all edit_searchfor=Search for edit_replaceby=Replace by edit_eover=$1 cannot be overwritten edit_esave=Failed to save file : $1 edit_eaccess=You are not allowed to save '$1' edit_efollow=You are not allowed to write to the symbolic link '$1' edit_notfound=The text $1 was not found edit_saveclose=Save & Close edit_elength=File was truncated! info_file=File info_path=Path: info_type=Type: info_size=Size: info_mod=Modified: info_link=Link to: info_perms=Permissions info_user=User: info_group=Group: info_other=Other: info_octal=Octal: info_sticky=Sticky: info_sticky2=Only owners can delete files info_own=Ownership info_setuid=Setuid: info_setuid2=Execute as user info_setgid=Setgid: info_setgid2=Files inherit group info_setgid3=Execute as group info_apply=Apply changes to info_apply1=This directory only info_apply2=This directory and its files info_apply3=This directory and all subdirectories info_efailed=Failed to update $1 : $2 info_read=Read info_write=Write info_list=List info_exec=Exec info_sizeheader=Directory size info_bytes=Total bytes: info_files=Total files: info_dirs=Total directories: info_getsize=Get Size info_esize=Failed to get sizes : $1 eacl_eacls=Failed to read ACLs : $1 eacl_acltype=ACL Type eacl_aclname=Apply to eacl_aclperms=Permissions eacl_add=Add ACL of type : eacl_remove=Remove ACL eacl_efs=The filesystem $1 does not support ACLs eacl_create=Create ACL eacl_edit=Edit ACL eacl_user=File owner $1 eacl_group=File group $1 eacl_eowner=Missing user or group to apply to eacl_efailed=Failed to set ACL for $1 : $2 eacl_emask=There can be at most one mask ACL entry eacl_edefmask=There can be at most one default mask ACL entry eacl_title=ACL for $1 eacl_owner=File owner eacl_edefaults=If a file has any default ACL, it must have default user, group and other ACLs. acltype_user=User acltype_group=Group acltype_other=Others acltype_mask=Mask acltype_default_user=Default User acltype_default_group=Default Group acltype_default_other=Default Others acltype_default_mask=Default Mask delete_mtitle=Delete multiple files delete_dtitle=Delete directory delete_ftitle=Delete file delete_ddesc=Are you sure you want to permanently delete the directory $1 and all its contents? delete_fdesc=Are you sure you want to permanently delete the file $1 ? delete_mdesc=Are you sure you want to permanently delete these files and directories? : delete_efailed=Failed to delete $1 : $2 mkdir_title=New Directory mkdir_dir=New directory: mkdir_eexists=$1 already exists mkdir_efailed=Create directory failed : $1 mkdir_eaccess=You are not allowed to create '$1' link_title=Create Link link_from=Link from: link_to=Link to: link_eexists=$1 already exists link_efrom=Link source must be an absolute path link_efailed=Link failed : $1 link_efrom2=You are not allowed to link from '$1' link_efollow=You are not allowed to create symlinks rename_title=Rename $1 rename_old=Old name: rename_new=New name: rename_ok=Rename rename_eexists=A file called $1 already exists rename_eslash=The new file name $1 contains a / rename_efailed=Rename failed : $1 rename_eold=You are not allowed to rename '$1' rename_enew=You are not allowed to rename to '$1' file_type0=Directory file_type1=Text file file_type2=Image file file_type3=Binary file file_type4=File file_type5=Symbolic link file_type6=Device file file_type7=Pipe view_enormal=Only normal files can be viewed view_enormal2=Only normal files can be downloaded view_eaccess=You are not allowed to access $1 view_eopen=Failed to open $1 : $2 view_edir=An archive can only be created for a directory view_ecmd=The command $1 needed to create an archive is not installed view_ecomp=Failed to create archive : $1 view_earchive=You are not allowed to download archives view_earchmax=The selected directory is larger than the maximum allowed for archiving ($1 bytes) paste_ecopy=You must cut or copy before pasting paste_egone=Copied file $1 no longer exists paste_eover=$1 cannot be overwritten paste_eself=You cannot paste a file over itself paste_emfailed=Move failed : $1 paste_ecfailed=Copy failed : $1 over_title=File Exists over_msg=The file $1 already exists. Use the field below to enter a new filename for the pasted file. over_new=New filename: over_ok=Ok upload_efailed=Failed to open upload : $1 upload_title=Upload File upload_file=File to upload upload_dir=Upload to directory upload_ok=Upload upload_conv=Convert DOS newlines? upload_efile=No file selected to upload. upload_edir=Upload directory does not exist. upload_eperm=You are not allowed to create $1 upload_ewrite=Failed to write to $1 : $2. upload_already=The file $1 already exists. Are you sure that you want to overwrite it? upload_elink=Cannot upload to a symbolic link upload_zip=Uncompress ZIP or TAR file? upload_yes=Yes, then delete find_eaccess=You are not allowed to access $1 find_eexist=$1 does not exist in $2 find_edir=$1 is not a directory in $2 cancel=Cancel close=Close eopen=Download failed : $1 chmod_eaccess=You are not allowed to access '$1' chmod_euser=$1 : no such user chmod_egroup=$1 : no such group chmod_elink=symlink failed : $1 chmod_echown=chown failed : $1 chmod_echmod=chmod failed : $1 chmod_efollow=You are not allowed to edit symbolic links copy_efrom=You are not allowed to copy from '$1' copy_eto=You are not allowed to copy to '$1' copy_elink=symlink failed : $1 delete_eaccess=You are not allowed to delete '$1' list_eaccess=You are not allowed to access this directory list_edir=Failed to list $1 : $2 move_eto=You are not allowed to move to '$1' move_afrom=You are not allowed to move '$1' acl_user=Access files on server as user acl_user_def=Same as Webmin login acl_umask=Umask for new files acl_follow=Always follow symlinks? acl_fyes=If owners match acl_ro=Read-only mode? acl_dirs=Only allow access to directories acl_nodirs=Deny access to directories acl_home=Include home directory of Webmin user acl_log=Log all file modifications? acl_goto=Open first allowed directory? acl_max=Maximum upload size acl_unlim=Unlimited acl_b=bytes acl_archive=Can download archives of directories? acl_archmax=Yes, if smaller than acl_buttons=Available buttons on toolbar acl_button_save=Save (download file) acl_button_preview=Preview (view scaled-down image) acl_button_edit=Edit (edit text file) acl_button_info=Info (edit file permissions and ownership) acl_button_acl=ACL (edit Posix ACL) acl_button_attr=Attr (edit XFS attributes) acl_button_ext=EXT (edit EXT attributes) acl_button_search=Find (find files) acl_button_delete=Delete (delete files) acl_button_new=New (create text file) acl_button_upload=Upload (upload file from client) acl_button_mkdir=New (create directory) acl_button_makelink=New (create symbolic link) acl_button_rename=Rename (rename file) acl_button_sharing=Sharing (setup Samba and NFS file sharing) acl_button_mount=Mount (mount or un-mount filesystem) acl_button_copy=Copy, Cut and Paste acl_unarchive=Can extract uploaded archive files? acl_unarchive2=Always attempt to acl_unarchive1=$yes acl_unarchive0=$no acl_dostounix=Can have DOS newlines converted? acl_chroot=Chroot directory for entire file manager acl_relto=(relative to any chroot directory) acl_noperms=Can change file permissions? acl_nousers=Can change file ownership? acl_filesystems=Can see filesystem mount points? acl_contents=Allow searching of file contents? share_title=Sharing share_samba=Windows share_nfs=NFS share_son=Windows file sharing enabled share_soff=Windows file sharing disabled share_writable=Writable? share_available=Currently active? share_sheader=Sharing options share_only=Only share_guest=Guest access? share_comment=Comment share_nheader=NFS export options share_non=NFS file sharing enabled share_noff=NFS file sharing disabled share_desc=Description share_ro=Read-only hosts share_rw=Read-write hosts share_root=Root access hosts share_none=None share_all=All share_listed=Listed.. share_host=Hosts share_opts=Options share_s0=Trust nobody share_s1=Trust non-root share_s2=Trust everybody share_lro=Read-only share_lrw=Read-write log_create_export=Created NFS export $1 log_modify_export=Modified NFS export $1 log_delete_export=Deleted NFS export $1 log_create_share=Created Samba share $1 log_modify_share=Modified Samba share $1 log_delete_share=Deleted Samba share $1 log_save=Saved file $1 log_chmod=Changed permissions on file $1 log_mkdir=Created directory $1 log_upload=Uploaded file $1 log_link=Created symbolic link $1 to $2 log_relink=Modified symbolic link $1 to $2 log_copy=Copied file $1 to $2 log_move=Moved file $1 to $2 log_delete=Deleted file $1 log_attr=Set attributes on file $1 log_acl=Set ACL on file $1 search_eaccess=You are not allowed to search this directory search_title=Find files search_ok=Search Now search_dir=Search directory search_match=For files matching search_cont=Containing text search_user=Owned by user search_group=Owned by group search_any=Any search_type=File type search_types_=Any search_types_f=File search_types_d=Directory search_types_l=Symbolic link search_types_p=Named pipe search_size=File size search_more=More than search_less=Less than search_xdev=Search past mounts? search_edir=Missing or invalid search directory search_ematch=Missing matching regexp search_euser=Missing username search_egroup=Missing group name search_esize=File size must be an integer search_crit=Search criteria search_list=Search results search_down=Download search_edown=No search result file to download selected facl_eaccess=You are not allowed to set ACLs for this file attr_eattrs=Failed to get attributes : $1 attr_efs=The filesystem $1 does not support attributes attr_add=Add Attribute attr_name=Attribute Name attr_value=Attribute Value attr_efailed=Failed to set attributes for $1 : $2 attr_title=File Attributes for $1 attr_create=Add Attribute attr_edit=Edit Attribute attr_ename=Missing attribute name ext_eattrs=Failed to get EXT attributes : $1 ext_efs=The filesystem $1 does not support EXT attributes ext_title=EXT attributes for $1 ext_header=EXT file attributes ext_efailed=Failed to set attributes for $1 : $2 eattr_A=Do not update access times eattr_a=Can only append to file eattr_c=Compress data on disk eattr_d=Do not backup with dump eattr_i=Do not allow modification eattr_s=Zero blocks when deleting eattr_S=Always sync after writing eattr_u=Save contents for undeletion mount_eaccess=You are not allowed to mount filesystems mount_efstab=No filesystem exists at this mount point mount_epoint=$1 is not a mount point mount_rusure1=Are you sure you want to mount $1 from $2 ? mount_rusure2=Are you sure you want to un-mount $1 from $2 ? mount_err1=Failed to mount $1 : $2 mount_err2=Failed to un-mount $1 : $2 mount_title1=Mount filesystem mount_title2=Un-mount filesystem zip_err=Could not extract file : $1 zip_ecmd=Missing $1 command zip_eunzip=Unzip failed : $1 zip_ename=Does not appear to be a zip, tar or tar.gz file zip_euntar=Un-tar failed : $1 zip_euntar2=Un-compress and un-tar failed : $1 ddir_title=Download Directory ddir_rusure=To download the contents of $1 as an archive file, click on one of the archive type buttons below. ddir_zip=ZIP ddir_tgz=TAR.GZ ddir_tar=TAR ebutton=This feature is not available preview_etype=Could not work out file type for $1 preview_etype2=$1 is not in a supported image format preview_ecmd=The command $1 needed to scale this image is not installed preview_eimage=Only images can be previewed preview_title=Preview of $1 preview_bad=Could not load image to preview preview_egd=Failed to load image with GD html_efailed=Failed to open HTML editor : $1 html_title=Edit HTML File html_save=Save and Close html_err=Failed to save HTML file history_title=Path History history_ok=Go To history_button=History extract_etype=Only files can be extracted extract_title=Extract Compressed File extract_rusure=Are you sure you want to extract the compressed file : extract_rusure2=Existing files in the same directory may be overwritten. extract_err=Failed to extract file : $1 extract_yes=Yes, then delete file/lang/pt0100644000567100000120000001065407060351565012762 0ustar jcameronwheelindex_title=Administrador de Ficheiros index_nojava=Este mdulo requer java para funcionar, mas o seu navegador no suporta java top_open=Abrir top_view=Ver top_edit=Editar top_refresh=Refrescar top_info=Informaes top_delete=Apagar top_new=Novo top_upload=Carregar top_rename=Renomear top_copy=Copiar top_cut=Cortar top_paste=Colar right_name=Nome right_size=Tamanho right_user=Utilizador right_group=Grupo right_date=Data edit_enormal=Apenas ficheiros normais podem ser editados edit_title=A editar $1 edit_title2=A criar ficheiro edit_filename=Nome do ficheiro: edit_eover=$1 no pode ser sobrescrito edit_esave=Erro ao guardar ficheiro : $1 edit_eaccess=Voc no est autorizado para guardar '$1' info_file=Ficheiro info_path=Caminho: info_type=Tipo: info_size=Tamanho: info_mod=Modificado: info_link=Enlace com: info_perms=Permisses info_user=Utilizador: info_group=Grupo: info_other=Outro: info_sticky=Restrio: info_sticky2=Apenas os proprietrios podem apagar ficheiros info_own=Propriedade info_setuid=Colocar UID: info_setuid2=Executar como utilizador info_setgid=Colocar GID: info_setgid2=Ficheiros herdados do grupo info_setgid3=Executar como grupo info_apply=Aplicar alteraes a info_apply1=Este directrio apenas info_apply2=Este directrio e os seus ficheiros info_apply3=Este directrio e todos os subdirectrios info_efailed=Erro ao actualizar $1 : $2 info_read=Leitura info_write=Escrita info_list=Lista info_exec=Execuo delete_dtitle=Apagar directrio delete_ftitle=Apagar ficheiro delete_ddesc=Tem a certeza que quer permanentemente apagar o directrio $1 e todo o seu contedo? delete_fdesc=Tem a certeza que quer apagar permanentemente o ficheiro $1 ? delete_efailed=Erro ao apagar $1 : $2 mkdir_title=Novo Directrio mkdir_dir=Novo directrio: mkdir_eexists=$1 j existe mkdir_efailed=Erro na criao de directrio : $1 mkdir_eaccess=Voc no est autorizado para criar '$1' link_title=Criar Enlace link_from=Enlace de: link_to=Enlace com: link_eexists=$1 j existe link_efailed=Erro no enlace : $1 link_efrom=Voc no est autorizado para criar enlaces de '$1' link_efollow=Voc no est autorizado para criar enlaces simblicos rename_title=Renomear $1 rename_old=Nome antigo: rename_new=Nome novo: rename_ok=Renomear rename_eexists=J existe um ficheiro denominado $1 rename_efailed=Erro na renomeao : $1 rename_eold=Voc no est autorizado para renomear '$1' rename_enew=Voc no est autorizado para renomear para '$1' file_type0=Directrio file_type1=Ficheiro de texto file_type2=Ficheiro de imagem file_type3=Ficheiro binrio file_type4=Ficheiro file_type5=Enlace simblico file_type6=Ficheiro de dispositivo file_type7=Tubo view_enormal=Apenas ficheiros normais podem ser vistos view_eaccess=Voc no est autorizado para aceder a $1 view_eopen=Erro ao abrir $1 : $2 paste_ecopy=Tem de cortar ou copiar primeiro antes de colar paste_egone=O ficheiro cpoiado $1 j no existe paste_eover=$1 no pode ser sobrescrito paste_eself=No pode colar um ficheiro sobre si mesmo paste_emfailed=Erro ao mover : $1 paste_ecfailed=Erro ao copiar : $1 upload_efailed=Erro ao abrir ficheiro carregado : $1 upload_title=Carregar Ficheiro upload_file=Ficheiro paa carregar upload_dir=Carregar para o directrio upload_ok=Carregar upload_conv=Converter linhas de DOS? upload_efile=No foram seleccionados ficheiros para carregar. upload_edir=Directrio de carga no existe. upload_eperm=Voc no est autorizado para criar $1 upload_ewrite=Erro ao escrever para $1 : $2. find_eaccess=Voc no est autorizado para aceder a $1 find_eexist=$1 no existe em $2 find_edir=$1 no um directrio de $2 cancel=Cancelar chmod_eaccess=Voc no est autorizado para aceder a '$1' chmod_euser=$1 : no existe tal utilizador chmod_egroup=$1 : no existe tal grupo chmod_elink=erro no enlace simblico : $1 chmod_echown=erro na alterao de proprietrio : $1 chmod_echmod=erro na alterao de permisses : $1 copy_efrom=Voc no est autorizado para copiar de '$1' copy_eto=Voc no est autorizado para copiar para '$1' copy_elink=erro no enlace simblico : $1 delete_eaccess=Voc no est autorizado para apagar '$1' list_eaccess=Voc no est autorizado para aceder a este directrio move_eto=Voc no est autorizado para mover para '$1' move_afrom=Voc no est autorizado para mover '$1' acl_user=Aceder a ficheiros no servidor como utilizador acl_umask=Mscara de utilizador para novos ficheiros acl_follow=Seguir sempre enlaces simblicos? acl_dirs=Apenas permitir acesso a directrios file/lang/es0100664000567100000120000003265310307032634012742 0ustar jcameronwheelacl_archive=¿Puede descargar archivos de directorios? acl_archmax=Sí, si son menores que acl_b=bytes acl_button_acl=ACL (editar ACL Posix) acl_button_attr=Attr (editar atributos XFS) acl_button_copy=Copiar, Cortar y Pegar acl_button_delete=Borrar (borrar archivos) acl_button_edit=Editar (editar archivo texto) acl_button_ext=EXT (editar atributos EXT) acl_button_info=Info (editar permisos y propiedad de archivo) acl_button_makelink=Nuevo (crear link simbólico) acl_button_mkdir=Nuevo (crear directorio) acl_button_mount=Montar (montar o desmontar sistema de archivos) acl_button_new=Nuevo (crear archivo de texto) acl_button_rename=Renombrar (renombrar archivo) acl_button_save=Guardar (descargar archivo) acl_button_search=Buscar (buscar archivos) acl_button_sharing=Compartir (configurar compartición de archivo por Samba y NFS) acl_button_upload=Subir (subir archivo desde cliente) acl_buttons=Botones disponibles en la barra de herramientas acl_chroot=Cambiar directorio raiz (chroot) para todo el explorador de archivos acl_dirs=Permitir acceso solo a los directorios acl_dostounix=¿Se le pueden convertir las nuevas líneas de DOS? acl_follow=¿Seguir siempre los vínculos simbólicos? acl_fyes=Si los propietarios coinciden acl_goto=¿Abrir el primer directorio permitido? acl_home=Incluir directorio de inicio del usuario Webmin acl_log=¿Registrar todas las modificaciones de archivos? acl_max=Máximo tamaño de subida acl_nodirs=Denegar acceso a directorios acl_relto=(relativo a cualquier directorio raiz) acl_ro=¿Modo de solo lectura? acl_umask=Máscara de Usuario para Nuevos archivos acl_unarchive=¿Puede extraer archivos subidos? acl_unarchive0=$no acl_unarchive1=$sí acl_unarchive2=Siempre intentar acl_unlim=Ilimitado acl_user=Acceder a archivos en el servidor como usuario acl_user_def=Igual que el nombre de ingreso de Webmin acltype_default_group=Grupo por defecto acltype_default_mask=Máscara por defecto acltype_default_other=Otros por defecto acltype_default_user=Usuario por defecto acltype_group=Grupo acltype_mask=Máscara acltype_other=Otros acltype_user=Usuario attr_add=Agregar Atributo attr_create=Agregar atributo attr_eattrs=Fallo al obtener atributos : $1 attr_edit=Editar atributo attr_efailed=Fallo al configurar atributo para $1 : $2 attr_efs=El sistema de archivos $1 no soporta atributos attr_ename=Nombre de atributo no ingresado attr_name=Nombre del atributo attr_title=Atributos de archivo para $1 attr_value=Valor del atributo cancel=Cancelar chmod_eaccess=No está autorizado a acceder a '$1' chmod_echmod=fallo al cambiar modo : $1 chmod_echown=fallo al cambiar dueño : $1 chmod_efollow=No está autorizado a editar vínculos simbólicos chmod_egroup=$1 : no existe dicho grupo chmod_elink=fallo en vínculo simbólico : $1 chmod_euser=$1 : no existe dicho usuario close=Cerrar copy_efrom=No está autorizado a copiar desde '$1' copy_elink=fallo en vínculo simbólico : $1 copy_eto=No está autorizado a copiar a '$1' ddir_rusure=Para descargar los contenidos de $1 como un archivo de ficheros, elija abajo uno de los botones de tipo de archivo. ddir_tar=TAR ddir_tgz=TAR.GZ ddir_title=Descargar Directorio ddir_zip=ZIP delete_ddesc=¿Está seguro que quiere borrar permanentemente el directorio $1 y todo su contenido? delete_dtitle=Borrar directorio delete_eaccess=No está autorizado a borrar '$1' delete_efailed=Fallo al borrar $1 : $2 delete_fdesc=¿Está seguro que quiere borrar permanentemente el archivo $1 ? delete_ftitle=Borrar archivo delete_mdesc=¿Está seguro que quiere borrar permanentemente estos archivos y directorios? : delete_mtitle=Borrar múltiples archivos eacl_aclname=Aplicar a eacl_aclperms=Permisos eacl_acltype=Tipo de ACL eacl_add=Agregar ACL de tipo : eacl_create=Crear ACL eacl_eacls=Fallo al leer ACLs : $1 eacl_edefaults=si un archivo tiene alguna ACL por defecto, debe tener usuario, grupo y otras ACL por defecto. eacl_edefmask=Puede haber a lo sumo una entrada de máscara de ACL por defecto eacl_edit=Editar ACL eacl_efailed=Fallo al asignar ACL para $1 : $2 eacl_efs=El sistema de archivos $1 no soporta ACLs eacl_emask=Puede haber a lo sumo una entrada de máscara de ACL eacl_eowner=Usuario o grupo a aplicar no ingresado eacl_group=Grupo de archivo $1 eacl_owner=Dueño del archivo eacl_remove=Borrar ACL eacl_title=ACL para $1 eacl_user=Dueño de archivo $1 eattr_A=No actualizar tiempos de acceso eattr_S=Siempre sincronizar despues de escribir eattr_a=Solo puede agregar a archivo eattr_c=Comprimir datos en el disco eattr_d=No respaldar con volcado eattr_i=No permitir modificaciones eattr_s=Poner a cero los bloques a borrar eattr_u=Salvar contenido para recuperación después de borrado ebutton=Esta opción no está disponible edit_all=Reemplazar todo edit_eaccess=No está autorizado a salvar '$1' edit_efollow=No está autorizado a escribir en el vínculo simbólico '$1' edit_elength=¡El archivo se truncó! edit_enormal=Solo los archivos normales pueden ser editados edit_eover=$1 no puede ser sobreescrito edit_esave=Fallo al salvar archivo : $1 edit_filename=Nombre de archivo: edit_find=Buscar edit_goto=Ir a edit_gotoline=Ir a línea edit_notfound=El texto $1 no fue encontrado edit_replace=Reemplazar edit_replaceby=Reemplazar por edit_saveclose=Salvar y Cerrar edit_searchfor=Buscar edit_title=Editando $1 edit_title2=Creando archivo eopen=Descarga fallida: $1 ext_eattrs=Fallo al obtener atributos EXT : $1 ext_efailed=Fallo al configurar atributos para $1 : $2 ext_efs=El sistema de archivos $1 no soporta atributos EXT ext_header=Atributos EXT de archivo ext_title=Atributos EXT para $1 facl_eaccess=No está autorizado a configurar ACLs para este archivo file_type0=Directorio file_type1=Archivo de texto file_type2=Archivo de imágen file_type3=Archivo binario file_type4=Archivo file_type5=Vínculo simbólico file_type6=Archivo de dispositivo file_type7=Tubería find_eaccess=No está autorizado a acceder a $1 find_edir=$1 no es un directorio en $2 find_eexist=$1 no existe en $2 index_eremote=No hay ningún usuario Unix que coincida con el usuario de ingreso de Webmin $1. index_nojava=Este módulo requiere java para funcionar, pero su navegador no soporta java index_title=Administrador de Archivos info_apply=Aplicar cambios a info_apply1=Este directorio solamente info_apply2=Este directorio y sus archivos info_apply3=Este directorio y todos sus subdirectorios info_efailed=Fallo al actualizar $1 : $2 info_exec=Ejecutar info_file=Archivo info_group=Grupo: info_link=Vínculo a: info_list=Listar info_mod=Modificado: info_octal=Octal: info_other=Otro: info_own=Propiedad info_path=Ruta: info_perms=Permisos info_read=Leer info_setgid=Ingresar ID de grupo: info_setgid2=Archivos heredan grupo info_setgid3=Ejecutar como grupo info_setuid=Ingresar ID de usuario: info_setuid2=Ejecutar como usuario info_size=Tamaño: info_sticky=Restricción: info_sticky2=Solo los dueños pueden borrar archivos info_type=Tipo: info_user=Usuario: info_write=Escribir link_eexists=$1 ya existe link_efailed=Fallo vínculo : $1 link_efollow=No está autorizado a crear vínculos simbólicos link_efrom=No está autorizado a vincular desde '$1' link_efrom2=No tiene permiso para linkar desde '$1' link_from=Vincular desde: link_title=Crear Vínculo link_to=Vincular hacia: list_eaccess=No está autorizado a acceder a este directorio list_edir=Fallo al listar $1 : $2 log_acl=Configurado ACL sobre archivo $1 log_attr=Configurados atributos en archivo $1 log_chmod=Permisos cambiados en el archivo $1 log_copy=Copiado archivo $1 a $2 log_create_export=Creada exportación NFS $1 log_create_share=Creada compartición Samba $1 log_delete=Borrado archivo $1 log_delete_export=Borrada exportación NFS $1 log_delete_share=Borrada compartición Samba $1 log_link=Creado vínculo simbólico $1 a $2 log_mkdir=Creado directorio $1 log_modify_export=Modificada exportación NFS $1 log_modify_share=Modificada compartición Samba $1 log_move=Movido archivo $1 a $2 log_relink=Modificado vínculo simbólico $1 a $2 log_save=Salvado archivo $1 log_upload=Cargado archivo $1 mkdir_dir=Nuevo directorio: mkdir_eaccess=No está autorizado a crear '$1' mkdir_eexists=$1 ya existe mkdir_efailed=Fallo al crear directorio : $1 mkdir_title=Nuevo Directorio mount_eaccess=No está autorizado a montar sistemas de archivos mount_efstab=No existe sistema de archivo en este punto de montaje mount_epoint=$1 no es un punto de montaje mount_err1=Fallo al montar $1 : $2 mount_err2=Fallo al desmontar $1 : F2 mount_rusure1=¿Está seguro que desea montar $1 desde $2 ? mount_rusure2=¿Está seguro que desea desmontar $1 desde $2 ? mount_title1=Montar sistema de archivos mount_title2=Desmontar sistema de archivos move_afrom=No está autorizado a mover '$1' move_eto=No está autorizado a mover a '$1' over_msg=El archivo $1 ya existe. Use el campo de abajo para ingresar un nuevo nombre de archivo para el archivo pegado. over_new=Nuevo nombre de archivo: over_ok=Ok over_title=Archivo existe paste_ecfailed=Fallo al copiar : $1 paste_ecopy=Debe cortar o copiar antes de pegar paste_egone=El archivo copiado $1 ya no existe paste_emfailed=Fallo al mover : $1 paste_eover=$1 no puede ser sobreescrito paste_eself=No puede pegar un archivo sobre si mismo rename_eexists=Ya existe un archivo llamado $1 rename_efailed=Fallo al renombrar : $1 rename_enew=No está autorizado a renombrar a '$1' rename_eold=No está autorizado a renombrar '$1' rename_new=Nombre nuevo: rename_ok=Renombrar rename_old=Nombre anterior: rename_title=Renombrar $1 right_date=Fecha right_group=Grupo right_name=Nombre right_size=Tamaño right_user=Usuario search_any=Cualquiera search_crit=Criterio de búsqueda search_dir=Buscar directorio search_eaccess=No está autorizado a buscar este directorio search_edir=Directorio de búsqueda no ingresado o no válido search_egroup=Nombre de grupo no ingresado search_ematch=Expresión de coincidencia no ingresada search_esize=El tamaño del archivo debe ser un entero search_euser=Nombre de usuario no ingresado search_group=Perteneciente al grupo search_less=Menos que search_list=Resultados de la búsqueda search_match=Para archivos que coincidan search_more=Mas que search_ok=Buscar Ahora search_size=Tamaño de archivo search_title=Buscar archivos search_type=Tipo de archivo search_types_=Cualquiera search_types_d=Directorio search_types_f=Archivo search_types_l=Vínculo Simbólico search_types_p=Tubería nombrada search_user=Perteneciente al usuario search_xdev=¿Buscar en montajes anteriores? share_all=Todos share_available=¿Actualmente activo? share_comment=Comentario share_desc=Descripción share_guest=¿Acceso como invitado? share_host=Máquinas share_listed=Listado.. share_lro=Solo lectura share_lrw=Lectura-escritura share_nfs=NFS share_nheader=Opciones de exportación NFS share_noff=Compartir archivos NFS deshabilitado share_non=Compartir archivos NFS habilitado share_none=Ninguno share_only=Solo share_opts=Opciones share_ro=Máquina de solo lectura share_root=Máquinas de acceso raíz share_rw=Máquina de lectura-escritura share_s0=No confiar en nadie share_s1=Confiar en aquellos que no sean raíz share_s2=Confiar en todos share_samba=Windows share_sheader=Opciones para compartir share_soff=Deshabilitar compartir archivos de Windows share_son=Habilitar compartir archivos de Windows share_title=Compartir share_writable=¿Editable? switch_euser=¡El usuario Unix no existe! top_attr=Atributos top_config=Configurar top_copy=Copiar top_cut=Cortar top_delete=Borrar top_down=Salvar top_eacl=ACL top_edit=Editar top_ext=EXT top_info=Información top_mount=Montar top_new=Nuevo top_paste=Pegar top_refresh=Refrescar top_rename=Renombrar top_ret=Indice top_search=Buscar top_share=Compartir top_upload=Cargar upload_already=El archivo $1 ya existe. ¿Está seguro que desea sobreescribirlo? upload_conv=¿Convertir nuevas líneas de DOS? upload_dir=Cargar a directorio upload_edir=El directorio para cargar no existe. upload_efailed=Fallo al abrir carga : $1 upload_efile=No se seleccionó ningún archivo para cargar. upload_elink=No se puede cargar a un vínculo simbólico upload_eperm=No está autorizado a crear $1 upload_ewrite=Fallo al escribir a $1 : $2. upload_file=Archivo para cargar upload_ok=Cargar upload_title=Cargar Archivos upload_yes=Si, después borrar upload_zip=¿Descomprimir archivo ZIP o TAR? view_eaccess=No está autorizado a acceder a $1 view_earchive=No tiene permiso para descargar archivos view_earchmax=El directorio elegido es mayor que el máximo permitido para archivar ($1 bytes) view_ecmd=El comando $1, necesario para crear un archivo no está instalado view_ecomp=Falló la creación de archivo: $1 view_edir=Un archivo sólo puede ser creado en un directorio view_enormal=Solo los archivos normales pueden ser visualizados view_enormal2=Solo los archivos normales pueden ser descargados view_eopen=Fallo al abrir $1 : $2 zip_ecmd=Comando $1 no introducido zip_ename=No parece ser un archivo zip, tar o tar.gz válido zip_err=No se pudo extraer archivo : $1 zip_euntar=Extracción tar fallida : $1 zip_euntar2=Descompresión y extracción tar fallida : $1 zip_eunzip=Extracción zip fallida : $1 file/lang/fr0100644000567100000120000001645307354734746012765 0ustar jcameronwheelindex_title=Gestionnaire de Fichier index_nojava=Ce module ncessite que java soit en fonction, mais votre fureteur ne le supporte pas switch_euser=L'utilisateur Unix n'existe pas ! top_open=Ouvrir top_view=Voir top_edit=diter top_refresh=Rafrachir top_info=Information top_delete=Supprimer top_new=Nouveau top_upload=Envoyer top_rename=Renommer top_copy=Copier top_cut=Couper top_paste=Coller top_share=Partage top_search=Trouver right_name=Nom right_size=Taille right_user=Usager right_group=Groupe right_date=Date edit_enormal=Seulement les fichiers normaux peuvent tre diter edit_title=diter '$1' edit_title2=Crer un fichier edit_filename=Nom de fichier: edit_eover='$1' ne peut tre crit par-dessus edit_esave=Impossible d'ouvrir le fichier '$1' edit_eaccess=Vous n'tes pas autoris sauver '$1' info_file=Fichier info_path=Chemin: info_type=Type: info_size=Taille: info_mod=Modifi: info_link=Liens vers: info_perms=Permissions info_user=Usager: info_group=Groupe: info_other=Autre: info_sticky=Collant: info_sticky2=Seulement son propritaire peut effacer un fichier info_own=Propritaire info_setuid=SUID: info_setuid2=Excuter comme usager info_setgid=SGID: info_setgid2=Les fichiers hrite du groupe info_setgid3=Excuter comme groupe info_apply=Appliquer les changements info_apply1=Ce rpertoire seulement info_apply2=Ce rpertoire et ses fichiers info_apply3=Ce rpertoire et tout ses sous-rpertoires info_efailed=Impossible de mettre jour '$1' : $2 info_read=Lire info_write=crire info_list=Lister info_exec=Excuter delete_dtitle=Supprimer un rpertoire delete_ftitle=Supprimer un fichier delete_ddesc=Vous tes sur que vous voulez supprimer dfinitivement le rpertoire '$1' et tout son contenu? delete_fdesc=Vous tes sur que vous voulez supprimer dfinitivement le fichier $1? delete_efailed=Impossible de supprimer '$1' : $2 mkdir_title=Nouveau Rpertoire mkdir_dir=Nouveau rpertoire: mkdir_eexists='$1' existe dj mkdir_efailed=Impossible de crer le rpertoire : $1 mkdir_eaccess=Vous n'tes pas autoris crer '$1' link_title=Crer un Lien Symbolique link_from=Lien de: link_to=Lien vers: link_eexists='$1' Existe dj link_efailed=Impossible de faire le lien symbolique '$1' link_efrom=Vous n'tes pas autoris crer aucun lien symbolique de '$1' link_efollow=Vous n'tes pas autoris crer aucun lien symbolique rename_title=Renommer '$1' rename_old=Ancien nom: rename_new=Nouveau nom: rename_ok=Renommer rename_eexists=Un fichier appel '$1' existe dj rename_efailed=Impossible de renommer '$1' rename_eold=Vous n'tes pas autoris renommer '$1' rename_enew=Vous n'tes pas autoris renommer pour '$1' file_type0=Rpertoire file_type1=Fichier texte file_type2=Fichier image file_type3=Fichier binaire file_type4=Fichier file_type5=Lien symbolique file_type6=Fichier de priphrique file_type7=Tuyau view_enormal=Seulement un fichier normal peut tre visionn view_eaccess=Vous n'tes pas autoris d'accder '$1' view_eopen=Impossible d'ouvrir '$1' : $2 paste_ecopy=Vous devez copier ou couper avant de coller paste_egone=Le fichier copi '$1' n'existe plus paste_eover='$1' ne peut tre cras paste_eself=Vous ne pouvez coller un fichier par-dessus lui-mme paste_emfailed=Impossible de dplacer '$1' paste_ecfailed=Impossible de copier '$1' over_title=Le fichier existe over_msg=Le fichier $1 existe dj. Utiliser le champ ci-dessous pour entrer un nouveau fichier pour le fichier coll. over_new=Nouveau nom de fichier:: over_ok=Ok upload_efailed=Impossible d'ouvrir l'envoie '$1' upload_title=Envoie de Fichier upload_file=Fichier envoyer upload_dir=Envoyer dans un rpertoire upload_ok=Envoie upload_conv=Convertir les retours de chariot en format DOS? upload_efile=Aucun fichier n'ont t slectionn pour envoyer. upload_edir=Le rpertoire d'envoi n'existe pas. upload_eperm=Vous n'tes pas autoris crer '$1' upload_ewrite=Impossible d'crire dans '$1' : $2 find_eaccess=Vous n'tes pas autoris d'accder '$1' find_eexist='$1' n'existe pas dans '$2' find_edir='$1' n'est pas un rpertoire dans '$2' cancel=Annuler chmod_eaccess=Vous n'tes pas autoris d'accder '$1' chmod_euser=$1 : usager inexistant chmod_egroup=$1 : groupe inexistant chmod_elink=lien symbolique impossible : $1 chmod_echown=Impossible de changer de propritaire : $1 chmod_echmod=Impossible de changer de permission : $1 copy_efrom=Vous n'tes pas autoris copier de '$1' copy_eto=Vous n'tes pas autoris copier vers '$1' copy_elink=lien symbolique impossible : $1 delete_eaccess=Vous n'tes pas autoris supprimer '$1' list_eaccess=Vous n'tes pas autoris d'accder ce rpertoire list_edir=Echec du listage de $1 : $2 move_eto=Vous n'tes pas autoris dplacer vers '$1' move_afrom=Vous n'tes pas autoris dplacer '$1' acl_user=Accder au systme de fichier en tant un usager acl_user_def=Pareil que le login Webmin acl_umask=Dmasquer tout nouveau fichier acl_follow=Toujours suivre les liens symboliques? acl_dirs=Seulement accs aux rpertoires acl_home=Inclure le rpertoire personnel de l'utilisateur Webmin share_title=Partage share_samba=Windows share_nfs=NFS share_son=Partage de fichiers Windows activ share_soff=Partage de fichiers Windows dsactiv share_writable=En criture ? share_available=Actuellement disponible ? share_sheader=Options de partage share_only=Seulement share_guest=Accs Invit ? share_comment=Commentaire share_nheader=Options d'export NFS share_non=Partage de fichiers NFS activ share_noff=Partage de fichiers NFS dsactiv share_desc=Description share_ro=Machines en lecture seule share_rw=Machines en lecture/criture share_root=Machines avec accs root share_none=Aucune share_all=Toutes share_listed=Listes ... share_host=Machines share_opts=Options share_s0=Ne faire confiance personne share_s1=Faire confiance aux non-root share_s2=Faire confiance tout le monde share_lro=Lecture seule share_lrw=Lecture-criture log_create_export=Export NFS $1 cr log_modify_export=Export NFS $1 modifi log_delete_export=Export NFS $1 supprim log_create_share=Ressource partage Samba $1 cre log_modify_share=Ressource partage Samba $1 modifie log_delete_share=Ressource partage Samba $1 supprime log_save=Fichier $1 sauv log_chmod=Permissions modifies sur le fichier $1 log_mkdir=Rpertoire $1 cr log_upload=Fichier $1 tlcharg log_link=Lien symbolique de $1 vers $2 cr log_relink=Lien symbolique de $1 vers $2 modifi log_copy=Lien symbolique de $1 vers $2 copi log_move=Fichier renomm de $1 en $2 log_delete=Fichier $1 supprim search_eaccess=Vous n'avez pas le droit de chercher dans ce rpertoire search_title=Trouver des fichiers search_ok=Chercher maintenant search_dir=Rpertoire de recherche search_match=Pour les fichiers correspondant search_user=Possd par utilisateur search_group=Possd par groupe search_any=N'importe search_type=Type de fichier search_types_=N'importe search_types_f=Fichier search_types_d=Rpertoire search_types_l=Lien symbolique search_types_p=Tube nomm search_size=Taille de fichier search_more=Plus de search_less=Moins de search_xdev=Chercher au-del des points de montage ? search_edir=Rpertoire de recherche manquant ou invalide search_ematch=Expression rationnelle manquante search_euser=Nom d'utilisateur manquant search_egroup=Nom de groupe manquant search_esize=La taille de fichier doit tre un entier search_crit=Critres de recherche search_list=Rsultats de la recherche file/lang/de0100644000567100000120000003300310226727054012716 0ustar jcameronwheelacl_archive=Darf Archive von Verzeichnissen herunterladen? acl_archmax=Ja, wenn sie kleiner sind als acl_b=bytes acl_button_acl=ACL (bearbeite Posix ACL) acl_button_attr=ATTR (bearbeite XFS-Attribute) acl_button_copy=Kopieren, Ausschneiden und Einfügen acl_button_delete=Löschen (Dateien löschen) acl_button_edit=Bearbeiten (Textdatei bearbeiten) acl_button_ext=EXT (bearbeite EXT-Attribute) acl_button_info=Info (bearbeite Dateirechte und -inhaberschaft) acl_button_makelink=Neu (Erzeuge symbolischen Link) acl_button_mkdir=Neu (Erzeuge Verzeichnis) acl_button_mount=Einbinden (Einbinden oder Aushängen von Dateisystemen) acl_button_new=Neu (Erzeuge Textdatei) acl_button_rename=Umbenennen (Datei umbenennen) acl_button_save=Speichern (heruntergeladene Datei) acl_button_search=Finde (Dateien finden) acl_button_sharing=Gemeinsamer Dateizugriff (richte Samba- und NFS Dateizugriff ein) acl_button_upload=Hochladen (lade Dateien eines Clients hoch) acl_buttons=Verfügbare Knöpfe in der Toolbar acl_chroot=ChangeRoot-Verzeichnis für den gesamten Dateimanager acl_dirs=Erlaube nur Zugriff auf Verzeichnisse acl_dostounix=Darf DOS-"Neue Zeile"-Zeichen konvertieren? acl_follow=Folge immer symbolischen Links? acl_fyes=Wenn Benutzer übereinstimmt acl_goto=Öffne erstes erlaubtes Verzeichnis? acl_home=Das Heimatverzeichnis des Webmin-Benutzers einbinden? acl_log=Alle Dateiänderungen protokollieren? acl_max=Maximale Hochladegröße acl_nodirs=Verweigere Zugriff auf Verzeichnisse acl_relto=(relativ zu jedem ChangeRoot-Verzeichnis) acl_ro=Nur-Lesen-Modus? acl_umask=Umask für neue Dateien acl_unarchive=Darf hochgeladene Archivdateien auspacken? acl_unarchive0=$nein acl_unarchive1=$ja acl_unarchive2=Versuche immer acl_unlim=Unbegrenzt acl_user=Greife als Benutzer auf Dateien auf dem Server zu acl_user_def=Wie Webmin-Benutzer acltype_default_group=Standard-Gruppe acltype_default_mask=Standard-Maske acltype_default_other=Andere Standards acltype_default_user=Standard-Benutzer acltype_group=Gruppe acltype_mask=Maske acltype_other=Andere acltype_user=Benutzer attr_add=Attribut hinzufügen attr_create=Attribut hinzufügen attr_eattrs=Konnte Attribute nicht lesen: $1 attr_edit=Attribut bearbeiten attr_efailed=Konnte Attribute für $1 nicht setzen: $2 attr_efs=Dateisystem $1 unterstützt keine Attribute attr_ename=Fehlender Attributname attr_name=Attributname attr_title=Dateiattribute für $1 attr_value=Attribut Wert cancel=Abbrechen chmod_eaccess=Sie haben keine Berechtigung zum Zugriff auf '$1' chmod_echmod=chmod schlug fehl : $1 chmod_echown=chown schlug fehl : $1 chmod_efollow=Sie dürfen keine symbolischen Links bearbeiten chmod_egroup=$1 : Gruppe nicht gefunden chmod_elink=Symbolischer Link schlug fehl : $1 chmod_euser=$1 : Benutzer nicht gefunden close=Schließen copy_efrom=Sie haben keine Berechtigung aus '$1' zu kopieren copy_elink=Symbolischer Link schlug fehl : $1 copy_eto=Sie haben keine Berechtigung in '$1' zu kopieren ddir_rusure=Um den Inhalt von $1 als Archivdatei herunterzuladen, klicken Sie bitte auf den Archivbutton. ddir_tar=TAR ddir_tgz=TAR.GZ ddir_title=Download-Verzeichnis ddir_zip=ZIP delete_ddesc=Sind Sie sicher, daß Sie das Verzeichnis $1 und alle Unterverzeichnisse unwiderruflich löschen wollen? delete_dtitle=Lösche Verzeichnis delete_eaccess=Sie haben keine Berechtigung '$1' zu löschen delete_efailed=Fehler beim Löschen von $1 : $2 delete_fdesc=Sind Sie sicher, dass Sie die Datei $1 unwiderruflich löschen wollen? delete_ftitle=Lösche Datei delete_mdesc=Sind Sie sicher, dass Sie diese Dateien und Verzeichnisse permanent löschen wollen? : delete_mtitle=Mehrere Dateien löschen eacl_aclname=Anwenden auf eacl_aclperms=Berechtigungen eacl_acltype=ACL-Typ eacl_add=ACL des Typs hinzufügen : eacl_create=ACL einrichten eacl_eacls=Konnte ACLs nicht einlesen: $1 eacl_edefaults=Wenn eine Datei eine Standard-ACL hat, dann muß ein Standard-Benutzer, eine -Gruppe und andere ACLs eingerichtet sein. eacl_edefmask=Es kann nur einen Standard-ACL-Eintrag geben eacl_edit=ACL bearbeiten eacl_efailed=Konnte ACL für $1 nicht setzen : $2 eacl_efs=Dateisystem $1 unterstützt keine ACLs eacl_emask=Es kann nur einen ACL-Eintrag geben eacl_eowner=Benutzer oder Gruppe nicht angegeben eacl_group=Datei-Gruppe $1 eacl_owner=Datei-Besitzer eacl_remove=ACL entfernen eacl_title=ACL für $1 eacl_user=Datei-Besitzer $1 eattr_A=Zugriffszeit nicht ändern eattr_S=Nach Schreiben immer synchronisieren eattr_a=Kann nur an Datei anhängen eattr_c=Datei auf Festplatte komprimieren eattr_d=Nicht mit dump sichern eattr_i=Keine Änderungen zulassen eattr_s=Beim Löschen mit Null-Blöcken überschreiben eattr_u=Inhalte für Wiederherstellung sichern ebutton=Diese Funktion ist nicht verfügbar edit_all=Alles ersetzen edit_eaccess=Sie haben keine Berechtigung die Datei '$1' zu speichern edit_efollow=Sie dürfen nicht auf den symbolischen Link '$1' schreiben edit_elength=Datei wurde abgeschnitten! edit_enormal=Nur normale Dateien können bearbeitet werden edit_eover=$1 kann nicht überschrieben werden edit_esave=Fehler beim Speichern der Datei : $1 edit_filename=Dateiname: edit_find=Finde edit_goto=Gehe zu edit_gotoline=Gehe zu Zeile edit_notfound=Der Text $1 wurde nicht gefunden edit_replace=Ersetzen edit_replaceby=Ersetzen mit edit_saveclose=Speichern & Schliessen edit_searchfor=Suchen nach edit_title=Bearbeite $1 edit_title2=Erstelle Datei eopen=Download gescheitert: $1 ext_eattrs=Konnte EXT-Attribute nicht lesen : $1 ext_efailed=Konnte EXT-Attribute für $1 nicht lesen : $2 ext_efs=Dateisystem $1 unterstützt keine EXT-Attribute ext_header=EXT-Datei-Attribute ext_title=EXT-Datei-Attribute für $1 facl_eaccess=Sie dürfen keine ACLs für diese Datei setzen file_type0=Verzeichnis file_type1=Textdatei file_type2=Bilddatei file_type3=Binäre Datei file_type4=Datei file_type5=Symbolischer Link file_type6=Gerätedatei file_type7=Pipe find_eaccess=Sie haben keine Berechtigung um auf $1 zuzugreifen find_edir=$1 ist kein Verzeichnis in $2 find_eexist=$1 existiert nicht in $2 index_eremote=Für diesen Unix-Benutzer gibt es keine Webmin-Anmeldung $1. index_nojava=Dieses Modul benötigt Java. Entweder unterstützt Ihr Browser kein Java oder Java ist nicht richtig installiert. index_title=Datei-Manager info_apply=Änderungen anwenden auf info_apply1=Nur dieses Verzeichnis info_apply2=Dieses Verzeichnisse und seine Dateien info_apply3=Dieses Verzeichnis und alle Unterverzeichnisse info_efailed=Fehler beim Update von $1 : $2 info_exec=Ausführen info_file=Datei info_group=Gruppe: info_link=Link nach: info_list=Liste info_mod=Verändert: info_octal=Oktal: info_other=Andere: info_own=Besitzer info_path=Pfad: info_perms=Rechte info_read=Lesen info_setgid=SetGID: info_setgid2=Dateien erben Gruppen info_setgid3=Führe aus als Gruppe info_setuid=SetUID: info_setuid2=Führe aus als Benutzer info_size=Größe: info_sticky=Sticky: info_sticky2=Nur Besitzer darf Dateien löschen info_type=Typ: info_user=Benutzer: info_write=Schreiben link_eexists=$1 existiert bereits link_efailed=Link schlug fehl : $1 link_efollow=Sie haben keine Berechtigung symbolische Links anzulegen link_efrom=Sie haben keine Berechtigung von '$1' zu verknüpfen link_efrom2=Sie dürfen nicht von '$1' linken link_from=Link von: link_title=Erstelle Link link_to=Link zu: list_eaccess=Sie haben keine Berechtigung zum Zugriff auf dieses Verzeichnis list_edir=Konnte $1 nicht auflisten : $2 log_acl=ACL für Datei $1 gesetzt log_attr=Attribute für Datei $1 gesetzt log_chmod=Berechtigungen für Datei $1 geändert log_copy=Datei von $1 nach $2 kopiert log_create_export=NFS-Export $1 erzeugt log_create_share=Samba-Freigabe $1 erzeugt log_delete=Datei $1 gelöscht log_delete_export=NFS-Export $1 gelöscht log_delete_share=Samba-Freigabe $1 gelöscht log_link=Symbolischer Link von $1 nach $2 erzeugt log_mkdir=Verzeichnis angelegt $1 log_modify_export=NFS-Export $1 geändert log_modify_share=Samba-Freigabe $1 geändert log_move=Datei von $1 nach $2 verschoben log_relink=Symbolischer Link von $1 nach $2 geändert log_save=Datei $1 gespeichert log_upload=Datei $1 hochgeladen mkdir_dir=Neues Verzeichnis: mkdir_eaccess=Sie haben keine Berechtigung, '$1' anzulegen mkdir_eexists=$1 existiert bereits mkdir_efailed=Erstellen des Verzeichnisses schlug fehl : $1 mkdir_title=Neues Verzeichnis mount_eaccess=Sie dürfen keine Dateisysteme einbinden mount_efstab=Es existiert kein Dateisystem an diesem Einhängepunkt mount_epoint=$1 ist kein Einhängepunkt mount_err1=Konnte $1 nicht einhängen : $2 mount_err2=Konnte $1 nicht aushängen : $2 mount_rusure1=Sind Sie sicher, dass Sie $1 in $2 einhängen wollen ? mount_rusure2=Sind Sie sicher, dass Sie $1 von $2 aushängen wollen ? mount_title1=Dateisystem einhängen mount_title2=Dateisystem aushängen move_afrom=Sie haben keine Berechtigung '$1' zu verschieben move_eto=Sie haben keine Berechtigung, Dateien nach '$1' zu verschieben over_msg=Die Datei $1 existiert bereits. Benutzen Sie das Feld unten um einen anderen Namen für die neue Datei anzugeben. over_new=Neuer Dateiname: over_ok=Ok over_title=Datei existiert paste_ecfailed=Kopieren schlug fehl : $1 paste_ecopy=Vor dem Einfügen mußen Sie kopieren oder ausschneiden paste_egone=Kopierte Datei $1 existiert nicht mehr paste_emfailed=Verschieben schlug fehl : $1 paste_eover=$1 kann nicht überschrieben werden paste_eself=Sie können keine Datei auf sich selber einfügen rename_eexists=Es existiert bereits eine Datei mit dem Namen $1 rename_efailed=Umbennenen schlug fehl : $1 rename_enew=Sie haben keine Berechtigung zu '$1' umzubennenen rename_eold=Sie haben keine Berechtigung, '$1' umzubennenen rename_new=Neuer Name: rename_ok=Umbenennen rename_old=Alter Name: rename_title=Umbennenen von $1 right_date=Datum right_group=Gruppe right_name=Name right_size=Größe right_user=Benutzer search_any=Alle search_crit=Suchkriterien search_dir=Suche in Verzeichnis search_eaccess=Sie haben keine Berechtigung, dieses Verzeichnis zu durchsuchen search_edir=Fehlendes oder ungültiges Verzeichnis search_egroup=Fehlender Gruppen-Name search_ematch=Fehlender anwendbarer regulärer Ausdruck search_esize=Dateigröße muß eine Ganzzahl sein search_euser=Fehlender Benutzername search_group=Im Besitz der Gruppe search_less=Weniger als search_list=Suchergebnisse search_match=auf Dateien passend search_more=Mehr als search_ok=Jetzt suchen search_size=Dateigrösse search_title=Dateien suchen search_type=Datei-Typ search_types_=Alle search_types_d=Verzeichnis search_types_f=Datei search_types_l=Symbolischer Link search_types_p=Benannte Pipe search_user=Im Besitz des Benutzers search_xdev=Hinter Einhängepunkten suchen? share_all=Alle share_available=Momentan aktiv? share_comment=Kommentar share_desc=Beschreibung share_guest=Gast-Zugriff share_host=Hosts share_listed=Aufgelistet.. share_lro=Nur-Lesen share_lrw=Lesen-Schreiben share_nfs=NFS share_nheader=NFS-Exporteinstellungen share_noff=NFS-Dateifreigabe deaktiviert share_non=NFS-Dateifreigabe aktiviert share_none=Keine share_only=Nur share_opts=Einstellungen share_ro=Nur-Lesen Hosts share_root=Root-Zugriff Hosts share_rw=Lesen-Schreiben Hosts share_s0=Niemandem trauen share_s1=Nicht-Root trauen share_s2=Jedem trauen share_samba=Windows share_sheader=Windows-Freigabeeinstellungen share_soff=Windows-Datei-Freigabe deaktiviert share_son=Windows-Datei-Freigabe aktiviert share_title=Freigabe share_writable=Beschreibbar? switch_euser=Dieser Unix-Benutzer existiert nicht! top_attr=Attribute top_config=Konfig. top_copy=Kopieren top_cut=Ausschneiden top_delete=Löschen top_down=Speichern top_eacl=ACL top_edit=Bearbeiten top_ext=EXT top_info=Info top_mount=Mount top_new=Neu top_paste=Einfügen top_refresh=Neu laden top_rename=Umbenennen top_ret=Webmin top_search=Suchen top_share=Freigabe top_upload=Hochladen upload_already=Die Datei $1 existiert bereits. Möchten Sie diese überschreiben? upload_conv=Konvertiere DOS Zeilenvorschübe? upload_dir=Hochladen zu Verzeichnis upload_edir=Hochlade-Verzeichnis existiert nicht. upload_efailed=Fehler beim Öffnen der hochzuladenden Datei : $1 upload_efile=Keine Datei zum Hochladen ausgewählt. upload_elink=Kann auf einen symbolischen Link nicht hochladen upload_eperm=Sie haben keine Berechtigung $1 zu erstellen upload_ewrite=Fehler beim Schreiben von $1 : $2. upload_file=Datei zum Hochladen upload_ok=Hochladen upload_title=Datei hochladen upload_yes=Ja, dann löschen upload_zip=ZIP- oder TAR-Dateien dekomprimieren? view_eaccess=Sie haben keine Berechtigung zum Zugriff auf $1 view_earchive=Sie dürfen keine Archive herunterladen view_earchmax=Das ausgewählte Verzeichnis ist größer als die maximal erlaubte Größe für Archive ($1 bytes) view_ecmd=Der Befehl $1, der zum Erzeugen von Archiven benötigt wird, ist nicht installiert. view_ecomp=Konnte Archiv nicht erzeugen: $1 view_edir=Ein Archiv kann nur für ein Verzeichnis angelegt werden view_enormal=Nur normale Dateien können betrachtet werden view_enormal2=Nur normale Dateien können lokal gespeichert werden. view_eopen=Fehler beim Öffnen von $1 : $2 zip_ecmd=Fehlendes $1 Kommando zip_ename=Scheint keine ZIP-, TAR- oder TAR.GZ-Datei zu sein. zip_err=Konnte Datei nicht auspacken: $1 zip_euntar=Un-TAR gescheitert: $1 zip_euntar2=Dekomprimierung und Un-TAR gescheitert: $1 zip_eunzip=Un-ZIP gescheitert: $1 file/lang/sv0100644000567100000120000001024507250026520012752 0ustar jcameronwheelindex_title=Filhanterare index_nojava=Denna modul behver java fr att fungera, men din lsare stdjer inte java top_open=ppna top_view=Visa top_edit=ndra top_refresh=Uppdatera top_info=Info top_delete=Ta bort top_new=Ny top_upload=Ladda in top_rename=Byt namn top_copy=Kopiera top_cut=Klipp ut top_paste=Klistra in right_name=Namn right_size=Storlek right_user=Anvndare right_group=Grupp right_date=Datum edit_enormal=Du kan bara ndra standardfiler edit_title=ndrar i $1 edit_title2=Skapar fil edit_filename=Filnamn: edit_eover=$1 fr inte skrivas ver edit_esave=Det gick inte att spara filen: $1 edit_eaccess=Du fr inte spara filen '$1' info_file=Fil info_path=Skvg: info_type=Typ: info_size=Storlek: info_mod=ndrad: info_link=Lnk till: info_perms=Rttigheter info_user=Anvndare: info_group=Grupp: info_other=vriga: info_sticky=Sticky: info_sticky2=Det r bara gare som fr ta bort filer info_own=gare info_setuid=Setuid: info_setuid2=Utfr som anvndare info_setgid=Setgid: info_setgid2=Filer rver grupp info_setgid3=Utfr som grupp info_apply=Utfr ndringarna p info_apply1=Endast denna katalog info_apply2=Denna katalog och filerna i den info_apply3=Denna katalog och dess underkataloger info_efailed=Det gick inte att uppdatera $1 : $2 info_read=Ls info_write=Skriv info_list=Lista info_exec=Exec delete_dtitle=Ta bort katalog delete_ftitle=Ta bort fil delete_ddesc=Vill du verkligen ta bort katalogen $1 med innehll permanent? delete_fdesc=Vill du verkligen ta bort filen $1 permanent? delete_efailed=Det gick inte att ta bort $1 : $2 mkdir_title=Ny katalog mkdir_dir=Ny katalog: mkdir_eexists=$1 finns redan mkdir_efailed=Det gick inte att skapa katalogen: $1 mkdir_eaccess=Du fr inte skapa '$1' link_title=Skapa lnk link_from=Lnk frn: link_to=Lnk till: link_eexists=$1 finns redan link_efailed=Det gick inte att lnka: $1 link_efrom=Du fr inte lnka frn '$1' link_efollow=Du fr inte skapa symboliska lnkar rename_title=Byt namn p $1 rename_old=Gammalt namn: rename_new=Nytt namn: rename_ok=Byt namn rename_eexists=Det finns redan en fil som heter $1 rename_efailed=Det gick inte att byta namn: $1 rename_eold=Du fr inte byta namn p '$1' rename_enew=Du fr inte byta namn till '$1' file_type0=Katalog file_type1=Textfil file_type2=Bildfile file_type3=Binrfil file_type4=Fil file_type5=Symbolisk lnk file_type6=Device-fil file_type7=Pipe view_enormal=Endast normala filer kan visas view_eaccess=Du fr inte komma t $1 view_eopen=Det gick inte att ppna $1: $2 paste_ecopy=Ngot mste klippas ut eller kopieras fr att du ska kunna klistra in paste_egone=Den kopierade filen $1 finns inte lngre paste_eover=$1 fr inte skrivas ver paste_eself=En fil fr inte klistras in ver sig sjlv paste_emfailed=Det gick inte att flytta: $1 paste_ecfailed=Det gick inte att kopiera: $1 over_title=Filen finns over_msg=Filen $1 finns redan. Skriv in ett nytt filnamn fr den inklistrade filen i fltet nedan. over_new=Nytt filnamn: over_ok=OK upload_efailed=Det gick inte att stta igng nedladdningen: $1 upload_title=Ladda ned fil upload_file=Fil att ladda ned upload_dir=Ladda ned till katalog upload_ok=Ladda ned upload_conv=Konvertera DOS-radbrytningar? upload_efile=Du har inte valt ngon fil som ska laddas ned. upload_edir=Du har inte valt ngon katalog att ladda ned till. upload_eperm=Du fr inte skapa $1 upload_ewrite=Det gick inte att skriva till $1: $2. find_eaccess=Du fr inte komma t $1 find_eexist=$1 finns inte i $2 find_edir=$1 r inte en katalog i $2 cancel=Avbryt chmod_eaccess=Du fr inte komma t '$1' chmod_euser=$1 :anvndaren finns inte chmod_egroup=$1 :gruppen finns inte chmod_elink=symlink misslyckades: $1 chmod_echown=chown misslyckades: $1 chmod_echmod=chmod misslyckades: $1 copy_efrom=Du fr inte kopiera frn '$1' copy_eto=Du fr inte kopiera till '$1' copy_elink=symlink misslyckades: $1 delete_eaccess=Du fr inte ta bort '$1' list_eaccess=Du fr inte komma t denna katalog list_edir=Det gick inte att lista $1: $2 move_eto=Du fr inte flytta filer till '$1' move_afrom=Du fr inte flytta p '$1' acl_user=Kom t filer p servern som anvndare acl_umask=Umask fr nya filer acl_follow=Ska symboliska lnkar alltid fljas? acl_dirs=Tillt endast tkomst till kataloger file/lang/it0100664000567100000120000002340410341163702012740 0ustar jcameronwheelindex_title=File Manager index_nojava=Questo modulo richiede java per funzionare, il tuo browser non supporta java index_eremote=Non esiste un utente Unix corrispondente il login Webmin $1. switch_euser=L'utente Unix non esiste! top_ret=Indice top_down=Salva top_edit=Modifica top_refresh=Ricarica top_info=Informazioni top_eacl=ACL top_attr=Attributi top_ext=EXT top_delete=Cancella top_new=Nuovo top_upload=Upload top_rename=Rinomina top_copy=Copia top_cut=Taglia top_paste=Incolla top_share=Condivisione top_mount=Mount top_search=Cerca top_config=Configura right_name=Nome right_size=Dimensione right_user=Utente right_group=Gruppo right_date=Data edit_enormal=Puoi modificare solo file normali edit_title=Modifica di $1 edit_title2=Creazione file edit_filename=Nome file: edit_goto=Vai a edit_find=Cerca edit_gotoline=Vai alla riga edit_replace=Sostituisci edit_all=Sostituisci tutto edit_searchfor=Cerca edit_replaceby=Sostituisci con edit_eover=$1 non può�essere sovrascritto edit_esave=Salvataggio file fallito : $1 edit_eaccess=Non sei autorizzato a salvare '$1' edit_notfound=Il testo $1 non è�stato trovato edit_saveclose=Salva & Esci info_file=File info_path=Percorso: info_type=Tipo: info_size=Dimensione: info_mod=Modificato: info_link=Link a: info_perms=Permessi info_user=Utente: info_group=Gruppo: info_other=Altri: info_octal=Ottale: info_sticky=Sticky: info_sticky2=Solo i proprietari possono cancellare file info_own=Possesso info_setuid=Setuid: info_setuid2=Esegui come utente info_setgid=Setgid: info_setgid2=I file ereditano il gruppo info_setgid3=Esegui come gruppo info_apply=Applica modifiche a info_apply1=Solo questa directory info_apply2=Questa directory e i suoi file info_apply3=Questa directory e tutte le subdirectory info_efailed=Aggiornamento $1 fallito : $2 info_read=Lettura info_write=Scrittura info_list=Elenco info_exec=Esecuzione eacl_eacls=Lettura ACL fallito : $1 eacl_acltype=Tipo ACL eacl_aclname=Applica a eacl_aclperms=Permessi eacl_add=Aggiungi ACL di tipo : eacl_remove=Rimuovi ACL eacl_efs=Il filesystem $1 non supporta ACL eacl_create=Crea ACL eacl_edit=Modifica ACL eacl_user=Proprietario file $1 eacl_group=Gruppo file $1 eacl_eowner=Utente o gruppo da applicare mancante eacl_efailed=Settaggio ACL fallito per $1 : $2 eacl_emask=Pu�esserci al massimo una maschera ACL eacl_edefmask=Pu�esserci al massimo una maschera ACL di default eacl_title=ACL per $1 eacl_owner=Proprietario File eacl_edefaults=Se il file ha ACL di default, deve avere utente, gruppo e altre ACL di default acltype_user=Utente acltype_group=Gruppo acltype_other=Altri acltype_mask=Maschera acltype_default_user=Utente di default acltype_default_group=Gruppo di default acltype_default_other=Altri di default acltype_default_mask=Maschera di default delete_mtitle=Cancellazione multipla di file delete_dtitle=Cancellazione directory delete_ftitle=Cancellazione file delete_ddesc=Sei sicuro di voler cancellare definitivamente la directory $1 e tutto il suo contenuto? delete_fdesc=Sei sicuro di voler cancellare definitivamente il file $1 ? delete_mdesc=Sei sicuro di voler cancellare definitivamente questi file e directory? : delete_efailed=Cancellazione $1 fallita : $2 mkdir_title=Nuova Directory mkdir_dir=Nuova directory: mkdir_eexists=$1 gi�esistente mkdir_efailed=Creazione directory fallita : $1 mkdir_eaccess=Non sei autorizzato a creare '$1' link_title=Creazione Link link_from=Link da: link_to=Link a: link_eexists=$1 gi�esistente link_efailed=Link fallito : $1 link_efrom=Non sei autorizzato a fare un link da '$1' link_efollow=Non sei autorizzato a creare link simbolici rename_title=Rinomina $1 rename_old=Vecchio nome: rename_new=Nuovo nome: rename_ok=Rinomina rename_eexists=Esiste gi�un file di nome $1 rename_efailed=Rinominazione fallita : $1 rename_eold=Non sei autorizzato a rinominare '$1' rename_enew=Non sei autorizzato a rinominare a '$1' file_type0=Directory file_type1=File di testo file_type2=File immagine file_type3=File binario file_type4=File file_type5=Link simbolico file_type6=File Device file_type7=Pipe view_enormal=Possono essere visualizzati solo file normali view_enormal2=Possono essere scaricati solo file normali view_eaccess=Non sei autorizzato ad accedere $1 view_eopen=Apertura $1 fallita : $2 paste_ecopy=Devi tagliare o copiare prima di incollare paste_egone=Il file copiato $1 non esite pi paste_eover=$1 non pu�essere sovrascritto paste_eself=Non puoi incollare un file sopra se stesso paste_emfailed=Spostamento fallito : $1 paste_ecfailed=Copia fallita : $1 over_title=Il File Esiste Gi�over_msg=Il file $1 esiste gi� Usa il campo qui sotto per inserire un nuovo nome per il file incollato. over_new=Nuovo nome: over_ok=Vai upload_efailed=Inizio trasferimento fallito : $1 upload_title=Trasferisci file (upload) upload_file=File da trasferire upload_dir=Trasferisci alla directory upload_ok=Trasferimento upload_conv=Convertire nuovariga DOS? upload_efile=Nessun file selezionato per il trasferimento. upload_edir=La directory di destinazine non esiste. upload_eperm=Non sei autorizzato a creare $1 upload_ewrite=Scrittura $1 fallita : $2. upload_already=Il file $1 esiste gi� Sei sicuro di volerlo sovrascrivere? find_eaccess=Non sei autorizzato ad accedere $1 find_eexist=$1 non esiste in $2 find_edir=$1 non �una directory in $2 cancel=Cancella close=Chiudi chmod_eaccess=Non sei autorizzato ad accedere '$1' chmod_euser=$1 : utente non esistente chmod_egroup=$1 : gruppo non esistente chmod_elink=Link simbolico fallito : $1 chmod_echown=chown fallito : $1 chmod_echmod=chmod fallito : $1 chmod_efollow=Non sei autorizzato a modificare link simbolici copy_efrom=Non sei autorizzato a copiare da '$1' copy_eto=Non sei autorizzato a copiare in '$1' copy_elink=Link simbolico fallito : $1 delete_eaccess=Non sei autorizzato a cancellare '$1' list_eaccess=Non sei autorizzato ad accedere questa directory list_edir=Elenco $1 fallito : $2 move_eto=Non sei autorizzato a muovere in '$1' move_afrom=Non sei autorizzato a muovere '$1' acl_user=Accesso file sul server come utente acl_user_def=Uguale al login Webmin acl_umask=Umask per i nuovi file acl_follow=Seguire sempre i link simbolici? acl_ro=Modalit�sola lettura? acl_dirs=Autorizza accesso alle sole directory acl_home=Includi la home directory dell'utente Webmin acl_log=Eseguo log di tutte le modifiche ai file? acl_goto=Aprire la prima directory autorizzata? share_title=Sharing share_samba=Windows share_nfs=NFS share_son=File sharing windows abilitato share_soff=File sharing windows disabilitato share_writable=Scrivibile? share_available=Attualmente attivo? share_sheader=Opzioni di sharing share_only=Solamente share_guest=Accesso guest? share_comment=Commento share_nheader=Opzioni export NFS share_non=File sharing NFS abilitato share_noff=File sharing NFS disabilitato share_desc=Descrizione share_ro=Host sola lettura share_rw=Host lettura e scrittura share_root=Host con accesso root access share_none=Nessuno share_all=Tutti share_listed=Elencati.. share_host=Host share_opts=Opzioni share_s0=Non fidarti di nessuno share_s1=Fidati degli utenti non-root share_s2=Fidati di tutti share_lro=Sola lettura share_lrw=Lettura scrittura log_create_export=Creato export NFS $1 log_modify_export=Modificato export NFS $1 log_delete_export=Cancellato export NFS $1 log_create_share=Creato share Samba $1 log_modify_share=Modificato share Samba $1 log_delete_share=Cancellato share Samba $1 log_save=File $1 salvato log_chmod=Cambiati permessi del file $1 log_mkdir=Creata directory $1 log_upload=Trasferito file $1 log_link=Creato link simbolico $1 a $2 log_relink=Modificato link simbolico $1 a $2 log_copy=Copiato file $1 a $2 log_move=Spostato file $1 a $2 log_delete=Cancellato file $1 log_attr=Settati attributi del file $1 log_acl=Settati ACL al file $1 search_eaccess=Non sei autorizzato a cercare questa directory search_title=Cerca file search_ok=Esegui Ricerca search_dir=Cerca directory search_match=File corrispondenti search_user=Utente proprietario search_group=Gruppo proprietario search_any=Qualsiasi search_type=Tipo file search_types_=Qualsiasi search_types_f=File search_types_d=Directory search_types_l=Link simbolico search_types_p=Named pipe search_size=Dimensione File search_more=Pi di search_less=Meno di search_xdev=Cerco sotto i mount? search_edir=Directory di ricerca mancante o invalido search_ematch=regexp di corrispondenza mancante o invalida search_euser=Nome utente mancante o invalido search_egroup=Nome gruppo mancante search_esize=La dimensione del file deve essere un intero search_crit=Criterio di ricerca search_list=Risultati ricerca facl_eaccess=Non sei autorizzato a settare ACL per questo file attr_eattrs=Lettura attributi fallito : $1 attr_efs=Il filesystem $1 non supporta attributi attr_add=Aggiungi Attributo attr_name=Nome Attributo attr_value=Valore Attributo attr_efailed=Settaggio attributo fallito per $1 : $2 attr_title=Attributi per $1 attr_create=Aggiungi Attributo attr_edit=Modifica Attributo attr_ename=Nome attributo mancante ext_eattrs=Lettura attributi EXT fallito : $1 ext_efs=Il filesystem $1 non supporta attributi EXT ext_title=Attributi EXT per $1 ext_header=Attributi EXT ext_efailed=Settaggio attributi fallito per $1 : $2 eattr_A=Non aggiornare il tempo di accesso eattr_a=Puoi solo appendere al file eattr_c=Dati compressi sul disco eattr_d=Non fare backup con dump eattr_i=Non permettere modifiche eattr_s=Azzera blocchi in cancellazione eattr_S=Sync dopo la scrittura eattr_u=Salva il contenuto per de-cancellazione mount_eaccess=Non sei autorizzato a montare filesystem mount_efstab=Non esiste filesystem in questo mount point mount_epoint=$1 non �un mount point mount_rusure1=Sei sicuro di voler montare $1 in $2 ? mount_rusure2=Sei sicuro di voler smontare $1 da $2 ? mount_err1=Mount di $1 fallito : $2 mount_err2=Un-mount di $1 fallito : $2 mount_title1=Mount filesystem mount_title2=Un-mount filesystem file/lang/bg0100664000567100000120000002410510005107277012715 0ustar jcameronwheelindex_title=File Manager index_nojava= java, java index_eremote= Unix Webmin $1. switch_euser=Unix ! top_ret=Index top_down= top_edit= top_refresh= top_info= top_eacl=ACL top_attr=. top_ext=EXT top_delete= top_new= top_upload=Upload top_rename= top_copy= top_cut= top_paste= top_share=Sharing top_mount=Mount top_search= top_config= right_name= right_size= right_user= right_group= right_date= edit_enormal= edit_title= $1 edit_title2= edit_filename=: edit_goto= edit_find= edit_gotoline= edit_replace= edit_all= edit_searchfor= edit_replaceby= edit_eover=$1 edit_esave= : $1 edit_eaccess= '$1' edit_notfound= $1 edit_saveclose= & info_file= info_path=: info_type=: info_size=: info_mod= : info_link= : info_perms= info_user=: info_group=: info_other= : info_octal=: info_sticky=Sticky: info_sticky2= info_own= info_setuid=Setuid: info_setuid2= info_setgid=Setgid: info_setgid2= info_setgid3= info_apply= info_apply1= info_apply2= info_apply3= info_efailed= $1 : $2 info_read= info_write= info_list= info_exec= eacl_eacls= ACL : $1 eacl_acltype=ACL eacl_aclname= eacl_aclperms= eacl_add= ACL : eacl_remove= ACL eacl_efs= $1 ACL eacl_create= ACL eacl_edit= ACL eacl_user= $1 eacl_group= $1 eacl_eowner= eacl_efailed= ACL $1 : $2 eacl_emask= mask ACL eacl_edefmask= - mask ACL eacl_title=ACL $1 eacl_owner= eacl_edefaults= ACL, , ACL. acltype_user= acltype_group= acltype_other= acltype_mask= acltype_default_user= acltype_default_group= acltype_default_other= acltype_default_mask= delete_mtitle= delete_dtitle= delete_ftitle= delete_ddesc= , $1 ? delete_fdesc= , $1 ? delete_mdesc= , ? : delete_efailed= $1 : $2 mkdir_title= mkdir_dir= : mkdir_eexists=$1 mkdir_efailed= : $1 mkdir_eaccess= '$1' link_title= link_from= : link_to= : link_eexists=$1 link_efailed= : $1 link_efrom= '$1' link_efollow= rename_title= $1 rename_old= : rename_new= : rename_ok= rename_eexists= $1 rename_efailed= : $1 rename_eold= '$1' rename_enew= '$1' file_type0= file_type1= file_type2= file_type3= file_type4= file_type5= file_type6= file_type7=Pipe view_enormal= view_enormal2= download- view_eaccess= $1 view_eopen= $1 : $2 paste_ecopy= "" paste_egone= $1 paste_eover=$1 paste_eself= "" paste_emfailed= : $1 paste_ecfailed= : $1 over_title= over_msg= $1 . . over_new= : over_ok= upload_efailed= upload : $1 upload_title=Upload upload_file= upload upload_dir=Upload upload_ok=Upload upload_conv= DOS ? upload_efile= upload. upload_edir=Upload . upload_eperm= $1 upload_ewrite= $1 : $2. upload_already= $1 . , ? find_eaccess= $1 find_eexist=$1 $2 find_edir=$1 $2 cancel= close= chmod_eaccess= '$1' chmod_euser=$1 : chmod_egroup=$1 : chmod_elink= : $1 chmod_echown= : $1 chmod_echmod= : $1 chmod_efollow= copy_efrom= '$1' copy_eto= '$1' copy_elink= : $1 delete_eaccess= '$1' list_eaccess= list_edir= $1 : $2 move_eto= '$1' move_afrom= '$1' acl_user= acl_user_def= Webmin login acl_umask=Umask acl_follow= ? acl_ro= ? acl_dirs= acl_home= home Webmin acl_log= ? acl_goto= ? share_title=Sharing share_samba=Windows share_nfs=NFS share_son=Windows share_soff=Windows share_writable= ? share_available= ? share_sheader=Sharing share_only= share_guest= ? share_comment= share_nheader= NFS share_non=NFS share_noff=NFS share_desc= share_ro= share_rw= share_root= share_none= share_all= share_listed=.. share_host= share_opts= share_s0= share_s1= share_s2= share_lro= share_lrw= log_create_export= NFS $1 log_modify_export= NFS $1 log_delete_export= NFS $1 log_create_share= Samba $1 log_modify_share= Samba $1 log_delete_share= Samba $1 log_save= $1 log_chmod= $1 log_mkdir= $1 log_upload=Upload- $1 log_link= $1 $2 log_relink= $1 $2 log_copy= $1 $2 log_move= $1 $2 log_delete= $1 log_attr= $1 log_acl= ACL $1 search_eaccess= search_title= search_ok= search_dir= search_match=, search_user= search_group= search_any= search_type= search_types_= search_types_f= search_types_d= search_types_l= search_types_p=Named pipe search_size= search_more= search_less=- search_xdev= -? search_edir= search_ematch= search_euser= search_egroup= search_esize= search_crit= search_list= facl_eaccess= ACL attr_eattrs= : $1 attr_efs= $1 attr_add= attr_name= attr_value= attr_efailed= $1 : $2 attr_title= $1 attr_create= attr_edit= attr_ename= ext_eattrs= EXT : $1 ext_efs= $1 EXT ext_title=EXT $1 ext_header=EXT ext_efailed= $1 : $2 eattr_A= eattr_a= eattr_c= eattr_d= backup dump eattr_i= eattr_s= eattr_S= sync eattr_u= mount_eaccess= mount_efstab= mounth point mount_epoint=$1 mount point mount_rusure1= , $1 $2 ? mount_rusure2= , $1 $2 ? mount_err1= $1 : $2 mount_err2= $1 : $2 mount_title1= mount_title2= file/lang/tr0100644000567100000120000002420410225071061012743 0ustar jcameronwheelacl_archive=Dizinlerin arivlerini indirebilir mi? acl_archmax=Evet, bundan daha kkse acl_b=byte acl_button_acl=ACL (Posix ACL dzenle) acl_button_copy=Kopyala, Kes ve Yaptr acl_button_delete=Sil (dosyalar sil) acl_button_edit=Dzenle (metin dosyasn dzenle) acl_button_info=Bilgi (dosya izinlerini ve sahipliini dzenle) acl_button_makelink=Yeni (sembolink link olutur) acl_button_mkdir=Yeni (dizin olutur) acl_button_mount=Mount (dosya sistemini mount et ya da umount et) acl_button_new=Yeni (metin dosyas olutur) acl_button_rename=Yeniden Adlandr (dosyay yeniden adlandr) acl_button_save=Kaydet (dosya indir) acl_button_search=Bul (dosya bul) acl_button_sharing=Paylatrma (Samba ve NFS dosya paylamn ayarla) acl_button_upload=Ykle (istemciden dosya ykle) acl_buttons=Ara ubuundaki eriilebilir butonlar acl_chroot=Dosya yneticisinin tamam iin chroot dizini acl_dirs=Sadece bu dizinlere eriime izin ver acl_follow=Sembolik linkler her zaman takip edilsin mi? acl_log=Btn dosya deiikliklerinin kaytlar tutulsun mu? acl_max=Maksimum ykleme boyutu acl_ro=Sadece okunabilir mod? acl_umask=Yeni dosyalar iin umask acl_unarchive=Yklenen ariv dosyalarn aabilir mi? acl_unarchive0=$no acl_unarchive1=$yes acl_unlim=Limitsiz acl_user=Sunucudaki dosyalara bu kullanc olarak ula : acl_user_def=Webmin kullanc ad ile ayn acltype_default_group=ntanml Grup acltype_default_mask=ntanml Mask acltype_default_user=ntanml Kullanc acltype_group=Grup acltype_mask=Mask acltype_other=Dierleri acltype_user=Kullanc cancel=ptal chmod_eaccess='$1'e eriim iin izininiz yoktur chmod_echmod=chmod'da hata olutu : $1 chmod_echown=chown'da hata olutu : $1 chmod_efollow=Sembolink linkleri dzenlemek iin izininiz yoktur chmod_egroup=$1 : byle bir grup yok chmod_elink=Sembolik linkte hata olutu : $1 chmod_euser=$1 : byle bir kullanc yok close=Kapat copy_efrom='$1'den kopyalamanza izin verilmemitir copy_elink=Sembolik linkte hata olutu : $1 copy_eto='$1'e kopyalamanza izin verilmemitir ddir_rusure=$1 'in ieriini bir ariv dosyas olarak indirmek iin, aadaki ariv tipi butonlarndan birini tklaynz. ddir_tar=TAR ddir_tgz=TAR.GZ ddir_title=ndirme Dizini ddir_zip=ZIP delete_ddesc=$1 dizinini ve iindekileri silmek istediinizden emin misiniz? delete_dtitle=Dizin Sil delete_eaccess='$1'i silmede hata olutu delete_efailed=$1'i silme ileminde hata olutu : $2 delete_fdesc=$1 dosyasn kalc olarak silmek istediinizden emin misiniz? delete_ftitle=Dosya sil delete_mdesc=Bu dosya ve dizinleri kalc olarak silmek istediinizden emin misiniz? : delete_mtitle=Birden fazla dosya sil eacl_aclperms=zinler eacl_acltype=ACL Tipi eacl_create=ACL Olutur eacl_eacls=ACL'lerin okunmasnda hata olutu : $1 eacl_edefaults=Eer bir dosyann ntanml ACL'si varsa bu dosya ntanml kullanc, grup ve dier ACL'lere de sahip olmaldr. eacl_edit=ACL Dzenle eacl_efs=$1 dosya sistemi ACL'leri desteklemiyor eacl_group=Dosya grubu $1 eacl_owner=Dosya sahibi eacl_remove=ACL Sil eacl_user=Dosya sahibi $1 eattr_A=Eriim zamanlarn gncelleme eattr_S=Yazmadan sonra her zaman senkronize et eattr_a=Dosyaya sadece ekleme yaplabilir eattr_c=Diskteki veriyi sktr eattr_d=Dump ile yedekleme eattr_i=Deitirilmesine izin verme ebutton=Bu zellik kullanlamaz edit_all=Hepsini deitir edit_eaccess='$1'e kaydedilmesine izininiz yoktur edit_efollow=Sembolink link '$1'e yazmak iin izininiz yoktur edit_enormal=Sadece normal dosyalar dzenlenebilir edit_eover=$1 zerine yazlamaz edit_esave=Dosyann kaydedilmesinde hata olutu : $1 edit_filename=Dosya smi: edit_find=Bul edit_goto=Git edit_gotoline=Satra git edit_notfound=$1 metini bulunamad edit_replace=Deitir edit_replaceby=Bununla deitir edit_saveclose=Kaydet & Kapat edit_title=$1 dzenleniyor edit_title2=Dosya oluturuluyor eopen=ndirmede hata : $1 facl_eaccess=Bu dosyann ACL'lerini belirlemek iin izininiz yoktur file_type0=Dizin file_type1=Metin Dosyas file_type2=Resim Dosyas file_type3=kili Dosya file_type4=Dosya file_type5=Sembolik Link file_type6=Aygt dosyas file_type7=Pipe find_eaccess=$1'e eriim izininiz yoktur find_edir=$1, $2'de bir dizin deil find_eexist=$1, $2 iinde mevcut deil index_eremote=Webmin kullancs $1 ile eleen Unix kullancs yok. index_nojava=Bu modl java gerektirir, fakat sizin taraycnz java'yi desteklemiyor index_title=Dosya Yneticisi info_apply=Deiiklikleri uygula ... info_apply1=Sadece bu dizine info_apply2=Bu dizin ve dosyalarna info_apply3=Bu dizin ve alt dizinlerine info_efailed=Gncellemede hata olutu $1 : $2 info_exec=altr info_file=Dosya info_group=Grup: info_link=Link to: info_list=Listele info_mod=Deitirildi: info_octal=Sekizli: info_other=Dierleri: info_own=Sahiplik info_path=Yol: info_perms=zinler info_read=Oku info_setgid=Setgid: info_setgid2=Dosyalar grubun olsun info_setgid3=Grup olarak altr info_setuid=Setuid: info_setuid2=Kullanc olarak altr info_size=Boyut: info_sticky=Sticky: info_sticky2=Dosyalar sadece sahipleri silebilir info_type=Tip: info_user=Kullanc: info_write=Yaz link_eexists=$1 zaten mevcut link_efailed=Link yaplrken hata olutu : $1 link_efollow=Sembolik link oluturmak iin izininiz yoktur link_efrom=Link kayna tam olarak verilmelidir link_efrom2='$1'den link yapmak iin izininiz yoktur link_from=Link buradan: link_title=Link Olutur link_to=Buraya link olutur: list_eaccess=Bu dizine eriim izininiz yoktur log_chmod=$1 dosyasnn haklar deitirildi log_copy=$1 dosyas $2'ye kopyaland log_create_export=NFS sunumu $1 oluturuldu log_create_share=Samba paylam $1 oluturuldu log_delete=$1 dosyas silindi log_delete_export=NFS sunumu $1 silindi log_delete_share=Samba paylam $1 silindi log_link=$2'ye sembolik link $1 oluturuldu log_mkdir=$1 dizini oluturuldu log_modify_export=NFS sunumu $1 deitirildi log_modify_share=Samba paylam $1 deitirildi log_move=$1 dosyas $2'ye tand log_relink=$2'ye sembolik link $1 deitirildi log_save=$1 dosyas kaydedildi log_upload=$1 dosyas yklendi mkdir_dir=Yeni dizin: mkdir_eaccess='$1' dizini oluturmaya hakknz yok mkdir_eexists=$1 dizini mevcut mkdir_efailed=Dizin oluturmada hata olutu : $1 mkdir_title=Yeni Dizin mount_eaccess=Dosya sistemini mount etmek iin izininiz yoktur mount_efstab=Bu mount noktasnda bir dosya sistemi mevcut deildir mount_epoint=$1 bir mount noktas deildir mount_err1=$1 'in mount edilmesinde hata olutu : $2 mount_err2=$1 'in umount edilmesinde hata olutu : $2 mount_rusure1=$1 'i $2 'ye mount etmek istediinize emin misiniz ? mount_rusure2=$1 'i $2 'den umount etmek istediinize emin misiniz ? mount_title1=Dosya sistemi mount et mount_title2=Dosya sistemi umount et move_afrom='$1'i tamak iin izininiz yoktur move_eto='$1'e tamak iin izininiz yoktur over_msg=$1 dosyas zaten mevcut. Yaptrlan dosyaya yeni bir isim girmek iin aadaki alan kullannz. over_new=Yeni dosya ismi: over_ok=Tamam over_title=Dosya Mevcut paste_ecfailed=Kopyalamada hata olutu : $1 paste_ecopy=Yaptrmadan nce kopyalamal veya kesmelisiniz paste_egone=Kopyalanan dosya $1 artk yok paste_emfailed=Tamada hata olutu : $1 paste_eover=$1 zerine yazlamaz paste_eself=Dosyay kendi zerine yaptramazsnz rename_eexists=$1 dosyas zaten mevcut rename_efailed=Yeniden adlandrmada hata olutu : $1 rename_enew='$1' olarak yeniden adlandrmak iin izininiz yoktur rename_eold='$1'i yeniden adlandrmak iin izininiz yoktur rename_new=Yeni sim: rename_ok=Yeniden Adlandr rename_old=Eski sim: rename_title=Yeniden Adlandr $1 right_date=Tarih right_group=Grup right_name=sim right_size=Boyut right_user=Kullanc search_crit=Armama kriteri search_dir=Arama dizini search_eaccess=Bu dizinde arama yapmak iin izininiz yoktur search_edir=Eksik ya da geersiz arama dizini search_egroup=Grup ad girilmemi search_esize=Dosya boyutu bir tamsay olmaldr search_euser=Kullanc ad girilmemi search_list=Arama sonular search_ok=imdi Ara search_size=Dosya boyutu search_title=Dosya bul search_type=Dosya tipi search_types_=Hepsi search_types_d=Dizin search_types_f=Dosya search_types_l=Sembolink link share_all=Hepsi share_available=Aktif mi? share_comment=Yorum share_desc=Aklama share_guest=Ziyareti eriimi? share_host=Makineler share_listed=Listeli... share_lro=Sadece okunur share_lrw=Okunur-yazlr share_nfs=NFS share_nheader=NFS sunum seenekleri share_noff=NFS dosya paylam kapal share_non=NFS dosya paylam ak share_none=Hibiri share_only=Sadece share_opts=Seenekler share_ro=Sadece okuma izinli makineler share_root=Root girili makineler share_rw=Okuma-yazma izinli makineler share_s0=Hikimseye gvenme share_s1=Root olmayanlara gven share_s2=Herkese gven share_samba=Windows share_sheader=Paylam seenekleri share_soff=Windows dosya paylam kapal share_son=Windows dosya paylam ak share_title=Paylatrma share_writable=Yazlabilir? switch_euser=Unix kullancs mevcut deil! top_config=Yaplandrma top_copy=Kopyala top_cut=Kes top_delete=Sil top_down=Kaydet top_eacl=ACL top_edit=Dzenle top_ext=EXT top_info=Bilgi top_mount=Mount top_new=Yeni top_paste=Yaptr top_refresh=Yenile top_rename=Yeniden Adlandr top_ret=ndeks top_search=Ara top_share=Paylatrma top_upload=Ykleme upload_already=$1 dosyas zaten mevcut. zerine yazmak istediinizden emin misiniz? upload_conv=DOS satrlar evirilsin mi? upload_dir=Dizine Ykle upload_edir=Ykleme dizini mevcut deil upload_efailed=Dosyann yklenmesinde hata olutu : $1 upload_efile=Yklenecek dosya seilmedi. upload_eperm=$1 oluturmanza izin verilmedi upload_ewrite=$1'i yazmada hata olutu : $2. upload_file=Yklenecek dosya upload_ok=Ykle upload_title=Dosyay Ykle upload_zip=ZIP ya da TAR dosyas alsn m? view_eaccess=$1'e eriim izininiz yoktur view_earchive=Arivleri indirmek iin izininiz yoktur view_earchmax=Seili dizin arivleme iin izin verilen maksimum boyuttan ($1 byte) daha byk view_ecomp=Ariv oluturulmasnda hata olutu : $1 view_edir=Bir ariv sadece bir dizin iin oluturulabilir view_enormal=Sadece normal dosyalar grntlenebilir view_enormal2=Sadece normal dosyalar indirilebilir view_eopen=$1 'in almasnda hata olutu : $2 zip_ename=Bir zip, tar ya da tar.gz gibi grnmyor zip_err=Dosya alamyor : $1 zip_euntar=Tar dosyasnn almasnda hata olutu : $1 file/lang/pl0100644000567100000120000002640507306537646012764 0ustar jcameronwheelindex_title=Zarzdca plikw index_nojava=Ten modu wymaga do swojego dziaania javy, natomiast Twoja przegldarka javy nie obsuguje # switch_euser=Uytkownik Uniksa nie istnieje! switch_euser=Uzytkownik Uniksa nie istnieje! # top_open=Otwrz top_open=Otworz top_view=Obejrzyj top_edit=Modyfikuj # top_refresh=Odwie top_refresh=Odswiez top_info=Informacje # top_delete=Usu top_delete=Usun top_new=Nowy # top_upload=Przelij top_upload=Przeslij # top_rename=Zmie nazw top_rename=Zmien nazwe top_copy=Kopiuj top_cut=Wytnij top_paste=Wklej # top_share=Udostpnianie top_share=Udostepnianie top_search=Szukaj right_name=Nazwa right_size=Rozmiar # right_user=Waciciel right_user=Wlasciciel right_group=Grupa right_date=Data # edit_enormal=Modyfikowa mona tylko zwyke pliki edit_enormal=Modyfikowac mozna tylko zwykle pliki edit_title=Modyfikacja $1 edit_title2=Tworzenie pliku edit_filename=Nazwa pliku: # edit_eover=$1 nie moe by nadpisany edit_eover=$1 nie moze byc nadpisany # edit_esave=Nie udao si zachowa pliku : $1 edit_esave=Nie udalo sie zachowac pliku : $1 # edit_eaccess=Nie masz uprawnie do zachowania '$1' edit_eaccess=Nie masz uprawnien do zachowania '$1' info_file=Plik # info_path=cieka: info_path=Sciezka: info_type=Typ: info_size=Rozmiar: info_mod=Zmieniony: # info_link=Dowizanie do: info_link=Dowiazanie do: info_perms=Uprawnienia # info_user=Waciciel: info_user=Wlasciciel: info_group=Grupa: info_other=Inni: info_sticky=Sticky: # info_sticky2=Tylko waciciele mog usuwa pliki info_sticky2=Tylko wlasciciele moga usuwac pliki # info_own=Prawa wasnoci info_own=Prawa wlasnosci info_setuid=Setuid: # info_setuid2=Uruchom jako uytkownik info_setuid2=Uruchom jako uzytkownik info_setgid=Setgid: # info_setgid2=Pliki dziedzicz grup info_setgid2=Pliki dziedzicza grupe info_setgid3=Uruchom jako grupa info_apply=Zastosuj zmiany do info_apply1=tylko katalogu # info_apply2=katalogu i zawartych w nim plikw info_apply2=katalogu i zawartych w nim plikow info_apply3=katalogu wraz z podkatalogami # info_efailed=Nie udao sie zaktualizowa $1 : $2 info_efailed=Nie udalo sie zaktualizowac $1 : $2 info_read=Odczyt info_write=Zapis # info_list=Przegldanie info_list=Przegladanie info_exec=Uruchamianie delete_dtitle=Usu katalog delete_ftitle=Usu plik # delete_ddesc=Czy jeste pewien, e chcesz nieodwracalnie usun katalog $1 wraz z ca zawartoci? delete_ddesc=Czy jestes pewien, ze chcesz nieodwracalnie usunac katalog $1 wraz z cala zawartoscia? # delete_fdesc=Czy jeste pewien, e chcesz nieodwracalnie usun plik $1 ? delete_fdesc=Czy jestes pewien, ze chcesz nieodwracalnie usunac plik $1 ? # delete_efailed=Nie udao si usun $1 : $2 delete_efailed=Nie udalo sie usunac $1 : $2 mkdir_title=Nowy katalog mkdir_dir=Nowy katalog: # mkdir_eexists=$1 ju istnieje mkdir_eexists=$1 juz istnieje # mkdir_efailed=Nie udao sie utworzy katalogu : $1 mkdir_efailed=Nie udalo sie utworzyc katalogu : $1 # mkdir_eaccess=Nie masz uprawnie do utworzenia '$1' mkdir_eaccess=Nie masz uprawnien do utworzenia '$1' link_title=Utwrz dowizanie link_from=Nazwa dowizania: link_to=Dowizanie do: # link_eexists=$1 ju istnieje link_eexists=$1 juz istnieje # link_efailed=Nie udao si utworzy dowizania : $1 link_efailed=Nie udalo sie utworzyc dowiazania : $1 # link_efrom=Nie masz uprawnie do utworzenia dowizania '$1' link_efrom=Nie masz uprawnien do utworzenia dowiazania '$1' # link_efollow=Nie masz uprawnie do tworzenia dowiza symbolicznych link_efollow=Nie masz uprawnien do tworzenia dowiazan symbolicznych rename_title=Zmie nazw $1 rename_old=Stara nazwa: rename_new=Nowa nazwa: # rename_ok=Zmie nazw rename_ok=Zmien nazwe # rename_eexists=Plik o nazwie $1 ju istnieje rename_eexists=Plik o nazwie $1 juz istnieje # rename_efailed=Nie udao si zmieni nazwy : $1 rename_efailed=Nie udalo sie zmienic nazwy : $1 # rename_eold=Nie masz uprawnie do zmiany nazwy '$1' rename_eold=Nie masz uprawnien do zmiany nazwy '$1' # rename_enew=Nie masz uprawnie do zmiany nazwy na '$1' rename_enew=Nie masz uprawnien do zmiany nazwy na '$1' file_type0=Katalog file_type1=Plik tekstowy file_type2=Plik Image file_type3=Plik binarny file_type4=Plik # file_type5=Dowizanie symboliczne file_type5=Dowiazanie symboliczne # file_type6=Plik urzdzenia file_type6=Plik urzadzenia file_type7=plik FIFO # view_enormal=Mona oglda tylko zwyke pliki view_enormal=Mozna ogladac tylko zwykle pliki # view_eaccess=Nie masz prawa dostpu do $1 view_eaccess=Nie masz prawa dostepu do $1 # view_eopen=Nie udao si otworzy $1 : $2 view_eopen=Nie udalo sie otworzyc $1 : $2 # paste_ecopy=Aby wklei musisz wczeniej co skopiowa lub wyci paste_ecopy=Aby wkleic musisz wczesniej cos skopiowac lub wyciac # paste_egone=Kopiowany plik $1 ju nie istnieje paste_egone=Kopiowany plik $1 juz nie istnieje # paste_eover=Nie mona nadpisa $1 paste_eover=Nie mozna nadpisac $1 # paste_eself=Nie moesz wklei pliku w miejsce jego samego paste_eself=Nie mozesz wkleic pliku w miejsce jego samego # paste_emfailed=Nie udao si przesun : $1 paste_emfailed=Nie udalo sie przesunac : $1 # paste_ecfailed=Nie udao si skopiowa : $1 paste_ecfailed=Nie udalo sie skopiowac : $1 over_title=Plik istnieje # over_msg=Plik $1 ju istnieje. Podaj now nazw dla tworzonego pliku korzystajc z pola poniej. over_msg=Plik $1 juz istnieje. Podaj nowa nazwe dla tworzonego pliku korzystajac z pola ponizej. over_new=Nowa nazwa pliku: over_ok=OK # upload_efailed=Nie udao si otworzy przesyania : $1 upload_efailed=Nie udalo sie otworzyc przesylania : $1 # upload_title=Przelij plik upload_title=Przeslij plik # upload_file=Plik do przesania upload_file=Plik do przeslania # upload_dir=Przelij do katalogu upload_dir=Przeslij do katalogu # upload_ok=Przelij upload_ok=Przeslij # upload_conv=Przeksztaci DOS-owe koce linii? upload_conv=Przeksztacic DOS-owe konce linii? # upload_efile=Nie podano pliku do przesania. upload_efile=Nie podano pliku do przeslania. # upload_edir=Katalog, do ktrego ma nastpi przesanie nie istnieje. upload_edir=Katalog, do ktorego ma nastapic przeslanie nie istnieje. # upload_eperm=Nie masz uprawnie do utworzenia $1 upload_eperm=Nie masz uprawnien do utworzenia $1 # upload_ewrite=Nie udao si zapisa w $1 : $2. upload_ewrite=Nie udalo sie zapisac w $1 : $2. # find_eaccess=Nie masz prawa dostpu do $1 find_eaccess=Nie masz prawa dostepu do $1 find_eexist=$1 nie istnieje w $2 find_edir=$1 nie jest podkatalogiem $2 cancel=Rezygnuj # chmod_eaccess=Nie masz prawa dostpu do '$1' chmod_eaccess=Nie masz prawa dostepu do '$1' # chmod_euser=$1 : nie ma takiego uytkownika chmod_euser=$1 : nie ma takiego uzytkownika chmod_egroup=$1 : nie ma takiej grupy # chmod_elink=nie udao si utworzy dowizania symbolicznego : $1 chmod_elink=nie udalo sie utworzyc dowiazania symbolicznego : $1 # chmod_echown=nie udao si zmieni waciciela : $1 chmod_echown=nie udalo sie zmienic wasciciela : $1 # chmod_echmod=nie udao si zmieni uprawnie : $1 chmod_echmod=nie udalo sie zmienic uprawnien : $1 # copy_efrom=Nie masz uprawnie do kopiowania '$1' copy_efrom=Nie masz uprawnien do kopiowania '$1' # copy_eto=Nie masz uprawnie do kopiowania do '$1' copy_eto=Nie masz uprawnien do kopiowania do '$1' # copy_elink=nie udao si utworzy dowizania symbolicznego : $1 copy_elink=nie udalo sie utworzyc dowiazania symbolicznego : $1 # delete_eaccess=Nie masz uprawnie do usunicia '$1' delete_eaccess=Nie masz uprawnien do usuniecia '$1' # list_eaccess=Nie masz prawa dostpu do tego katalogu list_eaccess=Nie masz prawa dostepu do tego katalogu # list_edir=Nie udao si przejrze $1 : $2 list_edir=Nie udalo sie przejrzec $1 : $2 # move_eto=Nie masz uprawnie do przenoszenia do '$1' move_eto=Nie masz uprawnien do przenoszenia do '$1' # move_afrom=Nie masz uprawnie do przeniesienia '$1' move_afrom=Nie masz uprawnien do przeniesienia '$1' acl_user=Dostp do plikw na serwerze z prawami uytkownika acl_user_def=Taki sam jak zalogowany do Webmina acl_umask=Umaska dla nowych plikw acl_follow=Zawsze ledzi dowizania symboliczne? acl_dirs=Pozwoli jedynie na dostp do katalogw # acl_home=Docz katalog domowy uytkownika Webmina acl_home=Dolacz katalog domowy uzytkownika Webmina share_title=Udostpnianie share_samba=Windows share_nfs=NFS # share_son=Udostpnianie plikw dla Windows wczone share_son=Udostepnianie plikow dla Windows wlaczone # share_soff=Udostpnianie plikw dla Windows wyczone share_soff=Udostepnianie plikow dla Windows wylaczone share_writable=Prawa zapisu? share_available=Aktualnie czynne? # share_sheader=Opcje wspdzielenia share_sheader=Opcje wspoldzielenia # share_only=Wycznie share_only=Wylacznie # share_guest=Dostp gocinny? share_guest=Dostep goscinny? share_comment=Uwagi # share_nheader=Opcje udostpniania NFS share_nheader=Opcje udostepniania NFS # share_non=Udostpnianie NFS wczone share_non=Udostepnianie NFS wlaczone # share_noff=Udostpnianie NFS wyczone share_noff=Udostepnianie NFS wylaczone share_desc=Opis # share_ro=Hosty z dostpem tylko do odczytu share_ro=Hosty z dostepem tylko do odczytu # share_rw=Hosty z dostpem do zapisu share_rw=Hosty z dostepem do zapisu # share_root=Hosty z dostpem roota share_root=Hosty z dostepem roota share_none=Brak share_all=Wszystkie share_listed=Wymienione.. share_host=Hosty share_opts=Opcje share_s0=Nie ufaj nikomu # share_s1=Ufaj wszystkim prcz roota share_s1=Ufaj wszystkim procz roota share_s2=Ufaj wszystkim share_lro=Tylko do odczytu share_lrw=Odczyt i zapis log_create_export=Utworzono udostpnianie NFS $1 log_modify_export=Zmieniono udostpnianie NFS $1 log_delete_export=Usunito udostpnianie NFS $1 log_create_share=Utworzono zasb Samby $1 log_modify_share=Zmieniono zasb Samby $1 log_delete_share=Usunito zasb Samby $1 log_save=Zachowano plik $1 log_chmod=Zmieniono uprawnienia dla pliku $1 log_mkdir=Utworzono katalog $1 log_upload=Przesano plik $1 log_link=Utworzono dowizanie symboliczne $1 do $2 log_relink=Zmieniono dowizanie symboliczne $1 do $2 log_copy=Skopiowano plik $1 jako $2 log_move=Przeniesiono plik $1 do $2 log_delete=Usunito plik $1 # search_eaccess=Nie masz uprawnie do przeszukiwania tego katalogu search_eaccess=Nie masz uprawnien do przeszukiwania tego katalogu search_title=Szukaj plikw search_ok=Szukaj teraz search_dir=Szukaj w katalogu # search_match=Plikw wg wzorca search_match=Plikow wg wzorca # search_user=Nalecych do uytkownika search_user=Nalezacych do uzytkownika # search_group=Nalecych do grupy search_group=Nalezacych do grupy search_any=Dowolny search_type=Rodzaj pliku search_types_=Dowolny # search_types_f=Zwyky plik search_types_f=Zwykly plik search_types_d=Katalog # search_types_l=Dowizanie symboliczne search_types_l=Dowiazanie symboliczne search_types_p=Nazwane FIFO search_size=Rozmiar pliku # search_more=Wikszy ni search_more=Wiekszy niz # search_less=Mniejszy ni search_less=Mniejszy niz # search_xdev=Przeszukiwa inne systemy plikw? search_xdev=Przeszukiwac inne systemy plikow? search_edir=Nie podany lub niepoprawny katalog przeszukiwania # search_ematch=Brak wyraenia regularnego do dopasowania search_ematch=Brak wyrazenia regularnego do dopasowania # search_euser=Nie podano nazwy uytkownika search_euser=Nie podano nazwy uzytkownika search_egroup=Nie podano nazwy grupy # search_esize=Rozmiar pliku musi by liczb cakowit search_esize=Rozmiar pliku musi byc liczba calkowita search_crit=Kryteria szukania search_list=Wyniki szukania file/lang/ru_RU0100664000567100000120000002251710005107277013366 0ustar jcameronwheeltop_delete= info_apply= info_perms= info_file= view_enormal= top_upload= edit_esave= : $1 upload_ewrite= $1 : $2. chmod_elink= symlink : $1 upload_ok= view_eaccess= $1 info_group=: edit_title2= top_info= move_afrom= '$1' link_efailed= : $1 info_setuid2= chmod_euser=$1 : link_efrom= '$1' info_mod=: right_date= copy_efrom= '$1' info_sticky2= rename_old= : find_eaccess= $1 mkdir_eexists=$1 upload_dir= rename_enew= '$1' find_edir=$1 $2 upload_efile= . info_type=: info_setuid= setuid: right_group= upload_efailed= : $1 top_cut= info_read= acl_user= paste_ecopy= info_exec= delete_ddesc= $1 ? info_link= : link_to= : info_size=: info_path=: copy_eto= '$1' rename_ok= chmod_egroup=$1 : info_own= upload_conv= DOS? cancel= info_list= index_nojava= java, java paste_eover=$1 info_user=: delete_fdesc= $1 ? edit_title= $1 paste_egone= $1 top_paste= chmod_echmod= chmod : $1 edit_filename= : link_eexists=$1 edit_enormal= info_setgid2= info_setgid3= top_copy= edit_eaccess= '$1' right_name= rename_efailed= : $1 upload_edir= . rename_new= : delete_dtitle= link_from=: index_title= file_type0= file_type1= file_type2= file_type3= file_type4= file_type5= file_type6= file_type7= info_sticky= sticky: upload_title= top_edit= upload_eperm= $1 move_eto= '$1' paste_eself= copy_elink= symlink : $1 chmod_echown= chown : $1 acl_umask=Umask mkdir_dir= : info_other=: mkdir_title= delete_ftitle= find_eexist=$1 $2 right_size= edit_eover=$1 paste_emfailed= : $1 link_title= info_apply1= info_apply2= info_apply3= info_efailed= $1 : $2 acl_follow= ? upload_file= info_setgid= setgid: paste_ecfailed= : $1 mkdir_eaccess= '$1' right_user= rename_eold= '$1' link_efollow= rename_title= $1 top_new= mkdir_efailed= : $1 info_write= rename_eexists= $1 acl_dirs= chmod_eaccess= '$1' top_refresh= delete_eaccess= '$1' view_eopen= $1 : $2 top_rename= list_eaccess= delete_efailed= $1 : $2 log_chmod= $1 eacl_edefmask=There can be at most one default mask ACL entry acl_log= ? eacl_eacls= ACL : $1 search_eaccess= over_msg= $1 . . share_nfs=NFS log_copy= $1 $2 acltype_default_group= eacl_aclname= search_size= log_upload= $1 attr_create= search_types_d= ext_eattrs= EXT : $1 search_group= search_types_f= index_eremote= Unix Webmin $1. search_types_l= search_types_p= search_dir= acltype_user= acl_user_def= Webmin top_share= switch_euser= Unix ! acl_home= Webmin search_match= share_writable= ? delete_mtitle= search_less= top_attr= log_link= $1 $2 log_create_export= NFS $1 eacl_acltype= ACL share_s0= nobody share_s1= -root share_s2= ext_header= EXT search_title= search_types_= log_move= $1 $2 acl_goto= ? top_search= share_none= log_delete= $1 share_opts= share_ro=, share_rw=, share_guest= (Guest)? share_nheader= NFS over_title= over_new= : share_host= search_esize= acltype_other= ext_efailed= EXT $1 : $2 share_title= share_only= attr_edit= eacl_eowner= view_enormal2= search_user= log_mkdir= $1 attr_ename= search_more= eacl_user= $1 ext_efs= $1 EXT acltype_default_user= top_ext=EXT eacl_efs= $1 ACL search_egroup= share_lro= acl_ro= ? eacl_edefaults=If a file has any default ACL, it must have default user, group and other ACLs. list_edir= $1 : $2 eacl_owner= share_lrw=/ attr_name= eacl_aclperms= acltype_default_other= acltype_mask= attr_eattrs= : $1 search_ematch= eacl_add= ACL : log_attr= $1 log_modify_export= NFS $1 attr_efs= $1 top_down= eattr_A= search_crit= attr_add= chmod_efollow= ext_title= EXT $1 share_son= Windows log_create_share= Samba $1 search_ok= attr_title= $1 eattr_S= search_edir= share_non= NFS eattr_a= share_samba=Windows eattr_c= eattr_d= dump search_xdev= ? eacl_edit= ACL eattr_i= share_soff= Windows search_euser= eattr_s= eattr_u= top_ret= log_delete_share= Samba $1 eacl_emask=There can be at most one mask ACL entry log_delete_export= NFS $1 eacl_group= $1 share_noff= NFS share_available= ? info_octal= : attr_efailed= $1 : $2 acltype_default_mask= log_modify_share= Samba $1 log_save= $1 share_comment= share_desc= eacl_remove= ACL attr_value= search_any= search_type= eacl_title=ACL $1 top_eacl=ACL facl_eaccess= ACL share_root=, root eacl_efailed= ACL $1 : $2 share_all= delete_mdesc= ? : acltype_group= log_acl= $1 ACL share_listed=.. share_sheader= search_list= eacl_create= ACL log_relink= $1 $2 over_ok= file/lang/ja_JP.euc0100664000567100000120000001503510067670054014073 0ustar jcameronwheelindex_title=ե ޥ͡ index_nojava=Υ⥸塼ưΤ Java ɬפȤޤѤΥ֥饦 Java 򥵥ݡȤƤޤ top_open= top_view=ɽ top_edit=Խ top_refresh= top_info= top_delete= top_new= top_upload=åץ top_rename=̾ѹ top_copy=ԡ top_cut=å top_paste=ڡ top_share=ͭ top_search= right_name=ե̾ right_size= right_user=桼 right_group=롼 right_date= edit_enormal=ɸեΤԽǤޤ edit_title=$1 Խ edit_title2=ե edit_filename=ե̾: edit_eover=$1 Ͼ񤭤Ǥޤ edit_esave=ե¸ǤޤǤ: $1 edit_eaccess='$1' ¸Ǥޤ info_file=ե info_path=ѥ: info_type=: info_size=: info_mod=ѹ: info_link=: info_perms= info_user=桼: info_group=롼: info_other=¾: info_sticky=ƥå: info_sticky2=ͭԤΤߤեǤޤ info_own=ͭ info_setuid=setuid (桼 ID ): info_setuid2=Υ桼ȤƼ¹ info_setgid=setgid (롼 ID ): info_setgid2=եηѾ롼 info_setgid3=Υ롼פȤƼ¹ info_apply=ѹŬ info_apply1=Υǥ쥯ȥΤ info_apply2=Υǥ쥯ȥȤ˴ޤޤƤե info_apply3=Υǥ쥯ȥȤ٤ƤΥ֥ǥ쥯ȥ info_efailed=$1 򹹿ǤޤǤ: $2 info_read=ɼ info_write= info_list=ꥹ info_exec=¹ delete_dtitle=ǥ쥯ȥκ delete_ftitle=եκ delete_ddesc=ǥ쥯ȥ $1 ȤƤʵפ˺ƤǤ delete_fdesc=桼 $1ʵפ˺ƤǤ delete_efailed=$1 ǤޤǤ: $2 mkdir_title=Υǥ쥯ȥ mkdir_dir=Υǥ쥯ȥ: mkdir_eexists=$1 ϤǤ¸ߤޤ mkdir_efailed=ǥ쥯ȥǤޤǤ: $1 mkdir_eaccess='$1' Ǥޤ link_title=󥯤κ link_from=󥯸: link_to=: link_eexists=$1 ϤǤ¸ߤޤ link_efailed=󥯤ǤޤǤ: $1 link_efrom='$1' 󥯤Ǥޤ link_efollow=ܥå 󥯤Ǥޤ rename_title=$1 ̾ѹ rename_old=Ť̾: rename_new=̾: rename_ok=̾ѹ rename_eexists=$1 ȤեϤǤ¸ߤƤޤ rename_efailed=̾ѹǤޤǤ: $1 rename_eold='$1' ̾ѹǤޤ rename_enew='$1' ̾ѹǤޤ file_type0=ǥ쥯ȥ file_type1=ƥ ե file_type2=ե file_type3=Хʥ ե file_type4=ե file_type5=ܥå file_type6=ǥХ ե file_type7=ѥ view_enormal=ɸեΤɽǤޤ view_eaccess=$1 ˥Ǥޤ view_eopen=$1 򳫤ޤǤ: $2 paste_ecopy=ڡȤ˥åȤޤϥԡƤ paste_egone=ԡե $1 Ϥ⤦¸ߤޤ paste_eover=$1 Ͼ񤭤Ǥޤ paste_eself=ե򤽤Υե뼫Ȥ˥ڡȤ뤳ȤϤǤޤ paste_emfailed=ưǤޤǤ: $1 paste_ecfailed=ԡǤޤǤ: $1 over_title=¸Υե over_msg=ե $1 ϤǤ¸ߤޤڡȤ줿եοե̾򲼤ΥեɤϤƤ over_new=Υե̾: over_ok=OK upload_efailed=åץɤ򳫤ޤǤ: $1 upload_title=եΥåץ upload_file=åץɤե upload_dir=åץ ǥ쥯ȥ upload_ok=åץ upload_conv=DOS ԤѴޤ upload_efile=åץɤե뤬򤵤Ƥޤ upload_edir=åץɤΥǥ쥯ȥ꤬¸ߤޤ upload_eperm=$1 Ǥޤ upload_ewrite=$1 ˽񤭹ޤǤ: $2. find_eaccess=$1 ˥Ǥޤ find_eexist=$1 $2 ˤ¸ߤޤ find_edir=$1 $2 Υǥ쥯ȥǤϤޤ cancel=󥻥 chmod_eaccess='$1' ˥Ǥޤ chmod_euser=$1 : Υ桼¸ߤޤ chmod_egroup=$1 : Υ롼פ¸ߤޤ chmod_elink=symlink Ԥޤ: $1 chmod_echown=chown Ԥޤ: $1 chmod_echmod=chmod Ԥޤ: $1 copy_efrom='$1' ϥԡǤޤ copy_eto='$1' ؤϥԡǤޤ copy_elink=symlink Ԥޤ: $1 delete_eaccess='$1' Ǥޤ list_eaccess=Υǥ쥯ȥ˥Ǥޤ list_edir=$1 ꥹȤǤޤǤ: $2 move_eto='$1' ؤϰưǤޤ move_afrom='$1' ϰưǤޤ acl_user=ФΥե˼Υ桼Ȥƥ acl_umask=ե Umask acl_follow=symlink ˤɤޤ acl_dirs=Υǥ쥯ȥؤΥΤߤ share_title=ͭ share_samba=Windows share_nfs=NFS share_son=Windows եζͭͭ share_soff=Windows եζ̵ͭ share_writable=ߤǤޤ share_available=ߥƥ֤Ǥ share_sheader=ͭץ share_only=Τ share_guest=ȤΥǽˤޤ share_comment= share_nheader=NFS ݡ ץ share_non=NFS եζͭͭ share_noff=NFS եζ̵ͭ share_desc= share_ro=ɼѤΥۥ share_rw=ɼ-߲ǽΥۥ share_root=root Υۥ share_none=ʤ share_all=٤ share_listed=ꥹ.. share_host=ۥ share_opts=ץ share_s0=٤ƤΥ桼ꤷʤ share_s1=root ʳ share_s2=٤ƤΥ桼 share_lro=ɼ share_lrw=ɼ- log_create_export=NFS ݡ $1 ޤ log_modify_export=NFS ݡ $1 ѹޤ log_delete_export=NFS ݡ$1 ޤ log_create_share=Samba ζͭ $1 ޤ log_modify_share=Samba ζͭ $1 ѹޤ log_delete_share=Samba ζͭ $1 ޤ log_save=ե $1 ¸ޤ log_chmod=ե $1 εĤѹޤ log_mkdir=ǥ쥯ȥ $1 ޤ log_upload=ե $1 򥢥åץɤޤ log_link=$2ؤΥܥå $1 ޤ log_relink=$2 ؤΥܥå $1 ѹޤ log_copy=ե $1 $2 ˥ԡޤ log_move=ե $1 $2 ˰ưޤ log_delete=ե $1 ޤ search_eaccess=Υǥ쥯ȥ򸡺Ǥޤ search_title=եθ search_ok=˸ search_dir=ǥ쥯ȥ search_match=פե search_user=ͭ桼 search_group=ͭ롼 search_any=Ǥ search_type=եμ search_types_=Ǥ search_types_f=ե search_types_d=ǥ쥯ȥ search_types_l=ܥå search_types_p=̾դѥ search_size=ե search_more=礭 search_less=꾮 search_xdev=ΥޥȤ򸡺ޤ search_edir=ǥ쥯ȥ꤬ʤ̵Ǥ search_ematch=פɽޤ search_euser=桼̾ޤ search_egroup=롼̾ޤ search_esize=ե ǤʤФʤޤ search_crit= search_list= file/lang/ko_KR.euc0100664000567100000120000001354207305563347014125 0ustar jcameronwheelindex_title= index_nojava= Java Բ ؾ Java ʽϴ top_open= top_view= top_edit= top_refresh= ħ top_info= top_delete= top_new= top_upload=ε top_rename≠ ٲٱ top_copy= top_cut=߶󳻱 top_paste=ٿֱ top_share= top_search=ã right_name≠ right_size=ũ right_user= right_group=׷ right_date=¥ edit_enormal=Ϲ ϸ ֽϴ edit_title=$1 edit_title2= ۼ edit_filename= ̸: edit_eover=$1()  ϴ edit_esave= ߽ϴ: $1 edit_eaccess='$1'() ϴ info_file= info_path=: info_type=: info_size=ũ: info_mod= ¥: info_link=ũ : info_perms= info_user=: info_group=׷: info_other= : info_sticky=: info_sticky2=ڸ ֽϴ info_own= info_setuid=Setuid: info_setuid2=ڷμ info_setgid=Setgid: info_setgid2= ׷ info_setgid3=׷μ info_apply= info_apply1= 丮 info_apply2= 丮 ش info_apply3= 丮 丮 info_efailed=$1() Ʈ ߽ϴ: $2 info_read=б info_write= info_list= info_exec= delete_dtitle=丮 delete_ftitle= delete_ddesc=丮 $1() Ͻðڽϱ? delete_fdesc= $1() Ͻðڽϱ? delete_efailed=$1() ߽ϴ: $2 mkdir_title= 丮 mkdir_dir= 丮: mkdir_eexists=$1() ̹ ֽϴ mkdir_efailed=丮 ۼ ߽ϴ: $1 mkdir_eaccess='$1'() ۼ ϴ link_title=ũ ۼ link_from=ũ ҽ: link_to=ũ : link_eexists=$1() ̹ ֽϴ link_efailed=ũ : $1 link_efrom='$1' ũ ϴ link_efollow=ɺ ũ ۼ ϴ rename_title=$1 ̸ ٲٱ rename_old= ̸: rename_new= ̸: rename_ok≠ ٲٱ rename_eexists= $1() ̹ ֽϴ rename_efailed≠ ٲ ߽ϴ: $1 rename_eold='$1' ̸ ٲ ϴ rename_enew='$1'() ̸ ٲ ϴ file_type0=丮 file_type1=ؽƮ file_type2=̹ file_type3= file_type4= file_type5=ɺ ũ file_type6=ġ file_type7= view_enormal=Ϲ ϸ ֽϴ view_eaccess=$1 ϴ view_eopen=$1() ߽ϴ: $2 paste_ecopy=ٿֱ ߶󳻰ų ؾ մϴ paste_egone= $1() ̻ ʽϴ paste_eover=$1()  ϴ paste_eself= Ͽ ٿ ϴ paste_emfailed=̵ ߽ϴ: $1 paste_ecfailed= ߽ϴ: $1 over_title= over_msg= $1() ̹ ֽϴ. ٿ ̸ Ʒ ʵ忡 ԷϽʽÿ. over_new= ̸: over_ok=Ȯ upload_efailed=ε ߽ϴ: $1 upload_title= ε upload_file=ε upload_dir=丮 ε upload_ok=ε upload_conv=DOS ٹٲ ȯմϱ? upload_efile=ε ʾҽϴ. upload_edir=ε 丮 ʽϴ. upload_eperm=$1() ۼ ϴ upload_ewrite=$1 ߽ϴ: $2 find_eaccess=$1 ׼ ϴ find_eexist=$2 $1() ʽϴ find_edir=$1() $2 丮 ƴմϴ cancel= chmod_eaccess='$1' ϴ chmod_euser=$1: ش chmod_egroup=$1: ش ׷ chmod_elink=ɺ ũ : $1 chmod_echown=chown : $1 chmod_echmod=chmod : $1 copy_efrom='$1' ϴ copy_eto='$1' ϴ copy_elink=ɺ ũ : $1 delete_eaccess='$1'() ϴ list_eaccess= 丮 ϴ list_edir=$1() ߽ϴ: $2 move_eto='$1'() ̵ ϴ move_afrom='$1'() ̵ ϴ acl_user=ڷμ Ͽ acl_umask= Umask acl_follow=׻ ɺ ũ ϱ? acl_dirs=丮 ׼ share_title= share_samba= share_nfs=NFS share_son= share_soff= Ҵ share_writable= մϱ? share_available= Ȱ Դϱ? share_sheader= ɼ share_only= share_guest=ԽƮ մϱ? share_comment=ּ share_nheader=NFS ɼ share_non=NFS share_noff=NFS Ҵ share_desc= share_ro=б ȣƮ share_rw=б/ ȣƮ share_root=root ׼ ȣƮ share_none= share_all= share_listed=.. share_host=ȣƮ share_opts=ɼ share_s0=ƹ ŷ share_s1=root ŷ share_s2= ŷ share_lro=б share_lrw=б/ log_create_export=NFS $1 ۼ log_modify_export=NFS $1 log_delete_export=NFS $1 log_create_share= $1 ۼ log_modify_share= $1 log_delete_share= $1 log_save= $1 log_chmod= $1 log_mkdir=丮 $1 ۼ log_upload= $1 ε log_link=$2 ɺ ũ $1 ۼ log_relink=$2 ɺ ũ $1 log_copy=$2() $1 log_move=$2() $1 ̵ log_delete= $1 search_eaccess= 丮 ˻ ϴ search_title= ã search_ok= ˻ search_dir=丮 ˻ search_match= ˻ search_user= search_group=׷ search_any= search_type= search_types_= search_types_f= search_types_d=丮 search_types_l=ɺ ũ search_types_p= search_size= ũ search_more= ŭ search_less= search_xdev= Ʈ ˻մϱ? search_edir=ų ߸ ˻ 丮 search_ematch=ġϴ ϴ search_euser= ̸ search_egroup= ׷ ̸ search_esize= ũ մϴ search_crit=˻ search_list=˻ file/lang/ca0100644000567100000120000003273010515234542012713 0ustar jcameronwheelindex_title=Administrador de Fitxers index_nojava=Aquest mdul requereix java per funcionar, per el teu navegador no suporta java index_eremote=No hi ha cap usuari Unix que coincideixi amb l'entrada $1 de Webmin. index_index=Torna a l'ndex de Webmin. switch_euser=L'usuari Unix no existeix! top_ret=ndex top_down=Desa top_preview=Previsualitza top_edit=Edita top_html=HTML top_refresh=Refresca top_info=Info top_eacl=ACL top_attr=Atributs top_ext=EXT top_delete=Suprimeix top_new=Nou top_upload=Puja top_rename=Renomena top_copy=Copia top_cut=Retalla top_paste=Enganxa top_share=Xarxa top_mount=Munta top_search=Busca top_config=Configura right_name=Nom right_size=Mida right_user=Usuari right_group=Grup right_date=Data edit_enormal=Noms es poden editar els fitxers normals edit_title=Editant $1 edit_title2=Creant el fitxer edit_filename=Nom del fitxer: edit_goto=Ves edit_find=Busca edit_gotoline=Ves a la lnia edit_replace=Reemplaa edit_all=Reemplaa-ho tot edit_searchfor=Busca edit_replaceby=Reemplaa amb edit_eover=$1 no es pot reescriure edit_esave=No he pogut desar el fitxer: $1 edit_eaccess=No tens perms per desar '$1' edit_efollow=No tens perms per gravar l'enlla simblic '$1' edit_notfound=El text $1 no s'ha trobat edit_saveclose=Desa & Tanca edit_elength=S'ha escapat el fitxer! info_file=Fitxer info_path=Cam: info_type=Tipus: info_size=Mida: info_mod=Modificat: info_link=Enlla a: info_perms=Permisos info_user=Usuari: info_group=Grup: info_other=Altres: info_octal=Octal: info_sticky=Sticky: info_sticky2=Noms els propietaris poden esborrar fitxers info_own=Propietat info_setuid=Setuid: info_setuid2=Executa com a usuari info_setgid=Setgid: info_setgid2=Els fitxers hereten el grup info_setgid3=Executa com a grup info_apply=Aplica els canvis a info_apply1=Aquest directori nomes info_apply2=Aquest directori i els seus fitxers info_apply3=Aquest directori i tots els seus subdirectoris info_efailed=No he pogut actualitzar $1: $2 info_read=Llegir info_write=Escriure info_list=Llistar info_exec=Executar info_sizeheader=Mida del directori info_bytes=Total bytes: info_files=Total fitxers: info_dirs=Total directoris: info_getsize=Obtingues la Mida info_esize=No he pogut obtenir les mides: $1 eacl_eacls=No he pogut llegir les ACLs: $1 eacl_acltype=Tipus d'ACL eacl_aclname=Aplica a eacl_aclperms=Permisos eacl_add=Afegeix ACL del tipus: eacl_remove=Esborra ACL eacl_efs=El sistema de fitxers $1 no suporta ACLs eacl_create=Crea ACL eacl_edit=Edita ACL eacl_user=Propietari del fitxer $1 eacl_group=Grup del fitxer $1 eacl_eowner=Hi falta l'usuari o el grup per aplicar eacl_efailed=No he pogut establir l'ACL per a $1: $2 eacl_emask=Hi pot haver com a molt una entrada de mscara ACL eacl_edefmask=Hi pot haver com a molt una entrada per defecte de mscara ACL eacl_title=ACL de $1 eacl_owner=Propietari del fitxer eacl_edefaults=Si un fitxer t alguna ACL per defecte, ha de tenir usuari i grup per defecte. acltype_user=Usuari acltype_group=Grup acltype_other=Altres acltype_mask=Mscara acltype_default_user=Usuari per defecte acltype_default_group=Grup per defecte acltype_default_other=Altres per defecte acltype_default_mask=Mscara per defecte delete_mtitle=Suprimeix fitxers mltiples delete_dtitle=Supressi de directori delete_ftitle=Supressi de fitxer delete_ddesc=Segur que vols esborrar de forma definitiva el directori $1 i tot el seu contingut? delete_fdesc=Segur que vols esborrar de forma definitiva el fitxer $1? delete_efailed=No he pogut esborrar $1: $2 delete_mdesc=Segur que vols suprimir de forma permanent aquests fitxers i directoris? mkdir_title=Nou Directori mkdir_dir=Nou directori: mkdir_eexists=$1 ja existeix mkdir_efailed=La creaci del director ha fallat: $1 mkdir_eaccess=No tens perms per crear '$1' link_title=Creaci d'enlla link_from=Enllaa: link_to=A: link_eexists=$1 ja existeix link_efrom=L'origen de l'enlla ha de ser un cam absolut link_efailed=L'enlla ha fallat: $1 link_efrom2=No tens perms per enllaar '$1' link_efollow=No tens perms per crear enllaos simblics rename_title=Renomenament de $1 rename_old=Nom vell: rename_new=Nom nou: rename_ok=Renomena rename_eexists=Ja existeix un fitxer anomenat $1 rename_eslash=El nom de fitxer nou $1 cont una / rename_efailed=El renomenament ha fallat: $1 iename_eold=No tens perms per renomenar '$1' rename_enew=No tens perms per renomenar a '$1' file_type0=Directori file_type1=Fitxer de text file_type2=Fitxer d'imatge file_type3=Fitxer binari file_type4=Fitxer file_type5=Enlla simblic file_type6=Fitxer de dispositiu file_type7=Pipe view_enormal=Noms es poden mostrar els fitxers normals view_enormal2=Noms es poden descarregar fitxers normals view_eaccess=No tens perms per accedir a $1 view_eopen=No he pogut obrir $1: $2 view_edir=Un arxiu noms es pot crear per a un directori view_ecmd=L'ordre $1 necessria per a crear un arxiu no est installada view_ecomp=No he pogut crear l'arxiu: $1 view_earchive=No tens perms per descarregar arxius view_earchmax=El directori seleccionat s ms gran que el mxim perms per arxivar ($1 bytes) paste_ecopy=Has de copiar o retallar abans d'enganxar paste_egone=El fitxer copiat $1 ja no existeix paste_eover=$1 no es pot reescriure paste_eself=No pots enganxar un fitxer sobre ell mateix paste_emfailed=El desplaament ha fallat: $1 paste_ecfailed=La copia ha fallat: $1 over_title=Fitxer Existent over_msg=El fitxer $1 ja existeix. Utilitza el camp inferior per introduir un nom de fitxer nou per al fitxer enganxat. over_new=Nom de fitxer nou: over_ok=B upload_efailed=No he pogut obrir el fitxer per pujar: $1 upload_title=Puja de Fitxer upload_file=Fitxer per pujar upload_dir=Puja'l al directori upload_ok=Puja upload_conv=Converteix salts de lnia DOS upload_efile=No s'ha seleccionat cap fitxer per pujar. upload_edir=El directori de destinaci no existeix. upload_eperm=No tens perms per crear $1 upload_ewrite=No he pogut escriure a $1: $2. upload_already=El fitxer $1 ja existeix. Segur que el vols reescriure? upload_elink=No puc fer la puja sobre un enlla simblic upload_zip=Descomprimeixo el fitxer ZIP o TAR? upload_yes=S, llavors suprimeix-lo find_eaccess=No tens perms per accedir $1 find_eexist=$1 no existeix a $2 find_edir=$1 no s un directori de $2 cancel=Cancella close=Tanca eopen=La descrrega ha fallat: $1 chmod_eaccess=No tens perms per accedir '$1' chmod_euser=$1: no existeix l'usuari chmod_egroup=$1: no existeix el grup chmod_elink=enlla simblic fallit: $1 chmod_echown=chown fallit: $1 chmod_echmod=chmod fallit: $1 chmod_efollow=No tens perms per editar els enllaos simblics copy_efrom=No tens perms per copiar de '$1' copy_eto=No tens perms per copiar a '$1' copy_elink=enlla simblic fallit: $1 delete_eaccess=No tens perms per esborrar '$1' list_eaccess=No tens perms per accedir a aquest directori list_edir=No he pogut llistar $1: $2 move_eto=No tens perms per desplaar a '$1' move_afrom=No tens perms per desplaar '$1' acl_user=Accedeix els fitxers del servidor com a usuari acl_user_def=Igual que l'usuari Webmin acl_umask=Umask per a fitxers nous acl_follow=Segueix sempre els enllaos simblics acl_fyes=Si el propietari coincideix acl_ro=Mode noms lectura acl_dirs=Permet l'accs nomes als directoris acl_nodirs=Denega l'accs als directoris acl_home=Inclou el directori arrel de l'usuari Webmin acl_log=Enregistra totes les modificacions de fitxers acl_goto=Obre el primer directori perms acl_max=Mida mxima de pujada acl_unlim=Illimitada acl_b=bytes acl_archive=Pot descarregar arxius de directoris acl_archmax=S, si sn ms petits de acl_buttons=Botons disponibles a la barra d'eines acl_button_save=Desa (descarrega el fitxer) acl_button_preview=Previsualitza (visualitza imatge escalada) acl_button_edit=Edita (edita el fitxer de text) acl_button_info=Info (edita els permisos i propietat del fitxer) acl_button_acl=ACL (edita l'ACL Posix) acl_button_attr=Atr (edita els atributs XFS) acl_button_ext=EXT (edita els atributs EXT) acl_button_search=Busca (busca fitxers) acl_button_delete=Suprimeix (suprimeix fitxers) acl_button_new=Nou (crea fitxer de text) acl_button_upload=Puja (puja un fitxer des del client) acl_button_mkdir=Nou (crea un directori) acl_button_makelink=Nou (crea un enlla simblic) acl_button_rename=Renomena (renomena el fitxer) acl_button_sharing=Comparteix (configura els fitxers compartits Samba i NFS) acl_button_mount=Munta (munta o desmunta el sistema de fitxers) acl_button_copy=Copia, Retalla i Enganxa acl_unarchive=Pot extreure fitxers d'un arxiu pujat acl_unarchive2=Intenta-ho sempre acl_unarchive1=$yes acl_unarchive0=$no acl_dostounix=Pot convertir els salts de lnia DOS acl_chroot=Directori chroot del gestor de fitxers complet acl_relto=(relatiu a qualsevol directori chroot) share_title=Xarxa share_samba=Windows share_nfs=NFS share_son=Compartici de fitxers Windows activada share_soff=Compartici de fitxers Windows desactivada share_writable=Gravable share_available=Actualment actiu share_sheader=Opcions del recurs share_only=Nomes share_guest=Accs hoste share_comment=Comentari share_nheader=Opcions d'exportaci NFS share_non=Compartici de fitxers NFS activada share_noff=Compartici de fitxers NFS desactivada share_desc=Descripci share_ro=Hosts nomes lectura share_rw=Hosts lectura/escriptura share_root=Hosts amb accs root share_none=Cap share_all=Tot share_listed=Llistats... share_host=Hosts share_opts=Opcions share_s0=No et refis de ning share_s1=Refia't de no-root share_s2=Refia't de tothom share_lro=Noms lectura share_lrw=Lectura-escriptura log_create_export=He creat l'exportaci NFS $1 log_modify_export=He modificat l'exportaci NFS $1 log_delete_export=He suprimit l'exportaci NFS $1 log_create_share=He creat el recurs Samba $1 log_modify_share=He modificat el recurs Samba $1 log_delete_share=He suprimit el recurs Samba $1 log_save=He desat el fitxer $1 log_chmod=He canviat els permisos del fitxer $1 log_mkdir=He creat el directori $1 log_upload=He pujat el fitxer $1 log_link=He creat l'enlla simblic $1 a $2 log_relink=He modificat l'enlla simblic $1 a $2 log_copy=He copiat el fitxer $1 a $2 log_move=He desplaat el fitxer $1 a $2 log_delete=He esborrat el fitxer $1 log_attr=Estableix atributs sobre el fitxer $1 log_acl=Estableix ACL sobre el fitxer $1 search_eaccess=No tens perms per buscar en aquest directori search_title=Busca Fitxers search_ok=Busca ara search_dir=Busca al directori search_match=els fitxers que coincideixin amb search_cont=que continguin el text search_user=Usuari propietari search_group=Grup propietari search_any=Qualsevol search_type=Tipus de fitxer search_types_=Qualsevol search_types_f=Fitxer search_types_d=Directori search_types_l=Enlla simblic search_types_p=Pipe search_size=Mida del fitxer search_more=Ms de search_less=Menys de search_xdev=Busca muntatges anteriors search_edir=Hi falta el directori de recerca o b no s correcte search_ematch=Hi falta una expressi regular search_euser=Hi falta un nom d'usuari search_egroup=Hi falta un nom de grup search_esize=La mida del fitxer ha de ser un enter search_crit=Criteris de Recerca search_list=Resultats de la Recerca facl_eaccess=No tens perms per establir ACLs per a aquest fitxer attr_eattrs=No he trobat els atributs: $1 attr_efs=El sistema de fitxers $1 no suporta atributs attr_add=Afegeix Atribut attr_name=Nom de l'Atribut attr_value=Valor de l'Atribut attr_efailed=No he pogut establir els atributs de $1: $2 attr_title=Atributs de Fitxer de $1 attr_create=Crea Atribut attr_edit=Edita Atribut attr_ename=Hi falta el nom de l'atribut ext_eattrs=No he pogut obtenir els atributs EXT: $1 ext_efs=El sistema de fitxers $1 no suporta atributs EXT ext_title=Atributs EXT de $1 ext_header=Atributs EXT de fitxer ext_efailed=No he pogut establir els atributs de $1: $2 eattr_A=No actualitzis els temps d'accs eattr_a=Noms pot afegir al fitxer eattr_c=Comprimeix les dades del disc eattr_d=No en facis cpia amb dump eattr_i=No en permetis la modificaci eattr_s=Posa els blocs a zero en suprimir eattr_S=Fes sempre un sync desprs de gravar eattr_u=Desa el contingut per a desfer mount_eaccess=No tens perms per muntar sistemes de fitxers mount_efstab=No hi ha cap sistema de fitxers en aquest punt de muntatge mount_epoint=$1 no s un punt de muntatge mount_rusure1=Segur que vols muntar $1 de $2 ? mount_rusure2=Segur que vols desmuntar $1 de $2 ? mount_err1=No he pogut muntar $1: $2 mount_err2=No he pogut desmuntar $1: $2 mount_title1=Munta el sistema de fitxers mount_title2=Desmunta el sistema de fitxers zip_err=No puc extreure el fitxer: $1 zip_ecmd=Hi falta l'ordre $1 zip_eunzip=La descompressi ZIP ha fallat: $1 zip_ename=No sembla que sigui cap fitxer zip, tar ni tar.gz zip_euntar=El desarxivat TAR ha fallat: $1 zip_euntar2=La descompressi i desarxivat TAR ha fallat: $1 ddir_title=Descrrega de Directori ddir_rusure=Per descarregar el contingut de $1 com un fitxer d'arxiu, fes clic sobre una dels botons de tipus d'arxiu de sota. ddir_zip=ZIP ddir_tgz=TAR.GZ ddir_tar=TAR ebutton=Aquesta caracterstica no est disponible preview_etype=No he pogut determinar el tipus de fitxer per a $1 preview_etype2=$1 no s cap format d'imatge suportat preview_ecmd=L'ordre $1 necessria per escalar la imatge no est installada preview_eimage=Noms es poden previsualitzar imatges preview_title=Vista Prvia de $1 preview_bad=No he pogut carregar la imatge a previsualitzar preview_egd=No he pogut carregar la imatge amb GD html_efailed=No he pogut obrir l'editor HTML: $1 html_title=Edici de Fitxer HTML html_save=Desa i Tanca html_err=No he pogut desar el fitxer HTML history_title=Historial de Camins history_ok=Vs A history_button=Historial file/lang/tr.bak0100644000567100000120000001317707364725102013522 0ustar jcameronwheelindex_title=Dosya Yneticisi index_nojava=Bu modl java gerektirir, fakat sizin taraycnz java'yi desteklemiyor top_open=A top_view=Gster top_edit=Deitir top_refresh=Yenile top_info=Bilgi top_delete=Sil top_new=Yeni top_upload=Ykleme(Upload) top_rename=Yeniden Adlandr top_copy=Kopyala top_cut=Kes top_paste=Yaptr top_share=Paylatr right_name=Ad right_size=Boyut right_user=Kullanc right_group=Grup right_date=Tarih edit_enormal=Sadece normal dosyalar deitirilebilir edit_title=$1 deitiriliyor edit_title2=Dosya oluturuluyor edit_filename=Dosya smi: edit_eover=$1 zerine yazlamaz edit_esave=Dosyann kaydedilmesinde hata olutu : $1 edit_eaccess='$1' kaydedilmesine izininiz yoktur info_file=Dosya info_path=Yol: info_type=Tip: info_size=Boyut: info_mod=Deitirildi: info_link=Link to:##### info_perms=Haklar info_user=Kullanc: info_group=Grup: info_other=Dierleri: info_sticky=Sticky: info_sticky2=Dosyalar sadece sahipleri silebilir info_own=Sahiplik info_setuid=Uid'yi belirt: info_setuid2=Kullanc Olarak altr info_setgid=Gid'yi Olutur: info_setgid2=Dosyalar grubun olsun info_setgid3=Grup olarak altr info_apply=Deiiklikleri uygula ... info_apply1=Sadece bu dizine info_apply2=Bu dizin ve dosyalarna info_apply3=Bu dizin ve alt dizinlerine info_efailed=Gncellemede hata olutu $1 : $2 info_read=Oku info_write=Yaz info_list=Listele info_exec=altr delete_dtitle=Dizin Sil delete_ftitle=Dosya Sil delete_ddesc=$1 dizinini ve iindekileri silmek istediinizden eminmisiniz? delete_fdesc=$1 dizinini silmek istediinizden eminmisiniz? delete_efailed=Silme ileminde hata olutu $1 : $2 mkdir_title=Yeni Dizin mkdir_dir=Yeni dizin: mkdir_eexists=$1 dizini mevcut mkdir_efailed=Dizin oluturmada hata olutu : $1 mkdir_eaccess='$1' dizini oluturmaya hakknz yok link_title=Link Olutur link_from=Link buradan: link_to=Link buraya: link_eexists=$1 her zaman mevcut link_efailed=Link oluturulurken hata olutu : $1 link_efrom='$1' den link oluturmaya hakknz yoktur link_efollow=Sembolik linkler oluturmaya hakknz yoktur rename_title=Yeniden Adlandr $1 rename_old=Eski smi: rename_new=Yeni smi: rename_ok=Yeniden Adlandr rename_eexists=$1 dosyas her zaman mevcut rename_efailed=Yeniden adlandrmada hata olutu : $1 rename_eold='$1'i yeniden adlandrmaya hakknz yoktur rename_enew='$1' olarak yeniden adlandyrmaya hakkynyz yoktur file_type0=Dizin file_type1=Yaz Dosyas file_type2=Resim Dosyas file_type3=kili Dosya file_type4=Dosya file_type5=Sembolik Link file_type6=Ara Dosyas file_type7=Boru view_enormal=Sadece normal dosyalar grntlenebilir view_eaccess=$1'e eriime hakknz yoktur view_eopen=Ama ileminde hata olutu $1 : $2 paste_ecopy=Yaptrmadan nce kopyalamal veya kesmelisiniz paste_egone=Kopyalanan dosya $1 artk yok paste_eover=$1 zerine yazlamaz paste_eself=Dosyay kendi zerine yaptramazsnz paste_emfailed=Tamada hata olutu : $1 paste_ecfailed=Kopyalamada hata olutu : $1 over_title=Dosya Mevcut over_msg=$1 dosyas her zaman mevcut. Yaptrlan dosyaya yeni bir isim girmek iin bo formu kullannz. over_new=Yeni dosya ismi over_ok=Tamam upload_efailed=Dosyann yklenmesinde hata olutu : $1 upload_title=Dosyay Ykle upload_file=Yklecek Dosya upload_dir=Dizine Ykleme upload_ok=Ykle upload_conv=DOS satrlar evirilsin mi? upload_efile=Yklenecek dosya seilmedi. upload_edir=Ykleme dizini mevcut deil upload_eperm=$1 oluturmanza izin verilmedi upload_ewrite=$1'i yazmada hata olutu : $2. find_eaccess=$1'e eriim izininiz yoktur find_eexist=$1, $2 iinde mevcut deil find_edir=$1, $2'de bir dizin deil cancel=ptal chmod_eaccess='$1'e eriim izininiz yoktur chmod_euser=$1 : Kullanc yok chmod_egroup=$1 : Grup yok chmod_elink=Sembolik linkte hata olutu : $1 chmod_echown=chown'da hata olutu : $1 chmod_echmod=chmod'da hata olustu : $1 copy_efrom='$1'den kopyalamanza izin verilmemitir copy_eto='$1'e kopyalamanza izin verilmemitir copy_elink=Sembolik linkte hata olutu : $1 delete_eaccess='$1'i silmede hata olutu list_eaccess=Bu dizine giri izininiz yoktur move_eto='$1'e tamaya hakknz yoktur move_afrom='$1'i tamaya hakkynyz yoktur acl_user=Sunucuda kullanc olarak dosyalara ula acl_umask=Yeni dosyalar iin umask acl_follow=Sembolik linkleri her zaman takip et. acl_dirs=Sadece dizinlere girilere izin ver. share_title=Paylatrma share_samba=Windows share_nfs=NFS share_son=Windows dosya paylam ak share_soff=Windows dosya paylam kapal share_writable=Yazlabilir? share_available=Aktif mi? share_sheader=Paylam seenekleri share_only=Sadece share_guest=Ziyareti girileri? share_comment=Aklama share_nheader=NFS sunum seenekleri share_non=NFS dosya paylam ak share_noff=NFS dosya paylam kapal share_desc=Aklama share_ro=Sadece okuma izinli makineler share_rw=Okuma-yazma izinli makineler share_root=Root girili makineler share_none=Hibiri share_all=Hepsi share_listed=Listeli... share_host=Makineler share_opts=Seenekler share_s0=Hikimseye gvenme share_s1=Root dndakilere gven share_s2=Herkese gven share_lro=Sadece okunur share_lrw=Okunur-yazlr log_create_export=NFS sunumu $1 oluturuldu log_modify_export=NFS sunumu $1 deitirildi log_delete_export=NFS sunumu $1 silindi log_create_share=Samba paylam $1 oluturuldu log_modify_share=Samba paylam $1 deitirildi log_delete_share=Samba paylam $1 silindi log_save=$1 dosyas kaydedildi log_chmod=$1 dosyasnn haklar deitirildi log_mkdir=$1 dizini oluturuldu log_upload=$1 dosyas yklendi log_link=$2'ye sembolik link $1 oluturuldu log_relink=$2'ye sembolik link $1 deitirildi log_copy=$1 dosyas $2'ye kopyaland log_move=$1 dosyas $2'ye tand log_delete=$1 dosyas silindi file/lang/pt_BR0100644000567100000120000002557510360570630013346 0ustar jcameronwheelacl_b=bytes acl_button_copy=Copiar, Cortar e Colar acl_button_delete=Deletar (deletar arquivos) acl_button_edit=Editar (editar arquivo texto) acl_button_ext=EXT (editar atributos EXT) acl_button_info=Informações (editar permissões e posse) acl_button_makelink=Novo (criar link simbólico) acl_button_mkdir=Novo (criar diretório) acl_button_mount=Montar (montar ou demosntar dados) acl_button_new=Novo (criar arqiovo texto) acl_button_rename=Renomear (renomear arquivo) acl_button_save=Salvar (baixar arquivo) acl_button_search=Procurar (procurar arquivo) acl_button_upload=Upload (enviar arquivo do cliente) acl_dirs=Permite acesso somente aos diretórios acl_follow=Seguir links simbólicos sempre? acl_goto=Abrir primeiro o diretório permitido? acl_home=Incluir diretório home do usuário Webmin acl_log=Logar todas as modificações nos arquivos? acl_ro=Modo somente leitura? acl_umask=Umask para novos arquivos acl_user=Acessar arquivos no servidor como usuário acl_user_def=O mesmo que no login do Webmin acltype_default_group=Grupo Padrão acltype_default_mask=Máscara Padrão acltype_default_other=Outros Padrão acltype_default_user=Usuário Padrão acltype_group=Grupo acltype_mask=Máscara acltype_other=Outros acltype_user=Usuário attr_add=Adicionar atributo attr_create=Adicionar atributo attr_eattrs=Falha ao receber atributos de : $1 attr_edit=Editar atributo attr_efailed=Falha ao setar atributos para $1 : $2 attr_efs=O sistema de arquivos $1 não suporta atributos attr_ename=Faltando o nome do atributo attr_name=Nome do atributo attr_title=Atributos do arquivo para $1 attr_value=Valor do atributo cancel=Cancelar chmod_eaccess=Você não está autorizado a acessar '$1' chmod_echmod=falha no chmod : $1 chmod_echown=falha no chown : $1 chmod_efollow=Você não está autorizado a editar links simbólicos chmod_egroup=$1 : grupo inválido chmod_elink=falha no link simbólico : $1 chmod_euser=$1 : usuário inválido copy_efrom=Você não está autorizado a copiar de '$1' copy_elink=falha no link simbólico : $1 copy_eto=Você não esta autorizado a copiar para '$1' delete_ddesc=Você tem certeza que deseja apagar permanentemente o diretório $1 e todo o seu conteúdo? delete_dtitle=Apagar diretório delete_eaccess=Você não esta autorizado a apagar '$1' delete_efailed=Falha ao apagar $1 : $2 delete_fdesc=Você tem certeza que deseja apagar permanentemente o arquivo $1 ? delete_ftitle=Apagar arquivo delete_mdesc=Você tem certeza que deseja apagar permanentemente estes arquivos e diretórios? : delete_mtitle=Apagar múltiplos arquivos eacl_aclname=Aplicar a eacl_aclperms=Permissões eacl_acltype=Tipo de ACL eacl_add=Adicionar ACL do tipo : eacl_create=Criar ACL eacl_eacls=Falha ao ler ACLs : $1 eacl_edefaults=Se o arquivo contém qualquer ACL padrão, ele precisa ter usuário, grupo e outras ACLs padrão. eacl_edefmask=Pode existir uma entrada a mais padrão para a máscara ACL eacl_edit=Editar ACL eacl_efailed=Falha ao setar ACL para $1 : $2 eacl_efs=O sistema de arquivos $1 não suporta ACLs eacl_emask=Pode existir uma entrada a mais para a máscara ACL eacl_eowner=Faltando o usuário ou grupo para aplicar a eacl_group=Grupo do arquivo $1 eacl_owner=Dono do arquivo eacl_remove=Remover ACL eacl_title=ACL para $1 eacl_user=Dono do arquivo $1 eattr_A=Nâo atualize os tempos de acesso eattr_S=Sempre sincronizar após escrever eattr_a=Pode somente adicionar ao fim do arquivo eattr_c=Comprimir dados no disco eattr_d=Não fazer backup com o dump eattr_i=Não permitir modificação eattr_s=Zerar blocos quando apagar eattr_u=Salvar conteúdo para recuperar edit_eaccess=Você não está autorizado a salvar '$1' edit_enormal=Somente arquivos comuns podem ser editados edit_eover=$1 não pode ser sobrescrito edit_esave=Falha ao salvar o arquivo : $1 edit_filename=Nome do arquivo: edit_title=Editando $1 edit_title2=Criando o arquivo ext_eattrs=Falha ao receber atributos EXT : $1 ext_efailed=Falha ao fixar atributos para $1 : $2 ext_efs=O sistema de arquivos $1 não suporta atributos EXT ext_header=Atributos EXT do arquivo ext_title=Atributos EXT para $1 facl_eaccess=Você não tem permissão para alterar ACLs para este arquivo file_type0=Directório file_type1=Arquivo texto file_type2=Arquivo de Imagem file_type3=Arquivo Binário file_type4=Arquivo file_type5=Link simbólico file_type6=Arquivo de dispositivo file_type7=Pipe find_eaccess=Você não tem permissão para acessar $1 find_edir=$1 não é um diretório em $2 find_eexist=$1 não existe em $2 index_eremote=Não há nenhum usuário Unix que corresponda ao login $1 do Webmin. index_nojava=Este módulo requer java para funcionar, porém o seu navegador não suporta java index_title=Gerenciador de Arquivos info_apply=Aplicar mudanças a info_apply1=Somente a este diretório info_apply2=Este diretório e seus arquivos info_apply3=Este diretório e todos os seus subdiretórios info_efailed=Falha ao atualizar $1 : $2 info_exec=Executar info_file=Arquivo info_group=Grupo: info_link=Link para: info_list=Listar info_mod=Modificado: info_octal=Octal: info_other=Outros: info_own=Dono info_path=Caminho: info_perms=Permissões info_read=Ler info_setgid=Setar gid: info_setgid2=Grupo inerente dos arquivos info_setgid3=Executar como grupo info_setuid=Setar uid: info_setuid2=Executar como usuário info_size=Tamanho: info_sticky=Sticky: info_sticky2=Somente os donos podem apagar os arquivos info_type=Tipo: info_user=Usuário: info_write=Escrever link_eexists=$1 já existe link_efailed=Falha ao criar link : $1 link_efollow=Você não está autorizado a criar links simbólicos link_efrom=Você não está autorizado a linkar de '$1' link_from=Link de: link_title=Criar Link link_to=Link para: list_eaccess=Você não esta autorizado a acessar este diretorio list_edir=Falha ao listar $1 : $2 log_acl=Setar ACL no arquivo $1 log_attr=Foram setados os atributos no arquivo $1 log_chmod=Permissões alteradas no arquivo $1 log_copy=Copiado o arquivo $1 para $2 log_create_export=Criada exportação NFS $1 log_create_share=Criado compartilhamento Samba $1 log_delete=Deletado o arquivo $1 log_delete_export=Deletada exportação NFS $1 log_delete_share=Deletado compartilhamento Samba $1 log_link=Criado o link simbólico $1 para $2 log_mkdir=Criado o diretório $1 log_modify_export=Modificada exportação NFS $1 log_modify_share=Modificado compartilhamento Samba $1 log_move=Movido o arquivo $1 para $2 log_relink=Modificado o link simbólico $1 para $2 log_save=Foi salvo o arquivo $1 log_upload=Foi enviado o arquivo $1 mkdir_dir=Novo diretório: mkdir_eaccess=Você não está autorizado a criar '$1' mkdir_eexists=$1 já existe mkdir_efailed=Falha ao criar diretório : $1 mkdir_title=Novo Diretório move_afrom=Você não está autorizado a mover '$1' move_eto=Você não está autorizado a mover para '$1' over_msg=O arquivo $1 já existe. Use o campo abaixo para digitar o nome do arquivo a ser colado. over_new=Novo nome do arquivo: over_ok=Ok over_title=Arquivo já existe paste_ecfailed=Falha ao copiar : $1 paste_ecopy=Você precisa recortar ou copiar antes de colar paste_egone=Arquivo copiado $1 não existe mais paste_emfailed=Falha ao mover : $1 paste_eover=$1 não pode ser sobrescrito paste_eself=Você não pode colar um arquivo sobre ele mesmo rename_eexists=Um arquivo chamado $1 já existe rename_efailed=Falha ao renomear : $1 rename_enew=Você não está autorizado a renomear para '$1' rename_eold=Você não está autorizado a renomear '$1' rename_new=Nome novo: rename_ok=Renomear rename_old=Nome antigo: rename_title=Renomear $1 right_date=Data right_group=Grupo right_name=Nome right_size=Tamanho right_user=Usuário search_any=Qualquer search_crit=Critério de pesquisa search_dir=Procurar no diretório search_eaccess=Você não tem autorização para procurar neste diretório search_edir=Diretório de procura inválido ou faltando search_egroup=Faltando nome do grupo search_ematch=Falatando coincidir regexp search_esize=O tamanho do arquivo precisa ser um inteiro search_euser=Faltando nome de usuário search_group=Pertençam ao grupo search_less=Menos do que search_list=Resultados da pesquisa search_match=Por arquivos que coincidam com search_more=Mais do que search_ok=Procurar agora search_size=Tamanho do arquivo search_title=Procurar arquivos search_type=Tipo de arquivo search_types_=Qualquer search_types_d=Diretório search_types_f=Arquivo search_types_l=Link simbólico search_types_p=Pipe nomeado search_user=Pertençam ao usuário search_xdev=Procurar montagens anteriores? share_all=Todos share_available=Ativo atualmente? share_comment=Comentário share_desc=Descriçao share_guest=Acesso a convidados? share_host=Hosts share_listed=Listados.. share_lro=Somente leitura share_lrw=Leitura e escrita share_nfs=NFS share_nheader=Opções de exportação NFS share_noff=Compartilhamento de arquivos NFS desabilitado share_non=Compartilhamento de arquivos NFS abilitado share_none=Nenhum share_only=Somente share_opts=Opções share_ro=Hosts somente leitura share_root=Hosts com acesso root share_rw=Hosts leitura e escrita share_s0=Não confiar em ninguém share_s1=Confiar em não root share_s2=Confiar em todos share_samba=Windows share_sheader=Opções de compartilhamento share_soff=Compartilhamento de arquivos Windows desabilitado share_son=Compartilhamento de arquivos Windows abilitado share_title=Compartilhamento share_writable=Permitir escrita? switch_euser=O usuário Unix não existe! top_attr=Atributos top_copy=Copiar top_cut=Recortar top_delete=Apagar top_down=Salvar top_eacl=ACL top_edit=Editar top_ext=EXT top_info=Info top_new=Novo top_paste=Colar top_refresh=Atualizar top_rename=Renomear top_ret=Índice top_search=Procurar top_share=Compartilhar top_upload=Upload upload_conv=Converter novas linhas do DOS? upload_dir=Upload para qual diretório upload_edir=Diretório de upload não existe. upload_efailed=Falha ao abrir upload : $1 upload_efile=Não foi selecionado nenhum arquivo para upload. upload_eperm=Você não está autorizado a criar $1 upload_ewrite=Falha a escrever para $1 : $2. upload_file=Arquivo para upload upload_ok=Upload upload_title=Arquivo para upload view_eaccess=Você não está autorizado a acessar $1 view_enormal=Somente arquivos comuns podem ser vizualizados view_enormal2=Somente pode ser feito download de arquivos comuns view_eopen=Falha ao abrir $1 : $2 file/lang/sk0100644000567100000120000002213307606524032012744 0ustar jcameronwheelindex_title=Sprvca Systmu Sborov index_eremote=Žiadny Unixov užvateľ nezodpoved hodnotm z Webmin prihlsečnia $1. switch_euser=Tento Unixov užvateľ nejestvuje! top_ret=Index top_down=Ulož top_edit=Otvor pre zmeny top_refresh=Obnov top_info=Info top_eacl=ACL top_attr=Atribty top_ext=EXT top_delete=Vymaž top_new=Nov(/) top_upload=Nalož top_rename=Premenuj top_copy=Kpia top_cut=Vyber top_paste=Vlož top_share=Zdieľanie top_search=Njdi right_name=Meno right_size=Veľkosť right_user=Užvateľ right_group=Skupina right_date=Dtum edit_enormal=Len normlne sbory mžu byť menen edit_title=Zmeny na $1 edit_title2=Vytvnie sboru edit_filename=Meno sboru: edit_eover=$1 nemže byť prepsan edit_esave=NEmoohol uložiť : $1 edit_eaccess=Nemš povolenie na ukladanie '$1' info_file=Sbor info_path=Cesta: info_type=Typ: info_size=Veľkosť: info_mod=Zmenen: info_link=Vzba na: info_perms=Povolenia info_user=Užvateľ: info_group=Skupina: info_other=In: info_sticky=Lepčkav: info_sticky2=Len majitelia mžu vymazať info_own=Majetok info_setuid=Setuid: info_setuid2=Vykonaj ako užvateľ info_setgid=Setgid: info_setgid2=Sbory dedia skupinu info_setgid3=Vykonaj ako skupina info_apply=AKtivuj zmeny info_apply1=Len tento adresr info_apply2=Tento adresr a jeho sbory info_apply3=Tento adresr a všetky jeho priraden adresre info_efailed=Porucha pri zmene $1 : $2 info_read=Čtaj info_write=Pš info_list=Zoznam info_exec=Exec eacl_eacls=Načtavanie ACL sborov nebolo spešn : $1 eacl_acltype=Typ ACL eacl_aclname=Použi na eacl_aclperms=Povolenia eacl_add=Pridaj typ ACL : eacl_remove=Odnm ACL eacl_efs=Sborov systm $1 plne nepodporuje ACLs eacl_create=Vytvor ACL eacl_edit=Edituj ACL eacl_user=Majiteľ sboru $1 eacl_group=Skupina sboru $1 eacl_eowner=Užvateľ alebo skupina sboru neexistuje eacl_efailed=Nemohol som nastaviť ACL pre $1 : $2 eacl_emask=Maximlne mže byť použit jedna maskovan ACL eacl_edefmask=Maximlne mže byť použit jedna zkladn maskovan ACL eacl_title=ACL pre $1 eacl_owner=Majiteľ sboru eacl_edefaults=Ak sbor m zkladn ACL, mus tiež mať zkladnho majiteľa, skupinu a ostatn ACL. acltype_user=Užvateľ acltype_group=Skupina acltype_other=In acltype_mask=Maska acltype_default_user=Zkladn užvateľ acltype_default_group=Zkladn skupina acltype_default_other=Zkladn In acltype_default_mask=Zkladn Maska delete_mtitle=Vymaž viacero sborov delete_dtitle=Vymaž adresr delete_ftitle=Vymaž sbor delete_ddesc=Si si ist že chceš permanente vymazať adresr $1 a všetok jeho obsah? delete_fdesc=Si si ist že chceš permanente vymazať sbor $1 ? delete_mdesc=Si si ist že chceš permanente vymazať adresre a sbory? : delete_efailed=Nemožn vymazať $1 : $2 mkdir_title=Novo-vytvoren Adresr mkdir_dir=Nov Adresr: mkdir_eexists=$1 už jestvuje mkdir_efailed=Vytvorenie Adresru nebolo spešn : $1 mkdir_eaccess=Nemš povolenie na vytvorenie '$1' link_title=Vytvor Spojenie link_from=Spojenie z: link_to=Spojenie na: link_eexists=$1 už jestvuje link_efailed=Spojenie nebolo spešn : $1 link_efrom=Nemš dovolen vytvrať spojenia na '$1' link_efollow=Nemš dostatočn povolenie na vytvranie symbolickch spojen rename_title=Premenuj $1 rename_old=Pvodn meno: rename_new=Nov meno: rename_ok=Premenuj rename_eexists=Sbor s menom $1 už jestvuje rename_efailed=Premenovvanie nebolo spešn : $1 rename_eold=Nemš dovolen premenovvať '$1' rename_enew=Nemš dovolen premenovvať na '$1' file_type0=Adresr file_type1=Textov sbor file_type2=Obrzok file_type3=Binarny sbor file_type4=Sbor file_type5=Symbolick spojenie file_type6=Sbor ovldača file_type7=Rrka view_enormal=Len normlne sbory mžu byť prezeran view_enormal2=Len normlne sbory mžu byť sťahovan view_eaccess=Nemš povolen prstup k $1 view_eopen=Otvorenie nebolo spešn $1 : $2 paste_ecopy=Musš najprv vybrať alebo skoprovať ak chceš vkladať paste_egone=Sbor koprovan $1 už neexiststuje paste_eover=$1 nemže byť prepsan paste_eself=Nemžeš vkladať sbor do adresra so sborom s rovnakm menom paste_emfailed=Premiestnenie nebolo spešn : $1 paste_ecfailed=Vytvranie kpie nebolo spešn : $1 over_title=Sbor už Existstuje over_msg=Sbor $1 už existstuje. Použi polčko nižšie na premenovanie vkladanho sboru. over_new=Nov meno sboru: over_ok=Ok upload_efailed=Naložen sbor : $1 sa nepodarilo otvoriť upload_title=Nalož sbor upload_file=Sbor pre nakladanie upload_dir=Nalož do adresra upload_ok=Nalož upload_conv=Kovertuj DOS-ov symboly pre nov riadok? upload_efile=Nebol vybrat žiaden sbor na nakladanie. upload_edir=Adresr na nakladanie neexistuje. upload_eperm=You are not allowed to create $1 upload_ewrite=Failed to write to $1 : $2. find_eaccess=You are not allowed to access $1 find_eexist=$1 does not exist in $2 find_edir=$1 is not a directory in $2 cancel=Zruš chmod_eaccess=You are not allowed to access '$1' chmod_euser=$1 : no such user chmod_egroup=$1 : no such group chmod_elink=symlink failed : $1 chmod_echown=chown failed : $1 chmod_echmod=chmod failed : $1 chmod_efollow=You are not allowed to edit symbolic links copy_efrom=You are not allowed to copy from '$1' copy_eto=You are not allowed to copy to '$1' copy_elink=symlink failed : $1 delete_eaccess=You are not allowed to delete '$1' list_eaccess=You are not allowed to access this directory list_edir=Failed to list $1 : $2 move_eto=You are not allowed to move to '$1' move_afrom=You are not allowed to move '$1' acl_user=Access files on server as user acl_user_def=Same as Webmin login acl_umask=Umask for new files acl_follow=Always follow symlinks? acl_ro=Read-only mode? acl_dirs=Only allow access to directories acl_home=Include home directory of Webmin user acl_log=Log all file modifications? acl_goto=Open first allowed directory? share_title=Sharing share_samba=Windows share_nfs=NFS share_son=Windows file sharing enabled share_soff=Windows file sharing disabled share_writable=Writable? share_available=Currently active? share_sheader=Sharing options share_only=Only share_guest=Guest access? share_comment=Comment share_nheader=NFS export options share_non=NFS file sharing enabled share_noff=NFS file sharing disabled share_desc=Description share_ro=Read-only hosts share_rw=Read-write hosts share_root=Root access hosts share_none=None share_all=All share_listed=Listed.. share_host=Hosts share_opts=Options share_s0=Trust nobody share_s1=Trust non-root share_s2=Trust everybody share_lro=Read-only share_lrw=Read-write log_create_export=Created NFS export $1 log_modify_export=Modified NFS export $1 log_delete_export=Deleted NFS export $1 log_create_share=Created Samba share $1 log_modify_share=Modified Samba share $1 log_delete_share=Deleted Samba share $1 log_save=Saved file $1 log_chmod=Changed permissions on file $1 log_mkdir=Created directory $1 log_upload=Uploaded file $1 log_link=Created symbolic link $1 to $2 log_relink=Modified symbolic link $1 to $2 log_copy=Copied file $1 to $2 log_move=Moved file $1 to $2 log_delete=Deleted file $1 log_attr=Set attributes on file $1 log_acl=Set ACL on file $1 search_eaccess=You are not allowed to search this directory search_title=Find files search_ok=Search Now search_dir=Search directory search_match=For files matching search_user=Owned by user search_group=Owned by group search_any=Any search_type=File type search_types_=Any search_types_f=File search_types_d=Directory search_types_l=Symbolic link search_types_p=Named pipe search_size=File size search_more=More than search_less=Less than search_xdev=Search past mounts? search_edir=Missing or invalid search directory search_ematch=Missing matching regexp search_euser=Missing username search_egroup=Missing group name search_esize=File size must be an integer search_crit=Search criteria search_list=Search results facl_eaccess=You are not allowed to set ACLs for this file attr_eattrs=Failed to get attributes : $1 attr_efs=The filesystem $1 does not support attributes attr_add=Add Attribute attr_name=Attribute Name attr_value=Attribute Value attr_efailed=Failed to set attributes for $1 : $2 attr_title=File Attributes for $1 attr_create=Add Attribute attr_edit=Edit Attribute attr_ename=Missing attribute name ext_eattrs=Failed to get EXT attributes : $1 ext_efs=The filesystem $1 does not support EXT attributes ext_title=EXT attributes for $1 ext_header=EXT file attributes ext_efailed=Failed to set attributes for $1 : $2 eattr_A=Do not update access times eattr_a=Can only append to file eattr_c=Compress data on disk eattr_d=Do not backup with dump eattr_i=Do not allow modification eattr_s=Zero blocks when deleting eattr_S=Always sync after writing eattr_u=Save contents for undeletion file/lang/ru_SU0100644000567100000120000002255610067401527013373 0ustar jcameronwheelindex_title= index_nojava= java, java index_eremote= Unix Webmin $1. switch_euser= Unix ! top_ret= top_down= top_edit= top_refresh= top_info= top_eacl=ACL top_attr= top_ext=EXT top_delete= top_new= top_upload= top_rename= top_copy= top_cut= top_paste= top_share= top_search= right_name= right_size= right_user= right_group= right_date= edit_enormal= edit_title= $1 edit_title2= edit_filename= : edit_eover=$1 edit_esave= : $1 edit_eaccess= '$1' info_file= info_path=: info_type=: info_size=: info_mod=: info_link= : info_perms= info_user=: info_group=: info_other=: info_octal= : info_sticky= sticky: info_sticky2= info_own= info_setuid= setuid: info_setuid2= info_setgid= setgid: info_setgid2= info_setgid3= info_apply= info_apply1= info_apply2= info_apply3= info_efailed= $1 : $2 info_read= info_write= info_list= info_exec= eacl_eacls= ACL : $1 eacl_acltype= ACL eacl_aclname= eacl_aclperms= eacl_add= ACL : eacl_remove= ACL eacl_efs= $1 ACL eacl_create= ACL eacl_edit= ACL eacl_user= $1 eacl_group= $1 eacl_eowner= eacl_efailed= ACL $1 : $2 eacl_emask=There can be at most one mask ACL entry eacl_edefmask=There can be at most one default mask ACL entry eacl_title=ACL $1 eacl_owner= eacl_edefaults=If a file has any default ACL, it must have default user, group and other ACLs. acltype_user= acltype_group= acltype_other= acltype_mask= acltype_default_user= acltype_default_group= acltype_default_other= acltype_default_mask= delete_mtitle= delete_dtitle= delete_ftitle= delete_ddesc= $1 ? delete_fdesc= $1 ? delete_mdesc= ? : delete_efailed= $1 : $2 mkdir_title= mkdir_dir= : mkdir_eexists=$1 mkdir_efailed= : $1 mkdir_eaccess= '$1' link_title= link_from=: link_to= : link_eexists=$1 link_efailed= : $1 link_efrom= '$1' link_efollow= rename_title= $1 rename_old= : rename_new= : rename_ok= rename_eexists= $1 rename_efailed= : $1 rename_eold= '$1' rename_enew= '$1' file_type0= file_type1= file_type2= file_type3= file_type4= file_type5= file_type6= file_type7= view_enormal= view_enormal2= view_eaccess= $1 view_eopen= $1 : $2 paste_ecopy= paste_egone= $1 paste_eover=$1 paste_eself= paste_emfailed= : $1 paste_ecfailed= : $1 over_title= over_msg= $1 . . over_new= : over_ok= upload_efailed= : $1 upload_title= upload_file= upload_dir= upload_ok= upload_conv= DOS? upload_efile= . upload_edir= . upload_eperm= $1 upload_ewrite= $1 : $2. find_eaccess= $1 find_eexist=$1 $2 find_edir=$1 $2 cancel= chmod_eaccess= '$1' chmod_euser=$1 : chmod_egroup=$1 : chmod_elink= symlink : $1 chmod_echown= chown : $1 chmod_echmod= chmod : $1 chmod_efollow= copy_efrom= '$1' copy_eto= '$1' copy_elink= symlink : $1 delete_eaccess= '$1' list_eaccess= list_edir= $1 : $2 move_eto= '$1' move_afrom= '$1' acl_user= acl_user_def= Webmin acl_umask=Umask acl_follow= ? acl_ro= ? acl_dirs= acl_home= Webmin acl_log= ? acl_goto= ? share_title= share_samba=Windows share_nfs=NFS share_son= Windows share_soff= Windows share_writable= ? share_available= ? share_sheader= share_only= share_guest= (Guest)? share_comment= share_nheader= NFS share_non= NFS share_noff= NFS share_desc= share_ro=, share_rw=, share_root=, root share_none= share_all= share_listed=.. share_host= share_opts= share_s0= nobody share_s1= -root share_s2= share_lro= share_lrw=/ log_create_export= NFS $1 log_modify_export= NFS $1 log_delete_export= NFS $1 log_create_share= Samba $1 log_modify_share= Samba $1 log_delete_share= Samba $1 log_save= $1 log_chmod= $1 log_mkdir= $1 log_upload= $1 log_link= $1 $2 log_relink= $1 $2 log_copy= $1 $2 log_move= $1 $2 log_delete= $1 log_attr= $1 log_acl= $1 ACL search_eaccess= search_title= search_ok= search_dir= search_match= search_user= search_group= search_any= search_type= search_types_= search_types_f= search_types_d= search_types_l= search_types_p= search_size= search_more= search_less= search_xdev= ? search_edir= search_ematch= search_euser= search_egroup= search_esize= search_crit= search_list= facl_eaccess= ACL attr_eattrs= : $1 attr_efs= $1 attr_add= attr_name= attr_value= attr_efailed= $1 : $2 attr_title= $1 attr_create= attr_edit= attr_ename= ext_eattrs= EXT : $1 ext_efs= $1 EXT ext_title= EXT $1 ext_header= EXT ext_efailed= EXT $1 : $2 eattr_A= eattr_a= eattr_c= eattr_d= dump eattr_i= eattr_s= eattr_S= eattr_u= file/lang/fa0100664000567100000120000004562710421633117012726 0ustar jcameronwheel index_title=مدير پرونده index_nojava=اين پيمانه جهت اجرا شدن نياز به جاوا دارد اما مرورگر شمااز جاوا پشتيباني نمي‌کند. index_eremote=کاربر يونيکسي که با $1 جهت ورود به وب‌مين مطابقت کند وجود ندارد. switch_euser=کاربر يونيکس وجود ندارد! top_ret=شاخص top_down=ذخيره top_edit=ويرايش top_refresh=بازآوري top_info=اطلاعات top_eacl=ACL top_attr=Attrs top_ext=EXT top_delete=حذف top_new=جديد top_upload=بارگيري top_rename=تغيير نام top_copy=رونوشت top_cut=بريدن top_paste=چسباندن top_share=اشتراک گذاري top_mount=سوار کردن top_search=يافتن top_config=پيکربندي right_name=نام right_size=اندازه right_user=کاربر right_group=گروه right_date=تاريخ edit_enormal=فقط پرونده‌هاي عادي قابل ويرايش مي‌باشند edit_title=در حال ويرايش $1 edit_title2=در حال ايجاد کردن پرونده edit_filename=نام پرونده: edit_goto=برو به edit_find=يافتن edit_gotoline=برو به خط edit_replace=جايگزين کردن edit_all=جايگزين کردن همه edit_searchfor=جستجو براي edit_replaceby=جايگزين کردن با edit_eover=$1 قادر به نوشتن مجدد نمي‌باشد edit_esave=عدم موفقيت در ذخيره کردن پرونده: $1 edit_eaccess=شما اجازه ذخيره کردن نداريد '$1' edit_efollow=شما اجازه نوشتن برروي اتصال نمادين '$1' را نداريد edit_notfound=متن '$1' يافت نشد edit_saveclose=ذخيره کردن و بستن edit_elength=پرونده کوتاه شده‌است info_file=پرونده info_path=مسير: info_type=نوع: info_size=اندازه: info_mod=تاريخ اصلاح: info_link=اتصال به: info_perms=مجوزها info_user=کاربر: info_group=گروه: info_other=ديگران: info_octal=مبناي هشت: info_sticky=محکم: info_sticky2=تنها مالک مي‌تواند پرونده‌ها را حذف کند info_own=مالکيت info_setUID=قراردادن UID: info_setUID2=اجرا به‌عنوان کاربر info_setgid=قراردادن GID: info_setgid2=پرونده‌ها از گروه ارث برند info_setgid3=اجرا به‌عنوان گروه info_apply=به‌کاربستن تغييرات در info_apply1=فقط اين فهرست راهنما info_apply2=اين فهرست راهنما و پرونده‌هايش info_apply3=اين فهرست راهنما و کليه زير فهرستها info_efailed=عدم موفقيت در به‌روزرساني $1 info_read=خواندن info_write=نوشتن info_list=ليست info_exec=اجرا eacl_eacls=عدم موفقيت در خواندن ACLها: $1 eacl_acltype=نوع ACL eacl_aclname=به‌کاربستن در eacl_aclperms=مجوزها eacl_add=اضافه کردن ACL نوع: eacl_remove=حذف ACL eacl_efs=سيستم پرونده $1 از ACLها پشتيباني نمي‌کند eacl_create=ايجاد ACL eacl_edit=ويرايش ACL eacl_user=مالک پرونده $1 eacl_group=گروه پرونده $1 eacl_eowner=کاربر يا گروه جهت به‌کاربستن يافت نشد eacl_efailed=عدم موفقيت در قرار دادن ACL براي $1: $2 eacl_emask=حداکثر مي‌توان يک پوشش ورودي ACL داشت eacl_edefmask=حداکثر مي‌توان يک پوشش ورودي ACL پيش‌گزيده داشت eacl_title=ACL براي $1 eacl_owner=مالک پرونده eacl_edefaults=اگر پرونده شامل تعدادي ACL پيش‌گزيده باشد بايد کاربر، گروه و ACLهاي پيش‌گزيده ديگري داشته باشد acltype_user=کاربر acltype_group=گروه acltype_other=ديگران acltype_mask=پوشش acltype_default_user=کاربر پيش‌گزيده acltype_default_group=گروه پيش‌گزيده acltype_default_other=ديگران پيش‌گزيده acltype_default_mask=پوشش پيش‌گزيده delete_mtitle=حذف چندين پرونده delete_dtitle=حذف فهرست راهنما delete_ftitle=حذف پرونده delete_ddesc=آيا از حذف دائم فهرست راهنماي $1 و همه محتويات آن مطمئن هستيد؟ delete_fdesc=آيا از حذف پرونده $1 مطمئن هستيد؟ delete_mdesc=آيا از حذف دائمي اين پرونده‌ها و فهرست راهنماها مطمئن هستيد؟ delete_efailed=عدم موفقيت در حذف $1: $2 mkdir_title=فهرست راهنماي جديد mkdir_dir=فهرست راهنماي جديد: mkdir_eexists=$1 از قبل وجود دارد mkdir_efailed=عدم موفقيت در ايجاد فهرست راهنماي: $1 mkdir_eaccess=شما اجازه ايجاد $1 را نداريد link_title=ايجاد اتصال link_from=اتصال از: link_to=اتصال به: link_eexists=$1 از قبل وجود دارد link_efrom=منبع اتصال بايد يک مسير مطلق باشد link_efailed=عدم موفقيت در اتصال: $1 link_efrom2=شما اجازه اتصال از '$1' را نداريد link_efollow=شما اجازه ايجاد اتصال نمادين را نداريد rename_title=تغيير نام $1 rename_old=نام قبلي: rename_new=نام جديد: rename_ok=تغيير نام rename_eexists=پرونده‌اي با نام $1 از قبل وجود دارد rename_efailed=عدم موفقيت در تغيير نام: $1 rename_eold=شما اجازه تغيير نام '$1' را نداريد rename_enew=شما اجازه تغيير نام به '$1' را نداريد file_type0=فهرست راهنما file_type1=پرونده متني file_type2=پرونده تصويري file_type3=پرونده دودويي file_type4=پرونده file_type5=اتصال نمادين file_type6=پرونده دستگاه file_type7=لوله view_enormal=فقط پرونده‌هاي متني را مي‌توان ديد view_enormal2=فقط پرونده‌هاي معمولي را مي‌توان بار کرد view_eaccess=شما اجازه دستيابي به $1 را نداريد view_eopen=عدم موفقيت در باز کردن $1:$2 view_edir=ايجاد بايگاني تنها براي فهرست راهنماهاي امکان پذير مي‌باشد view_ecmd=دستور $1 که براي ايجاد بايگاني لازم است نصب نشده‌است view_ecomp=عدم موفقيت در ايجاد بايگاني: $1 view_earchive=شما اجازه بارکردن بايگانيها را نداريد view_earchmax=فهرست راهنماي انتخاب شده بزرگ‌تر از بيشترين مقداري است که براي بايگاني در نظر گرفته شده‌است ($1 بايت) paste_ecopy=شما قبل از چسباندن بايد ببريد يا رونوشت نمائيد paste_egone=پرونده رونوشت شده $1 وجود ندارد paste_eover=$1 قابل باز نويسي نمي‌باشد paste_eself=شما نمي‌توانيد يک پرونده را برروي خودش بچسبانيد paste_emfailed=عدم موفقيت در انتقال: $1 paste_ecfailed=عدم موفقيت در رونوشت: $1 over_title=پرونده وجود دارد over_msg=پرونده $1 از قبل وجود دارد از حوزه زير جهت وارد کردن نام جديد براي پرونده چسبانده شده‌استفاده نمائيد over_new=نام پرونده جديد: over_ok=تاييد upload_efailed=عدم موفقيت در باز کردن بارگيري شده: $1 upload_title=بارگيري پرونده upload_file=پرونده جهت بارگيري upload_dir=بارگيري به فهرست راهنما upload_ok=بارگيري upload_conv=آيا خطوط جديد DOS تبديل شوند؟ upload_efile=پرونده‌اي براي بارگيري انتخاب نشده upload_edir=فهرست راهنماي مقصد بارگيري موجود نيست upload_eperm=شما اجازه ايجاد $1 را نداريد upload_ewrite=عدم موفقيت در نوشتن درون $1:$2 upload_already=پرونده $1 از قبل وجود دارد از باز نويسي روي آن مطمئن هستيد upload_elink=نمي‌توان به يک اتصال نمادين بارگيري نمود upload_zip=آيا پرونده‌هاي tarيا zip از فشردگي خارج شوند؟ upload_yes=بله و سپس حذف شود find_eaccess=شما اجازه دستيابي به $1 را نداريد find_eexist=$1 درون $2 وجود ندارد find_edir=$1 يک فهرست راهنما در $2 نيست cancel=لغو close=بستن eopen=عدم موفقيت در بارگيري کردن: $1 chmod_eaccess=شما اجازه دستيابي به '$1' را نداريد chmod_euser=$1: چنين کاربري وجود ندارد chmod_egroup=$1: چنين گروهي وجود ندارد chmod_elink=عدم موفقيت در اتصال نمادين chmod_echown=عدم موفقيت در تغيير مالکيت: $1 chmod_echmod=عدم موفقيت در تغيير chmod: $1 chmod_efollow=شما اجازه اجازه ويرايش اتصالهاي نمادين را نداريد copy_efrom=شما اجازه اجازه رونوشت برداشتن از $1 را نداريد copy_eto=شما اجازه اجازه رونويسي در $1 را نداريد copy_elink=عدم موفقيت در اتصال نمادين: $1 delete_eaccess=شما اجازه اجازه حذف $1 را نداريد list_eaccess=شما اجازه اجازه دستيابي به اين فهرست راهنما را نداريد list_edir=عدم موفقيت در ليست کردن$1: $2 move_eto=شما اجازه اجازه منتقل کردن به $1 را نداريد move_afrom=شما اجازه اجازه انتقال '$1' را نداريد acl_user=دستيابي به پرونده برروي کارساز به‌عنوان کاربر acl_user_def=مانند وب‌مين acl_umask=پوشش براي پرونده‌هاي جديد acl_follow=آيا اتصالهاي نمادين دنبال شوند؟ acl_fyes=اگر صاحبان آن يکسان باشند acl_ro=آيا حالت فقط خواندني است؟ acl_dirs=فقط اجازه دستيابي به اين فهرست (هاي) راهنما داه شود acl_nodirs=دستيابي به فهرست (هاي) راهنما ممنوع شود acl_home=به اضافه فهرست شخصي کاربر وب‌مين acl_log=آيا کليه اصلاحات پرونده‌ها ثبت شود؟ acl_goto=اولين فهرست راهنماي اجازه داده شده باز شود؟ acl_max=بيشينه اندازه بار گذاري acl_unlim=نامحدود acl_b=بايت acl_archive=آيا مي‌توان بايگانيهاي فهرستهاي راهنما را بار کرد؟ acl_archmax=بله، اگر کوچک‌تر است از: acl_buttons=دگمه‌هاي قابل دستيابي در نوار ابزار acl_button_save=ذخيره(بار کردن پرونده) acl_button_edit=ويرايش(ويرايش پرونده‌هاي متني) acl_button_info=اطلاعات (ويرايش مجوزها و مالکيت ) acl_button_acl=ACL (ويرايش ACL) acl_button_attr=Attr (ويرايش خصيصه‌هاي XFS) acl_button_ext=EXT (ويرايش خصيصه‌هاي EXT ) acl_button_search=يافتن (يافتن پرونده‌ها) acl_button_delete=حذف(حذف پرونده‌ها) acl_button_new=جديد(ايجاد پرونده متني) acl_button_upload=بارگيري(بارگيري پرونده‌ها توسط کارخواه) acl_button_mkdir=جديد (ايجاد فهرست راهنما) acl_button_makelink=جديد (ايجاد اتصال نمادين) acl_button_rename=تغيير نام (تغيير نام پرونده) acl_button_sharing=اشتراک گذاري(تنظيم کردن سامبا و اشتراک گذاري پرونده NFS) acl_button_mount=سوار (سوار يا پياده کردن سيستم پرونده ) acl_button_copy=رونوشت٬ برش و چسباندن acl_unarchive=آيا مي‌توان پرونده‌هاي بايگاني بارگيري شده را استخراج نمود؟ acl_unarchive2=هميشه سعي شود acl_unarchive1=$Yes acl_unarchive0=$No acl_dostounix=آيا مي‌توان خطوط جديد تبديل شده Dos داشت؟ acl_chroot=تغيير فهرست راهنماي مدير سيستم براي مدير پرونده وارد شده: acl_relto=(وابسته به فهرست راهنماي هر مدير سيستم chroot) share_title=اشتراک گذاري share_samba=ويندوز share_nfs=NFS share_son=اشتراک گذاري پرونده ويندوز فعال شود share_soff=اشتراک گذاري پرونده ويندوز غيرفعال شود share_writable=آيا قابل نوشتن است؟ share_available=آيا در حال حاضر فعال است؟ share_sheader=گزينه‌هاي اشتراک گذاري share_only=فقط share_guest=آيا براي مهمان قابل دستيابي است؟ share_comment=شرح share_nheader=گزينه‌هاي برون‌برد NFS share_non=اشتراک گذاري پرونده NFS فعال شود share_noff=اشتراک گذاري پرونده NFS غيرفعال شود share_desc=شرح share_ro=ميزبانهاي فقط خواندني share_rw=ميزبانهاي خواندني و نوشتني share_root=ميزبانهاي دستيابي به ريشه share_none=هيچ share_all=همه share_listed=ليست شده.. share_host=ميزبانها share_opts=گزينه‌ها share_s0=هيچ کس مطمئن نيست share_s1=هيچ کس غير از root مطمئن نيست share_s2=همه مطمئن هستند share_lro=فقط خواندني share_lrw=خواندني و نوشتني log_create_export=برون‌برد $1 NFS ايجاد شد. log_modify_export=برون‌برد $1 NFS تغيير کرد. log_delete_export=برون‌برد $1 NFS حذف شد. log_create_share=اشتراک $1 سامبا ايجاد شد log_modify_share=اشتراک $1 سامبا تغيير کرد log_delete_share=اشتراک $1 سامبا حذف شد log_save=پرونده $1 ذخيره شد log_chmod=مجوزهاي پرونده $1 تغيير داده شد log_mkdir=فهرست راهنماي $1ايجاد شد log_upload=پرونده $1 بار گذاري شد log_link=اتصال نمادين از $1 به $2 ايجاد شد log_relink=اتصال نمادين از $1 به $2 تغيير کرد log_copy=از پرونده $1 در $2 رونويسي شد log_move=پرونده $1 به $2 حرکت داده شد log_delete=پرونده $1حذف شد log_attr=خصيصه‌هاي پرونده $1 قرار داده شد log_acl=ACL پرونده $1قرار داده شد search_eaccess=شما اجازه جستجو در اين فهرست راهنما را نداريد search_title=يافتن پرونده‌ها search_ok=جستجو search_dir=جستجو در فهرست راهنما search_match=براي تطبق دادن پرونده‌ها search_user=کاربر مالک search_group=گروه مالک search_any=همه search_type=نوع پرونده search_types_=همه search_types_f=پرونده search_types_d=فهرست راهنما search_types_l=اتصال نمادين search_types_p=لوله نامدار search_size=اندازه پرونده search_more=بيش از search_less=کمتر از search_xdev=آيا سوار شده‌هاي قبلي نيز جستجو شود؟ search_edir=فهرست راهنماي جستجو نامعتبر است و يا يافت نشد search_ematch=عبارت با قاعده تطبيق يافت نشد search_euser=اسم‌کاربر يافت نشد search_egroup=نام گروه يافت نشد search_esize=اندازه پرونده بايد يک عدد صحيح باشد search_crit=معيارهاي جستجو search_list=نتايج جستجو facl_eaccess=شما اجازه قرار دادن ACLها براي اين پرونده را نداريد attr_eattrs=عدم موفقيت در دريافت خصيصه‌ها: $1 attr_efs=سيستم پرونده $1 از خصيصه‌ها پشتيباني نمي‌کند attr_add=افزودن خصيصه attr_name=نام خصيصه attr_value=مقدار خصيصه attr_efailed=عدم موفقيت در قرار دادن خصيصه‌ها براي $1: $2 attr_title=خصيصه پرونده براي $1 attr_create=افزودن خصيصه attr_edit=ويرايش خصيصه attr_ename=نام خصيصه يافت نشد ext_eattrs=عدم موفقيت در دريافت خصيصه‌هايEXT: $1 ext_efs=سيستم پرونده $1از خصيصه‌هاي EXT پشتيباني نمي‌کند ext_title=خصيصه‌هايEXTبراي $1 ext_header=خصيصه‌هاي پروندهEXT ext_efailed=عدم موفقيت در قرار دادن خصيصه‌ها براي $1: $2 eattr_A=زمانهاي دستيابي به‌روزرساني نشود eattr_a=تنها مي‌توان به پرونده‌ها اضافه کرد eattr_c=داده‌ها برروي ديسک فشرده سازي شوند eattr_d=با زباله پشتيبان تهيه نشود eattr_i=اجازه اصلاحات داده نشود eattr_s=به هنگام حذف کردن بلاکها صفر شوند eattr_S=هميشه پس از نوشتن همزمان شوند eattr_u=محتويات براي غيرحذفيها حفظ شوند mount_eaccess=شما اجازه سوار کردن سيستم پرونده را نداريد mount_efstab=هيچ سيستم پرونده‌اي در اين نقطه از سوار وجود دارد mount_epoint=$1 يک نقطه سوار نيست mount_rusure1=آيا شما مطمئن هستيد که مي‌خواهيد $1 از $2را سوار نمائيد ? mount_rusure2=آيا شما مطمئن هستيد که مي‌خواهيد $1 از $2را پياده نمائيد؟ mount_err1=عدم موفقيت در سوار کردن $1: $2 mount_err2=عدم موفقيت در پياده کردن $1: $2 mount_title1=سوار کردن سيستم پرونده mount_title2=پياده کردن سيستم پرونده zip_err=نمي توان پرونده : $1را استخراج نمود zip_ecmd=دستور $1يافت نشد zip_eunzip=عدم موفقيت در Unzipکردن: $1 zip_ename=به نظر مي‌رسد يک پرونده zip, tar يا tar.gz نيست zip_euntar=عدم موفقيت درUn-tarکردن: $1 zip_euntar2=عدم موفقيت در خارج کردن از فشرده سازي و un-tar کردن: $1 ddir_title=فهرست راهنماي بار کردن ddir_rusure=براي بار کردن محتويات $1 به‌صورت يک پرونده بايگاني يکي از دگمه‌هاي نوع بايگاني زير را فشار دهيد. ddir_zip=ZIP ddir_tgz=TAR.GZ ddir_tar=TAR ebutton=اين خصوصيت قابل دستيابي نيست file/lang/uk_UA0100664000567100000120000002323610374465506013350 0ustar jcameronwheeltop_delete= info_apply= info_perms= info_file= view_enormal= top_upload= edit_esave= : $1 upload_ewrite= $1 : $2. chmod_elink= symlink : $1 upload_ok= view_eaccess= $1 info_group=: edit_title2= top_info= move_afrom= '$1' link_efailed= : $1 info_setuid2= chmod_euser=$1 : link_efrom= '$1' info_mod=: right_date= copy_efrom= '$1' info_sticky2=ҳ rename_old= ': find_eaccess= $1 mkdir_eexists=$1 upload_dir= rename_enew= '$1' find_edir=$1 $2 upload_efile= . info_type=: info_setuid= setuid: right_group= upload_efailed= : $1 top_cut= info_read= acl_user= ' paste_ecopy= info_exec= delete_ddesc= $1 ? info_link= : link_to=̳ : info_size=: info_path=: copy_eto= '$1' rename_ok= chmod_egroup=$1 : info_own= upload_conv= DOS? cancel= info_list= index_nojava= java, java paste_eover=$1 info_user=: delete_fdesc= $1 ? edit_title= $1 paste_egone= $1 top_paste= chmod_echmod= chmod : $1 edit_filename=' : link_eexists=$1 edit_enormal= info_setgid2= info_setgid3= top_copy= edit_eaccess= '$1' right_name=' rename_efailed= : $1 upload_edir= . rename_new= ': delete_dtitle= link_from=: index_title= file_type0= file_type1= file_type2= file_type3= file_type4= file_type5= file_type6= file_type7= info_sticky= sticky: upload_title= top_edit= upload_eperm= $1 move_eto= '$1' paste_eself= copy_elink= symlink : $1 chmod_echown= chown : $1 acl_umask=Umask mkdir_dir= : info_other=: mkdir_title= delete_ftitle= find_eexist=$1 $2 right_size= edit_eover=$1 paste_emfailed= : $1 link_title= info_apply1=ҳ info_apply2= info_apply3= info_efailed= $1 : $2 acl_follow= ? upload_file= info_setgid= setgid: paste_ecfailed= : $1 mkdir_eaccess= '$1' right_user= rename_eold= '$1' link_efollow= rename_title= $1 top_new= mkdir_efailed= : $1 info_write= rename_eexists= ' $1 acl_dirs= chmod_eaccess= '$1' top_refresh= delete_eaccess= '$1' view_eopen= $1 : $2 top_rename= list_eaccess= delete_efailed= $1 : $2 log_chmod= $1 eacl_edefmask=There can be at most one default mask ACL entry acl_log= ? eacl_eacls= ACL : $1 search_eaccess= over_msg= $1 . , , '. share_nfs=NFS log_copy= $1 $2 acltype_default_group= eacl_aclname= search_size= log_upload= $1 attr_create= search_types_d= ext_eattrs= EXT : $1 search_group= search_types_f= index_eremote= Unix Webmin $1. search_types_l= search_types_p= search_dir= acltype_user= acl_user_def= Webmin top_share= switch_euser= Unix ! acl_home= Webmin search_match= share_writable= ? delete_mtitle= search_less= top_attr= log_link= $1 $2 log_create_export= NFS $1 eacl_acltype= ACL share_s0= nobody share_s1= -root share_s2= ext_header= EXT search_title= search_types_= log_move= $1 $2 acl_goto=³ ? top_search= share_none= log_delete= $1 share_opts= share_ro=, share_rw=, share_guest= (Guest)? share_nheader= NFS over_title= over_new= ' : share_host= search_esize= acltype_other= ext_efailed= EXT $1 : $2 share_title= share_only=ҳ attr_edit= eacl_eowner= view_enormal2= search_user= log_mkdir= $1 attr_ename= search_more= eacl_user= $1 ext_efs= $1 EXT acltype_default_user= top_ext=EXT eacl_efs= $1 ACL search_egroup=' share_lro=ҳ acl_ro= ? eacl_edefaults=If a file has any default ACL, it must have default user, group and other ACLs. list_edir= $1 : $2 eacl_owner= share_lrw=/ attr_name= eacl_aclperms= acltype_default_other= acltype_mask= attr_eattrs= : $1 search_ematch= eacl_add= ACL : log_attr= $1 log_modify_export= NFS $1 attr_efs= $1 top_down= eattr_A= search_crit= attr_add= chmod_efollow= ext_title= EXT $1 share_son= Windows log_create_share= Samba $1 search_ok= attr_title= $1 eattr_S= search_edir= share_non= NFS eattr_a= share_samba=Windows eattr_c= eattr_d= dump search_xdev= ? eacl_edit= ACL eattr_= share_soff= Windows search_euser=' eattr_s= eattr_u= top_ret= log_delete_share= Samba $1 eacl_emask=There can be at most one mask ACL entry log_delete_export= NFS $1 eacl_group= $1 share_noff= NFS share_available= ? info_octal= : attr_efailed= $1 : $2 acltype_default_mask= log_modify_share= Samba $1 log_save= $1 share_comment= share_desc= eacl_remove= ACL attr_value= search_any= search_type= eacl_title=ACL $1 top_eacl=ACL facl_eaccess= ACL share_root=, root eacl_efailed= ACL $1 : $2 share_all= delete_mdesc= ? : acltype_group= log_acl= $1 ACL share_listed=.. share_sheader= search_list= eacl_create= ACL log_relink= $1 $2 over_ok= file/lang/zh_TW.UTF-80100664000567100000120000001234110420074744014164 0ustar jcameronwheelindex_title=檔案管理者 index_nojava=這個模組需要 Java 才能正確的運作, 但是您的瀏覽器似乎不支援 Java top_ret=返回 top_config=設定 top_down=下載 top_open=開啟 top_view=檢視 top_edit=編輯 top_refresh=重讀 top_info=資訊 top_search=搜尋 top_delete=刪除 top_new=新增 top_upload=上傳 top_rename=改名 top_copy=複製 top_cut=剪下 top_paste=貼上 right_name=名稱 right_size=大小 right_user=使用者 right_group=群組 right_date=日期 edit_enormal=只能編輯一般的檔案 edit_title=編輯 $1 中 edit_title2=建立檔案中 edit_filename=檔案名稱: edit_goto=前往 edit_find=尋找 edit_gotoline=前往的列數 edit_replace=取代 edit_all=全部取代 edit_searchfor=尋找內容 edit_replaceby=取代成為 edit_eover=$1 無法被覆蓋 edit_esave=無法儲存檔案 : $1 edit_eaccess=您不被允許儲存 '$1' edit_efollow=您不被允許寫入符號連結 '$1' edit_notfound=找不到這個 $1 文件 edit_saveclose=儲存並關閉 edit_elength=檔案被截斷! info_file=檔案 info_path=路徑: info_type=類別: info_size=大小: info_mod=修改時間: info_link=連結到: info_perms=權限 info_user=使用者: info_group=群組: info_other=其他: info_sticky=設定位元: info_sticky2=只有擁有者才能刪除檔案 info_own=所有權 info_setuid=設定 UID: info_setuid2=以使用者權限執行 info_setgid=設定 GID: info_setgid2=檔案繼承群組 info_setgid3=以群組權限執行 info_apply=套用變更到 info_apply1=只有這個目錄 info_apply2=這個目錄與其中的檔案 info_apply3=這個目錄與所有的子目錄 info_efailed=無法重讀 $1 : $2 info_read=讀取 info_write=寫入 info_list=列出 info_exec=執行 search_eaccess=您不被允許搜尋這個目錄 search_title=搜尋檔案 search_ok=搜尋 search_dir=搜尋目錄 search_match=符合的檔案名稱 search_user=擁有的使用者 search_group=擁有的群組 search_any=任意 search_type=檔案的類型 search_types_=任意 search_types_f=檔案 search_types_d=目錄 search_types_l=符號連結(Symbolic link) search_types_p=具名管道(Named pipe) search_size=檔案大小 search_more=超過 search_less=小於 search_xdev=Search past mounts? search_edir=未找到或無效的搜尋目錄 search_ematch=未找到符合的 regexp search_euser=未找到使用者名稱 search_egroup=未找到群組名稱 search_esize=檔案的大小必須是整數 search_crit=搜尋條件 search_list=搜尋結果 delete_dtitle=刪除目錄 delete_ftitle=刪除檔案 delete_mtitle=刪除多個檔案 delete_ddesc=您確定要永久的刪除目錄 $1 與其所有內容嗎? delete_fdesc=您確定要永久的刪除檔案 $1 嗎? delete_mdesc=您確定要永久的刪除這些檔案和目錄嗎? : delete_efailed=無法刪除 $1 : $2 mkdir_title=新增目錄 mkdir_dir=目錄: mkdir_eexists=$1 已經存在 mkdir_efailed=建立目錄失敗 : $1 mkdir_eaccess=您不被允許建立 '$1' link_title=建立連結 link_from=連結自: link_to=連結到: link_eexists=$1 已經存在 link_efailed=連結失敗 : $1 link_efrom=您不被允許連結 '$1' link_efollow=您不被允許建立符號連結 rename_title=變更名稱 $1 rename_old=舊檔名: rename_new=變更為: rename_ok=改名 rename_eexists=叫做 $1 的檔案已經存在 rename_efailed=改名失敗 : $1 rename_eold=您不被允許改名自 '$1' rename_enew=您不被允許改名成 '$1' file_type0=目錄 file_type1=文字檔 file_type2=影像檔 file_type3=二進位檔 file_type4=檔案 file_type5=符號連結 file_type6=設備控制檔 file_type7=管線 view_enormal=只有一般的檔案可以被檢視 view_eaccess=您不被允許存取 $1 view_eopen=無法開啟n $1 : $2 paste_ecopy=在您貼上要先剪下或複製 paste_egone=複製的檔案 $1 已經不存在 paste_eover=$1 無法被蓋寫 paste_eself=您不能把檔案貼到本身上 paste_emfailed=移動失敗 : $1 paste_ecfailed=拷貝失敗 : $1 upload_efailed=開啟上傳失敗 : $1 upload_title=上傳檔案 upload_file=要上傳的檔案 upload_dir=上傳到目錄 upload_ok=上傳 upload_conv=是否要改變 DOS 的換行符號? upload_efile=沒有選擇要上傳的檔案. upload_edir=上傳的目錄不存在. upload_eperm=您不被允許建立 $1 upload_ewrite=無法寫入到 $1 : $2. upload_already=檔案 $1 已經存在,您確定要覆蓋它嗎? upload_elink=無法上傳符號連結 upload_zip=要解壓縮 ZIP 或 TAR 的檔案嗎? upload_yes=是的,然後刪除 find_eaccess=您不被允許存取 $1 find_eexist=$1 不存在於 $2 find_edir=$1 不是一個目錄在 $2 cancel=取消 close=關閉 eopen=下載失敗:$1 chmod_eaccess=您不被允許存取 '$1' chmod_euser=$1 : 沒有這個使用者 chmod_egroup=$1 : 沒有這個群組 chmod_elink=符號連結失敗d : $1 chmod_echown=變更擁有者失敗 : $1 chmod_echmod=變更權限失敗 : $1 copy_efrom=您不被允許拷貝自 '$1' copy_eto=您不被允許拷貝到 '$1' copy_elink=符號連結失敗 : $1 delete_eaccess=您不被允許刪除 '$1' list_eaccess=您不被允許存取這個目錄 move_eto=您不被允許移動到 '$1' move_afrom=您不被允許移動自 '$1' acl_user=以使用者權限存取伺服器上的檔案 acl_umask=建立檔案的遮罩 acl_follow=是否跟隨符號連結? acl_dirs=只允許存取到目錄 file/lang/zh_CN.UTF-80100664000567100000120000002117010420074744014132 0ustar jcameronwheelindex_title=文件管理器 index_nojava=本模块需要java支持才能工作,但是您的浏缆器不支持java index_eremote=没有区配 Webmin登录名 $1 的Unix用户。 switch_euser=Unix 用户不存在! top_ret=索引 top_down=保存 top_edit=编辑 top_refresh=刷新 top_info=信息 top_eacl=ACL top_attr=属性 top_ext=扩展 top_delete=删除 top_new=新建 top_upload=上传 top_rename=改名 top_copy=复制 top_cut=剪切 top_paste=粘贴 top_share=共享 top_mount=加载 top_search=查找 top_config=配置 right_name=名称 right_size=大小 right_user=用户 right_group=组 right_date=日期 edit_enormal=只能编辑正常文件 edit_title=正在编辑 $1 edit_title2=正在创建文件 edit_filename=文件名: edit_goto=转到 edit_find=查找 edit_gotoline=转到行 edit_replace=替换 edit_all=全部替换 edit_searchfor=搜索 edit_replaceby=被替换 edit_eover=$1 不能被覆盖 edit_esave=保存文件失败 : $1 edit_eaccess=你未被允许保存 '$1' edit_notfound=未找到文本 $1 edit_saveclose=保存并关闭 info_file=文件 info_path=路径: info_type=类型: info_size=大小: info_mod=修改: info_link=联结到: info_perms=许可 info_user=用户: info_group=组: info_other=其它: info_octal=八进制: info_sticky=粘性: info_sticky2=只有所由者才能删除文件 info_own=所有权 info_setuid=设置 uid: info_setuid2=以用户执行 info_setgid=设置 gid: info_setgid2=文件继承组 info_setgid3=以组执行 info_apply=应用更改至 info_apply1=仅此目录 info_apply2=本目录及其文件 info_apply3=本目录及其所有子目录 info_efailed=更新 $1 :$2 失败 info_read=读取 info_write=写入 info_list=列表 info_exec=执行 eacl_eacls=读取 ACLs 失败 : $1 eacl_acltype=ACL 类型 eacl_aclname=应用到 eacl_aclperms=许可 eacl_add=添加 类型的ACL: eacl_remove=移除ACL eacl_efs=文件系统 $1 不支持 ACLs eacl_create=创建 ACL eacl_edit=编辑 ACL eacl_user=文件所有者 $1 eacl_group=文件组 $1 eacl_eowner=缺少要应用到的用户或组 eacl_efailed=为$1 : $2设置ACLs失败 eacl_emask=最多只能有一个掩码 ACL 条目 eacl_edefmask=最多只能有一个默认掩码 ACL 条目 eacl_title=$1的ACL eacl_owner=文件所有者 eacl_edefaults=如果一个文件有任何默认的ACL,则它必须有默认用户,组和其他的ACLs。 acltype_user=用户 acltype_group=组 acltype_other=其他 acltype_mask=掩码 acltype_default_user=默认用户 acltype_default_group=默认组 acltype_default_other=默认其他 acltype_default_mask=默认掩码 delete_mtitle=删除多个文件 delete_dtitle=删除目录 delete_ftitle=删除文件 delete_ddesc=确实要永久删除目录 $1 及其内容? delete_fdesc=确实要永久删除文件 $1? delete_mdesc=确实要永久删除这些目录和文件? : delete_efailed=删除 $1 :$2 失败 mkdir_title=新建目录 mkdir_dir=新建目录: mkdir_eexists=$1 已经存在 mkdir_efailed=创建目录 $1 失败 mkdir_eaccess=你无权创建 '$1' link_title=创建链接 link_from=链接自: link_to=链接到: link_eexists=$1 已经存在 link_efailed=链接失败:$1 link_efrom=你无权链接自 '$1' link_efollow=你无权创建符号链接 rename_title=重命名$1 rename_old=原名: rename_new=新名: rename_ok=重命名 rename_eexists=文件 $1 已存在 rename_efailed=重命名失败: $1 rename_eold=你无权重命名 '$1' rename_enew=你无权重命名为 '$1' file_type0=目录 file_type1=文本文件 file_type2=映象文件 file_type3=二进制文件 file_type4=文件 file_type5=符号链接 file_type6=设备文件 file_type7=管道 view_enormal=只能查看正常文件 view_enormal2=只能下载正常文件 view_eaccess=你无权访问 $1 view_eopen=打开 $1: $2 失败 paste_ecopy=在粘贴之前必须剪切或拷贝 paste_egone=拷贝的文件 $1 已经不存在 paste_eover=$1 不能覆盖 paste_eself=不能将文件粘贴至自身 paste_emfailed=移动失败:$1 paste_ecfailed=拷贝失败:$1 over_title=文件存在 over_msg=文件 $1 已经存在。在下面的字段中为要粘贴的文件输入一个新名。 over_new=新文件名: over_ok=确定 upload_efailed=打开上传失败:$1 upload_title=上传文件 upload_file=要上传的文件 upload_dir=上传到目录 upload_ok=上传 upload_conv=是否转换DOS换行符号? upload_efile=没有选定要上传的文件。 upload_edir=上传目录不存在。 upload_eperm=你无权创建 $1 upload_ewrite=写入 $1:$2 失败。 upload_already=文件 $1 已经存在。您确定要覆盖它吗? find_eaccess=你无权访问 $1 find_eexist=在$2中不存在$1 find_edir=$1 不是 $2 中的目录 cancel=取消 close=关闭 chmod_eaccess=你无权访问 '$1' chmod_euser=$1:无此用户 chmod_egroup=$1:无此用户组 chmod_elink=symlink 失败:$1 chmod_echown=chown 失败:$1 chmod_echmod=chmod 失败:$1 chmod_efollow=您未被允许编辑符号链接 copy_efrom=你无权从 '$1' 拷贝 copy_eto=你无权拷贝到 '$1' copy_elink=symlink 失败 '$1' delete_eaccess=你无权删除 '$1' list_eaccess=你无权访问此目录 list_edir=显示列表失败 $1 : $2 move_eto=你无权移动到 '$1' move_afrom=你无权移动 '$1' acl_user=作为用户访问服务器的文件 acl_user_def=与Webmin登录相同 acl_umask=对新文件去除掩码 acl_follow=是否总是跟随符号链接? acl_ro=只读模式? acl_dirs=仅允许访问目录 acl_home=包含Webmin用户的主目录? acl_log=对所有文件的修改保存日志? acl_goto=打开最先允许的目录? share_title=共享 share_samba=Windows share_nfs=NFS share_son=启用 Windows 文件共享 share_soff=禁用 Windows 文件共享 share_writable=可写入? share_available=现在活动吗? share_sheader=共享选项 share_only=仅 share_guest=Guest 访问? share_comment=注释 share_nheader=NFS 导出选项 share_non=已启用 NFS 文件共享 share_noff=已禁用 NFS 文件共享 share_desc=描述 share_ro=只读主机 share_rw=读写主机 share_root=Root 访问主机 share_none=无 share_all=所有 share_listed=已列出的… share_host=主机 share_opts=选项 share_s0=不信任任何人 share_s1=信任非 Root 用户 share_s2=信任所有人 share_lro=只读 share_lrw=读写 log_create_export=已创建的 NFS 导出 $1 log_modify_export=已修改的 NFS 导出 $1 log_delete_export=已删除的 NFS 导出 $1 log_create_share=已创建的 Samba 共享 $1 log_modify_share=已修改的 Samba 共享 $1 log_delete_share=已删除的 Samba 共享 $1 log_save=已保存文件 $1 log_chmod=已改变文件 $1 的权限 log_mkdir=已创建的目录 $1 log_upload=已上传的文件 $1 log_link=已创建的符号连接 $1 到 $2 log_relink=已修改的符号连接 $1 到 $2 log_copy=已拷贝的文件 $1 到 $2 log_move=已移动的文件 $1 到 $2 log_delete=已删除的文件 $1 log_attr=设置文件 $1 的属性 log_acl=设置文件 $1 的ACL search_eaccess=您无权搜索此目录 search_title=找到文件 search_ok=现在搜索 search_dir=搜索目录 search_match=文件匹配 search_user=用户所有 search_group=组所有 search_any=任何 search_type=文件类型 search_types_=任何 search_types_f=文件 search_types_d=目录 search_types_l=符号连接 search_types_p=命名管道 search_size=文件大小 search_more=多于 search_less=少于 search_xdev=搜索以前的加载? search_edir=丢失或无效的搜索目录 search_ematch=丢失匹配的正则表达式 search_euser=丢失用户名 search_egroup=丢失组名 search_esize=文件大小值必须是整数 search_crit=搜索标准 search_list=搜索结果 facl_eaccess=你未被允许设置此文件的ACLs attr_eattrs=获取属性失败:$1 attr_efs=文件系统 $1 不支持属性 attr_add=添加属性 attr_name=属性名称 attr_value=属性值 attr_efailed=为 $1 : $2 设置属性失败 attr_title=$1的文件属性 attr_create=添加属性 attr_edit=编辑属性 attr_ename=缺少属性名称 ext_eattrs=获取扩展属性失败: $1 ext_efs=文件系统 $1 不支持扩展属性 ext_title=$1 的扩展属性 ext_header=扩展文件属性 ext_efailed=为 $1 : $2设置属性失败 eattr_A=不更新访问次数 eattr_a=只能添加到文件末尾 eattr_c=压缩磁盘数据 eattr_d=不使用dump备份 eattr_i=不允许修改 eattr_s=删除时将块归零 eattr_S=写入后总是同步 eattr_u=为反删除保存内容 mount_eaccess=你未被允许加载文件系统 mount_efstab=此加载点上不存在文件系统 mount_epoint=$1 不是加载点 mount_rusure1=你确定要从 $2加载 $1 吗? mount_rusure2=你确定要从 $2卸载 $1 吗? mount_err1=加载失败 $1 : $2 mount_err2=卸载失败 $1 : $2 mount_title1=加载文件系统 mount_title2=卸载文件系统 file/lang/ja_JP.UTF-80100664000567100000120000002046210420074744014117 0ustar jcameronwheelindex_title=ファイル マネージャ index_nojava=このモジュールは動作するのに Java を必要としますが、ご使用のブラウザは Java をサポートしていません top_open=開く top_view=表示 top_edit=編集 top_refresh=更新 top_info=情報 top_delete=削除 top_new=新規 top_upload=アップロード top_rename=名称変更 top_copy=コピー top_cut=カット top_paste=ペースト top_share=共有 top_search=検索 right_name=ファイル名 right_size=サイズ right_user=ユーザ right_group=グループ right_date=日時 edit_enormal=標準ファイルのみ編集できます edit_title=$1 を編集中 edit_title2=ファイルを作成中 edit_filename=ファイル名: edit_eover=$1 は上書きできません edit_esave=ファイルを保存できませんでした: $1 edit_eaccess='$1' を保存できません info_file=ファイル info_path=パス: info_type=種類: info_size=サイズ: info_mod=変更: info_link=リンク先: info_perms=許可 info_user=ユーザ: info_group=グループ: info_other=その他: info_sticky=スティッキー: info_sticky2=所有者のみがファイルを削除できます info_own=所有権 info_setuid=setuid (ユーザ ID を設定): info_setuid2=次のユーザとして実行 info_setgid=setgid (グループ ID を設定): info_setgid2=ファイルの継承グループ info_setgid3=次のグループとして実行 info_apply=変更を適用 info_apply1=このディレクトリのみ info_apply2=このディレクトリとそこに含まれているファイル info_apply3=このディレクトリとすべてのサブディレクトリ info_efailed=$1 を更新できませんでした: $2 info_read=読取り info_write=書込み info_list=リスト info_exec=実行 delete_dtitle=ディレクトリの削除 delete_ftitle=ファイルの削除 delete_ddesc=ディレクトリ $1 とその内容を永久に削除してもよろしいですか? delete_fdesc=ユーザ $1を永久に削除してもよろしいですか? delete_efailed=$1 を削除できませんでした: $2 mkdir_title=新規のディレクトリ mkdir_dir=新規のディレクトリ: mkdir_eexists=$1 はすでに存在します mkdir_efailed=ディレクトリを作成できませんでした: $1 mkdir_eaccess='$1' を作成できません link_title=リンクの作成 link_from=リンク元: link_to=リンク先: link_eexists=$1 はすでに存在します link_efailed=リンクできませんでした: $1 link_efrom='$1' からリンクできません link_efollow=シンボリック リンクを作成できません rename_title=$1 の名称変更 rename_old=古い名前: rename_new=新しい名前: rename_ok=名称変更 rename_eexists=$1 というファイルはすでに存在しています rename_efailed=名前を変更できませんでした: $1 rename_eold='$1' の名前を変更できません rename_enew='$1' の名前を変更できません file_type0=ディレクトリ file_type1=テキスト ファイル file_type2=画像ファイル file_type3=バイナリ ファイル file_type4=ファイル file_type5=シンボリック リンク file_type6=デバイス ファイル file_type7=パイプ view_enormal=標準ファイルのみ表示できます view_eaccess=$1 にアクセスできません view_eopen=$1 を開けませんでした: $2 paste_ecopy=ペーストする前にカットまたはコピーしてください paste_egone=コピーしたファイル $1 はもう存在しません paste_eover=$1 は上書きできません paste_eself=ファイルをそのファイル自身にペーストすることはできません paste_emfailed=移動できませんでした: $1 paste_ecfailed=コピーできませんでした: $1 over_title=既存のファイル over_msg=ファイル $1 はすでに存在します。ペーストされたファイルの新規ファイル名を下のフィールドに入力してください。 over_new=新規のファイル名: over_ok=OK upload_efailed=アップロードを開けませんでした: $1 upload_title=ファイルのアップロード upload_file=アップロードするファイル upload_dir=アップロード ディレクトリ upload_ok=アップロード upload_conv=DOS 改行に変換しますか? upload_efile=アップロードするファイルが選択されていません。 upload_edir=アップロードのディレクトリが存在しません。 upload_eperm=$1 を作成できません upload_ewrite=$1 に書き込めませんでした: $2. find_eaccess=$1 にアクセスできません find_eexist=$1 は $2 には存在しません find_edir=$1 は $2 内のディレクトリではありません cancel=キャンセル chmod_eaccess='$1' にアクセスできません chmod_euser=$1 : そのユーザは存在しません chmod_egroup=$1 : そのグループは存在しません chmod_elink=symlink が失敗しました: $1 chmod_echown=chown が失敗しました: $1 chmod_echmod=chmod が失敗しました: $1 copy_efrom='$1' からはコピーできません copy_eto='$1' へはコピーできません copy_elink=symlink が失敗しました: $1 delete_eaccess='$1' を削除できません list_eaccess=このディレクトリにアクセスできません list_edir=$1 をリストできませんでした: $2 move_eto='$1' へは移動できません move_afrom='$1' は移動できません acl_user=サーバのファイルに次のユーザとしてアクセス acl_umask=新規ファイルの Umask acl_follow=symlink を常にたどりますか? acl_dirs=次のディレクトリへのアクセスのみを許可 share_title=共有 share_samba=Windows share_nfs=NFS share_son=Windows ファイルの共有を有効 share_soff=Windows ファイルの共有を無効 share_writable=書込みできますか? share_available=現在アクティブですか? share_sheader=共有オプション share_only=次のみ share_guest=ゲストのアクセスを可能にしますか? share_comment=コメント share_nheader=NFS エクスポート オプション share_non=NFS ファイルの共有を有効 share_noff=NFS ファイルの共有を無効 share_desc=説明 share_ro=読取り専用のホスト share_rw=読取り-書込み可能のホスト share_root=root アクセスのホスト share_none=なし share_all=すべて share_listed=リスト.. share_host=ホスト share_opts=オプション share_s0=すべてのユーザを信頼しない share_s1=root 以外を信頼 share_s2=すべてのユーザを信頼 share_lro=読取り専用 share_lrw=読取り-書込み log_create_export=NFS エクスポート $1 を作成しました log_modify_export=NFS エクスポート $1 を変更しました log_delete_export=NFS エクスポート$1 を削除しました log_create_share=Samba の共有 $1 を作成しました log_modify_share=Samba の共有 $1 を変更しました log_delete_share=Samba の共有 $1 を削除しました log_save=ファイル $1 を保存しました log_chmod=ファイル $1 の許可を変更しました log_mkdir=ディレクトリ $1 を作成しました log_upload=ファイル $1 をアップロードしました log_link=$2へのシンボリック リンク $1 を作成しました log_relink=$2 へのシンボリック リンク $1 を変更しました log_copy=ファイル $1 を $2 にコピーしました log_move=ファイル $1 を $2 に移動しました log_delete=ファイル $1 を削除しました search_eaccess=このディレクトリを検索できません search_title=ファイルの検索 search_ok=すぐに検索 search_dir=検索ディレクトリ search_match=一致したファイル search_user=所有ユーザ search_group=所有グループ search_any=任意 search_type=ファイルの種類 search_types_=任意 search_types_f=ファイル search_types_d=ディレクトリ search_types_l=シンボリック リンク search_types_p=名前付きパイプ search_size=ファイル サイズ search_more=次より大きい search_less=次より小さい search_xdev=過去のマウントを検索しますか? search_edir=検索ディレクトリがないか無効です search_ematch=一致した正規表現がありません search_euser=ユーザ名がありません search_egroup=グループ名がありません search_esize=ファイル サイズは整数でなければなりません search_crit=検索条件 search_list=検索結果 file/lang/ko_KR.UTF-80100664000567100000120000001625710420074744014150 0ustar jcameronwheelindex_title=督析 淫軒切 index_nojava=戚 乞汲精 Java人 敗臆 紫遂背醤 馬走幻 薄仙 崎虞酔煽拭辞 Java研 走据馬走 省柔艦陥 top_open=伸奄 top_view=左奄 top_edit=畷増 top_refresh=歯稽 壱徴 top_info=舛左 top_delete=肢薦 top_new=歯稽 幻級奄 top_upload=穣稽球 top_rename=戚硯 郊荷奄 top_copy=差紫 top_cut=設虞鎧奄 top_paste=細食隔奄 top_share=因政 top_search=達奄 right_name=戚硯 right_size=滴奄 right_user=紫遂切 right_group=益血 right_date=劾促 edit_enormal=析鋼 督析幻 畷増拝 呪 赤柔艦陥 edit_title=$1 畷増 edit_title2=督析 拙失 edit_filename=督析 戚硯: edit_eover=$1精(澗) 気嬢承 呪 蒸柔艦陥 edit_esave=督析聖 煽舌馬走 公梅柔艦陥: $1 edit_eaccess='$1'聖(研) 煽舌拝 呪 蒸柔艦陥 info_file=督析 info_path=井稽: info_type=政莫: info_size=滴奄: info_mod=呪舛廃 劾促: info_link=元滴 企雌: info_perms=紫遂 映廃 info_user=紫遂切: info_group=益血: info_other=益 須: info_sticky=壱舛: info_sticky2=社政切幻 督析聖 肢薦拝 呪 赤柔艦陥 info_own=社政映 info_setuid=Setuid: info_setuid2=紫遂切稽辞 叔楳 info_setgid=Setgid: info_setgid2=督析戚 益血 雌紗 info_setgid3=益血生稽辞 叔楳 info_apply=痕井 鎧遂 旋遂 企雌 info_apply1=薄仙 巨刑塘軒幻 info_apply2=薄仙 巨刑塘軒人 背雁 督析 info_apply3=薄仙 巨刑塘軒人 乞窮 馬是 巨刑塘軒 info_efailed=$1聖(研) 穣汽戚闘馬走 公梅柔艦陥: $2 info_read=石奄 info_write=床奄 info_list=蟹伸 info_exec=叔楳 delete_dtitle=巨刑塘軒 肢薦 delete_ftitle=督析 肢薦 delete_ddesc=巨刑塘軒 $1引(人) 益 照税 乞窮 督析聖 慎姥旋生稽 肢薦馬獣畏柔艦猿? delete_fdesc=督析 $1聖(研) 慎姥旋生稽 肢薦馬獣畏柔艦猿? delete_efailed=$1聖(研) 肢薦馬走 公梅柔艦陥: $2 mkdir_title=歯 巨刑塘軒 mkdir_dir=歯 巨刑塘軒: mkdir_eexists=$1戚(亜) 戚耕 赤柔艦陥 mkdir_efailed=巨刑塘軒研 拙失馬走 公梅柔艦陥: $1 mkdir_eaccess='$1'聖(研) 拙失拝 呪 蒸柔艦陥 link_title=元滴 拙失 link_from=元滴 社什: link_to=元滴 企雌: link_eexists=$1戚(亜) 戚耕 赤柔艦陥 link_efailed=元滴 叔鳶: $1 link_efrom='$1'拭辞 元滴拝 呪 蒸柔艦陥 link_efollow=宿瑳遣 元滴研 拙失拝 呪 蒸柔艦陥 rename_title=$1 戚硯 郊荷奄 rename_old=奄糎 戚硯: rename_new=歯 戚硯: rename_ok=戚硯 郊荷奄 rename_eexists=督析 $1戚(亜) 戚耕 赤柔艦陥 rename_efailed=戚硯聖 郊荷走 公梅柔艦陥: $1 rename_eold='$1'税 戚硯聖 郊蝦 呪 蒸柔艦陥 rename_enew='$1'(生)稽 戚硯聖 郊蝦 呪 蒸柔艦陥 file_type0=巨刑塘軒 file_type1=努什闘 督析 file_type2=戚耕走 督析 file_type3=戚遭 督析 file_type4=督析 file_type5=宿瑳遣 元滴 file_type6=舌帖 督析 file_type7=督戚覗 view_enormal=析鋼 督析幻 瑳 呪 赤柔艦陥 view_eaccess=$1拭 羨悦拝 呪 蒸柔艦陥 view_eopen=$1聖(研) 伸走 公梅柔艦陥: $2 paste_ecopy=細食隔奄 穿拭 設虞鎧暗蟹 差紫背醤 杯艦陥 paste_egone=差紫廃 督析 $1(戚)亜 希 戚雌 糎仙馬走 省柔艦陥 paste_eover=$1精(澗) 気嬢承 呪 蒸柔艦陥 paste_eself=旭精 督析拭澗 細食隔聖 呪 蒸柔艦陥 paste_emfailed=戚疑馬走 公梅柔艦陥: $1 paste_ecfailed=差紫馬走 公梅柔艦陥: $1 over_title=督析 糎仙 over_msg=督析 $1戚(亜) 戚耕 赤柔艦陥. 細食隔精 督析税 歯 戚硯聖 焼掘税 琶球拭 脊径馬淑獣神. over_new=歯 督析 戚硯: over_ok=溌昔 upload_efailed=穣稽球拝 督析聖 伸走 公梅柔艦陥: $1 upload_title=督析 穣稽球 upload_file=穣稽球拝 督析 upload_dir=巨刑塘軒拭 穣稽球 upload_ok=穣稽球 upload_conv=DOS 匝郊嘩聖 痕発杯艦猿? upload_efile=穣稽球拝 督析聖 識澱馬走 省紹柔艦陥. upload_edir=穣稽球 巨刑塘軒亜 糎仙馬走 省柔艦陥. upload_eperm=$1聖(研) 拙失拝 呪 蒸柔艦陥 upload_ewrite=$1拭 床走 公梅柔艦陥: $2 find_eaccess=$1拭 衝室什拝 呪 蒸柔艦陥 find_eexist=$2拭 $1戚(亜) 糎仙馬走 省柔艦陥 find_edir=$1精(澗) $2税 巨刑塘軒亜 焼鑑艦陥 cancel=昼社 chmod_eaccess='$1'拭 羨悦拝 呪 蒸柔艦陥 chmod_euser=$1: 背雁 紫遂切 蒸製 chmod_egroup=$1: 背雁 益血 蒸製 chmod_elink=宿瑳遣 元滴 叔鳶: $1 chmod_echown=chown 叔鳶: $1 chmod_echmod=chmod 叔鳶: $1 copy_efrom='$1'拭辞 差紫拝 呪 蒸柔艦陥 copy_eto='$1'拭 差紫拝 呪 蒸柔艦陥 copy_elink=宿瑳遣 元滴 叔鳶: $1 delete_eaccess='$1'聖(研) 肢薦拝 呪 蒸柔艦陥 list_eaccess=戚 巨刑塘軒拭 羨悦拝 呪 蒸柔艦陥 list_edir=$1聖(研) 蟹伸馬走 公梅柔艦陥: $2 move_eto='$1'(生)稽 戚疑拝 呪 蒸柔艦陥 move_afrom='$1'聖(研) 戚疑拝 呪 蒸柔艦陥 acl_user=紫遂切稽辞 辞獄 督析拭 羨悦 acl_umask=歯 督析税 Umask acl_follow=牌雌 宿瑳遣 元滴研 魚絹艦猿? acl_dirs=巨刑塘軒拭 企廃 衝室什幻 買遂 share_title=因政 share_samba=制亀酔 share_nfs=NFS share_son=制亀酔 督析 因政 亜管 share_soff=制亀酔 督析 因政 災管 share_writable=床奄 亜管杯艦猿? share_available=薄仙 醗失 雌殿脊艦猿? share_sheader=因政 辛芝 share_only=穿遂 share_guest=惟什闘 羨悦聖 買遂杯艦猿? share_comment=爽汐 share_nheader=NFS 鎧左鎧奄 辛芝 share_non=NFS 督析 因政 亜管 share_noff=NFS 督析 因政 災管 share_desc=竺誤 share_ro=石奄 穿遂 硲什闘 share_rw=石奄/床奄 硲什闘 share_root=root 衝室什 硲什闘 share_none=蒸製 share_all=乞砧 share_listed=蟹伸.. share_host=硲什闘 share_opts=辛芝 share_s0=焼巷亀 重軽馬走 省製 share_s1=root須 紫遂切 重軽 share_s2=乞窮 紫遂切 重軽 share_lro=石奄 穿遂 share_lrw=石奄/床奄 log_create_export=NFS 鎧左鎧奄 $1 拙失喫 log_modify_export=NFS 鎧左鎧奄 $1 呪舛喫 log_delete_export=NFS 鎧左鎧奄 $1 肢薦喫 log_create_share=誌郊 因政 $1 拙失喫 log_modify_share=誌郊 因政 $1 呪舛喫 log_delete_share=誌郊 因政 $1 肢薦喫 log_save=督析 $1 煽舌喫 log_chmod=督析 $1税 紫遂 映廃 痕井喫 log_mkdir=巨刑塘軒 $1 拙失喫 log_upload=督析 $1 穣稽球喫 log_link=$2拭 企廃 宿瑳遣 元滴 $1 拙失喫 log_relink=$2拭 企廃 宿瑳遣 元滴 $1 呪舛喫 log_copy=$2(生)稽 督析 $1 差紫喫 log_move=$2(生)稽 督析 $1 戚疑喫 log_delete=督析 $1 肢薦喫 search_eaccess=戚 巨刑塘軒研 伊事拝 呪 蒸柔艦陥 search_title=督析 達奄 search_ok=走榎 伊事 search_dir=巨刑塘軒 伊事 search_match=督析 伊事 鳶渡 search_user=紫遂切 社政 search_group=益血 社政 search_any=績税 search_type=督析 政莫 search_types_=績税 search_types_f=督析 search_types_d=巨刑塘軒 search_types_l=宿瑳遣 元滴 search_types_p=誤誤吉 督戚覗 search_size=督析 滴奄 search_more=左陥 鏑 search_less=左陥 拙製 search_xdev=走蟹娃 原錘闘研 伊事杯艦猿? search_edir=蒸暗蟹 設公吉 伊事 巨刑塘軒 search_ematch=析帖馬澗 舛鋭 縦戚 蒸柔艦陥 search_euser=蒸澗 紫遂切 戚硯 search_egroup=蒸澗 益血 戚硯 search_esize=督析 滴奄澗 舛呪食醤 杯艦陥 search_crit=伊事 奄層 search_list=伊事 衣引 file/TabbedPanel.java0100644000567100000120000000777510122720133014471 0ustar jcameronwheel// TabbedPanel // A panel capable of displaying one of many components at a time. The // component to display is chosen by a row of tab buttons. import java.awt.*; import java.util.Vector; public class TabbedPanel extends Panel { TabSelector tab; // component for choosing panel TabbedDisplayPanel disp; // where other panels are displayed CardLayout card; TabbedPanel() { this(Util.body_hi, Util.dark_edge_hi, Util.body); } TabbedPanel(Color hi, Color lo, Color bk) { setLayout(new BorderLayout()); add("North",tab = new TabSelector(hi, lo, bk)); add("Center",disp = new TabbedDisplayPanel(hi, lo)); disp.setLayout(card = new CardLayout()); } // addItem // Add a component to be chosen by a tab with the given name void addItem(String n, Component c) { tab.addItem(n); disp.addItem(n, c); } // select // Display a component in the panel void select(String n) { tab.choose(n); disp.choose(n); } // chose // Called back by a TabSelector object when the user clicks on a tab void chose(String n) { disp.choose(n); } } class TabSelector extends Canvas { Color hi, lo, bk; Vector name = new Vector(); int chosen = 0; Font font = new Font("timesRoman", Font.PLAIN, 12), chfont = new Font(font.getName(), Font.BOLD, 13); TabSelector(Color h, Color l, Color b) { hi = h; lo = l; bk = b; } void addItem(String n) { name.addElement(n); paint(getGraphics()); } void choose(String n) { for(int i=0; i ? @A B CD CEF 8 GHIJ K L GM NO P QR STUVWcolLjava/awt/Color;but LCbButton;palLjava/util/Vector;swatchLjava/awt/Image;gLjava/awt/Graphics;winLCbColorWindow;(Ljava/awt/Color;)VCodeLineNumberTable%(Ljava/awt/Color;Ljava/util/Vector;)Vclick (LCbButton;)Vchosen"(LCbColorWindow;Ljava/awt/Color;)Vpalette#(LCbColorWindow;)Ljava/util/Vector; SourceFileCbColorButton.javajava/util/Vector *X *.Y Z[ $%\ ]^ &'_ ` a b+ cdjava/awt/BorderLayoute fgCenterCbButton *h ! ij () CbColorWindow *kl mX "# CbColorButtonjava/awt/PanelCbButtonCallbackCbColorWindowCallback()VUtil createImage(II)Ljava/awt/Image;java/awt/Image getGraphics()Ljava/awt/Graphics;java/awt/Colorblackjava/awt/GraphicssetColorfillRect(IIII)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V%(Ljava/awt/Image;LCbButtonCallback;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;*(Ljava/awt/Color;LCbColorWindowCallback;)Vjava/awt/Componentrepaint! !"#$%&'()*+,) *+Y-  *.,c** **+ L*+ ** *  * Y**Y**ZW-&   "'?Jb/0,8**Y* *- !"12,Z.,'*, ** *  **-&' (!)(+-,34,*-056file/CbColorWindowCallback.class0100664000567100000120000000034110522475215016640 0ustar jcameronwheel-   chosen"(LCbColorWindow;Ljava/awt/Color;)Vpalette#(LCbColorWindow;)Ljava/util/Vector; SourceFileCbColorWindow.javaCbColorWindowCallbackjava/lang/Objectfile/CbColorWindow.class0100664000567100000120000000746710522475215015243 0ustar jcameronwheel- Svw Rxy Rz R{ R| R} ~ R R D D D R v  v   R  R   " $v   4  + R   ~ R + 4 + 4 + 4 +  Dv 4 4 4 4 4 4 4 4 4 4 4 4callbackLCbColorWindowCallback;colLjava/awt/Color;palLjava/util/Vector;defpalpalimg[Ljava/awt/Image;palbut [LCbButton;curpalIok LCbButton;cancelccubeLCbColorWindowCube;*(Ljava/awt/Color;LCbColorWindowCallback;)VCodeLineNumberTable updatePal(I)Vclick (LCbButton;)Vdispose()V isResizable()Z SourceFileCbColorWindow.java gpjava/awt/Image \]CbButton ^_ `a WX UV YZ [Z  kljava/awt/BorderLayout  GrayPaneljava/awt/FlowLayout glOk g bc Cancel dcSouth  BorderPaneljava/awt/GridLayout g CbButtonGroup g pNorthCbColorWindowCube g efCenter p pChoose Color... java/awt/Color  p op  l java/util/Vector X X X X X X X X  X X  X  X CbColorWindow FixedFrameCbButtonCallbackCbColorWindowCallbackpalette#(LCbColorWindow;)Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object; addElement(Ljava/lang/Object;)VUtil createImage(II)Ljava/awt/Image;java/awt/Container setLayout(Ljava/awt/LayoutManager;)V'(Ljava/lang/String;LCbButtonCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(IIII)V%(Ljava/awt/Image;LCbButtonCallback;)VsetGroup(LCbButtonGroup;)Vequals(Ljava/lang/Object;)Zselect(LCbColorWindow;)Vjava/awt/Windowpackshowjava/awt/FramesetTitle(Ljava/lang/String;)V getGraphics()Ljava/awt/Graphics;java/awt/GraphicssetColor(Ljava/awt/Color;)VfillRectjava/awt/Componentrepaintchosen"(LCbColorWindow;Ljava/awt/Color;)Vred LCbSlider;getRedCbSlider setPositionbluegetBluegreengetGreenswatchLCbColorWindowSwatch;CbColorWindowSwatchblackcyangraydarkGraymagentaorangepinkwhiteyellow RST UVWXYZ[Z\]^_`abcdcefghi}** * **+*,***  * * )* > *  > *S**YYN-Y-*Y*ZW-*Y*ZW*-W Y!:YY:"Y#$Y%:6 2*Y*2*&[SW*2'6 ,+*  (**2) W**+Y*,Z-W*.W*/*0*12j-$ % &%)3*:+D,N-V.d-j1r231789:;<=>?@ ABC9DEBKFUGeHkIuJxF~LMNPQRSkli^6*23M,*  45,6*2 *27jW XY#Z5[mni+****8*9+* *:p= h+*2X***  4*-;*<=*->*?=*-@*A=*-B*Cj>_`ac%d,f4g>hCiRjcktlmfpopi0*9**8jtuvqrijxspiwDYE F G H I J K L M N O P Qj: %.7@IR[dm v!tufile/Util.class0100664000567100000120000001053010522475216013427 0ustar jcameronwheel- Hz{ G| } ~    G  z  H    " " " G G G G G G 4 G 4 G 4 4 G G 4 G G G G =z =  A G GfrLjava/awt/Frame;gLjava/awt/Graphics;fLjava/awt/Font;fnmLjava/awt/FontMetrics;tkLjava/awt/Toolkit; light_edgeLjava/awt/Color; dark_edgebodybody_hi light_edge_hi dark_edge_hidark_bgtextlight_bg()VCodeLineNumberTable waitForImage(Ljava/awt/Image;)Z(Ljava/awt/Image;II)ZgetWidth(Ljava/awt/Image;)I getHeight createImage(II)Ljava/awt/Image;0(Ljava/awt/image/ImageProducer;)Ljava/awt/Image; createObject&(Ljava/lang/String;)Ljava/lang/Object;&(Ljava/lang/Object;)Ljava/lang/Object; dottedRect(Ljava/awt/Graphics;IIIII)VrecursiveLayout(Ljava/awt/Container;)VrecursiveBackground'(Ljava/awt/Component;Ljava/awt/Color;)V recursiveBody(Ljava/awt/Component;)VsetFont(Ljava/awt/Font;)V SourceFile Util.java ]^java/awt/MediaTracker IJ ]t ^java/lang/Exception ab d f gh gi  java/lang/StringBufferFailed to create object  :  Failed to reproduce object  ^ java/awt/Container opjava/awt/TextFieldjava/awt/Choicejava/awt/TextArea qr VT MN KL uv OP T ST T UT Tjava/awt/Color ] WT XT T YT ZT [T \Tjava/awt/Frame ^  java/awt/Font TimesRoman ] QRUtiljava/lang/ObjectaddImage(Ljava/awt/Image;I)V waitForAll isErrorAny()Z(Ljava/awt/Image;III)Vjava/awt/Image!(Ljava/awt/image/ImageObserver;)Ijava/awt/Componentjava/lang/ClassforName%(Ljava/lang/String;)Ljava/lang/Class; newInstance()Ljava/lang/Object;java/lang/SystemerrLjava/io/PrintStream;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;getClass()Ljava/lang/Class;getName()Ljava/lang/String;toStringjava/io/PrintStreamprintln(Ljava/lang/String;)Vexit(I)V,(Ljava/lang/Object;)Ljava/lang/StringBuffer;java/awt/GraphicsdrawLine(IIII)VlayoutcountComponents()I getComponent(I)Ljava/awt/Component; setBackground(Ljava/awt/Color;)VgetFontMetrics()Ljava/awt/FontMetrics;whiteblack lightGray(III)VdarkGray addNotify getGraphics()Ljava/awt/Graphics;(Ljava/lang/String;II)Vjava/awt/ToolkitgetDefaultToolkit()Ljava/awt/Toolkit; GHIJKLMNOPQRSTUTVTWTXTYTZT[T\T]^_*`ab_T(YL+*+M+`! "#$ac_W+YN-* -:-`) *+,de_) * W* ` 12fe_) * W* ` 78gh_!  `=gi_ *`Bjk_m9*L+LY*+ `HI K L3N7Pjl_g7*LY*+`WX Y1[5]mn_2 h6 6<> 6=66'*```66)*```66)*ddd66'*ddd6ٱ`Bdef#g,hFgPiZjviklkmnmoop_Y)*<* *!M," ,"#`stuvw"t(yqr_yA*$*% *&*+'*"!*"M>, ,!+(`& }"'1:@st_$*)(` uv_;**+*,+-.` w^_/0123)4Yҷ56/7894Y5:1;/<=Y>?@+AYBCDEF`>  %+1DJPZ`ix~xyfile/CbColorWindow.java0100644000567100000120000001217510122720133015031 0ustar jcameronwheelimport java.awt.*; import java.util.*; /**A window for choosing a colour, either from a pre-set palette * or from a color cube */ class CbColorWindow extends FixedFrame implements CbButtonCallback { CbColorWindowCallback callback; Color col; Vector pal; static Vector defpal = new Vector(); Image palimg[] = new Image[12]; CbButton palbut[] = new CbButton[12]; int curpal = -1; CbButton ok, cancel; CbColorWindowCube ccube; static { defpal.addElement(Color.black); defpal.addElement(Color.blue); defpal.addElement(Color.cyan); defpal.addElement(Color.gray); defpal.addElement(Color.green); defpal.addElement(Color.darkGray); defpal.addElement(Color.magenta); defpal.addElement(Color.orange); defpal.addElement(Color.pink); defpal.addElement(Color.red); defpal.addElement(Color.white); defpal.addElement(Color.yellow); } CbColorWindow(Color c, CbColorWindowCallback cb) { col = c; callback = cb; // Setup color vector pal = callback.palette(this); if (pal == null) pal = defpal; else if (pal.size() == 0) for(int i=0; i<12; i++) pal.addElement(defpal.elementAt(i)); // Create palette images for(int i=0; i<12; i++) { palimg[i] = Util.createImage(16, 16); updatePal(i); } // create UI setLayout(new BorderLayout()); Panel bot = new GrayPanel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton("Ok", this)); bot.add(cancel = new CbButton("Cancel", this)); add("South", bot); Panel mid = new BorderPanel(1); mid.setLayout(new BorderLayout()); Panel midbot = new GrayPanel(); midbot.setLayout(new GridLayout(2, 6, 4, 4)); CbButtonGroup g = new CbButtonGroup(); for(int i=0; i<12; i++) { midbot.add(palbut[i] = new CbButton(palimg[i], this)); palbut[i].setGroup(g); } for(int i=0; i<12; i++) if (c.equals(pal.elementAt(i))) { curpal = i; palbut[i].select(); break; } mid.add("South", midbot); mid.add("North", ccube = new CbColorWindowCube(this)); add("Center", mid); pack(); show(); setTitle("Choose Color..."); } void updatePal(int i) { Graphics g = palimg[i].getGraphics(); g.setColor((Color)pal.elementAt(i)); g.fillRect(0, 0, 16, 16); if (palbut[i] != null) palbut[i].repaint(); } public void click(CbButton b) { if (b == ok) { callback.chosen(this, col); super.dispose(); } else if (b == cancel) dispose(); else { for(int i=0; i<12; i++) if (b == palbut[i]) { curpal = i; col = (Color)pal.elementAt(i); ccube.red.setPosition(col.getRed()); ccube.blue.setPosition(col.getBlue()); ccube.green.setPosition(col.getGreen()); ccube.swatch.setColor(col); } } } public void dispose() { super.dispose(); callback.chosen(this, null); } public boolean isResizable() { return false; } } /**Displays 3 sliders, for red green and blue plus a block to show the * current color */ class CbColorWindowCube extends BorderPanel implements CbSliderCallback { CbColorWindow parent; CbSlider red, green, blue; CbColorWindowSwatch swatch; CbColorWindowCube(CbColorWindow p) { super(1, Util.body, Util.body); parent = p; setLayout(new BorderLayout()); Panel sl = new GrayPanel(); sl.setLayout(new GridLayout(3, 1)); sl.add(red = new CbSlider(0, 0, 255, p.col.getRed(), this)); sl.add(green = new CbSlider(0, 0, 255, p.col.getBlue(), this)); sl.add(blue = new CbSlider(0, 0, 255, p.col.getGreen(), this)); add("Center", sl); add("East", swatch = new CbColorWindowSwatch(p.col)); } public void moved(CbSlider s, int p) { moving(s, p); } public void moving(CbSlider s, int p) { parent.col = new Color(red.getPosition(), green.getPosition(), blue.getPosition()); swatch.setColor(parent.col); if (parent.curpal != -1) { parent.pal.setElementAt(parent.col, parent.curpal); parent.updatePal(parent.curpal); } } } interface CbColorWindowCallback { /**This method will be called when the user chooses a colour. If * the user cancels the dialog, then this method will also be chosen * but with null for the color. */ public void chosen(CbColorWindow w, Color c); /**The chooser keeps a palette of colors that the user can modify, * stored in a vector. The callback class should provide this vector * so as to maintain the palette between color window calls. * If an empty vector is returned, it will be filled with the default * color table (which can be then modified). * If null is returned, the chooser will use it's own internal * vector. */ public Vector palette(CbColorWindow w); } class CbColorWindowSwatch extends BorderPanel { Color col = Color.black; String txt; CbColorWindowSwatch(Color c) { super(1); setColor(c); } void setColor(Color c) { col = c; txt = col.getRed()+","+col.getGreen()+","+col.getBlue(); repaint(); } public void paint(Graphics g) { super.paint(g); g.setColor(col); g.fillRect(1, 1, size().width-2, size().height-2); g.setColor(Color.white); g.setXORMode(Color.black); g.setFont(Util.f); g.drawString(txt, 3, Util.fnm.getHeight()+1); g.setPaintMode(); } public void upate(Graphics g) { paint(g); } public Dimension preferredSize() { return new Dimension(60, 60); } public Dimension minimumSize() { return preferredSize(); } } file/CbColorWindowCube.class0100664000567100000120000000333310522475215016026 0ustar jcameronwheel- 89 %: $;< = >?@ =A BC DE F G $H >I J $K L $MN >OPQ R $S $TU V W X DY DZ [\ D]^_`parentLCbColorWindow;red LCbSlider;greenblueswatchLCbColorWindowSwatch;(LCbColorWindow;)VCodeLineNumberTablemoved(LCbSlider;I)Vmoving SourceFileCbColorWindow.javaa bc /d '(java/awt/BorderLayout /ef gh GrayPaneljava/awt/GridLayout /iCbSliderj kc lm /n )* op qm +* rm ,*Center osEastCbColorWindowSwatch /t -. 54java/awt/Color um /v wt xy z{| }~ CbColorWindowCube BorderPanelCbSliderCallbackUtilbodyLjava/awt/Color;$(ILjava/awt/Color;Ljava/awt/Color;)V()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)V CbColorWindowcolgetRed()I(IIIILCbSliderCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;getBluegetGreen<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(Ljava/awt/Color;)V getPosition(III)VsetColorcurpalIpalLjava/util/Vector;java/util/Vector setElementAt(Ljava/lang/Object;I)V updatePal(I)V $%&'()*+*,*-./01 **+*YYM, Y ,* Y+ *ZW,* Y+ *ZW,* Y+ *ZW*,W**Y+ ZW2. #0Nl341#*+2 541c*Y*** ** * )*!* * "** #2#1<Tb67file/CbSliderCallback.class0100664000567100000120000000023310522475215015614 0ustar jcameronwheel-  moved(LCbSlider;I)Vmoving SourceFile CbSlider.javaCbSliderCallbackjava/lang/Objectfile/CbSlider.class0100664000567100000120000000716110522475215014206 0ustar jcameronwheel- )^ *_ `a )b `c )d `e )f `g )h `i )j `k )l )m )n )o )p )q )r )s )t uv )w ux &y &z {| {} {~ ) ) { ) )  & )dirIminmaxposcallbackLCbSliderCallback;pxpylc1Ljava/awt/Color;lc2lc3hc1hc2hc3ticksinsideZdraggingdragx(IIII)VCodeLineNumberTable(IIIILCbSliderCallback;)VsetTicks(I)V getPosition()I setPosition getMinimum setMinimum getMaximum setMaximumpaint(Ljava/awt/Graphics;)Vupdate mouseEnter(Ljava/awt/Event;II)Z mouseDown mouseDragmouseUp mouseExitcheckPos()V preferredSize()Ljava/awt/Dimension; minimumSize SourceFile CbSlider.java @D @X 5 45 5 65 5 75 5 85 5 95 5 :5 ;, <= >= +, -, ., /, 01 X WX Z , , A A 2, 3, NO ?, java/awt/Dimension @ YZCbSliderjava/awt/CanvasUtil light_edgebody dark_edge light_edge_hibody_hi dark_edge_hijava/awt/Componentrepaintsizewidthheightjava/awt/GraphicssetColor(Ljava/awt/Color;)VfillRectdrawLine fillPolygon([I[II)VCbSliderCallbackmoved(LCbSlider;I)Vmoving(II)V )*+,-,.,/,012,3,4565758595:5;,<=>=?,@AB' *C  @DBY***** * * ********C& ! . 3 ="L#R$X%EFB* **C,- .GHB*C2IFB6* **C89 :<JHB*C@KFB2***CGH I JLHB*CNMFB2***CUV W XNOB# s* * *M* * *N* **:*6*6+-+++ldl+,+l`dl`+,+d+d++ddd+ddd*%+ddd+ddd*M**d668dhl`6 ++ l ld*`6*d*h**dl`*l +- Y*dOY*dOY*OY*`OY*`O: Y* `OY* dOY* dOY* dOY* `O:+!+*,+*d* `*d* d+*d* d** d+*,+*d* `*`* `+*`* `*`* dC'\]&^:aLbQc[daetfygjklmnopqrvwxy(z.{AxMhpu):VrPOB*+"CQRB+ **C SRBz***d l*6*d*Yd**`*Y`***d#*****$*C2 &4>LQ[_ftxTRBS*J**#d**d**dh*dl*****%**C"15<JNURBY)*#*****$*C !%'VRB+ **C WXBJ******* **C)YZB$ &Yd'C[ZB*(C\]file/CbColorWindowSwatch.class0100664000567100000120000000321310522475215016376 0ustar jcameronwheel- #5 67 "8 "9: ; 6< => ? 6@ 6A B "C DE #F G9 DH I J GK 6L GM NO GP NQ RS GT GU "FV W "XYZcolLjava/awt/Color;txtLjava/lang/String;(Ljava/awt/Color;)VCodeLineNumberTablesetColorpaint(Ljava/awt/Graphics;)Vupate preferredSize()Ljava/awt/Dimension; minimumSize SourceFileCbColorWindow.java ([\ ]% $% ,)java/lang/StringBuffer (^ _` ab, ac d` e` fg &'h i^ -.j k1 lm nm op q% r)s tu vw xyz {` |} ~^java/awt/Dimension ( 01CbColorWindowSwatch BorderPanel(I)Vjava/awt/Colorblack()VgetRed()Iappend(I)Ljava/lang/StringBuffer;,(Ljava/lang/String;)Ljava/lang/StringBuffer;getGreengetBluetoString()Ljava/lang/String;java/awt/Componentrepaintjava/awt/GraphicssizewidthIheightfillRect(IIII)Vwhite setXORModeUtilfLjava/awt/Font;setFont(Ljava/awt/Font;)VfnmLjava/awt/FontMetrics;java/awt/FontMetrics getHeight drawString(Ljava/lang/String;II)V setPaintMode(II)V "#$%&'()*6***++ ,)*d@*+*Y* *  *  *+;?-.*P*++*+*d*d++++*`++&  %,3:KO/.**++01*$ Y<< +21**!+34file/preview.cgi0100755000567100000120000000714710345733431013642 0ustar jcameronwheel#!/usr/local/bin/perl # Scale some image down to the preview size require './file-lib.pl'; &ReadParse(); use POSIX; $p = $ENV{'PATH_INFO'}; # Try to guess type from filename $type = &guess_mime_type($p, undef); if (!$type) { # No idea .. use the 'file' command $out = &backquote_command("file ". quotemeta(&resolve_links($p)), 1); if ($out =~ /text|script/) { $type = "text/plain"; } else { &error_exit(&text('preview_etype', $p)); } } # Make sure the type is OK if ($type ne "image/gif" && $type ne "image/jpeg" && $type ne "image/png" && $type ne "image/tiff" && $type ne "application/pdf" && $type !~ /^image\/x-portable/ && $type ne "application/postscript") { &error_exit(&text('preview_etype2', $p)); } &switch_acl_uid_and_chroot(); if (!&can_access($p)) { # ACL rules prevent access to file &error_exit(&text('view_eaccess', $p)); } # Test if the file can be opened if (!open(FILE, $p)) { # Unix permissions prevent access &error_exit(&text('view_eopen', $p, $!)); } close(FILE); eval "use GD"; if ($@ || $type eq "image/tiff" || $type eq "application/pdf" || $type =~ /^image\/x-portable/ || $type eq "application/postscript") { # Find an appropriate scaler $pnmcmd = $type eq "image/gif" ? "giftopnm" : $type eq "image/jpeg" ? "djpeg" : $type eq "image/png" ? "pngtopnm" : $type eq "image/tiff" ? "tifftopnm" : $type =~ /^image\/x-portable/ ? "cat" : $type eq "application/postscript" ? "pstopnm" : $type eq "application/pdf" ? "pdftoppm" : undef; &has_command($pnmcmd) || &error_exit(&text('preview_ecmd', $pnmcmd)); &has_command("pnmscale") || &error_exit(&text('preview_ecmd', "pnmscale")); &has_command("cjpeg") || &error_exit(&text('preview_ecmd', "cjpeg")); # Run scaler $width = $config{'width'} || $userconfig{'width'} || 300; $errout = &transname(); print "Content-type: image/jpeg\n"; print "\n"; if ($type eq "application/pdf") { # Previewing first page of PDF $temp = &tempname(); $out = &backquote_command("$pnmcmd -f 1 -l 1 ".quotemeta($p)." ".$temp." 2>&1"); if ($? || !-r "$temp-000001.ppm") { &error_exit("$pnmcmd failed : $out"); } open(SCALE, "(cat $temp-000001.ppm | pnmscale --width $width | cjpeg) 2>$errout |"); push(@main::temporary_files, "$temp-000001.ppm"); } elsif ($type eq "application/postscript") { # Previewing first page of a postscript file $temp = &transname(); mkdir($temp, 0755); ©_source_dest($p, "$temp/file.ps"); $out = &backquote_command("$pnmcmd $temp/file.ps 2>&1"); if ($? || !-r "$temp/file001.ppm") { &error_exit("$pnmcmd failed : $out"); } open(SCALE, "(cat $temp/file001.ppm | pnmscale --width $width | cjpeg) 2>$errout |"); } else { # Converting to JPEG open(SCALE, "($pnmcmd <".quotemeta($p)." | pnmscale --width $width | cjpeg) 2>$errout |"); } $err = &read_file_contents($errout); print STDERR $err; while() { print; } close(SCALE); } else { # Use the GD library $image = $type eq "image/gif" ? GD::Image->newFromGif($p) : $type eq "image/jpeg" ? GD::Image->newFromJpeg($p) : $type eq "image/png" ? GD::Image->newFromPng($p) : undef; $image || &error_exit(&text('preview_egd')); $width = $config{'width'} || $userconfig{'width'} || 300; $height = $image->height * (($width*1.0) / $image->width); $scaled = new GD::Image($width, $height); $scaled->copyResampled($image, 0, 0, 0, 0, $width, $height, $image->width, $image->height); print "Content-type: image/jpeg\n"; print "\n"; print $scaled->jpeg(); } sub error_exit { print "Content-type: text/plain\n"; print "Content-length: ",length($_[0]),"\n\n"; print $_[0]; exit; } file/index.cgi0100755000567100000120000000671310505651637013273 0ustar jcameronwheel#!/usr/local/bin/perl # index.cgi # Output HTML for the file manager applet require './file-lib.pl'; &ReadParse(); $theme_no_table = 1; if ($access{'uid'} < 0 && !defined(getpwnam($remote_user))) { &error(&text('index_eremote', $remote_user)); } # Display header, depending on how many modules the user has &read_acl(undef, \%acl); $mc = @{$acl{$base_remote_user}} == 1; $nolo = $ENV{'ANONYMOUS_USER'} || $ENV{'SSL_USER'} || $ENV{'LOCAL_USER'} || $ENV{'HTTP_USER_AGENT'} =~ /webmin/i; if ($gconfig{'gotoone'} && $mc == 1 && !$nolo) { &header($text{'index_title'}, "", undef, 0, 1); $w = 100; $h = 80; } else { &header($text{'index_title'}); $w = 100; $h = 100; if (!$tconfig{'inframe'}) { $return = ""; $returnhtml = &text('index_index', "$gconfig{'webprefix'}/")."

"; } } if ($gconfig{'referers_none'}) { # Because java applet HTTP requests don't always include a referer: # header, we need to use a DBM of trust keys to identify trusted applets if (defined(&seed_random)) { &seed_random(); } else { srand(time() ^ $$); } $trust = int(rand(1000000000)); local $now = time(); &open_trust_db(); foreach $k (keys %trustdb) { if ($now - $trustdb{$k} > 30*24*60*60) { delete($trustdb{$k}); } } $trustdb{$trust} = $now; dbmclose(%trustdb); } $sharing = $access{'uid'} ? 0 : 1; $mounting = !$access{'uid'} && &foreign_check("mount") ? 1 : 0; if ($in{'open'}) { $open = ""; } if ($session_id) { $session = ""; } if (!$access{'noconfig'}) { $config = ""; } $iconsize = int($config{'iconsize'}); $root = join(" ", @allowed_roots); $noroot = join(" ", @denied_roots); foreach $d (@disallowed_buttons) { $disallowed .= "\n"; } # Create parameters for custom colours foreach $k (keys %tconfig) { if ($k =~ /^applet_(.*)/) { $colours .= "\n"; } } # Extract classes from jar, if we can if ($config{'extract'} && &has_command("unzip") && !-r "$module_root_directory/FileManager.class") { system("unzip file.jar >/dev/null 2>&1"); } print < function upload(dir) { open("upform.cgi?dir="+escape(dir)+"&trust=$trust", "upload", "toolbar=no,menubar=no,scrollbar=no,width=450,height=200"); } function htmledit(file) { open("edit_html.cgi?file="+escape(file)+"&trust=$trust", "html", "toolbar=no,menubar=no,scrollbar=no,width=800,height=600"); } $config $session $open $return $disallowed $colours $text{'index_nojava'}

$returnhtml

EOF &footer(); file/CbImageChooser.class0100664000567100000120000000231210522475215015322 0ustar jcameronwheel-N - ./ . 01234 5 6 078 9 : ; < = >? @ABCimgLjava/awt/Image;imgsrcLjava/lang/String;imgwIimghbut LCbButton;filewinLCbImageFileWindow;(Ljava/awt/Image;)VCodeLineNumberTable%(Ljava/awt/Image;Ljava/lang/String;)VsetImageclick (LCbButton;)V SourceFileCbImageChooser.java #' #Djava/awt/BorderLayoutE FGCenterCbButtonChoose.. #H  IJ ('   ($ KL !"CbImageFileWindow #MCbImageChooserjava/awt/PanelCbButtonCallback()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V'(Ljava/lang/String;LCbButtonCallback;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;setText(Ljava/lang/String;)V(LCbImageChooser;)V  !"#$%#*+& #'%]5**Y**Y* Z W*+, , &%4('%Q)*+*,** * * & ()*%9+* * Y*W&#$%+,file/upform.cgi0100755000567100000120000000242710374217737013475 0ustar jcameronwheel#!/usr/local/bin/perl # upform.cgi # Display the upload form require './file-lib.pl'; $disallowed_buttons{'upload'} && &error($text{'ebutton'}); &ReadParse(); &popup_header($text{'upload_title'}); print "

\n"; print "\n"; print "\n"; print "
$text{'upload_title'}
\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($dostounix == 1) { print "\n"; print "\n"; } if ($unarchive == 1) { print "\n"; print "\n"; } print "
$text{'upload_file'}
$text{'upload_dir'}\n", "
$text{'upload_conv'} $text{'yes'}\n"; print " $text{'no'}
$text{'upload_zip'} $text{'upload_yes'}\n"; print " $text{'yes'}\n"; print " $text{'no'}
\n"; &popup_footer(); file/CbImageFileWindow.class0100664000567100000120000000707410522475215016001 0ustar jcameronwheel- Ono Np Nq rst n uvwx ry z N{ u|} n~   u r  N  N N N  y r N . . 3n . 3 3  N   N  D  H parentLCbImageChooser;imgp LScrollImage;urlLjava/awt/TextField;browse LCbButton;okcancelfiledlogLjava/awt/FileDialog;lastfileLjava/lang/String;(LCbImageChooser;)VCodeLineNumberTableclick (LCbButton;)Vdispose()Vaction%(Ljava/awt/Event;Ljava/lang/Object;)ZloadFile(Ljava/lang/String;)VloadURL SourceFileCbImageChooser.java _f ]^ QR java/awt/BorderLayout Center ScrollImage _ ST  GrayPaneljava/awt/FlowLayout _java/awt/LabelURL: _j java/awt/TextField ^ _ UVCbButtonBrowse.. _ WX Ok YXCancel ZXSouth f fChoose Image.. j efjava/awt/FileDialog Choose Image _ java/lang/StringBuffer j ij  http: ftp: kj   ErrorWindowFailed to load image  java/net/URL Failed to load image from java/net/MalformedURLException is not a valid URLCbImageFileWindow FixedFrameCbButtonCallbackCbImageChooserfilewinLCbImageFileWindow;java/awt/Container setLayout(Ljava/awt/LayoutManager;)VimgLjava/awt/Image;(Ljava/awt/Image;II)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V*(Ljava/awt/Component;)Ljava/awt/Component;imgsrc(Ljava/lang/String;I)V'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshowjava/awt/FramesetTitleUtilbodyLjava/awt/Color;recursiveBackground'(Ljava/awt/Component;Ljava/awt/Color;)VsetImage%(Ljava/awt/Image;Ljava/lang/String;)V&(Ljava/awt/Frame;Ljava/lang/String;I)Vjava/awt/DialoggetFile()Ljava/lang/String; getDirectoryappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toStringsetTextjava/awt/EventtargetLjava/lang/Object;java/awt/TextComponentgetTextjava/lang/String startsWith(Ljava/lang/String;)ZtkLjava/awt/Toolkit;java/awt/ToolkitgetImage$(Ljava/lang/String;)Ljava/awt/Image; waitForImage(Ljava/awt/Image;)Z(Ljava/awt/Image;)V (Ljava/net/URL;)Ljava/awt/Image; NOPQRSTUVWXYXZX[\]^_`aJ***+***Y* * Y* ȷ Z WYM,Y,YW,*Y*ZW,*Y*ZW,YW,*Y *Z!W,*Y"*Z#W*$,W*%*&*'(*)*bR30 456"7B8J9V:d;~<=>?@BCDEFcdaw+*!** +*,+*! +*# *-H+*@.Y*/0M,1,2)3Y4,56,267N*-8*-9b2 JKL*M1N9PERISPUiVqWvZefa- *:*b^_ `ghaf6+;*,* -?> *-@*-9bd ef%g-i2j4lijak?A+BM, ,C!DY3Y4E6+67FW* ,G*+bqrs1u9v>xkjaeAHY+IJM, ,C!DY3Y4K6+67FW* ,G*+MDY3Y4+6M67FWEHLb& }~8@EHIdlmfile/ScrollImage.class0100664000567100000120000000523610522475215014721 0ustar jcameronwheel- OP OQ -R .S -T -U -VW S XYZ[ \ -] X^_ -` -a -b -c -d ef eg *h *i j Ok lm ln lo p Oq lr Ost Ou vw vx ly -z e{| *} -~imgLjava/awt/Image;imgwIimghpwphvsc LCbScrollbar;hsccompute_scrollbarsZ(Ljava/awt/Image;)VCodeLineNumberTable(Ljava/awt/Image;II)VsetImagepaint(Ljava/awt/Graphics;)Vupdatereshape(IIII)Vmoved(LCbScrollbar;I)Vmoving minimumSize()Ljava/awt/Dimension; preferredSize SourceFileCbImageChooser.java <@ < :; 53 63java/awt/BorderLayout East CbScrollbar < 78 South 98 A= 01 23 43 K 3 3  F   BC EFjava/awt/Dimension < JK ScrollImagejava/awt/PanelCbScrollbarCallbackUtilgetWidth(Ljava/awt/Image;)I getHeight()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(ILCbScrollbarCallback;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;java/awt/Componentrepaintsizewidthheight setValues(III)VbodyLjava/awt/Color;java/awt/GraphicssetColor(Ljava/awt/Color;)VfillRect drawImage3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)ZgetValue()IfLjava/awt/Font;setFont(Ljava/awt/Font;)VtextfnmLjava/awt/FontMetrics;java/awt/FontMetrics stringWidth(Ljava/lang/String;)I drawString(Ljava/lang/String;II)V(II)V -./01234353637898:; <=>**+++?  <@>N*****Y * * Y* ZW** Y* ZW*+?" 3HMA=>\,*+*******? "'+BC>#**d=**d>*j***G*********++*M*(* +**dl*dl*WN+**t*t*W1+ !+"#:+$%dl$&dl'?Z&-4>K`m"DC>*+(?EF>7*)**? GH>!*? IH>?JK>(*Y**+?LK>*,?MNfile/htmlarea/0040755000567100000120000000000010374217006013256 5ustar jcameronwheelfile/htmlarea/dialog.js0100644000567100000120000000433410020710422015040 0ustar jcameronwheel// htmlArea v3.0 - Copyright (c) 2003-2004 interactivetools.com, inc. // This copyright notice MUST stay intact for use (see license.txt). // // Portions (c) dynarch.com, 2003-2004 // // A free WYSIWYG editor replacement for file/htmlarea/popups/insert_image.html0100644000567100000120000001235010020710424020124 0ustar jcameronwheel Insert Image
Insert Image
Image URL:
Alternate text:

Layout
Alignment:

Border thickness:
Spacing
Horizontal:

Vertical:

Image Preview:

file/htmlarea/popups/insert_table.html0100644000567100000120000001104110020710424020125 0ustar jcameronwheel Insert Table
Insert Table
Rows:
Cols: Width:

Layout
Alignment:

Border thickness:
Spacing
Cell spacing:

Cell padding:
file/htmlarea/popups/link.html0100644000567100000120000000730110020710424016413 0ustar jcameronwheel Insert/Modify Link
Insert/Modify Link
URL:
Title (tooltip):
Target:
file/htmlarea/popups/old-fullscreen.html0100644000567100000120000001064710020710424020403 0ustar jcameronwheel Fullscreen Editor

file/htmlarea/popups/old_insert_image.html0100644000567100000120000002010210020710424020754 0ustar jcameronwheel Insert Image
Image URL:
Alternate Text:
Layout
Spacing
Alignment:
Horizontal:
Border Thickness:
Vertical:
file/htmlarea/popups/select_color.html0100644000567100000120000007014210020710424020136 0ustar jcameronwheel Select Color
file/htmlarea/images/0040755000567100000120000000000010020710424014511 5ustar jcameronwheelfile/htmlarea/images/ed_about.gif0100644000567100000120000000012710020710424016757 0ustar jcameronwheelGIF89a!,.LTtNb[{hX-ffx |zeѾ RD@@$'3f;|hYPgݒ" Od%8<;file/htmlarea/images/ed_color_bg.gif0100644000567100000120000000026510020710424017436 0ustar jcameronwheelGIF89a {{{{! ,bpIJݭMZXːպ(P8-I @`z$`P@,wmzP4a+O= 0)*?|@+9BP')RT6#;file/htmlarea/images/ed_color_fg.gif0100644000567100000120000000025310020710424017437 0ustar jcameronwheelGIF89a {{{{! ,XPI+M8k+x9p`Cb]Wy 0$2PA rÀ ZGR [5ﭼ^;file/htmlarea/images/ed_copy.gif0100644000567100000120000000015610020710424016621 0ustar jcameronwheelGIF89a!,? '4l` b>"f>*\ЛyZPal!I(;file/htmlarea/images/ed_custom.gif0100644000567100000120000000010310020710424017151 0ustar jcameronwheelGIF89a!,@J%qqxIj;file/htmlarea/images/ed_cut.gif0100644000567100000120000000013310020710424016435 0ustar jcameronwheelGIF89a!,,Dqex\m`!@F UˮM*,;R ;file/htmlarea/images/ed_delete.gif0100644000567100000120000000013210020710424017103 0ustar jcameronwheelGIF89a!,+`qXS؊t`#>IIW cT  ;file/htmlarea/images/ed_format_bold.gif0100644000567100000120000000011210020710424020127 0ustar jcameronwheelGIF89a!,!20]ƗQ]JZ"L3;file/htmlarea/images/ed_format_italic.gif0100644000567100000120000000011510020710424020457 0ustar jcameronwheelGIF89a{{{!,3,vE(XAe G;file/htmlarea/images/ed_format_strike.gif0100644000567100000120000000011610020710424020514 0ustar jcameronwheelGIF89a!,% "sm5IPY#f=[J"vTL;file/htmlarea/images/ed_format_sub.gif0100644000567100000120000000011610020710424020004 0ustar jcameronwheelGIF89a!,B0 YU!dyj: M;file/htmlarea/images/ed_format_sup.gif0100644000567100000120000000011510020710424020021 0ustar jcameronwheelGIF89a!,m,a^xƶ ;file/htmlarea/images/ed_format_underline.gif0100644000567100000120000000012510020710424021200 0ustar jcameronwheelGIF89a{{{!,& b&Ov^uL'.7PD#]:];file/htmlarea/images/ed_help.gif0100644000567100000120000000010610020710424016572 0ustar jcameronwheelGIF89a!, Ns_QAu1jɶR;file/htmlarea/images/ed_hr.gif0100644000567100000120000000010610020710424016253 0ustar jcameronwheelGIF89a333!,>VH;file/htmlarea/images/ed_html.gif0100644000567100000120000000011310020710424016604 0ustar jcameronwheelGIF89a!,"0sWSm}Iy%xR):LG;file/htmlarea/images/ed_image.gif0100644000567100000120000000022410020710424016725 0ustar jcameronwheelGIF89a!,YxPA ` ah *[V/!VA(ֿ6B7YH"<)LVz!AL|z-ޝ/j>;file/htmlarea/images/ed_indent_less.gif0100644000567100000120000000012710020710424020154 0ustar jcameronwheelGIF89a!,(믂lJ@dfVFbxP;file/htmlarea/images/ed_indent_more.gif0100644000567100000120000000012710020710424020150 0ustar jcameronwheelGIF89a!,(믂lJ@"dfvGfxغP;file/htmlarea/images/ed_left_to_right.gif0100644000567100000120000000013110020710424020471 0ustar jcameronwheelGIF89a!,*S D^UGmJ7jWyZ)tύ);file/htmlarea/images/ed_link.gif0100644000567100000120000000014110020710424016576 0ustar jcameronwheelGIF89a!,2Vc+84Sy6_ gPL:d~+e~L2 ;file/htmlarea/images/ed_list_bullet.gif0100644000567100000120000000012010020710424020160 0ustar jcameronwheelGIF89a!,!&{ь}!FjЇdvLs;file/htmlarea/images/ed_list_num.gif0100644000567100000120000000012210020710424017472 0ustar jcameronwheelGIF89a!,#3Z&tr{}u]hHVX;file/htmlarea/images/ed_paste.gif0100644000567100000120000000021310020710424016755 0ustar jcameronwheelGIF89a!,PhЕYs \YPlcbR^ Gb.@Oǟ'0" FA*TQA Jn+;file/htmlarea/images/ed_redo.gif0100644000567100000120000000012010020710424016567 0ustar jcameronwheelGIF89a!,!@J4OM-acr'@ L;file/htmlarea/images/ed_right_to_left.gif0100644000567100000120000000013010020710424020470 0ustar jcameronwheelGIF89a!,) p pF5~͙ ,d~R;file/htmlarea/images/ed_save.gif0100644000567100000120000000021710020710424016603 0ustar jcameronwheelGIF89a܀!,TXPI+mD 0qT,j*J[Ƹfe6`H,noMQ(JyI*hXh<;file/htmlarea/images/ed_show_border.gif0100644000567100000120000000015010020710424020156 0ustar jcameronwheelGIF89a3!,9c`ؼw,h޸蔥g:,x+]UXe;file/htmlarea/images/ed_splitcel.gif0100644000567100000120000000021710020710424017464 0ustar jcameronwheelGIF89a!,TH0I#Hzhdupj _cȤP\lPL٬\j Ն_9x%;file/htmlarea/images/ed_undo.gif0100644000567100000120000000012110020710424016604 0ustar jcameronwheelGIF89a!,"c 4EVy& UI*LL;file/htmlarea/images/fullscreen_maximize.gif0100644000567100000120000000014110020710424021236 0ustar jcameronwheelGIF89a!,8Xg ]pgTƉճyryj_pԄ]XPVq,;file/htmlarea/images/fullscreen_minimize.gif0100644000567100000120000000014110020710424021234 0ustar jcameronwheelGIF89a!,8sӤyzmXFtuȺ Ik 8+p'4Y](;file/htmlarea/images/insert_table.gif0100644000567100000120000000017110020710424017647 0ustar jcameronwheelGIF89a3!,>HI *{ǒ'r` BY `8|@Z&GXHWfՊe:Xl;file/CbScrollbarCallback.class0100664000567100000120000000024410522475215016317 0ustar jcameronwheel-  moved(LCbScrollbar;I)Vmoving SourceFileCbScrollbar.javaCbScrollbarCallbackjava/lang/Objectfile/upload.cgi0100755000567100000120000000413110374217755013443 0ustar jcameronwheel#!/usr/local/bin/perl # upload.cgi # Upload a file require './file-lib.pl'; $disallowed_buttons{'upload'} && &error($text{'ebutton'}); &popup_header(); &ReadParseMime($upload_max); $realdir = &unmake_chroot($in{'dir'}); if (!$in{'file_filename'}) { print "

$text{'upload_efile'}

\n"; } elsif (!-d $realdir) { print "

$text{'upload_edir'}

\n"; } else { $in{'file_filename'} =~ /([^\\\/]+)$/; $path = "$in{'dir'}/$1"; $realpath = "$realdir/$1"; if (-e $realpath) { # File exists .. ask the user if he is sure &switch_acl_uid(); $temp = &tempname(); &open_tempfile(TEMP, ">$temp"); if ($dostounix == 1 && $in{'dos'}) { $in{'file'} =~ s/\r\n/\n/g; } &print_tempfile(TEMP, $in{'file'}); &close_tempfile(TEMP); print "

\n"; foreach $i (keys %prein) { print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print &text('upload_already', "$path"),"

\n"; print "\n"; print "\n"; print "

\n"; } else { # Go ahread and do it! &webmin_log("upload", undef, $path); &switch_acl_uid(); if ($access{'ro'} || !&can_access($path)) { print "

",&text('upload_eperm', $path),"

\n"; } elsif (-l $path && !&must_follow($realpath)) { print "

",&text('upload_elink', $path),"

\n"; } elsif (!&open_tempfile(FILE, ">$realpath", 1)) { print "

",&text('upload_ewrite', $path, $!),"

\n"; } else { if ($dostounix == 1 && $in{'dos'}) { $in{'file'} =~ s/\r\n/\n/g; } &print_tempfile(FILE, $in{'file'}); &close_tempfile(FILE); &post_upload($path, $in{'dir'}, $in{'zip'}); } } } &popup_footer(); file/CbScrollbar.class0100664000567100000120000001032010522475215014676 0ustar jcameronwheel- 5r 6s 5t uv 5w ux 5y uz 5{ u| 5} u~ 5 u 5 u 5 5 5 5   5 5 5 5 5 5 / / 5  5 5 5 5 5  / 5 5 5 VERTICALI ConstantValue HORIZONTALcallbackLCbScrollbarCallback;insideZindentorientvaluelvisiblenumlineinclc1Ljava/awt/Color;lc2lc3hc1hc2hc3bcy1y2x1x2dragarrow1LCbScrollbarArrow;arrow2(ILCbScrollbarCallback;)VCodeLineNumberTable(IIIILCbScrollbarCallback;)V setValues(III)VgetValue()IsetValue(I)V checkValue()Vpaint(Ljava/awt/Graphics;)V arrowClickreshape(IIII)V preferredSize()Ljava/awt/Dimension; minimumSize mouseDown(Ljava/awt/Event;II)Z mouseDragmouseUp SourceFileCbScrollbar.java W[ Wc F8 H GH H IH H JH H KH H LH H MH H NH \] B8 => CbScrollbarArrow W TU VU C8 D8 E8 bc c j 8 8 ?@ h h O8 P8 A@ Q8 R8 ghjava/awt/Dimension W ij fa S8  CbScrollbarjava/awt/PanelUtil light_edgebody dark_edge light_edge_hibody_hi dark_edge_hidark_bgjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(LCbScrollbar;I)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/awt/Componentrepaintsizewidthheightjava/awt/GraphicssetColor(Ljava/awt/Color;)VfillRectdrawLineCbScrollbarCallbackmoved(II)Vmoving!56789:;89<=>?@A@B8C8D8E8F8GHIHJHKHLHMHNHO8P8Q8R8S8TUVUWXY& *,Z  W[Y***** * * *******,**Y*ZW**Y*ZW)**Y*ZW**Y*ZWZ>$ 3:%B&G'M(R)Y*l+./1\]Y[+***** ****Z:; <=">&?*@^_Y*ZB`aY2***ZFG H IbcYM-* * ***d***dZMN,OdeY[ ** !=* ">*#*$*$6 * *: * *: ** :+*%+&+%+d'+d'+%+ddd'+ddd'*hd6**h*l`(***`h*l`d)+%+*(d*)*(d&+**%+*(d*('+*(*)d'+**%+d*)dd*('+d*)d*)d' +d*)dd*(`'+d*)d*)d'*hd6**h*l`+***`h*l`d,+%+*+*,*+dd&+**%+*+*+d'+*+*,d'+**%+*,dd*+d'+*,dd*,d'-+*,dd*+`d'+*,dd*,d'Z*STU:V^WpXxYZ[\]_`abcde"f2gBhTihj|klmpqrstuvw%x5yGz[{o|t}~faY^.*=*Y`*****-*Z)-ghYb*.*)*dd.*dddd.**dd.*dddd.*Z" 6G]aijY9!*/Yd0/Yd0ZkjY*1ZlmY*@*(**t2f*)**2S****(d3*=*+**t2)*,**2****+d3*Z2 .3=DXkpz~nmY *** !6* "6*6*(hd6*3dd6**hl%hd6*3dd6**hl*****4***Z6 &:K_mqzomYN"********-Z  pqfile/CbScrollbarArrow.class0100664000567100000120000000362510522475215015723 0ustar jcameronwheel-x 6 7 8 9: ;< ;= > ?@ ?A ?B ?C ?D ?E ?F GH GI GJ K GL 9MN O P Q R ?S TUVWXmodeI scrollbar LCbScrollbar;insideZindentthLjava/lang/Thread;(LCbScrollbar;I)VCodeLineNumberTablepaint(Ljava/awt/Graphics;)V mouseDown(Ljava/awt/Event;II)ZmouseUprun()V SourceFileCbScrollbar.java )3 "# !Y Z[\ ]! ^! $%_ `a ba ca da ea fa gah ij kl mn &% ol p3java/lang/Thread )q '( r3 s3 tu vwjava/lang/ExceptionCbScrollbarArrowjava/awt/Canvasjava/lang/Runnablejava/awt/Componentsize()Ljava/awt/Dimension;java/awt/Dimensionwidthheight CbScrollbarhc1Ljava/awt/Color;lc1hc2lc2hc3lc3bcjava/awt/GraphicssetColor(Ljava/awt/Color;)VfillRect(IIII)V fillPolygon([I[II)VdrawLinerepaint(Ljava/lang/Runnable;)Vstartstop arrowClick(I)Vsleep(J)V  !"#$%&%'()*+3**+*, -.+ *=*>* * * :* * * :* * * :+*+ : :*,lOdOOOdOdO**OlOdOOdOO`*,OdOdOlOdOO/*'OdOOOlOdO+++*+....+*+....,j*D^iq {   $7= F!X"l#~$%/0+?***Y*Z,)* +,10+=*** *,12 3423+T(<**pMd<!,;=>"?45file/ErrorWindow.class0100664000567100000120000000272110522475215014775 0ustar jcameronwheel-r $01 0 234 567 89 : ; <= > ? 2@A 2BC 0D 5EF GH IJ IKL MN OP OQ IRSTUok LCbButton;(Ljava/lang/String;)VCodeLineNumberTableclick (LCbButton;)V SourceFileErrorWindow.java (Vjava/awt/BorderLayoutW XY BorderPanel (Zjava/util/StringTokenizer ([java/awt/GridLayout \] (^ _`java/awt/Label ab () cdCenter ce GrayPaneljava/awt/FlowLayoutCbButtonOk (fSouthg hV iVErrorj k)l mn op qV ErrorWindow FixedFrameCbButtonCallback()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(I)V'(Ljava/lang/String;Ljava/lang/String;)V countTokens()I(II)V hasMoreTokens()Z nextToken()Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshowjava/awt/FramesetTitleUtilbodyLjava/awt/Color;recursiveBackground'(Ljava/awt/Component;Ljava/awt/Color;)Vdispose #$%&'()***YYMY+ N, Y-  - ,Y-W*,WY:YY*W*W**** !+F    # 3:MU^k{,-*!*"+ ./file/FileManager.java0100644000567100000120000034200410522475213014477 0ustar jcameronwheelimport java.awt.*; import java.awt.event.*; import java.io.*; import java.applet.*; import java.net.*; import java.util.*; import netscape.javascript.JSObject; // A java filemanager that allows the user to manipulate files on the // Webmin server. Layout is similar to the windows explorer - directory // tree on the left, files on the right, action buttons on the top. public class FileManager extends Applet implements CbButtonCallback, HierarchyCallback, MultiColumnCallback { // top buttons CbButton ret_b, config_b, down_b, edit_b, html_b, refresh_b, props_b, copy_b, cut_b, paste_b, delete_b, new_b, upload_b, mkdir_b, makelink_b, rename_b, share_b, mount_b, search_b, acl_b, attr_b, ext_b, preview_b, extract_b; // Directory tree Hierarchy dirs; FileNode root; Hashtable nodemap = new Hashtable(); // File list MultiColumn files; TextField pathname; CbButton history_b; RemoteFile showing_files; RemoteFile showing_list[]; Vector history_list = new Vector(); // Copying and pasting RemoteFile cut_buffer[]; boolean cut_mode; static final String monmap[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; String accroot[]; String accnoroot[]; Hashtable lang = new Hashtable(); Hashtable stab = new Hashtable(), ntab = new Hashtable(); boolean sambamode; int nfsmode; String trust; String extra; String images; int iconsize; boolean got_filesystems, acl_support, attr_support, ext_support; Hashtable mounts = new Hashtable(); Vector fslist = new Vector(); boolean read_only = false; // Standard font for all text Font fixed; // Font for button labels Font small_fixed; // Full session cookie String session; // Archive parameter String archive; // Chroot directory for tree String chroot; // File attributes that can be edited boolean can_perms, can_users; // Symlimks are automatically followed boolean follow_links; // Can search file contents boolean search_contents; public void init() { setLayout(new BorderLayout()); // Create fonts from specified size fixed = make_font("fixed", 12); small_fixed = make_font("small_fixed", 10); Util.setFont(small_fixed); StringTokenizer tok = new StringTokenizer(getParameter("root"), " "); accroot = new String[tok.countTokens()]; for(int i=0; tok.hasMoreTokens(); i++) accroot[i] = tok.nextToken(); if (getParameter("noroot") != null) { tok = new StringTokenizer(getParameter("noroot"), " "); accnoroot = new String[tok.countTokens()]; for(int i=0; tok.hasMoreTokens(); i++) accnoroot[i] = tok.nextToken(); } else { accnoroot = new String[0]; } trust = getParameter("trust"); session = getParameter("session"); extra = getParameter("extra"); if (extra == null) extra = ""; images = getParameter("images"); if (images == null) images = "images"; iconsize = Integer.parseInt(getParameter("iconsize")); archive = getParameter("doarchive"); if (archive == null) archive = "0"; chroot = getParameter("chroot"); if (chroot == null) chroot = "/"; String can_perms_str = getParameter("canperms"); can_perms = can_perms_str == null || !can_perms_str.equals("0"); String can_users_str = getParameter("canusers"); can_users = can_users_str == null || !can_users_str.equals("0"); String search_contents_str = getParameter("contents"); search_contents = search_contents_str == null || !search_contents_str.equals("0"); // download language strings String l[] = get_text("lang.cgi"); if (l.length < 1 || l[0].indexOf('=') < 0) { String err = "Failed to get language list : "+join_array(l); new ErrorWindow(err); throw new Error(err); } for(int i=0; i= 0) lang.put(l[i].substring(0, eq), l[i].substring(eq+1)); } // list samba file shares String s[] = get_text("list_shares.cgi"); if (s[0].equals("1")) { for(int i=1; i 0 || s == 0 && ss.length > 1) { // At least one non-.. file was selected boolean parentsel = false; for(int i=0; i 4) new ErrorWindow(text("edit_enormal")); else new EditorWindow(f, this); } else if (b == html_b) { // Open a browser window with an HTML editor if (f == null) return; if (f.type == 0 || f.type > 4) new ErrorWindow(text("edit_enormal")); else { try { JSObject win = JSObject.getWindow(this); String params[] = { f.path }; win.call("htmledit", params); } catch(Exception e) { new ErrorWindow(text("html_efailed", e.getMessage())); } } } else if (b == down_b) { // Force download of the selected file if (f == null) return; download_file(f); } else if (b == preview_b) { // Open preview window for selected file if (f == null) return; if (f.type == RemoteFile.DIR) new ErrorWindow(text("preview_eimage")); else new PreviewWindow(this, f); } else if (b == refresh_b) { // Refesh the selected directory (and thus any subdirs) if (d == null) return; d.refresh(); show_files(d.file); } else if (b == props_b) { // Display the properties window if (f == null) return; new PropertiesWindow(f, this); } else if (b == acl_b) { // Display the ACL window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.acls) new ACLWindow(this, f); else new ErrorWindow(text("eacl_efs", filefs.mount)); } else if (b == attr_b) { // Display the attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.attrs) new AttributesWindow(this, f); else new ErrorWindow(text("attr_efs", filefs.mount)); } else if (b == ext_b) { // Display EXT attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.ext) new EXTWindow(this, f); else new ErrorWindow(text("ext_efs", filefs.mount)); } else if (b == copy_b) { // Copy the selected files if (f == null) return; cut_buffer = ff; cut_mode = false; } else if (b == cut_b) { // Cut the selected file if (f == null) return; cut_buffer = ff; cut_mode = true; } else if (b == paste_b) { // Paste the copied file if (cut_buffer == null) { new ErrorWindow(text("paste_ecopy")); return; } // Check for existing file clashes // XXX // Go through all the files to paste for(int i=0; i 0) { new HistoryWindow(this); } } } boolean under_root_dir(String p, String roots[]) { boolean can = false; int l = p.length(); for(int r=0; r= rl && p.substring(0, rl).equals(roots[r])) can = true; else if (l < rl && roots[r].substring(0, l).equals(p)) can = true; } return can; } // Download some file to the user's browser, if possible void download_file(RemoteFile f) { if (f.type == RemoteFile.DIR && !archive.equals("0")) new DownloadDirWindow(this, f); else if (f.type == RemoteFile.DIR || f.type > 4) new ErrorWindow(text("view_enormal2")); else open_file_window(f, true, 0); } // Returns the object for some directory, or null if not found. RemoteFile find_directory(String p, boolean fill) { boolean can = under_root_dir(p, accroot) && !under_root_dir(p, accnoroot); if (!can) { new ErrorWindow(text("find_eaccess", p)); return null; } FileNode posnode = root; RemoteFile pos = posnode.file; StringTokenizer tok = new StringTokenizer(p, "/"); while(tok.hasMoreTokens()) { String fn = tok.nextToken(); if (fn.equals("")) continue; RemoteFile fl[] = pos.list(); if (fl == null) return null; if (fill) { posnode.open = true; posnode.fill(); } boolean found = false; for(int i=0; i= l+1 && f.path.substring(0, l+1).equals(fs.mount+"/")) || fs.mount.equals("/")) { filefs = fs; } } return filefs; } public boolean action(Event e, Object o) { if (e.target == pathname) { // A new path was entered.. cd to it String p = pathname.getText().trim(); if (p.equals("")) return true; find_directory(p, true); // Add to the history if (!history_list.contains(p)) { history_list.insertElementAt(p, 0); } return true; } return false; } // singleClick // Called on a single click on a list item public void singleClick(MultiColumn list, int num) { } // doubleClick // Called upon double-clicking on a list item public void doubleClick(MultiColumn list, int num) { if (num == 0) { // Go to parent directory if (showing_files.directory != null) { ((FileNode)nodemap.get(showing_files)).open = false; show_files(showing_files.directory); dirs.select((FileNode)nodemap.get(showing_files)); dirs.redraw(); } return; } RemoteFile d = showing_list[num-1]; if (d.type == 0) { // Open this directory FileNode pn = (FileNode)nodemap.get(showing_files); pn.fill(); pn.open = true; FileNode fn = (FileNode)nodemap.get(d); if (show_files(d)) { fn.fill(); fn.open = true; dirs.select(fn); dirs.redraw(); } } else if (d.type <= 4) { // Direct the browser to this file open_file_window(d, list.last_event.shiftDown(), 0); } } // Called when the user clicks on a column heading so that it can // be sorted. public void headingClicked(MultiColumn list, int col) { if (col == 0) return; // ignore click on icon column? if (col == list.sortcol) { list.sortingArrow(col, list.sortdir == 2 ? 1 : 2); } else { list.sortingArrow(col, 1); } // Re-show the list in the new order, but with the same files selected int ss[] = files.allSelected(); RemoteFile ssf[] = new RemoteFile[ss.length]; for(int i=0; i 0) { new ErrorWindow(text("eopen", l[0])); return; } // Open for real if (download) { getAppletContext().showDocument( new URL(getDocumentBase(), urlstr)); } else { getAppletContext().showDocument( new URL(getDocumentBase(), urlstr), "show"); } } catch(Exception e) { } } static String urlize(String s) { StringBuffer rv = new StringBuffer(); for(int i=0; i= 128) rv.append("%"+Integer.toString(c, 16)); else rv.append(c); } return rv.toString(); } static String un_urlize(String s) { StringBuffer rv = new StringBuffer(); for(int i=0; i= 0) { rv = rv.substring(0, idx)+ ns+rv.substring(idx+os.length()); pos = idx+ns.length()+1; } return rv; } } // A node in the directory tree class FileNode extends HierarchyNode { FileManager parent; RemoteFile file; boolean known; FileNode(RemoteFile file) { this.file = file; parent = file.parent; setimage(); ch = new Vector(); text = file.name; parent.nodemap.put(file, this); } // Create the nodes for subdirectories void fill() { if (!known) { RemoteFile l[] = file.list(); if (l == null) return; ch.removeAllElements(); for(int i=0; i 0) { ch.insertElementAt(n, i); break; } } } void setimage() { im = parent.get_image(file.shared() && file.mounted() ? "smdir.gif" : file.shared() && file.mountpoint() ? "sudir.gif" : file.shared() ? "sdir.gif" : file.mounted() ? "mdir.gif" : file.mountpoint() ? "udir.gif" : "dir.gif"); } // Forces a re-load from the server void refresh() { known = false; file.list = null; fill(); } } class RemoteFile { static final int DIR = 0; static final int TEXT = 1; static final int IMAGE = 2; static final int BINARY = 3; static final int UNKNOWN = 4; static final int SYMLINK = 5; static final int DEVICE = 6; static final int PIPE = 7; static final String[] tmap = { "dir.gif", "text.gif", "image.gif", "binary.gif", "unknown.gif", "symlink.gif", "device.gif", "pipe.gif" }; FileManager parent; String path, name; int type; String user, group; long size; int perms; long modified; String linkto; RemoteFile list[]; RemoteFile directory; // Parse a line of text to a file object RemoteFile(FileManager parent, String line, RemoteFile d) { this.parent = parent; StringTokenizer tok = new StringTokenizer(line, "\t"); if (tok.countTokens() < 7) { String err = "Invalid file line : "+line; new ErrorWindow(err); throw new Error(err); } path = tok.nextToken(); path = parent.replace_str(path, "\\t", "\t"); path = parent.replace_str(path, "\\\\", "\\"); type = Integer.parseInt(tok.nextToken()); user = tok.nextToken(); group = tok.nextToken(); size = Long.parseLong(tok.nextToken()); perms = Integer.parseInt(tok.nextToken()); modified = Long.parseLong(tok.nextToken())*1000; if (type == 5) linkto = tok.nextToken(); directory = d; if (path.equals("/")) name = "/"; else name = path.substring(path.lastIndexOf('/')+1); } // Create a new, empty file object RemoteFile() { } // Returns a list of files in this directory RemoteFile[] list() { if (list == null) { String l[] = parent.get_text("list.cgi?dir="+ parent.urlize(path)); if (l[0].length() > 0) { //list = new RemoteFile[0]; // Error reading the remote directory! new ErrorWindow(parent.text("list_edir", path, l[0])); list = null; } else { list = new RemoteFile[l.length-3]; for(int i=3; i 0 && offset == 0) { nlist[i] = f; offset++; } nlist[i+offset] = list[i]; } if (offset == 0) nlist[list.length] = f; list = nlist; } void delete(RemoteFile f) { RemoteFile nlist[] = new RemoteFile[list.length-1]; for(int i=0,j=0; i= 0) { // Length is known buf = new byte[uc.getContentLength()]; int got = 0; while(got < buf.length) got += is.read(buf, got, buf.length-got); } else { // Length is unknown .. read till the end buf = new byte[0]; while(true) { byte data[] = new byte[16384]; int got; try { got = is.read(data); } catch(EOFException ex) { break; } if (got <= 0) break; byte nbuf[] = new byte[buf.length + got]; System.arraycopy(buf, 0, nbuf, 0, buf.length); System.arraycopy(data, 0, nbuf, buf.length, got); buf = nbuf; } } String s = new String(buf, 0); if (s.indexOf("\r\n") != -1) { dosmode.setState(true); s = FileManager.replace_str(s, "\r\n", "\n"); } edit.setText(s); is.close(); file.size = buf.length; } catch(Exception e) { e.printStackTrace(); } } // Creating a new file EditorWindow(String f, FileManager p) { super(500, 300); filemgr = p; makeUI(true); setTitle(filemgr.text("edit_title2")); name.setText(f.equals("/") ? f : f+"/"); name.select(name.getText().length(), name.getText().length()); } void makeUI(boolean add_name) { setLayout(new BorderLayout()); if (add_name) { Panel np = new Panel(); np.setLayout(new BorderLayout()); np.add("West", new Label(filemgr.text("edit_filename"))); np.add("Center", name = new TextField()); name.setFont(filemgr.fixed); add("North", np); } add("Center", edit = new TextArea(20, 80)); edit.setFont(filemgr.fixed); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(dosmode = new Checkbox("DOS mode")); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(find_b = new CbButton(filemgr.get_image("find.gif"), filemgr.text("edit_find"), CbButton.LEFT, this)); bot.add(new Label(" ")); bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); bot.add(saveclose_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("edit_saveclose"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("close"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == save_b || b == saveclose_b) { RemoteFile par = null, already = null; String save_path; if (file == null) { // Locate the filemgr directory save_path = filemgr.trim_path(name.getText()); int sl = save_path.lastIndexOf('/'); par = filemgr.find_directory( save_path.substring(0, sl), false); if (par == null) return; already = par.find(save_path.substring(sl+1)); if (already != null && (already.type == 0 || already.type == 5)) { new ErrorWindow( filemgr.text("edit_eover", save_path)); return; } } else save_path = file.path; // Save the file back again String s = edit.getText(), line; s = FileManager.replace_str(s, "\r\n", "\n"); try { if (dosmode.getState()) { // Convert to DOS newlines s = FileManager.replace_str(s, "\n", "\r\n"); } URL u = new URL(filemgr.getDocumentBase(), "save.cgi"+filemgr.urlize(save_path)+ "?rand="+System.currentTimeMillis()+ "&trust="+filemgr.trust+ "&length="+s.length()+ filemgr.extra); URLConnection uc = u.openConnection(); uc.setRequestProperty("Content-type", "text/plain"); filemgr.set_cookie(uc); uc.setDoOutput(true); OutputStream os = uc.getOutputStream(); byte buf[] = new byte[s.length()]; s.getBytes(0, buf.length, buf, 0); os.write(buf); os.close(); BufferedReader is = new BufferedReader(new InputStreamReader( uc.getInputStream())); String err = is.readLine(); if (err.length() > 0) { new ErrorWindow( filemgr.text("edit_esave", err)); is.close(); return; } line = is.readLine(); is.close(); } catch(Exception e) { e.printStackTrace(); return; } if (file == null) { // Create and insert or replace the file object file = new RemoteFile(filemgr, line, par); if (already != null) { // A file with this name exists already.type = file.type; already.user = file.user; already.group = file.group; already.size = file.size; already.perms = file.perms; already.modified = file.modified; } else { // Add to the list par.add(file); } } else { file.size = s.length(); file.modified = System.currentTimeMillis(); } filemgr.show_files(filemgr.showing_files); if (b == saveclose_b) dispose(); } else if (b == cancel_b) { // Just close dispose(); } else if (b == goto_b) { // Open a dialog asking which line to go to if (goto_window != null) goto_window.toFront(); else goto_window = new GotoWindow(this); } else if (b == find_b) { // Open the search (and replace) dialog if (find_window != null) find_window.toFront(); else find_window = new FindReplaceWindow(this); } } public void dispose() { super.dispose(); if (goto_window != null) goto_window.dispose(); if (find_window != null) find_window.dispose(); } } class GotoWindow extends FixedFrame implements CbButtonCallback { EditorWindow editor; FileManager filemgr; TextField line; CbButton goto_b, cancel_b; GotoWindow(EditorWindow e) { editor = e; filemgr = e.filemgr; setLayout(new BorderLayout()); add("West", new Label(filemgr.text("edit_gotoline"))); add("Center", line = new TextField(10)); line.setFont(filemgr.fixed); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("close"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == goto_b) { // Go to the chose line, if it exists int lnum; try { lnum = Integer.parseInt(line.getText()); } catch(Exception e) { return; } String txt = editor.edit.getText(); int c, l = 0; for(c=0; c= 0) { String sel = edittxt.substring(st, en); if (sel.equals(findtxt)) { // Replace the selected editor.edit.setText(edittxt.substring(0, st)+ replace.getText()+ edittxt.substring(en)); editor.edit.select(st, st); return; } } click(find_b); } else if (b == all_b) { // Replace all occurrances of the text in the editor int pos = 0; int len = findtxt.length(); int st = editor.edit.getSelectionStart(), en = editor.edit.getSelectionEnd(); while((pos = edittxt.indexOf(findtxt, pos)) != -1) { edittxt = edittxt.substring(0, pos)+ replace.getText()+ edittxt.substring(pos+len); pos += len; } editor.edit.setText(edittxt); editor.edit.select(st, en); // put back old selection } else if (b == cancel_b) { // Just close the window dispose(); } } public void dispose() { super.dispose(); editor.find_window = null; } } class PropertiesWindow extends FixedFrame implements CbButtonCallback { RemoteFile file; FileManager filemgr; CbButton save_b, cancel_b, size_b; TextField linkto; TextField user, group; Checkbox setuid, setgid; PermissionsPanel user_p, group_p, other_p; Checkbox sticky; Choice rec_mode; TextField octal; TextField bytes, files, dirs; PropertiesWindow(RemoteFile f, FileManager p) { file = f; filemgr = p; // Create UI setTitle(f.path); setLayout(new BorderLayout()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); if (file.type == 0) { bot.add(size_b = new CbButton(filemgr.get_image("refresh.gif"), filemgr.text("info_getsize"), CbButton.LEFT, this)); } if (filemgr.can_perms || filemgr.can_users) { bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); } bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Panel mid = new Panel(); mid.setLayout(new BorderLayout()); TabbedPanel tab = null; add("Center", mid); // Create file details section Panel det = new LinedPanel(filemgr.text("info_file")), dl = new Panel(), dr = new Panel(); setup_leftright(det, dl, dr); add_item(filemgr.text("info_path"), new Label(file.path), dl, dr); add_item(filemgr.text("info_type"), new Label(filemgr.text("file_type"+file.type)), dl, dr); add_item(filemgr.text("info_size"), new Label(String.valueOf(file.size)),dl,dr); add_item(filemgr.text("info_mod"), new Label(String.valueOf(new Date(file.modified))), dl, dr); if (file.type == 5) { add_item(filemgr.text("info_link"), linkto = new TextField(file.linkto, 30), dl, dr); linkto.setFont(filemgr.fixed); } mid = add_panel(mid, det); if (filemgr.can_perms) { // Create permissions section Panel per = new LinedPanel(filemgr.text("info_perms")), pl = new Panel(), pr = new Panel(); setup_leftright(per, pl, pr); add_item(filemgr.text("info_user"), user_p = new PermissionsPanel(file, 64, filemgr), pl, pr); add_item(filemgr.text("info_group"), group_p = new PermissionsPanel(file, 8, filemgr), pl, pr); add_item(filemgr.text("info_other"), other_p = new PermissionsPanel(file, 1, filemgr), pl,pr); if (file.type == 0) { add_item(filemgr.text("info_sticky"), sticky = new Checkbox(filemgr.text("info_sticky2")), pl,pr); sticky.setState((file.perms&01000) != 0); } add_item(filemgr.text("info_octal"), octal = new TextField(4), pl, pr); octal.setFont(filemgr.fixed); octal.setEditable(false); mid = add_panel(mid, per); } if (filemgr.can_users) { // Create ownership section Panel own = new LinedPanel(filemgr.text("info_own")), ol = new Panel(), or = new Panel(); setup_leftright(own, ol, or); add_item(filemgr.text("info_user"), user = new TextField(file.user, 10), ol, or); user.setFont(filemgr.fixed); if (file.type != 0) { add_item(filemgr.text("info_setuid"), setuid = new Checkbox(filemgr.text("info_setuid2")), ol, or); setuid.setState((file.perms & 0x800) != 0); } add_item(filemgr.text("info_group"), group = new TextField(file.group, 10), ol, or); group.setFont(filemgr.fixed); if (file.type == 0) add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid2")), ol, or); else add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid3")), ol, or); setgid.setState((file.perms & 0x400) != 0); mid = add_panel(mid, own); } if (file.type == 0) { // Create directory size section, initially empty Panel szp = new LinedPanel(filemgr.text("info_sizeheader")), sl = new Panel(), sr = new Panel(); setup_leftright(szp, sl, sr); add_item(filemgr.text("info_bytes"), bytes = new TextField("", 10), sl, sr); bytes.setFont(filemgr.fixed); bytes.setEditable(false); add_item(filemgr.text("info_files"), files = new TextField("", 10), sl, sr); files.setFont(filemgr.fixed); files.setEditable(false); add_item(filemgr.text("info_dirs"), dirs = new TextField("", 10), sl, sr); dirs.setFont(filemgr.fixed); dirs.setEditable(false); mid = add_panel(mid, szp); } if (file.type == 0 && (filemgr.can_perms || filemgr.can_users)) { // Create recursion section Panel rec = new LinedPanel(filemgr.text("info_apply")); rec.setLayout(new BorderLayout()); rec_mode = new Choice(); for(int i=1; i<=3; i++) rec_mode.addItem(filemgr.text("info_apply"+i)); rec.add("Center", rec_mode); mid = add_panel(mid, rec); } set_octal(); Util.recursiveBody(this); pack(); show(); } Panel add_panel(Panel p, Component c) { p.add("North", c); Panel np = new Panel(); np.setLayout(new BorderLayout()); p.add("Center", np); return np; } public void click(CbButton b) { if (b == save_b) { // Update the file int perms = get_perms(); String user_str = user != null ? user.getText() : null; String group_str = group != null ? group.getText() : null; int rec = 0; if (file.type == 0 && rec_mode != null) rec = rec_mode.getSelectedIndex(); String rv[] = filemgr.get_text( "chmod.cgi?path="+filemgr.urlize(file.path)+ (perms < 0 ? "" : "&perms="+perms)+ (user_str == null ? "" : "&user="+filemgr.urlize(user_str))+ (group_str == null ? "" : "&group="+filemgr.urlize(group_str))+ "&rec="+rec+ (linkto==null ? "" : "&linkto="+filemgr.urlize(linkto.getText()))); if (rv[0].length() > 0) { // Something went wrong new ErrorWindow(filemgr.text("info_efailed", file.path, rv[0])); } else { // Update all changed file objects if (linkto != null) file.linkto = linkto.getText(); else if (rec == 0) update_file(file, perms, false); else if (rec == 1) { // Update files in this directory update_file(file, perms, false); recurse_files(file, perms, false); } else if (rec == 2) { // Update files and subdirs update_file(file, perms, false); recurse_files(file, perms, true); } // Update directory list int os = filemgr.files.selected(); filemgr.show_files(filemgr.showing_files); filemgr.files.select(os); dispose(); } } else if (b == size_b) { // Get the size of the directory recursively String l[] = filemgr.get_text("size.cgi?dir="+ filemgr.urlize(file.path)); if (l[0].length() > 0) { new ErrorWindow(filemgr.text("info_size", l[0])); } StringTokenizer tok = new StringTokenizer(l[1], " "); String bytes_str = tok.nextToken(); files.setText(tok.nextToken()); dirs.setText(tok.nextToken()); bytes.setText(tok.nextToken()+" "+tok.nextToken()); } else { // Just close dispose(); } } void update_file(RemoteFile f, int perms, boolean perms_only) { f.user = user.getText(); f.group = group.getText(); if (perms_only) f.perms = (perms & 0777) | (f.perms & 037777777000); else f.perms = perms; } void recurse_files(RemoteFile f, int perms, boolean do_subs) { if (f.list == null) return; for(int i=0; i 1 ? "delete_mtitle" : ff[0].type == 0 ? "delete_dtitle" : "delete_ftitle")); setLayout(new BorderLayout()); if (ff.length > 1) { add("North", new Label(filemgr.text("delete_mdesc"))); Panel mp = new Panel(); mp.setLayout(new GridLayout(ff.length, 1)); for(int i=0; i 0) { new ErrorWindow(filemgr.text("delete_efailed", file.path, rv[0])); break; } else { // done the deed.. update data structures RemoteFile pf = file.directory; pf.delete(file); if (filemgr.showing_files == pf) { // Need to refresh the list as well.. need_reshow = true; } FileNode node = (FileNode)filemgr.nodemap.get( file); FileNode pnode = (FileNode)filemgr.nodemap.get( pf); if (node != null) { // Take the directory out of the tree.. pnode.ch.removeElement(node); need_redraw = true; } } } if (need_reshow) filemgr.show_files(filemgr.showing_files); if (need_redraw) filemgr.dirs.redraw(); dispose(); } else if (b == cancel_b) dispose(); } } class MkdirWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField dir; CbButton create_b, cancel_b; MkdirWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("mkdir_title")); setLayout(new BorderLayout()); add("West", new Label(filemgr.text("mkdir_dir"))); add("Center", dir = new TextField(d.equals("/") ? "/" : d+"/", 40)); dir.setFont(filemgr.fixed); dir.select(dir.getText().length(), dir.getText().length()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Find the filemgr directory String path = dir.getText(); path = filemgr.trim_path(path); int sl = path.lastIndexOf('/'); RemoteFile par = filemgr.find_directory( path.substring(0, sl), false); if (par.find(path.substring(sl+1)) != null) { new ErrorWindow(filemgr.text("mkdir_eexists", path)); return; } String rv[] = filemgr.get_text("mkdir.cgi?dir="+ filemgr.urlize(path)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("mkdir_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); FileNode parnode = (FileNode)filemgr.nodemap.get(par); if (parnode != null) { // Update the tree parnode.add(new FileNode(file)); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else dispose(); } } class LinkWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField from, to; CbButton create_b, cancel_b; LinkWindow(String d, FileManager p) { filemgr = p; setLayout(new BorderLayout()); setTitle(filemgr.text("link_title")); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("link_from"))); l.add(new Label(filemgr.text("link_to"))); r.setLayout(new GridLayout(0, 1)); r.add(from = new TextField(d.equals("/") ? "/" : d+"/", 40)); from.setFont(filemgr.fixed); from.select(from.getText().length(), from.getText().length()); r.add(to = new TextField()); to.setFont(filemgr.fixed); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Check inputs String from_str = from.getText().trim(); if (!from_str.startsWith("/")) { new ErrorWindow(filemgr.text("link_efrom", from_str)); return; } int sl = from_str.lastIndexOf('/'); String par_str = from_str.substring(0, sl), file_str = from_str.substring(sl+1); RemoteFile par = filemgr.find_directory(par_str, false); if (par == null) return; if (par.find(file_str) != null) { new ErrorWindow(filemgr.text("link_eexists", from_str)); return; } // Create the actual link String rv[] = filemgr.get_text("makelink.cgi?from="+ filemgr.urlize(from_str)+"&to="+ filemgr.urlize(to.getText())); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("link_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class RenameWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; TextField oldname, newname; CbButton rename_b, cancel_b; RenameWindow(FileManager p, RemoteFile f) { filemgr = p; file = f; setLayout(new BorderLayout()); setTitle(filemgr.text("rename_title", file.path)); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("rename_old"))); l.add(new Label(filemgr.text("rename_new"))); r.setLayout(new GridLayout(0, 1)); r.add(oldname = new TextField(file.name, 20)); oldname.setEditable(false); oldname.setFont(filemgr.fixed); r.add(newname = new TextField(file.name, 20)); newname.select(file.name.length(), file.name.length()); newname.setFont(filemgr.fixed); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(rename_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("rename_ok"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); Util.recursiveBody(this); } public void click(CbButton b) { if (b == rename_b) { // Work out destination file and directory String newstr = newname.getText().trim(); if (newstr.length() == 0) return; RemoteFile destdir; String newpath; if (newstr.indexOf('/') >= 0) { // Different dir if (newstr.startsWith("/")) { // Some absolute path newpath = newstr; } else { // Relative to this dir newpath = file.directory.path+"/"+newstr; } int sl = newpath.lastIndexOf('/'); String newdir = sl == 0 ? "/" : newpath.substring(0,sl); destdir = filemgr.find_directory(newdir, false); } else { // Same dir destdir = file.directory; int sl = file.path.lastIndexOf('/'); newpath = file.path.substring(0, sl)+"/"+newstr; } // Work out filename only int sl = newpath.lastIndexOf('/'); newstr = newpath.substring(sl+1); // Check for an existing file RemoteFile already = destdir.find(newstr); if (already != null) { new ErrorWindow(filemgr.text("rename_eexists", newstr)); return; } // Rename the real file String rv[] = filemgr.get_text( "rename.cgi?old="+filemgr.urlize(file.path)+ "&new="+filemgr.urlize(newpath)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("rename_efailed", rv[0])); return; } // Update data structure file.name = newstr; file.path = newpath; file.directory.delete(file); destdir.list(); destdir.add(file); file.directory = destdir; file.list = null; FileNode parnode = (FileNode)filemgr.nodemap.get(file.directory); FileNode filenode = (FileNode)filemgr.nodemap.get(file); if (parnode != null && filenode != null) { // Need to refresh tree filenode.text = file.name; parnode.ch.removeElement(filenode); parnode.add(filenode); dispose(); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class OverwriteWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile src, already; TextField newname; CbButton ok, cancel; int idx; boolean mode; OverwriteWindow(FileManager p, RemoteFile a, RemoteFile s, int i) { filemgr = p; src = s; already = a; idx = i; mode = filemgr.cut_mode; setLayout(new BorderLayout()); setTitle(filemgr.text("over_title")); add("North", new MultiLabel(filemgr.text("over_msg", already.path), 30, 0)); add("West", new Label(filemgr.text("over_new"))); add("East", newname = new TextField(a.name, 30)); newname.setFont(filemgr.fixed); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton(filemgr.get_image("save.gif"), filemgr.text("over_ok"), CbButton.LEFT, this)); bot.add(cancel = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == cancel) dispose(); else if (b == ok && newname.getText().length() > 0) { // paste the file, but with a new name RemoteFile ap = already.directory; RemoteFile newalready = ap.find(newname.getText()); if (newalready == src) { new ErrorWindow(filemgr.text("paste_eself")); return; } if (newalready != null && (newalready.type == 0 || newalready.type == 5)) { new ErrorWindow( filemgr.text("paste_eover", newalready.path)); return; } String dpath = (ap.path.equals("/") ? "/" : ap.path+"/")+newname.getText(); RemoteFile nf = filemgr.paste_file(src, already.directory, dpath, newalready, mode); if (filemgr.cut_mode && nf != null) { // Paste from the destination path from now on filemgr.cut_buffer[idx] = nf; } dispose(); } } } class SambaShare { String path; boolean available; boolean writable; int guest; String comment; SambaShare(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); available = tok.nextToken().equals("1"); writable = tok.nextToken().equals("1"); guest = Integer.parseInt(tok.nextToken()); comment = tok.nextToken(); } SambaShare(String p, boolean a, boolean w, int g, String c) { path = p; available = a; writable = w; guest = g; comment = c; } String params() { return "path="+FileManager.urlize(path)+ "&available="+(available ? 1 : 0)+ "&writable="+(writable ? 1 : 0)+ "&guest="+guest+ "&comment="+FileManager.urlize(comment); } } class DFSAdminExport { String path; String desc; String ro, rw, root; DFSAdminExport(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); ro = tok.nextToken(); rw = tok.nextToken(); root = tok.nextToken(); desc = tok.nextToken(); } DFSAdminExport(String p, String d, String ro, String rw, String root) { path = p; desc = d; this.ro = ro; this.rw = rw; this.root = root; } String[] split(String s) { StringTokenizer stok = new StringTokenizer(s, " "); String rv[] = new String[stok.countTokens()]; for(int i=0; i 1)); add_item(name, p, l, r); TextField t = new TextField(v.equals("-") ? "" : v, 25); t.setFont(filemgr.fixed); add_item("", t, l, r); return t; } Choice squashbox(int s) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_s0")); rv.addItem(filemgr.text("share_s1")); rv.addItem(filemgr.text("share_s2")); rv.select(s); return rv; } Choice robox(boolean r) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_lrw")); rv.addItem(filemgr.text("share_lro")); rv.select(r ? 1 : 0); return rv; } Panel opts_panel(Component ro, Component squash) { Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add("West", ro); p.add("East", squash); return p; } void export_options(LinuxExport e) { int c = 0; for(int i=0; i 0) c++; e.host = new String[c]; e.ro = new boolean[c]; e.squash = new int[c]; for(int i=0,j=0; i 0) { e.host[j] = host[i].getText(); e.ro[j] = lro[i].getSelectedIndex() == 1; e.squash[j] = squash[i].getSelectedIndex(); j++; } } } } class SearchWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { TabbedPanel tab; MultiColumn list; CbButton search_b, cancel_b, down_b; FileManager filemgr; TextField dir, match, user, group; Checkbox uany, usel, gany, gsel; Choice type; Checkbox sany, smore, sless; TextField more, less; Checkbox xon, xoff; String types[] = { "", "f", "d", "l", "p" }; TextField cont; RemoteFile results[]; SearchWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("search_title")); // setup UI setLayout(new BorderLayout()); tab = new TabbedPanel(); Panel search = new Panel(); search.setLayout(new BorderLayout()); tab.addItem(filemgr.text("search_crit"), search); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); r.setLayout(new GridLayout(0, 1)); String cols[] = { "", filemgr.text("right_name"), filemgr.text("right_size") }; float widths[] = { .07f, .78f, .15f }; list = new MultiColumn(cols, this); list.setWidths(widths); list.setDrawLines(false); list.setFont(filemgr.fixed); tab.addItem(filemgr.text("search_list"), list); add_item(filemgr.text("search_dir"), dir = new TextField(d, 30), l, r); dir.setFont(filemgr.fixed); // Filename add_item(filemgr.text("search_match"), match = new TextField(20), l, r); match.setFont(filemgr.fixed); if (filemgr.search_contents) { // File contents add_item(filemgr.text("search_cont"), cont = new TextField(30), l, r); cont.setFont(filemgr.fixed); } // User or group owners if (filemgr.can_users) { Panel up = new Panel(); up.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup ug = new CheckboxGroup(); up.add(uany = new Checkbox(filemgr.text("search_any"), ug, true)); up.add(usel = new Checkbox("", ug, false)); up.add(user = new TextField(10)); user.setFont(filemgr.fixed); add_item(filemgr.text("search_user"), up, l, r); Panel gp = new Panel(); gp.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup gg = new CheckboxGroup(); gp.add(gany = new Checkbox(filemgr.text("search_any"), gg, true)); gp.add(gsel = new Checkbox("", gg, false)); gp.add(group = new TextField(10)); group.setFont(filemgr.fixed); add_item(filemgr.text("search_group"), gp, l, r); } // File type if (!filemgr.follow_links) { type = new Choice(); for(int i=0; i 0) url += "&type="+types[type.getSelectedIndex()]; if (usel != null && usel.getState()) { String u = user.getText().trim(); if (u.length() == 0) { new ErrorWindow(filemgr.text("search_euser")); return; } url += "&user="+filemgr.urlize(u); } if (gsel != null && gsel.getState()) { String g = group.getText().trim(); if (g.length() == 0) { new ErrorWindow(filemgr.text("search_egroup")); return; } url += "&group="+filemgr.urlize(g); } if (smore.getState()) { String m = more.getText().trim(); try { Integer.parseInt(m); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2B"+m+"c"; } else if (sless.getState()) { String l = less.getText().trim(); try { Integer.parseInt(l); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2D"+l+"c"; } if (xon != null && xon.getState()) url += "&xdev=1"; if (cont != null && cont.getText().trim().length() > 0) url += "&cont="+filemgr.urlize(cont.getText()); // send off the search setCursor(WAIT_CURSOR); String f[] = filemgr.get_text(url); if (f[0].length() > 0) { new ErrorWindow(f[0]); return; } Object rows[][] = new Object[f.length-1][]; results = new RemoteFile[f.length-1]; for(int i=1; i= 0) { ACLEntry e = (ACLEntry)acllist.elementAt(idx); ACLEditor ed = (ACLEditor)edmap.get(e); if (ed == null) edmap.put(e, new ACLEditor(this, e)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class AttributesWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { FileManager filemgr; RemoteFile file; Vector attrlist = new Vector(); Hashtable edmap = new Hashtable(); CbButton ok, cancel, add; MultiColumn attrtable; AttributesWindow(FileManager p, RemoteFile f) { super(400, 300); setTitle(p.text("attr_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getattrs.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("attr_eattrs", a[0])); return; } // Create the UI setLayout(new BorderLayout()); String titles[] = { filemgr.text("attr_name"), filemgr.text("attr_value") }; attrtable = new MultiColumn(titles, this); for(int i=1; i= 0) { FileAttribute at = (FileAttribute)attrlist.elementAt(idx); AttributeEditor ed = (AttributeEditor)edmap.get(at); if (ed == null) edmap.put(at, new AttributeEditor(this, at)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class FileAttribute { String name; String value; FileAttribute(String l, FileManager f) { int eq = l.indexOf('='); name = f.un_urlize(l.substring(0, eq)); value = f.un_urlize(l.substring(eq+1)); } FileAttribute(String n, String v) { name = n; value = v; } String[] getRow() { return new String[] { name, value }; } } class AttributeEditor extends FixedFrame implements CbButtonCallback { FileManager filemgr; AttributesWindow attrwin; FileAttribute attr; boolean creating; CbButton ok, del; TextField name; TextArea value; AttributeEditor(AttributesWindow w, FileAttribute a) { attrwin = w; attr = a; filemgr = w.filemgr; creating = false; makeUI(); } AttributeEditor(AttributesWindow w) { attrwin = w; attr = new FileAttribute("", ""); filemgr = w.filemgr; creating = true; makeUI(); } void makeUI() { setTitle(filemgr.text(creating ? "attr_create" : "attr_edit")); setLayout(new BorderLayout()); Panel top = new Panel(); top.setLayout(new GridLayout(1, 2)); top.add(new Label(filemgr.text("attr_name"))); top.add(name = new TextField(attr.name, 20)); name.setFont(filemgr.fixed); add("North", top); Panel mid = new Panel(); mid.setLayout(new GridLayout(1, 2)); mid.add(new Label(filemgr.text("attr_value"))); mid.add(value = new TextArea(attr.value, 5, 20)); add("Center", mid); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); if (!creating) bot.add(del = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("delete"), CbButton.LEFT, this)); add("South", bot); Util.recursiveBody(this); pack(); show(); } public void click(CbButton b) { if (b == ok) { // Update or add the attribute if (name.getText().length() == 0) { new ErrorWindow(filemgr.text("attr_ename")); return; } attr.name = name.getText(); attr.value = value.getText(); if (creating) { // Add to the attribs table attrwin.attrlist.addElement(attr); attrwin.attrtable.addItem(attr.getRow()); } else { // Update the table int idx = attrwin.attrlist.indexOf(attr); attrwin.attrtable.modifyItem(attr.getRow(), idx); } dispose(); } else if (b == del) { // Remove this entry int idx = attrwin.attrlist.indexOf(attr); attrwin.attrlist.removeElementAt(idx); attrwin.attrtable.deleteItem(idx); dispose(); } } public void dispose() { attrwin.edmap.remove(attr); super.dispose(); } } class EXTWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; CbButton ok, cancel; Checkbox cbs[]; String attrs[] = { "A", "a", "c", "d", "i", "s", "S", "u" }; Hashtable attrmap = new Hashtable(); EXTWindow(FileManager p, RemoteFile f) { super(); setTitle(p.text("ext_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getext.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("ext_eattrs", a[0])); return; } for(int i=0; i max || !tok.hasMoreTokens()) { v.addElement(line); line = null; } } setLayout(new GridLayout(v.size(), 1, 0, 0)); for(int i=0; i ?   L        ? ?  ? E G    N N   T T W W            o q s u                  !"# $ %&'( ) *+,- ./01 2345 6789 :;<= >?@ ABC DEFG HIJK LMNO PQRST UVWX YZ[ \]^ _` a bcde f g hij k l  mn op  qrst u v wxyz{|=\)>>} ~       ?333333                  ? % %     - , -  ,  ,   G            J        B@    J J J J  J               y                       y   ! "  #$% &' ( )* + , -./ 01 2 3 4 56 78 9: ; < = > 7? @ABCD EFG ?HIJK LM N OP ?Q R S TUV W XYZ[\]^ _ ` a mb cd e  f g hijklmnopqrstuvwxyret_b LCbButton;config_bdown_bedit_bhtml_b refresh_bprops_bcopy_bcut_bpaste_bdelete_bnew_bupload_bmkdir_b makelink_brename_bshare_bmount_bsearch_bacl_battr_bext_b preview_b extract_bdirs LHierarchy;root LFileNode;nodemapLjava/util/Hashtable;files LMultiColumn;pathnameLjava/awt/TextField; history_b showing_files LRemoteFile; showing_list [LRemoteFile; history_listLjava/util/Vector; cut_buffercut_modeZmonmap[Ljava/lang/String;accroot accnorootlangstabntab sambamodenfsmodeItrustLjava/lang/String;extraimagesiconsizegot_filesystems acl_support attr_support ext_supportmountsfslist read_onlyfixedLjava/awt/Font; small_fixedsessionarchivechroot can_perms can_users follow_linkssearch_contents()VCodeLineNumberTableinit make_font$(Ljava/lang/String;I)Ljava/awt/Font; get_colour4(Ljava/lang/String;Ljava/awt/Color;)Ljava/awt/Color;get_hex(Ljava/lang/String;I)I can_button(Ljava/lang/String;)Z make_button0(Ljava/lang/String;Ljava/lang/String;)LCbButton; get_image$(Ljava/lang/String;)Ljava/awt/Image; get_charset&(Ljava/lang/String;)Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String; set_cookie(Ljava/net/URLConnection;)V show_files(LRemoteFile;)Zpad(II)Ljava/lang/String;spad(JI)Ljava/lang/String; trim_pathopenNode(LHierarchy;LHierarchyNode;)V closeNode clickNode doubleNodeclick (LCbButton;)Vunder_root_dir((Ljava/lang/String;[Ljava/lang/String;)Z download_file(LRemoteFile;)Vfind_directory!(Ljava/lang/String;Z)LRemoteFile; find_filesys(LRemoteFile;)LFileSystem;action%(Ljava/awt/Event;Ljava/lang/Object;)Z singleClick(LMultiColumn;I)V doubleClickheadingClickedopen_file_window(LRemoteFile;ZI)Vurlize un_urlize upload_notify'(Ljava/lang/String;Ljava/lang/String;)V upload_error(Ljava/lang/String;)Vtext9(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;J(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; paste_fileE(LRemoteFile;LRemoteFile;Ljava/lang/String;LRemoteFile;Z)LRemoteFile;get_filesystems join_array'([Ljava/lang/String;)Ljava/lang/String; replace_str SourceFileFileManager.java QRjava/util/Hashtable !"java/util/Vector ,- 5" 6" 7" D" E- F0java/awt/BorderLayoutz {| VW GH IH} ~java/util/StringTokenizer c Q java/lang/String 32  noroot 42 ;< J< =< ><  ?: doarchive K<0 L</canperms  M0canusers N0contents P0lang.cgi de java/lang/StringBufferFailed to get language list :    ErrorWindow Qjava/lang/Error k  list_shares.cgi1 SambaShare < 80list_exports.cgi 9: LinuxExportDFSAdminExport Rro light_edge  XY dark_edge body body_hi  light_edge_hi  dark_edge_hi dark_bg  light_bg  BorderPanel Q ToolbarLayout Qjava/awt/Paneljava/awt/GridLayout Qreturn \]ret.giftop_ret c ^_  config config.gif top_config savedown.giftop_down preview preview.gif top_preview editedit.giftop_edit html.giftop_html  refresh refresh.gif top_refresh  info props.giftop_info   A0aclacl.giftop_eacl  B0attrattr.giftop_attr  C0extext.giftop_ext search search.gif top_search delete delete.gif top_delete newnew.giftop_new upload upload.gif top_upload  extract.gif top_extract mkdir mkdir.gif followmakelink makelink.gif rename rename.gif top_rename sharing share.gif top_share mountingmount mount.gif top_mount copycopy.giftop_copy  cut.giftop_cut   paste.gif top_paste North  O0FileNode RemoteFileroot.cgi Q Qy  Center Hierarchy Q  0 Rjava/awt/TextField %&EastCbButtonhistory_button Q ' right_name right_size right_user right_group right_date MultiColumn Q #$    ) hi ResizePanel Qhomegotoopen z{ java/awt/Fontcourier Qapplet_java/awt/Color Z[   no_ `a Q Q  ; charset= ] &rand= ?rand=&trust= java/net/URL Q  fg  bc java/io/BufferedReaderjava/io/InputStreamReader Q Q Qjava/lang/Exception R   R     : Cookie   R[Ljava/lang/Object; ()  :  : java/lang/Objectdir.gif..java/util/Date Q   smdir.gif  sudir.gifsdir.gifmdir.gifudir.gif 2 : <  lm B kB MB < <      jk:  12  *+     ]      edit_enormal EditorWindow Q htmledit  html_efailed  xypreview_eimage PreviewWindow Q RPropertiesWindow |}  0 ACLWindoweacl_efs R<  0AttributesWindowattr_efs +0 EXTWindowext_efs .+ /0 paste_ecopy   OverwriteWindow Q  DeleteWindow Q Qupload_efailed extract_etype ExtractWindow MkdirWindow LinkWindow RenameWindow SharingWindow  mount_epoint MountWindow Q SearchWindow HistoryWindow QDownloadDirWindow view_enormal2  vw find_eaccess find_eexist  find_edir   R  FileSystem     !" #) $% & '.zip.tgz.tarshow.cgi c&type=application%2Funknown&format= (&test=1eopenshow %0 k )% * [ + y???$  move.cgicopy.cgi?from=&to=paste_emfailedpaste_ecfailed ,: 3y - .- /filesystems.cgi @0 0R [JanFebMarAprMayJunJulAugSepOctNovDec FileManagerjava/applet/AppletCbButtonCallbackHierarchyCallbackMultiColumnCallbackjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilsetFont(Ljava/awt/Font;)V getParameter countTokens()I hasMoreTokens()Z nextToken()Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)Iequals(Ljava/lang/Object;)ZindexOf(I)Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString substring(I)Ljava/lang/String;put8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;pathLjava/awt/Color;(ILjava/awt/Color;)V(III)V(II)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;.(LFileManager;Ljava/lang/String;LRemoteFile;)V%(LHierarchyNode;LHierarchyCallback;)V HierarchyNodefill'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Component+([Ljava/lang/String;LMultiColumnCallback;)V setWidths([F)V setDrawLines(Z)VsetMultiSelectfile-(Ljava/awt/Component;Ljava/awt/Component;DZ)V(Ljava/lang/String;II)V toUpperCasecharAt(I)Cjava/lang/CharacterisDigit(C)Z%(Ljava/awt/Image;LCbButtonCallback;)V8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VgetDocumentBase()Ljava/net/URL;getImage2(Ljava/net/URL;Ljava/lang/String;)Ljava/awt/Image;trim startsWithjava/lang/SystemcurrentTimeMillis()J(J)Ljava/lang/StringBuffer;#(Ljava/net/URL;Ljava/lang/String;)VopenConnection()Ljava/net/URLConnection;java/net/URLConnectiongetContentTypegetInputStream()Ljava/io/InputStream;(Ljava/io/InputStream;)V(Ljava/io/Reader;)V*(Ljava/io/InputStream;Ljava/lang/String;)Vjava/lang/ThrowableprintStackTracereadLine addElement(Ljava/lang/Object;)VclosesizecopyInto([Ljava/lang/Object;)VgetClass()Ljava/lang/Class;java/lang/ClassgetName getMessagesetRequestPropertylist()[LRemoteFile;clear sortingArrowsortdir arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)Vsortcol QuickSortsort([LRemoteFile;II)V(J)Vsharedmounted mountpointtmaptypenameJusergroupmodifiedgetDategetMonthgetYeargetHours getMinutesaddItems([[Ljava/lang/Object;)VsetTextvalueOflength(J)Ljava/lang/String;endsWithselected allSelected()[I()LHierarchyNode;getAppletContext()Ljava/applet/AppletContext;java/applet/AppletContext showDocument(Ljava/net/URL;)V(LRemoteFile;LFileManager;)Vnetscape/javascript/JSObject getWindow4(Ljava/applet/Applet;)Lnetscape/javascript/JSObject;call9(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;(LFileManager;LRemoteFile;)Vaclsattrsfind (Ljava/lang/String;)LRemoteFile;)(LFileManager;LRemoteFile;LRemoteFile;I)V(LFileManager;[LRemoteFile;)V"(Ljava/lang/String;LFileManager;)Vfs()LFileSystem;((LFileManager;LFileSystem;LRemoteFile;)V(LFileManager;)Vget&(Ljava/lang/Object;)Ljava/lang/Object;select(LHierarchyNode;)Vredraw elementAt(I)Ljava/lang/Object;java/awt/EventtargetLjava/lang/Object;java/awt/TextComponentgetTextcontainsinsertElementAt(Ljava/lang/Object;I)V directory last_eventLjava/awt/Event; shiftDown([I)V(I)Ljava/lang/StringBuffer;isLetterOrDigit(C)Ljava/lang/StringBuffer; lastIndexOfperms (LFileNode;)Vch removeElementremoveAllElements!?      !"#$%&'()*+,-.+/01232425"6"7"809:;<=<><?:@0A0B0C0D"E-F0GHIHJ<K<L<M0N0O0P0*QRSW**Y*Y*Y*Y *Y *Y *Y * T&  +%,0-;7F8Q9URS  C*Y** ** *Y*L*+=+*+ S*!7Y*!L*+"=+*"+ S*"**#$**%&**'(*( *)(***+*+ **+**,-.**/0*0 *10**23*3 *43*5M*, ,167*8N*- -169*::* 16;*<=:2=>1?Y@AB*CBD:EYFWGYH692=>6"*2I2`JKW*L=:2M666&NY2O:* PKW*Q*R=:* 2-S*Sa6V*S#TY2U: *  V KW(*S WY2X: *  Y KW*Z*[M6* *\]^]*_`^`*ab^b*cd^d*ef^f*gh^h*ij^j*kl^l*mn^noYbp:qYrsYt:  uYv*w#*wx **y*z{|Z}~W*#*x ***{|Z~W*x ***{|Z~W*x ***{|Z~W* :*x1 ***{|Z~W ***{|Z~W*x ***{|Z~W* #*x ***{|Z~W*** #*x ***{|Z~W*** #*x ***{|Z~W*** #*x ***{|Z~W*x ***{|Z~W ~W* ޻sYt:  uYv*x ***{|Z~W*x ***{|Z~W*x ***{|Z~W ***{|Z~W*x ***{|Z~W*16#*x ***{|Z¶~W*öx ***Ŷ{|Zƶ~W*Q *S1*ǶM6#*Ƕx ***ɶ{|Zʶ~W*˶M6#*̶x ***ζ{|Z϶~W ~W*жxgsYt:  uYv ***Ҷ{|ZӶ~W ***ն{|Zֶ~W ***ض{|Zٶ~W ~W*W**M6ܻoYbp:  Y*YY**߶=2 *Y**ZW****oYbp:  YsYt:  Y *YZW *Y*{*ZW  W**Y)SY*{SY*{SY*{SY*{SY*{S: YQYQYQYQYQYQ: *Y *ZW*******WY  :*W*:* :* :* W<7M6-* W*246**2 WTU XY#[*\:]E^N_X^^`gawbcdcgijklmnopq rs t'u=vDwZxbyz}~ #1@FKShoz ,8DP]lu%<S\s $-DLS\js/8Ot&.7F S _ {  Y} !"#$&'*+,-. 0 1 2 (3 64 B6VWSK+*+N- -)6--6 Y T:;=XYS]9*?Y@B+BDN-,Y*-*-*-TDEFIZ[SuM+L+>+`6 0d Ad `6 0d Ad `6x`TQRS+TEU\]S9!*?Y@B+BDTZ^_SF&*.Y*+*Y*+,*T_`b`aS;#**?Y@*+B4B+BDThbcSh4+Y+M,, N--JT"nopqr!s+u2xdeS Y A+?>?Y@+B!B "DL?Y@+B#B "DL?Y@+B$B*$BDL?Y@+B*(BDL%Y*+&:':*(*)*:+::,Y-Y./:3,Y-Y0/::  2,Y-Y./:Y: 3:     45 6:   7 M,2Y?Y@,89B:B,;BDSN-1()1Tz~)B^t&)*.WfgS3*&+<*&=ThiS +>M,*?,`@N 7+*A*B4*C*,:,,D*E*CFM-GS-2*HS-2IS-2-2-2-2)[S[S[SSJYK:6,=-`G[S:,2L,2M*NS,2L,2O*PS^,2L*QSF,2M*RS.,2O*SS*T,2U2S,2VS,2WX)?Y@*,2WZB[BDSb,2W\-?Y@*,2WXmZB^BDS*?Y@*,2W\mZB_BDS,2`S,2aSJY,2bK: c cNd dAe e4?Y@* fgBhB* igBDSne e2?Y@* cgB4Bj d2BDS2?Y@j d2B4B* edpgBDS*-k*+A*,l*+mnT2 '3=DNadlx "0:H[ftFwjkSJ&oN-p?Y@1B-BDN-T $lmSO+q:p?Y@BBD:T  (ncS:+4r++pdIL+T opS* ,N-T qpST%rpS>,N*A- *-WT+,-.spST4tuS *s=*tN:: -66--.6*l:M-d:66 -!-. -.d2S 2 d2:0d2:-:6--.d2S*u:+*})%Y**w&:*vw:+*)%Y**&:*vw:+*:U UEY*x{FWyY*zW+*gU UEY*x{FWt*{:YmS:|}WR:EY*~;FW9+**"+*1UEY*{FWY*W+**W+*Y*W+*D*:Y*W~EY*FWg+*D*:Y*W5EY*FW+*D*:Y*WEY*FW+*Ӧ**+*֦**+*٦*EY*{FW6**2:*AV: *Am:  46?Y@ BVBD?Y@ B4BVBD:  Y* W+**A *: * * SR*+*Y*W+*yY*Am*W+*?*{:Y*AmS:}W`:EY*;FWG+*JUU UEY*mFWY*W+*Y*Am*W+*¦Y*Am*W+*ƦY*W+*ʦ UY*W+*ϦD U:EY*mFWIY*W9+*Y*Am*W+**6 Y*W1&)111TN9:;<'>*?4@;A>?DBJCOEXFeGlH}FIMNOPOSTWY[]`b&d.f6h<iMj_lmnup{qruvw|yz|&.49FNTbjpx~ &=EKQYagmu}-9BHPX^lt "5=P X ^ lt "#&vwSk>+p66,Z,2p6,246>:+I,26>,2I+6>T2 *+,-.'/,0D1I2a3c,i5xySuI+U*016Y*+W++U +UEY*{FW *+T;< =/>A@HAz{S )*+**+*">EY*+FW*::Y+4: :)6>:6 6  # 2V6  2:6  EY*+FWUEY*+FWc*:R'***T$FH"I2J4L:MANMOUP\QiRpSwT{UVXYZ[\Y^_`bcdfgij klmn&q|}SM>* 6v* :p6+m6G+mp`,+m`I?Y@B4BD646M,T"vwxy&zy~|w~St@+*6*¶N-)6*- W*-Ú *-T" !(3<>STS%H*A=**A**AŶW***Aݶ**ld2N-UQ**A:*-:*-6**-U*-+ƶTV ,AHIRYintS +E++CB +B*tN-:6-*l-.d2S**AW6-66*l#*l22-`O ل*-ȱTR "(07AQW`jwS= ɧ ʧ ˧):W?Y@̶B+mͶBB#B "ζB$B*$B϶B*(BD:N?Y@̶B+mͶBB#B "$B*$B϶B*(BD:*?Y@BѶBD=:2pEY*2FW*v%Y*&w*v%Y*&ӹ::17:1T6 %)}7<cS?Y@L=*p*>$+?Y@նBֶBDBWPך/._ - $+?Y@ضBֶBDBW +W{+DT*     ? e cSJ?Y@L=*p6*>%+*``IڒW +W+DT& 39!?E#S p+/>+I:+`J:* ::Y*,:ܧ#U*:**AWT:)*+,!-*./0<1F3N5\6a7f9o:S& EY+FWT ? @Sp*+N-N6,S-?Y@޶B`жD6*?Y@-IB,2B-`JBDN-T"D EFG;HAIhFnKcS( M*+,T PQS,Y,SN*+-T V WS2Y,SY-S:*+T \]S A*?Y@ BB+mͶBB-ͶBD=:2p#EY* 2FWY*2,: ,ܧCUU``aaWWbb: +++U_**A:Y5*+Ŷ: *+:     W***AWTnd>gHhfjhlwm|ostuvwxy{} #.5>RS*=L*+2M6**** * *U=+MY+2N* -4-*-*-** --KWTF#*18@KS_kwSV.)M>+$?Y@,B+2BBDM,T &,SuI6*N-+Y68?Y@-IB,B-+p`JBDN,p``6-T9GRSoW YSYSYSYSYSYSYSYSYSY SY SY SjT&file/HierarchyCallback.class0100664000567100000120000000033310522475215016044 0ustar jcameronwheel-   openNode(LHierarchy;LHierarchyNode;)V closeNode clickNode doubleNode SourceFileHierarchy.javaHierarchyCallbackjava/lang/Object file/CbColorButton.java0100644000567100000120000000166310122720133015035 0ustar jcameronwheelimport java.awt.*; import java.util.*; /**A component for choosing a color */ public class CbColorButton extends Panel implements CbButtonCallback, CbColorWindowCallback { Color col; CbButton but; Vector pal; Image swatch = Util.createImage(32, 16); Graphics g = swatch.getGraphics(); CbColorWindow win; CbColorButton(Color c) { this(c, new Vector()); } CbColorButton(Color c, Vector p) { if (c == null) c = Color.black; col = c; g.setColor(col); g.fillRect(0, 0, 32, 16); setLayout(new BorderLayout()); add("Center", but = new CbButton(swatch, this)); } public void click(CbButton b) { if (win == null) win = new CbColorWindow(col, this); } public void chosen(CbColorWindow w, Color c) { if (c != null) { col = c; g.setColor(col); g.fillRect(0, 0, 32, 16); but.repaint(); } win = null; } public Vector palette(CbColorWindow w) { return pal; } } file/MultiColumnCallback.class0100664000567100000120000000031010522475215016371 0ustar jcameronwheel-    singleClick(LMultiColumn;I)V doubleClickheadingClicked SourceFileMultiColumn.javaMultiColumnCallbackjava/lang/Objectfile/Hierarchy.class0100664000567100000120000001330110522475216014427 0ustar jcameronwheel-E W W W W X  W W W   W W W W W W W W X W  W W W  X W W W N N W  W N N N N  W   WrootLHierarchyNode;sb LCbScrollbar;widthIheightsbwidthcallbackLHierarchyCallback;bimLjava/awt/Image;fontLjava/awt/Font;fnmLjava/awt/FontMetrics;bgLjava/awt/Graphics;topcountinLjava/awt/Insets;sellastJ broken_awtZ(LHierarchyNode;)VCodeLineNumberTable%(LHierarchyNode;LHierarchyCallback;)V()V(LHierarchyCallback;)VredrawsetRootselected()LHierarchyNode;selectsetFont(Ljava/awt/Font;)Vreshape(IIII)Vupdate(Ljava/awt/Graphics;)Vpaint mouseDown(Ljava/awt/Event;II)Zmoved(LCbScrollbar;I)Vmovingrenderrecurse(LHierarchyNode;IIII)I compscroll(LHierarchyNode;)Inodeat"(LHierarchyNode;II)LHierarchyNode; SourceFileHierarchy.java uz Z[ uv bc u java/awt/Fontcourier u fg l_ m_  CbScrollbar u \]  hi z  z |z p[ de z  no    ^_ a_  _ _ _ `_  jk    r qr  t    ! " #$% &$ '$ ( )* + , -_ ._ ,/ 01 2e 3 4 56 7$ 89 HierarchyNode m: ;< =>os.name? @AWindowsB CD st Hierarchy BorderPanelCbScrollbarCallbackUtil dark_edge_hiLjava/awt/Color;body_hi$(ILjava/awt/Color;Ljava/awt/Color;)V(Ljava/lang/String;II)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(ILCbScrollbarCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/awt/Component getGraphics()Ljava/awt/Graphics;repaintinsets()Ljava/awt/Insets; minimumSize()Ljava/awt/Dimension;java/awt/Dimensionjava/awt/Insetsleftrightbottom createImage(II)Ljava/awt/Image;java/awt/Imagejava/awt/GraphicsgetFontMetrics()Ljava/awt/FontMetrics; drawImage3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Zjava/awt/EventwhenchLjava/util/Vector;openHierarchyCallbackopenNode(LHierarchy;LHierarchyNode;)V closeNode doubleNode clickNodegetValue()Ijava/awt/FontMetrics getHeight getAscentlight_bgsetColor(Ljava/awt/Color;)VfillRecttextxyLjava/lang/String; stringWidth(Ljava/lang/String;)Iimbody drawStringdrawLinejava/util/Vectorsize elementAt(I)Ljava/lang/Object;java/lang/Mathmin(II)I setValues(III)Vjava/lang/System getProperty&(Ljava/lang/String;)Ljava/lang/String;java/lang/String startsWith(Ljava/lang/String;)Z!WXYZ[\]^_`_a_bcdefghijkl_m_nop[qrstuvw* **+x uyw+ *+*,x&' (uzwuA**Y  * * **Y***Wx"-  %0*172@3u{w* **+x9: ;|zw@*****xBC DEG}vw* *+*xMN O~w*xUvw"*+x \]w3*+ **xbc dew**** ** d*!*"`d#**$*%`d&**#*!`*$* *&'****(x* klm0nFohrmsqtuv~ww* **+x}~ w^*+)*<***#*&***+,*,* -**,.**+**!*$*/Wx*  '2=AE]w]***ll* `0:**6+1*2e3* 6 *+12*V*5L**66*Z*6***7?***8.*'***9***:**x^ %*.03LRZ`ow#*+;x w8**< **x zwR*M*=<*>=*,?@*,*#*&A**,B@**CWx* !29:DQw h6* dh66+D+E*+FG6 k*&b+H*,+H*/W*+-*,I@*,`` ` A*,B@*,+F` `J+5+6*&*,``` ``K6  +5L*&*+5 MN``C6 *,````K +5Ld*,```K *,`` h`dK `6 h`6 Yxj+9@QYcy .Ifmw}zwtD****O<*&ldP=d>** Qx    * .Cmwc7=+6/+5(>+5L*+5MNO`=x/5wU+E +D++5 +66+5L%*+5MN0:x& "#$ %"&1'E(M&S*zw&RSTUVxfile/FileNode.class0100664000567100000120000000364710522475216014212 0ustar jcameronwheel- ': ; <= = >? : '@ <A 'B CD EF G <H I <JK L M CN OP Q R ST U <V <WX <YZ[\]^ C_ '` <a bcparent LFileManager;file LRemoteFile;knownZ(LRemoteFile;)VCodeLineNumberTablefill()Vadd (LFileNode;)Vsetimagerefresh SourceFileFileManager.java .3 *+d () 63java/util/Vector ef gh ihj klm no ,- pq r3 stFileNode ./ uv wxy z3 {| }~  smdir.gif  sudir.gifsdir.gifmdir.gifudir.gifdir.gif p 23 HierarchyNode RemoteFilechLjava/util/Vector;nameLjava/lang/String;text FileManagernodemapLjava/util/Hashtable;java/util/Hashtableput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;list()[LRemoteFile;removeAllElementstypeI addElement(Ljava/lang/Object;)Vdirs LHierarchy; Hierarchyredrawsize()I elementAt(I)Ljava/lang/Object;java/lang/String compareTo(Ljava/lang/String;)IinsertElementAt(Ljava/lang/Object;I)Vshared()Zmounted mountpoint get_image$(Ljava/lang/String;)Ljava/awt/Image;imLjava/awt/Image; [LRemoteFile; '()*+,-./0j6**+*+**Y*+ * +* W1"  (5230S* N*L+*=+#+2*Y+2** 1. #,=CMR450}M=*B**N-- + *+ 1 (:CFL630m****K**2*#* *!"#$1 l7306* *%*&1 89file/HierarchyNode.class0100664000567100000120000000102010522475216015230 0ustar jcameronwheel-!      openZimLjava/awt/Image;chLjava/util/Vector;textLjava/lang/String;xIy()VCodeLineNumberTable8(ZLjava/awt/Image;Ljava/util/Vector;Ljava/lang/String;)V SourceFileHierarchy.java    HierarchyNodejava/lang/Object  *8F***,*-*;< =>?@file/MultiColumn.class0100664000567100000120000002277410522475216014777 0ustar jcameronwheel- s r r} r r r r r r r r r r r  r r   r r r  r   r       r   r r r r r r s r  o       s  [ r !" !# r$ %& r' r( !) r %* %+ ,- . !/ !0 1 2 !3 4 %5 !6 7 89 ,: ;< h= r> h? h@ rA ;B ;C DEFG hH I rJ KL oM rNOPcallbackLMultiColumnCallback;title[Ljava/lang/String; adjustableZ drawlinescolors[[Ljava/awt/Color;enabled multiselectcpos[Icwidth[Flist[Ljava/util/Vector;sb LCbScrollbar;widthIheightinLjava/awt/Insets;sbwidththbimLjava/awt/Image;bgLjava/awt/Graphics;fontLjava/awt/Font;fnmLjava/awt/FontMetrics;coldragselselstoplastJrowh last_eventLjava/awt/Event;sortcolsortdir([Ljava/lang/String;)VCodeLineNumberTable+([Ljava/lang/String;LMultiColumnCallback;)VaddItem([Ljava/lang/Object;)VaddItems([[Ljava/lang/Object;)V modifyItem([Ljava/lang/Object;I)VgetItem(I)[Ljava/lang/Object;selected()Iselect(I)V([I)V allSelected()[Iscrollto deleteItemclear()V setWidths([F)V setAdjustable(Z)V setDrawLines setColors([[Ljava/awt/Color;)VsetMultiSelectenabledisable sortingArrow(II)VsetFont(Ljava/awt/Font;)Vreshape(IIII)Vrespacepaint(Ljava/awt/Graphics;)Vupdaterender mouseDown(Ljava/awt/Event;II)Z mouseDragmoved(LCbScrollbar;I)Vmoving compscrollrows minimumSize()Ljava/awt/Dimension; preferredSize SourceFileMultiColumn.javaQ RS TS U yz {z |} ~z z java/awt/Font timesRoman V java/lang/String wxjava/util/Vector W XY CbScrollbar Z [\ uv ]^_ ` abjava/lang/Object cd e f gh ij k lm no p q r s tu vw x yz { | }~    S   S S  S  V  java/awt/Image        java/awt/EventDoubleSingle   java/awt/Dimension  MultiColumn BorderPanelCbScrollbarCallbackUtil dark_edge_hiLjava/awt/Color;body_hi$(ILjava/awt/Color;Ljava/awt/Color;)V(Ljava/lang/String;II)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(ILCbScrollbarCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component; addElement(Ljava/lang/Object;)Vjava/awt/Componentrepaint setElementAt(Ljava/lang/Object;I)V elementAt(I)Ljava/lang/Object;sizesetValueremoveElementAtjava/lang/System arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)VremoveAllElements setValues(III)Vinsets()Ljava/awt/Insets;java/awt/Insetsleftrightbottom createImage(II)Ljava/awt/Image; getGraphics()Ljava/awt/Graphics;java/awt/GraphicsgetFontMetrics()Ljava/awt/FontMetrics;java/awt/FontMetrics getHeight drawImage3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Z getDescent getAscentjava/lang/Mathmin(II)IbodysetColor(Ljava/awt/Color;)VfillRectlight_bg light_edgedrawLine dark_edge stringWidth(Ljava/lang/String;)I drawStringlength substring(II)Ljava/lang/String;abs(I)IMultiColumnCallbackheadingClicked(LMultiColumn;I)Vwhen shiftDown()Z controlDown doubleClick singleClick getParent()Ljava/awt/Container;((Ljava/lang/Object;ILjava/lang/Object;)V postEvent(Ljava/awt/Event;)ZgetValue!rstuvwxyz{z|}~zz#f****** * Y  *** ***+=+*+2S*+=+*YS*+=+* +nQ*+` **Y***Wv(    "'7<AHM S)\*d+m*s,|-.-/01023456+ *+*, <= >R&=**2+2!*"*#D EDF!G%Hj6=+(>**2+22!*"*#"NOP!O'N-Q1R5SS'>**2+2$*"*#Y ZY["\&]Q)*%M>*,*2&S,c de!d'f*m@** *O*"tu vwxU%+** *+.*+*"~  $*O*'=* *`:*d**2(d**2(d**)*""0?JN=**2***=*G*.7*d N-.*-+*`--d+*-. *"*#B #(3=GLWgqw{r:<**2,** **"*-& &+/9O#=**+0Q*.*" ""* "* * *+*" "*  5**/*" 5**0*" 3*1*2*" 3*+ *3*"   *4*5` *6|**78**9:5**5d*8;*8<`d4**8=*8>`d6**4*8;`*8=*5*6?*.*3*"*#*@2 ,F\~!"]5*O<*%*`*.*4*0j`Oر()*.)4+k*+A*3I***4*6B3**3CD*D* E**DFG**GH`I*J*#+*3*8;*8=*KW. 12 45'627=8J9N:R<j=5*G *J*+LCD EGi*GH<*GM=*GN>**'`d*2(dO6*DPQ*D*4*IR*DSQ*D*I*4*6*IdR:*s6*f*.*R*.F*D*.* PQ*D*I*.*d*h`*4*R6*q*.6*`.dd6*DTQ*D`U*D`dU*D*IdU*D``*IdU*DVQ*D*Id`*IdU*D*Id`d*IdU*D`*Id`U*D`d*Id`dU*G*2W6  d#*D*2 dl`*IddX*Id6 *1*2*DTQ*D`*Id` `*IdU*D` `*Id` l`*Id dU*DVQ*D` l`*Id d`*IdU*1*2*DTQ*D` l`*Id` `*Id dU*DVQ*D`*Id d` `*Id dU*D`*Id d` l`*IdU*M*DPQ*D`d*I`d*6U*DVQ*D`*I`*6U*6  *2 &:  } : *G Wd  YdZ: **DPQ**D* 22Q*D `*I `*d*h`dX2 [* [: *D `*I *d*h`*KW 7AMNOP3S=TNUXVqWvY}[\]_[fgjk-l?mQngoqpqrstuvyz/{9|W}}~?FPmw-5<\bfh**8;d=*8=d>**I_6**!*.d\ *'*.*`.* *]*Id*l*`6*2(I6+^*_e`* 6 *+^_+bu* n*f*.6-*d` 6*dO*d` 6`*dO+c8* 1*` :**+*O** *O**"*+d* &* *e1* *f"*ghY*ijklW, "*7S\t ,7CIWbr|**8;d=*8=d>***d.`n**`.d]**O**d**.**d.d*4nQ****`.**.d*4nQ*".  %GQx #*+m 8**n*#*" c7*G*'<*2(d=***2(-  6!0*6*ld*2(O'% oYdp,*q1file/defaultacl0100644000567100000120000000062510505651126013511 0ustar jcameronwheelnoconfig=0 user=0 root=/ follow=0 umask=022 log=0 ro=0 goto=1 archive=1 button_save=1 button_edit=1 button_info=1 button_acl=1 button_attr=1 button_ext=1 button_search=1 button_delete=1 button_new=1 button_upload=1 button_mkdir=1 button_makelink=1 button_rename=1 button_sharing=1 button_mount=1 button_copy=1 button_preview=1 unarchive=1 dostounix=1 chroot=/ noperms=0 nousers=0 filesystems=1 contents=1 file/images/0040755000567100000120000000000010515533523012730 5ustar jcameronwheelfile/images/paste.gif0100644000567100000120000000023007172555115014531 0ustar jcameronwheelGIF87afff,e Ia05ݣ Ci0E*~:o4`m %xLrrFdK;6hHZ{L2<'36m@.Y|}V{w ;file/images/dir.gif0100644000567100000120000000013007172555115014172 0ustar jcameronwheelGIF89a̙fff!,)i-j]݅_($5 iҳ;C>P;file/images/file.gif0100644000567100000120000000333207172555115014342 0ustar jcameronwheelGIF89a/UUUrrr999!Made with GIMP!,/81sRdiY_ -*tmxO_!s eH3-=ɨtJ A'I*z=b_J^쓏 Jyuo/1b$vh{(>jbhG$bA=,'n+H;b6#~c|3Vqb%Ejfc3TŒՌ2:789:n$tY@ƑENi\!64`=aH#!!>ਁ䉁&TE.$<`0 R@E % p0f!2Q3 ^A*APNT{tT @Ԝ'`LZCM,nEm$kXr[RB+NoTP hA@ecdPITİ2Ă"YtoburA@J7׌i'V19GQgySE6@zm"Udf aQi]es蕞m BAMG( :6Axd0BlyWd'`jEV-L+ ^M-bOƕr}6TABSJy*:t%l&p#p-LY"")7o3Qz )Aumr+4t"EZf#z@t ?dbA%E )ãu}$:2(@2j|遤 b.҅Uv)QiD"y5gJ#_mX3&ЭJ L (Z1Skݚ**bv{EuoC^QJu;!cL5|)V #R!)(lBx2Ʌ3^LW ;M^ -btq؍"˱Óץ\(ft)QZgnΓ녌$fm(_ˠ.]LvB\,Mxh%"A*c(h9nZ<~A pr ;file/images/binary.gif0100644000567100000120000000014107172555115014702 0ustar jcameronwheelGIF89afff!,2z j 2N}A"Dt訙Lkt||9JI ;file/images/text.gif0100644000567100000120000000013307172555115014403 0ustar jcameronwheelGIF89a̙!,,z \ؖ9'"cƞ*nh5+9h ;file/images/cancel.gif0100644000567100000120000000015307172555115014646 0ustar jcameronwheelGIF89a!,B˝aR h=zh5٘ӽRais2F{|kv WBU7c1H1 $i;file/images/edit.gif0100644000567100000120000000021207172555115014342 0ustar jcameronwheelGIF87a⯆̙,W0ʹBQXC( ` g::c<7)`@ji-y>Y I0" n"ޒb9)+HpgN$;file/images/symlink.gif0100644000567100000120000000012707172555115015110 0ustar jcameronwheelGIF89afff!,(yC i961!_zᶘ۬J;file/images/icon.gif0100644000567100000120000000041207172555115014347 0ustar jcameronwheelGIF89a00̙fff!,000I 8 ˧ ؍NfFRAʾR[x=KĐ&LNUuEFxL./w jgIۈ@dz9_rt1[5xa}{Tzw>afo~i9'_AhGllHX 4φ@\Ŀ|ߞܭQ ;file/images/new.gif0100644000567100000120000000012507172555115014211 0ustar jcameronwheelGIF87a,4*U͞؇y$i# oL*x(;file/images/makelink.gif0100644000567100000120000000017707172555115015222 0ustar jcameronwheelGIF87a̙fff,XVjjo~IO2VdN@D csQ48+^!r DyhĚơq;file/images/cut.gif0100644000567100000120000000016707172555115014221 0ustar jcameronwheelGIF87afff,Pt> usm@((YB&+]m^5qP"ŏl '57^zr`9U$N;file/images/pipe.gif0100644000567100000120000000015307172555115014356 0ustar jcameronwheelGIF89afff!,091FQKpBH^h)hlܺЁlŠF;file/images/save.gif0100644000567100000120000000013407172555115014356 0ustar jcameronwheelGIF89a!,3tANfznTȁQi9j*: SXOS<$@;file/images/refresh.gif0100644000567100000120000000013407172555115015056 0ustar jcameronwheelGIF87a,;|IS}[]HhbY(۝$LnD6hZ iJ;file/images/unknown.gif0100644000567100000120000000011707172555115015120 0ustar jcameronwheelGIF89a!,&z \0% ~H(fhyDzUaQ;file/images/device.gif0100644000567100000120000000013207172555115014655 0ustar jcameronwheelGIF89afff!,+y3,i.) '%rz6TSnj߳:2 ;file/images/open.gif0100644000567100000120000000016207172555115014362 0ustar jcameronwheelGIF87a̙fff,K˭[A+fj4HafĶn$\G0u:'R<ڒJyB-c0*׋ ;file/images/props.gif0100644000567100000120000000016507172555115014567 0ustar jcameronwheelGIF87afff,Nx!B xJ3&а!Kr WM8vl)VmԃJ ;file/images/run.gif0100644000567100000120000000020207172555115014220 0ustar jcameronwheelGIF89aQQ@!,SMV\ϔubG(rYʛ5)% ?}ސx 4DfPx97fQ EE|ũե;P;file/images/mkdir.gif0100644000567100000120000000015207172555115014526 0ustar jcameronwheelGIF87a̙fff,C߂0fqH`xji s]߸ 4< G& -ԪzhG;file/images/rename.gif0100644000567100000120000000022007172555115014663 0ustar jcameronwheelGIF87afff,]0邽8k@I\oL<j1ˢٔcuZn Ֆye9h|Nt~H;file/images/view.gif0100644000567100000120000000021207172555115014367 0ustar jcameronwheelGIF87a̙,W.:蓸 Ɓ`ICih(S"fPD0x)v{v p$ qC`dfħVPZ񎭲2MLCo;file/images/copy.gif0100644000567100000120000000016107172555115014372 0ustar jcameronwheelGIF87a̙,Jt@ALLG^y*bVHس)>Q nJ/y\sHUA]ahedF;file/images/sdir.gif0100644000567100000120000000026407172555115014365 0ustar jcameronwheelGIF89a̙fff333wwwUUU"""!Made with GIMP!,OI8+0 :@1/hA0.! ­RXPp% \Y!U\vn9G;file/images/share.gif0100644000567100000120000000020407172555115014520 0ustar jcameronwheelGIF89afff!Made with GIMP,K! .2UQNX o3S3g;r q壚nfZ䲣;file/images/search.gif0100644000567100000120000000020307172555115014662 0ustar jcameronwheelGIF87aȘ`d`,P*+" i[ȌEugڲ3^7B2G0 H:֫3r/ %s E"^$;file/images/acl.gif0100644000567100000120000000030107441017247014151 0ustar jcameronwheelGIF89a̲fff333LLL&&&sssYYY,vI5-D!xPfN/@_':3 }!l*(Db:U,SD6ZaYQfӗsoW;Sr}| ~YwT uz 5;file/images/.xvpics/0040755000567100000120000000000010343020572014314 5ustar jcameronwheelfile/images/.xvpics/preview.gif0100664000567100000120000000120110343020572016455 0ustar jcameronwheelP7 332 #IMGINFO:24x24 RGB (412 bytes) #END_OF_COMMENTS 24 24 255 mmJmmmm'mmmKKKmm&mIm%Im$IImIIm&m-mImJLjHn,,, m8<L5P518<9m<8<nm<m<<nm<nm<mmmmmmmmmmmfile/images/add.gif0100664000567100000120000000016607445567455014174 0ustar jcameronwheelGIF89aUU!,;0IAち2ik,<߬c2Th@ Z4$td&KMjJZ;file/images/attr.gif0100664000567100000120000000026407445567105014405 0ustar jcameronwheelGIF89aUUUrrr999,iI8gYaHJK/ gp 0F?(0MIR)&VBg:yDdǧ-_'d̔SC/S& !;!5;file/images/sub.gif0100664000567100000120000000014007445567233014217 0ustar jcameronwheelGIF89aUU,-0I8e`(CDhh *?ߨ epH,n;file/images/ext.gif0100664000567100000120000000220707461411264014222 0ustar jcameronwheelGIF89aJJJFFFϭRRR+**777KKLffgZZZ###MKFy ~*}vc'''Ā[ $ٱ$eU2ϡϧÑ ̦O+)%vvv~Uö  000PPP333hhh~~~ ۾ ^^^jjj Ф WWWĊl qgI [ۭc^M؞ӫ{e v, }---ιޣ dd j&C3OOOr ݈.۫Y> ޥ p4zzzjI3ުǗͥQʑ ߦ ͔ bB///(((hH і ј չzwl[\ m˽,80  ȰH,`ËH @@ @6pC 6$PɐC@`́$J8"+~ d 1d5l8#?yHB$ B# $KT2i(D2e* Xqx ,Z0nE^ s֡0`L-P) qxMDTM7o‰#g:p sO;file/images/mdir.gif0100644000567100000120000000025107702474201014346 0ustar jcameronwheelGIF89a̙fff"""DDDUUUwww!,VI8+|zzD Q^BB( -%}W p5"kBz H`N9G;file/images/mount.gif0100664000567100000120000000033507702475415014572 0ustar jcameronwheelGIF89aٲsssfff̿,IA ¹5CiFJűAjEج+!>DR tXLxtPhEA /rqpqRu2mSf46.y}XZ #.b^}6]lk e|3iV3 kJ;file/images/smdir.gif0100644000567100000120000000026507702474754014553 0ustar jcameronwheelGIF89a̙fffwww333UUUDDD"""!,bI8+(*A`|G zJ/AqS `8l (vDվnuhah;file/images/udir.gif0100644000567100000120000000025307702664724014373 0ustar jcameronwheelGIF89a̙fffLLL]]]UUUnnnwww!,XI8+|G^aFAqPߟ"I$lWP1 Ȁ2r@0&q6Aᕂ=(ȁVRJw;file/images/sudir.gif0100644000567100000120000000027207702665074014556 0ustar jcameronwheelGIF89a̙fffwww333UUUnnn"""LLL]]]!,gI8+(*Aq|I,`<0`1ӧh)0($Tb`b=j hv+hБy)w6;file/images/delete.gif0100664000567100000120000000014310005405610014643 0ustar jcameronwheelGIF89a,B˝aR h=zh5٘ӽRais2F{|kv WBU7c1H1 $i;file/images/preview.gif0100664000567100000120000000063410343020572015074 0ustar jcameronwheelGIF89a@@@@@@@,,WWWAA@@AAAr2AArGrd::,,33,@pHŤRxd"fQ 5>j%fæ`@.@@hpB^޶ n~x  n o lo  om~k !"#$$#k$$k$%k \S ;file/images/Thumbs.db0100744000567100000120000011300010374220245014467 0ustar jcameronwheelࡱ>  40 !"#$1&'()*+,-./7235H68=9:;<>B?@ACDEFGIRoot Entry״x0a12 3  !"#$%&'(*+,-./023456789:;<>?@ABCDEFGHIJKMNOPQRSTUWXYZ[\]^_`acdefghijklmopqrstvwxy{|}~ RGBARGBA?O:v;6魧7 R# ;W|Au ñMm9T.`GaڽShMki¡uDo;yBDqԥ:HR@g`GEyBDqԥ:HR@g`GEyBDqԥ:HR@g`GE[cïq\(p0zVXjW&ud * (^U<:ɹn<Š) {QNs0 sȧxJtmmvyp9dS{\: 6Ҋi7:?vvF8_榽_ZMΏ緺(]ÑWsykacjhԬxLx] =X)9ʺ {RR3r?''o}rsO£dϸSn~Tlm=? *K("b rG$RY@։[b=I$:HܳI'_ uRGBARGBA?~"(< t ҡqu FO:\L`:tiP'hڊ;5K>9 biEqZ]Dxgs{O uJ+ɦ I->\Yn%w֊i"᷒Kh1ϗa۷o%(q}0c_&/'VC+~YVOh&_PKJFA4HPZciяg?ŞW/è%N $(-|J+j+ xhRGBARGBA?`$i"p(_{׻$M#Bt޽ %oȁ( $,VȷRNIXn!a["KB!;hUjQ\Sܘ,nlNQI$ u=ɂYϘ6˰%1]`@br/#*4k##~^98\ٯ<'|gi7K̬eLjUb\Nv 眅ŶWyΙN֖ec%BIv(EE^oq)1d~2`8$(D;iHdV^һ' 蕕2U=Xȿ#,k" `AWS5N|KK҈gh\'1Y axó~yC 9'k?5oxv}_S1[w|@$8 g/ϫv6֑+q(>"xtzoxL㹕>eF?\i2[TkC'O|iqn;SP>ch|ҁ<2vnYS_4Mei>[i@}@Vy ;N7mө&lo-|O>l<~E_Rx;A_ x?Jїn[uY 2cԞWҴeۺVB r>X5'ǃvUC!?[uExm~%o펍^gޤzc^t^7FcoRN1^/g:[_icE~ױᷩ'p^` RGBARGBA?mri^fp1Nd}^.r=[\_ y A1y #V&E!gl$&HaneH#^7Gܩnѳ 'w(eݽċ寠^7Gܩnѳ 'w(eݽċ寠^7Gܩnѳ 'w(eݽċ*g(kyBQ2d` 6pH/$PL썷28 d/k6r渉!G* F#mL';oV 1 {>RV$n'o^Xuh+mY=)@+7Fѷ,:[|6,C{Eeh_ RGBARGBA?ώ|]Z|y84 ml$f ī) A) B/.lqi7|IVR@ SJ/E%Ӄדnquݟn7nq+?*пNo+^Nݹ1v~]ݻxx Ki}v{9cM6ӷ&LbB $oo u >/x.trG,ifv$ɒUHUP$\#__?QWs1nߛv1+_.tI,vIYAVR  xhRGBARGBA?8SϪZ٧TSIZtC"rLp>QqxYTO ȩ.sg$".D6|v eϳN>kfR]NI%iE \0l!Fge|E/T.i dfv# 0Xse|E/T.i dfv# 0Xse|E/T.i dfv# 0XrT?KBs&RпEC /7Er;|@SG(.3ymZ\ܤyda9Bܥg&$T; ^sd((7)YNP)yɩ# 4}Nkb;<ל&0J% GF,WGM}ՕYO H~U9ӵt+͒Y͵'BwE/ q]=7XsgkVW%fkN?2^A#1⊧a?S vXO;EJ^%KۅmCYb%U#R%hKe[/¶a},Oڪc)[qa%2R[C䰾XmU_b1w-ĸ0{]rZu޳"\ƌJP#rWxxペu˿ izφrf_2)@ ]}2ώjW.5]>/ə~ohʈ27%w>89g\;ӿկ_?Nk*u;Z+ hXRGBARGBA?6fE(Fۖxfi$X⌄miZ6fE(Fۖꍄ7WZuwAXUnk;H6]i$v c$E=Ie("njyn QOtyYJ2H[=TS.-o,dR,xǖ8 Lt9V01 b11n*UU?\A-\ut?\A-KCK+^TMѫ˅vhwivpEs ʖɺ5pYp-m.ayR7F .ۚ*k*k*k(Kw$aqg_=.-O q KY|y>2Fp(/&aHH"9$z3֋CIg2,I<8㞿Llj:|䌤"+#A0x=JK.m丹.8 v.Wy%ͼ02BRN^*/$H\X*IԹ RGBARGBA?uy7=Fd H{q\j/eU }Ćn :0>q\j/eU }Ćn :0>qEX:u榏_k#*IQ+b@YϝjdtM\G;kUOޒ4VĀ/;;Wbך>svG쪟%Dhd^w>v=m28n:֞$6@I7pkzOK\HOm 4UZYUP[ȿ:I\_j+K* yRI+V%ieUAo"I%p`}}ivwF%n@;(=6K6i-tdHܭE89)]żInۣ"FPn@ 0)AE RGBARGBA?ώ|]Z|y84 ml$f ī) A) B/.lqi7|IVR@ SJ/E%Ӄדnquݟn7nq+?*пNo+^Nݹ1v~]ݻxx Ki}v{9cM6ӷ&LbB $oo u >/x.trG,ifv$ɒUHUP$\#__?QWs1nߛv1+_.tI,vIYAVR  RGBARGBA?J%[ ڡt<ko+Kt)n2j]d .O`FGqԭ-X0ˍwI(;=ƾ!Oy.XII ]{䜜tS-K$oE{rH#@Wp89''99/T x8I-A7INJ|3bWCeRB gd q0qgS:įm?42ʤ8<`㫹Φu^! ~heI 0 q1x]E(-`%#Q7 r}kyDj6yOw0ZA/(TF܃78 2"RGBARGBA?n/u]KPHy/]-Nj /%[u-@#s|Unu F;YuMD2~/\Unu F;YuMD2~/\Unu F;YuMD2~/\Em21 u>31z41 [51~Civ2,Ja޴Hm.Y[l75s֞i 3+w抵''u\HFFS:gRx {7_č$dme?)#J''u\HFFS:g RGBARGBA?xL>\mV*}?&^"<+ϫjhդnʣO j ڵ!ikψ9Je<NWͿ|G ?S/wgzwtm?N_{O+>ӾçW^ [I[J>wVzB }%i*`մ5ѷuaه ^ [I[J>wVzB xO']j>"-"|O=IO)TKGWA}Q/=@W㟅?u("`%<'? +GCz H7c׌:.(5'7Y nǯu;/] 3PjOd% n*ݏ^3E}=o?juxX%g%퓌ajXkِ݈&Wo}3'+ԴNS}2M;lFrѯ5=؎y1yj7O}%o|F0'(iXjw7 MlXoDk娌e<眊+;iHdV^һ(' ꕕ2Q[Gj {ݾrWA V %}TB QO0`s' õٕrD,Np1{.%{CDN|ÏL{uufuvUK3u0?& gs•u+P(\èv.:=O0 4a2zƑ|6p-$/o y=I\{wُImnI'u9=2'4U$S92Fs?.VߌMe$㽲p KTi*aI{d#9۟r4Ю5OE{_M pnpGP{c׊Oix~}\̂8m,e6ulzSK}>/ͬE dFl2 ^ pj*!gצ⌞V,,Hָ6Z|ټ',{\?}-WZ>L|QŖ`E=NNN/Yn/|siZ7$E SJmG$ ӧ̺jzิ8P&b$x_ou?GηOpV"g,\gn6G$_XA C5 :8$% jTtp}I) J8* +   ``RGBARGBA?xxFٛ9m䵖&;Wx#ţ:4ow%7d|Qڽk-1ѧ6f[{-eɿk&;zbk9q/ˀzsXä xY:͵6tLo`G#WgǯOd@aO3Z,0Y^xRӚ8|y)㜰x\E ; BsG>o1-:Wz Me4^78\q:Մ]^]/lm5!{^ qǠVӮuywSKAxCzɥ鋨D\yLcO'Hu>M-}?L]B&cy< hx@ޫiim+b0p.hqpGhi)i2Kۢ d/]sqpGhi)i2Kۢ d/]sqpGhi)i2Kۢ d/]s? ^ɡk^Ϣi:ؚQxfKUnqҸ? ^ɡk^Ϣi:ؚQxfKUnqҸ? ^ɡk^Ϣi:ؚQxfKUnqҊQ;UV³vO{ 2Tdt Q;UV³vO{ 2Tdt Q;UV³vO{ 2Tdt +мVωu D7權Y[s]F|Kh`H!5dRӚ4/]EkCD y"V>^]X4mĖ<1ߋƎe .,|Qoƚ6KMGqlz``Wh>(M@% w񣸶YwvA=00(mw^ysx]xʅk\kkŚ˞ cT+]G=k[],ׄ\kh2Z>93Er6^SӴ`7zRZ\YܴSGjV+wڰ R7FcZƩUbzM .cxkjV+wڰ R7FiIx RST63[ 8*@ :iIx RST63[ 8*@ :iIx RST63[ 8*@ :*5O;XtBk6k{79#N}O u? au oͬ}dX[99>®x3]/㵇A,!6iyb9nX +OW~"_~6gy-C;0$Q^>^!ahG%$I F2z?x-a,wܑ$3@u+C?7:R-BQtfʳzqS[z)l~(gx ~Y܃}8)=eΔ?hP]3ټn?rnAޜWCşMʽ[MM$$\? 7Uqgoo?VSI"W,zMt?Y:?z[պAH(nQxck7ړj:?,`8'Gnxck7ړj:?,`8'Gnxck7ړj:?,`8'Gntv_8-Mf] @VgZx'q6Z,ͬI~*OlY5Yt;h/)4xBW=Xc}h+6U# 8 o[8 +6U# 8 +bI>d-)Gē|8[TS1ɮ'TqcӓEz_XY..j°\\=af3z1FFF;@7 )G^ ɔ]#xGp#A,*?מ|'?<TyGp#A,*?מW׸׸EQEQEQEQEQ_ ``"Dacl.gif" +add.gif"3yall.gif$ attr.gif([]7binary.gif([]7cancel.gif(lD;hconfig.gif$[]7copy.gif" []7cut.gif( ţdelete.gif( []7device.gif" []7dir.gif$ r(down.gif$[]7edit.gif"X,ext.gif$[]7file.gif$XEPjfind.gif4 B2RGBARGBA?R}55kXe[028l;{}K?լGbnf £ ?x/oSVJ^u 3(`c """jnnic8EeK` cT-[MѭT-,`g]L)lXqji5j K%-p 3N=cFO^ꖈy(6UA{UA{UA{QKKKEQEQEQEQEs>+[IKypGE$X<碊+j5-7pJufӳmnx yb?r7WʇYVo\q7:xŮ/&sQ% b\U rI&{,G@0($rXPF} JFyAk:cC{!XM"{@}AóDM^"JjG$]ޗWInMoڥMoDnoGQGӽz6g[,)HMbd@N9H-uhCwu=AkR袊((C6v% 6 jOc>Ws__xfF6qzSt+ jNf1fմ-K4c(_Whޛ.rCd?6>akcDգlE 4VjVYIq#TRI5YIq#DRI5 mnQ+߈*^'2ے.x>|=bPrͧYKyB깐֞C\|y?=NāfV}=%.zI1$,7ԡ1`1qɢ!*Bs4I8h1f^xŌ~qArk%kC=n6yS~&ӸͤA澆2zeռm\*\|q#ymDOܙEaΒ#6r+cN׬G? ? |7 ň/CLOzVU!OQZvŞGt;]$jŲ9Ȣ-'K_!O&|OZwmeњQ[zgl 4d1jOے'Џ:/uh{ L$T:]HeC7john9K ^WX隄~{zKny<G4nQj6K`& QE|ָkPFuy}?pc!l_EwkY@P##>IG*s4V7)Mf 哲@z:ٮc:;qqfW9F-9k)y5yZ/YCI>}ه"WWQ-9AZ>v ۃLټbs}h41BώİF]|I,X.YqؖO֨dR2E L0XK(PҊ|*y5;ַD|U Jh^UHi(!c{ +_W =ԢeWn[ a*;j,k}6m82ڟR ;qd^덭:#bp94ۖ٨If_#4Uwsf3)Uڧ5w7%zV5<":Ox2ivlcWRGRX,XwZ[XJHXdbޕF+PctJ+_m!Ԥ}x+_=ѓ@GCW9dSg#Ɗ'r:X_}3=ÞCoaW:mɼn[MHo?YN@zs5dNr`pGJt[ETprz{Yڶu `ʇ(OOmq4EGrvzzeQw? 7[}_:D* agQ^PhzWkxKwN1?@8^_ZüF i$ +tQh1ҫy|tE"Lb!dv VuB˰'׵CvY6WC$̄y 2<72p5s3|sEU&D3owy'Õ3X,#+3Z#XXjJ$rAT~׷x~mj[5G`5OoK+lyv0Fcr?!E`-&#f5躲 %(Tgq+Xe(~5ty2eVm^C@\sXgi#F1(ZkC_oqGGYmvjP\2*H;zDUWe+&Rޙ'%NE*CiA -H6ֶ5+8X~B\׏t-O_b]9DcE;{^aq ꇂ*SIWF#$ѼS!F,ZF[nGsڹ_^AabwQ<}zW+kl,T⃹'+ӥp!F#8>i#w`sZIJ+4F8ʸgwZQ#GY{=kѬzDjQqϮh v4wΌ`q?lM3*L0I/ ˏZoh #K2j޼:+յ Ҭf#xEӤ]CE!_l׺t'<2.cd.\|bћJѧl2?WC7_e)UL2:dUi}LrI?*Vv8\d9^.&@|ܩzЊ)\jľo. n~\Օu{w1 v(9J@2S$ktdc\j*ʎõK+[;s2q򤼿,˷5;Ե &.ʦ}oj+|-e7@qBBC[tɚFb`>Z$=+ Y .ݱ» oB`P谘t9o4U^hB?Sp}L*~m(-lN{[d۵F zz m H*<1ŘYKu<;hH<qj_Y10游>0xC&Fݴf(|=4FKh>5Ɣp %":ksJ^_=oQ$BEzR+kBZ:ɤ5V9Nlq^6Ѽ[;]/Odz鳉7F}+70ú;cۏJԢb$ۏJ(FZ d7iEF\mJ*|~U_fPK -䷙>A4obZE30&+,dұqX1޼^#>[I-\Csj~xŚ̾na'7 Ɗo4Ե{җrw;a^Ӥh7t34쫅g9V|9;º,:uC-#ݘ4W2ouik5%[`mqiWK2I6Pr9Qz4W(+EG@1[((q+ݚxTx{iB:1\$iI- =A.;~p%gz0qh|0tZkdi-: +|E ;;E%Ι W hKz'/2Cj[{}0A5]oueRdǯ ++zE$M|'QUcƓ`Igi]A_B3g/>wq;,=EĀDں8# Z-'n9TS`+?S Y+\pW(=ͬѵ̠`3GWOAnSm5u++-ï0h%O^oȉsJkqͩHo58"=KZ1W- O<=}z2]jZ|g!O{פ ]jsb{^0 UF*ڨQREQEQEu/|=gtX[y/mcZF3\$nL zʸ|*׉kk+mNϩ VmR[ܧD'Ymsc:yAq? e4fQtK(R)W%b$ AE7nduSḀ=Ԗ+[fo 3Cw{d3EF ')TVƗ'ne/Y࿉Za?=^YuC_3T.?CdojE }  +WL W snk`W>-?LۤIhMwZ/Z m.+x'U<=rZi60:^[ܞZuEQEQE9102512 22! )RGBARGBA?5:/__ċ;^'on^hR]],(>9>&xn(G|%̈€ҾcWzR+*%\cjSoV 4{_ cQV7[__>ծ5+3Eyo;K2H#<]RH!A60. *KB&iGV$!__I]|Ts]6.L4y:6ICz_X}<~>~17goE r_;xcvv_}G%ڮ7^f17gon 2i"[Xˑ#=>XյhehW˴K?|n[Fh +BmF] \3 uE RGBARGBA?wq18+x{\G 3swq18+gNϲoۏ/nwӵQLi_?ߝqݎv?i{;;>t[n?@ABCEFGHIJLMNOPQRSUVWXYZ[\]^_`bcdefghijklmnopqrstuvwxyz{|~ qRGBARGBA?ə (ITݍ | ̑TMqjə (ITݍ '߳>ww=3Y>oNc|GvϽo3wvLVMo42AsnB;pjޝ&H.mY}Gb8# [ӵ53D͹ 4RHGut؏.3<[$0Y .{]6#kˌO#L$VBG }kM>SŲH Z+j+K8a%g $7y6\~9ҹa>4VpCq`u~=+K8a%g $7y6\~9Ҋ\\Cyg8@,YTw.{GN9peʧ3sޯ:tY  .VU?˞Tn׿cÿi^m>ݯLJ<{oqP}^Uyy߽:⊼9կ0XyU䰁w6y/"ү%ck)y0~p ~W P@RGBARGBA?{Ld1]H:vP⽺^4 wWj](8n״6Cڤ*a +}VkJ.f܏,=8]bQs6yeU#,N?4TfqmmHX0$ OjWt rO H {TfqmmHX0$ xB5&̙z@!fLq ~ɳ&fފ۴y #Dk<}Em<32 \4252*62%5>CgHQQE\ZC <:|_U5> àg\ZC <:|_QY!е5ni"BG wpIV=Gt-MuH>抏H5ocJq:ǖ,@9#=k["wLu1,X rGz"=#HeE;a*cX 8A^oakjۡ7Xkm-m[t1K}Mz-n Ic RGBARGBA?Dr37B7 gI=n o|6{Wyߒ4yߒ4yߒ4Qn_t_cqދrGr3[2;m[C5@j']m]T5MEC?`]s] KTrv4vyHi.R9ʑU4{wsQ`zU4{wsQ`zU4{wsQ`zE\gt)#8cW- o|H6UpwB 3v>W RGBARGBA?xRӵi-ɢU"f`{C^jZv%Y4JdLpHq|AKNդk&T ?|Y뾚wMM;V_&劣(>8K7hd)5R$JCmTfI0?g[fd+Hp_Jg[fd+Hp_Jg[fd+Hp_J*Q4UmBAsxmBAsxmBAsx]<%"ت@3m jwķ:}0H6*0p1L5xZ-Οyq *;  q?-z ]1Kg"m#7ޮ.;W(e}1RH9_LQOՅ~\*g;^X~Ei|:˟VeLkܫȭ>oV1s̩{a RGBARGBA?r͝ W 88}6v[1\x,o+r ھ[}xOQy.!Hr\ RNwd\Cg<#!3޹o=F紸y#pFC 7U&= ţ9\ fhZƗ Y *&܇ s72182992D03K$*4Ķ@ֳ<߳۷w;׶gGM/}yg-nwm;j w%G_`(~Ͽ[n^qv[+uF8;+uF8;+uF8%UҜwq"Op% )a!W9T WJr<,S%ĉ=B$,Xt\\P2v])h?kx]WQ.1i|8d'dN@]D`22I'|.Ϟ4Ϗ^9Ub4KD13T-23ald"0N d$>Pa_IZzew6w )S9A_IZzew6w )S9A_IZzew6w )S9AEc^^<R nE@NN\ 2q+ľߌ. ^Bu2*rpd񓌜AX%aqPW'dz + x[F><᫫?3H]BoF9<5mP?!u E PnwW8lׅmC4/ak$k)Am^+ xCCNK"؀qHp3W~ y+I-`E2g5 VZ;3q, db#AEnVnQ_:xOZqOjQiSqveiF0r0sE|? kߴmƩ>ENںUmy95[~ѷ&u;ojVYc#;^%4YE"afn}ÏEeoir7}49Y_뾚w z֟s5$<*حГ{S]bZfXD\Ayz|+]Z}׋+T#bBO?1Enn^_#DӼG:No|ȷn 0H#Fx?tZ3hodݶaʐG  yčN:,g"ɻl(Õ @<+CvV)//R_?^ۏ9EW-pok0CJP Nzb8uU!%C(@^'=1UKe:i /ѵ /olf@pZ6 34mB  pk> PBd`>+]Ն{ u :-0*cua^wv]CAʻ?Xiױ]PègZkſWOIּſWOIּſWOI֊ +JtQotll?ι=ħL6AP#ϴРHKtPIڷdNOy4(=v,>?M DEv@:+󽨷h1oVp?ںOkYO;ڋvcQ&~Ulޝ󽨷h1oVp?ڊحآKo%ԭ- oo|-Fp8WoNA"Ko%ԭ- oo|-Fp8WoNA"Ko%ԭ- oo|-Fp8WoNA"gO9aR¬?8*_U>fUH(#|62ǹ=MAkR(_.́OSPxhT1qp"8˳`c,{XciXciXciEvH (rE_~NcYG]-2dFCp:*Ǎ_ȊS69|:"+5Nfx8,<8a+~k>v+~k>-4>d*'_ ^-8CH2z-4>d*'&Gӯ&3\Y$`zMΏ^LfIb9?ZNqgr~TV6Q,B'Oiemak /r{V6Q,B'=OSY^ R * XMi _oW,&Դo b/phf\*\!,dǠs6 R 1` 6=6keė a1EkiOFh)Qe٫[O|~m|r3@J/Z;k仑f T`j+Z((+Afirefox-logo.jpg$[]7pipe.gif*\preview.gif&[]7props.gif*[]7refresh.gif&!-Emount.gif"[]7new.gif$[]7open.gif&[]7paste.gif&[]7image.gif,[]7makelink.gif$Emdir.gif&[]7mkdir.gif$Kqgoto.gif$ []7icon.giffile/images/html.gif0100744000567100000120000000253410374220373014364 0ustar jcameronwheelGIF89a01+ 8 < MD3 O%<&X3% \'V +^0b7Q3f ;n;%k"8t/7|A5V k/L)G}_5Kg8*# (""%Z9%"~A33 , r3802 nD<Aa?:]_\W??g?j>HG *{JoFralxIGQZ%=zI>yX)robQ Ql_TYYXxIa|c=KZ B]O\|_`HWdfzuf eiiooPEq!ml*l{Vl'~Qt{~HTs c_q v uZtrww3y%XPt.· {ۄWrK΍J`_W\ΏB11f˛2_:_¤+kՇƤ=fokdѢ@إء9Ϙ̛ qЭM~{¯˶YҲ_wӾ% ̸oᾸڽZθ ܺےW&F;3ȅ辴ǐ%LQҢ;е-n-j!Created with The GIMP, (4V@AGnvL:Ӥ99>;:H-5\HsϟovDhܢY|sf0ugI9(9Sc^nxZw<=R!?\r*U+ױH1',çn}a2eTCd 6b PAD%F@f'>Nk$3NH8'jŀ.QH NXSM KJ А۩{AE+VX fs 6&` `1 P2 1CD1m 0L0?]_,Dцε"ޠ2c O=P>1!,DP?$0 .DQ!s ?*#JS D: Jq >>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!Created with The GIMP! , H*\Ȱ;mhre`Mb#G͘.[hi#PM&M4:l̈ ZK 8k̔))`hBE T'Fl^Ϝ8otYRG-^n deGI"=#F$m"rj3&*t(#.R!8Z D$ɓEɐ <` LVqR'FtH)UbRŊ&Erv"KL᾵!7Zl+gHDRED(KR8Lu*q uj,S 1ֱj!Դ,/V<1|NBQx"2րqЇ (;file/move.cgi0100755000567100000120000000130010271573713013113 0ustar jcameronwheel#!/usr/local/bin/perl # move.cgi # Move some file or directory require './file-lib.pl'; $disallowed_buttons{'copy'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("move", undef, $in{'from'}, \%in); &switch_acl_uid(); print "Content-type: text/plain\n\n"; unlink($in{'to'}); # in case we are moving a directory if ($access{'ro'} || !&can_access($in{'to'})) { print &text('move_eto', $in{'to'}),"\n"; exit; } if (!&can_access($in{'from'})) { print &text('move_efrom', $in{'from'}),"\n"; exit; } $ok = &rename_logged(&unmake_chroot($in{'from'}), &unmake_chroot($in{'to'})); if (!$ok) { print $!,"\n"; } else { print "\n"; print &file_info_line(&unmake_chroot($in{'to'})),"\n"; } file/RemoteFile.class0100664000567100000120000000735410522475216014557 0ustar jcameronwheel- C} .~   }      .  . . . . . . . . 9 . 9 9 . 9  . . 9 . 8  .DIRI ConstantValueTEXTIMAGEBINARYUNKNOWNSYMLINKDEVICEPIPEtmap[Ljava/lang/String;parent LFileManager;pathLjava/lang/String;nametypeusergroupsizeJpermsmodifiedlinktolist [LRemoteFile; directory LRemoteFile;.(LFileManager;Ljava/lang/String;LRemoteFile;)VCodeLineNumberTable()V()[LRemoteFile;find (Ljava/lang/String;)LRemoteFile;add(LRemoteFile;)Vdeleteshared()Z mountpointmountedfs()LFileSystem; SourceFileFileManager.java im XYjava/util/StringTokenizer i java/lang/StringBufferInvalid file line :  ErrorWindow ijava/lang/Error Z[\t \\\ ]E ^[ _[ `a bE ca d[ gh/ \[ ef list.cgi?dir=  list_edir  RemoteFile ij en  xy  FileSystemjava/lang/Stringdir.giftext.gif image.gif binary.gif unknown.gif symlink.gif device.gifpipe.gif VWjava/lang/Object'(Ljava/lang/String;Ljava/lang/String;)V countTokens()Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;)V nextToken FileManager replace_strJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)Ijava/lang/Long parseLong(Ljava/lang/String;)Jequals(Ljava/lang/Object;)Z lastIndexOf(I)I substring(I)Ljava/lang/String;urlize&(Ljava/lang/String;)Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;lengthtext compareTostabLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object;ntabmtabZmounts .CDEFGHEFIJEFKLEFMNEFOPEFQREFSTEFUVWXYZ[\[]E^[_[`abEcad[efgh ijkc**+Y,:,Y , : Y WY**+W**+W*******i* * *-!*"# *"$***/%`&$lV  4!>"H$Q%b&s'()*+,-./01imk*l4enk*'*Y( *W*) *L+2+# Y*,*+2- W*'3*+d.'=+ *'d.Y*+2*/S*'l* 9:-<6?N@VCaDiEDHopkZ**0M,">,,2$+#,2lMN OPQ"O(Sqrk_*'`.M>6*'6*'2$+$1 ,+S,`*'2S ,*'+S*,'l. X Y Z[2\7]:_GZMaYb^csrkl<*'d.M>6*' *'2+,*'2S*,'lg hi#j0h6k;ltukG/*)*2*3*4*3lpvuk,**5lwwuk9*5L*++6l |}xyk**7*38lzmkK39Y:SY;SYSY?SY@SYASBl {|file/FileSystem.class0100664000567100000120000000176510522475216014610 0ustar jcameronwheel-I *+ , - . / 01 2 3 4 5 6 789 : ;< = ->?mountLjava/lang/String;devtypeopts[Ljava/lang/String;aclsZattrsextmtabfstab(Ljava/lang/String;)VCodeLineNumberTable SourceFileFileManager.java $@StringSplitter $A BC   1 DE   ! " #java/util/StringTokenizer, $F GHjava/lang/String  FileSystemjava/lang/Object()V(Ljava/lang/String;C)V nextToken()Ljava/lang/String;equals(Ljava/lang/Object;)Z'(Ljava/lang/String;Ljava/lang/String;)V countTokens()I   !"#$%&*Y+ M*,*,*,,N*, *, *, *, *, Y-:*6**S'F O P Q R S' T, U9 VF WS X` Ym [y \ ] ^ ] _()file/copy.cgi0100755000567100000120000000203110276375334013125 0ustar jcameronwheel#!/usr/local/bin/perl # copy.cgi # Copy some file or directory require './file-lib.pl'; $disallowed_buttons{'copy'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("copy", undef, $in{'from'}, \%in); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'from'})) { print &text('copy_efrom', $in{'from'}),"\n"; exit; } if (!&can_access($in{'to'})) { print &text('copy_eto', $in{'to'}),"\n"; exit; } if (-l &unmake_chroot($in{'from'})) { # Remake the link &switch_acl_uid_and_chroot(); &lock_file($in{'to'}); if (!symlink(readlink($in{'from'}), $in{'to'})) { print &text('copy_elink', $!),"\n"; exit; } &unlock_file($in{'to'}); $err = undef; $info = $in{'to'}; } else { &switch_acl_uid(); ($ok, $err) = ©_source_dest(&unmake_chroot($in{'from'}), &unmake_chroot($in{'to'})); $err = undef if ($ok); $info = &unmake_chroot($in{'to'}); } if ($err) { print $err,"\n"; } else { print "\n"; print &file_info_line($info),"\n"; } sub split_dir { $_[0] =~ /^(.*\/)([^\/]+)$/; return ($1, $2); } file/GotoWindow.class0100664000567100000120000000476710522475216014631 0ustar jcameronwheel- 5L 4M NO 4OP L QRSTU VW X QYZ[ \ 4] V^ _`a Lb \cd Vef g 4h Qijk 4lm no pq pr st uvw Nx yz y{ s| 4} p} N~    4editorLEditorWindow;filemgr LFileManager;lineLjava/awt/TextField;goto_b LCbButton;cancel_b(LEditorWindow;)VCodeLineNumberTableclick (LCbButton;)Vdispose()V handleEvent(Ljava/awt/Event;)Z SourceFileFileManager.java @G 78 9:java/awt/BorderLayout Westjava/awt/Label edit_gotoline @ Centerjava/awt/TextField @ ;<  java/awt/Paneljava/awt/FlowLayoutCbButtongoto.gif  edit_goto @ =>  cancel.gifclose ?>South  G G  java/lang/Exception  FG  DE GotoWindow FixedFrameCbButtonCallback EditorWindowjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowjava/awt/TextComponentgetText()Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)IeditLjava/awt/TextArea;java/lang/Stringlength()IcharAt(I)Cselect(II)V goto_window LGotoWindow;java/awt/EventtargetLjava/lang/Object;idIkey 456789:;<=>?>@AB**+*+*Y* Y* W**Y Z W**YM,Y,*Y** *ZW,*Y** *Z!W*", W*#*$*%CBrs tvw3xHyVz^{j|DEBl+*Z*&'=N*)&N66-*<-+ *),*-+*!*-(CB#&2=@FTXY_gkFGB- *.*/C HIBN*+0* +1+2 **3C&(JKfile/lang.cgi0100755000567100000120000000077410415140202013063 0ustar jcameronwheel#!/usr/local/bin/perl # lang.cgi # Return language translation values require './file-lib.pl'; print "Content-type: text/plain\n\n"; if (&get_charset() eq $default_charset) { # Convert any HTML entities to their 'real' single-byte forms, # as we are using the iso-8859-1 character set. foreach $k (keys %text) { print $k,"=",&entities_to_ascii($text{$k}),"\n"; } } else { # Don't do HTML entity conversion for other character sets foreach $k (keys %text) { print $k,"=",$text{$k},"\n"; } } file/EditorWindow.class0100664000567100000120000001543410522475216015140 0ustar jcameronwheel-          ! ! L    ! C !  8  ; >  C   H J   L    P      !" #$ #% & !' !( ) !* + ,-. m L/01 234 5 6 7 !8 9: 9;< }= |> |?@ |A B C D E F G H I J K #LM N OP N #J J JQRSnameLjava/awt/TextField;editLjava/awt/TextArea;save_b LCbButton; saveclose_bcancel_bgoto_bfind_bdosmodeLjava/awt/Checkbox;file LRemoteFile;filemgr LFileManager; goto_window LGotoWindow; find_windowLFindReplaceWindow;(LRemoteFile;LFileManager;)VCodeLineNumberTable"(Ljava/lang/String;LFileManager;)VmakeUI(Z)Vclick (LCbButton;)Vdispose()V SourceFileFileManager.java T  edit_title UVW XYZ [\ java/net/URL] ^_java/lang/StringBuffer show.cgi `a bc?rand=d ef `g&trust= hV&edit=1 iV jk l mn opq rs tuv wx wyjava/io/EOFException z{java/lang/String | }~    \  java/lang/Exception  edit_title2 Xc /  k s Tjava/awt/BorderLayout java/awt/PanelWestjava/awt/Label edit_filename \ Centerjava/awt/TextField  Northjava/awt/TextAreajava/awt/FlowLayout java/awt/CheckboxDOS mode CbButtongoto.gif  edit_goto  find.gif edit_find  save.gifsave edit_saveclose  cancel.gifclose South    c       ErrorWindow edit_eover save.cgi&length= ` Content-type text/plain     java/io/BufferedReaderjava/io/InputStreamReader   k edit_esave RemoteFile  V V       GotoWindow  FindReplaceWindow EditorWindow FixedFrameCbButtonCallback(II)VpathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/applet/AppletgetDocumentBase()Ljava/net/URL;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;java/lang/SystemcurrentTimeMillis()J(J)Ljava/lang/StringBuffer;trustextratoString()Ljava/lang/String;#(Ljava/net/URL;Ljava/lang/String;)VopenConnection()Ljava/net/URLConnection; set_cookie(Ljava/net/URLConnection;)Vjava/net/URLConnectiongetContentLength()IgetInputStream()Ljava/io/InputStream;java/io/InputStreamread([BII)I([B)I arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)V([BI)VindexOf(Ljava/lang/String;)IsetState replace_strJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/TextComponentsetTextsizeJjava/lang/ThrowableprintStackTraceequals(Ljava/lang/Object;)ZgetTextlengthselectjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;fixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V(I)V*(Ljava/awt/Component;)Ljava/awt/Component; get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshow trim_path lastIndexOf(I)I substring(II)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;(I)Ljava/lang/String;find (Ljava/lang/String;)LRemoteFile;typeIgetState()Z(I)Ljava/lang/StringBuffer;setRequestProperty'(Ljava/lang/String;Ljava/lang/String;)V setDoOutputgetOutputStream()Ljava/io/OutputStream;getBytes(II[BI)Vjava/io/OutputStreamwrite([B)V(Ljava/io/InputStream;)V(Ljava/io/Reader;)VreadLine.(LFileManager;Ljava/lang/String;LRemoteFile;)Vusergrouppermsmodified(LRemoteFile;)V showing_files show_files(LRemoteFile;)ZtoFront(LEditorWindow;)V   n*,*+*,**** Y* Y  *W***N-:*6:.:6id`6:@:6 : 5 - `:      :!Y":#$*%&#'(:*)*+*,N-.-eh-  -".9ALUZemd*,*,***/0*1+23+ Y +24*1*156*1567 !Hc*8Y9:V;YY*?0@AW,B*CYDZ1AW*1*EF*G,AW*B*HYPIZ)AW*)*EF;YYY@OW,*PY*ZR*[0*TZ\OW,*PY*ZR*]0*TZ^OW,*PY*_R*`0*TZaOW*b,AW*c*d*eb "9LZby+Pu} +*\ +*^>MN*g**15f:/g6*hiM,,`jkN-/-l -l mY*noW*:*)5:#'(:*%p'#(: Y* Y q*W*r6s*::tuv*wx: 6:   y  z {|Y}Y~:  :  6mY* oW  : :.*i*Y*,-H-*ll-*-*-*,,-*-*%,**6,***W+*^f*_+*a *P+*U#* *7*Y*(+*X * **Y*--=+4EJXk~  ' -!4"=#I$P%U&j)q*y+-.013578:;<=>? CG#H-J<KDLKNSPZRbTiUsWY[\^`E!** ** *def gfile/FindReplaceWindow.class0100664000567100000120000000661110522475216016063 0ustar jcameronwheel- H` Ga bc Gcd ` efg `h ijk lm n eopq ers t Gu lv wx Gyz{ t|} l~  G G G G b  l 5n  =` = = G G beditorLEditorWindow;filemgr LFileManager;findLjava/awt/TextField;replacefind_b LCbButton; replace_ball_bcancel_b(LEditorWindow;)VCodeLineNumberTableclick (LCbButton;)Vdispose()V SourceFileFileManager.java V] JK LMjava/awt/BorderLayout java/awt/Paneljava/awt/GridLayout Vjava/awt/Labeledit_searchfor V edit_replacebyWest java/awt/TextField V NO  POCenterjava/awt/FlowLayoutCbButtonfind.gif  edit_find V QR replace.gif edit_replace SRall.gifedit_all TR cancel.gifclose URSouth  ] ]   ErrorWindow edit_notfound java/lang/StringBuffer Z[ \] FindReplaceWindow FixedFrameCbButtonCallback EditorWindowjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowjava/awt/TextComponentgetText()Ljava/lang/String;editLjava/awt/TextArea;java/lang/Stringlength()IgetSelectionStartindexOf(Ljava/lang/String;I)I8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;selectgetSelectionEnd substring(II)Ljava/lang/String;equals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;(I)Ljava/lang/String;toStringsetText find_windowLFindReplaceWindow; GHIJKLMNOPOQRSRTRURVWX**+*+*YY M, Y , Y* W, Y*W*,WY N- Y -*Y(ZW**-*Y(ZW***-WY :Y*Y** *!Z"W*Y*#*$*!Z%W*Y*&*'*!Z(W*Y*)***!Z+W*,W*-*.*/Yn $1F[ckx$Jpy}Z[X~*0M*10N,2+*"F-,*13`465Y*6,78W0*1,2`9+*%~*136*1:6V-;:,<C*1=Y>-;?*0?-@?AB*19**"C+*(6,26*136*1:6-,4Y68=Y>-;?*0?-`@?AN`6*1-B*19+*+*DY #6;Pfnz     KU`qy}\]X- *E*FY ^_file/root.cgi0100755000567100000120000000027610025210163013123 0ustar jcameronwheel#!/usr/local/bin/perl # root.cgi # Return information about the root directory require './file-lib.pl'; print "Content-type: text/plain\n\n"; &go_chroot(); print &file_info_line("/"),"\n"; file/PropertiesWindow.class0100664000567100000120000002024310522475216016040 0ustar jcameronwheel-            !  &  * * * *   4   9      B    J   J 9   !" # $%& ' ( )*+ ,-./0 12 34 567 i 8 i9 : ;< => =?@ A  B iCD EFGHIJ K LMN O ~ P Q R ST U V SW =XY Z[\ ] ^ 9_ `ab c def Jg Bh ijklmfile LRemoteFile;filemgr LFileManager;save_b LCbButton;cancel_bsize_blinktoLjava/awt/TextField;usergroupsetuidLjava/awt/Checkbox;setgiduser_pLPermissionsPanel;group_pother_pstickyrec_modeLjava/awt/Choice;octalbytesfilesdirs(LRemoteFile;LFileManager;)VCodeLineNumberTable add_panel6(Ljava/awt/Panel;Ljava/awt/Component;)Ljava/awt/Panel;click (LCbButton;)V update_file(LRemoteFile;IZ)V recurse_filessetup_leftright3(Ljava/awt/Panel;Ljava/awt/Panel;Ljava/awt/Panel;)Vadd_itemI(Ljava/lang/String;Ljava/awt/Component;Ljava/awt/Panel;Ljava/awt/Panel;)V set_octal()V get_perms()I handleEvent(Ljava/awt/Event;)Z SourceFileFileManager.java n opq rsjava/awt/BorderLayoutt uvjava/awt/Paneljava/awt/FlowLayout w xyCbButton refresh.gifz {| info_getsize }~    save.gifsave  cancel.gifcancel South Center LinedPanel info_file s  info_pathjava/awt/Label  info_typejava/lang/StringBuffer file_type    info_size  info_modjava/util/Date    info_linkjava/awt/TextField p     info_perms info_userPermissionsPanel   info_group  info_other  info_stickyjava/awt/Checkbox info_sticky2 y  info_octal  info_own p  info_setuid info_setuid2 p  info_setgid info_setgid2  info_setgid3info_sizeheader info_bytes  info_files  info_dirs  info_applyjava/awt/Choice s    North  chmod.cgi?path= ~&perms=&user=&group=&rec=&linkto=   ErrorWindow info_efailed }     w  size.cgi?dir= }java/util/StringTokenizer   s Westjava/awt/GridLayout  0   PropertiesWindow FixedFrameCbButtonCallback RemoteFilepathLjava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(I)VtypeI FileManager get_image$(Ljava/lang/String;)Ljava/awt/Image;text&(Ljava/lang/String;)Ljava/lang/String;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component; can_permsZ can_users<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;(I)Ljava/lang/StringBuffer;toString()Ljava/lang/String;sizeJjava/lang/StringvalueOf(J)Ljava/lang/String;modified(J)V&(Ljava/lang/Object;)Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V(LRemoteFile;ILFileManager;)VpermssetState(Z)Vjava/awt/TextComponent setEditableaddItemUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/WindowpackshowgetTextgetSelectedIndexurlizeget_text'(Ljava/lang/String;)[Ljava/lang/String;lengthJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; LMultiColumn; MultiColumnselected showing_files show_files(LRemoteFile;)Zselectdispose8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;'(Ljava/lang/String;Ljava/lang/String;)V nextTokensetTextlist [LRemoteFile;(II)Vjava/lang/Integer toOctalString(I)Ljava/lang/String;getState()ZgetPermsjava/awt/EventtargetLjava/lang/Object;   %**+*,*+*Y Y N- Y * (-*Y***ZW* *(-*Y***ZW-*Y***ZW*-W Y :Y:* W!Y*"#: Y : Y :*$**%&Y*'(**)&Y**Y+,-* ./'(**0&Y*12'(**3&Y4Y*567'(* 7**8*9Y*:;Z<(*<*=>*?:*-!Y*@#: Y : Y : *   $**A*BY*@*CZD  (**E*BY**CZF  (**G*BY**CZH  (* C**I*JY*KLZM  (*M*N~O**P*9YQZR  (*R*=>*RS* ?:*`!Y*T#: Y : Y : *   $**A*9Y*U ;ZV  (*V*=>* C**W*JY*XLZY  (*Y*N~O**E*9Y*Z ;Z[  (*[*=>* ,**\*JY*]LZ^  ()**\*JY*_LZ^  (*^*N~O* ?:* !Y*`#: Y : Y : *   $**a*9Yb ;Zc  (*c*=>*cS**d*9Yb ;Ze  (*e*=>*eS**f*9Yb ;Zg  (*g*=>*gS* ?:* * *s!Y*h#:  Y*iYjk6  +*k**Y+h- ./l   *kW* ?:*m*n*o*pZV23 478!9):5;?<d@xAEHJKLMPQRS8UpWY[\^`bd e2f<gcikmnqsu&v.w8zB|T}f~p",U{/=Eft|  $M%+q,W Y N-Y+ -W-#+**r=*V *VsN*[ *[s:6* *k *kt6**Y+u-*W*v-b*Y+w-./--b*Y+x-*W-v-/-b*Y+y-*Wv-/-z-.*<b$*Y+{-*W*<sv-/-/|:2}"~Y**2W4*<**<s:L**:*********6**W**+***Y+-*W*v-/|M,2}~Y*0,2WY,2N-:*e-*g-*c*Y+-----/*#  47HQ$.MTejw} *7=HSz~a5+*VsU+*[sZ+~+N~N+N   /4X+6+E+2: * ** *. *26>IQW!V+Y Y :Y,W -W,Y-Y+qW& % &' ())2*?+L,U-`4-&Y+'W Y :Y,WW1 23"4+536c7*R2*rL+}*Y+-+-/L*R+:;<=.>6@*D<*Y*N~<*Y <*^ <*D<*F<*H<*M*N~<*M <:DE F GH#J7KKLUM_NiOpPRS6+J *mX YZ\file/DeleteWindow.class0100664000567100000120000000634110522475216015111 0ustar jcameronwheel- FW EX EYZ [\]^ _` abc W defgh i djk Wl m [n dopqrs _t uv wxy _z{ | E}~ E  -W - _ - _  _ 5i [ [ _ _  _ _ delete_b LCbButton;cancel_bfilemgr LFileManager;files [LRemoteFile;(LFileManager;[LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java O KL MN delete_mtitle  delete_dtitle delete_ftitle  java/awt/BorderLayout Northjava/awt/Label delete_mdesc O java/awt/Paneljava/awt/GridLayout O Center MultiLabel delete_ddesc delete_fdesc Ojava/awt/FlowLayout OCbButtonsave.gif delete O HI cancel.gifcancel JISouth  java/lang/StringBufferdelete.cgi?file=   ErrorWindowdelete_efailed {  FileNode    DeleteWindow FixedFrameCbButtonCallback()V RemoteFiletypeI FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(II)VpathLjava/lang/String;*(Ljava/awt/Component;)Ljava/awt/Component;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;I)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlizetoString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;java/lang/Stringlength()IJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; directory LRemoteFile;(LRemoteFile;)V showing_filesnodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object; HierarchyNodechLjava/util/Vector;java/util/Vector removeElement(Ljava/lang/Object;)Z show_files(LRemoteFile;)Zdirs LHierarchy; Hierarchyredrawdispose EFGHIJIKLMNOPQ@**+*,**,,2 * Y ,^* Y*WYN-Y, 6,-Y,2W*-W0*Y*,2,2#WYN-Y -* Y*!"*#*$Z%W-* Y*&"*'*$Z(W*)-W***+*,R^ 4?E\dr|+37;?STQp +*%=>6**2:*-Y./0*W1023:24 5Y*6278WY9::*;>*<=>:*<=>:  ?@W=K**;AW *BC*D+*(*DRb "JTnqxUVfile/FixedFrame.java0100644000567100000120000000137510343026140014332 0ustar jcameronwheelimport java.awt.*; import java.io.*; public class FixedFrame extends Frame { int mw = 0, mh = 0; public FixedFrame() { Dimension d = Util.tk.getScreenSize(); double rx = Math.random(), ry = Math.random(); move((int)((d.width/2)*rx), (int)((d.height/2)*ry)); } public FixedFrame(int w, int h) { this(); mw = w; mh = h; } public boolean handleEvent(Event evt) { if (evt.target == this && evt.id == Event.WINDOW_DESTROY) { dispose(); return true; } return super.handleEvent(evt); } public Dimension minimumSize() { if (mw != 0 && mh != 0) return new Dimension(mw, mh); else return super.minimumSize(); } public Dimension preferredSize() { return minimumSize(); } public void setFixedSize(int w, int h) { mw = w; mh = h; } } file/file.jar0100664000567100000120000036220510522475216013111 0ustar jcameronwheelPK!yb5 META-INF/PKPK!yb5META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMu (h)f&W+x%irrPKќgGGPK!yb5ACLEditor.classW |=2!" I.Āndap(hжBo[h%5j֣ZjVk |ߒ=|[5P *{2\b=h!~JKOSWi] ~ ?WqVp_hktܠa1>VB (kK`/W6+Pjn eHNeTI%PR")!SqjT(b_>s0,Bep74خp1Rp'bOe'(ah5I% A8b#]2906Ts{mR Hfgrd $ufW(9 7[-,/e'>Br^#OSX"e?2[>S֩͹<~JmĸL \ AR؞+}j*/ZDxaCrlc{:^tNekSSo7]a:s=$yZT}/7T4"[bD59k )В4)_q{_ )+&qpc ھ3గZ,pL!IVƻe< B\*eZl]}q_G逫3 H&l?WZ'{'{o'{'̞wdf~+ygf>'3j]īp@@/(PW }p7@MFqPf[0ܸFaqm]`6ɶ>1ޱ=dfǦdw=l܋*c?f0ϸ?2v p_"=+ THLc(i4J0WÃU}(kr{z1ґUijX^-,1Za8*9Yl('96WiT ŔDn;D>?WZF`]Vۋsz3x=}v{1,K&f8fr#<O7*{gOW5pnjPY(Xk+(]'r'_c,x#6|1,3GO )tO:Yh<>ypM4>r1>v-3>q]kO]L+az\Mbu4UAz,v6uwig%9ԝ46G3G/4GbW_ťέCW7+UVqh;<߮1vÔ`Rfuc~s*) 7L;]ag4Jx3%$[8:UuZj3z{Wٝ`kqS,/:kN8‹p[nE-#vɗf̱P(7'œ*s274s*L?JvոԜ+ks̙xĜ̹xۜͅ\L\J~s9[,P`6?'9;"͍\[LIY!f=+5PK@o) QPK!yb5ACLEntry.classTSU-ِM[塴bUZ( ҇hJ>Bt4/uSc~Ot3%GnKt099sߟEp%V c7`{y7#D?yYA2:cc@~Ud X pG".GYcq\  +(Cc 6L(H+TpRA3!!XB錑MDr-馞2. 2{$Fr v3%Hɑ_KNn;m(*hLmC#`icTBewL;=b˓}is*t>k2igG >u-L .r\Qcyk rA+oW-c#؎\TFmxrs6BML]z>pWJY}$sLplVq8b+UlcѥeJ_ ̏3Q}4MRqT@/3qAg :*Dms*.is*5Qk ^NJ$Zt3.duhbU HdAaRSy=3ōO.ݴ&2c)g= XKz.gt2-m@Ih~=xr ͑:ZDV hx4t5ͫzouemG'NOAB@F<yh"y"y"ET"uC& wWV]D&D&rBaϊ7ȁ"VF[s+,`5^j?nDB&j"6 b ;DGi &4,qyq !.q .[{lѪ:VckIoQ oS Ww >׈.ĮXsG1"@REC}E}" pXJogU YkC?C$d^rďA51}tW|FM3:q]|ħ+n YVܔz }b&7o>É._BdI4 8hsyoa!}q1Dm:3J"_. /S|o9IPK, PK!yb5ACLWindow.classW xTOfy/% 0 !PԨa'&L N2/d&̼aqTREEԊZ}VV[f9$CRrs=7}^xPMK 4\o[Jу4hNnp:Eu|Cvm:n/aNe`'vܭcEǽ':ߒ2hحA=&a^du:~xL>a*|G>!ړ:';}` g4<b9?4p<3/% / D7t@=񦎷D:ֱQ?񎁟g~wyOPB_2_Iki[{q::>XOd_§rJx%?34"J4hYG,nuwÛxID:,WVfVwҶdZ=mBiUdmdFƎg,lYH!XxJ$eGڜ%maƶ #v+NDQz:{F]W2.u>1%p3q;Vg%ޘ&:$:gةXSK칄qܴ~u(KX3mVj{=kg+ˆadՑkt4 a@CuY( w6ZTPVm\cPoob=6x |L:S I3,3juDy:\Q \ɹ z&-&IY.sq'h,d&56N55 6[цC|"x[DT{FVx*5;'bw }ڰrK /,fo ќIE XJp!*rșTrP|;Zi[Nq1;=4Ʉw][~pspXESA,;U9Hb`bpz+cH _t_%p4V7}ؘ}@޸I&D>6 }K%na#+Ek aeoklJp zvKQWWK3AR3tl0vLV|-ԕYڡ{sL@WHu\oD0`Ő}HdbjX'o V13v$e$Ŋ_t.8e +p!CR\ecʝzz2CjnAdC*)؟;8VnHg(kB i|1AG'sŹzoo4n}w9@H<@~ /}XŸ,/ۏ (wD0qn5md82)Ou>g\!ZKekCӼ5zT: յ~ ΃i2Q|E8?V_jKg=!A-a۳Vbvsrם xTwuۜj DSfuXYPYV^2:_:Ka!M}Jշp,DwJ]cECNk5h5;w,ᇱ$iL,•ވ#u6 Au24sp:穕TUQܤ,ܫ:pZ>>RI|zHSkLhJ$eSPZKujQ]@ՅM]D<_U{Mm*VWԨ+KjU%s% 5*\#ИO=s< *0qƙŁ5:mUbaB@.yw9ٺ]᪠18B52@Sa-0Q݈&nFbxj-XkvlVvuv;S݅^osd{^OMZzjVԣAeN=J~Uj/²7Փz>TOYFy krZ5w-8I5>'){Z= tI]z )G,%s$1E|E0ZTW1_zX@!A3~[]n7PK` kPK!yb5AttributeEditor.classWyxMN&|qIU&!b %BL4t V1J'f`w'QV1< <) X9^=R4>ϴgx,GGx=bzXFFƤ+n&bh-I=f:+3b%%hi]3c% {fK4JcꮕI6I(IPm}Ӯk'I0㤟V}XoGܖns̸A2z sX℆25i+,*^񆆯૔.qYk33[3fYCu^Q'UIt #yߤՇ)}\4|ߤ&=~7,BԔK̪r2jWe@#?M%jw'k~W2~?Oh0xSx;!SNE;ަ֨it8 Ʌܦ}:iMqSKXOR\OZ7[9M]Uн5!aq ٤ɺLr|IWCJVp!\7 6;1d'kr$V"nz*8|䃴}t;P'vHZO[y )3-Vݓ+va.J؈np-'?asm, 4=ע!yAϸ Jqu{MY.ق54:q3snuhJ&[6t h| ^Jυo+x1y?-ѵkt_Jrj.ܰUFk&7&SuTa 8Jx"3aVQЇJAS^+sL2]9f>Y@s"\<&ǥI҇l /r#H= ޓ򽨛 ?z9\ssn[7"ʼ .w`^bU9|2^g˷YUZN>k'PSX<%\"E859\#G\L:q1/`8CEd '8EF屌} ַtEUʼ9S xskD5ZPKϠ+PK!yb5AttributesWindow.classV xUov73;mMۅvbM۔&$i-5Ndf'&mUP/'BfSD+*UD)/@PPZzLvIɷw=s{̱"(P!?ڱCN >wK[x+ަZ\x vk`HŻnyKe}W p40ჸYT|> >a>>aoQ p+#=Ibܡ!!P(ثbGSg5`?9w)kXU|AݼE_Rae_p_5aXEwᰊQ1'$Pq/? aH>OclC #+(O)h mF5S"G7m"iUöSxFFmƎ'jݶ^>3o T,^jl/ТM]۶)6fBcb~fHmo~tM<'-|Aob.1e}݉x7(#`!&wuzx¾E:[L#F gjjmIu;`4Oěfɗ]Si턩g:~BC_x't\7x#$0ˉ0[lT`istMwo|wGk:~=xNܜJYx2f `: kTLEVV'q p3iDVVuIjq>דa+c?/:3:5̤mRF{,'r#ܚW$!):I1Xq ύqtlwF'}Z8OpFrسgIY}c;J. L7OU#Qt3 />KD*j!в(TCT XQ][#X\_J7T4e}"0+X>m[Y FQA5Ahem8…CruY]Vv/Ӫk '[Y)ZV`C".[*'qB c6OɿW$PYA/&20Q,QEb&uESYLRq%\3+kY9u,XTH )ʷ֤N.5?kT|ͻr:QevzV\Y}[k5fbUj'Lvߦ+zu'+/N4(e',  -`kk]Gs˕"-XS(Naqn bsBI\-X6pe6>Q5 |,fE:>1p bI^>fо]l}~؏ cXO{` i>W$Hu}--sD7>qDqoWw}ouh?Kѷ];l8~jw 9rtv`m߂>/Qȟȧyqs0fAt?#.+h Hv! RA' hUu9Tr0@Odt { 5;Лا юgQF&"QYiӤA2A2.P!IDyJ;d=#ThLz^%mKiŅqb1F,r`F~A]2/SQolE%1^_ gJw-%._hwvq,'jB\E8?RP^䢻6{)SJI&9o}`K<—(J5y\kwp __8` xK~ 7kPK>Q$5|]i0Y #msp%غSZjhΕ(^;o`3)œȎtAۢToE;5\)PZVH':oؑhF-Wpa(WR;bǗi(+';SG]mG-VlC%LɌ)KjtQMyJ'GC}NBxra ovOFƏږ(Iϳw;\^`gl33#eGV,OQ46d1d9Jx^|tƬV,fݖrXZ "WvGCM,g&hwjsi-&n@68/$6 -~$Z?pW\/`M4`/*4x JسB'87Ls4qPkPc&~Ll4Kyq&~6` 5(F@Ț&~ߙ=3?&?M|Dn"M|đ2:M#)յHOm1n VH  c;]QNj}kEZl⛜q9PCPJ!Xݬ] YWtmF՘cRkkbH 6)1=G\NU2::5,vKNY_rȎՏPsxzv;^FM6 ł29LgE{w,u+%%SoˊXjU& +LsξFVf5l+,7ЌK.k9EF ֥rˆWr|m-ϳtk _.^.^]̶Ulp]G.k]|Wx,zn#W<=>,~L+Q&ZEZKh2E:&i 8O^"=@&QV~L* T&(M`lțIEQ@iO`K'P@*,i_(&&Jn+nG+B4LΟG_-Ϸ-%HiLǴAWRr M0,{Sb_\eJZ)r5r/~6oWW%%LIoZ䰊5y\۹Ԉ,]KGZoeMkhZ7qM"ϐyMbWS]%Qr,?V1tRjA1L͜M7J]m>5 ԍϥ|qA{׏sBꇱ΍*CE!;w ĒNÈcsĮgxڽvwdޅч=½}8F܏8{<ϰWbG"צV<kGvOiQ>g2 lrX3l pgdwڷOͭӄ_vt+)4UA2Jz.f* _G ߠᛔvF\e%1 f|SK>qg#(dK e#cM8ϧmSSşK..gd5_¢t]ɧOkЪX2a0R?F P'i(/R-+=[#gVf&;(m!m@V!c>=7A?PKW[h PK yb5CbButtonCallback.class;o>f]NvvvFlF^ $ҒD\I;00gc ںEYkm$nJ"H?K8f:ށ l4N ֽ Z!vUNͬ1nPv<Ẇ[r&gɞzhlqY]LD(MwQy*. c:+.^'$tlmǡꩈjgw,+OA0'lpCOO/x9;L[׏LT >GOs[+RT1r K}H K?v=Dcso|gPv`f/kTUBl4B#nn6翹`'dB ňˌ0pPKejPK yb5CbColorButton.class}TSU=@6.!B)X do`~PZK /Wve:Mp?(6{=?Bo7 &fY}+i~7f3}Z3QzeඉQwSX7p8nmO |ib M|Gڲaు'6 l $VɟdIEr /Hk( |m:͵|6#9{]HrWN LtwBy:Ƙ#κH`XXaS`Ԕs}_UcYhU8<w*R4v(bޫA=27zۮk/kw67ʂl`w `G\:.(ZpP<5VA=2,<ǒ,+?R@:ٞ9[pB6<܀ga_@4C+- eyU?مڱ'񔟰PHb8__/K,maԮND@eJaTx7[t[y8!H|sgHRL3t3lKl[j:VYގ~ Y`WޞwKQ]?|v0(` Joamao,.! hBQANu;eTlSW\GQSDFKc # o%`Ɨ9XÖak 81\6FH $0H_]l9ş9}L$tHLibe5i`[2 Hs"c c|gpNɯ{J](6W0MW`)d Lv3qAs,l>xQvoƢЬmх=iYC \[ǻxwv0= OrG\܇PK2'PK yb5CbColorWindow.classW |gOd !@HM$)=H Iӆ@dwH6,jZWVBɦ4RVjzUm=ݪdss}w}AP:p@G>qP!y ^'܄Â^ lI7oqY8`୸U o70~SLK${dq{:g`1n~Kp9? U`CXp> <ܭI6p/>#|VOIԧiX 2+!`I|N>/!_E / xD:5 wY6v5&N'K705ɸ}kTbHYd{Wbc^ :f3ku+j(C2L9I+eEC^V"jF3]ٓB'Q8 mˤZC1V'aez6+NJ~&\{h@4HfT't=}TUȺkaQT/ "gj_Ff$m+']xZӲ[BR=NT592K1k 3")2W^:S ƕ;'ABÒiOgחc%wx,څۚs\'Ixe)Aa-.C [nYxbL7!RWۅ!KzŚ,zp(aGX?J#˧{ v=]q^ݫ8(7pU;ˊ\o'(RTPYk|I*gM%ꛮ%k)uKEV8;@^a H'1bRC4ǣ*Ӡ✊ RKqLkE }'I9>%RA8Dw)yOk8˂/h\U\KB_3(U 9*^P񢊗oC\)9lo}BAķ* 4 ]|BU߲\ђӰhnWkІɏMڮWLu[W$ZsZ͒CI샩yQaUf5uzrsTa(#bȚAv`nx@uTJ31o`p`Ʒ+;t[Af^*Vt\@jtuᡮUrE` 9L>ow: ۱O\ӱ.װuMom]{|%/lAL)kJ`;2hABaohd* veb]709o^ S;!6kf S =Ze.Wp|]RY!HδV\Ndbl?PJS4Ɏtم睜>SU;=I٦6XMH[JVv*wc tzv~] Yh+f`͋hN]9w/ ;ӝ=y[F=_|ňz&"zmAl!QE[fH+F"'}z^ġ&hj;[Dk$g8V1*8_S}baO0O38ө{UKݪibxǩ_!6ND D0RRsK?myZCDϏ ;:;E>$3Ġ7[&&=_ϟxK{ K{hU>_W,(#̔lVI&Te5ap@E]c!  |'S|&9.3sK^5VXJ&Ic՜1tɵM6'2\vG&j4G6BZُqOQ@JONbt~`< ~{>$cGIZ#TqY$4=ܵk ^[@Y=:A¨^2{!u'ԟc䄉W'XJN>M Mk9Ӱx5[sA}&5En%($&P#yO&.C-a$rפUgTu`ߒ<æ?8s=hHn#Aʤ#~(H0pz+>0p ߓ>n/i 8/c('Ϋ*F͎Mas~ [LEJ3Myyj{&#u3mWo8q `JW;LvJ E>ڮv./cW=}u%b;hz]!zsݯPKxHPK yb5CbImageChooser.classmSkOQ=˫U䩀AT(Z"v-YV|6HGIQsY6ٙ{g9s~#ibZE imwBQ`Ewe^9y ͼ,X.*x" (XRX@o5/R1J@;nA ȕ Y\.1d& Vm嫞旪,R>Xef}eF6-d˶E'8MekJt7|ɖV cz~^P 'eT݂O4$ێci aS<w]rܢoNSL2si{G=K% ӰW0*vB+4\u$ƪ@Y {mf@(<+T;ScS6b^/TU^~e(.?Eٱ| /m_I+zlΊ(xc@ Pba#M/{jN; W+zRCR{ؠ/jx-@?M?@`k:pwV8D=u\ԓC.:NchM?D  灼2VoHAJ=t=?}t\ѻ M¡:qaJ0BQfЛs;"tChlqn8NPIFܷ!PK* TPK yb5CbImageFileWindow.classWitWƲ5qRmRYڤM8Meq*'! FF[QF#/@SZei(;Y’`KPe_ֲOV 7s]?G =0$GXȈeabZŒYɐV{)L2qRZ!] de\{^Ixx5FJxϯoěxxP›eomxHᔇ  oIaNxwA~z{>~z?<[-=>(C32>J/q"$d rZ2"/I (HOxTgӪH(6u;a]K%h̙&@&Y6 6WFRROi9&%LA]%1H)5coQ%c}mK7xݽS7t{_`% 5gbuDxJ@ =6+n5n!`Sphꯁs 6c Tap{`5b'=!nY+}H 6!U9|W VB"ꜙE|A%"%l .8+xLK;\_)s *QcHY v5^Pu~PpT&&o*G~L*;tcD"W-$|i-Rw2O`Bw|WPc *pBdIRs<_ӯ C?iFo=4vz+H%U$  YiFœJU(~suFIhfQ1ǿt5HZQb05q3Ƶt}~=7LۯՔ;ԞLYgDRu TLպy+$_mLViג'>fe#A^E`QX)v DB:5Rd*m; W0ظ iƊSgՉ;YD(ץ1ߘ-UJ"B6:Gm7rL-c.dL>}Z}Z c5UpZi8#X=q剗8t]} N9٦5{:qBUk6 daW˳sAw[(tWϔYYaDcJ2Ό%nJP'i&uڶRFU*tYMʌa*YVՕ1ԑR%iZ~9!|]t83-J BgF7M}EyAo\%4鷄`hbR79Kh^?Zrh-` it6K6zўedym$}&vWG"&G^QcKٕ%U, zf46os{M9tG,e* F!q+q-} ^O_7W6\1ۉH'3o]Xn\ę8 ٥<.1㼓25Tm7GR$f[.AK&⹽1Or'mX~*'xW$Q˞PÞr72rXȡ ,'llc$eTVN GJDwIJ4H$oNAU;EgU +ǣc'wTjSFôMGgo"ҾdXq؟1#lטDs؀Cg+XzG.pZ6I*WIUg+5_ug(~;ov.>߮x5vk`'@ YqhWSK0܉Jܥlv;6s.Sm^AKVG%/Id<ȪLV3 cj1ͬ5njcvy3vqܱ+c@ hjܪ)S,I +f`)uU,1y D xpXU؛c$:3G b A.2vႏNs w^&h2h.ݛ,2?`Q\#7Zݥ&FQmOriնOl;UyۮgPŤsIt72dՅ92#-CEb.,8_ZZFFӉF 1{in:\ɒ9/g_gG1g 3j,dG~:I#LQ-FoLoٔ1kp1o:#ra%wHD5d8DžY{hY(hĭ 3KH<DہuQ}CG EV/%P0Ϡ;L-,>zς!*gM]*b%K6!Qe a[PfF/XCvȡBn( 7LD(2>'ZXP2ٞ ˬc) PMVHؠwS(P tdA)_e!J`mp Sa8˞p]-{ŏYͪ/,1m.z&i -}׎#Fvl>AVrgt1 `5]Oǵ]+#rQ 8N?{=`Pprs'i]wp{qt|FrchA`٨SPk `Bb͵ g:[Ջ~]w3 S_YBlPK(( PK yb5CbScrollbarArrow.classeTMSU=w{zfh— & Q>|ĉ$D 43I= j \JEbB7Z.'ߠ;M sN .Q (pY`C(w&&bwׄDӢw]Ǎ1#7%z_`69uұ ꚗ&D se'TO/Ͻ|"m`CrP1G^57^tWzsef~v(.QN.5ӶkX_[ys-oڢ{2Q47W}33!aF׼5mƲ g(NrwzPs+OPuSŒy~ƚڲzD@:pc`K:>4 8N&, d}:rlx\i<C_)n`C䣌/ڞ[&W|šY:ήnieZs U ?y8 {ܡr.ڦ#scxL7:]v㉧G brsH*f].vvNFFA "kO0F6\f^:#Wp~iQr[fN*#:IJDFa$!D TIKOJM.ac``d`b&F;X4+ʰPKCiCPK yb5CbSlider.classuVYtgFiؖ5v7NRYNꀛ%mpYZgs65kbm%)н)m)taq(ilM=8s8ϼ;3ɇcЏGCLH4p9-\R8S8Kp¥2Y@^1@Qp ؆BxE 'exZ4Y<'𼆋!|AE /)vA2N.cg|@O&DrVAd6˜'U/ ~:yĹ|bgbs,F!wSDr@NPy7xVBbfp_XmgZt'c992agsip,1Q]91פuiJGsEd~V!e(]NbqNe'lIAgD>e'#(P&7WgKYʖFVFQڗ[Vyƅpt]QI CcMu*,sҾ`W5;LVc}}DA9i^8e_Ƨ |Ja)U %(1G`@;v |whx8e𐁯7]7 ,ᒁoa7doqa1pemc aQyԻ Xy3ˬV؉|BxN3Hi{&U:c3 :3 f0뉚jgR6S&*gTeۚsYKG+X^%E'',X?)KUzC}Uh}K:mpN%}ͥHV -SAshnnF0z9kbZBvxtУ;=<;t[(+ˡӣ=zGG<:cU9tGqPru;6ƺ{6DT:k\*##vz T:|/C% $I4a4^@X5]F[؆2:bHt\؆mP مFh3&Їq^![- `6pwnB ꑠ#"WM {&D->[?SmtZ3AMLN+K\ܐgY̴̭:WWALkaMuq:AS'iw8`>|E /1+-C#QD+ ]>` >1pU @$ ]z$HGafjƫ{rje'TMadG$U:k ]_UlYCkka=Gw^͈hnop`8(Dt&>/1[z/cSLNHYhMAȔZa$훎LuȔ1#ZEWHF.KWqEKлeNp]{fל] x}77w==FH/ss= (/nH4L,p19~OgYL9y(ߘWXP܊JA<TRxJie(YxNWfM^K^G+ ^c|9_!>)PSu*Sֺm3_ggAdt1AJ3" nߵ =nܯp4O"ə+_㎼MhuẘtBT돱ŏ:?`ЃKLΛ]'m&*3]&{XdZ"C AtA) 端Kyv:nu=jNnއzh2_2g*ޏy,NN_G_3F?dd~%?xG#ub߬~D=O:YA'NxN*;=iU,oC5'Jлw ȽOm*l;j/o*#>L#PKnqPK yb5CbSliderCallback.class;o>f].vvNFF> ̔"kO0F6Df^:#Wp~iQr[fN*#/L^VbY"# $'e&100201 #z 2l qvPK84NPK!yb5DFSAdminExport.classTRQ=,3DU  }|`0&BV)XR~vLB|0Uv>}o?\ 4V-Q6ly摂>%$*a)&w!bdhB 0ECG\."eE;ICnbgfh_Q oQ R<&(~G+(D6”n'>I:Ce,vG>V n*[繪܈"~9OYS)J PKtPK!yb5DeleteWindow.classWit&޽޼щ8 :чcP`cy/lV_T!!#@A\C`HFJ`X,*:!eAdy-x0 2Fm2 z,č\Ǘ"pO*5_7܌[q=.p;w B7҆clIHPbXn'lH^2F&eKhtRMF^ɓ~S#c9/i5DyL3[A -13k 2 ^%Ҥ $f::`'Zkb/٪h*bS^.Nڐq@S뮾*R4xFų8$wjۜ ;ZGs*;`ΰYSv1-a%t#.Z˲)ŕ{ a\Qk5A;).I␗i8/ԦO[۪)^LӼ6b,IC*J±U*hTm3,cRK8.e%u HkT:6XL+STT*U2R#0϶-;nfukAYUV~DOy3\ƻ*~_RL_5ޓTPG/O*>̕W9*)~sZiXWKqZe;Q F3kx vGyX=:݋WU˜r~7JBS>VQ y$pFѣ.*g}KX x&p&ge+U3|}h=ù \"L3CH87+ZV5Tu RuL:Ͷ,ysQ A-S ! T??RYڲS"w ]L)$̉4DP0BsodS#zL էA$H&07TK*jfoKN~h9:T^mRJ-?]yNWSLi^JeL+M{HVφzx5:1k뙨Qw+Y7ҋ{4V:- 'ZhlC5"7裦$\ ?ouy  _t/N@.>E>avqv4@H.B N`fk9j.a ;ZfE/!Df:J3Hh#%6^`6?̋A4tz'iZB ]-c\=^1pY"S T Y%a8y0A?&%#9 ūxI &'W.NmSCuІPKNiz PK!yb5DownloadDirWindow.classUkSe~leKZ6KZ-JXdad7n6RZo*8~Zcf~$$T)3^y99'//CRЋw* " wa\ F܃ p 0K8%0 f44?~F,SЎ s :𐄇e<ryYsBuHaA!aqR,u+fFGsk[Cdr+|f%鬙2I25DiyRq{)#mw?lZ{\󵧺:bn1K gFs>_"e&Γ\(vIxX u9mQSq6uәwM7eHȨx 9Vv;9$Ֆ+aQEKKSeP–U M K@zJ@+yh\6P8OgxLrE 5{OދJ~h)QI%WTTjiFX7(U[E>TWoMcvJٚ>f:yd㎖DRWE5\QR)J]ǴC5&#g wJ )lb"j]$ \)u:RҢ^[vMʺeW-eo N\m8_pbjKFs(vt1-u kHglj0jnrut4mTrB.]c$rN\4FDobt3aGg>_&m>+s$ @/Cpy($x3 4@$Ym@(1Գ_wPRlr"xP'hAXO 뽂Z6Z@leg_NavC$NB!E~n{9lqCѵqcqǾc);DB t[4N `oCdVv}0#L1>A} ľ@}%ξkɾ_l0\-(0P(5UH_wڷ >H UK;̾C2؏dtWPK lPK!yb5EXTWindow.classV telf2;LIJhlIUZ `j%ldwLٍiSߥ(*oͦZ|CQj@)P pxfChuߝ|X[&$ (H*H)T~Nރ WC؂*MA&* >ǘg;eA|BE-n'|ZM*.3|>bna|QƗЗ|EEkUb;|ׯ9oX[e|KmvT\o(.V0{gI#F#NæAk>D0q@vm7aد~.~{eJïq ب*t TOu1kQՌ>%Mc}e\Uo4hxi~@qRNP啅$sŸAT*6崙é+ (c2_g&~$>B,~cslC5x/[C8N&+# 񢩖DjKQPjڦ!kqݫxgf;jD)s,]L4~OhxO8iܣOY ϱ'4ȔSx+2U&=2^ik=WhWo(PՊ8#IHd_o(A$l'&pIh:tRuȻPjrspJRԕbFʁ?$mxɑ Z*AӝEP'dJJgzy3ա֒|gsWL,Nr&tM;M[nsConV xJU.g5]US`ƩtIƚR$ugA+_g$.<+TE$p#[kE1EtֶM{B6 NJe=d5sJMкԇܡRO|& 6]"zv7PhNf,tmy*yAFt{ʱ&GHK I`~uS3>aOq;=J[8Ǭ@2G[+ J/Is =%F/ †eQ_JA)hy<r$H(V,(qh1^Fbvn὘=*,>wTIPC,bnGoIvqF+xG5s;JUR,p.]ϤCѤ8/8?;wHbvaoǂarFG8ưt8gow!Nk}u/ι/)MZ"9%[,@e)ϑŒ~rp5RŤ{r [rOQ\}y+J2BjV5;'qapϦ]4 4o'XA Ѩ:06GХI?'pԏ>Zҟ8?L^ bV?%6yPY 믈f51[#_'qʠ?~ЛXAȯQ8w`p~ou-g*1R"[vbn.u^(.ᣄ˴,vzvIDB w飓kVvbV̟nG߻!I7Y؏t٢[hESqܢO.Ύ!]tEyC1PycNwXt';EB`nWv.JtE{chlz]Ec%h?C_mG62h}N{-l[' N+B[pm(gkŊyI_J)9 B},,%5)R[8,<*4c,q^Z8 XxD 5ƅܢ~:=l#r9GQ#Q=nH__ipKʎmj'驌\ <ŇӞܲHiL4Y5r0m/}"RQE)׉ z͔g[v6CUU؟aD;vI`9asmP1'Cx&2'-z^i^/Yc|٢2+tB?O$9kOiP~/㽳b#V8pμ8 #)n;3>Ȳ!jF"kdX^!q$nWZ`Fgw{<|ޮc y` 1 )DWK" 8ǝ}k 6J$ ( +Es{Ta`24K}U}k8Wg$'"[/XrݬJvv/w,SZ՝ gf&&#<[/zGEaboj2',0+hWbZWB*ZkǺ:(u \3F9/U\DHaf>ՃRYEL7sx~E~K&f32 ߌUKG맱q=CӵT=Gj'i/0Bۃ̘+}{)\,bKa^ F)\"Q 71NGۘ}+"!ZH , /Mb^@%," `~\’_f}bϒƴRX^컢ġ:+'礅 g[ۤJ٘5Vc/F!ջ|,5`-۔S܏Z7Bh}F1K*GH|59 [ҜY!k3 }#O1I{ӵRǨ~fMh?En~{c <ל%Cs?P.ui&ϴK{;!B fcՎJm| y_}ijV*W.~ ][ nS-Ux{KB~oMa۪S(/=^Ig<tA 451A2Ny_ˠйc87!d?4mN%FjV;C;+rj ~' S\4D~J?nǍy>Ya-^|SqPhͽr&=s*u%̩vίb>GzEH"!>ܚ2 >ރ%2K x)X,& 3vg ntsmw`LG`z;} cK3=]K}vƱ\v=vAӕ>q >dU˔JUJa2p2qU>vWqDWM*TSi:f"*Ub5TΣz5֩YU͡kT1ut*ݪiq5VKjR7BZDT2OLTWxfRUY,Uu+*ZUiVk<-V< Y5yTuGmfq<},㞸Ѻ׍>7/ZU6| E90ǃg PK]sPK yb5ErrorWindow.classTvEc2Rkd'#Qy4q@x&$'`;F<-M#O,O(a˂d,$:OJ0簘[n;qF%\v. +^H o&񖀃,9x#xî%>$\O$p I|(x8@K)MA'lQ.QY G0ZȗȻr)rd1[e.j_Y-Zjo֔Y&YfP'LIJn*t1ڬ/1CBo)C-v4w +Cue{}aalx~ŗoXw*'yE>RTa Q #wb&[H @Lnl0ҷ;hX-םpp (&B[.cb$f),^l6kγ}VEF:EZ*#xjVl(oq~܀Daߊ9,Re%.[m)5/{ ¿aQ$77tH-f0W?q\~^cX_jUI%WVpJS1fTmZ]5O C&l4s[ g" /C,ES(A/^PU#lTz4C$G8O٩z';G xD5'9˞u={8Y@k hM 94M; T|YKO8>rx6ES_9Y} )\ePK*.sPK!yb5ExtractWindow.classV_TU~\"q%,KĴ r@M@;wbVgmZ+`b-V}C?00 m9ss'O#K2{РT49ha-*ԫ؊V۲#BE\ =PNV2;<{kKb6DTcǃrs1=ǃ^}m*]*sw˃={Xr/>l?a#*A Kck[%I2†kHbv3ltu8rZ!Uw$hFIҬUe%O*h 2;Dy2jb]AéӃ/-lp@cN[iin׻u 8HFFmnka^!/jx /k-! a&[=nq '1W+^kr e0p~ GM:f(i[oH:ЃFX4FiKWYFk8^D2+vX<)xrTP)[ kQ噄K|88j J֭Z1X{A#uk7hcH 苒I?pN# 9t>pg5|O5d!Nh 5|o4|{@Ք;4VIpā(VFѻ8)p832|L4F;]+a/0 E=ns6)-Ws@.Q sG tbY0%Pk꣺i6BUU񜡇BtmR5cgGt U?ȾD'2FݤNqoh'r-Dn4ɫ&OYz$bXLj}\s.VjNJ=2a`dLfhĎ2'RjΘN vjn&΅LǵBFvN*Ljeŕz$u( %BQx]e$H6&e/ Q=I%S<߸[qz fd|?kGʑޒL S[ZHJ/N##_8L P#{j|9Cj #)KTڠE^SwAmLH0=}]1\Ǭa&sV0E1_sbYPj7b>n\2`ƥc%-̗9?{%l3,1U`X9b#Z: *+G4chA،3b ~[hůb~:~A~+6,F@>[y)s ?i"N$"F2up[Gq5seQ2Uq,;uIk!k`9{Aȗp4,+aŪ8nhanbw 9!DbqBc$xv`c`1."JP/qX) C^j\ PK PK!yb5FileAttribute.classmmOP+]n(:>%JbHLLI'etIi4aL6 i{=75``8J Q驎g:fu1*_Is?*ta޺yF}DwXN|"+E"QaٻE Kf ly X4e+&,&*0e1QI&%/Rq'e+8G)b0˭cjmY(MݶjJ K >N!a1K0FƄ|Ъ^u܉Cm8w\5whmCr_J d ?awϹ@}$Z\ 8nλK}G}jSx0tdD|uUt $Sxl#PKƳPK yb5FileManager.class<|o…  0jhR% ]K(v{ E 6'Oٻޕ~].!U~6S_@@1Áכ|8wCFTb@&7͊ܩxwy߫x/Ziy+J6o'I.wH#nR|*{M^j6+>PgR+>(y ?N ş)ş&v!gMzşHL&WLkT$o(bۊs2ew=PJR-+!?Rc|TTTZoV˩N?z 28b_=uwuTMȫxB*a(R¤![ )ԳHUD'%JSJtfW%)S;z(D=׋JQןJ T%7 9J*GJ Qbèp%F(q$ 8J8zJTb1bc8jNTb8zS(RbSoӕ(Vbf*1KJ(1NPD%J8zeJUb5OV%N|%0YhrST(Ao4^DK%$zѡa.V/nyح;%{(d){zz)M=L6Qh݅\]hZd#vFM%?]I0Epն mv&I`н5UmKAI~C-J4i^dp 2`+s N)/"Sl9*%Fv%$q8WSqEtס]qک GjCVY`4U%Kd1 S£ng4!YZIUpgF:}hO ax%ϐgZD^j)<˒gsZw6'4FUZ\^7q|%ϓ% y%ϗ-y1,>H>SG1Ly%/X|,/Qqŏ',6tcE;vЖT^fYԞvq!W%/Wmx'99Tѻ67aywaoK^)uzK^M[LDWT_}eU-5ВXk-y| Lj10RJhԒ7&4rpA1{ǐR0[1iu8d\Eu(lXZR, ݪJPe'2t Xވbab?IMm!A+A@Oc Q.1eO著b@8X7!9H€4x3n)5~Mhh Sh'S ^ZH|!+ܰys(GG79cX r 7Gu-n';e3b%aH$bԵ" EYwu|M[JZG / $j4lG%0יAAZ!'$I9¨JB}6A2IسxwbeG:ĢFwxvI!n$Hx"L7qi$4Mv8n$,މR|2IΈ3 i-TŽz;3@i]񦍗I﬏lB16[ HDBMb$|ݷx kX2kqK/id bn]ݷx-b45tn mk7 x͒ĕ{( h,n,Ӕk-q judμg'(%TXxNz Sns6)~(c'N ]2Y$@R͔@a~%7M,,y'wAhSfiٻb"I@*0CZS`~iyW^h->Sn6JMN!ANK-(rgIF[r/?Ŕdi`4M=dd~ &}|P>dE|)#_VX>*;Pdx1&•pM]-:`چǩOŁC` |’Oٖ||ƒR9ʒ,|ɔ/[ڰNULI%_uKóyƓozKZ-%BScw[G$r!|㇧㭉U{|§j2q{#?TYҬKbO0j*^kO^-? D_T|_Ѵ1 owK~/H~?Yg~%7jn?䟦F_臗o x hv P$D/?C2Iأ.dO / 6{"Y+lm6h5{)Y} 1+I jLAd, M#@K.Ǝ\BbBG˂vJa{{t]Tk#تWW@s\4b8:iȳYC$6Iٲc=CJ1!gS%19$.1&Ժ.hQDd"Eqd(Ԕ|92NWxB 3$Zғu˨7ykCٹEc7 hrIV?`93kÜr/:"T@lz$L"!}v2VQ!^D,TD߁N T $x+f?a؅bQSrӫG8Ѿkaigd)jHGU;|>گi~w.:썜岋m"Pg'#WD8A=oΞE,n;0xP8xw╱5 Gi/1/Gi2F"7Y ,#1RmG5ttd ֗Q76Q %6rqtB f D*>U09!06F@W#a:Ѿ>pڟJ#uո״wkFF/_T$}\LY-1$M&-Ly]S9tTmm\~99o*zI[)a$`?! $y.Ko ? &)՜hdc "D<9h:?>TfD&B!Uz4NBSHa&T(~JoMVϖ}1,SdlMKolt!8AJ?v6Ef1.!1uWn?QoQ;C>k4iYu%%TtnŇ=CΒ׏) Pˣ[NL+k7ti~%`~0*BBY0@rXiLc(CaJ(i(H~\NU7zo&1͟@n)FcW=N=3ݻd5g { ~8ʞܧ}{侭& ywCl Э:BqVwu^=짎ߛ{ o7 3qja{pGP{$N+; ր)@b{ X(>R} |;F>c\}Ocna0XF00 |&\ ֔E+ÅT61>#eS)03[Pv@Aa6BnfrA#LmKWPЏӈ%ӑz(DBW0`FBn3}JS0~fp<>SkഒzN5Ü2 nܻD7.1Af(ԂWfVƝxsye61NiSw)~@P;B+Xۋ;R+XKޥ;Jp3D 5ʧ2&kkmn2)`;r}IƊzs6{Oo3̹F8='xN~y U6I~ 6$~%  R@{F.{H]Ihz*56k_^B7qcM~ zmM=ط$aޖ^. {߻!}1{Sf!}w$j9(RBgc`=>OcP ޭ *U'w;]6|wmJh.hxp=i$g2LCI'c?bc?}<`[{~dbS6[a?\yG{ oq\)dRp~K/4jbo8؋If?~Glnx+cOfxw:|mww{>}Pzq4]7B Սi:zu⛷|Vˠ |ϑDǾı~o4(wg9 |a3m p*)~w8{ n~ޟQ߅~U&*3*sQaR(+Rߑ?uh?!ղ՚/F&J,y|)!Y}QSJgp6 5>~yn QN:9K4E zڇw] Lb| l 'AW(~0c“NIp*|brX. [pXM*xuÇo~Ә,b7Բ#el",gsa[+p[ge{<(ϞM?|.Rne\|\ɏdcxyn|W-||,l/][p Dg.z ;ѰKLb&^Q͢'>xH 2p@'d <%Oe ór <' xA/%#^6+FjL׌iQo'ÛKqc ;=)x>2>] >uu]CKk|\ k/z~s=^?\Ÿ1Eȸ9Is03ͣ2'Y|j:׳Zff<2X-uS)̧2Xw՛Pe:R׳6Gmb}Oaclz2娯Y?` uwcY,ߝ͆ xVy"/u2r(  ffyffT!Xml5 FBO*§Y`D ;zk#w[3K+FɟgIJy[!jL^9K!&sYFyLN&s26qiF)R! \Zpob.$ 6 6:as`;Y8p y?imV=-d]=9Cf2 JЦ ƀθ&m[k` b {894G~~#G)F6,$뱭 sHh!/wU"!:Llq9,S:kĪw#*Kg=YC奡͝P&0HA/; 6 }X %[lZ%=m Sn_ĴlkO.oo>FYd| (#4҇6B0Ȁr MAtkfe,&6 )T 0e56Τ>p $sG7:lDáp$.@pϳ OK]эoLDcÒm%x C1gAXGu:đ΁A\΃SћԲa[ *v!azv1ld]RǮ؍HZ7bWf?-neivֲ^lw0?ͬ5 ,\.zRn5m0}S[@% L;c{)~hdcscQ9]l&tcao&`8X&\6pM q%y"_`1+e:+?пf6  ]}<5y%*F6zحɧhbZm1#185ϲ'8ܖN=ޅz;b'ӨOI{b]vf']+ )#nt*\%l9'㜼 ļSa܂9) ^MnBjdtA1u*SQ'H:S*& -XVhp( Lg緙]jS-+'&'5LIZ`x2-fY9Xu# csݐ4Aw=l3A(Ƹ1 T'1| ɧcɍyd/÷Uan߬/{ eoB&bl;j;l /^b_\yG>|9f'{~_+S^%|c1 W5)FIdnv|-C䵉4069kQ ^{iCڐp9H:p]lKOd'k㨻h=xsYE}Ѝwqw=۸yY8? >X Ehcvba ,mo\.x`~ثu6GSfh-fRQ62o5pg>6ۊhE,pILfYU᪇]YK;Cф>yjp=tn3/+KA\C 8 Cͼ}qz6HE!A GW6àxa?Rabw˖sh0 W>=l)bP@nI4`~6} w6e>Dӯ ZvFiGV^g3)T9 1fά}& {1օk始unK×naI,I|^|ek3[UfݰzP4\r6g^FSmf؛avfEԔ]b{Kq7b"tC MJU8Hխ $Bw?ф ]Wp]ߊ6Ư ~쵶0a^@C&GM#TCOlOa4nz6XlRYɤ6 ^CKQX=c ה6`곗LaXn)A9͗l{ڶ$MM`6C$#2 cA*h<[4G47V\k#u4uJ%z7&r4w$qAo ڔڌ Io)މ06C/dG8wٷnYE8kL!V8b\ʤþj& AZAV(jf7g c L]0x=ĆɫV#b>F#G1ca?Fq0x' > N!ȏ*>tX3` a}Kʛe3_zl `"V+(b6WjfuOc(ױ|ہL_᧳װ?cU:_qwr>_G1j>_ˋ|3045| _og[6|'|?7yſG|>[E&b )Fbo=b+xbOTEXc:?#g(/I_&7eKߑ3r _ʓTZ%rNn?(2M?? 2 f8Rha38I ˨ZfEq06.!O"xW4E_KsuQNy~Z*PV Ea`ss3|rQñ|Ji ZN%Y]hTd`8Y@)% C(?pJWA1C W b|P8_W&젳(GL|Nkf;9Ml}SrZ{q %Q.FAo110N S8dt~3OWg#k_P/_dx=9%aq~h[IKuo2FΫ`3>ꇬzeBO1 O C㡤7NBCW{(^]_6c>ö9Yb08B?*z9h,vظgBd)@_Qb*ӠPLGQt1N3d1 O~6ԈX.8OQ׋Q̃{pwSaOXrXTpb1)B%,E,eiuլ4<3YvAB%l: nB Q+={>Tҿ|&Ð C.>C=Ӊ;+u.'xPy,bd0P+p&!gx)9YxP@U#{Dv:e{y3*L:]C6^<&Mz9RE\}ĥ-J%1Z<7y hl#0IbeKz )H1 E׶SDMq6Z# 8IOe3nV> =6Zh7@7"ji0H\y둩oKK& ot |: \0ӿyCSyyyE63a#`G!U<j0T<GgQN,K@Kċx_[27mu$_T$ %ׁ;== |Ҳ\tAmWi3M/l9~%>=>=%Z (4Z i$oܞ0/#lǽeRrϹ)Ah{+aFN2v{8{0Hg /G#cWfXOq%%%Ư&ދ^vlMlXVZ蟓$=ǣ㞙{ nڐ6x-tJYiy ]LvɸsPo띁{w0qWzL҂2#\(;V/JlpM6Xu d. ՛|<=њ'CI y!OݑS& =y$/8܏+kr҆4Yf?/CF9,#.Jj6LrbPBz%?t9u.ya 0,C<NG"y Dd!R_dEC < r,8r9™q.5;n}5Ţ@fH yKzr#CgwyQ~=*Cң6?5~]-kD$,1H9"~X9O6E?mdf3mҳtf:*sK9y<%Tg^y:pfɼBϡ'Cy ܫ5} %aԓ}\=moe$7s9͙CCM$FpQ1}.k<V|R+nvZ-[,`JwRnZ-B֥tqԕOb~A(m 6OiƑC}ǟtg?]3yO$luz+`\ Sd%^%*U\VÙ2\%k^rlˡIJx\Oɳ%y!σO\ %/b>y '/cHy5#6E =x29ojw/wkXKFCJ#ʎ;N3sJMofd7 qD~?i]u{m~mMŒ r'C'h.ӭOކv&xZFX*76j]* _ǯw6|'pxjU\Bn!b+O!q+T8/M?ŬHǬhBSdVNр\P`4z8ɼ|U6{(E/tqrpc\#zi;2#PRǒ2?tsIY߱?JIgdKڄh ko?PK5Ye 4 aPK!yb5FileNode.classmT[Pe6eSH RX@R@ZJ"6 HU,aiv7(zmzy}p}sgHL'u|6Ox?'$2?^KB^Sъ^>ԧҲ_]*jk݌tܣbClzJ0ۍ}2s5lQq^Tcs }JG<~s>ơu;-#*&;J̄1zpz%:Jct I[}N.#ϴMwJIrHȹ.lF$cM΄>8jBBU%n+dGWIi c8FzV:8B L;y]C'vi"$# z,ʸfk҈IG qj01+cNq$dXl$5Dp44*?ӥ!y 8!cQI6{Oj8d<<9<4hxg$xVt:&%Ȭ(e*ejx0W5t%}æNtv1RZ~ (U/^[~`[x׸v18A(4)$4Vӳ.?.m@MϜP=mM*b0.YѫiO$Emf)J*P!VABRmɭ6\"sL'BRlQ _=!%h≛HaRz]giq l}פg)X@&RZRIڱQҢJ_pF؊{Lz4wx?NDk5ih VC{OpR0'ZBU"Gu"j!砰ڛ\XBm`pۡ2^c4O,>E dEӱu)<"y}qJuU}MKo%Խh`EH@O{Wh |eR%R_@_N|5o"NHW0*ǘ">B.63w>d0F;RA Q4K&6 H-89,XFY.qcaD02$_"Tbb9ѹ }K.ئ>![3g{ 6@j/ФxH3^Rt >/ LL $iLi6̙P) {Ih$*vȚ\41uK_7!Qя+Nftѫ*aF1Utt"N*NKE7KK/Kn,x-^ڰ4[gU-ߓ82wmxdbnS6F3<(AwSDVeEy?1Püv ynkJ@n|uxHuI1cKAw?NO/(? Q2Խ|* e~AƂ[DwAh.BVdM{hWRqehAo󧾢b̘gc,EFDA.a@.!-aL.#+CL(W-|w ?ʧ :$PK6cXcPK!yb5FindReplaceWindow.classW{tUM2{dڴi>B&ۂBM@`V6lf'mE^/T/T 6P@ VxpxM&TzN~s;9rDpZǥ Ag).@ I^z$tHIְGG: ddkаEG".{ O uXұć5g74\c%>k5\zop,~T4|OhI')gY7su|YUKqt\ȩތq̏;%ұk݄WYSons7ķ+rmGfOJe`L^R-̘C5I>s9봆֔Nc ͸E+@ĚskgH,Y0i^[(62)"C33Z" r\Me\r:Xvt*R MbHe,!Cw9'nq= Z˵؁ \%m - jlDa;G{]۔~ Lm\8;׏1.ZKD}?X RYlzee]V+;hV_`6lXrYB4RHM% <il^xPPQL :!ii@'k J vhJnC# <ʃy WI^<26^+|&D M}5ETH^/Jfn*87arIn"ijQzRfY`JSo~㞰M(콹fm-\U9>N=c.A~G5o3κlӛtuh޹|ϼ/v,f%2nwgnt1)Ekh+y:fߐ"녣CoN0ey2絷tvv5; ` X:;!\<&aao8%9DVwR(h'}wpoV\֎Y\{k9@y{?P&cP'QC8$yIh$4LBMz1cPpy,\<jcIWM{&Bq&Ps~ c gt&E|7u$w&q!+ 9[9QPoBQkJU_hJCiGkoanzfw#PŃX, Vc8_įA01%=+>H~RiO gMIZr6YާZuK>P.C/'| U c*&UkT̐&?(UT^Q*"qh(=F%+ qjCH;Atk6b".# t7Ex4 Y:g䇵cCWD_~DR;'aD QdIO^HJzMm4!, /PK-PK!yb5GotoWindow.classVWu qXZjj- Hi Э-QLve`ء#K= M Ot:9KսkyC}Ͻ;Ͽ…bQЈ7eh ѤeDEF 1h t-^ tKF7ףGy9Ƽ `}ۇxwy92dqVУm%$,W9:#$͆Lj-qܦ%[.TKk(qE̲& JӶ8Q-Mr#n$f,4ƈowv7v`'iU x ,EFhQԏA q#pAM!._LBYFGÂ#;a#GtaFуݢQ*8q MwqYDn*<"fEb j 魃 =cDqm6%)$ߝBQҏ})߳nS%}niBIۋ\$0+sT\qlWU\qjMPOFq1я6q,l̪t2 4swqKM֐j10XEgs+6pƙA+!д]?~8/' PKˆ PK!yb5GrayPanel.classeQN1=u >FcBUj]Jc0Sbhi̙N?>q ,XF Vua]AJqi MPE?fЬl!p5C*]qoE֮;;t}U}=K]Ӓ^Y)m3#^ٮp*ڄy-pǾrX&ș+8BA)פ/2u9dXs9^!C'!a3\B6ГB=:;ʶp{s˳ KȦb`4ޖ-s-tl ԚS#"4A ^@a $W̍5-7BcO3DH pa4Mo\<PK5t;PK!yb5Hierarchy.classuW |f$d#, %(@r(UfwH"֫-ZVUdڪZ}wzZzTf0|w<ÅjkqZmu>\lj{q^ ?n.[K&E~ w.{-{#DEZov _E".֏N9}ȏ.E}?a}X<^'𤀧<-zVЏ#1?:>Ot*U#-[,L€ M"T<NnE- jŌ5W49ho$, 68Hb [ulݒDYiSIˌb"ccCz◙t,+EWt>reS8jEBidZd3NpTXS:Ln yٱd,;W,Kא;<4% 81c{S cOڌf3 &卂Dc-z̴[i\?K[[k45-{:U(ܭᘈ%Rmsa~ /bR>sDjme<5,l.i˞H[:ctu)76|rdވɗ$9F4c6BqoH`$l( f+46p>3psV1* P>*]y $2OuUlQBej@(GfU2YW ?4T jj \aM<@ WBVWՆ3H EqF1k5P-5^ U+z'.e(VM0Ajbri:PM6]j:BI8'iYj(UOe&% SWGjOX2jjBHBE1$ Riq4jw8mu6C#No`F -!OIԛRѭǽ4:'V%gYV@̲n|,᭩6^mܲp-\AnC(+5,4(њJJ5K5C C:~3k#ՉB|{.N>mUӭP@00X*Ô<=8iFtiJe)ΗHMôByPzE5'mHl\gD) +4IcwdM V Wb+2fzt}IV[L޼(i\f1Mp XɨZϰa34.hzH<1mZ4Ɓg? ltŚpʹf{sy~ q%d?? nLxNU&wc,_iM=-k&4PXKwڭ_[ԛ[$/+TܒϨMd{+W}Lh8PMHO) ,,N* :#֭k4×ԚӟJzxL6fƾ/q8_!O:CzȲVkmtְrdZ+GrZ+rXkܡO8+g:z8|ҳD5܅P vny'imHoWK.9-v7c ?c<Cpz>xו\%F'!`@H0ǃֹh`IJC}(͡lmQ0n%rdm f`*av>;gqFyӇф]LP(@C-eft4ЪihuۊeV,Us+ܴbOjɫn~ {şL [i / ]݌e䥛g^df*yr▪T;u`d#pjv`t(ُce`kCc7HjrQhv`xY$CX YY-, TY4_\Oj98绎S,1;r.ACbs'p'& vB:juk{\j= ?f]Ȥs>9/‹p|99.e:rOEv!ꋪJJqo4vbLB;+zw>L!TӮe.zniLROAvCcuas'B 8.Q#1f' L԰ϻV#p5Zvӝ7`nd`1܌؉{L;.^<}xxxwqZ.dtCU9]3sq;3[sޥGbwIY]J"eݬɒÜ:wd^<ٹ\): nd媬DC{n|6QigBe{O'"[KG{k7Vw`dZ~=6t1q'>ˊ<<ʐb1Y/qn6twcn,`_lISF1ckl}i}ڑe lM/q~aaqZ*:m h7Y_HE.R; Ӣ7aDa7=v[QmԢ"(nj7؄//sx :}o1ow,Y103j$j 6kW{;>Ug*髗4,<^(vrGN`fWٕ~7*: FD*s8;/G0|Е^U*e IoP%ǂ;uvHVVYHlsчTup4T5Ej(J0T˿t5 KNZj& pܵ{lsvGZވviNUKvWp٦ќU@ (2ej Fj0E"2W'UhXl~*;!`M_wa?ZPKU PK yb5HierarchyCallback.class;o>f]v.vnF( 2TTǙAK>!~-5Z3{$j g4duHLaN4޶(9Ϩ4OVWЖ1̈́'R$PN詡`]dZt2f:e2"5L#cGF-G-+XEHAܬl#i鍙i$Rj>vh33:7zyU- UKOLNs&Ou"wF't VP>di?8{q&J\oqҷ|[ 1be, $<9/%٦K EUWb ^Vz)s-*x CT +LG WöPvޤU ǂ9/s֔6QP-̝ew ~N.ʽfk^>8,bΟV |d}'| |/S}I.'@ 2;yGiiGnۙqHHFҼ2Mp?STkVw:T/e4$oRlU-;qQfH3Pm}$I!I:sd-fW{+Q`6bu| 2\ިW>h{NiCMtᦉNLi[&ncHL{S&#cb&f0+xy Țx"X2u+K $[ =iڎ ) ?Sf .8&jx(gkeJ}0Ҧ5ǫe¦&JDz(:nH:VzƱ7(|h0J\땓/POK u~ j$q91FQىtz+E0@MAazMHi hFb"З $ VA(]z I?.luRɧM TV0jhIjhdzo-TK5mRXRK ԘbܷR *J3KZCt DcD".Sbx"Q!^8''6g|wX/eEu >zPKG PK!yb5LinkWindow.classVytg}o;Q6NsȎb.:8N]V&+Z9N-Zlr'`H!rP(M@9=x̬,Kvģ~߷|3̮ŇЀ8I< nHvLL idLj8Ј N54!9)'5+40N LkyZíx6ֿ`?xީ ^a RpWrS~>@y+ߞ,'Q;O(_'eٌ+}FȘn@ :YUƴeFo2.5隆gN$@yNF.i,r')Z\ks\wsIq+g/d;b$lYB܉ lSgt~ ? s?OZsRL:~_kouO eUs{yb6k0YԙXz9b`ԂQڠ!f!yepS|G{G-noW㾔; r)s@La!Vz-ig"emuoW,fXN4C׶n[=]C[3Lѥ&N`}q|_WXSr&6O8!WG_-?<7ߏ2?Qz !o(AtcYJ8ePJ${O`%J1_}9\ĊѪYUa$Pk "V5,ZB.Z嫋X"ZBd<2AesXWl(SϣLMjLÛvqhGxs$䂑Q[9 l+g-蠔Q_ >/*g&c&kH:[^y9,~F~ xBnSr )&eT_Ĥ'啢 eM^Mq|Kڗopcg/?^rZPזpllek ޞ@lC"vY-h(P$p >W;|Uϣ K_p(%4tSCd ==4#{T E-b/K="F;f& >.5PuX){^SBN}7bXcL )oBA¬cNcr?Q$uzCc)J̤PCD-ñh2 ~495I7}ZKZ=UxIUUe-!B| _w{hzo!7,J5SߡvrVyCB$Q<<:>&~< _@' zQEĹ$n5jk$jࢆpN;~/Q|͎ҞuPR}os"CijGDКH^zg#qG8gw)F26tX.å_E3 #z#9WW2:BPK8gߗAPK!yb5MkdirWindow.classV xUܙL۰ԵVZIJU&}h"M mhLݻiwgl"*o>"tR"/T|*/yTDZ?Eϙ&};s{7 6]Yة5xu|&*2:SGR "/0CŢ]U:l8*tX; Xzauc e yX*ިdIś."V+6x;{;w G{>AGy1q\tK<OgqG{s*>_Y%Wa̦W믨FWU|M w,LҰߴͼtDIvf^% YZWI+S=9v 7,qe[F$Bi;{eZCAJS-iI2+Ka}Sv3q4W3@?(h*TF<+H_7pobRIu;nV)sST0c%OYZJ5i EIHۓ[x(*70o+h夻In0]Ȱ7؊ |W?!?2c^ n6S:M;qV[p)1ϩBiX2e{~IEe[ mԯ갨JvlPQ6ܪ~~vwNw06p麎;hYg7S 䕸FQ^=6{Ӝ~Τ6Yt88 x#x-g k1<' 1OZ TB{ u"w\PHܡeSU+RxT}lNj+9G7KZdGu8g"مuW,^U(%ۤU1Ǧ֮D=_HtS fT.!aR0ƤM['vgT|,Ie`ڐ13dz$;>-:D^Dvy*ZPƂh}4-O$॑U(8`W}EK䜪 dl\Ϣe+3edn'WxV^8ѱ`DK<(Șɬ4̒gg\HFn9])p TwO_q)uh^;ELCXnƲ[.-υy33Zyes#ϛrziWP$mpe)>^ N" * V)%*Ji 9Vѿ}?`8!*n&@+]X'w"q.Jq/񰢈G񨢉#Z -c]k(UW᱙l9V>N#}J3.>^r >#Ld)c/'y>z!>: De!46xCtm}l 8u+oDwWaY\FPq =>^飗G>6}kaC',".axIRr]۪0β%fHt8 C ٤[z᰺ 4Oړt|k#iB2+$0m-J&z;FHCe4YG;?7)Hl)'HYnfow`4(-ƍJ/k؏2jxjXBhЌ SBv+l'f8!N2^:ސ0>#^[F\ƛ MW8f,cȪw)L N*r8QJ MCzĈk84} BO7,pxu8 (;= +RC#VRթn bx8%LQ:Qjo7/fG;1Y(>)h k4|} 㸆pBId|[|G1Q64|55’_Ѣ7>vL+fw-2e4*{Aċ} .# Px<3FKMzDF J$[ڒEG4_I:&#-ER4lSo[N]Bd9P gfò*$."v em)ƱB46zWI #W>y1cU9"?I鱘` ;DmӇ F %,_gd x^ e,=L┯ˣ/ɫBLjӨ>=w2Twu[vF 4߳)'nfvF瘳JAG\le$d%ƎOalKdG&K~^N٢N]d1I)+VNڡj@HckL7 >vew[# OL^ѯe"~vT>LO`ԛEAo2DBK3=*L7B8d(`?`iY/RwE4(AA 4}0k|ž׏I*b5.-'TMKcz?fQ,:\6sܚ&T\@gKΧp( 6BV\48xIqӸ~aKIJhq-KO,LQDJD,hU".nQ=b.cCb>NI7QB-:\5X G~~( 8N< VZTF9hP1$iT1b,˫*J㲽4y\i\~ˏa/Â^H}% (~*E/qEA4 JjqFR=%A2x\KcPS26RL."Q)ch+D#b6E h#:q%'pJlb+]Q?PKh_PQU PK!yb5MultiColumn.classX |T?gdrM f*0LH؃"cQd$03QQ .hQ WW\֥v.js}ݛI2߃_|gw;~iTfouQ~M1 pV({2I΢]d 2|$2|2&M-Oe>8.*  /d墯Nɬ D쐕Y-+r9ʐ*\<+aw 2L$&v 4Vp9|̦V%fI>tt |/Ch=x~/ T+](7`ENs&8o^#Dm |=JLEoO#-P.`}GN¡x"IG"4-Ȕ)hYxC-"L)j#`".{ɠ5ژ-A-R1{kIXD JZsJaGE焩`9`#hh/ E7C5@7EXn%ZB7P$ %rr0P)$7KrU"BUJ,;Ƃ-qUoKS}K}g) LsaKUtpӼVwT+OJOhP?t&f(k1HDjNS,"X*6*e U-fI'!};Lp,.BճZNW6-B1u`l8, MikzE~TIj3Z ]BVbL ŸI 2ӀB0r\ ugX%FZ;;%7f>EzB5&j`4D3pͭl 5'*%2 XTvb%XlX$+ A_/rT,C$abEnT5[цjftjܚGJk͚QՌfT}5TͻT7ZWͨjFfTN5aNK~kʦM!5 >"t y8J|lIݤ`3&l|Z7e -8NF7lݔ' MOQQ7k<'p=;liu%'Ƚ8 6q ' (C:B*O*Ԕg*/Ef}fDvx[ MW=kq剻J=Vy*P< ȾRY{>$`729 HXX]mmf06܎`nfh3ˬJ-)1`(,ZĚPeJ1q xSi=HY!=Og yA< UL4GWͨ=A/C)_S} '!d>W9$VKA߄Df|{w.q%g$D}u4fg3/М#M\,&M+P ;3x?p|ZL,/+'/O,S3HC}dg;Ay > )MS21 r ''yiS7 n{ M靈}1M|<-ct9l@S2T!2Mй!{yq:/u0!q1r 4.+ :Jy#hT.^kb+Yiu-2AML)~wCطQ! TˈSQ^S^Zϲ.|\U=TMs'й=4=t=tFܔ>蘆SUbIxrXX2`gI 0Q이oH=HjYA :ǝ#R"O( x:ik ȕ-E2Zrtj])jFn7(ۯdK.d|Q} 89{(Js{}֝@Std`u'DJ>4'nGnޗ qEŋh/)\w2t /6Jʫix-=?EyWr6^@y7.p?7ܼ6/Mmgն]lv v񵚇wj.m>֖ Zߨm更=G;h#W{oNo=ާ;~=+>gA} Yo`v:6̮?豪G`VU@O=Lj]q2~I#QLz0S^=9Dkw]1hF;tWƯr.ƥy<\67-+-=?~~?g?!|B/g}/1oS'=Ph")@C{O!&j/*: -ԝhi)$"&=ҭQ>lEc+FV7qZV" ^§h3YMPze>K!lC)6Jmé6J@3Xbp~`llc1޶G:BEWqjSm<_%IR0;PK%PK yb5MultiColumnCallback.class;o>f]nvNv.F̼TlFA ҜLu6 "cbǕI18a"1&"e#9&1)T?H+?n M| %}P$e)zٻ}'UtLxfd!:$kR^NHH^ MD3~%-JA(s.e-|tEI~4\:m 2x-:Gm5Rɾ~0ЕՈ# 6JUR1#wp| FNSԃ-k%'+䬮Jpbæo $QriۦS(LeIz!Cw]Z.,Z53Dfju6 Zaca ٦)lildsfFvg0dyU#ڻNb>P;٣6(!6&Z.\bo8J>N줔`OSF&ג RCb X|q 3^neinV 9孴aa:h'>WS 2Utho옂FE;VEw4B{荜3 p}tMj_8HJǓv'[w jL  0*XÂx|3*<w^xMU񄔎R >PKeTPK!yb5OverwriteWindow.classV}tUMy4M HXf4|6֒``ۦMҐ&/iwwl҂ߢ|(~RZI!|)PRQG9;M6s}w7(G^X:Ers17>$xT!4lGJ6A+vАVѐacTa͜WE^à@ 4T.81/"lUe_p9#~M pvC7u\ͷ |g?ܠb op 4a=#'-* ~+-3)GAekͬJ9'oەFBL;LQVe͌T0/4!St[-NjC5]Β"af2MVrMA(c' BLMVrW)N8q[&oVVgiINP Dw>"?xp6g|n6`:Щ`䎛m')SifyZnZw_aZg;6XOVc>4_=K]aQ30ns̞;͒RZc^qp8ǽ*3p?(n7 ]HQRM)/$I+c۷GM:-GgXIzJVr`ĦmUDE;E>\s#y'g f1jR^{*.PnԤsp L1iDG_%kz̦à'-ص5O(XTiS5@UKf:7m'ĕu֘1?i \~*QEg/蛸*/җ9][OGߟ?t}DOoEmк& ƠĖ,0X(BQcbjlZt—Ffy0M /WBKߔߕ6!`D=RX U[<ۏ7px=}mu 4."`}rn8hV,TZWGiJ* -kO=Φv=W61W' g7jjÇ0'PGN1܊9?J'1/bV?بR?q(øᰨw -~_PK*l  PK!yb5PermissionsPanel.classmTNA=Kv ŶEQ(~V> ![:v  L$`]h̹{M > aNE71kAt! BFR +bVˆ 7㦈-; w}L+W@ls ![ӷ2|y=oU۶p"*_%W$e% pJ^IٜXftS/r;xCU M8g|vk=_"3rE/+yk^vrϰHMC?*x1b9OF!X=QTC$t+KB0W%Q i gpVC5@ryzDlFZshYE]FbXfeN7yIB{#QfE02 wJ7VZXH}px$Լcf18I:HKUްLn:GR)yGw)ፀ ;qħ[{Om9H8O?O!}|ɟ!5tR"!j&c](d_ nㆉ+ĥg;>E:DUҕ``!@fElaf 01JXbe8'_Mnb7' .4UG7a*`H[ɶƶêa;`)zu?PKDPK!yb5PreviewWindow.classW xo6Ndf!*(JMHZZ)$@bxi6Lv'afg%>-mm5־&KJ(RhU&% |wusΝ޿c|)T+cL:dlF@I *(ALs%\if=~yF/% )x.p)_qi Tp.W-\۸H0};qkӵ] :VH# ?V017& ~܌(-~:?s^_*CL­ cd쑱WA2쨏eܮ;$ HS¯hNmJc}[]uD@a7Uf FhW#0eF0Z),FŒVg/Ȼ*˫l'f:Fv%}''YثK*(U,o%UQ(JM{2C0Vp^+Π0_Ƃ=(@@ A ˠA~h臞A 0~Pb& ?S0i N)d8XASgtZMqy5;7[.Ҿ`\r9},/M, g^5J/.Bq/f=(AT|ޏezEzΞN2i-Ї3kZr7UݏP Ⲣe * f$^ Ah6C, ;"g~>Et=<1E |͛sR,uDEID?4L/0w$/KydTB-@PK*iPK!yb5PropertiesWindow.class8 ||3?_@I`c0. &qLfdg*ZoM("ѪLдPlmmwkmmn׵#[=x _~x3#8Oo7uM:MP(h W ޑ:w{B~a"()7C.xWPGNt$/J7:Û GOOEtA!z^&@B?! Pp:X<h`!Q G+,"" q ZDq Na|$sx88OP8MOt'),, +d[JL"SV:[YOS8pQ+`8wxh^q!!3%EEX.UL9 +SB` *vZ>9OFǵNve76 df & MbE Ä:܉-:FT*j'0n!v hј`ԯ1;)s @;ڒjmfo]fS3^yQw*3T-fL?oI%_ޖܞZ5cѺLkK&;LuG#e-[mr&&֯6Ѯh"޵:7cM)j]h˖eliHD1B1ڗhIc6H]x"$/h<:aRY3c/$͕fr]Y|G"M(ܲ9 %::q3Z0c(+cc8.eYԂH8e6b&(d뻓]6 3Z3[Sh[{ a(5Y*1+29pmZfoѮ659Y6tr̻,HGbҭ̔'G} `&ӵd`dC< &Ȃ3,%3YޑN ƭUg-2e66$6V?i&ͮmVK /R[MlWN!Ҁjk enRBy'[{h }0?R|$UKF&"ˀ s7 W5#=]24u oύ~ormo]x+~.r]ݩhlwo]zCZw}ǀGS3. +l;<ٝhh>=< OTV1`bu!HmӍ ksnmj ޏd8JM,#|vPb[܀>e9m91Ǚ5<&YOa{dbn#V YwI%N~j@:쌱SFi<1a#pp=++Ii>3pd`cf-33[ڢgJ.41/C܅م";_)I^U|1QxB,M&ɍx$f"RO"dǧt >lɳ҅zuavOa8ESBWbSanLI9mBmX[Vg-vBy&rD;0}$KF/ηz~Pñꇺ˯)By1dlw_&,گ"k?g*v_ [J Ft&֬zպ56WJ ^qG[fDa5/v/6[R#ǮdKqp0uղp߱reC(ڰ)Tem_:ĚJ^4M&q"YSIfn5%"jǍcrĥ쵮v9W:"x֌3H]dp+x]`B7ـvf[3S$_NT8@n?мiXeӯv}Fpӭҭf,q=xQg>s#H#!+}CtǵycglnR76l^/}+}s~0PiS_'k:}0c$Ħa USW3Ͷw2n諻9lvml oɳŊENff<23K:-K֖G6,l3oWveLowM-EFy{q?lź`-= L;JC:>+N\i9ڤyMg@x?`?ՠlE t:̠8T : -ô^:~E.5>p4;i#An3 C?<5{FQ3LO5zjBQMs:]]D{V+޽tw?])]=ݨitVItvݩMwiӽԣ RݯMhC>?=E}ho!=[J{}ϗ>zz·i0={~F>3_gc)OIt?O'O M#Ķұs\S,b jԪ +V2eۤe-8REj-Q‰::L!̣7`9 яp:g/uk4]m>^Ax{K~>OcE_ҟ}SHxJ/r3>,=x*\|X%\RU8+MIc};ꇕ}\x͚8 %&Q0K5o_Έ1&n? 3޹Z&RY_g}>(0U;kxլ*p\qj4 XbP8C AsD8CM:58 8Z] l+!i;WU^7:{JX $Z)U'TU3 ֱTP*abW5GΩṂejǞΗ.:\ Pl5oQGZ x/VzZ=0-{8+ }mC0Z8f38g#=~DbQyDxN̙qhLý=`LVW B>{,[nd~p򸜞Tؠ%lRes ÉjS¹cMj%D*TjVk๼ANaD{қU烮aE!xPKCM PK!yb5QuickSort.classmSKoQ.C>hQۙѶJZiFp#-L;M\4qc &&lkW? >H=sۯ/b'^ 0%쓰_CcQ8 %LHT[Op8TS* nE 4juWtzݲsVZv*W˫d{^*K\┼s]u٬uHnj1F[ufe5hΫU 5p7Dw:خ#~ ؅0808'1is2rkґl蕑'Wɥ;NTtSu%.M\Wp UO RT!C{;T{u " 5s Aw *gw4vN0!u ' 0? hu؄y/FJ(v26bL llB؆c[-pۡ=rC~C>#oD~2i^\\㪑|%mwq'/ @o+ (2u9"wo7*HQ+X~Q u'8sZg٩؃Q<>gү#*>S?'§ynN 8?یNsYn>i?V gx,7gxVy_Rq<'pUyGu|GyE7QU\RWT슂W%x6EvI"f[v.AcItmBwc{î#mww3 Fc]m n荴;^ZrGd3Vhl}zKR[vִWYFM:7FnF&n(g$[zG2sFgy#̇I*m%QȦrT:aF%M됝&c}T6;-KY#n#kL˴Ihn KzW{:AfvѝO }0IO#OllB2-"[xM7jzDWқ0M.k*L+Ɋ! SUcH6R&t쏦ٸ73C &R &aC9oIrOaQN(G5_m|Gm71?4j5밞4C䧞(mi>%Tvdn RxB03װ}~[5\Ï~?TÃа}Чu ?5mk0hN?7A^g&\WW 5bD?:Oe2=_=]vN?]pnsz?U}4!%ɿ!C'!9rj,cPb|/MA1cWlS=Y %.j]z ;&s&f%&53Gּ]}ڄa}p(t<5F-RWp4bdQZ D=V;N4`X. ȉ%xT4hS"Eϋ0^KqM4uт72KBɖ^] {(/UL䡑r %4SR@3i- t 9;#^ʹ JXr˃+e4rBGychv,CZeKDty$ Dxцb VWC`~#Dfu 11}"NII"$:s&VĥNޘƤabrs x8Ղ5l]ϛ)\-|N~\1,`+"yaZfhtxrѰ[5E(Ghtdr|Jؤh2MKYY2#a[|6y!5w,M:N+Q,0Y,ibfs2ak3bunC'Nπ@ia(>Ҹ6&ck<(Qˉ ~Rc?O3(0f̕F̌&\n[a*;ylZ%;r/~Qnλ_+ZG;6([A9*^g"b&EsL;;H|K&RIelt 7::If9otU@%rzC\y&6?<gDф /]V{i˴u!^y"_8BBW..P̶v )cRAfp00ۺ q.:2O1$K \uQ*EKWtQ.*1^Drl&+|)]L1Y)6U( bP3t17LEs[kpYi&F$ap7䇸28Z+T`b) LKB$Nl碬"I@)pqlѳ)e:#uBb^ÝG,[jlyV.~.'F8,Px7H+$k" wň֤Q–_YPqאq㞟ӵJ6O( V::$궈i0#f'/>geYBae[Qs'YjQZD6Fwat  D[XtfgNXͥVK q"Jr[埛Ҩ%v-g6'(9a"q6Ph1*t;W҉+Y1Nc:Hv$R }۳˜{[o{y(#,&u-,ÿ fR:0A|@gfţJ٨K]$ ˍD~ҟdj xc#eoDR$r2mL:3gzE̢y07vy.mޣ&A!TYZ5 ARia۠(k.}z3*mJOV̶HL/ o6R3}9yoT!n3W !:UU+ShBІPD\95jPܚҠMIUAے!l`ܖ*J b|& &Fq&&.&gV..HR6ʦԸRU6-EL!Lo. 3]$yΓ%U%UVV,|KUTdcdAiFvaH?6a`_pRś!eBIGLILM:mOnbY iF2B'$xVP̓w#pż=h.= 1s (as|, hAAyne(/,+ 4ǒRz#\湽 .!ue~aGD9-y2]VOfxߒrrg`+ uJPɿa×aI<PS'r\cKO5>O M) +N͢H2<ڠLa|+j? R^Ty^E [qWnF(W `&r'ʛ1QނVm'oZy;a˻CqC?}1y/y?N܇䃢R>$b|X4GU_#]")QS{8 qL>.Nʣ|BOSuy\-˓&PKt PK!yb5ResizePanel.classuUkoe~fnEPa;m)&Z- iwά6?5&^bB Fb "-&~5?ďsf{鮻s9wG?"¡zla! 9"䨐cB"q!'"8сzF1&Ίl\N!I!焜r!^aLfWmP:zC_RfPYXIv^2 &%ʰ#W0g4S&sz*eZ);4r\4-pXAZᩞ CvbesL`V72'szvΜ{>o ۋ2 }dghC |VALBEZR [V %=c۔af2I6cj[fưm2-ٜqd0:j_D&ܬq”6Ny-#CHઊEv!xNf!/%[BTi:f˜U:R13*n""K-~0Ul{WrKNyY@0q yا ZUACn2tKOIM :싼Qpteƒ5?{e}Y=JRy)[{3\=V+k+h}+jm5muZ*/j}BI;%mAрZmC'ډX6N 0N }| }tӞ"tw.q)Q> ~J|ӫhX<Lk?A؋8KcR eܑcwW\eAѵ[ud(.YUb{XӬkh11_2`'c 7( G[~WӒA7nhvW߱Ɓ4+E}Jc&ACl#y Gq5J!iGeLA/c{wgI}!ZQiҲlQ-eW{ASSS$_KeL:)< gOp&'Ys "t pOU>p|aU?!En0yS[to kӯڻV)5Q|[q zK6nظ}n~|!6lVFt=LS[ _γ f#\wd#J 2-6]vx~P!p<~ǐA O A{K7o,P{,%N?fk>GŬݩgc4 p_SJsO&Olue|@*UWˤPKv@ PK!yb5SambaShare.classTRP.]ކZ.˦iM?R%ئ5noWg02P&㘙ܳsOx0M0RuXqc7EpK,9径Hʘvc32fEP#ẻh^‚EoIB;mϦM[ω+4C=-F_skn2j\K F(e+o|{ wv͠7a>zi۱Ѫa;;A0 ^'8;EViD| + _ Np~`XF@  Nxy CE1B4%wfB!7?C~SAK.\Pt|=k/x8EuHPKPK yb5ScrollImage.classmUweML +)( R,BKEHZI2mLLZ}EQP@@4E7<ʃ|s<;34mIɽ}s˟q֋uX>/7x1Dmdf]^xG^H[]L$PˠA$l"4 Y%g; 69:*h:K} cF̙+v'⸂r*EtwƴĮ1?4U7\!뮙ʹLثR8K=wQcBs#{љ Q 0صif;DJIjL`ЬPvh{3icj> & T[bnKPcLw4w|?}&^`6^dc&^bczz߂e䭕 (# B пlp҃vmtO0 'IvZE|L VWLͬ2qgQ#bReǰN%Byrs!/[SUCdeC-`r148 Nߜ) Nc EIGZ.³Ŕ,*bʢDa;7tLgQXMI,탟EzmsԳ5TV9>!曞iOr5ShUpaG' Ah&s/:J6Ft*`N=L#9yZ SC/b- 'V)}2>A/i_k\7_ ƏLDV^ Z7SM }\Z [yn0BYE0:bUOXs;^o?PKz PK!yb5SearchWindow.class8 |Se3y/yTJ`/,łV-BX@(P[В&m$MjBqBī(\)z!"-箻?&;曙of^wmA)~ǀ? _g4/yk·_  `~/Aрza1'ˀ{a0 1gbɼw-7?"SKV z|nYyL4L4 a|/9K\(4MflX#qp4+{1 ˲Y'& P Fx&*pya2_F(ԃW1Z!XG*HŪ"EFXlc_d$Gkq; OaZE~}`'<-i&t47K(H{k#HnyƮvnHv HR "KقKn xQ/ 7b +#x%SgZ1]g%bGy=) otRȖp3c9Db-[a$BKk'ccoȑ2%k+6|?>@̄AMIH.§yܑO>#.ó9ɢNcpen)vSx#s aK wAx.a2Wdrj1L-* |e|%-&udXώʼa2W:fO\VU#| _7a۽LO&%v{WZQ ߔ"|!|#|?`ʢhCqQ> wQlԣ?% ~&%ko$Ib~%oU UU*Lae i HF2PX|.ՖS°eixq6vn-$s dNv pu+OY a,XvY5zV97OUUQ䰏¡dkB8̭?`rbwm穭7|FF0Ky%% MA~ d3w^)B^0Wfn",b rpzMy2).~>.xxc,,~3 iz;`# e~#BKA2 pp Pf(G,0lG a_S {8OcRFAVm}t?m8on#TlVhMwL~,s1q̹<cSl0 ᵅsxah:"E9E{rӛ%pFQN+aX+iLMR:Y+ktfh7L^պiv=ITK a4OMԨW|}&vjүԢo3gi:E(JqwuBw--rQ{.-fU 惮Q\pά qyLaqgwVcz^tй0΃|At!c|ٷ۸fz"őGNMنWkS,# q[\o: GEaFgt:Ś;NFyu; 6r]b`r0|JН /範a8i9fɔ Ns[LƷgt(% 6z|/_;C1 MpY\\t%t DB+-$]g28nUt3.xZ-݊nRӝ8™t7i5{\ UEjzaDkZ6(H)]EVtj]Wѓk=quõs\(w]6^҆Z1MWzMZzKDokO;+/#XnݠO[c$z $agg/xcd|,J# G2H_5q:m<ﯳ;= GE <ԗc=#vk@r.d-- |-w\ZqW~A=ZA?B'Υo_ OyPK: PK!yb5SharingWindow.class7 xSU$/y.45 RDET` IMR ̸*(u₂8s{/K_޹sv9M?\ n¯<_u<[|ǟ{ ~(¿~oOO  aREEC?|%PC)* _iXDܱX Kx[&iXʓܯb{ *ӰCp&ޗ(p?_@ bA| kdd%OJác!<Ο9TÑ( p4Q P cT<8gq<sb&9I?hXDFMœ?Y)9'uNɩj5OyGh4a].:3XX31G(_wDMy0gu4cW85O#Qtt ƤF#6݅ij 7I. o(Ύ6cv"ni%5(291ڪo|PssC8a# Bau62>Ёfk;||L}@\Q38ybQ{yFeH:XB78WA"+a8!oTde;KE;cMfdк#42;E}vsWt̟-y VIJN.4$‰6C[toSqN\]xt{Xtѡ^[~bXUʮ+:<+)UJƚXmh~3:>ѮlPI#N-r6anvvqqu6h9?:XMa ӞD* .cͶBi6C txocث"9 \fW.>L7::<ʸ"QQE.:ad<EAM Z_<;7 )UK&,HaGaxbjC/USP^%rIuf|ROaM)>Ot >a#u#lHsfMbo'/1ijRW^tNygt|yT_a`ͼt܀3wF鄶hW&J7 l^s-aEǥplVm|b% ,+%Ñ( P;TP'5C|+JHLG(A-oq eJ{t/ȶSzITuhZLۆHתYSI&;[ tɍsD^6dDLܻ8K(S +9nd <55 +sv}g0g7u7}|H1{\vw9fN8jnΈM^uZamNbEIwJ޵[:33]3g[{#1+ O;e\_ߛR+q4?n^vѮԤ8ȁ68נN[gCMцl 6|ƿd×mH!nR[jBCM &EVM^`/`л\=ඡbCO!=+@i$$H4p=@.ɠ'Y>( V_vz+큲*O$ 4{xRo@ٝL t MB3Z 5T$ σtfI8Ix`,ƒLB7(&UPa&^. 7 ltK0$ zb9`xFX=0b12e6p&"a4.DZ-G8,r$oT"G1=S0(VXubcL V쨌bcXQ(PO@QFѼؒⳤCsYQ1"{g\#{lkɶf|ƚ㘸ȶ@h]%A(=Jro4Է*;N0wPhQegAIUBYP'YP |XV<^iib4d4KcO`i^JtL^;,+gVS)=PNu*/+/ Ӧ)ev%})1묕\ueAԲriL55/+}͖Ak9$|_C?W?N%ş ?dT)*s0.E3i:3*E3s,4ExFlƼMifK;'M3,lM f%ĵҥ#BYp*8m?`;vlhĞGy^B q3nfTXLuƖ8gqH1+zIHNKw.eRyy)͐R+8L¹;wsK@ X0H R8EnepK=pncAX' ax],mc8\`ʼnq+KKj\$RqxOg]]cIbNlr]*^t=!^v(^q&6>[\_5T2{x}x߽Nls >p*>toݻGJrء+>WNeإ/y+rX|*wʫ6S|/)+)~Ԉxz"OBTIY*Dj!v- )Sd\YWz2FY**jG/~:F/LY^(+n9T].+!rZ{޳0gjGpZ . PqBd>Fٳ1ڞkRn"ĝ4$ .`wqj.Q.MeYK##ʹt9 L$! sT *-UU{e6~JOie'YG9r@ OY{Y Jvb.p7=PW_8zX(%ޱ~sѕRJ~1_S+ Sͅ(eT%dGS|姰/;J~F'9T˝P#wL)+^~ 76q8PKxP5{'PK!yb5StaticTextField.classmJ@$IMeyM 7-]KIk1; szs;項:jWB u`3k9msO?~Hxes #־ZA6 8QsU+n7R lH-V"w'ԏLJ2#/8WĚ;=U88q:jԬScCg,z8InJ#$c!b[$;̨SW1I)YYD!l4E>Bq:`OWZ˓9G>Q31K!PK"&PK!yb5StringSplitter.classmRKOQ=΃C)VP)T<M, ЅC{)eڔ1ԍW6ݸDJ"q~w"Nrι|{ aI V16%$*LLE\a'4bLq%vC {SŤ)d}]ㅑf!γv<)e92K,V>jM+?3Hb3/T5c@HBҚ-V,{[Qcaϡ ^t Xs@mEghJ9.WZ*ク}b7щ. Xlosp[9XwqO"|sM[ڥtN4" ˛$c5t_ndw"h&TV?nJ7_ѐͽdĚ3EW;\Eh\dZ=e Aw!3d5G(ꊟWɿRHǐc(/OԲ1#䀜A;ēD@5 `A)Vfq:@oS*ZR@$T96_ ^Zs:P4UB,:ɣ:{#T/B}3m"qqJY 9 J]2Zt n]vUB4*Gi `@veHmJh5C96I~ #9ίÆɋtP<PKbWoPK!yb5TabSelector.classVse}&M%(ܬ&@B@o mmlJiE@/x'a 2Cqf7G/sv4el|oO:dtAW ^C^a^ar1&}lw<~ h{' 8@#N03p-8<.0dF$xŘ#)aH x@6i3v[gLgvL,- 4:90Q&YqRK[yg=$p#n2o K?KڈIYK$N儊Mo35roJ38f1u4kR\VJXX{Zb3)#K Wtv:et+k-n*陌p\fT18 >'4K77m6M*ڰ<>ZhSl:YlV[ULᒊv^""d 2l9L؅*f˸R \8]WUkOulVq@M&▊OT|*>cs:_KjWE*B†qwT}ŀn:ӅcA7Wb˦ y\:m,]N5mڮͱ @(ג`شuT΍S45i+޺0T !-]F@3LW1v'ucS#9WPEɩYN-:2 tss܃>-3ZYeh,gx Zz"dĊ|Cӌ94Gow8[nvt2=xt"9xD|5ޠ:%g}RFcy yE7Q Ntjߎ%-x;x>Kɻ+`I4Z@쇂;ɘO۽{졀*\'h$F\UM@/(5SԴäA/̓'oTc/`y+a˚ XU^oJ|8$%;|wc{ f)QKLN\V{C4eR{]owJB*tBDR_Ic,J/_$TKPqmwUȿ_^UjJ}gAmY\:( I.8v M~ut(!9$&V!XH.`MI>랇4@8+0@ys:HS8M3c ,<~ ſb?.fH0D& &E_[S.GȈOa?aZ \-$ %O}g>h fŰ[6,U7vtwRePe(54W~,{;g/[4g2xZ6=PK.S PK!yb5TabbedDisplayPanel.classSKsP.iRm}[Rj}P[QZ::uB@„T 7>V҅[-t8' s 039;|'LcU@EA"0 7QqNBK.Wpou1s 0|Tjَͼiϛ je-nꦹaSwN7t{a"Iй?%l5뉺'DT3ujd6B44îy9,QzGR-@7J]b $H=EU7lKZR-_Z57sCu]ˤTCxc!2F*=.IA1/&nɸ;2Xqt8咈{2/⁌$ExGX)#fA/fM@!~@6YTQpjVs&Po/@*momF{=R,7ǠMuwPj#Z@>2-_i|2Z.(kMj4n9M(%nR|iz#Cֿ4$d=aZ7Ǖ]0%RK@P=vy^ qB P[ =!+Tc琤C{iǩ(uwK%+j=-i hXS ϤY*Ƥɗ0݆" kxNEHǚYZCiҲD2\a/PKOPK!yb5ToolbarLayout.classuV{pTWl’ nIQh7ŢB!@$m,Bn6@>RPiUkKUli5> t@oulj}]6! ww{>4 jD; ǂ /!;@ir#_xAdW a }%Arh!' OAoin&'mk۴[e<8,] ;\.+b= lst7vzD܍՟..قk͔+u6QҎEvh%74˺Ƶ~q7vlqKMOX|zO:Owe+(j2H&mRX0DFf:KH# 5zls$bEK9P,<bsQvF3b\n{u B[XBb1 0U OV QOXxRl 9,<-s>g,|Axϊ,( _evt()P[̓=|i7p9xl W"Nxj w}yof#ca 2h)TNwozw)@)u8Y_r\cW:a̭=ޏߝOs~G/Qy[ ;z(9lɍymY6KnalFzLbG{kE,1"^Jk2}貶ieFz2# N[.NH{p$o9XWɼ !jSׁx;7d<)I:#3rcB,NgHrt>yVʐ>+r~(C#Oj6@Lk37|-`]+'M~33)3W4H/bcP[,Ͱ(s-kB Esb~U)ŗL?^3mz4ҭ܆F7b;qkS WV%SeGz[) *nIe}>kl#w?t9-f~tٮqrZ-?3yZ|j/NOM r߭y;|)d~`R'v!!V*a[~K|/CCHZQk'Kr;~ ,LIX!ӓm$\mv$t5#e5 XmN UB씭ہn@jKKbx} oLդߦ5,i,|³X $i<:&]@\#!?7x?+)_9z%;w^`Wy_B5xK zTwNʺ(i44ިaKIT6 d.D#,1='FZ,e xXOjVӃ[@zn$)}w뻜p3'_8/cv<Wz/@N,]E î8󼺗]qDm6j]Y8uv@ F.h䴘7$>P-yTy,@5/# q.aP0CQw@HroS!S:nR֨B*0 U8Dj!*zySeF<$)~aHhN~;ņv /A}(roTlPԒ L"j'Pi./e_B֥u"LFǺxuam6{p ׸40V5SL5Mv0`U5`W"o(MTET(]KuZԫD}nSN6U*GaXQՀ#j5R7yu#n-ZߪھOSJ>yX,ϧ<Y~2c32Z,UqXR=Xc X>6D.?I=[UȮ'DtpC§6bīnUШ67xPK7BPK!yb5 Util.classW |Wl& IXBlB) -,WJj4&d`w'-j[ZOhjڊzNIw>, DŽ|\>OJ|BF2:-3*#2)!Q GU `\k@{y~AU|I-{}}^Ҕ{FJuInjdKAi9J*;jɴ4{je"=.#m8Ί[I^wiv 3η6 v>U糓[~[?J3aګyv묘!3ƦN#٦w9 d%{uq"qљjݩ xls ݌=S 6swl4)EѤۆkhF*E\Ɣʖ)D͝{(,t5Dm P{BʙJ@̲m#Q O5#\4ɔh~+1O:m[1]Gv'DL|o0y#y'm*2lWh8/eٿ2w%OF&SRpm/fl3$6q l _W4|Uܰ?j٦5IDZ۪I'CFskf} ?^*^CHK1Úѐ4ٖ'*~g_f į4^^ WXMg|K3ˌr`k迆[ 5@Vlh> 5l mB(d?MAInHx]o!Bv QMNWw&\N0Y^#*_b+[{^~E1Xl \Y$%nWZڐL#136S4$G$wZܩΔ'؜Bn&.R,.+g`Ez#Q0)[ODN^h`6xx$:F֒-`ӎR+/Fv4T7몫l+=\ߨO̕\D~ ;ᪿHAT&Z/}%h=<ч}qFVɰb59L+ٗQ{2;sEx^\ҝ)\i3oӦqeu.mn ՞+dll"l=m$ S9٧NLrѥɹي'2j#s䗦pv(+9M.ow .pN^`G yAd &9^ nqm|O{g1c1x["Qԍ7_GPCzNQ Âj-F`.-åac!ZhGu GBUQرyF*PyFji$•:A=`Fj֗Gh(NM\ҏebZr]M1޽\R`vhŧx7]xkOxd%D^*>짟nFYw|(T,IQhbw!崣Ol3Y`F1'`>.g.k5<5\6\}1*UNDIBRULT?wHUѹB^ 4ա( 5Wު(joUHW vWZ=Apn rJA F) ޓz'V >tp}QC.8 z_u΄(@Z5FTZL'qSdANd!f] C=CN~y?A`ȤkWyVj:¼Z P8Ê2KW0P@egc 0B 5sed "@g"̈EzVW;Wӓq{hNoa79L9DӷX;)ZI7Rt(ZbRgF[XD+Q`GpYFAKzq?]z&SN2dc Ԟŕex:;F\^~0,pʳX [=Ӏ^kGc(_úqdž4e^}TLZ b}x)3gP[%ͼ a?psI4 PK $ XPK!yb5 META-INF/PK!yb5ќgGG=META-INF/MANIFEST.MFPK!yb5@o) QACLEditor.classPK!yb5,  ACLEntry.classPK!yb5` k ACLWindow.classPK!yb5Ϡ+FAttributeEditor.classPK!yb5Dg !$AttributesWindow.classPK yb5>MultiLabel.classPK!yb5*l  AOverwriteWindow.classPK!yb5DHPermissionsPanel.classPK!yb5*iKPreviewWindow.classPK!yb5CM }TPropertiesWindow.classPK!yb5ERQeQuickSort.classPK!yb5T ChRemoteFile.classPK!yb5t qRenameWindow.classPK!yb5v@ izResizePanel.classPK!yb5TSambaShare.classPK yb5z _ScrollImage.classPK!yb5: SearchWindow.classPK!yb5xP5{'SharingWindow.classPK!yb54$έStaticTextField.classPK!yb5"&5StringJoiner.classPK!yb5bWopStringSplitter.classPK!yb5.S TabSelector.classPK!yb5eTabbedDisplayPanel.classPK!yb5OѽTabbedPanel.classPK!yb57BToolbarLayout.classPK!yb5 $ X FUtil.classPKGGfile/chmod.cgi0100755000567100000120000000430610505073163013242 0ustar jcameronwheel#!/usr/local/bin/perl # chmod.cgi # Change the ownership and permissions on a file require './file-lib.pl'; $disallowed_buttons{'info'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log($in{'linkto'} ? "relink" : "chmod", undef, $in{'path'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; !$access{'ro'} && &can_access($in{'path'}) || &failure(&text('chmod_eaccess', $in{'path'})); if (defined($in{'user'})) { $uid = $in{'user'} =~ /^\d+$/ ? $in{'user'} : defined(%user_to_uid) ? $user_to_uid{$in{'user'}} : getpwnam($in{'user'}); &failure(&text('chmod_euser', $in{'user'})) if (!defined($uid)); $gid = $in{'group'} =~ /^\d+$/ ? $in{'group'} : defined(%group_to_gid) ? $group_to_gid{$in{'group'}} : getgrnam($in{'group'}); &failure(&text('chmod_egroup', $in{'group'})) if (!defined($gid)); } if ($in{'linkto'}) { # Just changing the link target $follow && &failure($text{'chmod_efollow'}); &lock_file($in{'path'}); unlink($in{'path'}); symlink($in{'linkto'}, $in{'path'}) || &failure(&text('chmod_elink', $1)); &unlock_file($in{'path'}); } elsif ($in{'rec'} == 0) { # Just this file &update($in{'path'}, 0); } elsif ($in{'rec'} == 1) { # This directory and all its files &update($in{'path'}, 0); opendir(DIR, $in{'path'}); foreach $f (readdir(DIR)) { next if ($f eq "." || $f eq ".."); next if (-l $full); &update("$in{'path'}/$f", 1) if (!-d $full); } closedir(DIR); } elsif ($in{'rec'} == 2) { # Directory and all subdirectories &update($in{'path'}, 0); &recurse($in{'path'}); } print "\n"; sub recurse { local(@files, $f, $full); opendir(DIR, $_[0]); @files = readdir(DIR); closedir(DIR); foreach $f (@files) { $full = "$_[0]/$f"; next if ($f eq "." || $f eq ".."); next if (-l $full); &update($full, !-d $full); &recurse($full) if (-d $full); } } sub failure { print @_,"\n"; exit; } # update(file, perms_only) sub update { local $perms = $in{'perms'}; if (defined($perms)) { if ($_[1]) { @st = stat($_[0]); $perms = ($perms & 0777) | ($st[2] & 037777777000); } chmod($perms, $_[0]) || &failure(&text('chmod_echmod', $!)); } if (defined($uid)) { chown($uid, $gid, $_[0]) || &failure(&text('chmod_echown', $!)); } } file/LinedPanel.java0100644000567100000120000000132310122720133014322 0ustar jcameronwheelimport java.awt.*; class LinedPanel extends GrayPanel { String title; LinedPanel(String t) { title = t; } public void paint(Graphics g) { super.paint(g); Font f = g.getFont(); FontMetrics fnm = g.getFontMetrics(); int w = size().width-1, h = size().height - 1; int tl = fnm.stringWidth(title); g.setColor(Util.light_edge); g.drawLine(5, 5, 5, h-5); g.drawLine(5, h-5, w-5, h-5); g.drawLine(w-5, h-5, w-5, 5); g.drawLine(tl+9, 5, w-5, 5); g.setColor(Util.dark_edge); g.drawLine(4, 4, 4, h-6); g.drawLine(6, h-6, w-6, h-6); g.drawLine(w-6, h-6, w-6, 6); g.drawLine(w-6, 4, tl+9, 4); g.drawString(title, 7, fnm.getAscent()); } public Insets insets() { return new Insets(15, 10, 10, 10); } } file/Util.java0100644000567100000120000000623310122720133013231 0ustar jcameronwheelimport java.awt.*; import java.awt.image.*; class Util { static Frame fr; static Graphics g; static Font f; static FontMetrics fnm; static Toolkit tk; static Color light_edge = Color.white; static Color dark_edge = Color.black; static Color body = Color.lightGray; static Color body_hi = new Color(210, 210, 210); static Color light_edge_hi = Color.white; static Color dark_edge_hi = Color.darkGray; static Color dark_bg = new Color(150, 150, 150); static Color text = Color.black; static Color light_bg = Color.white; static { fr = new Frame(); fr.addNotify(); g = fr.getGraphics(); setFont(new Font("TimesRoman", Font.PLAIN, 8)); tk = Toolkit.getDefaultToolkit(); } static boolean waitForImage(Image i) { MediaTracker mt = new MediaTracker(fr); mt.addImage(i, 0); try { mt.waitForAll(); } catch(Exception e) { return false; } return !mt.isErrorAny(); } static boolean waitForImage(Image i, int w, int h) { MediaTracker mt = new MediaTracker(fr); mt.addImage(i, w, h, 0); try { mt.waitForAll(); } catch(Exception e) { return false; } return !mt.isErrorAny(); } static int getWidth(Image i) { waitForImage(i); return i.getWidth(fr); } static int getHeight(Image i) { waitForImage(i); return i.getHeight(fr); } static Image createImage(int w, int h) { return fr.createImage(w, h); } static Image createImage(ImageProducer p) { return fr.createImage(p); } static Object createObject(String name) { try { Class c = Class.forName(name); return c.newInstance(); } catch(Exception e) { System.err.println("Failed to create object "+name+" : "+ e.getClass().getName()); System.exit(1); } return null; } /**Create a new instance of some object */ static Object createObject(Object o) { try { return o.getClass().newInstance(); } catch(Exception e) { System.err.println("Failed to reproduce object "+o+" : "+ e.getClass().getName()); System.exit(1); } return null; } static void dottedRect(Graphics g, int x1, int y1, int x2, int y2, int s) { int i, s2 = s*2, t; if (x2 < x1) { t = x1; x1 = x2; x2 = t; } if (y2 < y1) { t = y1; y1 = y2; y2 = t; } for(i=x1; i<=x2; i+=s2) g.drawLine(i, y1, i+s > x2 ? x2 : i+s, y1); for(i=y1; i<=y2; i+=s2) g.drawLine(x2, i, x2, i+s > y2 ? y2 : i+s); for(i=x2; i>=x1; i-=s2) g.drawLine(i, y2, i-s < x1 ? x1 : i-s, y2); for(i=y2; i>=y1; i-=s2) g.drawLine(x1, i, x1, i-s < y1 ? y1 : i-s); } static void recursiveLayout(Container c) { c.layout(); for(int i=0; i= 0 && yy <= height) { // Draw this node if (n.im != null) bg.drawImage(n.im, xx, yy, this); if (sel == n) { // Select this node bg.setColor(Util.body); bg.fillRect(xx+17, yy+2, tw+2, 13); bg.setColor(Util.text); } bg.drawString(n.text, xx+18, yy+12); } if (n.ch != null && n.open && yy <= height) { // Mark this node bg.drawLine(xx+18, yy+14, xx+17+tw, yy+14); // Draw subnodes yy += 16; for(int i=0; i= n.x) return n; if (n.ch == null || !n.open) return null; for(int i=0; i(LRemoteFile;ILFileManager;)VCodeLineNumberTablegetPerms()I SourceFileFileManager.java >? @ java/awt/GridLayout AB CDjava/awt/Checkbox info_readE FG H  IJ KL info_write  M info_list info_exec  NOPermissionsPaneljava/awt/Panel()V RemoteFileperms(II)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;setState(Z)VtypegetState()Z *+6**Y**Y- Z W* x~ **Y- Z W*x~ **Y-+ Z W*~  . fg hij3kHl_mtnqr!"oG<*  *x<* *x<* *< vwx0yEz#$file/LinkWindow.class0100664000567100000120000000661610522475216014611 0ustar jcameronwheel- L^ K_` ^ abc de fgh ^i jkl m anopq rst ^ u v w Kx dy z{ |} r~ | ^ K a % d ' K K r r d 6m r r r d E d d E E d d filemgr LFileManager;fromLjava/awt/TextField;tocreate_b LCbButton;cancel_b"(Ljava/lang/String;LFileManager;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java V NOjava/awt/BorderLayout  link_title  java/awt/Paneljava/awt/GridLayout Vjava/awt/Label link_from V link_tojava/awt/TextField/ java/lang/StringBuffer V PQ   RQWest Centerjava/awt/FlowLayout VCbButtonsave.gif create V ST cancel.gifcancel UTSouth   ErrorWindow link_efrom  link_eexistsmakelink.cgi?from= &to=  link_efailed RemoteFile V  LinkWindow FixedFrameCbButtonCallback()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)V(II)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/lang/Stringequals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/awt/TextComponentgetTextlength()Iselect<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowtrim startsWith(Ljava/lang/String;)Z8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; lastIndexOf(I)I substring(II)Ljava/lang/String;(I)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;find (Ljava/lang/String;)LRemoteFile;urlizeget_text'(Ljava/lang/String;)[Ljava/lang/String;.(LFileManager;Ljava/lang/String;LRemoteFile;)V(LRemoteFile;)V showing_files LRemoteFile; show_files(LRemoteFile;)Zdispose KLMNOPQRQSTUTVWX~**,*Y** Y N Y :- Y - Y*W- Y*W Y *Y+Y+(ZW******Y Z!W*!**"-#W*$#W Y :%Y&*'Y*()***+Z,W*'Y*-)*.*+Z/W*0#W*1*2*3Yb    ! 2 ? T i w ! " # $ % & ' ( )B ,h /q 0u 1y 2} 3Z[X +*,*4M,56Y*7,89W,/:>,;:,`<:*=:>6Y*?,89W*Y@*W,AB*W*!AC:26Y*D289WEY*2F:G**HIW*J+*/*JYb 7 9 : ;. </ >6 ?> @G AS BY Cc Du Ev I L M N P Q R S U V W\]file/ErrorWindow.java0100644000567100000120000000126410122720133014574 0ustar jcameronwheelimport java.awt.*; import java.util.*; class ErrorWindow extends FixedFrame implements CbButtonCallback { CbButton ok; ErrorWindow(String m) { setLayout(new BorderLayout()); Panel cen = new BorderPanel(1); StringTokenizer tok = new StringTokenizer(m, "\r\n"); cen.setLayout(new GridLayout(tok.countTokens(), 1)); while(tok.hasMoreTokens()) { cen.add(new Label(tok.nextToken())); } add("Center", cen); Panel bot = new GrayPanel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(new CbButton("Ok", this)); add("South", bot); pack(); show(); setTitle("Error"); Util.recursiveBackground(this, Util.body); } public void click(CbButton b) { dispose(); } } file/config0100664000567100000120000000006210167125033012644 0ustar jcameronwheelhide_dot_files=0 iconsize=0 nocharset=0 extract=1 file/unicode/0040755000567100000120000000000010046127335013110 5ustar jcameronwheelfile/unicode/zh_TW.Big50100644000567100000120000002467710046121040014653 0ustar jcameronwheelfeedback_module=關於模組 help_efile=無法讀取說明檔 $1 delete_eaccess=您不被允許刪除 '$1' session_logout=登出成功,使用下面的欄位重新登入 session_failed=登入失敗,請再試一次 main_none=您沒有任何可使用的Webmin模組 month_4=四月 copy_eto=您不被允許拷貝到 '$1' smonth_3=三月 acl_gedit=選擇可以看到的群組 config_dir=給模組 $1 chmod_echown=變更擁有者失敗 : $1 edit_title=編輯 $1 中 elock_tries=無法鎖檔案 $1在 $2 分鐘後 feedback_desc2=此報告將會傳送給Usermin發展群,而非您的系統管理者,網路提供者,或主機公司,回饋內容請以英文撰寫。 paste_egone=複製的檔案 $1 已經不存在 referer_again=以後不再顯示這個訊息 delete_efailed=無法刪除 $1 : $2 month_11=十一月 rename_title=變更名稱 $1 acl_uedit_uid=使用者 UID 範圍是 main_logout=登出 upload_ewrite=無法寫入到 $1 : $2. link_eexists=$1 已經存在 sday_2=星期二 feedback_ecannot=您不被允許寄送回饋信件 feedback_prog=傳送回饋信件到 $1 使用sendmail程式 $2 main_homepage=首頁 delete_ddesc=您確定要永久的刪除目錄 $1 與其所有內容嗎? acl_home=使用者家目錄 info_perms=權限 info_user=使用者: chooser_dir=$1 的目錄 header_servers=Webmin 伺服器 smonth_12=十二月 info_size=大小: config_nochange=不改變 category_webmin=Webmin paste_ecopy=在您貼上要先剪下或複製 file_type0=目錄 groups_clear=清除 feedback_config=在寄送郵件中包含模組組態設定? acl_gedit_all=所有群組 feedback_ecannot2=您不被允許寄送包含設定組態檔案的回饋信件 acl_uedit_all=所有使用者 sday_3=星期三 no=否 session_header=登入Webmin acl_gedit_none=沒有群組 paste_eself=您不能把檔案貼到本身上 info_apply1=只有這個目錄 config_none=無 acl_rpc0=否 longcategory_info=顯示您的系統資訊的模組 mkdir_eexists=$1 已經存在 right_user=使用者 top_open=開啟 sday_4=星期四 config_title=組態設定 acl_uedit_except=全部使用者除了 smonth_7=七月 acl_feedback=可以寄送回饋信件? header_webmin=Webmin 索引 smonth_2=二月 chooser_title1=選擇檔案... session_mesg=您必須輸入使用者名稱和密碼來登入Webmin 伺服器在 $1上。 groups_title1=選擇群組... feedback_to=傳送回饋到位址 info_setgid3=以群組權限執行 copy_efrom=您不被允許拷貝自 '$1' feedback_configdesc=如果選取此項目,在回饋郵件中會附上相關的模組和模組會用到相關的所有設定檔案。例如 ,如果回饋是關於 使用者和群組 模組,你的 /etc/passwd/etc/shadow檔案會被附加上去。 acl_feedback1=是,但不能包含組態檔案 feedback_emodule=在信件中您選擇了包含模組組態設定,但卻沒有選取模組。 month_1=一月 smonth_6=六月 users_ok=確定 paste_ecfailed=拷貝失敗 : $1 top_upload=上傳 feedback_os=在寄送郵件中包含作業系統資訊? top_new=增加 sday_6=星期六 index_nojava=這個模組需要 Java 才能正確的運作, 但是您的瀏覽器似乎不支援 Java month_8=八月 referer_warn_unknown=警告! Webmin發現程式 $2從不知名的位置連結來的,出現在 Webmin以外。並企圖嘗試在您的伺服器執行危險的指令。 rename_eold=您不被允許改名自 '$1' link_to=連結到: yes=是 acl_rpc2=只有 rootadmin main_title=Webmin $1 在 $2 ($3) chooser_ok=確定 info_own=所有權 referer_title=安全警告 mkdir_eaccess=您不被允許建立 '$1' header_config=模組組態 category_=其他 right_group=群組 users_title1=選擇使用者... session_mesg2=您必須輸入使用者名稱和密碼來登入 right_name=名稱 top_refresh=重讀 groups_sel=選擇的群組 helpsearch=搜尋文件 acl_umask=建立檔案的遮罩 info_sticky=設定位元: help_err=無法顯示說明 top_edit=編輯 top_info=資訊 top_copy=複製 day_1=星期一 upload_title=上傳檔案 chooser_title2=選擇目錄... link_from=連結自: error=錯誤 acl_rpc=可以使用RPC ? month_10=十月 create=建立 upload_file=要上傳的檔案 feedback_text=描述問題或建議 top_paste=貼上 move_eto=您不被允許移動到 '$1' list_eaccess=您不被允許存取這個目錄 feedback_email=您的電子郵件 skill_medium=中等 delete_fdesc=您確定要永久的刪除檔案 $1 嗎? rename_old=舊檔名: users_sel=選擇的使用者 chmod_echmod=變更權限失敗 : $1 acl_rpc1=是 month_7=七月 file_type7=管線 smonth_1=一月 default=預設 info_type=類別: info_link=連結到: groups_cancel=取消 category_net=網路 day_4=星期四 category_syslet=網管 upload_edir=上傳的目錄不存在. smonth_5=五月 header_help=說明... help_epath=遺失說明檔路徑 groups_ok=確定 category_cluster=電腦叢集 chmod_egroup=$1 : 沒有這個群組 rename_eexists=叫做 $1 的檔案已經存在 modify=修改 mkdir_dir=目錄: longcategory_net=網路和網路服務組態模組 emodule=存取拒絕 : 使用者 $1 不允許使用 $2 模組 top_view=檢視 acl_feedback2=是 top_cut=剪下 header_module=模組索引 find_eexist=$1 不存在於 $2 referer_ok=繼續執行Webmin程式 skill_low=新手 sday_5=星期五 save=儲存 feedback_header=回饋內容 month_9=九月 info_efailed=無法重讀 $1 : $2 upload_ok=上傳 session_save=記得上次登入帳號? config_err=儲存組態錯誤 longcategory_hardware=列表機,磁碟和其他硬體組態模組 acl_dirs=只允許存取到目錄 find_eaccess=您不被允許存取 $1 feedback_econfig=您沒有完整的權限來選取模組 right_date=日期 file_type6=設備控制檔 edit_filename=檔案名稱: category_info=資訊 info_read=讀取 main_skill=Skill level main_switch=切換使用者... info_write=寫入 delete=刪除 referer_warn=警告! Webmin發現程式 $2從 URL $1連結來的,出現在 Webmin以外。並企圖嘗試在您的伺服器執行危險的指令。 info_setuid2=以使用者權限執行 config_eaccess=您不被允許存取這個模組 mkdir_title=增加目錄 groups_title2=選擇群組... ok=確定 progress_data2=下載 $1 位元組 link_efailed=連結失敗 : $1 help_eexec=$1 失敗 : $2 delete_ftitle=刪除檔案 rename_efailed=改名失敗 : $1 view_eopen=無法開啟n $1 : $2 top_delete=刪除 index=索引 feedback_mailserver=傳送經由SMTP伺服器 day_3=星期三 feedback_title=回饋Webmin progress_size=下載中 $1 ($2 位元組) .. month_12=十二月 info_group=群組: acl_uedit_group=使用者群組 paste_eover=$1 無法被蓋寫 info_apply3=這個目錄與所有的子目錄 feedback_enoto=沒有填寫傳送回饋位址位置 main_title2=Webmin feedback_err=寄送回饋時發生錯誤 top_rename=改名 efilewrite=寫入$1失敗 : $2 feedback_all=所有模組 month_6=六月 programname=Webmin copy_elink=符號連結失敗 : $1 config_setto=Set to help_eheader=遺失 <標頭> 區段 edit_eaccess=您不被允許儲存 '$1' acl_uedit_only=只有使用者 category_system=系統 smonth_10=十月 longcategory_=無法分類的其他模組 month_3=三月 file_type1=文字檔 delete_dtitle=刪除目錄 day_5=星期五 feedback_via=傳送回饋信件到 $1經由 SMTP伺服器 $2 acl_gedit_except=所有群組除了 acl_follow=是否跟隨符號連結? smonth_9=九月 file_type4=檔案 acl_gedit_gid=群組GID範圍是 session_login=登入 link_title=建立連結 move_afrom=您不被允許移動自 '$1' category_servers=伺服器 rename_ok=改名 info_setgid=設定 GID: progress_done=.. 下載完成 find_edir=$1 不是一個目錄在 $2 upload_efile=沒有選擇要上傳的檔案. smonth_4=四月 day_2=星期二 upload_eperm=您不被允許建立 $1 users_clear=清除 info_other=其他: feedback_desc=這表單可以讓你回報錯誤(bugs)和建議Webmin發展群關於任何問題或所忽略的特色,當按下傳送按鈕後,這頁的內容將會寄到 $1。 edit_eover=$1 無法被蓋寫 progress_nosize=正在下載 $1 .. feedback_mailserver_def=本地sendmail程式 acl_feedback0=否 right_size=大小 file_type2=影像檔 longcategory_webmin=組態Webmin自己的模組 sday_1=星期一 info_apply=套用變更到 users_cancel=取消 acl_uedit=選擇可以看到的使用者 rename_enew=您不被允許改名成 '$1' info_setgid2=檔案繼承群組 file_type5=符號連結 feedback_attach=加入要附上的檔案 smonth_11=十一月 link_efollow=您不被允許建立符號連結 acl_uedit_none=沒有使用者 main_version=版本 $1 在 $2 ($3) upload_dir=上傳到目錄 session_pass=密碼 find=找尋 chmod_euser=$1 : 沒有這個使用者 skill_high=專家 longcategory_cluster=從單一介面管理多重服務 main_return=回到 $1 info_exec=執行 feedback_send=傳送回饋 acl_gedit_only=只有群組 longcategory_system=使用者,檔案系統,工作排程和其他系統設定 rename_new=變更為: upload_efailed=開啟上傳失敗 : $1 info_file=檔案 month_5=五月 chmod_elink=符號連結失敗d : $1 acl_root=檔案選取時的根目錄 groups_all=全部的群組 feedback_name=您的姓名 feedback_osdesc=如果選取此項目,會自動在回饋信件中加上您的作業系統名稱和版本。 info_sticky2=只有擁有者才能刪除檔案 switch_remote_euser=Unix使用者 $1 並不存在 paste_emfailed=移動失敗 : $1 view_enormal=只有一般的檔案可以被檢視 config_header=給 $1 的可組態選項 link_essl=您的系統尚未安裝 Net::SSLeay Perl模組所需要使用的HTTPS連線。 longcategory_servers=web, email, FTP和其他服務的組態模組 view_eaccess=您不被允許存取 $1 mkdir_efailed=建立目錄失敗 : $1 day_6=星期六 info_mod=修改時間: session_clear=清除 edit_title2=建立檔案中 main_feedback=回饋... info_setuid=設定 UID: chmod_eaccess=您不被允許存取 '$1' help_einclude=無法引入 $1 edit_esave=無法儲存檔案 : $1 smonth_8=八月 cancel=取消 session_user=使用者名稱 users_all=全部的使用者 info_path=路徑: edit_enormal=只能編輯一般的檔案 feedback_emodule2=選取的模組不存在 config_ecannot=您不被允許組態這個模組 session_timed_out=連線逾時於$1分鐘 sday_0=星期日 acl_user=以使用者權限存取伺服器上的檔案 reset=重設 progress_data=下載 $1 位元組 ($2 %) upload_conv=是否要改變 DOS 的換行符號? index_title=檔案管理者 day_0=星期日 help_eif=$1 失敗 : $2 feedback_esend=使用sendmail或本地SMTP伺服器傳送回饋郵件錯誤 info_list=列出 users_title2=選擇使用者... info_apply2=這個目錄與其中的檔案 month_2=二月 file_type3=二進位檔 link_efrom=您不被允許連結 '$1' category_hardware=硬體 file/delete.cgi0100755000567100000120000000126310271613364013414 0ustar jcameronwheel#!/usr/local/bin/perl # delete.cgi # Delete some file or directory require './file-lib.pl'; $disallowed_buttons{'delete'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("delete", undef, $in{'file'}, \%in); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print &text('delete_eaccess', $in{'file'}),"\n"; exit; } if (-r &unmake_chroot($in{'file'}) && !-d &unmake_chroot($in{'file'})) { &switch_acl_uid_and_chroot(); $rv = unlink($in{'file'}); if (!$rv) { print "$!\n"; } else { print "\n"; } } else { &switch_acl_uid(); ($ok, $err) = &unlink_file(&unmake_chroot($in{'file'})); if (!$ok) { print "$err\n"; } else { print "\n"; } } file/MkdirWindow.class0100664000567100000120000000650110522475216014753 0ustar jcameronwheel- K\ J]^ _` abc \ defgh i djklm nop \ q r s Jt _u vw xy nz x{| \} ~ _ ! J d J _ n n _ n = _ 5i _ _ = = _  B B _ _ _ filemgr LFileManager;dirLjava/awt/TextField;create_b LCbButton;cancel_b"(Ljava/lang/String;LFileManager;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java T MN mkdir_title  java/awt/BorderLayout Westjava/awt/Label mkdir_dir T Centerjava/awt/TextField/ java/lang/StringBuffer T OP   java/awt/Paneljava/awt/FlowLayout TCbButtonsave.gif create T QR  cancel.gifcancel SRSouth   ErrorWindow mkdir_eexists mkdir.cgi?dir=  mkdir_efailed RemoteFile T  FileNode T   MkdirWindow FixedFrameCbButtonCallback()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;java/lang/Stringequals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/awt/TextComponentgetTextlength()Iselect(II)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshow trim_path lastIndexOf(I)I substring(II)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;(I)Ljava/lang/String;find (Ljava/lang/String;)LRemoteFile;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;urlizeget_text'(Ljava/lang/String;)[Ljava/lang/String;.(LFileManager;Ljava/lang/String;LRemoteFile;)V(LRemoteFile;)VnodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object; (LFileNode;)Vdirs LHierarchy; Hierarchyredraw showing_files LRemoteFile; show_files(LRemoteFile;)Zdispose JKLMNOPQRSRTUVb **,***Y* Y*  W**Y+Y+(Z W*****YN-Y -*!Y*"#*$*%Z&'W-*!Y*(#*)*%Z*'W*+- W*,*-*.WF !8n| XYVe+*&*M*,/M,/0>*,12:,`345Y*6,78W*Y9*W,:;:25Y*<278W=Y*2>:?*@AB:BYCD*EF**GHW*I*IWZ 0?QRv       Z[file/RenameWindow.class0100664000567100000120000001030710522475216015113 0ustar jcameronwheel-) Ym Xn Xop m qrs tu vw xyz m{ |}~ v  q t  X v X  q " v $ X X   6m t 6 6 v t @ v v t t t t v  N v v vfilemgr LFileManager;file LRemoteFile;oldnameLjava/awt/TextField;newnamerename_b LCbButton;cancel_b(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java e [\ ]^java/awt/BorderLayout  rename_title   java/awt/Paneljava/awt/GridLayout ejava/awt/Label rename_old e  rename_newjava/awt/TextField e _`  a` West Centerjava/awt/FlowLayout eCbButtonsave.gif  rename_ok e bc cancel.gifcancel dcSouth  / java/lang/StringBuffer ^          ErrorWindowrename_eexistsrename.cgi?old=  &new= rename_efailed      FileNode    ! "#$ % &^ '( RenameWindow FixedFrameCbButtonCallback()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)V(II)V&(Ljava/lang/String;)Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component;name(Ljava/lang/String;I)Vjava/awt/TextComponent setEditable(Z)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/lang/Stringlength()Iselect<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)Vjava/awt/WindowpackshowUtil recursiveBody(Ljava/awt/Component;)VgetText()Ljava/lang/String;trimindexOf(I)I startsWith(Ljava/lang/String;)Z directoryappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString lastIndexOf substring(II)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;(I)Ljava/lang/String;find (Ljava/lang/String;)LRemoteFile;urlizeget_text'(Ljava/lang/String;)[Ljava/lang/String;delete(LRemoteFile;)Vlist()[LRemoteFile; [LRemoteFile;nodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object; HierarchyNodechLjava/util/Vector;java/util/Vector removeElement(Ljava/lang/Object;)Z (LFileNode;)Vdisposedirs LHierarchy; Hierarchyredraw showing_files show_files(LRemoteFile;)Z XYZ[\]^_`a`bcdcefg**+*,*Y*** Y N Y :- Y-Y*W-Y*W Y*Y*ZW****Y*ZW******- W*! W Y :"Y#*$Y*%&*'*(Z)W*$Y**&*+*(Z,W*- W*.*/*0hf b c d e- f> gK h` iu j k l m n o p q s t uE xk {t |x }| ~ ijg +*)*12M,,/3_,45 ,:%6Y7*8949,9::/;64 <:*=N>*8N*/;66Y7*<949,9::/;6`>M-,?:@Y*A, BW*6Y7C9*W*D9E9*WD9:F:2@Y*G2 BW*,**8*H-IW-*J*-8*K*L*8MN:*L*MN: 4 / *OP QW R*S*TU**VWW*S+*,*Sh+    $ - 3 U ^ r ) 3 H I Q Z h m u }              klfile/BorderPanel.java0100755000567100000120000000202510122720133014507 0ustar jcameronwheelimport java.awt.*; class BorderPanel extends Panel { int border = 5; // size of border Color col1 = Util.light_edge; Color col2 = Util.dark_edge; Color body; BorderPanel() { } BorderPanel(int w) { border = w; } BorderPanel(int w, Color cb) { border = w; body = cb; } BorderPanel(int w, Color c1, Color c2) { border = w; col1 = c1; col2 = c2; } BorderPanel(int w, Color c1, Color c2, Color cb) { border = w; col1 = c1; col2 = c2; body = cb; } BorderPanel(Color c1, Color c2) { col1 = c1; col2 = c2; } public Insets insets() { return new Insets(border+2, border+2, border+2, border+2); } public void paint(Graphics g) { if (body != null) { g.setColor(body); g.fillRect(0, 0, size().width, size().height); } super.paint(g); int w = size().width-1, h = size().height-1; g.setColor(col1); for(int i=0; i ?@AB CDEpathLjava/lang/String; availableZwritableguestIcomment(Ljava/lang/String;)VCodeLineNumberTable*(Ljava/lang/String;ZZILjava/lang/String;)Vparams()Ljava/lang/String; SourceFileFileManager.java "FStringSplitter "G H( 1I JK  L MN  !java/lang/StringBufferpath= OPQ RS &available= OT &writable=&guest= &comment= U( SambaSharejava/lang/Object()V(Ljava/lang/String;C)V nextTokenjava/lang/Stringequals(Ljava/lang/Object;)Zjava/lang/IntegerparseInt(Ljava/lang/String;)Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagerurlize&(Ljava/lang/String;)Ljava/lang/String;(I)Ljava/lang/StringBuffer;toString  !"#$yE*Y+:M*,*,*, *, *, %"    $ 1 < D "&$P **+** * * % " # $ % & ' ('($u] Y*** * * % ,)*file/save_export.cgi0100775000567100000120000000730010137362377014517 0ustar jcameronwheel#!/usr/local/bin/perl # save_export.cgi # Update, create or delete an NFS export require './file-lib.pl'; $disallowed_buttons{'sharing'} && &error($text{'ebutton'}); &ReadParse(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || $access{'uid'}) { # User has no access to NFS print "0\n"; exit; } &read_acl(\%acl, undef); %einfo = &get_module_info("exports"); %dinfo = &get_module_info("dfsadmin"); %binfo = &get_module_info("bsdexports"); if (%einfo && &check_os_support(\%einfo)) { # Linux NFS exports &module_check("exports"); &foreign_require("exports", "exports-lib.pl"); %econfig = &foreign_config("exports"); &lock_file($econfig{'exports_file'}); foreach $e (&foreign_call("exports", "list_exports")) { push(@{$exp{$e->{'dir'}}}, $e); } if ($in{'delete'}) { # Delete all exports for some dir foreach $e (reverse(@{$exp{$in{'path'}}})) { &foreign_call("exports", "delete_export", $e); } } else { # Adding or updating an export if (!$in{'new'}) { # Updating, so delete old exports first foreach $e (reverse(@{$exp{$in{'path'}}})) { $host{$e->{'host'}} = $e; &foreign_call("exports", "delete_export", $e); } } for($i=0; $in{"host$i"}; $i++) { $h = $in{"host$i"} eq '*' ? '' : $in{"host$i"}; $e = $host{$h}; $e = { 'active' => 1, 'host' => $h, 'dir' => $in{'path'} } if (!$e); delete($e->{'options'}->{'ro'}); if ($in{"ro$i"}) { $e->{'options'}->{'ro'} = ''; } delete($e->{'options'}->{'all_squash'}); delete($e->{'options'}->{'no_root_squash'}); if ($in{"squash$i"} == 0) { $e->{'options'}->{'all_squash'} = ''; } elsif ($in{"squash$i"} == 2) { $e->{'options'}->{'no_root_squash'} = ''; } &foreign_call("exports", "create_export", $e); } } &unlock_file($econfig{'exports_file'}); # Apply configuration &exports::restart_mountd(); &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify', 'export', $in{'path'}); print "1\n"; } elsif (%dinfo && &check_os_support(\%dinfo)) { # Solaris NFS shares &module_check("dfsadmin"); &foreign_require("dfsadmin", "dfs-lib.pl"); %iconfig = &foreign_config("dfsadmin"); &lock_file($iconfig{'dfstab_file'}); @shlist = &foreign_call("dfsadmin", "list_shares"); foreach $s (@shlist) { $share = $s if ($s->{'dir'} eq $in{'path'}); } if ($in{'delete'}) { # Delete existing share &foreign_call("dfsadmin", "delete_share", $share); } elsif ($in{'new'}) { # Create new share foreach $r ('ro', 'rw', 'root') { if ($in{$r} ne '-') { $in{$r} =~ s/\s+/:/g; $opts->{$r} = $in{$r}; } } $share->{'dir'} = $in{'path'}; $share->{'desc'} = $in{'desc'}; $share->{'opts'} = &foreign_call("dfsadmin", "join_options", $opts); &foreign_call("dfsadmin", "create_share", $share); } else { # Update existing share $opts = &foreign_call("dfsadmin", "parse_options", $share->{'opts'}); foreach $r ('ro', 'rw', 'root') { if ($in{$r} eq '-') { delete($opts->{$r}); } else { $in{$r} =~ s/\s+/:/g; $opts->{$r} = $in{$r}; } } $share->{'dir'} = $in{'path'}; $share->{'desc'} = $in{'desc'}; $share->{'opts'} = &foreign_call("dfsadmin", "join_options", $opts); &foreign_call("dfsadmin", "modify_share", $share); } &unlock_file($iconfig{'dfstab_file'}); # Apply changes to NFS daemon &dfsadmin::apply_configuration(); &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify', 'export', $in{'path'}); print "1\n"; } elsif (%binfo && &check_os_support(\%binfo)) { # BSD NFS exports &module_check("bsdexports"); } else { # No NFS modules installed or supported print "0\n"; } sub module_check { if (!$acl{$base_remote_user,$_[0]}) { print "0\n"; exit; } } file/list_exports.cgi0100775000567100000120000000452210025212304014676 0ustar jcameronwheel#!/usr/local/bin/perl # list_exports.cgi # Output info about NFS exports require './file-lib.pl'; print "Content-type: text/plain\n\n"; if ($access{'uid'}) { # User has no access to NFS print "0\n"; exit; } &read_acl(\%acl, undef); %einfo = &get_module_info("exports"); %dinfo = &get_module_info("dfsadmin"); #%binfo = &get_module_info("bsdexports"); # too hard if (%einfo && &check_os_support(\%einfo)) { # Linux NFS exports &module_check("exports"); if (!&has_command("rpc.nfsd") && !&has_command("nfsd")) { print "0\n"; exit; } print "1\n"; &foreign_require("exports", "exports-lib.pl"); foreach $e (&foreign_call("exports", "list_exports")) { push(@{$exp{$e->{'dir'}}}, $e) if ($e->{'dir'} !~ /:/ && $e->{'host'} !~ /:/); } foreach $d (keys %exp) { local $host; foreach $e (@{$exp{$d}}) { local $o = $e->{'options'}; $host .= sprintf ":%s:%d:%d", $e->{'host'} ? $e->{'host'} : '*', defined($o->{'ro'}), defined($o->{'all_squash'}) ? 0 : defined($o->{'no_root_squash'}) ? 2 : 1; } print &make_chroot($d),$host,"\n"; } } elsif (%dinfo && &check_os_support(\%dinfo)) { # Solaris NFS shares &module_check("dfsadmin"); print "2\n"; &foreign_require("dfsadmin", "dfs-lib.pl"); foreach $s (&foreign_call("dfsadmin", "list_shares")) { $opts = &foreign_call("dfsadmin", "parse_options",$s->{'opts'}); $opts->{'ro'} = '-' if (!defined($opts->{'ro'})); $opts->{'ro'} =~ s/:/ /g; $opts->{'rw'} = '-' if (!defined($opts->{'rw'})); $opts->{'rw'} =~ s/:/ /g; $opts->{'root'} = '-' if (!defined($opts->{'root'})); $opts->{'root'} =~ s/:/ /g; printf "%s:%s:%s:%s:%s\n", &make_chroot($s->{'dir'}), $opts->{'ro'}, $opts->{'rw'}, $opts->{'root'}, $s->{'desc'}; } } elsif (%binfo && &check_os_support(\%binfo)) { # BSD NFS exports &module_check("bsdexports"); print "3\n"; &foreign_require("bsdexports", "bsdexports-lib.pl"); foreach $e (&foreign_call("bsdexports", "list_exports")) { foreach $d (@{$e->{'dirs'}}) { printf "%s:%s", $d, $e->{'ro'} ? 1 : 0; if ($e->{'network'}) { printf ":%s/%s\n", $e->{'network'}, $e->{'mask'}; } else { foreach $h (@{$e->{'hosts'}}) { print ":$h"; } print "\n"; } } } } else { # No NFS modules installed or supported print "0\n"; } sub module_check { if (!$acl{$base_remote_user,$_[0]}) { print "0\n"; exit; } } file/ACLEntry.class0100664000567100000120000000443310522475216014140 0ustar jcameronwheel- ,D EF +F EG +GH I J +KL M +NOP +Q R S +T +U +VWX DY Z [\ ]^_`a bc ]de bfghijkl mnofilemgr LFileManager;file LRemoteFile;defZtypeLjava/lang/String;ownerreadwriteexec (Ljava/lang/String;LACLWindow;)VCodeLineNumberTable(LACLWindow;)VgetRow()[Ljava/lang/String;toString()Ljava/lang/String; SourceFileFileManager.java 9pq -. /0StringSplitter 9r sA 34default tu 12maskother 54 vw xy 62 72 82java/lang/Stringjava/lang/StringBufferacltype_default_ z{ @Aacltype_| }~user eacl_user `4 } eacl_group 4 info_read  info_write info_execdefault:: zACLEntryjava/lang/Object()V ACLWindow(Ljava/lang/String;C)V nextTokenequals(Ljava/lang/Object;)Zlength()IcharAt(I)Cappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagertext&(Ljava/lang/String;)Ljava/lang/String; RemoteFile8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;group(C)Ljava/lang/StringBuffer; +,-./01234546272829:; **,*,Y+:N*- *  * *- *  &*  *-**-: -:*r*w*x<N l m n o p' q3 r8 s@ uX v` wj xo zu {} | ~  9=;9**+*+<   >?;@L* Y* Y* M+*,S*  *  * * +SI* +*S8*  +** !S+*"*#!S+S*&Y+]2*$%S*&Y+]2*&%S*&Y+]2*'%S+<>  < G m u |  > @A;* (LY+* )L*  6*  *Y+**)LY+*r-*LY+*w-*LY+*x-*L+<"  * B i BCfile/save_share.cgi0100775000567100000120000000506310026221345014266 0ustar jcameronwheel#!/usr/local/bin/perl # save_share.cgi # Create, update or delete a samba share require './file-lib.pl'; $disallowed_buttons{'sharing'} && &error($text{'ebutton'}); &ReadParse(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || $access{'uid'}) { # User has no access to samba print "0\n"; exit; } %minfo = &get_module_info("samba"); &read_acl(\%acl, undef); if (!%minfo || !&check_os_support(\%minfo) || !$acl{$base_remote_user,'samba'}) { # Samba module not installed or supported print "0\n"; exit; } &foreign_require("samba", "samba-lib.pl"); %sconfig = &foreign_config("samba"); &lock_file($sconfig{'smb_conf'}); @shares = &foreign_call("samba", "list_shares"); if ($in{'delete'}) { # Deleting an old share foreach $s (@shares) { &foreign_call("samba", "get_share", $s); if ($samba::share{'path'} && $samba::share{'path'} eq $in{'path'}) { &foreign_call("samba", "delete_share", $s); last; } } print "1\n"; } elsif ($in{'new'}) { # Creating a new share map { $taken{$_}++ } @shares; if ($in{'path'} =~ /\/([^\/]+)$/) { $base = $1; } else { $base = "root"; } if ($taken{$base}) { for($i=2; $taken{$base.$i}; $i++) { } $base = $base.$i; } $samba::share{'path'} = $in{'path'}; $samba::share{'available'} = $in{'available'} ? 'yes' : 'no'; $samba::share{'writable'} = $in{'writable'} ? 'yes' : 'no'; $samba::share{'comment'} = $in{'comment'}; if ($in{'guest'} == 2) { $samba::share{'public'} = 'yes'; $samba::share{'guest only'} = 'yes'; } elsif ($in{'guest'} == 1) { $samba::share{'public'} = 'yes'; } &foreign_call("samba", "create_share", $base); print "1\n"; } else { # Updating an existing share foreach $s (@shares) { &foreign_call("samba", "get_share", $s); if ($samba::share{'path'} && $samba::share{'path'} eq $in{'path'}) { # found the share to update $samba::share{'available'} = $in{'available'} ? 'yes' : 'no'; $samba::share{'writable'} = $in{'writable'} ? 'yes' : 'no'; $samba::share{'comment'} = $in{'comment'}; if ($in{'guest'} == 2) { $samba::share{'public'} = 'yes'; $samba::share{'guest only'} = 'yes'; } elsif ($in{'guest'} == 1) { $samba::share{'public'} = 'yes'; delete($samba::share{'guest only'}); } else { delete($samba::share{'public'}); delete($samba::share{'guest only'}); } &foreign_call("samba", "modify_share", $s, $s); last; } } print "1\n"; } &unlock_file($sconfig{'smb_conf'}); &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify', 'share', $in{'path'}); file/DFSAdminExport.class0100664000567100000120000000261310522475216015304 0ustar jcameronwheel-S -. / 0 1 2 3 4 567 8 9: 0; -< = >?@ABC DEFpathLjava/lang/String;descrorwroot(Ljava/lang/String;)VCodeLineNumberTable](Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Vsplit'(Ljava/lang/String;)[Ljava/lang/String;params()Ljava/lang/String; SourceFileFileManager.java "GStringSplitter "H I*    ! java/util/StringTokenizer "J KLjava/lang/Stringjava/lang/StringBufferpath= MNO PQ&ro=&rw=&root=&desc= R*DFSAdminExportjava/lang/Object()V(Ljava/lang/String;C)V nextToken'(Ljava/lang/String;Ljava/lang/String;)V countTokens()Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagerurlize&(Ljava/lang/String;)Ljava/lang/String;toString  !"#$l8*Y+:M*,*,*,*,*, %" ; < = > ?' @/ A7 B"&$P **+*, *-**% E F G H I J K'($Y- Y+ M, N6--,S-% O P Q R% Q+ S)*$nVY***** % X+,file/list_shares.cgi0100775000567100000120000000226310307762563014503 0ustar jcameronwheel#!/usr/local/bin/perl # list_shares.cgi # Output info about samba shares require './file-lib.pl'; print "Content-type: text/plain\n\n"; if ($access{'uid'}) { # User has no access to samba print "0\n"; exit; } %minfo = &get_module_info("samba"); &read_acl(\%acl, undef); if (!%minfo || !&check_os_support(\%minfo) || !$acl{$base_remote_user,'samba'}) { # Samba module not installed or supported print "0\n"; exit; } &foreign_require("samba", "samba-lib.pl"); %sconfig = &foreign_config("samba"); if (!-r $sconfig{'smb_conf'} || !&has_command($sconfig{'samba_server'})) { # Samba not installed print "0\n"; exit; } print "1\n"; foreach $s (&foreign_call("samba", "list_shares")) { &foreign_call("samba", "get_share", $s); if ($s ne 'global' && $s ne 'homes' && $s ne 'printers' && $samba::share{'path'} =~ /^\/[^\%\s\:]*$/ && $samba::share{'printable'} !~ /true|yes/i) { printf "%s:%s:%s:%s:%s\n", $samba::share{'path'}, $samba::share{'available'} =~ /no|false/i ? 0 : 1, $samba::share{'writable'} =~ /yes|true/i ? 1 : 0, $samba::share{'guest only'} =~ /yes|true/i ? 2 : $samba::share{'public'} =~ /yes|true/i ? 1 : 0, $samba::share{'comment'}; } } file/OverwriteWindow.class0100664000567100000120000000602210522475216015671 0ustar jcameronwheel- E] D^ D_ D` Da bc Dde ] fgh bi jklmn op bq r fstuv wxy oz { D| b} ~ ] " b $ D fP D o o 7w o <] < < b bfilemgr LFileManager;src LRemoteFile;alreadynewnameLjava/awt/TextField;ok LCbButton;cancelidxImodeZ)(LFileManager;LRemoteFile;LRemoteFile;I)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java U GH IJ KJ QR T STjava/awt/BorderLayout  over_title  North MultiLabelover_msg U Westjava/awt/Labelover_new UEastjava/awt/TextField U LM  java/awt/Paneljava/awt/FlowLayout UCbButtonsave.gif over_ok U NO  cancel.gif POSouth    J  ErrorWindow paste_eself R paste_eoverjava/lang/StringBuffer/ OverwriteWindow FixedFrameCbButtonCallback()V FileManagercut_modejava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vtext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)V RemoteFilepathLjava/lang/String;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;(Ljava/lang/String;II)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;name(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowdisposejava/awt/TextComponentgetText()Ljava/lang/String;java/lang/Stringlength()I directoryfind (Ljava/lang/String;)LRemoteFile;typeequals(Ljava/lang/Object;)Zappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString paste_fileE(LRemoteFile;LRemoteFile;Ljava/lang/String;LRemoteFile;Z)LRemoteFile; cut_buffer [LRemoteFile; DEFGHIJKJLMNOPOQRSTUVWo**+*-*,****Y ** *Y**W*Y* W**Y,ZW** Y!:"Y# *$Y*%&*' *(Z)*W*$Y*+&*, *(Z-*W*.W*/*0*1XJ   $ / < ] t     YZWP+*- *2+*)*34*5M,*36N-*7Y*8 9W-(-: -:7Y*;-9W?>@A@*3@A:***5-*B:**C*S*2XF   $ , 8 @ Q R e z {     [\file/LinuxExport.class0100664000567100000120000000276010522475216015021 0ustar jcameronwheel-^ ./ 0 1 2 34 5 6 7 89 : ;<= .> ? @AB C DEFGHIJpathLjava/lang/String;host[Ljava/lang/String;ro[Zsquash[I(Ljava/lang/String;)VCodeLineNumberTableN(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)Vparams()Ljava/lang/String; SourceFileFileManager.java %KStringSplitter %L M+  NOjava/lang/String  !" #$ PQ1 RST UVjava/lang/StringBufferpath= WXY Z[&count= W\ ]+&host=&ro&squash LinuxExportjava/lang/Object()V(Ljava/lang/String;C)V nextToken countTokens()I hasMoreTokens()Zequals(Ljava/lang/Object;)Zjava/lang/IntegerparseInt(Ljava/lang/String;)Iappend,(Ljava/lang/String;)Ljava/lang/StringBuffer; FileManagerurlize&(Ljava/lang/String;)Ljava/lang/String;(I)Ljava/lang/StringBuffer;toString  !"#$%&'n*Y+:M*,,l>** * 6, 2*,S* , T* ,Oͱ(6 h i j k l& m- n4 o> pI qY rg om t%)'* **+( w x y*+'Y**L=*Y+*2LY+* 3LY+* .Lw+( }' 2 [  ,-file/SharingWindow.class0100664000567100000120000002357310522475216015310 0ustar jcameronwheel-                      (   ,   !"# $% & '( )* + , -./ 0 1 2 3456 78 9: ;<= L> ? @A B C D E F G H I JKLM N O PQ R ST U V !W X YZ k[ k\]^ p_`a bc rd efg hi jk lm ln o pqr s t u v wx  y z {| }~ u   u     l   R R R  Rsave_b LCbButton;cancel_bfile LRemoteFile;filemgr LFileManager;sshare LSambaShare;dexportLDFSAdminExport;lexport LLinuxExport;samba_onLjava/awt/Checkbox; samba_off writable_on writable_off available_on available_offguest_on guest_off guest_onlycommentLjava/awt/TextField;descnfs_onnfs_offrwhostsrohosts roothostsrw[Ljava/awt/Checkbox;roroothost[Ljava/awt/TextField;lro[Ljava/awt/Choice;squash(LRemoteFile;LFileManager;)VCodeLineNumberTableclick (LCbButton;)Vsetup_leftright3(Ljava/awt/Panel;Ljava/awt/Panel;Ljava/awt/Panel;)Vadd_itemI(Ljava/lang/String;Ljava/awt/Component;Ljava/awt/Panel;Ljava/awt/Panel;)V add_hostsn(Ljava/lang/String;Ljava/lang/String;[Ljava/awt/Checkbox;Ljava/awt/Panel;Ljava/awt/Panel;)Ljava/awt/TextField; squashbox(I)Ljava/awt/Choice;robox(Z)Ljava/awt/Choice; opts_panel:(Ljava/awt/Component;Ljava/awt/Component;)Ljava/awt/Panel;export_options(LLinuxExport;)V SourceFileFileManager.java java/awt/Checkbox  share_title      SambaShare   LinuxExport DFSAdminExport java/awt/BorderLayout java/awt/Paneljava/awt/GridLayout java/awt/CheckboxGroup share_soff    share_son North  LinedPanel share_sheader  java/awt/TextField     share_comment yes  no share_available  share_writable share_only   share_guestCenter share_noff  share_non  share_nheader java/awt/Label share_host share_opts  java/awt/Choice     share_descshare_ro-  share_rw   share_root     TabbedPanel share_samba  share_nfsjava/awt/FlowLayout CbButtonsave.gif save   cancel.gifcancel South     java/lang/StringBuffersave_share.cgi?    save_share.cgi?delete=1&   save_share.cgi?new=1& save_export.cgi?save_export.cgi?delete=1& save_export.cgi?new=1&    West share_none  share_all  share_listedshare_s0 share_s1share_s2  share_lrw share_lroEastjava/lang/String   SharingWindow FixedFrameCbButtonCallback()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)VstabLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object;ntabnfsmodeIjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)V&(Ljava/lang/String;)Ljava/lang/String;.(Ljava/lang/String;Ljava/awt/CheckboxGroup;Z)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V availableZwritableguest(IIII)V[Ljava/lang/String;[Z[I getParent()Ljava/awt/Container;remove(Ljava/awt/Component;)V sambamodeaddItem)(Ljava/lang/String;Ljava/awt/Component;)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBodyjava/awt/WindowpackshowgetState()Zjava/awt/TextComponentgetText()Ljava/lang/String;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;paramstoStringget_text'(Ljava/lang/String;)[Ljava/lang/String;*(Ljava/lang/String;ZZILjava/lang/String;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;N(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V](Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V showing_files show_files(LRemoteFile;)Zdisposeequals(Ljava/lang/Object;)Zlength()IselecttrimgetSelectedIndex   y*****+*,*** ** * ** N**-* *-*YY:Y:Y:YY:YY:*Y* *!Z"#W*Y*$ *!Z%#W&'W(Y*) *: * +*,Y*- *./0*0*12**3 *04Y:  YY:  *Y*5  * *6!Z7#W *Y*8  **6!Z9#W**:  4Y:  YY:  *Y*5  * *;!Z<#W *Y*8  **;!Z=#W**>  4Y:YY:*Y*? **@!ZA#W*Y*5 **@!ZB#W*Y*8 **@!ZC#W**D 4E 'WY:Y:Y:YY:YY:*Y*F -!ZG#W*Y*H -!ZI#W&'W(Y*J *:*+*rYKYKLY*M N#WLY*O N#W* *P6*`,Q*`RS*`RT6*Q,Y*P2/S*Q2*12*S**U3VS*T**W.XS*Q2#W**S2*T2Y#W|*Q,Y-/S*Q2*12*S*VS*T*XS*Q2#W**S2*T2Y#W**,Y*- *Z/[*[*12**\ *[4***] *^ *_*`a***b *^ *c*`d***e *^ *f*`g*2h*2i*E'W*jB*8kYl:*m n*o n*E'W,*j*E'W* *E'WY:pYq*rY*st*u *vZw#W*rY*xt*y *vZz#W*{'W*|*}*~j    & : R d o z  1 ; M W w        3 < J S        T          7 A S ] h x           4 I V n t          % Q }          & !2 "< #E &N '[ ( + . / 0 1 2 2+*w **%u**76**<;**A*B@**0.*Y*M*9*Y*M* *W*%~*Y* *7*<*A*B*0* **W*Y*M**9*I/***Y*M}*9*Y*M**W@*I6*Y* ***Y*M***W***I**[Z**2^*2- *a_**2^*2- *dc**2^ *gf*Y*M*9*Y*M**W*I*Y* *[*2^*2- *a*2^*2- *d*2^ *g*Y*M***W***W*+*z*. 6 8 :' ;5 <Y >g ? B D F H J P, QM VX Wi Yq Z ] _ a c e g h j3 m> nO p] q t w y | ~( = G      % - 1 V+YY:Y,'WE-'W,Y-Y+&'W&  ) 2 ? L U `4-LY+N#WY:Y,'W#W  " + 3  ӻY:YY:-Y* ,^![S#W-Y* ,![S#W-Y* ,![S#W*+4,Y,^-,/:*12*-4.  B j b6RYM,* ,* ,* ,,   " / 4 Y1RYM,* ,* ,,   " / M%YN-Y-+'W-,'W-    # =>*Q*Q2+P+U+ W>6*QW*Q2?+P*Q2S+U*S2T+W*T2OB    % - 4 ; I [ k file/ACLWindow.class0100664000567100000120000001215310522475216014304 0ustar jcameronwheel-O q  p  p p p p      "   ) p ,  , )  3 5  7 p  ? p  ? E p~ p   , , ,   ?   h )  h  filemgr LFileManager;file LRemoteFile;acllistLjava/util/Vector;edmapLjava/util/Hashtable;ok LCbButton;canceladdaddtypeLjava/awt/Choice;acltable LMultiColumn;acltypes[Ljava/lang/String;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V doubleClick(LMultiColumn;I)V singleClickheadingClicked SourceFileFileManager.java java/util/Vector  xyjava/util/Hashtable z{java/lang/Stringusergroupmask default user default group default other default mask  eacl_title       tu vwjava/lang/StringBuffergetfacl.cgi?file=      ErrorWindow eacl_eacls java/awt/BorderLayout  eacl_acltype   eacl_aclname eacl_aclperms MultiColumn  ACLEntry   !" #$Center %java/awt/Paneljava/awt/FlowLayout &CbButtonadd.gif '(eacl_add ) } * +,java/awt/Choice acltype_ -. #java/awt/Label save.gifsave |} cancel.gif ~}South/ 012 3 4 5 67 89 : + ;<othereacl_edefaults = setfacl.cgi?file=&acl= eacl_efailed  > ? @default AB CD eacl_edefmask eacl_emask ACLEditor E F GH I JK LM N ACLWindow FixedFrameCbButtonCallbackMultiColumnCallback(II)V()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;toString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;length()Ijava/awt/Container setLayout(Ljava/awt/LayoutManager;)V+([Ljava/lang/String;LMultiColumnCallback;)V (Ljava/lang/String;LACLWindow;)V addElement(Ljava/lang/Object;)VgetRow()[Ljava/lang/String;addItem([Ljava/lang/Object;)V<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;typeIreplace(CC)Ljava/lang/String;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowsize elementAt(I)Ljava/lang/Object;defZownerequals(Ljava/lang/Object;)Z,(Ljava/lang/Object;)Ljava/lang/StringBuffer;J(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;disposegetSelectedIndex startsWith(Ljava/lang/String;)Z substring(I)Ljava/lang/String;!(LACLWindow;Ljava/lang/String;Z)Vselectedget&(Ljava/lang/Object;)Ljava/lang/Object;(LACLWindow;LACLEntry;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;toFrontjava/awt/Component requestFocus pqrs tuvwxyz{|}~}} C*,*Y*Y*Y SY SY SY SY SYSYS*+,*+*,*Y*W*N-2Y* -2!W*"Y#$Y*%&SY*'&SY*(&S:*)Y**+6-,,Y-2*-:*.*+/0*1*+2W3Y4:5Y6$*7Y*89*:&*;Z<=W*> *6*?Y@ZA=W6;YB*2 _C:*A*&DEYFG=W*7Y*H9*I&*;ZJ=W*7Y*K9*L&*;ZM=W*N2W*O*P*Q%\ OP VM][^`_ebdefjknopqro"t-u6vCwiz~{|}~|-6:>B+*JG=>666*R`*S,:T=T:U2V W>V W6VXW6# Y*Y&!WZ:6*R.Y*S,[\:*Y]*W*^*W:2"Y*_*2`!W*a+*<**Ab2McN,-d6 ,-eM, WX6*RI*S,:V,W)TY*fg&!WhY*,iW+*M*a' !/9IXhx~&ELTadkpyK+j>D*S,:*kh:*hY*lmW no&  $)@EJfile/StringSplitter.java0100644000567100000120000000402010160013045015300 0ustar jcameronwheelimport java.util.Vector; // StringSplitter // A stringsplitter object splits a string into a number of substrings, // each separated by one separator character. Separator characters can be // included in the string by escaping them with a \ public class StringSplitter { Vector parts = new Vector(); int pos = 0; StringSplitter(String str, char sep) { this(str, sep, true); } StringSplitter(String str, char sep, boolean escape) { StringBuffer current; parts.addElement(current = new StringBuffer()); for(int i=0; i".&html_escape($object).""); } elsif ($action eq 'save' || $action eq 'chmod' || $action eq 'mkdir' || $action eq 'upload' || $action eq 'delete') { return &text("log_${action}", "".&html_escape($object).""); } elsif ($action eq 'link' || $action eq 'move' || $action eq 'copy') { return &text("log_${action}", "".&html_escape($object)."", "".&html_escape($p->{'to'}).""); } elsif ($action eq 'relink') { return &text('log_relink', "".&html_escape($object)."", "".&html_escape($p->{'linkto'}).""); } elsif ($action eq 'rename') { return &text('log_move', "".&html_escape($object)."", "".&html_escape($p->{'new'}).""); } elsif ($action eq 'attr') { return &text('log_attr', "".&html_escape($object).""); } elsif ($action eq 'acl') { return &text('log_acl', "".&html_escape($object).""); } else { return undef; } } file/SearchWindow.class0100664000567100000120000002007210522475216015111 0ustar jcameronwheel-         =\)?G>       '     '     3 5 7      ! "# $% D &' G( G) G* D+,- ./ 0 12 3 4 56 78 9:; <=> 3?@ AB aC DEF GHI JK LM NO NPQ qR NST UV W X YZ[ yR\ ]^_ D`a 7bcdef ghijklmno p qrs t uv w x y z {|B@}~              tab LTabbedPanel;list LMultiColumn;search_b LCbButton;cancel_bdown_bfilemgr LFileManager;dirLjava/awt/TextField;matchusergroupuanyLjava/awt/Checkbox;uselganygseltypeLjava/awt/Choice;sanysmoreslessmorelessxonxofftypes[Ljava/lang/String;contresults [LRemoteFile;"(Ljava/lang/String;LFileManager;)VCodeLineNumberTableadd_itemI(Ljava/lang/String;Ljava/awt/Component;Ljava/awt/Panel;Ljava/awt/Panel;)Vclick (LCbButton;)V singleClick(LMultiColumn;I)V doubleClickheadingClicked SourceFileFileManager.java java/lang/Stringfdlp  search_title  java/awt/BorderLayout  TabbedPanel java/awt/Panel search_crit java/awt/GridLayout  right_name right_size MultiColumn      search_list search_dirjava/awt/TextField   search_match   search_cont java/awt/FlowLayout java/awt/CheckboxGroupjava/awt/Checkbox search_any    search_user  search_group java/awt/Choice java/lang/StringBuffer search_types_    search_type search_size  search_more  search_less yes no  search_xdevWest EastCenterCbButtondown.gif  search_down  save.gif search_ok  cancel.gifcancel South   java/awt/Label   search.cgi     ErrorWindow search_edir?dir= *&match= &type=  search_euser&user= search_egroup&group= java/lang/Exception search_esize &size=%2Bc &size=%2D&xdev=1&cont=  [Ljava/lang/Object; RemoteFile java/lang/Object      B kB MB     search_edown  /         SearchWindow FixedFrameCbButtonCallbackMultiColumnCallback()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VaddItem)(Ljava/lang/String;Ljava/awt/Component;)V(II)V+([Ljava/lang/String;LMultiColumnCallback;)V setWidths([F)V setDrawLines(Z)VfixedLjava/awt/Font;setFont(Ljava/awt/Font;)V(Ljava/lang/String;I)Vjava/awt/Component(I)Vsearch_contentsZ can_users(III)V.(Ljava/lang/String;Ljava/awt/CheckboxGroup;Z)Vadd*(Ljava/awt/Component;)Ljava/awt/Component; follow_linksappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;got_filesystems<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component; get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowdisposejava/awt/TextComponentgetTexttrimlength()IcharAt(I)CurlizegetSelectedIndexgetState()Zjava/lang/IntegerparseInt(Ljava/lang/String;)I setCursorget_text'(Ljava/lang/String;)[Ljava/lang/String;.(LFileManager;Ljava/lang/String;LRemoteFile;)VtmapIpathLjava/lang/String;sizeJspad(JI)Ljava/lang/String;clearaddItems([[Ljava/lang/Object;)Vselectselected download_file(LRemoteFile;)V lastIndexOf(I)I substring(II)Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile; showing_listnameequals(Ljava/lang/Object;)Zfilesscrollto  \**YSYSYSYSYS*, **  * Y*YYN- Y**  -Y:Y:YYYSY*  SY*  S:YQYQYQ:*Y* * !* "* * #$** % * ** & *'Y+(Z)**)* #+** , *'Y-Z.**.* #+* /0** 0 *'Y-Z1**1* #+* 2Y:3Y45Y6: *7Y* 8  9Z:;W*7Y 9Z<;W*'Y -Z=;W*=* #+** > *Y:  3Y45Y6:  *7Y* 8  9Z?;W *7Y 9Z@;W *'Y -ZA;W*A* #+** B  ** C]*DYEF6*0*F* GYHIJ*2JK L** M *F*5Y6:** N *7Y* 8 9ZO*Y:  3Y4 *7Y* P 9ZQ;W *'Y -ZR;W*R* #+* *Y:  3Y4 *7Y* S 9ZT;W *'Y -ZU;W*U* #+* ** Vs5Y6: Y:  3Y4 *7Y* W  9ZX;W *7Y* Y  9ZZ;W** [  *-\]W-^]W*_*]WY:  3Y` *aY* bc* d *eZf;W *aY* gc* h *eZi;W *aY* jc* k *eZl;W*m ]W*n*o*pJR  % * 7 B M U ` q           7 E #d $r &| ( * . / 0 1 2 3 4 5+ 6> 8G 9V :_ ;} < = > ? C D E F E G- K6 L_ Oh Pw Q R S T U V W X Y Z' \1 ^: _C `R ap b c f g j k l o rF uO vS wW x[ y`4-qY+r;WY: Y\,]W;W } ~ " + 3 m +*l *s+*itM*)uvN-w -x/yY* z {WGYH,J|J* W-}JKM*.uv:w~:GYH,JJ* W}JKM*F0*F&GYH,JJ**F2JKM*<T*<J*=uv:wyY*  {WGYH,JJ* W}JKM*@T*@J*Auv:wyY*  {WGYH,JJ* W}JKM*QM*Ruv:W:yY*  {WGYH,JJJJKMT*TJ*Uuv:W:yY*  {WGYH,JJJJKM*Z!*ZGYH,JJKM*19*1uvw)GYH,JJ* W*1u}JKM** ,:2wyY2{Wd:*d6Y* 2:*dSd[S:  * 2cS S) GYH* JJKS`- GYH* mJJKS* GYH* mJJKS* * ** % *>+*f6* = *yY*  {W* *26M     % 6 G H h t |   - > J R c d                 * ; O f               ( N Z               *2N-/6 -:* W* :6:2-"* `* ` *s6   ( 3 < G Y g u x ~  file/search.cgi0100775000567100000120000000244010344272567013426 0ustar jcameronwheel#!/usr/local/bin/perl # search.cgi # Find files under some directory require './file-lib.pl'; $disallowed_buttons{'search'} && &error($text{'ebutton'}); &ReadParse(); &switch_acl_uid(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'dir'})) { print $text{'search_eaccess'},"\n"; } $in{'dir'} =~ s/^\/+/\//g; if ($in{'dir'} ne '/') { $in{'dir'} =~ s/\/$//; } $cmd = "find ".quotemeta(&unmake_chroot($in{'dir'}))." -name ".quotemeta($in{'match'}); if ($in{'type'}) { $cmd .= " -type $in{'type'}"; } if ($in{'user'}) { $cmd .= " -user $in{'user'}"; } if ($in{'group'}) { $cmd .= " -group $in{'group'}"; } if ($in{'size'}) { $cmd .= " -size $in{'size'}"; } if ($in{'xdev'}) { $cmd .= " -mount"; } print "\n"; open(CMD, "$cmd 2>/dev/null |"); while($f = ) { chop($f); if (defined($in{'cont'})) { # Check the file contents for the given pattern $found = 0; if ($f =~ /\.pdf$/i && &has_command("pdftotext")) { # Convert PDF to text open(FILE, "pdftotext -raw ".quotemeta($f)." - |"); } else { open(FILE, $f); } while() { if (/\Q$in{'cont'}\E/i) { $found = 1; last; } } close(FILE); next if (!$found); } local $rf = &make_chroot($f); local $fil = &file_info_line($f, $rf); print $fil,"\n" if (defined($fil)); } close(CMD); file/TabbedPanel.class0100664000567100000120000000240610522475216014656 0ustar jcameronwheel-Q -. -/ -0 1 23 2 4567 1 8 49:; < => 2 ? @ A B BCDtab LTabSelector;dispLTabbedDisplayPanel;cardLjava/awt/CardLayout;()VCodeLineNumberTable3(Ljava/awt/Color;Ljava/awt/Color;Ljava/awt/Color;)VaddItem)(Ljava/lang/String;Ljava/awt/Component;)Vselect(Ljava/lang/String;)Vchose SourceFileTabbedPanel.javaE FG HG IG !% !"java/awt/BorderLayoutJ KLNorth TabSelector  MNCenterTabbedDisplayPanel !O java/awt/CardLayout  &) &' P) TabbedPaneljava/awt/PanelUtilbody_hiLjava/awt/Color; dark_edge_hibodyjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;#(Ljava/awt/Color;Ljava/awt/Color;)Vchoose! !"#**$  !%#zN**Y* * Y+,- Z W**Y+,Z W**YZ$%:M&'#2* +*+,$ ()#1* +*+$&'(*)#% *+$ ./+,file/TabSelector.class0100664000567100000120000000530110522475216014721 0ustar jcameronwheel- (DE D 'F 'GHI J 'K L 'M 'N 'O 'P Q RS 'T U VW X YZ R[ $\ $] Y^ Y_ Y` Ya bc bd Ye Rfg "hi $j 'klmhiLjava/awt/Color;lobknameLjava/util/Vector;chosenIfontLjava/awt/Font;chfont3(Ljava/awt/Color;Ljava/awt/Color;Ljava/awt/Color;)VCodeLineNumberTableaddItem(Ljava/lang/String;)Vchoosepaint(Ljava/awt/Graphics;)V mouseDown(Ljava/awt/Event;II)Z minimumSize()Ljava/awt/Dimension; preferredSize SourceFileTabbedPanel.java 4njava/util/Vector -. /0 java/awt/Font timesRoman 4o 12 pq 32 )* +* ,* rst uv ;< wx yzjava/lang/String {|} ~ w@ 0 0  x o  TabbedPanel 9java/awt/Dimension 4 ?@ TabSelectorjava/awt/Canvas()V(Ljava/lang/String;II)VgetName()Ljava/lang/String; addElement(Ljava/lang/Object;)Vjava/awt/Component getGraphics()Ljava/awt/Graphics;size()I elementAt(I)Ljava/lang/Object;equals(Ljava/lang/Object;)Zjava/awt/GraphicssetColor(Ljava/awt/Color;)VwidthheightfillRect(IIII)VdrawLinesetFont(Ljava/awt/Font;)VgetFontMetrics()Ljava/awt/FontMetrics;java/awt/FontMetrics stringWidth(Ljava/lang/String;)I getHeight drawString getParent()Ljava/awt/Container;chose(II)V '()*+*,*-./01232456yI**Y**Y  *Y*   *+ *, *-7;567$89<H=8961*+**7ABC:96_3=*(*+***ӱ7G HI$J,G2L;<6 + *+*+****l=*>6*h6*+* +`d`dd+`d`dd+* +d+``d+`d+`d+`dd`dd+`dd`dd+* +`d`dd+`d`dd+* +d+``d+`d+`d+d`dd+d`dd+* *+*  +* *:+6+6d+dl`dl` E7'PQRS+T;UCVRWXXaYiZ}[\]^_`abefg2h:iFjVkdltmnpqrstuvwVy=>6kC****ll***!"**#7} ~!)A?@6$ $Y2%7A@6*&7BCfile/ResizePanel.java0100644000567100000120000000730110122720133014532 0ustar jcameronwheel// ResizePanel // A panel with two parts, arranged either vertically or horizontally, // whose midpoint is adjustable import java.awt.*; import java.util.Vector; public class ResizePanel extends Panel implements LayoutManager { Component one, two; int pos = -1; double ratio; boolean vertical; boolean dragging; int border = 100; // Provide two components where component one initially occupies rt fraction of // parent area. When vertical=true components are layed out one above the other public ResizePanel(Component one, Component two, double rt, boolean vertical) { this.one = one; this.two = two; this.vertical = vertical; ratio = rt; setLayout(this); add(one); add(two); } public void paint(Graphics g) { Dimension s = size(); if (vertical) { // Draw horizontal bar between vertically aligned components pos = (int)(s.height * ratio); g.setColor(Color.white); g.drawLine(0, pos-2, 0, pos+1); g.drawLine(0, pos-2, s.width-2, pos-2); g.setColor(Color.black); g.drawLine(s.width-1, pos+2, s.width-1, pos-1); g.drawLine(s.width-1, pos+2, 1, pos+2); } else { // Draw vertical divider bar pos = (int)(s.width * ratio); g.setColor(Color.white); g.drawLine(pos-2, 0, pos+1, 0); g.drawLine(pos-2, 0, pos-2, s.height-2); g.setColor(Color.black); g.drawLine(pos+2, s.height-1, pos-1, s.height-1); g.drawLine(pos+2, s.height-1, pos+2, 1); } } // Detect mouse click on divider bar public boolean mouseDown(Event evt, int x, int y) { int sh; Dimension s = size(); if (vertical && y >= pos-2 && y <= pos+2) { // Started dragging dragging = true; } if (!vertical && x >= pos-2 && x <= pos+2) { // Started dragging dragging = true; } return dragging; } // Move division point on mouse drag public boolean mouseDrag(Event evt, int x, int y) { if (dragging) { Dimension s = size(); if (vertical) { if (y < border) pos = border; else if (y > s.height - border) pos = s.height - border; else pos = y; ratio = (double)pos / (double)s.height; } else { if (x < border) pos = border; else if (x > s.width - border) pos = s.width - border; else pos = x; ratio = (double)pos / (double)s.width; } layoutContainer(this); repaint(); } return dragging; } // No longer dragging on mouse button release public boolean mouseUp(Event evt, int x, int y) { boolean o = dragging; dragging = false; return o; } public void addLayoutComponent(String name, Component comp) { } // Arrange components within container public void layoutContainer(Container parent) { Dimension s = parent.size(); if (vertical) { pos = (int)(s.height * ratio); one.reshape(0, 0, s.width, pos-3); one.layout(); two.reshape(0, pos+3, s.width, s.height - pos - 5); two.layout(); } else { pos = (int)(s.width * ratio); one.reshape(0, 0, pos-3, s.height); one.layout(); two.reshape(pos+3, 0, s.width - pos - 5, s.height); two.layout(); } } // Determine minimum size for ResizePanel public Dimension minimumLayoutSize(Container parent) { Dimension d1 = one.minimumSize(), d2 = two.minimumSize(); if (vertical) { // Largest of the widths, sum of the heights return new Dimension(d1.width > d2.width ? d1.width : d2.width, d1.height + d2.height); } else { // Largest of the heights, sum of the widths return new Dimension(d1.width + d2.width, d1.height > d2.height ? d1.height : d2.height); } } public Dimension preferredLayoutSize(Container parent) { return minimumLayoutSize(parent); } public void removeLayoutComponent(Component comp) { } } file/getext.cgi.bak0100775000567100000120000000071007465671775014231 0ustar jcameronwheel#!/usr/local/bin/perl # getext.cgi # Returns a string of EXT attributes for some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $out = `lsattr -d '$in{'file'}' 2>&1`; if ($? || $out !~ /^(\S+)\s/) { print $out,"\n"; } else { print "\n"; @a = split(//, $1); print join("", grep { $_ ne '-' } @a),"\n"; } } file/FileManager.java.bak0100644000567100000120000026024307644675072015257 0ustar jcameronwheelimport java.awt.*; import java.io.*; import java.applet.*; import java.net.*; import java.util.*; import netscape.javascript.JSObject; // A java filemanager that allows the user to manipulate files on the // Webmin server. Layout is similar to the windows explorer - directory // tree on the left, files on the right, action buttons on the top. public class FileManager extends Applet implements CbButtonCallback, HierarchyCallback, MultiColumnCallback { // top buttons CbButton ret_b, down_b, edit_b, refresh_b, props_b, copy_b, cut_b, paste_b, delete_b, new_b, upload_b, mkdir_b, makelink_b, rename_b, share_b, search_b, acl_b, attr_b, ext_b; // Directory tree Hierarchy dirs; FileNode root; Hashtable nodemap = new Hashtable(); // File list MultiColumn files; TextField pathname; RemoteFile showing_files; RemoteFile showing_list[]; // Copying and pasting RemoteFile cut_buffer[]; boolean cut_mode; static final String monmap[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; String accroot[]; Hashtable lang = new Hashtable(); Hashtable stab = new Hashtable(), ntab = new Hashtable(); boolean sambamode; int nfsmode; String trust; boolean got_filesystems; Vector fslist = new Vector(); boolean read_only = false; public void init() { setLayout(new BorderLayout()); StringTokenizer tok = new StringTokenizer(getParameter("root"), " "); accroot = new String[tok.countTokens()]; for(int i=0; tok.hasMoreTokens(); i++) accroot[i] = tok.nextToken(); trust = getParameter("trust"); // download language strings String l[] = get_text("lang.cgi"); for(int i=0; i= 0) lang.put(l[i].substring(0, eq), l[i].substring(eq+1)); } // list samba file shares String s[] = get_text("list_shares.cgi"); if (s[0].equals("1")) { for(int i=1; i 1) return new CbButton(get_image(f), this); else return new CbButton(get_image(f), t, CbButton.ABOVE, this); } // Gets an image from the images directory Image get_image(String img) { return getImage(getDocumentBase(), "images/"+img); } String[] get_text(String url) { try { long now = System.currentTimeMillis(); if (url.indexOf('?') > 0) url += "&rand="+now; else url += "?rand="+now; url += "&trust="+trust; URL u = new URL(getDocumentBase(), url); Vector lv = new Vector(); LineInputStream is = new LineInputStream(u.openStream()); while(true) try { lv.addElement(is.gets()); } catch(EOFException eof) { break; } is.close(); String rv[] = new String[lv.size()]; lv.copyInto(rv); return rv; } catch(Exception e) { e.printStackTrace(); //return null; String err[] = { e.getMessage() }; return err; } } // Fill the multicolumn list with files from some directory boolean show_files(RemoteFile f) { RemoteFile fl[] = f.list(); if (fl == null) return false; files.clear(); Object rows[][] = new Object[fl.length+1][]; long now = System.currentTimeMillis(); // Sort listing by chosen column if (f != showing_files) { // Directory has changed .. assume sort by name files.sortingArrow(1, 1); } else if (files.sortdir != 0) { // Sort by chosen order RemoteFile fls[] = new RemoteFile[fl.length]; System.arraycopy(fl, 0, fls, 0, fl.length); QuickSort.sort(fls, files.sortcol, files.sortdir); fl = fls; } // Create parent directory row rows[0] = new Object[6]; rows[0][0] = get_image("dir.gif"); rows[0][1] = ".."; rows[0][2] = rows[0][3] = rows[0][4] = rows[0][5] = ""; // Create file rows Date n = new Date(now); for(int i=0; i 0 || s == 0 && ss.length > 1) { // At least one non-.. file was selected boolean parentsel = false; for(int i=0; i 4) new ErrorWindow(text("edit_enormal")); else new EditorWindow(f, this); } else if (b == down_b) { // Force download of the selected file if (f == null) return; if (f.type == 0 || f.type > 4) new ErrorWindow(text("view_enormal2")); else show_file(f, true); } else if (b == refresh_b) { // Refesh the selected directory (and thus any subdirs) d.known = false; d.file.list = null; d.fill(); show_files(d.file); } else if (b == props_b) { // Display the properties window if (f == null) return; new PropertiesWindow(f, this); } else if (b == acl_b) { // Display the ACL window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.acls) new ACLWindow(this, f); else new ErrorWindow(text("eacl_efs", filefs.mount)); } else if (b == attr_b) { // Display the attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.attrs) new AttributesWindow(this, f); else new ErrorWindow(text("attr_efs", filefs.mount)); } else if (b == ext_b) { // Display EXT attributes window (if filesystem supports them) if (f == null) return; FileSystem filefs = find_filesys(f); if (filefs == null) return; if (filefs.ext) new EXTWindow(this, f); else new ErrorWindow(text("ext_efs", filefs.mount)); } else if (b == copy_b) { // Copy the selected files if (f == null) return; cut_buffer = ff; cut_mode = false; } else if (b == cut_b) { // Cut the selected file if (f == null) return; cut_buffer = ff; cut_mode = true; } else if (b == paste_b) { // Paste the copied file if (cut_buffer == null) { new ErrorWindow(text("paste_ecopy")); return; } // Check for existing file clashes // XXX // Go through all the files to paste for(int i=0; i= rl && p.substring(0, rl).equals(accroot[r])) can = true; else if (l < rl && accroot[r].substring(0, l).equals(p)) can = true; } if (!can) { new ErrorWindow(text("find_eaccess", p)); return null; } FileNode posnode = root; RemoteFile pos = posnode.file; StringTokenizer tok = new StringTokenizer(p, "/"); while(tok.hasMoreTokens()) { String fn = tok.nextToken(); if (fn.equals("")) continue; RemoteFile fl[] = pos.list(); if (fl == null) return null; if (fill) { posnode.open = true; posnode.fill(); } boolean found = false; for(int i=0; i= l+1 && f.path.substring(0, l+1).equals(fs.mount+"/")) || fs.mount.equals("/")) { filefs = fs; } } return filefs; } public boolean action(Event e, Object o) { if (e.target == pathname) { // A new path was entered.. cd to it String p = pathname.getText().trim(); if (p.equals("")) return true; find_directory(p, true); return true; } return false; } // singleClick // Called on a single click on a list item public void singleClick(MultiColumn list, int num) { } // doubleClick // Called upon double-clicking on a list item public void doubleClick(MultiColumn list, int num) { if (num == 0) { // Go to parent directory if (showing_files.directory != null) { ((FileNode)nodemap.get(showing_files)).open = false; show_files(showing_files.directory); dirs.select((FileNode)nodemap.get(showing_files)); dirs.redraw(); } return; } RemoteFile d = showing_list[num-1]; if (d.type == 0) { // Open this directory FileNode pn = (FileNode)nodemap.get(showing_files); pn.fill(); pn.open = true; FileNode fn = (FileNode)nodemap.get(d); if (show_files(d)) { fn.fill(); fn.open = true; dirs.select(fn); dirs.redraw(); } } else if (d.type <= 4) { // Direct the browser to this file show_file(d, list.last_event.shiftDown()); } } // Called when the user clicks on a column heading so that it can // be sorted. public void headingClicked(MultiColumn list, int col) { if (col == 0) return; // ignore click on icon column? if (col == list.sortcol) { list.sortingArrow(col, list.sortdir == 2 ? 1 : 2); } else { list.sortingArrow(col, 1); } // Re-show the list in the new order, but with the same files selected int ss[] = files.allSelected(); RemoteFile ssf[] = new RemoteFile[ss.length]; for(int i=0; i 0) { ch.insertElementAt(n, i); break; } } } } class RemoteFile { static final int DIR = 0; static final int TEXT = 1; static final int IMAGE = 2; static final int BINARY = 3; static final int UNKNOWN = 4; static final int SYMLINK = 5; static final int DEVICE = 6; static final int PIPE = 7; static final String[] tmap = { "dir.gif", "text.gif", "image.gif", "binary.gif", "unknown.gif", "symlink.gif", "device.gif", "pipe.gif" }; FileManager parent; String path, name; int type; String user, group; long size; int perms; long modified; String linkto; RemoteFile list[]; RemoteFile directory; // Parse a line of text to a file object RemoteFile(FileManager parent, String line, RemoteFile d) { this.parent = parent; StringTokenizer tok = new StringTokenizer(line, "\t"); path = tok.nextToken(); type = Integer.parseInt(tok.nextToken()); user = tok.nextToken(); group = tok.nextToken(); size = Long.parseLong(tok.nextToken()); perms = Integer.parseInt(tok.nextToken()); modified = Long.parseLong(tok.nextToken())*1000; if (type == 5) linkto = tok.nextToken(); directory = d; if (path.equals("/")) name = "/"; else name = path.substring(path.lastIndexOf('/')+1); } // Create a new, empty file object RemoteFile() { } // Returns a list of files in this directory RemoteFile[] list() { if (list == null) { String l[] = parent.get_text("list.cgi?dir="+ parent.urlize(path)); if (l[0].length() > 0) { //list = new RemoteFile[0]; // Error reading the remote directory! new ErrorWindow(parent.text("list_edir", path, l[0])); list = null; } else { list = new RemoteFile[l.length-3]; for(int i=3; i 0 && offset == 0) { nlist[i] = f; offset++; } nlist[i+offset] = list[i]; } if (offset == 0) nlist[list.length] = f; list = nlist; } void delete(RemoteFile f) { RemoteFile nlist[] = new RemoteFile[list.length-1]; for(int i=0,j=0; i= 0) { // Length is known buf = new byte[uc.getContentLength()]; int got = 0; while(got < buf.length) got += is.read(buf, got, buf.length-got); } else { // Length is unknown .. read till the end buf = new byte[0]; while(true) { byte data[] = new byte[16384]; int got; try { got = is.read(data); } catch(EOFException ex) { break; } if (got <= 0) break; byte nbuf[] = new byte[buf.length + got]; System.arraycopy(buf, 0, nbuf, 0, buf.length); System.arraycopy(data, 0, nbuf, buf.length, got); buf = nbuf; } } edit.setText(new String(buf, 0)); is.close(); file.size = buf.length; } catch(Exception e) { e.printStackTrace(); } } // Creating a new file EditorWindow(String f, FileManager p) { super(500, 300); filemgr = p; makeUI(true); setTitle(filemgr.text("edit_title2")); name.setText(f.equals("/") ? f : f+"/"); name.select(name.getText().length(), name.getText().length()); } void makeUI(boolean add_name) { setLayout(new BorderLayout()); if (add_name) { Panel np = new Panel(); np.setLayout(new BorderLayout()); np.add("West", new Label(filemgr.text("edit_filename"))); np.add("Center", name = new TextField()); add("North", np); } add("Center", edit = new TextArea(20, 80)); edit.setFont(new Font("courier", Font.PLAIN, 14)); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(find_b = new CbButton(filemgr.get_image("find.gif"), filemgr.text("edit_find"), CbButton.LEFT, this)); bot.add(new Label(" ")); bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == save_b) { RemoteFile par = null, already = null; String save_path; if (file == null) { // Locate the filemgr directory save_path = filemgr.trim_path(name.getText()); int sl = save_path.lastIndexOf('/'); par = filemgr.find_directory( save_path.substring(0, sl), false); if (par == null) return; already = par.find(save_path.substring(sl+1)); if (already != null && (already.type == 0 || already.type == 5)) { new ErrorWindow( filemgr.text("edit_eover", save_path)); return; } } else save_path = file.path; // Save the file back again String s = edit.getText(), line; try { URL u = new URL(filemgr.getDocumentBase(), "save.cgi"+filemgr.urlize(save_path)+ "?rand="+System.currentTimeMillis()+ "&trust="+filemgr.trust); URLConnection uc = u.openConnection(); uc.setDoOutput(true); OutputStream os = uc.getOutputStream(); byte buf[] = new byte[s.length()]; s.getBytes(0, buf.length, buf, 0); os.write(buf); os.close(); LineInputStream is = new LineInputStream( uc.getInputStream()); String err = is.gets(); if (err.length() > 0) { new ErrorWindow( filemgr.text("edit_esave", err)); is.close(); return; } line = is.gets(); is.close(); } catch(Exception e) { e.printStackTrace(); return; } if (file == null) { // Create and insert or replace the file object file = new RemoteFile(filemgr, line, par); if (already != null) { // A file with this name exists already.type = file.type; already.user = file.user; already.group = file.group; already.size = file.size; already.perms = file.perms; already.modified = file.modified; } else { // Add to the list par.add(file); } } else { file.size = s.length(); file.modified = System.currentTimeMillis(); } filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) { // Just close dispose(); } else if (b == goto_b) { // Open a dialog asking which line to go to if (goto_window != null) goto_window.toFront(); else goto_window = new GotoWindow(this); } else if (b == find_b) { // Open the search (and replace) dialog if (find_window != null) find_window.toFront(); else find_window = new FindReplaceWindow(this); } } public void dispose() { super.dispose(); if (goto_window != null) goto_window.dispose(); if (find_window != null) find_window.dispose(); } } class GotoWindow extends FixedFrame implements CbButtonCallback { EditorWindow editor; FileManager filemgr; TextField line; CbButton goto_b, cancel_b; GotoWindow(EditorWindow e) { editor = e; filemgr = e.filemgr; setLayout(new BorderLayout()); add("West", new Label(filemgr.text("edit_gotoline"))); add("Center", line = new TextField(10)); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(goto_b = new CbButton(filemgr.get_image("goto.gif"), filemgr.text("edit_goto"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("close"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == goto_b) { // Go to the chose line, if it exists int lnum; try { lnum = Integer.parseInt(line.getText()); } catch(Exception e) { return; } String txt = editor.edit.getText(); int c, l = 0; for(c=0; c= 0) { String sel = edittxt.substring(st, en); if (sel.equals(findtxt)) { // Replace the selected editor.edit.setText(edittxt.substring(0, st)+ replace.getText()+ edittxt.substring(en)); editor.edit.select(st, st); return; } } click(find_b); } else if (b == all_b) { // Replace all occurrances of the text in the editor int pos = 0; int len = findtxt.length(); int st = editor.edit.getSelectionStart(), en = editor.edit.getSelectionEnd(); while((pos = edittxt.indexOf(findtxt, pos)) != -1) { edittxt = edittxt.substring(0, pos)+ replace.getText()+ edittxt.substring(pos+len); pos += len; } editor.edit.setText(edittxt); editor.edit.select(st, en); // put back old selection } else if (b == cancel_b) { // Just close the window dispose(); } } public void dispose() { super.dispose(); editor.find_window = null; } } class PropertiesWindow extends FixedFrame implements CbButtonCallback { RemoteFile file; FileManager filemgr; CbButton save_b, cancel_b; TextField linkto; TextField user, group; Checkbox setuid, setgid; PermissionsPanel user_p, group_p, other_p; Checkbox sticky; Choice rec_mode; TextField octal; PropertiesWindow(RemoteFile f, FileManager p) { file = f; filemgr = p; // Create UI setTitle(f.path); setLayout(new BorderLayout()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(save_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); Panel mid = new Panel(); mid.setLayout(new BorderLayout()); TabbedPanel tab = null; add("Center", mid); // Create file details section Panel det = new LinedPanel(filemgr.text("info_file")), dl = new Panel(), dr = new Panel(); setup_leftright(det, dl, dr); add_item(filemgr.text("info_path"), new Label(file.path), dl, dr); add_item(filemgr.text("info_type"), new Label(filemgr.text("file_type"+file.type)), dl, dr); add_item(filemgr.text("info_size"), new Label(String.valueOf(file.size)),dl,dr); add_item(filemgr.text("info_mod"), new Label(String.valueOf(new Date(file.modified))), dl, dr); if (file.type == 5) add_item(filemgr.text("info_link"), linkto = new TextField(file.linkto, 30), dl, dr); mid = add_panel(mid, det); // Create permissions section Panel per = new LinedPanel(filemgr.text("info_perms")), pl = new Panel(), pr = new Panel(); setup_leftright(per, pl, pr); add_item(filemgr.text("info_user"), user_p = new PermissionsPanel(file, 64, filemgr), pl, pr); add_item(filemgr.text("info_group"), group_p = new PermissionsPanel(file, 8, filemgr), pl, pr); add_item(filemgr.text("info_other"), other_p = new PermissionsPanel(file, 1, filemgr), pl,pr); if (file.type == 0) { add_item(filemgr.text("info_sticky"), sticky = new Checkbox( filemgr.text("info_sticky2")), pl,pr); sticky.setState((file.perms&01000) != 0); } add_item(filemgr.text("info_octal"), octal = new TextField(4), pl, pr); octal.setEditable(false); mid = add_panel(mid, per); // Create ownership section Panel own = new LinedPanel(filemgr.text("info_own")), ol = new Panel(), or = new Panel(); setup_leftright(own, ol, or); add_item(filemgr.text("info_user"), user = new TextField(file.user, 10), ol, or); if (file.type != 0) { add_item(filemgr.text("info_setuid"), setuid = new Checkbox(filemgr.text("info_setuid2")), ol, or); setuid.setState((file.perms & 0x800) != 0); } add_item(filemgr.text("info_group"), group = new TextField(file.group, 10), ol, or); if (file.type == 0) add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid2")), ol, or); else add_item(filemgr.text("info_setgid"), setgid = new Checkbox(filemgr.text("info_setgid3")), ol, or); setgid.setState((file.perms & 0x400) != 0); mid = add_panel(mid, own); if (file.type == 0) { // Create recursion section Panel rec = new LinedPanel(filemgr.text("info_apply")); rec.setLayout(new BorderLayout()); rec_mode = new Choice(); for(int i=1; i<=3; i++) rec_mode.addItem(filemgr.text("info_apply"+i)); rec.add("Center", rec_mode); mid = add_panel(mid, rec); } set_octal(); pack(); show(); } Panel add_panel(Panel p, Component c) { p.add("North", c); Panel np = new Panel(); np.setLayout(new BorderLayout()); p.add("Center", np); return np; } public void click(CbButton b) { if (b == save_b) { // Update the file int perms = get_perms(); int rec = 0; if (file.type == 0) rec = rec_mode.getSelectedIndex(); String rv[] = filemgr.get_text( "chmod.cgi?path="+filemgr.urlize(file.path)+ "&perms="+perms+"&user="+user.getText()+ "&group="+group.getText()+"&rec="+rec+ (linkto==null ? "" : "&linkto="+linkto.getText())); if (rv[0].length() > 0) { // Something went wrong new ErrorWindow(filemgr.text("info_efailed", file.path, rv[0])); } else { // Update all changed file objects if (linkto != null) file.linkto = linkto.getText(); else if (rec == 0) update_file(file, perms, false); else if (rec == 1) { // Update files in this directory update_file(file, perms, false); recurse_files(file, perms, false); } else if (rec == 2) { // Update files and subdirs update_file(file, perms, false); recurse_files(file, perms, true); } // Update directory list int os = filemgr.files.selected(); filemgr.show_files(filemgr.showing_files); filemgr.files.select(os); dispose(); } } else { // Just close dispose(); } } void update_file(RemoteFile f, int perms, boolean perms_only) { f.user = user.getText(); f.group = group.getText(); if (perms_only) f.perms = (perms & 0777) | (f.perms & 037777777000); else f.perms = perms; } void recurse_files(RemoteFile f, int perms, boolean do_subs) { if (f.list == null) return; for(int i=0; i 1 ? "delete_mtitle" : ff[0].type == 0 ? "delete_dtitle" : "delete_ftitle")); setLayout(new BorderLayout()); if (ff.length > 1) { add("North", new Label(filemgr.text("delete_mdesc"))); Panel mp = new Panel(); mp.setLayout(new GridLayout(ff.length, 1)); for(int i=0; i 0) { new ErrorWindow(filemgr.text("delete_efailed", file.path, rv[0])); break; } else { // done the deed.. update data structures RemoteFile pf = file.directory; pf.delete(file); if (filemgr.showing_files == pf) { // Need to refresh the list as well.. need_reshow = true; } FileNode node = (FileNode)filemgr.nodemap.get( file); FileNode pnode = (FileNode)filemgr.nodemap.get( pf); if (node != null) { // Take the directory out of the tree.. pnode.ch.removeElement(node); need_redraw = true; } } } if (need_reshow) filemgr.show_files(filemgr.showing_files); if (need_redraw) filemgr.dirs.redraw(); dispose(); } else if (b == cancel_b) dispose(); } } class MkdirWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField dir; CbButton create_b, cancel_b; MkdirWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("mkdir_title")); setLayout(new BorderLayout()); add("West", new Label(filemgr.text("mkdir_dir"))); add("Center", dir = new TextField(d.equals("/") ? "/" : d+"/", 40)); dir.select(dir.getText().length(), dir.getText().length()); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Find the filemgr directory String path = dir.getText(); path = filemgr.trim_path(path); int sl = path.lastIndexOf('/'); RemoteFile par = filemgr.find_directory( path.substring(0, sl), false); if (par.find(path.substring(sl+1)) != null) { new ErrorWindow(filemgr.text("mkdir_eexists", path)); return; } String rv[] = filemgr.get_text("mkdir.cgi?dir="+ filemgr.urlize(path)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("mkdir_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); FileNode parnode = (FileNode)filemgr.nodemap.get(par); if (parnode != null) { // Update the tree parnode.add(new FileNode(file)); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else dispose(); } } class LinkWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; TextField from, to; CbButton create_b, cancel_b; LinkWindow(String d, FileManager p) { filemgr = p; setLayout(new BorderLayout()); setTitle(filemgr.text("link_title")); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("link_from"))); l.add(new Label(filemgr.text("link_to"))); r.setLayout(new GridLayout(0, 1)); r.add(from = new TextField(d.equals("/") ? "/" : d+"/", 40)); from.select(from.getText().length(), from.getText().length()); r.add(to = new TextField()); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(create_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("create"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == create_b) { // Check inputs String from_str = from.getText().trim(); int sl = from_str.lastIndexOf('/'); String par_str = from_str.substring(0, sl), file_str = from_str.substring(sl+1); RemoteFile par = filemgr.find_directory(par_str, false); if (par == null) return; if (par.find(file_str) != null) { new ErrorWindow(filemgr.text("link_eexists", from_str)); return; } // Create the actual link String rv[] = filemgr.get_text("makelink.cgi?from="+ filemgr.urlize(from_str)+"&to="+ filemgr.urlize(to.getText())); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("link_efailed", rv[0])); return; } RemoteFile file = new RemoteFile(filemgr, rv[1], par); par.add(file); filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class RenameWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; TextField oldname, newname; CbButton rename_b, cancel_b; RenameWindow(FileManager p, RemoteFile f) { filemgr = p; file = f; setLayout(new BorderLayout()); setTitle(filemgr.text("rename_title", file.path)); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); l.add(new Label(filemgr.text("rename_old"))); l.add(new Label(filemgr.text("rename_new"))); r.setLayout(new GridLayout(0, 1)); r.add(oldname = new TextField(file.name, 20)); oldname.setEditable(false); r.add(newname = new TextField(file.name, 20)); newname.select(file.name.length(), file.name.length()); add("West", l); add("Center", r); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.CENTER)); bot.add(rename_b = new CbButton(filemgr.get_image("save.gif"), filemgr.text("rename_ok"), CbButton.LEFT, this)); bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("cancel"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == rename_b) { // Check for an existing file String newstr = newname.getText().trim(); if (newstr.length() == 0) return; RemoteFile already = file.directory.find(newstr); if (already != null) { new ErrorWindow(filemgr.text("rename_eexists", newstr)); return; } // Rename the real file int sl = file.path.lastIndexOf('/'); String newpath = file.path.substring(0, sl)+"/"+newstr; String rv[] = filemgr.get_text( "rename.cgi?old="+filemgr.urlize(file.path)+ "&new="+filemgr.urlize(newpath)); if (rv[0].length() > 0) { new ErrorWindow(filemgr.text("rename_efailed", rv[0])); return; } // Update data structure file.name = newstr; file.path = newpath; file.directory.delete(file); file.directory.add(file); file.list = null; FileNode parnode = (FileNode)filemgr.nodemap.get(file.directory); FileNode filenode = (FileNode)filemgr.nodemap.get(file); if (parnode != null && filenode != null) { filenode.text = file.name; parnode.ch.removeElement(filenode); parnode.add(filenode); dispose(); filemgr.dirs.redraw(); } filemgr.show_files(filemgr.showing_files); dispose(); } else if (b == cancel_b) dispose(); } } class MultiLabel extends BorderPanel { public MultiLabel(String s, int max) { this(s, max, 1); } public MultiLabel(String s, int max, int b) { super(b); Vector v = new Vector(); StringTokenizer tok = new StringTokenizer(s.trim(), " \t"); String line = null; while(tok.hasMoreTokens()) { String w = tok.nextToken(); line = (line == null ? w : line+" "+w); if (line.length() > max || !tok.hasMoreTokens()) { v.addElement(line); line = null; } } setLayout(new GridLayout(v.size(), 1, 0, 0)); for(int i=0; i 0) { // paste the file, but with a new name RemoteFile ap = already.directory; RemoteFile newalready = ap.find(newname.getText()); if (newalready == src) { new ErrorWindow(filemgr.text("paste_eself")); return; } if (newalready != null && (newalready.type == 0 || newalready.type == 5)) { new ErrorWindow( filemgr.text("paste_eover", newalready.path)); return; } String dpath = (ap.path.equals("/") ? "/" : ap.path+"/")+newname.getText(); RemoteFile nf = filemgr.paste_file(src, already.directory, dpath, newalready, mode); if (filemgr.cut_mode && nf != null) { // Paste from the destination path from now on filemgr.cut_buffer[idx] = nf; } dispose(); } } } class SambaShare { String path; boolean available; boolean writable; int guest; String comment; SambaShare(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); available = tok.nextToken().equals("1"); writable = tok.nextToken().equals("1"); guest = Integer.parseInt(tok.nextToken()); comment = tok.nextToken(); } SambaShare(String p, boolean a, boolean w, int g, String c) { path = p; available = a; writable = w; guest = g; comment = c; } String params() { return "path="+FileManager.urlize(path)+ "&available="+(available ? 1 : 0)+ "&writable="+(writable ? 1 : 0)+ "&guest="+guest+ "&comment="+FileManager.urlize(comment); } } class DFSAdminExport { String path; String desc; String ro, rw, root; DFSAdminExport(String l) { StringSplitter tok = new StringSplitter(l, ':'); path = tok.nextToken(); ro = tok.nextToken(); rw = tok.nextToken(); root = tok.nextToken(); desc = tok.nextToken(); } DFSAdminExport(String p, String d, String ro, String rw, String root) { path = p; desc = d; this.ro = ro; this.rw = rw; this.root = root; } String[] split(String s) { StringTokenizer stok = new StringTokenizer(s, " "); String rv[] = new String[stok.countTokens()]; for(int i=0; i 1)); add_item(name, p, l, r); TextField t = new TextField(v.equals("-") ? "" : v, 25); add_item("", t, l, r); return t; } Choice squashbox(int s) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_s0")); rv.addItem(filemgr.text("share_s1")); rv.addItem(filemgr.text("share_s2")); rv.select(s); return rv; } Choice robox(boolean r) { Choice rv = new Choice(); rv.addItem(filemgr.text("share_lrw")); rv.addItem(filemgr.text("share_lro")); rv.select(r ? 1 : 0); return rv; } Panel opts_panel(Component ro, Component squash) { Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add("West", ro); p.add("East", squash); return p; } void export_options(LinuxExport e) { int c = 0; for(int i=0; i 0) c++; e.host = new String[c]; e.ro = new boolean[c]; e.squash = new int[c]; for(int i=0,j=0; i 0) { e.host[j] = host[i].getText(); e.ro[j] = lro[i].getSelectedIndex() == 1; e.squash[j] = squash[i].getSelectedIndex(); j++; } } } } class SearchWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { TabbedPanel tab; MultiColumn list; CbButton search_b, cancel_b; FileManager filemgr; TextField dir, match, user, group; Checkbox uany, usel, gany, gsel; Choice type; Checkbox sany, smore, sless; TextField more, less; Checkbox xon, xoff; String types[] = { "", "f", "d", "l", "p" }; RemoteFile results[]; SearchWindow(String d, FileManager p) { filemgr = p; setTitle(filemgr.text("search_title")); // setup UI setLayout(new BorderLayout()); tab = new TabbedPanel(); Panel search = new Panel(); search.setLayout(new BorderLayout()); tab.addItem(filemgr.text("search_crit"), search); Panel l = new Panel(), r = new Panel(); l.setLayout(new GridLayout(0, 1)); r.setLayout(new GridLayout(0, 1)); String cols[] = { "", filemgr.text("right_name"), filemgr.text("right_size") }; float widths[] = { .07f, .78f, .15f }; list = new MultiColumn(cols, this); list.setWidths(widths); list.setDrawLines(false); tab.addItem(filemgr.text("search_list"), list); add_item(filemgr.text("search_dir"), dir = new TextField(d, 30), l, r); add_item(filemgr.text("search_match"), match = new TextField(20), l, r); Panel up = new Panel(); up.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup ug = new CheckboxGroup(); up.add(uany = new Checkbox(filemgr.text("search_any"), ug, true)); up.add(usel = new Checkbox("", ug, false)); up.add(user = new TextField(10)); add_item(filemgr.text("search_user"), up, l, r); Panel gp = new Panel(); gp.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); CheckboxGroup gg = new CheckboxGroup(); gp.add(gany = new Checkbox(filemgr.text("search_any"), gg, true)); gp.add(gsel = new Checkbox("", gg, false)); gp.add(group = new TextField(10)); add_item(filemgr.text("search_group"), gp, l, r); type = new Choice(); for(int i=0; i 0) url += "&type="+types[type.getSelectedIndex()]; if (usel.getState()) { String u = user.getText().trim(); if (u.length() == 0) { new ErrorWindow(filemgr.text("search_euser")); return; } url += "&user="+filemgr.urlize(u); } if (gsel.getState()) { String g = group.getText().trim(); if (g.length() == 0) { new ErrorWindow(filemgr.text("search_egroup")); return; } url += "&group="+filemgr.urlize(g); } if (smore.getState()) { String m = more.getText().trim(); try { Integer.parseInt(m); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2B"+m+"c"; } else if (sless.getState()) { String l = less.getText().trim(); try { Integer.parseInt(l); } catch(Exception e) { new ErrorWindow(filemgr.text("search_esize")); return; } url += "&size=%2D"+l+"c"; } if (xon.getState()) url += "&xdev=1"; // send off the search setCursor(WAIT_CURSOR); String f[] = filemgr.get_text(url); if (f[0].length() > 0) { new ErrorWindow(f[0]); return; } Object rows[][] = new Object[f.length-1][]; results = new RemoteFile[f.length-1]; for(int i=1; i= 0) { ACLEntry e = (ACLEntry)acllist.elementAt(idx); ACLEditor ed = (ACLEditor)edmap.get(e); if (ed == null) edmap.put(e, new ACLEditor(this, e)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class AttributesWindow extends FixedFrame implements CbButtonCallback,MultiColumnCallback { FileManager filemgr; RemoteFile file; Vector attrlist = new Vector(); Hashtable edmap = new Hashtable(); CbButton ok, cancel, add; MultiColumn attrtable; AttributesWindow(FileManager p, RemoteFile f) { super(400, 300); setTitle(p.text("attr_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getattrs.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("attr_eattrs", a[0])); return; } // Create the UI setLayout(new BorderLayout()); String titles[] = { filemgr.text("attr_name"), filemgr.text("attr_value") }; attrtable = new MultiColumn(titles, this); for(int i=1; i= 0) { FileAttribute at = (FileAttribute)attrlist.elementAt(idx); AttributeEditor ed = (AttributeEditor)edmap.get(at); if (ed == null) edmap.put(at, new AttributeEditor(this, at)); else { ed.toFront(); ed.requestFocus(); } } } public void singleClick(MultiColumn list, int num) { } public void headingClicked(MultiColumn list, int col) { } } class FileAttribute { String name; String value; FileAttribute(String l, FileManager f) { int eq = l.indexOf('='); name = f.un_urlize(l.substring(0, eq)); value = f.un_urlize(l.substring(eq+1)); } FileAttribute(String n, String v) { name = n; value = v; } String[] getRow() { return new String[] { name, value }; } } class AttributeEditor extends FixedFrame implements CbButtonCallback { FileManager filemgr; AttributesWindow attrwin; FileAttribute attr; boolean creating; CbButton ok, del; TextField name; TextArea value; AttributeEditor(AttributesWindow w, FileAttribute a) { attrwin = w; attr = a; filemgr = w.filemgr; creating = false; makeUI(); } AttributeEditor(AttributesWindow w) { attrwin = w; attr = new FileAttribute("", ""); filemgr = w.filemgr; creating = true; makeUI(); } void makeUI() { setTitle(filemgr.text(creating ? "attr_create" : "attr_edit")); setLayout(new BorderLayout()); Panel top = new Panel(); top.setLayout(new GridLayout(1, 2)); top.add(new Label(filemgr.text("attr_name"))); top.add(name = new TextField(attr.name, 20)); add("North", top); Panel mid = new Panel(); mid.setLayout(new GridLayout(1, 2)); mid.add(new Label(filemgr.text("attr_value"))); mid.add(value = new TextArea(attr.value, 5, 20)); add("Center", mid); Panel bot = new Panel(); bot.setLayout(new FlowLayout(FlowLayout.RIGHT)); bot.add(ok = new CbButton(filemgr.get_image("save.gif"), filemgr.text("save"), CbButton.LEFT, this)); if (!creating) bot.add(del = new CbButton(filemgr.get_image("cancel.gif"), filemgr.text("delete"), CbButton.LEFT, this)); add("South", bot); pack(); show(); } public void click(CbButton b) { if (b == ok) { // Update or add the attribute if (name.getText().length() == 0) { new ErrorWindow(filemgr.text("attr_ename")); return; } attr.name = name.getText(); attr.value = value.getText(); if (creating) { // Add to the attribs table attrwin.attrlist.addElement(attr); attrwin.attrtable.addItem(attr.getRow()); } else { // Update the table int idx = attrwin.attrlist.indexOf(attr); attrwin.attrtable.modifyItem(attr.getRow(), idx); } dispose(); } else if (b == del) { // Remove this entry int idx = attrwin.attrlist.indexOf(attr); attrwin.attrlist.removeElementAt(idx); attrwin.attrtable.deleteItem(idx); dispose(); } } public void dispose() { attrwin.edmap.remove(attr); super.dispose(); } } class EXTWindow extends FixedFrame implements CbButtonCallback { FileManager filemgr; RemoteFile file; CbButton ok, cancel; Checkbox cbs[]; String attrs[] = { "A", "a", "c", "d", "i", "s", "S", "u" }; Hashtable attrmap = new Hashtable(); EXTWindow(FileManager p, RemoteFile f) { super(); setTitle(p.text("ext_title", f.path)); filemgr = p; file = f; // Get the attributes String a[] = filemgr.get_text( "getext.cgi?file="+filemgr.urlize(file.path)); if (a[0].length() != 0) { new ErrorWindow(filemgr.text("ext_eattrs", a[0])); return; } for(int i=0; i",&text('upload_eperm', $in{'path'}),"

\n"; } elsif (!&open_tempfile(FILE, ">".&unmake_chroot($in{'path'}), 1)) { print "

",&text('upload_ewrite', $in{'path'}, $!),"

\n"; } else { open(TEMP, $in{'temp'}); ©data(TEMP, FILE) || &error(&text('upload_ewrite', $in{'path'}, $!)); close(TEMP); &close_tempfile(FILE); &post_upload($in{'path'}, $in{'dir'}, $in{'zip'}); } unlink($in{'temp'}); } else { # Just delete the temp file &switch_acl_uid(); unlink($in{'temp'}); print "\n"; } file/config-solaris0100664000567100000120000000041110167125033014314 0ustar jcameronwheelufs_acl=&has_command("getfacl") && &has_command("setfacl") nfs_acl=&has_command("getfacl") && &has_command("setfacl") lofs_acl=&has_command("getfacl") && &has_command("setfacl") getfacl=getfacl setfacl=setfacl -f - hide_dot_files=0 iconsize=0 nocharset=0 extract=1 file/filesystems.cgi0100775000567100000120000000304610505406236014522 0ustar jcameronwheel#!/usr/local/bin/perl # filesystems.cgi # List all filesystems and their types require './file-lib.pl'; print "Content-type: text/plain\n\n"; if (!&foreign_check("mount") || !$access{'filesystems'}) { print "0\n"; exit; } &foreign_require("mount", "mount-lib.pl"); @mtab = &mount::list_mounted(); %mtab = map { $_->[0], $_ } @mtab; @fstab = &mount::list_mounts(); %fstab = map { $_->[0], $_ } @fstab; @mounts = ( @fstab, grep { !$fstab{$_->[0]} } @mtab ); print "1\n"; foreach $m (sort { length($a->[0]) <=> length($b->[0]) } @mounts) { next if ($m->[0] !~ /^\//); local @supp = @{$support{$m->[2]}}; if (!@supp) { # Work out what this filesystem supports @supp = ( eval $config{$m->[2]."_acl"} ? 1 : 0, eval $config{$m->[2]."_attr"} ? 1 : 0, eval $config{$m->[2]."_ext"} ? 1 : 0 ); $support{$m->[2]} = \@supp; } # Check if the filesystem really does support attrs and ACLs local @supp2 = @supp; if ($mtab{$m->[0]}) { if ($supp2[0]) { local $out = `$config{'getfacl'} '$m->[0]' 2>/dev/null`; if ($?) { $supp2[0] = 0; } else { local $aclcount; foreach $l (split(/\n/, $out)) { $l =~ s/#.*$//; $l =~ s/\s+$//; $aclcount++ if ($l =~ /\S/); } $supp2[0] = 0 if (!$aclcount); } } if ($supp2[1]) { local $out = `attr -l '$m->[0]' 2>/dev/null`; if ($?) { $supp2[1] = 0; } } } $m->[1] =~ s/\\/\//g; $chrooted = &make_chroot($m->[0]); if ($chrooted) { print join(" ", $chrooted, @$m[1..3], @supp2, $mtab{$m->[0]} ? 1 : 0, $fstab{$m->[0]} ? 1 : 0),"\n"; } } file/index.cgi.bak0100755000567100000120000000401407644675206014027 0ustar jcameronwheel#!/usr/local/bin/perl # index.cgi # Output HTML for the file manager applet require './file-lib.pl'; &ReadParse(); $theme_no_table = 1; if ($access{'uid'} < 0 && !defined(getpwnam($remote_user))) { &error(&text('index_eremote', $remote_user)); } # Display header, depending on how many modules the user has &read_acl(undef, \%acl); $mc = @{$acl{$base_remote_user}} == 1; $nolo = $ENV{'ANONYMOUS_USER'} || $ENV{'SSL_USER'} || $ENV{'LOCAL_USER'} || $ENV{'HTTP_USER_AGENT'} =~ /webmin/i; if ($gconfig{'gotoone'} && $mc == 1 && !$nolo) { &header($text{'index_title'}, "", undef, 0, 1); $w = 100; $h = 80; } else { &header($text{'index_title'}); $w = 100; $h = 100; } if ($gconfig{'referers_none'}) { # Because java applet HTTP requests don't always include a referer: # header, we need to use a DBM of trust keys to identify trusted applets if (defined(&seed_random)) { &seed_random(); } else { srand(time() ^ $$); } $trust = int(rand(1000000000)); local $now = time(); &open_trust_db(); foreach $k (keys %trustdb) { if ($now - $trustdb{$k} > 30*24*60*60) { delete($trustdb{$k}); } } $trustdb{$trust} = $now; dbmclose(%trustdb); } $sharing = $access{'uid'} ? 0 : 1; &read_acl(undef, \%acl); $mc = @{$acl{$base_remote_user}}; if (!$gconfig{'gotoone'} || $mc > 1) { %minfo = &get_module_info(); $return = ""; } if ($in{'open'}) { $open = "\n"; } print < function upload(dir) { open("upform.cgi?dir="+dir+"&trust=$trust", "upload", "toolbar=no,menubar=no,scrollbar=no,width=450,height=200"); } $open $return $text{'index_nojava'}

EOF &footer(); file/config.info0100664000567100000120000000061210444370776013615 0ustar jcameronwheelhide_dot_files=Show files starting with a dot?,1,0-Yes,1-No iconsize=Size of buttons in toolbar,1,1-Small,0-Large with labels nocharset=Attempt to use proper character set?,1,0-Yes,1-No extract=Extract .class files from JAR?,1,1-Yes,0-No width=Width for scaled images,3,Default (300 pixels) fixed=Font size for text,3,Default (12 points) small_fixed=Font size for buttons,3,Default (10 points) file/Hierarchy.java.bak0100644000567100000120000001710207647733563015020 0ustar jcameronwheel// Hierarchy // An AWT component for displaying a tree-like heirachy, with each node // having an icon and a name. This heirachy can be expanded or contracted // by the user. import java.awt.*; import java.util.Vector; public class Hierarchy extends BorderPanel implements CbScrollbarCallback { HierarchyNode root; // the root of the tree CbScrollbar sb; // scrollbar at right int width, height; // usable drawing area int sbwidth; // size of scrollbar HierarchyCallback callback; // who to call on open / close Image bim; // double-buffer image Font font = new Font("courier", Font.PLAIN, 12); FontMetrics fnm; // size of font used Graphics bg; // back-images graphics int top = 0; // top-most row displayed int count = 0; // total rows in the tree Insets in; // insets from border HierarchyNode sel; // selected node long last; // time of last mouse click static boolean broken_awt = System.getProperty("os.name"). startsWith("Windows"); // Create a new Hierarchy object with the given root Hierarchy(HierarchyNode r) { this(); root = r; } // Create a new Hierarchy object that calls back to the given object // when nodes are clicked on. Hierarchy(HierarchyNode r, HierarchyCallback c) { this(r); callback = c; } // Create an empty hierarchy object, with no callback Hierarchy() { super(3, new Color(50,50,50), new Color(220,220,220)); // Create UI setLayout(null); sb = new CbScrollbar(CbScrollbar.VERTICAL, this); add(sb); } // Create an empty hierarchy object, set to report user actions to // the given object. Hierarchy(HierarchyCallback c) { this(); callback = c; } // redraw // Called by the using class when the tree passed to this object // changes, to force a redraw and resizing of the scrollbar void redraw() { if (fnm != null) { render(); paint(getGraphics()); compscroll(); } } // setRoot // Set the root node for this hierarchy void setRoot(HierarchyNode r) { root = r; redraw(); } // selected // Return the currently selected node, or null HierarchyNode selected() { return sel; } // select // Selected the given node void select(HierarchyNode s) { sel = s; } // force the use of some font void setFont(Font f) { font = f; bim = null; repaint(); } // reshape // Called when this component gets resized public void reshape(int nx, int ny, int nw, int nh) { in = insets(); sbwidth = sb.minimumSize().width; width = nw-sbwidth - (in.left + in.right); height = nh - (in.top + in.bottom); sb.reshape(width+in.left, in.top, sbwidth, height); // force creation of a new backing images bim = null; repaint(); compscroll(); super.reshape(nx, ny, nw, nh); } // update // Called sometime after repaint() public void update(Graphics g) { render(); paint(g); } // paint // Blit the backing image to the front public void paint(Graphics g) { super.paint(g); if (bim == null) { // This is the first rendering bim = createImage(width, height); bg = bim.getGraphics(); bg.setFont(font); fnm = bg.getFontMetrics(); render(); compscroll(); } g.drawImage(bim, in.left, in.top, this); } // mouseDown // Called upon a mouseclick public boolean mouseDown(Event evt, int x, int y) { if (root == null) return false; // nothing to do HierarchyNode s = nodeat(root, x/16, (y/16)+top); if (s == null) { // Just deselect sel = null; repaint(); return true; } // Check for double-click boolean dc = false; if (evt.when-last < 500 && sel == s) dc = true; else last = evt.when; sel = s; if (dc && sel.ch != null) { // Open or close this node sel.open = !sel.open; if (callback != null) { // Notify callback, which MAY do something to change // the structure of the tree if (sel.open) callback.openNode(this, sel); else callback.closeNode(this, sel); } } else if (callback != null) { // Single click on a node or double-click on leaf node if (dc) callback.doubleNode(this, sel); else callback.clickNode(this, sel); } compscroll(); repaint(); return true; } public void moved(CbScrollbar s, int v) { moving(s, v); } public void moving(CbScrollbar s, int v) { top = sb.getValue(); compscroll(); repaint(); } // render // Draw the current tree view into the backing image private void render() { if (fnm != null) { int fh = fnm.getHeight(), // useful font metrics fa = fnm.getAscent(); bg.setColor(Color.white); bg.fillRect(0, 0, width, height); if (root == null) return; // nothing to do bg.setColor(Color.black); recurse(root, 0, 0, fh, fa); } } // recurse // Render a node in the tree at the given location, maybe followed // by all it's children. Return the number of rows this node took // to display. private int recurse(HierarchyNode n, int x, int y, int fh, int fa) { int xx = x*16, yy = (y-top)*16; int len = 1; n.x = x; n.y = y; int tw = fnm.stringWidth(n.text); if (yy >= 0 && yy <= height) { // Draw this node if (n.im != null) bg.drawImage(n.im, xx, yy, this); if (sel == n) { // Select this node bg.setColor(Color.lightGray); bg.fillRect(xx+17, yy+2, tw+2, 13); bg.setColor(Color.black); } bg.drawString(n.text, xx+18, yy+12); } if (n.ch != null && n.open && yy <= height) { // Mark this node bg.drawLine(xx+18, yy+14, xx+17+tw, yy+14); // Draw subnodes yy += 16; for(int i=0; i= n.x) return n; if (n.ch == null || !n.open) return null; for(int i=0; i= top+r) { top = s-1; if (top > list[0].size() - r) top = list[0].size() - r; sb.setValue(top); repaint(); } } // deleteItem // Remove one row from the list void deleteItem(int n) { for(int i=0; i 0) { System.arraycopy(sels, 0, nsels, 0, i); System.arraycopy(sels, i+1, nsels, i, nsels.length-i); sel = nsels[0]; } break; } } repaint(); compscroll(); } // clear // Remove everything from the list void clear() { for(int i=0; i= top && sels[i] <= bot) { bg.setColor(sels[i] == sel ? Color.lightGray : lighterGray); bg.fillRect(0, th+(sels[i]-top)*rowh, width, rowh); } } } // Draw each column for(int i=0; i w-3) s = s.substring(0, s.length()-1); if (!enabled) bg.setColor(Color.lightGray); else if (colors != null) bg.setColor(colors[j][i]); bg.drawString(s, x+1, th+(j+1-top)*rowh-fd); } else if (o instanceof Image) { // Render image in column Image im = (Image)o; bg.drawImage(im, x+1, th+(j-top)*rowh, this); } } } } // mouseDown // Select a list item or a column to drag public boolean mouseDown(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; coldrag = -1; if (y < th) { // Click in title bar for(int i=0; i 0 && Math.abs(cpos[i] - x) < 3) { // clicked on a column separator coldrag = i; } else if (x >= cpos[i] && x < cpos[i+1]) { // clicked in a title callback.headingClicked(this, i); } } } else { // Item chosen from list int row = (y-th)/rowh + top; if (row < list[0].size()) { // Double-click? boolean dclick = false; if (e.when-last < 1000 && sel == row) dclick = true; else last = e.when; if (e.shiftDown() && multiselect && sel != -1) { // Select all from last selection to this one int zero = sels[0]; if (zero < row) { sels = new int[row-zero+1]; for(int i=zero; i<=row; i++) sels[i-zero] = i; } else { sels = new int[zero-row+1]; for(int i=zero; i>=row; i--) sels[zero-i] = i; } } else if (e.controlDown() && multiselect) { // Add this one to selection int nsels[] = new int[sels.length + 1]; System.arraycopy(sels, 0, nsels, 0,sels.length); nsels[sels.length] = row; sels = nsels; } else { // Select one row only, and de-select others sels = new int[1]; sels[0] = row; } sel = row; repaint(); last_event = e; if (callback != null) { // Callback the right function if (dclick) callback.doubleClick(this, row); else callback.singleClick(this, row); } else { // Send an event getParent().postEvent( new Event(this, Event.ACTION_EVENT, dclick?"Double":"Single")); } } } return true; } // mouseDrag // If a column is selected, change it's width public boolean mouseDrag(Event e, int x, int y) { if (!enabled) { return true; } x -= in.left; y -= in.top; if (coldrag != -1) { if (x > cpos[coldrag-1]+3 && x < cpos[coldrag+1]-3) { cpos[coldrag] = x; cwidth[coldrag-1] = (cpos[coldrag]-cpos[coldrag-1]) / (float)width; cwidth[coldrag] = (cpos[coldrag+1]-cpos[coldrag]) / (float)width; repaint(); } } return true; } public void moved(CbScrollbar s, int v) { moving(s, v); } public void moving(CbScrollbar s, int v) { top = sb.getValue(); compscroll(); repaint(); } // compscroll // Re-compute the size of the scrollbar private void compscroll() { if (fnm == null) return; // not visible int r = rows(); int c = list[0].size() - r; sb.setValues(top, r==0?1:r, list[0].size()); } // rows // Returns the number of rows visible in the list private int rows() { return Math.min(height/rowh - 1, list[0].size()); } public Dimension minimumSize() { return new Dimension(400, 100); } public Dimension preferredSize() { return minimumSize(); } } // MultiColumnCallback // Objects implementing this interface can be passed to the MultiColumn // class, to have their singleClick() and doubleClick() functions called in // response to single or double click in the list. interface MultiColumnCallback { // singleClick // Called on a single click on a list item void singleClick(MultiColumn list, int num); // doubleClick // Called upon double-clicking on a list item void doubleClick(MultiColumn list, int num); // headingClicked // Called when a column heading is clicked on void headingClicked(MultiColumn list, int col); } file/config.info.ca0100755000567100000120000000073010475622740014174 0ustar jcameronwheelhide_dot_files=Mostra els fitxers que comencen amb un punt,1,0-S,1-No iconsize=Mida dels botons a la barra d'eines,1,1-Petita,0-Gran amb etiquetes nocharset=Intenta fer servir el joc de carcters apropiat,1,0-S,1-No extract=Extreu els fitxers .class del JAR?,1,1-S,0-No width=Amplada de les imatges escalades,3,Per defecte (300 pxels) fixed=Mida de la tipografia del text,3,Per defecte (12 punts) small_fixed=Mida de la tipografia dels botons,3,Per defecte (10 punts) file/mount.cgi0100775000567100000120000000202510026221221013274 0ustar jcameronwheel#!/usr/local/bin/perl # mount.cgi # Mount or un-mount some filesystem # XXX need way to detect current status? # XXX should return result # XXX client must force refresh: # XXX can only deal with stuff in /etc/fstab require './file-lib.pl'; $disallowed_buttons{'mount'} && &error($text{'ebutton'}); &ReadParse(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || $access{'uid'}) { # User is not allowed to mount print "$text{'mount_eaccess'}\n"; exit; } # Get current status $dir = &unmake_chroot($in{'dir'}); &foreign_require("mount", "mount-lib.pl"); @fstab = &mount::list_mounts(); @mtab = &mount::list_mounted(); ($fstab) = grep { $_->[0] eq $dir } @fstab; if (!$fstab) { # Doesn't exist! print "$text{'mount_efstab'}\n"; exit; } ($mtab) = grep { $_->[0] eq $dir } @mtab; if ($mtab) { # Attempt to un-mount now $err = &mount::unmount_dir(@$mtab); } else { # Attempt to mount now $err = &mount::mount_dir(@$fstab); } if ($err) { $err =~ s/<[^>]*>//g; $err =~ s/\n/ /g; print $err,"\n"; } else { print "\n"; } file/TabbedDisplayPanel.class0100664000567100000120000000273410522475216016210 0ustar jcameronwheel-S ' ( )* ' + ,- ,. ,/ 01 2 34 56 78 39 7:;<hiLjava/awt/Color;locardLjava/awt/CardLayout;#(Ljava/awt/Color;Ljava/awt/Color;)VCodeLineNumberTableaddItem)(Ljava/lang/String;Ljava/awt/Component;)Vchoose(Ljava/lang/String;)Vinsets()Ljava/awt/Insets;paint(Ljava/awt/Graphics;)V SourceFileTabbedPanel.java =  java/awt/CardLayout > ?@ AB CD EFjava/awt/Insets GH IJK LMN OP QG RPTabbedDisplayPaneljava/awt/Panel()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component; getLayout()Ljava/awt/LayoutManager;show)(Ljava/awt/Container;Ljava/lang/String;)V(IIII)Vjava/awt/GraphicssetColor(Ljava/awt/Color;)Vjava/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionheightIdrawLinewidth C**+*,**YZ$*+,W  ) * *+   !"$ Y #$+* +*d+*d+* +*d*d*d+*d*d*d+*d*d*d+*d*d*d& (0Pp%&file/ACLEditor.class0100664000567100000120000001212110522475216014256 0ustar jcameronwheel-Q m l l l l l                  - /  1 l l l   -  l  l  l  K l l 1  \  l filemgr LFileManager;aclwin LACLWindow;acl LACLEntry;creatingZok LCbButton;delreadLjava/awt/Checkbox;writeexecowner1owner2ownerLjava/awt/TextField;(LACLWindow;LACLEntry;)VCodeLineNumberTable!(LACLWindow;Ljava/lang/String;Z)VmakeUI()Vclick (LCbButton;)Vdispose SourceFileFileManager.java qr op st uv ACLEntry  v  eacl_create eacl_edit    java/awt/BorderLayout  java/awt/Paneljava/awt/GridLayout West Eastjava/awt/Label eacl_acltype  java/awt/TextFieldjava/lang/StringBufferdefault       mask !"other eacl_aclnamejava/awt/FlowLayout #java/awt/CheckboxGroupjava/awt/Checkbox eacl_owner  $ ~{ { user eacl_user %&'  ( eacl_group ) eacl_aclperms * info_read zv z{ info_write |v |{ info_exec }v }{CbButtonsave.gif +,save - wx cancel.gifdelete yxSouth. /01 2 3 45 6 7 89 ErrorWindow eacl_eowner :;< => ?@ ABC DE FG HI J* K* LMN OP ACLEditor FixedFrameCbButtonCallback ACLWindow(LACLWindow;)VdeftypeLjava/lang/String; FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;*(Ljava/awt/Component;)Ljava/awt/Component;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;I)Vjava/awt/TextComponent setEditable(Z)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)Vjava/lang/Stringequals(Ljava/lang/Object;)Z(III)V.(Ljava/lang/String;Ljava/awt/CheckboxGroup;Z)Vfile LRemoteFile; RemoteFile8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;group(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/WindowpackshowgetState()ZgetTexttrimlength()IacllistLjava/util/Vector;java/util/Vector addElement(Ljava/lang/Object;)Vacltable LMultiColumn;getRow()[Ljava/lang/String; MultiColumnaddItem([Ljava/lang/Object;)VindexOf(Ljava/lang/Object;)I modifyItem([Ljava/lang/Object;I)VremoveElementAt deleteItemedmapLjava/util/Hashtable;java/util/Hashtableremove&(Ljava/lang/Object;)Ljava/lang/Object; lmn opqrstuvwxyxz{|{}{~{{S#**+***,**     " u=**+***Y* * *, **&   # + 3 8 < h***  *YYL+Y*+WYM,Y*,W+Y*W,YY * !"#* #$%YNW-&-*'(* )** +*+Y*,W* Y:-Y./Y0:*1Y*2*34Z5W*1Y"*34Z6W*Y*3" *3%Z7W*7*'(,W* *3@*Y*3" *3%7*7*'(,*7Wc* 8**9*:;<:*=*:><:Y?:&*'(,W+Y*@WY:-YA*1Y*B*C4ZDW*1Y*E*F4ZGW*1Y*H*I4ZJW,WY:-YA*KY*LM*N*OZPW*=*3 * )*KY*QM*R*OZSW*TW*U*V*W3  $ , 9 A I V ^ s    E j         ! 6 A G S Zox     1Lr{)+*P*5*5X*3[*7T*7YZM,[* \Y*]^W**7Y3*3[ *3**DXC**GXF**JXI*%*_*`*a*bc$*_*d=*a*be*f4+*S,*_*d=*_g*ah*fj $"+#6$G%X&Y(g)t*|,-./12679;=>?$@(B4*i*jW*kFGHfile/ToolbarLayout.java0100644000567100000120000002533410122720133015117 0ustar jcameronwheelimport java.awt.*; import java.lang.Math; /** * A ToolbarLayout arranges components in a left-to-right flow, much * like the FlowLayout which is supplied with the JDK. However, it * fixes the problem with the FlowLayout that occurs when a FlowLayout * is for a North aligned component of a BorderLayout--namely, that * if the window is shrunk so that some of the components within the * FlowLayout wrap to the next line the component does not grow in * height to support this wrapping. This bug was caused by the library * designers using the preferred size in recalculating, not the size * which is determined by the window width. As such, the flow layout * would always want to be the height of one row. * * A ToolbarLayout lets each component assume its natural (preferred) size. * * NOTE: This class was initially a subclass of FlowLayout, but we * encountered problems using that approach. * * @version 0.10, 1999-04-27 * @author Peter Armstrong * @author Tony Johnson */ public class ToolbarLayout implements LayoutManager, java.io.Serializable { /** * This value indicates that each row of components * should be left-justified. */ public static final int LEFT = 0; /** * This value indicates that each row of components * should be centered. */ public static final int CENTER = 1; /** * This value indicates that each row of components * should be right-justified. */ public static final int RIGHT = 2; int align; int hgap; int vgap; /** * Constructs a new ToolbarLayout with a left alignment and a * default 5-unit horizontal and vertical gap. */ public ToolbarLayout() { this(LEFT, 5, 5); } /** * Constructs a new ToolbarLayout with the specified alignment and a * default 5-unit horizontal and vertical gap. * The value of the alignment argument must be one of * ToolbarLayout.LEFT, ToolbarLayout.RIGHT, * or ToolbarLayout.CENTER. * @param align the alignment value */ public ToolbarLayout(int align) { this(align, 5, 5); } /** * Creates a new ToolbarLayout with the indicated alignment * and the indicated horizontal and vertical gaps. *

* The value of the alignment argument must be one of * ToolbarLayout.LEFT, ToolbarLayout.RIGHT, * or ToolbarLayout.CENTER. * @param align the alignment value. * @param hgap the horizontal gap between components. * @param vgap the vertical gap between components. */ public ToolbarLayout(int align, int hgap, int vgap) { this.align = align; this.hgap = hgap; this.vgap = vgap; } /** * Gets the alignment for this layout. * Possible values are ToolbarLayout.LEFT, * ToolbarLayout.RIGHT, or ToolbarLayout.CENTER. * @return the alignment value for this layout. * @see ToolbarLayout#setAlignment */ public int getAlignment() { return align; } /** * Sets the alignment for this layout. * Possible values are ToolbarLayout.LEFT, * ToolbarLayout.RIGHT, and ToolbarLayout.CENTER. * @param align the alignment value. * @see ToolbarLayout#getAlignment */ public void setAlignment(int align) { this.align = align; } /** * Gets the horizontal gap between components. * @return the horizontal gap between components. * @see ToolbarLayout#setHgap */ public int getHgap() { return hgap; } /** * Sets the horizontal gap between components. * @param hgap the horizontal gap between components * @see ToolbarLayout#getHgap */ public void setHgap(int hgap) { this.hgap = hgap; } /** * Gets the vertical gap between components. * @return the vertical gap between components. * @see ToolbarLayout#setVgap */ public int getVgap() { return vgap; } /** * Sets the vertical gap between components. * @param vgap the vertical gap between components * @see ToolbarLayout#getVgap */ public void setVgap(int vgap) { this.vgap = vgap; } /** * Adds the specified component to the layout. Sets the orientation to be horizontal. * @param name the name of the component * @param comp the component to be added */ public void addLayoutComponent(String name, Component comp) { } /** * Removes the specified component from the layout. Not used by * this class. * @param comp the component to remove * @see java.awt.Container#removeAll */ public void removeLayoutComponent(Component comp) { } /** * Returns the preferred dimensions for this layout given the components * in the specified target container. This method is the difference * between ToolbarLayout and FlowLayout. * @param target the component which needs to be laid out * @return the preferred dimensions to lay out the * subcomponents of the specified container. * @see Container * @see #minimumLayoutSize * @see java.awt.Container#getPreferredSize */ public Dimension preferredLayoutSize(Container target) { synchronized (target.getTreeLock()) { Dimension dim = new Dimension(0, 0); int nmembers = target.getComponentCount(); Insets insets = target.getInsets(); int numRows = 1; //the number of rows int rowSumWidth = insets.left + insets.right; //the width of the row so far int rowMaxWidth = target.getSize().width; //the width that the ToolbarLayout is in int rowHeight = 0; //the height of each row int numOnRow = 0; //the number of components on the row for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getPreferredSize(); rowHeight = Math.max(rowHeight, d.height); //make each row the height of the biggest component of all if (i > 0) { rowSumWidth += hgap;//add on the pre-spacing if this is not the first component } rowSumWidth += d.width; //add the width of the component //if it overflowed and if there are components already on this row then bump this component to next row if ((rowSumWidth + hgap) > rowMaxWidth) { if (numOnRow > 0) { numRows++; rowSumWidth = insets.left + insets.right + d.width; numOnRow = 0;//reset the number of components on the next row (we ++ no matter what later) } } numOnRow++;//add this component to the count of the number on the row } } dim.width = rowMaxWidth; dim.height = insets.top + insets.bottom + numRows*rowHeight + vgap*(numRows + 1); return dim; } } /** * Returns the minimum dimensions needed to layout the components * contained in the specified target container. * @param target the component which needs to be laid out * @return the minimum dimensions to lay out the * subcomponents of the specified container. * @see #preferredLayoutSize * @see java.awt.Container * @see java.awt.Container#doLayout */ public Dimension minimumLayoutSize(Container target) { synchronized (target.getTreeLock()) { Dimension dim = new Dimension(0, 0); int nmembers = target.getComponentCount(); for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getMinimumSize(); dim.height = Math.max(dim.height, d.height); if (i > 0) { dim.width += hgap; } dim.width += d.width; } } Insets insets = target.getInsets(); dim.width += insets.left + insets.right + hgap*2; dim.height += insets.top + insets.bottom + vgap*2; return dim; } } /** * Centers the elements in the specified row, if there is any slack. * @param target the component which needs to be moved * @param x the x coordinate * @param y the y coordinate * @param width the width dimensions * @param height the height dimensions * @param rowStart the beginning of the row * @param rowEnd the the ending of the row */ private void moveComponents(Container target, int x, int y, int width, int height, int rowStart, int rowEnd) { synchronized (target.getTreeLock()) { switch (align) { case LEFT: break; case CENTER: x += width / 2; break; case RIGHT: x += width; break; } for (int i = rowStart ; i < rowEnd ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { m.setLocation(x, y + (height - m.size().height) / 2); x += hgap + m.size().width; } } } } /** * Lays out the container. This method lets each component take * its preferred size by reshaping the components in the * target container in order to satisfy the constraints of * this ToolbarLayout object. * @param target the specified component being laid out. * @see Container * @see java.awt.Container#doLayout */ public void layoutContainer(Container target) { synchronized (target.getTreeLock()) { Insets insets = target.getInsets(); int maxwidth = target.size().width - (insets.left + insets.right + hgap*2); int nmembers = target.getComponentCount(); int x = 0, y = insets.top + vgap; int rowh = 0, start = 0; for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getPreferredSize(); m.setSize(d.width, d.height); if ((x == 0) || ((x + d.width) <= maxwidth)) { if (x > 0) { x += hgap; } x += d.width; rowh = Math.max(rowh, d.height); } else { moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, i); x = d.width; y += vgap + rowh; rowh = d.height; start = i; } } } moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, nmembers); } } /** * Returns a string representation of this ToolbarLayout * object and its values. * @return a string representation of this layout. */ public String toString() { String str = ""; switch (align) { case LEFT: str = ",align=left"; break; case CENTER: str = ",align=center"; break; case RIGHT: str = ",align=right"; break; } return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + str + "]"; } } file/config.info.de0100644000567100000120000000046010323572423014170 0ustar jcameronwheelhide_dot_files=Zeige Dateien mit einem Punkt am Anfang?,1,0-Ja,1-Nein iconsize=Größe der Buttons in der Toolbar,1,1-Klein,0-Groß mit Bildunterschrift nocharset=Versuche passende Zeichensätze zu benutzen?,1,0-Ja,1-Nein extract=.class-Dateien aus dem JAR extrahieren?,1,1-Ja,0-Nein file/CHANGELOG0100664000567100000120000000352510522475532012704 0ustar jcameronwheel---- Changes since 1.130 ---- An uploaded zip, tar or tar.gz file can be extracted in the directory it was uploaded to. Directories can now be downloaded as zip, tar or tar.gz files Added improved access control options to hide buttons. Added a chroot access control option to hide all directories above it. ---- Changes since 1.190 ---- Added checkbox for saving text files in DOS mode. Users can now be prevented from accessing certain directories by a new option on the access control page. ---- Changes since 1.240 ---- When searching for files, you can now search by their contents too. Added a Preview button, for viewing a scaled-down version of a GIF, JPEG or PNG image. ---- Changes since 1.250 ---- Absolute and relative paths like /tmp/foo and bar/foo can be used when renaming a file. The GD Perl module will be used for scaling preview images, if installed. ---- Changes since 1.260 ---- Added a button for editing HTML files, using a rich-text editor. ---- Changes since 1.270 ---- Added Module Config options for changing the font size for buttons and regular text. ---- Changes since 1.290 ---- Added the ability to extract tar.bz2 files. Added a History button next to the field for entering a directory to show, for quickly navigating to recently entered paths. Added text fields to the file info window showing the total size, number of sub-files and number of sub-directories in a directory. These are only populated when a new 'Get Size' button is clicked. ---- Changes since 1.300 ---- Added ACL options to prevent users from editing file permissions or ownership in the Info window, to stop filesystem mount points from being shown, and to restrict file contents searches. Added Extract button for un-compressing tar, tgz, zip and gz archives on the server. Added a Download button to the search results window, for downloading a selected matching file. file/AttributesWindow.class0100664000567100000120000001001110522475216016022 0ustar jcameronwheel- Xuv w Wxy w Wz{ |} ~ W W w  ~  ~   w  ~ W #  #   *w , ~ . W  5 We W     # # ~  O  O  filemgr LFileManager;file LRemoteFile;attrlistLjava/util/Vector;edmapLjava/util/Hashtable;ok LCbButton;canceladd attrtable LMultiColumn;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V doubleClick(LMultiColumn;I)V singleClickheadingClicked SourceFileFileManager.java ijava/util/Vector i _`java/util/Hashtable ab attr_title   [\ ]^java/lang/StringBuffergetattrs.cgi?file=  ErrorWindow attr_eattrs ijava/awt/BorderLayout java/lang/String attr_name  attr_value MultiColumn i gh FileAttribute i Center fjava/awt/Paneljava/awt/FlowLayout iCbButtonadd.gif attr_add i fd fjava/awt/Label save.gifsave cd cancel.gif edSouth   &name = &value setattrs.cgi?file= attr_efailed  AttributeEditor i   i      AttributesWindow FixedFrameCbButtonCallbackMultiColumnCallback(II)V()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;toString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;length()Ijava/awt/Container setLayout(Ljava/awt/LayoutManager;)V+([Ljava/lang/String;LMultiColumnCallback;)V"(Ljava/lang/String;LFileManager;)V addElement(Ljava/lang/Object;)VgetRow()[Ljava/lang/String;addItem([Ljava/lang/Object;)V<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowsize elementAt(I)Ljava/lang/Object;(I)Ljava/lang/StringBuffer;namevalueJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;dispose(LAttributesWindow;)Vselectedget&(Ljava/lang/Object;)Ljava/lang/Object;$(LAttributesWindow;LFileAttribute;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;toFrontjava/awt/Component requestFocus WXYZ[\]^_`abcdedfdghijk0*,*Y*Y*+, *+ *, * Y* W* N-2Y* -2 W*YY* SY* S:* Y*!"6-/#Y-2* $:*%*"&'*(*")W*Y+:,Y-*.Y* /0* 1*2Z34W5Y674W*.Y* 80* 9*2Z:4W*.Y* ;0* <*2Z=4W*>)W*?*@*Alz  .38aj~   3 BhmnkB+*:BM>*Ca*D#:Y,EFG* WHIFG* WJM* YK* W* ,N-2!Y* L* -2MW**N#+*3OY*PW+*=*Nl>  !%"p v%'(+-/135opkK+Q>D*D#:*RO:*OY*STW UVl& :; <=$>)?@AEBJEqpklIrpklMstfile/getfacl.cgi0100775000567100000120000000144710107635735013571 0ustar jcameronwheel#!/usr/local/bin/perl # getfacl.cgi # Gets the ACLs for some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $getfacl = $config{'getfacl'}; if ($getfacl =~ /^\.\//) { $getfacl =~ s/^\./$module_root_directory/; } chdir("/"); if ($in{'file'} eq '/') { $in{'file'} = '.'; } else { $in{'file'} =~ s/^\///; } $out = `$getfacl '$in{'file'}' 2>&1`; if ($?) { print $out,"\n"; } else { foreach $l (split(/\n/, $out)) { $l =~ s/#.*$//; $l =~ s/\s+$//; push(@rv, $l) if ($l =~ /\S/); } if (!@rv) { print "Filesystem does not support ACLs\n"; } else { print "\n"; foreach $l (@rv) { print $l,"\n"; } } } } file/FileAttribute.class0100664000567100000120000000140010522475216015251 0ustar jcameronwheel-+        !nameLjava/lang/String;value"(Ljava/lang/String;LFileManager;)VCodeLineNumberTable'(Ljava/lang/String;Ljava/lang/String;)VgetRow()[Ljava/lang/String; SourceFileFileManager.java " #$ %&' () %* java/lang/String FileAttributejava/lang/Object()VindexOf(I)I substring(II)Ljava/lang/String; FileManager un_urlize&(Ljava/lang/String;)Ljava/lang/String;(I)Ljava/lang/String;  S+*+=>*,W+*,W+`VW XY*Z3**+*,]^ _`+Y*SY*Sdfile/EXTWindow.class0100664000567100000120000000700110522475216014341 0ustar jcameronwheel- Rijklmnopqr Qst i Quv wx yz {| Q} Q~ i  y  y     #i  y & * Q , ,   5i 7 y 9 QZ Q ,  y filemgr LFileManager;file LRemoteFile;ok LCbButton;cancelcbs[Ljava/awt/Checkbox;attrs[Ljava/lang/String;attrmapLjava/util/Hashtable;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java ajava/lang/StringAacdisSu ]^java/util/Hashtable _` ext_title   TU VWjava/lang/StringBuffergetext.cgi?file=  ErrorWindow ext_eattrs a  java/awt/BorderLayout  LinedPanel ext_header java/awt/GridLayout ajava/awt/Checkbox [\eattr_ Center java/awt/Paneljava/awt/FlowLayout aCbButtonsave.gif save a XY cancel.gif ZYSouth   setext.cgi?file=&attrs= ext_efailed  EXTWindow FixedFrameCbButtonCallback()V RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;toString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;length()I substring(II)Ljava/lang/String;put8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;java/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)Vget&(Ljava/lang/Object;)Ljava/lang/Object;setState(Z)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/WindowpackshowgetState()Zremovekeys()Ljava/util/Enumeration;java/util/EnumerationhasMoreElements nextElement()Ljava/lang/Object;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;J(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;dispose QRSTUVWXYZY[\]^_`abc**YSYSYSYSYSYSY SY S * Y *+,*+*,*Y*W*N-2Y*-2W6-2*-2` !"W*#Y$%&Y*'():*Y+%** ,-6* d*-,Y*Y.* 2(/S*-2** 201*-22W*34W5Y6:7Y8%*9Y*:;*<(*=Z>2W*9Y*?;*@(*=ZA2W*B4W*C*D*Ed 7BPUZ=]jpyefc;+*>!M>*-;*-2FY,* 2M** 2GW*HN-IY,-JKM*YL*W*M,N-2!Y*N*-2OW*P+*A*PdB  " : HN _zghfile/setfacl.cgi0100775000567100000120000000161010107636027013570 0ustar jcameronwheel#!/usr/local/bin/perl # setfacl.cgi # Sets the ACLs for some file require './file-lib.pl'; $disallowed_buttons{'acl'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("acl", undef, $in{'file'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { pipe(ACLINr, ACLINw); pipe(ACLOUTr, ACLOUTw); $pid = fork(); if (!$pid) { untie(*STDIN); untie(*STDOUT); untie(*STDERR); open(STDIN, "<&ACLINr"); open(STDOUT, ">&ACLOUTw"); open(STDERR, ">&ACLOUTw"); close(ACLINw); close(ACLOUTr); exec("$config{'setfacl'} '$in{'file'}'"); print "Exec failed : $!\n"; exit(1); } close(ACLINr); close(ACLOUTw); print ACLINw $in{'acl'},"\n"; close(ACLINw); waitpid($pid, 0); $rv = ; close(ACLOUTr); if ($rv) { print $rv; } else { print "\n"; } } file/AttributeEditor.class0100664000567100000120000000705310522475216015632 0ustar jcameronwheel- Jg Ih Ii jk Ik Il Imno pqr st uvw g xyz g{ |}~  x   I s  x  # I ( s * I I  9 j j  I j filemgr LFileManager;attrwinLAttributesWindow;attrLFileAttribute;creatingZok LCbButton;delnameLjava/awt/TextField;valueLjava/awt/TextArea;$(LAttributesWindow;LFileAttribute;)VCodeLineNumberTable(LAttributesWindow;)VmakeUI()Vclick (LCbButton;)Vdispose SourceFileFileManager.java [a NO PQ LM RS `a FileAttribute [ attr_create attr_edit  java/awt/BorderLayout java/awt/Paneljava/awt/GridLayout [java/awt/Label attr_name [ java/awt/TextField W [ WX  North  attr_valuejava/awt/TextArea Y [ YZCenterjava/awt/FlowLayout [CbButtonsave.gif save [ TU cancel.gifdelete VUSouth  a a   ErrorWindow attr_ename   da  AttributeEditor FixedFrameCbButtonCallbackAttributesWindow'(Ljava/lang/String;Ljava/lang/String;)V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V(II)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;Ljava/lang/String;(Ljava/lang/String;I)VfixedLjava/awt/Font;java/awt/ComponentsetFont(Ljava/awt/Font;)V<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(Ljava/lang/String;II)V(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)VUtil recursiveBody(Ljava/awt/Component;)Vjava/awt/Windowpackshowjava/awt/TextComponentgetText()Ljava/lang/String;java/lang/Stringlength()IattrlistLjava/util/Vector;java/util/Vector addElement(Ljava/lang/Object;)V attrtable LMultiColumn;getRow()[Ljava/lang/String; MultiColumnaddItem([Ljava/lang/Object;)VindexOf(Ljava/lang/Object;)I modifyItem([Ljava/lang/Object;I)VremoveElementAt deleteItemedmapLjava/util/Hashtable;java/util/Hashtableremove&(Ljava/lang/Object;)Ljava/lang/Object; IJKLMNOPQRSTUVUWXYZ[\]P **+*,*+**^st uvwxy[_]Z***+*Y  *+**^|} ~ %)`a]E***  *YYL+Y+Y* W+*Y*ZW*** +!WYM,Y,Y*" W,*#Y*$%Z&W*',!WYN-(Y)-**Y*+,*- *.Z/W*(-**Y*0,*1 *.Z2W*3-!W*4*5*6^^$,9Nhv~ 08<@Dbc]"+*/*789Y*: ;W**7**&7$*%*<*=*>*?@$*<*A=*>*?B*C4+*2,*<*A=*<D*>E*C^J&'5CJXl{da]4*F*GW*H^effile/unicode.pl0100775000567100000120000000056710046121026013446 0ustar jcameronwheel#!/usr/bin/perl use Encode::HanConvert; $ENV{'WEBMIN_CONFIG'} ||= "/etc/webmin"; $ENV{'WEBMIN_VAR'} ||= "/var/webmin"; $no_acl_check++; do './file-lib.pl'; @lang_order_list = ( "zh_TW.Big5" ); %big5 = &load_language($module_name); foreach $k (keys %big5) { $unicode{$k} = big5_to_trad($big5{$k}); } &write_file("$module_root_directory/unicode/zh_TW.Big5", \%unicode); file/config-irix0100664000567100000120000000024210167125033013615 0ustar jcameronwheelxfs_acl=&has_command("chacl") xfs_attr=&has_command("attr") getfacl=./irix-getfacl.pl setfacl=./irix-setfacl.pl hide_dot_files=0 iconsize=0 nocharset=0 extract=1 file/setattrs.cgi0100775000567100000120000000171610207276471014033 0ustar jcameronwheel#!/usr/local/bin/perl # setattrs.cgi # Sets all the XFS attributes for a file require './file-lib.pl'; $disallowed_buttons{'attr'} && &error($text{'ebutton'}); &ReadParse(); &webmin_log("attr", undef, $in{'file'}, \%in); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { # Set given attribs $temp = &transname(); for($i=0; defined($n = $in{"name$i"}); $i++) { $v = $in{"value$i"}; open(TEMP, ">$temp"); print TEMP $v; close(TEMP); $out = `attr -s '$n' '$in{'file'}' <$temp 2>&1`; unlink($temp); if ($?) { print $out,"\n"; exit; } $set{$n}++; } # Remove those that no longer exist $out = `attr -l '$in{'file'}' 2>&1`; foreach $l (split(/[\r\n]+/, $out)) { if ($l =~ /Attribute\s+"(.*)"/i && !$set{$1}) { $out = `attr -r '$1' '$in{'file'}' 2>&1`; if ($?) { print $out,"\n"; exit; } } } print "\n"; } file/irix-getfacl.pl0100775000567100000120000000210207530043354014374 0ustar jcameronwheel#!/usr/local/bin/perl # irix-getfacl.pl # Wrapper for the ls -D command $esc = quotemeta($ARGV[0]); $out = `ls -dDL $esc 2>&1`; if ($?) { print STDERR $out; exit 1; } if ($out !~ /\[([^\]]*)\]/) { print STDERR "Failed to parse ls -D output : $out\n"; exit 1; } if ($1) { # Convert to normal ACL form ($acl, $dacl) = split(/\//, $1); foreach (split(/,/, $acl)) { s/^u:/user:/; s/^g:/group:/; s/^o:/other:/; s/^m:/mask:/; print $_,"\n"; } foreach (split(/,/, $dacl)) { s/^u:/user:/; s/^g:/group:/; s/^o:/other:/; s/^m:/mask:/; print "default:",$_,"\n"; } } else { # Make up ACL from perms local @st = stat($ARGV[0]); local $other = $st[2] & 7; local $group = ($st[2] >> 3) & 7; local $user = ($st[2] >> 6) & 7; print "user::",&octal_to_perms($user),"\n"; print "group::",&octal_to_perms($group),"\n"; print "other::",&octal_to_perms($other),"\n"; print "mask::",&octal_to_perms($user | $group),"\n"; } sub octal_to_perms { local $rv; $rv .= ($_[0] & 4 ? "r" : "-"); $rv .= ($_[0] & 2 ? "w" : "-"); $rv .= ($_[0] & 1 ? "x" : "-"); return $rv; } file/irix-setfacl.pl0100775000567100000120000000127107530045100014405 0ustar jcameronwheel#!/usr/local/bin/perl # irix-setfacl.pl # Wrapper for the chacl command while() { s/\r|\n//g; $default = ($_ =~ s/^default://); s/^(other|mask):([rwx\-]{3})$/\1::\2/g; if ($default) { push(@dacl, $_); } else { push(@acl, $_); } } $esc = quotemeta($ARGV[0]); $acl = join(",", @acl); $dacl = join(",", @dacl); if ($acl && $dacl) { $out = `chacl -b $acl $dacl $esc 2>&1`; } elsif ($acl) { if (-d $ARGV[0]) { $out = `chacl $acl $esc 2>&1 && chacl -D $esc 2>&1`; } else { $out = `chacl $acl $esc 2>&1`; } } elsif ($dacl) { $out = `chacl -d $dacl $esc 2>&1 && chacl -R $esc 2>&1`; } else { $out = `chacl -B $esc 2>&1`; } if ($?) { print STDERR $out; exit 1; } file/getattrs.cgi0100775000567100000120000000144010107635725014011 0ustar jcameronwheel#!/usr/local/bin/perl # getattrs.cgi # Returns a list in URL-encode name=value format of attributes on some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $out = `attr -l '$in{'file'}' 2>&1`; if ($?) { print $out,"\n"; } else { foreach $l (split(/[\r\n]+/, $out)) { if ($l =~ /Attribute\s+"(.*)"/i) { # Get the valid for this attribute local $name = $1; $got = `attr -g '$name' '$in{'file'}' 2>&1`; if ($? || $got !~ /^(.*)\n([\0-\377]*)\n$/) { print $got,"\n"; exit; } push(@rv, [ $name, $2 ] ); } } print "\n"; foreach $r (@rv) { print &urlize($r->[0]),"=",&urlize($r->[1]),"\n"; } } } file/MountWindow.class0100664000567100000120000000552510522475216015014 0ustar jcameronwheel- EX YZ[\ ]^ _` Da Db Dcd X efg hi jk lmno Yp Yq ]r s etu evw Xx yzG { D|I D}~   h *X * ] * ]  ] ]  7 7 7c 7 ] ] @syes LCbButton;nofilemgr LFileManager;fs LFileSystem;file LRemoteFile;((LFileManager;LFileSystem;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java P  mount_title2 mount_title1  JK LM NOjava/awt/BorderLayout  BorderPanel Pjava/awt/GridLayout P mount_rusure2 mount_rusure1java/awt/Label P Center java/awt/Paneljava/awt/FlowLayout PCbButton P GH IHSouth java/lang/StringBuffermount.cgi?dir=   FileNode  O O ErrorWindow mount_err2 mount_err1 MountWindow FixedFrameCbButtonCallback()V FileSystemmtabZ FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilbodyLjava/awt/Color;(ILjava/awt/Color;)V(II)VmountLjava/lang/String;devJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshow recursiveBody(Ljava/awt/Component;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlizetoString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;disposejava/lang/Stringequals(Ljava/lang/Object;)Zget_filesystemsnodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object;setimageknown RemoteFilelist [LRemoteFile;fill directory show_files(LRemoteFile;)Z showing_files DEFGHIHJKLMNOPQRE**+,*+*,*- * Y Y:Y ,:Y+,,W*WY:Y * Y+!*"Z#W* Y+$*"Z%W*&W*'*(*)SR()*+$,)/40A1O2_3z456789:;<=TUR*+*#**Y+,-*W*.-/0M*1,223c*4*5* 67N--8-9-:;-<*** =>WF**?>W4@Y**AB*,2CW*1SFAC1E5F@HGIYJ]KaLfMnNrP|QSW^`VWfile/MultiLabel.class0100664000567100000120000000260110522475216014544 0ustar jcameronwheel-a ' ( )* +, -. /0 1 2 34 - 56 7 8 9: ; < =>? @A B =CDE(Ljava/lang/String;I)VCodeLineNumberTable(Ljava/lang/String;II)V(Ljava/lang/String;III)V SourceFileFileManager.java # $F GH Ijava/util/Vector Jjava/util/StringTokenizer KL M NO PLjava/lang/StringBuffer QR SL TU VWjava/awt/GridLayout XU YZ [\java/awt/Label ]^java/lang/String  _` MultiLabel BorderPanelUtilbodyLjava/awt/Color;(ILjava/awt/Color;)V()Vtrim()Ljava/lang/String;'(Ljava/lang/String;Ljava/lang/String;)V hasMoreTokens()Z nextTokenappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toStringlength()I addElement(Ljava/lang/Object;)Vsize(IIII)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V elementAt(I)Ljava/lang/Object;add*(Ljava/awt/Component;)Ljava/awt/Component;  !$*+" hi#!% *+" mn$!  *Y:Y+ :: M : Y:  :*Y6$Y: * Wر"Bstu v#w+x2yWzh{o|u%&file/DownloadDirWindow.class0100664000567100000120000000367110522475216016120 0ustar jcameronwheel- ,?@ AB CD +E +FG ? HIJ KL MN OPQ RS AT U HVW HXY ?Z [\] ^ +_` +ab +c2 +de fg fh Ki fj Aklmnzip LCbButton;tgztarcancelfilemgr LFileManager;file LRemoteFile;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java 7o ddir_titlep qrs tu 34 56java/awt/BorderLayoutv wx BorderPanely z{ 7|java/awt/GridLayout 7}java/awt/Label ddir_rusure~  q 7u Center java/awt/Paneljava/awt/FlowLayout 7CbButtonddir_zip 7 ./ddir_tgz 0/ddir_tar 1/ 2/South o o o DownloadDirWindow FixedFrameCbButtonCallback()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilbodyLjava/awt/Color;(ILjava/awt/Color;)V(II)V RemoteFilepathLjava/lang/String;8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;add*(Ljava/awt/Component;)Ljava/awt/Component;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshow recursiveBody(Ljava/awt/Component;)Vdisposeopen_file_window(LRemoteFile;ZI)V +,-./0/1/2/3456789N**+*+*,*Y Y N- Y -Y+,W*-WY:Y *Y+*ZW*Y+*Z W*Y+!*Z"W*Y+#*Z$W*%W*&*'*(:R#/<RZcp;<9g;+*$ *).+*+* =*)***:)-:=>file/GrayPanel.class0100664000567100000120000000107310522475216014376 0ustar jcameronwheel-.       ()VCodeLineNumberTablepaint(Ljava/awt/Graphics;)V SourceFileGrayPanel.java  !" #$% &'( )* +* ,- GrayPaneljava/awt/PanelUtilbodyLjava/awt/Color;java/awt/GraphicssetColor(Ljava/awt/Color;)Vjava/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionwidthIheightfillRect(IIII)V!   *  <++**  file/getext.cgi0100775000567100000120000000075510107635731013461 0ustar jcameronwheel#!/usr/local/bin/perl # getext.cgi # Returns a string of EXT attributes for some file require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if (!&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $out = `lsattr -d '$in{'file'}' 2>&1`; $out =~ s/^lsattr.*\n//; if ($? || $out !~ /^(\S+)\s/) { print $out,"\n"; } else { print "\n"; @a = split(//, $1); print join("", grep { $_ ne '-' } @a),"\n"; } } file/QuickSort.java0100664000567100000120000000341310122720133014237 0ustar jcameronwheelpublic class QuickSort { static int col, dir; // Sorts entire array public static void sort(RemoteFile array[], int c, int d) { col = c; dir = d; psort(array, 0, array.length - 1); } // Sorts partial array public static void psort(RemoteFile array[], int start, int end) { int p; if (end > start) { p = partition(array, start, end); psort(array, start, p-1); psort(array, p+1, end); } } protected static int compare(RemoteFile a, RemoteFile b) { long rv = 0; if (col == 1) rv = a.name.compareTo(b.name); else if (col == 2) rv = a.size - b.size; else if (col == 3) rv = a.user.compareTo(b.user); else if (col == 4) rv = a.group.compareTo(b.group); else rv = a.modified - b.modified; rv = rv < 0 ? -1 : rv > 0 ? 1 : 0; return (int)(dir == 2 ? -rv : rv); } protected static int partition(RemoteFile array[], int start, int end) { int left, right; RemoteFile partitionElement; // Arbitrary partition start...there are better ways... partitionElement = array[end]; left = start - 1; right = end; for (;;) { while (compare(partitionElement, array[++left]) == 1) { if (left == end) break; } while (compare(partitionElement, array[--right]) == -1) { if (right == start) break; } if (left >= right) break; swap(array, left, right); } swap(array, left, end); return left; } protected static void swap(RemoteFile array[], int i, int j) { RemoteFile temp; temp = array[i]; array[i] = array[j]; array[j] = temp; } } file/setext.cgi0100775000567100000120000000072310107636022013462 0ustar jcameronwheel#!/usr/local/bin/perl # setext.cgi # Sets the EXT attributes for some file require './file-lib.pl'; $disallowed_buttons{'ext'} && &error($text{'ebutton'}); &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if ($access{'ro'} || !&can_access($in{'file'})) { print $text{'facl_eaccess'},"\n"; } else { $cmd = "chattr '=$in{'attrs'}' '$in{'file'}'"; $out = `$cmd 2>&1`; if ($?) { print $out,"\n"; } else { print "\n"; } } file/config-*-linux0100664000567100000120000000074210167125033014135 0ustar jcameronwheelxfs_acl=&has_command("getfacl") && &has_command("setfacl") ext2_acl=&has_command("getfacl") && &has_command("setfacl") ext3_acl=&has_command("getfacl") && &has_command("setfacl") xfs_attr=&has_command("attr") ext2_attr=&has_command("attr") ext3_attr=&has_command("attr") ext2_ext=&has_command("lsattr") && &has_command("chattr") ext3_ext=&has_command("lsattr") && &has_command("chattr") getfacl=getfacl setfacl=setfacl --set-file=- hide_dot_files=0 iconsize=0 nocharset=0 extract=1 file/LinedPanel.class0100664000567100000120000000240510522475216014527 0ustar jcameronwheel-T  ! " #$ #% &' () (* +, -. #/ #0 -1 +2 #34 567titleLjava/lang/String;(Ljava/lang/String;)VCodeLineNumberTablepaint(Ljava/awt/Graphics;)Vinsets()Ljava/awt/Insets; SourceFileLinedPanel.java 8  9 :; <=> ?@A BC DCE FGH IJ KL MN OJ PQ RSjava/awt/Insets N LinedPanel GrayPanel()Vjava/awt/GraphicsgetFont()Ljava/awt/Font;getFontMetrics()Ljava/awt/FontMetrics;java/awt/Componentsize()Ljava/awt/Dimension;java/awt/DimensionwidthIheightjava/awt/FontMetrics stringWidth(Ljava/lang/String;)IUtil light_edgeLjava/awt/Color;setColor(Ljava/awt/Color;)VdrawLine(IIII)V dark_edge getAscent()I drawString(Ljava/lang/String;II)V * **+ &*++M+N*d6*d6-* 6+ +d +ddd +ddd + `d + +d +ddd +ddd +d ` +*-F %/6ARcry (Y   $file/QuickSort.class0100664000567100000120000000227310522475216014443 0ustar jcameronwheel-? # $ % & ' () *+ (, (- (. (/ 0 123colIdir()VCodeLineNumberTablesort([LRemoteFile;II)Vpsortcompare(LRemoteFile;LRemoteFile;)I partition([LRemoteFile;II)Iswap SourceFileQuickSort.java     4 567 89 :; <6 =6 >;   QuickSortjava/lang/Object RemoteFilenameLjava/lang/String;java/lang/String compareTo(Ljava/lang/String;)IsizeJusergroupmodified!* 6**d   E*>*d*`   A*+AO*+eA;* + A$* + A * + eA     A u 2   -4 D!K"[$e%}& W*2:d>6*2 *2  **. /1 2 57#93;<=E>O@UB 3*2N**2S*-SHI JK!"file/ResizePanel.class0100664000567100000120000000543410522475216014742 0ustar jcameronwheel-v = > ? @ A B C DE DF GH I JK LM LN O JP Q R GS GT GU GVW X YZ[\oneLjava/awt/Component;twoposIratioDverticalZdraggingborder-(Ljava/awt/Component;Ljava/awt/Component;DZ)VCodeLineNumberTablepaint(Ljava/awt/Graphics;)V mouseDown(Ljava/awt/Event;II)Z mouseDragmouseUpaddLayoutComponent)(Ljava/lang/String;Ljava/awt/Component;)VlayoutContainer(Ljava/awt/Container;)VminimumLayoutSize*(Ljava/awt/Container;)Ljava/awt/Dimension;preferredLayoutSizeremoveLayoutComponent(Ljava/awt/Component;)V SourceFileResizePanel.java (] ! '!   $% "#^ _` abc de f!g hij kl mn o! pi &% 45 q] rn s] tejava/awt/Dimension (u 67 ResizePaneljava/awt/Paneljava/awt/LayoutManager()Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;java/awt/Componentsize()Ljava/awt/Dimension;heightjava/awt/ColorwhiteLjava/awt/Color;java/awt/GraphicssetColor(Ljava/awt/Color;)VdrawLine(IIII)Vwidthblackrepaintreshapelayout minimumSize(II)V! !"#$%&%'! ()*v6***d*+*,**)***+ W*, W+.  $)/5,-*Z* M**, *k+ +*d*`+*d,d*d+ +,d*`,d*d+,d*`*`|*,*k+ +*d*`+*d*d, d+ +*`, d*d, d+*`, d*`+F #$"%4&K'R(n)./012346./*wK* :**d*`***d*`**+<=!@&BAEFG0/*** :*M***' *d* *d*** oJ***'*d**d***o****+JMO PRS'T5UFWKX^\f]q^_abdeg1/*.*6*+mn o23*+t45*+ M*S*, *k*,*d***`,, *dd*P*,*k**d, ***`,*dd, *+6 yz |}.~5R\k~67*e*M*N**Y,- ,-, - `Y,-`, - , - +>87**++9:*+;<file/StaticTextField.class0100664000567100000120000000071610522475216015557 0ustar jcameronwheel-    ()VCodeLineNumberTable(Ljava/lang/String;)V(Ljava/lang/String;I)V SourceFileStaticTextField.java     StaticTextFieldjava/awt/TextFieldjava/awt/TextComponent setEditable(Z)V  * **     + *+*    , *+*   file/StringSplitter.class0100664000567100000120000000231310522475216015507 0ustar jcameronwheel-B % &' & ( )* & + ,- ,. / 0 1 234partsLjava/util/Vector;posI(Ljava/lang/String;C)VCodeLineNumberTable(Ljava/lang/String;CZ)V countTokens()I hasMoreTokens()Z nextToken()Ljava/lang/String; gettokens()Ljava/util/Vector; SourceFileStringSplitter.java  5java/util/Vector  java/lang/StringBuffer 678 9 :; <= > ?@ A StringSplitterjava/lang/Object()V addElement(Ljava/lang/Object;)Vjava/lang/StringlengthcharAt(I)Cappend(C)Ljava/lang/StringBuffer;size elementAt(I)Ljava/lang/Object;toString!$*+ **Y**YY: 6+ [+ 6\$+ d+ W%*YY:  W6   %19Oag{% * *d%,** , I)** **YZ`34'6!"*=#$file/StringJoiner.class0100664000567100000120000000141710522475216015133 0ustar jcameronwheel-1    ! " #$ #% &'(sepCstrLjava/lang/StringBuffer;countI(C)VCodeLineNumberTableadd(Ljava/lang/String;)VtoString()Ljava/lang/String; SourceFileStringSplitter.java )java/lang/StringBuffer    *+, -. /0  StringJoinerjava/lang/Object()Vappend(C)Ljava/lang/StringBuffer;java/lang/Stringlength()IcharAt(I)C  B**Y**NIJOPU***W=+0+ >* \ *\W*W*Y`& VWXY#Z;[DXJ]T^ * dfile/ToolbarLayout.class0100664000567100000120000000736710522475216015330 0ustar jcameronwheel- )T *U )V )W )X YZ[ \ ]^ ]_ `a `b Yc d ]e Yf Yg h ij `k `l Ym Yn Yo Yp )qrstuv U *w xy z{ |}~ LEFTI ConstantValueCENTERRIGHTalignhgapvgap()VCodeLineNumberTable(I)V(III)V getAlignment()I setAlignmentgetHgapsetHgapgetVgapsetVgapaddLayoutComponent)(Ljava/lang/String;Ljava/awt/Component;)VremoveLayoutComponent(Ljava/awt/Component;)VpreferredLayoutSize*(Ljava/awt/Container;)Ljava/awt/Dimension;minimumLayoutSizemoveComponents(Ljava/awt/Container;IIIIII)VlayoutContainer(Ljava/awt/Container;)VtoString()Ljava/lang/String; SourceFileToolbarLayout.java 8= 89 5. 6. 7. java/awt/Dimension 8 ?  . . . . . . LM ,align=left ,align=center ,align=rightjava/lang/StringBuffer  Q [hgap= ,vgap=] PQ ToolbarLayoutjava/lang/Objectjava/awt/LayoutManagerjava/io/Serializablejava/awt/Component getTreeLock()Ljava/lang/Object;(II)Vjava/awt/ContainergetComponentCount getInsets()Ljava/awt/Insets;java/awt/InsetsleftrightgetSize()Ljava/awt/Dimension;width getComponent(I)Ljava/awt/Component; isVisible()ZgetPreferredSizeheightjava/lang/Mathmax(II)ItopbottomgetMinimumSizesize setLocationsetSizegetClass()Ljava/lang/Class;java/lang/ClassgetNameappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;(I)Ljava/lang/StringBuffer;!)*+,-./01./23./45.6.7.89:$*; 788<:$*; CD8=:<****;QR STU>?:*;_@<:"*; jkA?:*;sB<:"*; |}C?:*;D<:"*; EF:;GH:;IJ:x+YM»YN+ 6+ :6  `6+ 66 6 6  q+ :  [ :   6  *`6 `6*`!   ` `66  --` h`*`h`-,ð:,;r -69<FNV]inwKJ: +YM»YN+ 66P+:::---Y*`-Y`+ :-Y  `*h``-Y`*h``-,ð:,;F!)18HMZhntLM: +Y:*.)l`=`=6  >+ :  (  dl`* ``= ç :  ;:(+25 : E MUjz NO:+YM+ N+- - `*h`d6+ 66-*`666 6  + :   :     `* *`6 `6 6<*+- *`d   6*``6 6 6 ^*+- *`d ,ç : ,  ;f ! "&#,$:%@'J(R)Z*a+p,-.0134567';<=PQ:eL*(%L LLY *!"#$#*%&#*%+#'#(;EF G&H,I/KRSfile/config.info.it0100755000567100000120000000045410264601114014214 0ustar jcameronwheelhide_dot_files=Visualizza i file che iniziano con un punto?,1,0-Si,1-No iconsize=Dimensioni dei pulsanti nella barra degli strumenti,1,1-Piccoli,0-Grandi con etichette nocharset=Tenta di usare il set di caratteri appropriato?,1,0-Si,1-No extract=Estrarre i file .class dall'archivio JAR?,1,1-Si,0-No file/config.info.es0100644000567100000120000000050510307032634014204 0ustar jcameronwheelhide_dot_files=¿Mostrar archivos que comienzan con punto?,1,0-Sí,1-No iconsize=Tamaño de botones en la barra de herramientas,1,1-Pequeño,0-Grande con etiquetas nocharset=¿Intentar usar el juego de caracteres apropiado?,1,0-Sí,1-No extract=¿Extraer archivos .class del JAR?,1,1-Sí,0-No file/config.info.fa0100664000567100000120000000102010421633117014156 0ustar jcameronwheel hide_dot_files=آيا پرونده‌هايي که با يک نقطه آغاز مي‌شوند نمايش داده شوند؟,1,0-بله,1-خير iconsize=اندازه دگمه‌ها در نوار ابزار,1,1-کوچک,0-بزرگ به همراه برچسبها nocharset=آيا مي‌خواهيد از مجموعه کاراکترهاي خاص استفاده کنيد؟,1,0-بله,1-خير extract=آيا پرونده‌هاي .class از پرونده‌هاي JAR استخراج شوند؟,1,1-بله,0-خير file/PreviewWindow.class0100664000567100000120000000741710522475216015335 0ustar jcameronwheel- Pd Oe Of Ogh ij kl Pmn opq dr s ktu vw xy kz k{ | } ~ k  v  # # %  * * *  k O >   8d  ; >  Bd D k F O  close_b LCbButton;file LRemoteFile;filemgr LFileManager;ip LImagePanel;(LFileManager;LRemoteFile;)VCodeLineNumberTablemakeUI()Vclick (LCbButton;)V SourceFileFileManager.java Z_ TU VW ^_ preview_title   java/net/URL java/lang/StringBuffer preview.cgi ?rand= &trust= Z   java/io/EOFException  text/plain java/lang/String Z ErrorWindow Z _ java/awt/MediaTracker Z _java/lang/InterruptedException  preview_bad XY _ _java/lang/Exception _java/awt/BorderLayout  BorderPanel  Z ImagePanel ZCenter java/awt/Paneljava/awt/FlowLayout ZCbButton cancel.gif close Z RS  South   PreviewWindowjava/awt/FrameCbButtonCallback RemoteFilepathLjava/lang/String; FileManagertext8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;setTitle(Ljava/lang/String;)Vjava/applet/AppletgetDocumentBase()Ljava/net/URL;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize&(Ljava/lang/String;)Ljava/lang/String;java/lang/SystemcurrentTimeMillis()J(J)Ljava/lang/StringBuffer;trustextratoString()Ljava/lang/String;#(Ljava/net/URL;Ljava/lang/String;)VopenConnection()Ljava/net/URLConnection; set_cookie(Ljava/net/URLConnection;)Vjava/net/URLConnectiongetContentLength()IgetInputStream()Ljava/io/InputStream;java/io/InputStreamread([BII)I([B)I arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)VgetContentTypeequals(Ljava/lang/Object;)Z([BI)Vjava/awt/Windowdisposejava/awt/ToolkitgetDefaultToolkit()Ljava/awt/Toolkit; createImage([B)Ljava/awt/Image;(Ljava/awt/Component;)VaddImage(Ljava/awt/Image;I)V waitForAlljava/awt/ImagegetWidth!(Ljava/awt/image/ImageObserver;)IsetImage(Ljava/awt/Image;)Vpackshowjava/lang/ThrowableprintStackTracejava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilbodyLjava/awt/Color;(ILjava/awt/Color;)Vadd<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component; recursiveBody OPQRSTUVWXYZ[\ **,*+**** Y* Y  *W***N-:*6:.:6id`6:@:6 : 5 - `:     : !"#Y$:%Y&W*'():*Y*+:  , -: */%Y*01&W*'*23*4*5N-7\ad.&=6>66]*&z#/9=>HR\afo^_\*8Y9:;Y<=L+8Y9:*>Y?2+@*2AW*@+AWBYCM,DYE:,*FY*GH*I1*JZKLW*M,AW*N]2    " . 9AIUz`a\- +*K*']  bcfile/ImagePanel.class0100664000567100000120000000157310522475216014523 0ustar jcameronwheel-3     !" !# $ %&'imgLjava/awt/Image;(Ljava/awt/Image;)VCodeLineNumberTablepaint(Ljava/awt/Graphics;)VsetImage minimumSize()Ljava/awt/Dimension; preferredSize SourceFileFileManager.java ( ) *+, -(java/awt/Dimension. /0 10 2  ImagePaneljava/awt/Panel()Vjava/awt/Graphics drawImage3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Zjava/awt/Componentrepaintjava/awt/ImagegetWidth!(Ljava/awt/image/ImageObserver;)I getHeight(II)V  * **+() *4*+**W./1* *+*56 70Y****;* @file/save_html.cgi0100775000567100000120000000147510374224373014145 0ustar jcameronwheel#!/usr/local/bin/perl # Write data from an HTML editor require './file-lib.pl'; $disallowed_buttons{'edit'} && &error($text{'ebutton'}); &ReadParseMime(); &error_setup($text{'html_err'}); # Try to write the file $p = $in{'file'}; &switch_acl_uid_and_chroot(); if ($access{'ro'} || !&can_access($p)) { &popup_error(&text('edit_eaccess', $p)); } elsif (-l $p && !&must_follow($p)) { &popup_error(&text('edit_efollow', $p)); } elsif (!&open_tempfile(FILE, ">$p", 1)) { &popup_error("$!"); } else { &print_tempfile(FILE, $in{'body'}); &close_tempfile(FILE); # Show JS to close page &popup_header($text{'html_title'}); $info = &file_info_line($p); print "\n"; &popup_footer(); } file/edit_html.cgi0100775000567100000120000000201210374223402014110 0ustar jcameronwheel#!/usr/local/bin/perl # Show an HTML editor window require './file-lib.pl'; do '../ui-lib.pl'; $disallowed_buttons{'edit'} && &error($text{'ebutton'}); &ReadParse(); &popup_header($text{'html_title'}, undef, "onload='initEditor()'"); # Output HTMLarea init code print < _editor_url = "/$module_name/htmlarea/"; _editor_lang = "en"; EOF # Read the file &switch_acl_uid_and_chroot(); $data = &read_file_contents($in{'file'}); # Output text area print &ui_form_start("save_html.cgi", "form-data"); print &ui_hidden("file", $in{'file'}),"\n"; print "\n"; print &ui_submit($text{'html_save'}); print &ui_form_end(); &popup_footer(); file/size.cgi0100775000567100000120000000203010502150667013116 0ustar jcameronwheel#!/usr/local/bin/perl # size.cgi # Returns the size in bytes, number of files and number of dirs in a directory require './file-lib.pl'; &ReadParse(); &switch_acl_uid_and_chroot(); print "Content-type: text/plain\n\n"; if (!&can_list($in{'dir'})) { print $text{'list_eaccess'},"\n"; } ($size, $files, $dirs) = &recursive_dir_info($in{'dir'}); print "\n"; print $size," ",$files," ",$dirs," ",&nice_size($size),"\n"; # recursive_dir_info(directory) sub recursive_dir_info { local $dir = &translate_filename($_[0]); if (-l $dir) { # Symlink return (0, 1, 0); } elsif (-f $dir) { local @st = stat($dir); return ($st[7], 1, 0); } elsif (-d $dir) { local @st = stat($dir); local ($size, $files, $dirs) = ($st[7], 0, 1); opendir(DIR, $dir); local @files = readdir(DIR); closedir(DIR); foreach my $f (@files) { next if ($f eq "." || $f eq ".."); local @r = &recursive_dir_info("$dir/$f"); $size += $r[0]; $files += $r[1]; $dirs += $r[2]; } return ($size, $files, $dirs); } else { # Special file .. return (0, 1, 0); } } file/HistoryWindow.class0100664000567100000120000000441510522475216015350 0ustar jcameronwheel- ,B +CD EF GHI B +J EK LM LNO P QR B STU SVW BX YZ[ E\] ^ +_ S`ab +cd ef gh gi gj k Elm )nopqrhlistLjava/awt/List;ok_b LCbButton;cancel_bfilemgr LFileManager;(LFileManager;)VCodeLineNumberTableclick (LCbButton;)VactionPerformed(Ljava/awt/event/ActionEvent;)V minimumSize()Ljava/awt/Dimension; SourceFileFileManager.java 6s 45 history_titlet uvw xy java/awt/List /0 z{| }~ java/lang/String y java/awt/BorderLayout Center java/awt/Paneljava/awt/FlowLayout 6CbButtonsave.gif  history_ok 6 12  cancel.gifcancel 32South  s s s java/awt/Dimension 6 HistoryWindow FixedFrameCbButtonCallbackjava/awt/event/ActionListener()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)V history_listLjava/util/Vector;java/util/Vectorsize()I elementAt(I)Ljava/lang/Object;addaddActionListener"(Ljava/awt/event/ActionListener;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)V<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V get_image$(Ljava/lang/String;)Ljava/awt/Image;8(Ljava/awt/Image;Ljava/lang/String;ILCbButtonCallback;)V*(Ljava/awt/Component;)Ljava/awt/Component;Util recursiveBody(Ljava/awt/Component;)Vjava/awt/WindowpackshowdisposegetSelectedItem()Ljava/lang/String;find_directory!(Ljava/lang/String;Z)LRemoteFile;(II)V +,-./0123245678=**+***Y=* **  ***Y**WYM,Y,*Y***ZW,*Y** *Z!W*",W*#*$*%9N    ! 1 F L T _ j r ~   ! " # $ %:;8f2+*! *&%+**'M,*,(W*&9" ) * + - .# /- 01 3<=8;*'M*,(W*&9 8 9 : ;>?8&)Y,,*9 ?@Afile/ExtractWindow.class0100664000567100000120000000541110522475216015316 0ustar jcameronwheel- CUV WX YZ B[ B\] U ^_` ab cd efg h ^i jklm ^no Up qrE s Btu BvH Bwx yz y{ a|} 'U~ ' W ' ' W y j W  6 6 6\ j 6 W W W >hyes LCbButton; yesdeletenofilemgr LFileManager;file LRemoteFile;(LFileManager;LRemoteFile;)VCodeLineNumberTableclick (LCbButton;)V SourceFileFileManager.java M extract_title  IJ KLjava/awt/BorderLayout  BorderPanel Mjava/awt/GridLayout Mjava/awt/Labelextract_rusure M  extract_rusure2Center java/awt/Paneljava/awt/FlowLayout MCbButton M EF extract_yes GF HFSouth java/lang/StringBufferextract.cgi?file= &delete=  L  FileNode L  ErrorWindow extract_err  ExtractWindow FixedFrameCbButtonCallback()V FileManagertext&(Ljava/lang/String;)Ljava/lang/String;java/awt/FramesetTitle(Ljava/lang/String;)Vjava/awt/Container setLayout(Ljava/awt/LayoutManager;)VUtilbodyLjava/awt/Color;(ILjava/awt/Color;)V(II)Vadd*(Ljava/awt/Component;)Ljava/awt/Component; RemoteFilepathLjava/lang/String;<(Ljava/lang/String;Ljava/awt/Component;)Ljava/awt/Component;(I)V'(Ljava/lang/String;LCbButtonCallback;)Vjava/awt/Windowpackshow recursiveBody(Ljava/awt/Component;)Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;urlize(I)Ljava/lang/StringBuffer;toString()Ljava/lang/String;get_text'(Ljava/lang/String;)[Ljava/lang/String;disposejava/lang/Stringequals(Ljava/lang/Object;)Z directorynodemapLjava/util/Hashtable;java/util/Hashtableget&(Ljava/lang/Object;)Ljava/lang/Object;setimageknownZlist [LRemoteFile;fill showing_files show_files(LRemoteFile;)Z8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; BCDEFGFHFIJKLMNOW**+*+*,*Y Y N- Y -Y+W-Y,W-Y+W*-WY:Y *Y+*ZW*Y+*Z W*Y+!*Z"W*#W*$*%*&PVLMNOR#S/T<UNV^WpXxYZ[\]^_`abQRO+* +* *'Y()**W*+*,*+* -./M*0,212K*3N*4-56:789:;**<=W>Y*?,2@AW*0P>fhNkRl]neoupzqrstvzSTfile/extract.cgi0100775000567100000120000000101110515531713013613 0ustar jcameronwheel#!/usr/local/bin/perl # Extract a zip, tar, tar.gz or tar.bz file on the server require './file-lib.pl'; &ReadParse(); print "Content-type: text/plain\n\n"; # Check permissions $disallowed_buttons{'upload'} && &error($text{'ebutton'}); if (!&can_access($in{'file'})) { print &text('extract_eperm', $in{'file'}),"\n"; exit(0); } # Go for it &webmin_log("extract", undef, $in{'file'}); $realfile = &unmake_chroot($in{'file'}); &switch_acl_uid(); $err = &extract_archive($in{'file'}, $in{'delete'}); print $err,"\n";