Author: j16sdiz
Date: 2008-07-07 15:51:48 +0000 (Mon, 07 Jul 2008)
New Revision: 20999

Added:
   
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucketFactory.java
Modified:
   branches/saltedhashstore/freenet/build.xml
   
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
   
branches/saltedhashstore/freenet/src/freenet/client/async/SplitFileInserter.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/SimpleToadletServer.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/StartupToadlet.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/Bookmark.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/filter/HTMLFilter.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
   branches/saltedhashstore/freenet/src/freenet/crypt/Yarrow.java
   branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
   
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
   
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
   branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
   branches/saltedhashstore/freenet/src/freenet/node/Node.java
   branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
   
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
   branches/saltedhashstore/freenet/src/freenet/node/Version.java
   branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPutBase.java
   branches/saltedhashstore/freenet/src/freenet/node/fcp/PersistentGet.java
   
branches/saltedhashstore/freenet/src/freenet/node/fcp/URIGeneratedMessage.java
   
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
   branches/saltedhashstore/freenet/src/freenet/support/LibraryLoader.java
   
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucket.java
   branches/saltedhashstore/freenet/src/freenet/support/io/BucketTools.java
   branches/saltedhashstore/freenet/src/freenet/support/io/NativeThread.java
Log:
Merge build #1153

Modified: branches/saltedhashstore/freenet/build.xml
===================================================================
--- branches/saltedhashstore/freenet/build.xml  2008-07-07 15:31:05 UTC (rev 
20998)
+++ branches/saltedhashstore/freenet/build.xml  2008-07-07 15:51:48 UTC (rev 
20999)
@@ -3,7 +3,10 @@

 <project name="Freenet" default="dist" basedir=".">
        <description>
-               This file builds freenet...
+               This file builds Freenet: What is Freenet?
+
+               Freenet is free software which lets you publish and obtain 
information on the Internet without fear of censorship. To achieve this 
freedom, the network is entirely decentralized and publishers and consumers of 
information are anonymous. Without anonymity there can never be true freedom of 
speech, and without decentralization the network would be vulnerable to attack.
+
                Possible targets: compile, dist (default), clean
        </description>

@@ -72,7 +75,6 @@

                <!-- Create the build directory structure used by compile -->

-               <!-- FIXME: remove the debug and replace with optimize -->
                <javac srcdir="${src}" destdir="${build}" debug="on" 
optimize="on" source="1.5">
                        <classpath>
                                <pathelement 
location="${freenet-ext.location}"/>
@@ -107,8 +109,6 @@
        <target name="dist" depends="compile,unit"
                description="generate the distribution" >
                <!-- Create the distribution directory -->
-               <!--<mkdir dir="."/>-->
-               <!-- Put everything in ${build} into the freenet-${DSTAMP}.jar 
file -->
                <jar jarfile="${lib}/freenet-cvs-snapshot.jar" 
basedir="${build}">
                        <manifest>
                                <attribute name="Main-Class" 
value="freenet/node/Node"/>

Modified: 
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
       2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
       2008-07-07 15:51:48 UTC (rev 20999)
@@ -443,8 +443,6 @@
                                                        RandomGrabArray baseRGA 
= (RandomGrabArray) clientGrabber.getGrabber(req.getClientRequest());
                                                        if(baseRGA != null) {
                                                                
baseRGA.remove(req);
-                                                       } else {
-                                                               
Logger.error(this, "Could not find base RGA for requestor 
"+req.getClientRequest()+" from "+clientGrabber);
                                                        }
                                                } else {
                                                        Logger.error(this, 
"Could not find client grabber for client "+req.getClient()+" from 
"+retryTracker);

Modified: 
branches/saltedhashstore/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/client/async/SplitFileInserter.java
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/client/async/SplitFileInserter.java
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -78,14 +78,13 @@
                this.cb = cb;
                this.ctx = ctx;
                this.decompressedLength = decompressedLength;
+               this.dataLength = data.size();
                Bucket[] dataBuckets;
                try {
-                       dataBuckets = BucketTools.split(data, 
CHKBlock.DATA_LENGTH, ctx.persistentBucketFactory);
+                       dataBuckets = BucketTools.split(data, 
CHKBlock.DATA_LENGTH, ctx.persistentBucketFactory, freeData);
                } catch (IOException e) {
                        throw new InsertException(InsertException.BUCKET_ERROR, 
e, null);
                }
-               this.dataLength = data.size();
-               if(freeData) data.free();
                countDataBlocks = dataBuckets.length;
                // Encoding is done by segments
                if(bestCodec == null)

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   2008-07-07 15:51:48 UTC (rev 20999)
@@ -82,6 +82,23 @@
                                return result < 0 ? -1 : 1;
                        }
                }
+               
+               // TODO: use Long.valueOf().compare when we switch to 1.5
+               private int compareLongs(long long1, long long2) {
+                       long diff = long1 - long2;
+                       if(diff == 0)
+                               return 0;
+                       else
+                               return (diff > 0 ? 1 : -1);
+               }
+               
+               private int compareInts(int int1, int int2) {
+                       int diff = int1 -int2;
+                       if(diff == 0)
+                               return 0;
+                       else
+                               return (diff > 0 ? 1 : -1);
+               }

                protected int customCompare(PeerNodeStatus firstNode, 
PeerNodeStatus secondNode, String sortBy2) {
                        if(sortBy.equals("address")){
@@ -90,6 +107,22 @@
                                return compareLocations(firstNode, secondNode);
                        }else if(sortBy.equals("version")){
                                return 
Version.getArbitraryBuildNumber(firstNode.getVersion(), -1) - 
Version.getArbitraryBuildNumber(secondNode.getVersion(), -1);
+                       }else if(sortBy.equals("backoff")){
+                               return 
Double.compare(firstNode.getBackedOffPercent(), 
secondNode.getBackedOffPercent());
+                       }else if(sortBy.equals(("overload_p"))){
+                               return Double.compare(firstNode.getPReject(), 
secondNode.getPReject());
+                       }else if(sortBy.equals(("idle"))){
+                               return 
compareLongs(firstNode.getTimeLastConnectionCompleted(), 
secondNode.getTimeLastConnectionCompleted());
+                       }else if(sortBy.equals("time_routable")){
+                               return 
Double.compare(firstNode.getPercentTimeRoutableConnection(), 
secondNode.getPercentTimeRoutableConnection());
+                       }else if(sortBy.equals("total_traffic")){
+                               long total1 = 
firstNode.getTotalInputBytes()+firstNode.getTotalOutputBytes();
+                               long total2 = 
secondNode.getTotalInputBytes()+secondNode.getTotalOutputBytes();
+                               return compareLongs(total1, total2);
+                       }else if(sortBy.equals("time_delta")){
+                               return compareLongs(firstNode.getClockDelta(), 
secondNode.getClockDelta());
+                       }else if(sortBy.equals(("uptime"))){
+                               return 
compareInts(firstNode.getReportedUptimePercentage(), 
secondNode.getReportedUptimePercentage());
                        }else
                                return 0;
                }
@@ -354,20 +387,20 @@
                                peerTableHeaderRow.addChild("th").addChild("a", 
"href", sortString(isReversed, "version")).addChild("#", l10n("versionTitle"));
                                if (mode >= PageMaker.MODE_ADVANCED) {
                                        
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"location")).addChild("#", "Location");
-                                       
peerTableHeaderRow.addChild("th").addChild("span", new String[] { "title", 
"style" }, new String[] { "Other node busy? Display: Percentage of time the 
node is overloaded, Current wait time remaining (0=not overloaded)/total/last 
overload reason", "border-bottom: 1px dotted; cursor: help;" }, "Backoff");
+                                       
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"backoff")).addChild("span", new String[] { "title", "style" }, new String[] { 
"Other node busy? Display: Percentage of time the node is overloaded, Current 
wait time remaining (0=not overloaded)/total/last overload reason", 
"border-bottom: 1px dotted; cursor: help;" }, "Backoff");

-                                       
peerTableHeaderRow.addChild("th").addChild("span", new String[] { "title", 
"style" }, new String[] { "Probability of the node rejecting a request due to 
overload or causing a timeout.", "border-bottom: 1px dotted; cursor: help;" }, 
"Overload Probability");
+                                       
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"overload_p")).addChild("span", new String[] { "title", "style" }, new String[] 
{ "Probability of the node rejecting a request due to overload or causing a 
timeout.", "border-bottom: 1px dotted; cursor: help;" }, "Overload 
Probability");
                                }
-                               
peerTableHeaderRow.addChild("th").addChild("span", new String[] { "title", 
"style" }, new String[] { l10n("idleTime"), "border-bottom: 1px dotted; cursor: 
help;" }, l10n("idleTimeTitle"));
+                               peerTableHeaderRow.addChild("th").addChild("a", 
"href", sortString(isReversed, "idle")).addChild("span", new String[] { 
"title", "style" }, new String[] { l10n("idleTime"), "border-bottom: 1px 
dotted; cursor: help;" }, l10n("idleTimeTitle"));
                                if(hasPrivateNoteColumn())
                                        
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"privnote")).addChild("span", new String[] { "title", "style" }, new String[] { 
l10n("privateNote"), "border-bottom: 1px dotted; cursor: help;" }, 
l10n("privateNoteTitle"));

                                if(mode >= PageMaker.MODE_ADVANCED) {
-                                       peerTableHeaderRow.addChild("th", 
"%\u00a0Time Routable");
-                                       peerTableHeaderRow.addChild("th", 
"Total\u00a0Traffic\u00a0(in/out/resent)");
+                                       
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"time_routable")).addChild("#", "%\u00a0Time Routable");
+                                       
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"total_traffic")).addChild("#", "Total\u00a0Traffic\u00a0(in/out/resent)");
                                        peerTableHeaderRow.addChild("th", 
"Congestion\u00a0Control");
-                                       peerTableHeaderRow.addChild("th", 
"Time\u00a0Delta");
-                                       peerTableHeaderRow.addChild("th", 
"Reported\u00a0Uptime");
+                                       
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"time_delta")).addChild("#", "Time\u00a0Delta");
+                                       
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"uptime")).addChild("#", "Reported\u00a0Uptime");
                                }

                                SimpleColumn[] endCols = endColumnHeaders(mode 
>= PageMaker.MODE_ADVANCED);
@@ -466,9 +499,9 @@

                if (request.isPartSet("add")) {
                        // add a new node
-                       String urltext = request.getPartAsString("url", 100);
+                       String urltext = request.getPartAsString("url", 200);
                        urltext = urltext.trim();
-                       String reftext = request.getPartAsString("ref", 2000);
+                       String reftext = request.getPartAsString("ref", 
Integer.MAX_VALUE);
                        reftext = reftext.trim();
                        if (reftext.length() < 200) {
                                reftext = request.getPartAsString("reffile", 
2000);
@@ -488,7 +521,7 @@
                                        // FIXME get charset encoding from 
uc.getContentType()
                                        in = new BufferedReader(new 
InputStreamReader(uc.getInputStream()));
                                        String line;
-                                       while ( (line = in.readLine()) != null) 
{
+                                       while ((line = in.readLine()) != null) {
                                                ref.append( line ).append('\n');
                                        }
                                } catch (IOException e) {

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java    
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java    
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -301,7 +301,7 @@
                int bufProgress = 0;
                while(offset < buf.length) {
                        byte b = buf[offset];
-                       if((int)b == (int)find.charAt(bufProgress)) {
+                       if(b == find.charAt(bufProgress)) {
                                bufProgress++;
                                if(bufProgress == find.length()) return true;
                        } else {
@@ -337,7 +337,7 @@

                                if(logMINOR) Logger.minor(this, "Redirecting to 
FreenetURI: "+newURI);
                                String type = httprequest.getParam("type");
-                               if (type != null) {
+                               if ((type != null) && (type.length() > 0)) {
                                        headers.put("Location", "/"+newURI + 
"?type=" + type);
                                } else {
                                        headers.put("Location", "/"+newURI);

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java 
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java 
2008-07-07 15:51:48 UTC (rev 20999)
@@ -1309,6 +1309,14 @@

        private void registerAlert(ClientRequest req) {
                final String identifier = req.getIdentifier();
+               boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
+               if(logMINOR)
+                       Logger.minor(this, "Registering alert for "+identifier);
+               if(!req.hasFinished()) {
+                       if(logMINOR)
+                               Logger.minor(this, "Request hasn't finished: 
"+req+" for "+identifier, new Exception("debug"));
+                       return;
+               }
                if(req instanceof ClientGet) {
                        FreenetURI uri = ((ClientGet)req).getURI();
                        long size = ((ClientGet)req).getDataSize();
@@ -1344,6 +1352,10 @@
                                return;
                        }
                        long size = ((ClientPut)req).getDataSize();
+                       if(uri == null) {
+                               Logger.error(this, "uri is null for "+req+" for 
"+identifier);
+                               return;
+                       }
                        String name = uri.getPreferredFilename();
                        String title = l10n("uploadSucceededTitle", "filename", 
name);
                        HTMLNode text = new HTMLNode("div");

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/SimpleToadletServer.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/SimpleToadletServer.java
  2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/SimpleToadletServer.java
  2008-07-07 15:51:48 UTC (rev 20999)
@@ -465,10 +465,12 @@

        }

-       private StartupToadlet startupToadlet;
+       public StartupToadlet startupToadlet;

        public void removeStartupToadlet() {
                unregister(startupToadlet);
+               // Ready to be GCed
+               startupToadlet = null;
                // Not in the navbar.
        }

@@ -520,6 +522,10 @@
                }
        }

+       public StartupToadlet getStartupToadlet() {
+               return startupToadlet;
+       }
+       
        public Toadlet findToadlet(URI uri) throws PermanentRedirectException {
                Iterator i = toadlets.iterator();
                String path = uri.getPath();

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/StartupToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/StartupToadlet.java   
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/StartupToadlet.java   
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -1,5 +1,6 @@
 package freenet.clients.http;

+import freenet.l10n.L10n;
 import java.io.IOException;
 import java.net.URI;

@@ -9,40 +10,52 @@
 /**
  * Toadlet for "Freenet is starting up" page.
  */
-class StartupToadlet extends Toadlet {
+public class StartupToadlet extends Toadlet {

-    private StaticToadlet staticToadlet;
-       
+       private StaticToadlet staticToadlet;
+       private volatile boolean isPRNGReady = false;
+
        public StartupToadlet(StaticToadlet staticToadlet) {
                super(null);
                this.staticToadlet = staticToadlet;
        }
-       
-    public void handleGet(URI uri, HTTPRequest req, ToadletContext ctx) throws 
ToadletContextClosedException, IOException, RedirectException {
-    // If we don't disconnect we will have pipelining issues
-    ctx.forceDisconnect();

-        String path = uri.getPath();
-        if (path.startsWith(StaticToadlet.ROOT_URL) && staticToadlet != null) {
-            staticToadlet.handleGet(uri, req, ctx);
-        } else {
-            String desc = "Freenet is starting up";
-            HTMLNode pageNode = ctx.getPageMaker().getPageNode(desc, false, 
ctx);
-            HTMLNode headNode = ctx.getPageMaker().getHeadNode(pageNode);
-            headNode.addChild("meta", new String[]{"http-equiv", "content"}, 
new String[]{"refresh", "20; url="});
-            HTMLNode contentNode = ctx.getPageMaker().getContentNode(pageNode);
-       
-       HTMLNode infobox = 
contentNode.addChild(ctx.getPageMaker().getInfobox("infobox-error", desc));
-       HTMLNode infoboxContent = ctx.getPageMaker().getContentNode(infobox);
-       infoboxContent.addChild("#", "Your freenet node is starting up, please 
hold on.");
-            
-            WelcomeToadlet.maybeDisplayWrapperLogfile(ctx, contentNode);
-            //TODO: send a Retry-After header ?
-            writeHTMLReply(ctx, 503, desc, pageNode.generate());
-        }
-}
-    
-    public String supportedMethods() {
-        return "GET";
-    }
+       public void handleGet(URI uri, HTTPRequest req, ToadletContext ctx) 
throws ToadletContextClosedException, IOException, RedirectException {
+               // If we don't disconnect we will have pipelining issues
+               ctx.forceDisconnect();
+
+               String path = uri.getPath();
+               if(path.startsWith(StaticToadlet.ROOT_URL) && staticToadlet != 
null)
+                       staticToadlet.handleGet(uri, req, ctx);
+               else {
+                       String desc = L10n.getString("StartupToadlet.title");
+                       HTMLNode pageNode = 
ctx.getPageMaker().getPageNode(desc, false, ctx);
+                       HTMLNode headNode = 
ctx.getPageMaker().getHeadNode(pageNode);
+                       headNode.addChild("meta", new String[]{"http-equiv", 
"content"}, new String[]{"refresh", "20; url="});
+                       HTMLNode contentNode = 
ctx.getPageMaker().getContentNode(pageNode);
+
+                       if(!isPRNGReady) {
+                               HTMLNode prngInfobox = 
contentNode.addChild(ctx.getPageMaker().getInfobox("infobox-error", 
L10n.getString("StartupToadlet.entropyErrorTitle")));
+                               HTMLNode prngInfoboxContent = 
ctx.getPageMaker().getContentNode(prngInfobox);
+                               prngInfoboxContent.addChild("#", 
L10n.getString("StartupToadlet.entropyErrorContent"));
+                       }
+
+                       HTMLNode infobox = 
contentNode.addChild(ctx.getPageMaker().getInfobox("infobox-error", desc));
+                       HTMLNode infoboxContent = 
ctx.getPageMaker().getContentNode(infobox);
+                       infoboxContent.addChild("#", 
L10n.getString("StartupToadlet.isStartingUp"));
+
+                       WelcomeToadlet.maybeDisplayWrapperLogfile(ctx, 
contentNode);
+
+                       //TODO: send a Retry-After header ?
+                       writeHTMLReply(ctx, 503, desc, pageNode.generate());
+               }
+       }
+
+       public String supportedMethods() {
+               return "GET";
+       }
+
+       public void setIsPRNGReady() {
+               isPRNGReady = true;
+       }
 }
\ No newline at end of file

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/Bookmark.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/Bookmark.java
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/Bookmark.java
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -1,36 +1,35 @@
 package freenet.clients.http.bookmark;

+import freenet.l10n.L10n;
 import freenet.support.SimpleFieldSet;

 public abstract class Bookmark {

-    protected String name;
+       protected String name;

-    public String getName() {
-        return name;
-    }
+       public String getName() {
+               return name;
+       }

-    protected void setName(String s) {
-        name = s;
-    }
+       protected void setName(String s) {
+               name = (s.length() > 0 ? s : L10n.getString("Bookmark.noName"));
+       }

-    public boolean equals(Object o) {
-        if (o == this)
-               return true;
-        if (o instanceof Bookmark) {
-            Bookmark b = (Bookmark) o;
-            if (!b.name.equals(name)) {
-                return false;
-            }
-            return true;
-        } else {
-            return false;
-        }
-    }
-    
-    public int hashCode() {
-       return name.hashCode();
-    }
-    
-    public abstract SimpleFieldSet getSimpleFieldSet();
+       public boolean equals(Object o) {
+               if(o == this)
+                       return true;
+               if(o instanceof Bookmark) {
+                       Bookmark b = (Bookmark) o;
+                       if(!b.name.equals(name))
+                               return false;
+                       return true;
+               } else
+                       return false;
+       }
+
+       public int hashCode() {
+               return name.hashCode();
+       }
+
+       public abstract SimpleFieldSet getSimpleFieldSet();
 }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/filter/HTMLFilter.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/filter/HTMLFilter.java
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/filter/HTMLFilter.java
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -1815,8 +1815,6 @@
                                        }
                                }
                        }
-                       if (hn.isEmpty())
-                               return null;
                        return hn;
                }
        }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-07-07 15:51:48 UTC (rev 20999)
@@ -7,19 +7,19 @@
 BookmarkCategory0.Content.Bookmark0.Name=The Ultimate FreeNet Index
 BookmarkCategory0.Content.Bookmark0.Description=A new one-page index with a 
menu including categories
 BookmarkCategory0.Content.Bookmark0.hasAnActivelink=true
-BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/24/
+BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/25/
 BookmarkCategory0.Content.Bookmark3.Name=Index des sites Fran?ais
 BookmarkCategory0.Content.Bookmark3.Description=A small French index with 
descriptions
 BookmarkCategory0.Content.Bookmark3.hasAnActivelink=true
-BookmarkCategory0.Content.Bookmark3.URI=USK at 
RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/50/
+BookmarkCategory0.Content.Bookmark3.URI=USK at 
RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/54/
 BookmarkCategory0.Content.Bookmark2.Name=Freenet Activelink Index (SLOW: 
graphical index, preloads all the sites, so takes *ages* to load)
 BookmarkCategory0.Content.Bookmark2.hasAnActivelink=true
 BookmarkCategory0.Content.Bookmark2.Description=A graphical freenet index 
(this will take a long time to load as it preloads the sites)
-BookmarkCategory0.Content.Bookmark2.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/60/
+BookmarkCategory0.Content.Bookmark2.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/67/
 BookmarkCategory0.Content.Bookmark1.Name=Freenet Activelink Index Text Version 
(a quick-loading non-graphical index site, no porn)
 BookmarkCategory0.Content.Bookmark1.hasAnActivelink=true
 BookmarkCategory0.Content.Bookmark1.Description=Text version of the Activelink 
Index
-BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/23/
+BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/30/
 BookmarkCategory1.Name=Freenet devel's flogs
 BookmarkCategory1.Content.BookmarkCategory=0
 BookmarkCategory1.Content.Bookmark=5
@@ -34,7 +34,7 @@
 BookmarkCategory1.Content.Bookmark2.Name=Bombe
 BookmarkCategory1.Content.Bookmark2.Description=Bombe's flog
 BookmarkCategory1.Content.Bookmark2.hasAnActivelink=true
-BookmarkCategory1.Content.Bookmark2.URI=USK at 
e3myoFyp5avg6WYN16ImHri6J7Nj8980Fm~aQe4EX1U,QvbWT0ImE0TwLODTl7EoJx2NBnwDxTbLTE6zkB-eGPs,AQACAAE/bombe/38/
+BookmarkCategory1.Content.Bookmark2.URI=USK at 
e3myoFyp5avg6WYN16ImHri6J7Nj8980Fm~aQe4EX1U,QvbWT0ImE0TwLODTl7EoJx2NBnwDxTbLTE6zkB-eGPs,AQACAAE/bombe/41/
 BookmarkCategory1.Content.Bookmark1.Name=Nextgen$
 BookmarkCategory1.Content.Bookmark1.Description=NextGen$' flog
 BookmarkCategory1.Content.Bookmark1.hasAnActivelink=true
@@ -49,7 +49,7 @@
 BookmarkCategory2.Content.Bookmark0.Name=Freenet Message System
 BookmarkCategory2.Content.Bookmark0.Description=The official freesite of FMS, 
a spam resistant message board system for Freenet
 BookmarkCategory2.Content.Bookmark0.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark0.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/55/
+BookmarkCategory2.Content.Bookmark0.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/62/
 BookmarkCategory2.Content.Bookmark1.Name=Freemail
 BookmarkCategory2.Content.Bookmark1.Description=The official site for Freemail 
- email over Freenet
 BookmarkCategory2.Content.Bookmark1.hasAnActivelink=true
@@ -62,7 +62,7 @@
 BookmarkCategory2.Content.Bookmark3.Name=Freesite HOWTO
 BookmarkCategory2.Content.Bookmark3.Description=A more detailed explanation of 
publishing freesites
 BookmarkCategory2.Content.Bookmark3.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark4.URI=USK at 
F-BKUq9vNTrvp7D90r5edQ4MfZCrx3pP7TofdDlCRoU,YFUeosm79Z3KZxC62qQCteCCUI3D-LYyRk6P9auVpPA,AQACAAE/freenetapps/22/
+BookmarkCategory2.Content.Bookmark4.URI=USK at 
ugb~uuscsidMI-Ze8laZe~o3BUIb3S50i25RIwDH99M,9T20t3xoG-dQfMO94LGOl9AxRTkaz~TykFY-voqaTQI,AQACAAE/FAFS/4/
 BookmarkCategory2.Content.Bookmark4.hasAnActivelink=true
 BookmarkCategory2.Content.Bookmark4.Name=The Freenet Applications Freesite
 BookmarkCategory2.Content.Bookmark4.Description=Various links to Freenet 
applications, and instructions for using them

Modified: branches/saltedhashstore/freenet/src/freenet/crypt/Yarrow.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/crypt/Yarrow.java      
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/crypt/Yarrow.java      
2008-07-07 15:51:48 UTC (rev 20999)
@@ -50,6 +50,7 @@
  * @author Scott G. Miller <scgmille at indiana.edu>
  */
 public class Yarrow extends RandomSource {
+
        private static final long serialVersionUID = -1;
        /**
         * Security parameters
@@ -57,36 +58,35 @@
        private static final boolean DEBUG = false;
        private static final int Pg = 10;
        private final SecureRandom sr;
-
        public final File seedfile; //A file to which seed data should be 
dumped periodically

        public Yarrow() {
-               this("prng.seed", "SHA1", "Rijndael",true);
+               this("prng.seed", "SHA1", "Rijndael", true);
        }

-       public Yarrow(String seed, String digest, String cipher,boolean 
updateSeed) {
-               this(new File(seed), digest, cipher,updateSeed);
+       public Yarrow(String seed, String digest, String cipher, boolean 
updateSeed) {
+               this(new File(seed), digest, cipher, updateSeed);
        }

-       public Yarrow(File seed, String digest, String cipher,boolean 
updateSeed) {
-           SecureRandom s;
-           try {
-            s = SecureRandom.getInstance("SHA1PRNG");
-        } catch (NoSuchAlgorithmException e) {
-            s = null;
-        }
-        sr = s;
-        try {
-            accumulator_init(digest);
-            reseed_init(digest);
-            generator_init(cipher);
-        } catch (NoSuchAlgorithmException e) {
-            Logger.error(this, "Could not init pools trying to 
getInstance("+digest+"): "+e, e);
-            throw new RuntimeException("Cannot initialize Yarrow!: "+e, e);
-        }
+       public Yarrow(File seed, String digest, String cipher, boolean 
updateSeed) {
+               SecureRandom s;
+               try {
+                       s = SecureRandom.getInstance("SHA1PRNG");
+               } catch(NoSuchAlgorithmException e) {
+                       s = null;
+               }
+               sr = s;
+               try {
+                       accumulator_init(digest);
+                       reseed_init(digest);
+                       generator_init(cipher);
+               } catch(NoSuchAlgorithmException e) {
+                       Logger.error(this, "Could not init pools trying to 
getInstance(" + digest + "): " + e, e);
+                       throw new RuntimeException("Cannot initialize Yarrow!: 
" + e, e);
+               }
                entropy_init(seed);
-               seedFromExternalStuff(false);
-               if (updateSeed && !(seed.toString()).equals("/dev/urandom")) 
//Dont try to update the seedfile if we know that it wont be possible anyways 
+               seedFromExternalStuff(true);
+               if(updateSeed && !(seed.toString()).equals("/dev/urandom")) 
//Dont try to update the seedfile if we know that it wont be possible anyways 
                        seedfile = seed;
                else
                        seedfile = null;
@@ -100,85 +100,82 @@

        public void seedFromExternalStuff(boolean canBlock) {
                byte[] buf = new byte[32];
-           if(File.separatorChar == '/') {
-               DataInputStream dis = null;
-               FileInputStream fis = null;
-               File hwrng = new File("/dev/hwrng");
-               if(hwrng.exists() && hwrng.canRead()) {
-                       try {
-                           fis = new FileInputStream(hwrng);
-                           dis = new DataInputStream(fis);
-                           dis.readFully(buf);
-                           consumeBytes(buf);
-                           dis.readFully(buf);
-                           consumeBytes(buf);
-                           dis.close();
-                       } catch (Throwable t) {
-                           Logger.normal(this, "Can't read /dev/hwrng even 
though exists and is readable: "+t, t);
-                       } finally {
-                           Closer.close(dis);
-                           Closer.close(fis);
-                       }
-               }
+               if(File.separatorChar == '/') {
+                       DataInputStream dis = null;
+                       FileInputStream fis = null;
+                       File hwrng = new File("/dev/hwrng");
+                       if(hwrng.exists() && hwrng.canRead())
+                               try {
+                                       fis = new FileInputStream(hwrng);
+                                       dis = new DataInputStream(fis);
+                                       dis.readFully(buf);
+                                       consumeBytes(buf);
+                                       dis.readFully(buf);
+                                       consumeBytes(buf);
+                                       dis.close();
+                               } catch(Throwable t) {
+                                       Logger.normal(this, "Can't read 
/dev/hwrng even though exists and is readable: " + t, t);
+                               } finally {
+                                       Closer.close(dis);
+                                       Closer.close(fis);
+                               }

-               boolean isSystemEntropyAvailable = true;
-               // Read some bits from /dev/urandom
-               try {
-                   fis = new FileInputStream("/dev/urandom");
-                   dis = new DataInputStream(fis);
-                   dis.readFully(buf);
-                   consumeBytes(buf);
-                   dis.readFully(buf);
-                   consumeBytes(buf);
-               } catch (Throwable t) {
-                   Logger.normal(this, "Can't read /dev/urandom: "+t, t);
-                   // We can't read it; let's skip /dev/random and seed from 
SecureRandom.generateSeed()
-                   canBlock = true;
-                   isSystemEntropyAvailable = false;
-               } finally {
-                   Closer.close(dis);
-                   Closer.close(fis);
-               }
-               if(canBlock && isSystemEntropyAvailable) {
-                   // Read some bits from /dev/random
-                   try {
-                       fis = new FileInputStream("/dev/random");
-                       dis = new DataInputStream(fis);
-                       dis.readFully(buf);
-                       consumeBytes(buf);
-                       dis.readFully(buf);
-                       consumeBytes(buf);
-                   } catch (Throwable t) {
-                       Logger.normal(this, "Can't read /dev/random: "+t, t);
-                   } finally {
-                           Closer.close(dis);
-                           Closer.close(fis);
-                   }
-               }
-               fis = null;
-           } else {
-               // Force generateSeed(), since we can't read random data from 
anywhere else.
-               // Anyway, Windows's CAPI won't block.
-               canBlock = true;
-           }
-           if(canBlock) {
-                   // SecureRandom hopefully acts as a proxy for CAPI on 
Windows
-                   buf = sr.generateSeed(32);
-                   consumeBytes(buf);
-                   buf = sr.generateSeed(32);
-                   consumeBytes(buf);
-           }
-           // A few more bits
-           consumeString(Long.toHexString(Runtime.getRuntime().freeMemory()));
-           consumeString(Long.toHexString(Runtime.getRuntime().totalMemory()));
+                       boolean isSystemEntropyAvailable = true;
+                       // Read some bits from /dev/urandom
+                       try {
+                               fis = new FileInputStream("/dev/urandom");
+                               dis = new DataInputStream(fis);
+                               dis.readFully(buf);
+                               consumeBytes(buf);
+                               dis.readFully(buf);
+                               consumeBytes(buf);
+                       } catch(Throwable t) {
+                               Logger.normal(this, "Can't read /dev/urandom: " 
+ t, t);
+                               // We can't read it; let's skip /dev/random and 
seed from SecureRandom.generateSeed()
+                               canBlock = true;
+                               isSystemEntropyAvailable = false;
+                       } finally {
+                               Closer.close(dis);
+                               Closer.close(fis);
+                       }
+                       if(canBlock && isSystemEntropyAvailable)
+                               // Read some bits from /dev/random
+                               try {
+                                       fis = new 
FileInputStream("/dev/random");
+                                       dis = new DataInputStream(fis);
+                                       dis.readFully(buf);
+                                       consumeBytes(buf);
+                                       dis.readFully(buf);
+                                       consumeBytes(buf);
+                               } catch(Throwable t) {
+                                       Logger.normal(this, "Can't read 
/dev/random: " + t, t);
+                               } finally {
+                                       Closer.close(dis);
+                                       Closer.close(fis);
+                               }
+                       fis = null;
+               } else
+                       // Force generateSeed(), since we can't read random 
data from anywhere else.
+                       // Anyway, Windows's CAPI won't block.
+                       canBlock = true;
+               if(canBlock) {
+                       // SecureRandom hopefully acts as a proxy for CAPI on 
Windows
+                       buf = sr.generateSeed(32);
+                       consumeBytes(buf);
+                       buf = sr.generateSeed(32);
+                       consumeBytes(buf);
+               }
+               // A few more bits
+               
consumeString(Long.toHexString(Runtime.getRuntime().freeMemory()));
+               
consumeString(Long.toHexString(Runtime.getRuntime().totalMemory()));
        }
-       
-    private void entropy_init(File seed) {
+
+       private void entropy_init(File seed) {
                Properties sys = System.getProperties();
                EntropySource startupEntropy = new EntropySource();

                // Consume the system properties list
-               for (Enumeration enu = sys.propertyNames(); 
enu.hasMoreElements();) {
+               for(Enumeration enu = sys.propertyNames(); 
enu.hasMoreElements();) {
                        String key = (String) enu.nextElement();
                        consumeString(key);
                        consumeString(sys.getProperty(key));
@@ -187,8 +184,8 @@
                // Consume the local IP address
                try {
                        consumeString(InetAddress.getLocalHost().toString());
-               } catch (Exception e) {
-                   // Ignore
+               } catch(Exception e) {
+                       // Ignore
                }

                readStartupEntropy(startupEntropy);
@@ -227,32 +224,29 @@
                        dis.close();
                } catch(IOException e) {
                        Logger.error(this, "IOE trying to read the seedfile 
from disk : " + e.getMessage());
-               }
-               finally {
+               } finally {
                        Closer.close(dis);
                        Closer.close(bis);
                        Closer.close(fis);
                }
                fast_pool_reseed();
        }
+       private long timeLastWroteSeed = -1;

-       private long timeLastWroteSeed = -1;
-       
        public void write_seed(File filename) {
                write_seed(filename, false);
        }
-       
+
        public void write_seed(File filename, boolean force) {
-               if(!force) {
+               if(!force)
                        synchronized(this) {
                                long now = System.currentTimeMillis();
-                               if(now - timeLastWroteSeed <= 60*60*1000 /* 
once per hour */) {
+                               if(now - timeLastWroteSeed <= 60 * 60 * 1000 /* 
once per hour */)
                                        return;
-                               } else
+                               else
                                        timeLastWroteSeed = now;
                        }
-               }
-               
+
                FileOutputStream fos = null;
                BufferedOutputStream bos = null;
                DataOutputStream dos = null;
@@ -263,25 +257,23 @@

                        for(int i = 0; i < 32; i++)
                                dos.writeLong(nextLong());
-                       
+
                        dos.flush();
                        dos.close();
                } catch(IOException e) {
                        Logger.error(this, "IOE while saving the seed file! : " 
+ e.getMessage());
-               }
-               finally {
+               } finally {
                        Closer.close(dos);
                        Closer.close(bos);
                        Closer.close(fos);
                }
        }
-
        /**
         * 5.1 Generation Mechanism
         */
        private BlockCipher cipher_ctx;
-       private byte[] output_buffer, counter, allZeroString, tmp;
-       private int output_count, fetch_counter;
+       private byte[] output_buffer,  counter,  allZeroString,  tmp;
+       private int output_count,  fetch_counter;

        private void generator_init(String cipher) {
                cipher_ctx = Util.getCipherByName(cipher);
@@ -294,8 +286,8 @@
        }

        private final void counterInc() {
-               for (int i = counter.length - 1; i >= 0; i--)
-                       if (++counter[i] != 0)
+               for(int i = counter.length - 1; i >= 0; i--)
+                       if(++counter[i] != 0)
                                break;
        }

@@ -305,7 +297,7 @@
                output_buffer = new byte[counter.length];
                cipher_ctx.encipher(counter, output_buffer);

-               if (output_count++ > Pg) {
+               if(output_count++ > Pg) {
                        output_count = 0;
                        nextBytes(tmp);
                        rekey(tmp);
@@ -323,7 +315,7 @@
        // an offset to the bytes
        private synchronized int getBytes(int count) {

-               if (fetch_counter + count > output_buffer.length) {
+               if(fetch_counter + count > output_buffer.length) {
                        fetch_counter = 0;
                        generateOutput();
                        return getBytes(count);
@@ -333,45 +325,72 @@
                fetch_counter += count;
                return rv;
        }
+       static final int bitTable[][] = {{0, 0x0}, {
+                       1, 0x1
+               }, {
+                       1, 0x3
+               }, {
+                       1, 0x7
+               }, {
+                       1, 0xf
+               }, {
+                       1, 0x1f
+               }, {
+                       1, 0x3f
+               }, {
+                       1, 0x7f
+               }, {
+                       1, 0xff
+               }, {
+                       2, 0x1ff
+               }, {
+                       2, 0x3ff
+               }, {
+                       2, 0x7ff
+               }, {
+                       2, 0xfff
+               }, {
+                       2, 0x1fff
+               }, {
+                       2, 0x3fff
+               }, {
+                       2, 0x7fff
+               }, {
+                       2, 0xffff
+               }, {
+                       3, 0x1ffff
+               }, {
+                       3, 0x3ffff
+               }, {
+                       3, 0x7ffff
+               }, {
+                       3, 0xfffff
+               }, {
+                       3, 0x1fffff
+               }, {
+                       3, 0x3fffff
+               }, {
+                       3, 0x7fffff
+               }, {
+                       3, 0xffffff
+               }, {
+                       4, 0x1ffffff
+               }, {
+                       4, 0x3ffffff
+               }, {
+                       4, 0x7ffffff
+               }, {
+                       4, 0xfffffff
+               }, {
+                       4, 0x1fffffff
+               }, {
+                       4, 0x3fffffff
+               }, {
+                       4, 0x7fffffff
+               }, {
+                       4, 0xffffffff
+               }};

-       static final int bitTable[][] = { { 0, 0x0 }, {
-                       1, 0x1 }, {
-                       1, 0x3 }, {
-                       1, 0x7 }, {
-                       1, 0xf }, {
-                       1, 0x1f }, {
-                       1, 0x3f }, {
-                       1, 0x7f }, {
-                       1, 0xff }, {
-
-                       2, 0x1ff }, {
-                       2, 0x3ff }, {
-                       2, 0x7ff }, {
-                       2, 0xfff }, {
-                       2, 0x1fff }, {
-                       2, 0x3fff }, {
-                       2, 0x7fff }, {
-                       2, 0xffff }, {
-
-                       3, 0x1ffff }, {
-                       3, 0x3ffff }, {
-                       3, 0x7ffff }, {
-                       3, 0xfffff }, {
-                       3, 0x1fffff }, {
-                       3, 0x3fffff }, {
-                       3, 0x7fffff }, {
-                       3, 0xffffff }, {
-
-                       4, 0x1ffffff }, {
-                       4, 0x3ffffff }, {
-                       4, 0x7ffffff }, {
-                       4, 0xfffffff }, {
-                       4, 0x1fffffff }, {
-                       4, 0x3fffffff }, {
-                       4, 0x7fffffff }, {
-                       4, 0xffffffff }
-       };
-
        // This may *look* more complicated than in is, but in fact it is
        // loop unrolled, cache and operation optimized.
        // So don't try to simplify it... Thanks. :)
@@ -382,52 +401,48 @@

                int val = output_buffer[offset];

-               if (parameters[0] == 4)
-                       val += (output_buffer[offset + 1] << 24)
-                               + (output_buffer[offset + 2] << 16)
-                               + (output_buffer[offset + 3] << 8);
-               else if (parameters[0] == 3)
-                       val += (output_buffer[offset + 1] << 16)
-                               + (output_buffer[offset + 2] << 8);
-               else if (parameters[0] == 2)
+               if(parameters[0] == 4)
+                       val += (output_buffer[offset + 1] << 24) + 
(output_buffer[offset + 2] << 16) + (output_buffer[offset + 3] << 8);
+               else if(parameters[0] == 3)
+                       val += (output_buffer[offset + 1] << 16) + 
(output_buffer[offset + 2] << 8);
+               else if(parameters[0] == 2)
                        val += output_buffer[offset + 2] << 8;

                return val & parameters[1];
        }
-
        /**
         * 5.2 Entropy Accumulator
         */
-       private MessageDigest fast_pool, slow_pool;
-       private int fast_entropy, slow_entropy;
+       private MessageDigest fast_pool,  slow_pool;
+       private int fast_entropy,  slow_entropy;
        private boolean fast_select;
        private Hashtable entropySeen;

        private void accumulator_init(String digest) throws 
NoSuchAlgorithmException {
-        fast_pool = MessageDigest.getInstance(digest);
-               slow_pool = MessageDigest.getInstance(digest);
+               fast_pool = MessageDigest.getInstance(digest);
+               slow_pool = MessageDigest.getInstance(digest);
                entropySeen = new Hashtable();
        }

        public int acceptEntropy(EntropySource source, long data, int 
entropyGuess) {
                return acceptEntropy(source, data, entropyGuess, 1.0);
        }
-       
-    public int acceptEntropyBytes(EntropySource source, byte[] buf, int 
offset, 
-            int length, double bias) {
-        int totalRealEntropy = 0;
-        for(int i=0;i<length;i+=8) {
-            long thingy = 0;
-            int bytes = 0;
-            for(int j=0;j<Math.min(length,i+8);j++) {
-                thingy = (thingy << 8) + buf[j];
-                bytes++;
-            }
-            totalRealEntropy += acceptEntropy(source, thingy, bytes*8, bias);
-        }
-        return totalRealEntropy;
-    }
-    
+
+       public int acceptEntropyBytes(EntropySource source, byte[] buf, int 
offset,
+               int length, double bias) {
+               int totalRealEntropy = 0;
+               for(int i = 0; i < length; i += 8) {
+                       long thingy = 0;
+                       int bytes = 0;
+                       for(int j = 0; j < Math.min(length, i + 8); j++) {
+                               thingy = (thingy << 8) + buf[j];
+                               bytes++;
+                       }
+                       totalRealEntropy += acceptEntropy(source, thingy, bytes 
* 8, bias);
+               }
+               return totalRealEntropy;
+       }
+
        public int acceptEntropy(
                EntropySource source,
                long data,
@@ -437,15 +452,15 @@
                        data,
                        source,
                        (int) (bias * Math.min(
-                               32,
-                               Math.min(estimateEntropy(source, data), 
entropyGuess))));
+                       32,
+                       Math.min(estimateEntropy(source, data), 
entropyGuess))));
        }

        private int accept_entropy(long data, EntropySource source, int 
actualEntropy) {

                boolean performedPoolReseed = false;

-               synchronized (this) {
+               synchronized(this) {
                        fast_select = !fast_select;
                        MessageDigest pool = (fast_select ? fast_pool : 
slow_pool);
                        pool.update((byte) data);
@@ -457,33 +472,33 @@
                        pool.update((byte) (data >> 48));
                        pool.update((byte) (data >> 56));

-                       if (fast_select) {
+                       if(fast_select) {
                                fast_entropy += actualEntropy;
-                               if (fast_entropy > FAST_THRESHOLD) {
+                               if(fast_entropy > FAST_THRESHOLD) {
                                        fast_pool_reseed();
                                        performedPoolReseed = true;
                                }
                        } else {
                                slow_entropy += actualEntropy;

-                               if (source != null) {
+                               if(source != null) {
                                        Integer contributedEntropy = (Integer) 
entropySeen.get(source);
-                                       if (contributedEntropy == null)
+                                       if(contributedEntropy == null)
                                                contributedEntropy = new 
Integer(actualEntropy);
                                        else
                                                contributedEntropy = new 
Integer(actualEntropy + contributedEntropy.intValue());
                                        entropySeen.put(source, 
contributedEntropy);

-                                       if (slow_entropy >= (SLOW_THRESHOLD * 
2)) {
+                                       if(slow_entropy >= (SLOW_THRESHOLD * 
2)) {
                                                int kc = 0;
-                                               for (Enumeration enu = 
entropySeen.keys(); enu.hasMoreElements();) {
+                                               for(Enumeration enu = 
entropySeen.keys(); enu.hasMoreElements();) {
                                                        Object key = 
enu.nextElement();
                                                        Integer v = (Integer) 
entropySeen.get(key);
-                                                       if (DEBUG)
+                                                       if(DEBUG)
                                                                
Logger.normal(this, "Key: <" + key + "> " + v);
-                                                       if (v.intValue() > 
SLOW_THRESHOLD) {
+                                                       if(v.intValue() > 
SLOW_THRESHOLD) {
                                                                kc++;
-                                                               if (kc >= 
SLOW_K) {
+                                                               if(kc >= 
SLOW_K) {
                                                                        
slow_pool_reseed();
                                                                        
performedPoolReseed = true;
                                                                        break;
@@ -493,18 +508,20 @@
                                        }
                                }
                        }
-                       if (DEBUG)
+                       if(DEBUG)
                                //          Core.logger.log(this,"Fast pool: 
"+fast_entropy+"\tSlow pool:
                                // "+slow_entropy, Logger.NORMAL);
                                System.err.println("Fast pool: " + fast_entropy 
+ "\tSlow pool: " + slow_entropy);
                }
-               if (performedPoolReseed && (seedfile != null)) {
+               if(performedPoolReseed && (seedfile != null)) {
                        //Dont do this while synchronized on 'this' since
                        //opening a file seems to be suprisingly slow on windows
                        boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
-                       if(logMINOR) Logger.minor(this, "Writing seedfile");
-                       write_seed(seedfile); 
-                       if(logMINOR) Logger.minor(this, "Written seedfile");
+                       if(logMINOR)
+                               Logger.minor(this, "Writing seedfile");
+                       write_seed(seedfile);
+                       if(logMINOR)
+                               Logger.minor(this, "Written seedfile");
                }

                return actualEntropy;
@@ -518,15 +535,15 @@
                int delta3 = delta2 - source.lastDelta2;
                source.lastDelta2 = delta2;

-               if (delta < 0)
+               if(delta < 0)
                        delta = -delta;
-               if (delta2 < 0)
+               if(delta2 < 0)
                        delta2 = -delta2;
-               if (delta3 < 0)
+               if(delta3 < 0)
                        delta3 = -delta3;
-               if (delta > delta2)
+               if(delta > delta2)
                        delta = delta2;
-               if (delta > delta3)
+               if(delta > delta3)
                        delta = delta3;

                /*
@@ -555,9 +572,9 @@
        }

        public int acceptTimerEntropy(EntropySource timer) {
-           return acceptTimerEntropy(timer, 1.0);
+               return acceptTimerEntropy(timer, 1.0);
        }
-       
+
        public int acceptTimerEntropy(EntropySource timer, double bias) {
                long now = System.currentTimeMillis();
                return acceptEntropy(timer, now - timer.lastVal, 32, bias);
@@ -570,7 +587,6 @@
         */
        public void waitForEntropy(int bits) {
        }
-
        /**
         * 5.3 Reseed mechanism
         */
@@ -586,7 +602,7 @@
                byte[] v0 = fast_pool.digest();
                byte[] vi = v0;

-               for (byte i = 0; i < Pt; i++) {
+               for(byte i = 0; i < Pt; i++) {
                        reseed_ctx.update(vi, 0, vi.length);
                        reseed_ctx.update(v0, 0, v0.length);
                        reseed_ctx.update(i);
@@ -600,7 +616,7 @@
                fast_entropy = 0;
                long endTime = System.currentTimeMillis();
                if(endTime - startTime > 5000)
-                       Logger.normal(this, "Fast pool reseed took 
"+(endTime-startTime)+"ms");
+                       Logger.normal(this, "Fast pool reseed took " + (endTime 
- startTime) + "ms");
        }

        private void slow_pool_reseed() {
@@ -611,16 +627,13 @@
                slow_entropy = 0;

                Integer ZERO = new Integer(0);
-               for (Enumeration enu = entropySeen.keys(); 
enu.hasMoreElements();)
+               for(Enumeration enu = entropySeen.keys(); 
enu.hasMoreElements();)
                        entropySeen.put(enu.nextElement(), ZERO);
        }
-
        /**
         * 5.4 Reseed Control parameters
         */
-       private static final int FAST_THRESHOLD = 100,
-               SLOW_THRESHOLD = 160,
-               SLOW_K = 2;
+       private static final int FAST_THRESHOLD = 100,  SLOW_THRESHOLD = 160,  
SLOW_K = 2;

        /**
         * If the RandomSource has any resources it wants to close, it can do so
@@ -633,58 +646,53 @@
         * Test routine
         */
        public static void main(String[] args) throws Exception {
-               Yarrow r = new Yarrow(new File("/dev/urandom"), "SHA1", 
"Rijndael",true);
+               Yarrow r = new Yarrow(new File("/dev/urandom"), "SHA1", 
"Rijndael", true);

                byte[] b = new byte[1024];

-               if ((args.length == 0) || args[0].equalsIgnoreCase("latency")) {
-                       if (args.length == 2)
+               if((args.length == 0) || args[0].equalsIgnoreCase("latency")) {
+                       if(args.length == 2)
                                b = new byte[Integer.parseInt(args[1])];
                        long start = System.currentTimeMillis();
-                       for (int i = 0; i < 100; i++)
+                       for(int i = 0; i < 100; i++)
                                r.nextBytes(b);
                        System.out.println(
-                               (double) (System.currentTimeMillis() - start)
-                                       / (100 * b.length)
-                                       * 1024
-                                       + " ms/k");
+                               (double) (System.currentTimeMillis() - start) / 
(100 * b.length) * 1024 + " ms/k");
                        start = System.currentTimeMillis();
-                       for (int i = 0; i < 1000; i++)
+                       for(int i = 0; i < 1000; i++)
                                r.nextInt();
                        System.out.println(
-                               (double) (System.currentTimeMillis() - start) / 
1000
-                                       + " ms/int");
+                               (double) (System.currentTimeMillis() - start) / 
1000 + " ms/int");
                        start = System.currentTimeMillis();
-                       for (int i = 0; i < 1000; i++)
+                       for(int i = 0; i < 1000; i++)
                                r.nextLong();
                        System.out.println(
-                               (double) (System.currentTimeMillis() - start) / 
1000
-                                       + " ms/long");
-               } else if (args[0].equalsIgnoreCase("randomness")) {
+                               (double) (System.currentTimeMillis() - start) / 
1000 + " ms/long");
+               } else if(args[0].equalsIgnoreCase("randomness")) {
                        int kb = Integer.parseInt(args[1]);
-                       for (int i = 0; i < kb; i++) {
+                       for(int i = 0; i < kb; i++) {
                                r.nextBytes(b);
                                System.out.write(b);
                        }
-               } else if (args[0].equalsIgnoreCase("gathering")) {
+               } else if(args[0].equalsIgnoreCase("gathering")) {
                        System.gc();
                        EntropySource t = new EntropySource();
                        long start = System.currentTimeMillis();
-                       for (int i = 0; i < 100000; i++)
+                       for(int i = 0; i < 100000; i++)
                                r.acceptEntropy(t, System.currentTimeMillis(), 
32);
                        System.err.println(
                                (double) (System.currentTimeMillis() - start) / 
100000);
                        System.gc();
                        start = System.currentTimeMillis();
-                       for (int i = 0; i < 100000; i++)
+                       for(int i = 0; i < 100000; i++)
                                r.acceptTimerEntropy(t);
                        System.err.println(
                                (double) (System.currentTimeMillis() - start) / 
100000);
-               } else if (args[0].equalsIgnoreCase("volume")) {
+               } else if(args[0].equalsIgnoreCase("volume")) {
                        b = new byte[1020];
                        long duration =
                                System.currentTimeMillis() + 
Integer.parseInt(args[1]);
-                       while (System.currentTimeMillis() < duration) {
+                       while(System.currentTimeMillis() < duration) {
                                r.nextBytes(b);
                                System.out.write(b);
                        }
@@ -697,71 +705,68 @@
 //                             r.nextBytes(buffer);
 //                             System.out.write(buffer);
 //                     }
-               } else if (args[0].equalsIgnoreCase("bitstream")) {
-                       while (true) {
+               } else if(args[0].equalsIgnoreCase("bitstream"))
+                       while(true) {
                                int v = r.nextInt();
-                               for (int i = 0; i < 32; i++) {
-                                       if (((v >> i) & 1) == 1)
+                               for(int i = 0; i < 32; i++) {
+                                       if(((v >> i) & 1) == 1)
                                                System.out.print('1');
                                        else
                                                System.out.print('0');
                                }
                        }
-               } else if (args[0].equalsIgnoreCase("sample")) {
-                       if ((args.length == 1) || args[1].equals("general")) {
+               else if(args[0].equalsIgnoreCase("sample"))
+                       if((args.length == 1) || args[1].equals("general")) {
                                System.out.println("nextInt(): ");
-                               for (int i = 0; i < 3; i++)
+                               for(int i = 0; i < 3; i++)
                                        System.out.println(r.nextInt());
                                System.out.println("nextLong(): ");
-                               for (int i = 0; i < 3; i++)
+                               for(int i = 0; i < 3; i++)
                                        System.out.println(r.nextLong());
                                System.out.println("nextFloat(): ");
-                               for (int i = 0; i < 3; i++)
+                               for(int i = 0; i < 3; i++)
                                        System.out.println(r.nextFloat());
                                System.out.println("nextDouble(): ");
-                               for (int i = 0; i < 3; i++)
+                               for(int i = 0; i < 3; i++)
                                        System.out.println(r.nextDouble());
                                System.out.println("nextFullFloat(): ");
-                               for (int i = 0; i < 3; i++)
+                               for(int i = 0; i < 3; i++)
                                        System.out.println(r.nextFullFloat());
                                System.out.println("nextFullDouble(): ");
-                               for (int i = 0; i < 3; i++)
+                               for(int i = 0; i < 3; i++)
                                        System.out.println(r.nextFullDouble());
-                       } else if (args[1].equals("normalized")) {
-                               for (int i = 0; i < 20; i++)
+                       } else if(args[1].equals("normalized"))
+                               for(int i = 0; i < 20; i++)
                                        System.out.println(r.nextDouble());
-                       }
-               }
        }

        private void consumeString(String str) {
                byte[] b;
                try {
                        b = str.getBytes("UTF-8");
-               } catch (UnsupportedEncodingException e) {
+               } catch(UnsupportedEncodingException e) {
                        throw new Error("Impossible: JVM doesn't support UTF-8: 
" + e, e);
                }
                consumeBytes(b);
        }

        private void consumeBytes(byte[] bytes) {
-               if (fast_select) {
+               if(fast_select)
                        fast_pool.update(bytes, 0, bytes.length);
-               } else {
+               else
                        slow_pool.update(bytes, 0, bytes.length);
-               }
                fast_select = !fast_select;
        }

-    public String getCheckpointName() {
-        return "Yarrow random number generator checkpoint";
-    }
+       public String getCheckpointName() {
+               return "Yarrow random number generator checkpoint";
+       }

-    public long nextCheckpoint() {
-        return System.currentTimeMillis() + 60*60*1000;
-    }
+       public long nextCheckpoint() {
+               return System.currentTimeMillis() + 60 * 60 * 1000;
+       }

-    public void checkpoint() {
-        seedFromExternalStuff(true);
-    }
+       public void checkpoint() {
+               seedFromExternalStuff(true);
+       }
 }

Modified: branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-07-07 
15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-07-07 
15:51:48 UTC (rev 20999)
@@ -34,19 +34,19 @@
        public static final String FALLBACK_DEFAULT = "en";
        /** @see http://www.omniglot.com/language/names.htm */
        public static final String[][] AVAILABLE_LANGUAGES = {
-               new String[] { "en", "English" },
-               new String[] { "es", "Espa?ol" },
-               new String[] { "da", "Dansk" },
-               new String[] { "de", "Deutsch" },
-               new String[] { "fi", "Suomi" },
-               new String[] { "fr", "Fran?ais" },
-               new String[] { "it", "Italiano" },
-               new String[] { "no", "Norsk" },
-               new String[] { "pl", "Polski" },
-               new String[] { "se", "Svenska" },
-               new String[] { "zh-cn", "??(??)" },
-               new String[] { "zh-tw", "??(??)" },
-               new String[] { "unlisted", "unlisted"},
+               new String[] { "en", "English", "eng" },
+               new String[] { "es", "Espa?ol", "spa" },
+               new String[] { "da", "Dansk", "dan" },
+               new String[] { "de", "Deutsch", "deu" },
+               new String[] { "fi", "Suomi", "fin" },
+               new String[] { "fr", "Fran?ais", "fra" },
+               new String[] { "it", "Italiano", "ita" },
+               new String[] { "no", "Norsk", "nor" },
+               new String[] { "pl", "Polski", "pol" },
+               new String[] { "se", "Svenska", "svk" },
+               new String[] { "zh-cn", "??(??)", "chn" },
+               new String[] { "zh-tw", "??(??)", "zh-tw" },
+               new String[] { "unlisted", "unlisted", "unlisted"},
        };
        private final String selectedLanguage;

@@ -59,7 +59,7 @@

        L10n(String selected) {
                selectedLanguage = selected;
-               File tmpFile = new File(L10n.PREFIX + selected + 
L10n.OVERRIDE_SUFFIX);
+               File tmpFile = new File(L10n.PREFIX + 
mapLanguageNameToShortCode(selected) + L10n.OVERRIDE_SUFFIX);

                try {
                        if(tmpFile.exists() && tmpFile.canRead() && 
tmpFile.length() > 0) {
@@ -361,8 +361,9 @@
                for(int i=0; i<AVAILABLE_LANGUAGES.length; i++) {
                        String currentShortCode = AVAILABLE_LANGUAGES[i][0];
                        String currentLongName = AVAILABLE_LANGUAGES[i][1];
+                       String currentCountryCodeName = 
AVAILABLE_LANGUAGES[i][2];

-                       if(currentShortCode.equalsIgnoreCase(name) || 
currentLongName.equalsIgnoreCase(name))
+                       if(currentShortCode.equalsIgnoreCase(name) || 
currentLongName.equalsIgnoreCase(name) || 
currentCountryCodeName.equalsIgnoreCase(name))
                                return currentShortCode;
                }
                return null;

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties    
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties    
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -9,6 +9,7 @@
 Announcer.announceDisabledTooOldShort=The node has tried to connect to the 
network but your copy of Freenet is too old. You should upgrade.
 Announcer.announceAlertShort=The node is trying to connect to the network, it 
will be slow for a while.
 Announcer.coolingOff=For the next ${time} seconds, the node is waiting for the 
nodes that it just announced to to connect, if there are not enough nodes it 
will try a different node.
+Bookmark.noName=no name
 BookmarkEditorToadlet.addBookmark=Add Bookmark
 BookmarkEditorToadlet.addCategory=Add Category
 BookmarkEditorToadlet.addNewBookmark=Add a new bookmark
@@ -1045,6 +1046,10 @@
 SSL.keyPassLong=Password of private key access
 SSL.version=Version of SSL
 SSL.versionLong=Version of SSL, SSLv3 or TLSv1 (default SSLv3)
+StartupToadlet.entropyErrorTitle=Not enough entropy is available!
+StartupToadlet.entropyErrorContent=There isn't enough entropy available on 
your system... Freenet won't start until it can gather enough.
+StartupToadlet.isStartingUp=Your freenet node is starting up, please hold on.
+StartupToadlet.title=Freenet is starting up
 StaticToadlet.pathInvalidChars=The given URI contains disallowed characters.
 StaticToadlet.pathNotFound=The path you specified doesn't exist.
 StaticToadlet.pathNotFoundTitle=Path Not Found

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties    
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties    
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -85,6 +85,10 @@
 ConfigToadlet.fproxy=fproxy
 ConfigToadlet.fullTitle=Configuration du noeud ${name}
 ConfigToadlet.logger=enregistreur de logs
+ConfigToadlet.modeAdvanced=Options de configuration avanc?es
+ConfigToadlet.modeAdvancedTooltip=Options de configuration utiles uniquement 
aux utilisateurs exp?riment?s et aux d?veloppeurs
+ConfigToadlet.modeSimple=Options de configuration simple
+ConfigToadlet.modeSimpleTooltip=Options de configuration utiles ? tous les 
utilisateurs
 ConfigToadlet.node=noeud
 ConfigToadlet.pluginmanager=gestionnaire de plugins
 ConfigToadlet.pluginmanager2=gestionnaire de plugins 2
@@ -439,7 +443,7 @@
 FirstTimeWizardToadlet.noNetworkIF=Pas d'autre carte r?seau trouv?e
 FirstTimeWizardToadlet.noNetworkIFLong=Freenet n'a pas trouv? d'autre carte 
r?seau. Il consid?rera que vous vous y connectez seulement depuis votre 
ordinateur.
 FirstTimeWizardToadlet.opennetNo=Oui, j'ai au moins 5 amis qui utilisent 
Freenet et je vais les ajouter manuellement sur la page Amis.
-FirstTimeWizardToadlet.opennetWarning=Freenet est peut-?tre ill?gal dans votre 
pays, car il permet une libert? d'expression sans restrictions. Si c'est le 
cas, et que vous utilisez la connexion automatique ? des inconnus, votre 
gouvernement pourra savoir facilement que vous utilisez Freenet; vous ne 
devriez donc pas activer ce mode et ne devriez vous connecter qu'? des gens que 
vous connaissez (et en qui vous avez confiance). Freenet est toujours en 
version b?ta, nous ne garantissons pas qu'il est exempt de bugs, et par 
cons?quent, ne pouvons garantir votre anonymat/s?curit?. Il faut faire 
particuli?rement attention aux gens avec qui vous vous connectez: ce sont eux 
qui sont eux qui occupent la meilleure place pour espionner vos requ?tes.
+FirstTimeWizardToadlet.opennetWarning=Freenet est peut-?tre ill?gal dans votre 
pays, car il permet une libert? d'expression sans restrictions. Si c'est le 
cas, et que vous utilisez la connexion automatique ? des inconnus, votre 
gouvernement pourra savoir facilement que vous utilisez Freenet; vous ne 
devriez donc pas activer ce mode et ne devriez vous connecter qu'? des gens que 
vous connaissez (et en qui vous avez confiance). Freenet est toujours 
exp?rimental, nous ne garantissons pas qu'il est exempt de bugs, et par 
cons?quent, ne pouvons garantir votre anonymat/s?curit?. Il faut faire 
particuli?rement attention aux gens avec qui vous vous connectez: ils occupent 
la meilleure place pour espionner vos requ?tes.
 FirstTimeWizardToadlet.opennetYes=Non, je veux que le n?ud trouve 
automatiquement des gens ? qui se connecter.
 FirstTimeWizardToadlet.skipWizard=Je ne suis pas un d?butant, passer 
l'assistant !
 FirstTimeWizardToadlet.step1Title=Assistant de d?marrage Freenet ! - Amis et 
Inconnus
@@ -665,6 +669,9 @@
 Node.inBWLimit=Limite de t?l?chargement (octet/seconde)
 Node.inBWLimitLong=Limite de t?l?chargement (octets/seconde); le noeud 
essaiera de ne pas la d?passer ; -1 correspond ? 4x la limite d'upload
 Node.invalidStoreSize=Le store doit faire au moins 32Mo
+Node.java14ShortText=Java 1.4 ne sera pas support? tr?s longtemps, veuillez 
passer en version 1.5.
+Node.java14Text=Vous utilisez Freenet avec Java 1.4. Veuillez passer en 
version 1.5 au moins. Les mises ? jour automatiques ont ?t? d?sactiv?es car les 
prochaines versions risquent de ne pas fonctionner du tout.
+Node.java14Title=Java 1.4 n'est plus support?
 Node.l10nLanguage=Langue utilis?e pour afficher les messages
 Node.l10nLanguageLong=Le param?tre change la langue d'affichage des messages. 
Certaines cha?nes ne seront traduites qu'au prochain red?marrage.
 Node.maxHTL=HTL maximum
@@ -785,6 +792,10 @@
 OpennetUserAlert.warningTitle=Attention : Mode peu s?curis? : Votre n?ud va se 
connecter ? des inconnus
 PNGFilter.invalidHeader=Ce fichier n'est pas une image PNG. Il ne contient pas 
d'en-t?te PNG valide. Il peut s'agir de n'importe quoi et votre navigateur 
risque de faire quelque chose de dangereux avec. Nous l'avons donc bloqu?.
 PNGFilter.invalidHeaderTitle=Ceci n'est pas une image PNG - en-t?te invalide
+PageMaker.modeAdvanced=Interface avanc?e
+PageMaker.modeAdvancedTooltip=Une interface avanc?e dont seuls les 
utilisateurs exp?riment?s de Freenet et les d?veloppeurs ont besoin
+PageMaker.modeSimple=Interface simple
+PageMaker.modeSimpleTooltip=Une interface simple que tous les utilisateurs 
peuvent utiliser
 PeerManagerUserAlert.clockProblem=${count} noeuds ne peuvent pas se connecter 
? vous car leur horloge et la votre sont d?call?es de plus de 24 heures. 
Veuillez vous assurer que votre ordinateur est ? l'heure. Une heure erron?e 
g?ne le fonctionnement du noeud et des clients.
 PeerManagerUserAlert.clockProblemTitle=Probl?me d'horloge
 PeerManagerUserAlert.connError=${count} noeud ne peuvent pas se connecter pour 
une raison inconnue, peut-?tre parce que votre noeud est bugg? ou votre 
r?f?rence corrompue.
@@ -908,8 +919,12 @@
 QueueToadlet.completedUDirectory=Insertions de dossiers termin?es (${size})
 QueueToadlet.delete=Supprimer
 QueueToadlet.download=T?l?chargement
+QueueToadlet.downloadFiles=T?l?chargement group?s
+QueueToadlet.downloadFilesInstructions=Vous pouvez coller une liste de cl?s ? 
t?l?charger dans la boite ci-dessous (une par ligne)
 QueueToadlet.downloadSucceeded=Le fichier ${origlink}${filename}${/origlink} a 
?t? t?l?charg? avec succ?s. ${link}Cliquez ici${/link} pour ouvrir ce fichier 
(${size}).
 QueueToadlet.downloadSucceededTitle=T?l?chargement r?ussi : ${filename}
+QueueToadlet.enqueuedFailure=Les ${number} cl?s suivantes n'ont pas pu ?tre 
mises en file :
+QueueToadlet.enqueuedSuccessfully=Les ${number} cl?s suivantes ont ?t? mises 
en file :
 QueueToadlet.errorAccessDenied=Erreur : Acc?s refus? !
 QueueToadlet.errorAccessDeniedFile=La configuration du noeud vous interdit 
d'ins?rer le fichier "${file}".
 QueueToadlet.errorDToDisk=Le t?l?chargement sur le disque a ?chou?
@@ -1131,6 +1146,7 @@
 Toadlet.permRedirectWithReason=Redirection permanente : ${reason}
 Toadlet.returnToNodeHomepage=Revenir ? la page d'accueil
 Toadlet.returnToPrevPage=Retour ? la page pr?c?dente
+Toadlet.returnToQueuepage=Retour ? la file d'attente
 Toadlet.tempRedirectWithReason=Redirection temporaire : ${reason}
 Toadlet.unauthorized=Vous n'?tes pas autoris? ? acc?der ? cette page.
 Toadlet.unauthorizedTitle=Acc?s refus?

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties    
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties    
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -263,7 +263,7 @@
 FProxyToadlet.alerts=Messaggi dettagliati sullo stato del nodo
 FProxyToadlet.alertsTitle=Avvertenze
 FProxyToadlet.backToFProxy=${link}Clicca qui${/link} per andare alla homepage 
di FProxy
-FProxyToadlet.backToReferrer=${link}Clicka qui${/link} per tornare alla pagina 
referente.
+FProxyToadlet.backToReferrer=${link}Clicca qui${/link} per tornare alla pagina 
referente.
 FProxyToadlet.cantBindPort=Non ? possibile abbinare FProxy a quella porta!
 FProxyToadlet.config=configura il nodo
 FProxyToadlet.configTitle=Configurazione
@@ -297,10 +297,10 @@
 FProxyToadlet.notEnoughMetaStrings=Non ci sono abbastanza meta-strings
 FProxyToadlet.notFoundTitle=Non Trovato
 FProxyToadlet.openAsText=${link}Clicca qui${/link} per aprire il file come 
testo 'liscio' (plain text) . Questo non dovrebbe essere pericoloso ma la 
visualizzazione pu? risultare disturbata.
-FProxyToadlet.openForce=${link}Clicka qui${/link} per aprire il file come 
${mime} (leggi l'avvertenza sopra!).
-FProxyToadlet.openForceDisk=${link}Clicka qui${/link} per forzare il browser a 
scaricare il file su disco.
+FProxyToadlet.openForce=${link}Clicca qui${/link} per aprire il file come 
${mime} (leggi l'avvertenza sopra!).
+FProxyToadlet.openForceDisk=${link}Clicca qui${/link} per forzare il browser a 
scaricare il file su disco.
 FProxyToadlet.openPossRSSAsForceDisk=${link}Clicka qui${/link} per scaricare 
il file su disco (${bold}possibile pericolo${/bold} se si sta usando Firefox 
2.0.0.0; il problema dovrebbe essere stato risolto in 2.0.0.1
-FProxyToadlet.openPossRSSAsPlainText=${link}Clicka qui${/link} per aprire il 
file come testo 'liscio' (plain text) (ci? ${bold}pu? rappresentare un 
pericolo${/bold} se si sta usando IE7 o FF2).
+FProxyToadlet.openPossRSSAsPlainText=${link}Clicca qui${/link} per aprire il 
file come testo 'liscio' (plain text) (ci? ${bold}pu? rappresentare un 
pericolo${/bold} se si sta usando IE7 o FF2).
 FProxyToadlet.openPossRSSForceDisk=${link}Clicca qui${/link} per cercare di 
costringere il browser a scaricare il file su disco (${bold}Pu? essere 
pericoloso se si sta usando Firefox 2.0.0${/bold} ; il problema dovrebbe essere 
risolto in 2.0.1).
 FProxyToadlet.openRSSAsRSS=${link}Clicca qui${/link} per aprire il file come 
RSS (ci? ${bold}rappresenta un pericolo${/bold} se l'autore del sito ? mal 
intenzionato, perch? il filtraggio di RSS in Freenet non ? ancora stato 
implementato).
 FProxyToadlet.openRSSForce=${link}Clicca qui${/link} per aprire il file come 
${mime} (ci? ${bold}pu? costituire un pericolo${/bold} se si usa IE7 o FF2).
@@ -575,7 +575,7 @@
 JPEGFilter.tooShortTitle=Troppo corto
 KnownUnsafeContentTypeException.dangerousInlines=Contenuto di questo tipo pu? 
includere immagini o video che vengono caricati direttamente da internet, 
esponendo l'indirizzo IP dell'utente e quindi compromettendone gravemente 
l'anonimato.
 KnownUnsafeContentTypeException.dangerousInlinesLabel=Collegamenti esterni 
pericolosi:
-KnownUnsafeContentTypeException.dangerousLinks=Contenuto di questo tipo pu? 
includere dei link a pagine pubblicate al di fuori di Freenet. Clickando su 
tali link (e possono essere camuffati) si espone il proprio indirizzo IP, 
compromettendo l'anonimato.
+KnownUnsafeContentTypeException.dangerousLinks=Contenuto di questo tipo pu? 
includere dei link a pagine pubblicate al di fuori di Freenet. Cliccando su 
tali link (e possono essere camuffati) si espone il proprio indirizzo IP, 
compromettendo l'anonimato.
 KnownUnsafeContentTypeException.dangerousLinksLabel=Link pericolosi:
 KnownUnsafeContentTypeException.dangerousMetadata=Contenuto di questo tipo pu? 
includere metadati, i quali possono essere visualizzati da alcuni browser o con 
l'aiuto di altri programmi: i metadati possono contenere link o immagini 
caricate direttamente da internet, che possono compromettere l'anonimato.
 KnownUnsafeContentTypeException.dangerousMetadataLabel=Metadati pericolosi:
@@ -688,6 +688,9 @@
 Node.inBWLimit=Limite ampiezza di banda in entrata (bytes per secondo)
 Node.inBWLimitLong=Limite dell'ampiezza di banda in entrata (bytes/sec); il 
nodo cerca di non eccedere tale limite; -1 siglifica quattro volte il limite 
impostato per l'ampiezza di banda in uscita (outputBandwidthLimit)
 Node.invalidStoreSize=Il datastore (magazzino dati) deve essere di dimensioni 
uguali o superiori a 32MB
+Node.java14ShortText=Tra breve non sara pi? possibile operare un nodo Freenet 
su Java 1.4. Si prega di aggiornare a 1.5 o 1.6
+Node.java14Text=Freenet sta girando su una versione 1.4 di Java. Si prega di 
aggiornare almeno a Java 1.5. Gli aggiornamenti automatici di Freenet sono 
stati temporaneamente disabilitati in quanto versioni future potrebbero non non 
girare del tutto.
+Node.java14Title=Freenet non ? pi? compatibile con Java 1.4
 Node.l10nLanguage=Lingua dell' interfaccia grafica
 Node.l10nLanguageLong=Cambia la lingua in cui messaggi sono visualizzati. 
Alcune frasi e messaggi saranno visibili in versione tradotta solo dopo il 
prossimo riavvio del nodo.
 Node.maxHTL=HTL massimo
@@ -808,6 +811,10 @@
 OpennetUserAlert.warningTitle=Avvertenza: Modo Promiscuo Attivato: Il nodo si 
connetter? a degli sconosciuti
 PNGFilter.invalidHeader=Il file che si sta cercando di richiamare non e' un 
PNG: esso non include un header PNG valido. Potrebbe trattarsi di un file in 
altro formato e il browser potrebbe fare qualcosa di pericoloso a causa della 
confusione creata dalla mancata corrispondenza; il file ? stato pertanto 
bloccato.
 PNGFilter.invalidHeaderTitle=Header PNG non valido
+PageMaker.modeAdvanced=Interfaccia avanzata
+PageMaker.modeAdvancedTooltip=Un'interfaccia pi? complessa, utile soltanto 
agli utenti esperti
+PageMaker.modeSimple=Interfaccia semplice
+PageMaker.modeSimpleTooltip=Un'interfaccia semplice che pu? essere usata da 
ogni utente
 PeerManagerUserAlert.clockProblem=${count} peer non riescono a connettersi 
perch? il loro orologio di sistema differisce di oltre 24 ore da quello locale. 
Si prega di verificare che l'orologio di sistema del computer sia regolato 
sull'ora esatta. Regolazioni inaccurate dell'orologio causano molti problemi 
nel funzionamento dei meccanismi tra nodo e client.
 PeerManagerUserAlert.clockProblemTitle=Problema di sincronizzazione.
 PeerManagerUserAlert.connError=${count} peer non riescono a connettersi per 
motivi sconosciuti, forse per causa di 'bug' nel nodo o di una referenza di un 
nodo che e' corrotta.
@@ -932,9 +939,12 @@
 QueueToadlet.completedUDirectory=Directory Upload Completati:(${size})
 QueueToadlet.delete=Elimina
 QueueToadlet.download=Scarica
+QueueToadlet.downloadFilesInstructions=E' possibile incollare una serie di 
chiavi da scaricare nello spazio sottostante (una per rigo)
 QueueToadlet.downloadSucceeded=Il file ${origlink}${filename}${/origlink} ? 
stato scaricato. ${link}Click qui${/link} per aprile il file (${size}).
 QueueToadlet.downloadSucceededTitle=Download effettuato: ${filename}
 QueueToadlet.emergency=urgenza estrema
+QueueToadlet.enqueuedFailure=Non ? stato possibile agguingere alla coda le 
${number} chiavi qui elencate:
+QueueToadlet.enqueuedSuccessfully=Le ${number} chiavi elencate di seguito sono 
state aggiunte alla coda con successo:
 QueueToadlet.errorAccessDenied=Errore: Accesso Negato
 QueueToadlet.errorAccessDeniedFile=L'attuale configurazione del nodo non 
consente l'upload del file "${file}".
 QueueToadlet.errorDToDisk=Non ? stato possibile scaricare su disco
@@ -1149,7 +1159,7 @@
 TimeSkewDetectedUserAlert.text=Una discrepanza temporale ? stata rilevata dal 
nodo. Questo ? un inconveniente grave; il nodo non potr? funzionare 
correttamente finch? non vi si sar? ovviato. Tra le cause pi? comuni, la 
modalit? powersafe mal configurata, cattiva sincronizzazione tra i client in 
rete, problemi di hardware.
 TimeSkewDetectedUserAlert.title=Discrepanza temporale rilevata!
 Toadlet.cancel=Cancella
-Toadlet.clickHere=Clicka qui
+Toadlet.clickHere=Clicca qui
 Toadlet.homepage=Homepage
 Toadlet.internalErrorPleaseReport=Errore interno:  riportarlo se possibile
 Toadlet.internalErrorTitle=Errore Interno
@@ -1162,6 +1172,7 @@
 Toadlet.returnToHomepage=Torna alla homepage del nodo
 Toadlet.returnToNodeHomepage=Torna alla homepage del nodo
 Toadlet.returnToPrevPage=Torna alla pagina precedente
+Toadlet.returnToQueuepage=Torna alla pagina della coda
 Toadlet.tempRedirectWithReason=Redirect temporaneo: ${reason}
 Toadlet.unauthorized=L'accesso a questa pagina ? interdetto.
 Toadlet.unauthorizedTitle=Non Autorizzato
@@ -1180,7 +1191,7 @@
 TranslationToadlet.confirmRemoveOverride=Conferma: elimina chiave di 
traduzione : (${key} - ${value}) ?
 TranslationToadlet.contributingToLabelWithLang=Stai contribuendo alla 
traduzione: ${lang}:
 TranslationToadlet.currentTranslationLabel=Traduzione corrente
-TranslationToadlet.downloadTranslationsFile=Scarica file della traduzione 
eseguita
+TranslationToadlet.downloadTranslationsFile=Scarica il file della traduzione
 TranslationToadlet.hideAlreadyTranslated=Nascondi stringhe tradotte
 TranslationToadlet.noCustomTranslations=Nessuna traduzione personalizzata 
disponibile.
 TranslationToadlet.originalVersionLabel=Originale (versione inglese)

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties 
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties 
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -1,9 +1,21 @@
+Persistence=forever. ??????????????????????; ???????????, ???????????????.
+Announcer.announceAlertIntro=Freenet ??????? - ???????????. ????????, 
????????. ??????? Freenet ????????, ????????, ????? 24 ??????.
+Announcer.announceAlertNoSeednodes=??? seednodes.fref ??, 
????????????????(opennet)?. ?????????, ??? 
http://downloads.freenetproject.org/alpha/opennet/ ???????.
+Announcer.announceAlertShort=???????????, ????????.
+Announcer.announceAlertTitle=?????
+Announcer.announceDetails=??????? ${recentSentAnnouncements} ?????, ??? 
${runningAnnouncements} ??????, ????? ${addedNodes} ???(??? ${refusedNodes} 
??????). ??????? ${connectedSeednodes} ???????, ???????? 
${disconnectedSeednodes} ?????.
+Announcer.announceDisabledTooOld=?????????, ???????? Freenet ????. ?????????, 
????????????. ???????????(????????????????, ???????).
+Announcer.announceDisabledTooOldShort=??????????, ???? Freenet ?????. 
?????????.
+Announcer.announceDisabledTooOldTitle=???????(????)
+Announcer.announceLoading=Freenet ?????????, ?????????????. ??????????????.
+Announcer.coolingOff=????? ${time} ???, ??????????????????????, ?????????????, 
??????????.
+Bookmark.noName=??
 BookmarkEditorToadlet.addBookmark=????
 BookmarkEditorToadlet.addCategory=????
-BookmarkEditorToadlet.addDefaultBookmarks=??????????.
+BookmarkEditorToadlet.addDefaultBookmarks=??????????.
 BookmarkEditorToadlet.addNewBookmark=??????
 BookmarkEditorToadlet.addNewCategory=?????
-BookmarkEditorToadlet.addedNewBookmark=??????????.
+BookmarkEditorToadlet.addedNewBookmark=??????????.
 BookmarkEditorToadlet.addedNewBookmarkTitle=???????
 BookmarkEditorToadlet.bookmarkDoesNotExist="${bookmark}"???????.
 BookmarkEditorToadlet.cancelCut=????
@@ -24,41 +36,58 @@
 BookmarkEditorToadlet.editBookmarkTitle=????
 BookmarkEditorToadlet.editCategoryTitle=????
 BookmarkEditorToadlet.error=??
-BookmarkEditorToadlet.hasAnActivelinkLabel=? freesite ?????????
+BookmarkEditorToadlet.hasAnActivelinkLabel=?? freesite ?????????
 BookmarkEditorToadlet.invalidKey=???Freenet??.
 BookmarkEditorToadlet.invalidKeyTitle=????
-BookmarkEditorToadlet.invalidKeyWithReason=???Freenet??.
+BookmarkEditorToadlet.invalidKeyWithReason=??? Freenet ??.
 BookmarkEditorToadlet.keyLabel=??:
 BookmarkEditorToadlet.moveDown=??
 BookmarkEditorToadlet.moveUp=??
 BookmarkEditorToadlet.myBookmarksTitle=????
 BookmarkEditorToadlet.nameLabel=??:
 BookmarkEditorToadlet.paste=??
-BookmarkEditorToadlet.pasteOrCancel=?????????????,??????.
+BookmarkEditorToadlet.pasteOrCancel=???????????, ??????.
 BookmarkEditorToadlet.pasteTitle=??/??
 BookmarkEditorToadlet.save=??
 BookmarkEditorToadlet.title=?????
 BookmarkEditorToadlet.urlDecodeError=URL????
+BookmarkItem.bookmarkUpdated=???????? ${name} ?????? ${edition} ?.
+BookmarkItem.bookmarkUpdatedShort=?????? freesite ????: ${name}
+BookmarkItem.bookmarkUpdatedTitle=??????: ${name}
+BookmarkItem.bookmarkUpdatedWithLink=???????? ${link}${name}${/link} ?????? 
${edition} ?.
+BookmarkItem.deleteBookmarkUpdateNotification=????
+BookmarkItem.unnamedBookmark=?????
 BookmarkManager.list=????
+BookmarkManager.listLong=?????? freesite ??
+BookmarkManager.malformedBookmark=???????
 BooleanOption.parseError=????????: ${val} - ??? true ? false
-BuildOldAgeUserAlert.tooOld=?????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
??????????????)
-BuildOldAgeUserAlert.tooOldShort=??????? Freenet ??????, ???????????????! 
?????!
-BuildOldAgeUserAlert.tooOldTitle=?????
+BuildOldAgeUserAlert.tooOld=????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
???????????????)
+BuildOldAgeUserAlert.tooOldShort=????? Freenet ????????, ???????????????! 
?????!
+BuildOldAgeUserAlert.tooOldTitle=????
+CSSTokenizerFilter.supplementalCharsNotSupported=??????? 0xFFFF ? UCS-4 ??!
 ClockProblemDetectedUserAlert.shortText=???????????, Freenet ??????.
 ClockProblemDetectedUserAlert.text=Freenet ??????????(?????)????. 
??????????????, Freenet ??????.
 ClockProblemDetectedUserAlert.title=???????.
+ConfigToadlet.appliedFailureExceptions=?????????, ?????????:
+ConfigToadlet.appliedFailureTitle=??????
 ConfigToadlet.appliedSuccess=??????????.
 ConfigToadlet.appliedTitle=???????
 ConfigToadlet.apply=??
 ConfigToadlet.configNavTitle=????
 ConfigToadlet.contributeTranslation=????????
+ConfigToadlet.defaultIs=???: '${default}'.
+ConfigToadlet.false=?
 ConfigToadlet.fullTitle=${name} ? Freenet ????
+ConfigToadlet.modeAdvanced=??????
+ConfigToadlet.modeSimple=??????
 ConfigToadlet.possibilitiesTitle=??
 ConfigToadlet.reset=??
 ConfigToadlet.returnToNodeConfig=??????
 ConfigToadlet.shortTitle=??
 ConfigToadlet.title=Freenet ????
-ConfigToadlet.wrapper=??
+ConfigToadlet.true=?
+ConfigToadlet.wrapper=????
+ConfigToadlet.wrapperSettingsTitle=??????
 ConfigurablePersister.doesNotExistCannotCreate=?????????????.
 ConfigurablePersister.existsCannotReadWrite=??????????????
 ConnectionsToadlet.nodeStatus.BACKED OFF=???
@@ -73,12 +102,25 @@
 ConnectionsToadlet.nodeStatus.LISTEN ONLY=???
 ConnectionsToadlet.nodeStatus.LISTENING=???
 ConnectionsToadlet.nodeStatus.NEVER CONNECTED=????
+ConnectionsToadlet.nodeStatus.ROUTING DISABLED=?????
 ConnectionsToadlet.nodeStatus.TOO NEW=??
 ConnectionsToadlet.nodeStatus.TOO OLD=??
 ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=????
+ConnectivityToadlet.addressTitle=??
+ConnectivityToadlet.byIPTitle=${ip} ?????????? - ${status} (??????? 
${tunnelLength})
+ConnectivityToadlet.byPortTitle=${port} ?????????? - ${status} (??????? 
${tunnelLength})
+ConnectivityToadlet.connectivity=?????
 ConnectivityToadlet.connectivityTitle=??
+ConnectivityToadlet.firstReceiveLeadTime=?????????
+ConnectivityToadlet.firstSendLeadTime=?????????
+ConnectivityToadlet.local=??
+ConnectivityToadlet.localRemoteTitle=??/??
+ConnectivityToadlet.noreply=????
+ConnectivityToadlet.remote=??
+ConnectivityToadlet.sentReceivedTitle=??/?????
 ConnectivityToadlet.summaryTitle=??
-ContentDataFilter.unknownCharset=?????????????????. ????????????????, 
????????????.
+ConnectivityToadlet.title=${nodeName} ??????
+ContentDataFilter.unknownCharset=?????????????????. ????????????????, 
????????????.
 ContentDataFilter.unknownCharsetTitle=?????!
 ContentDataFilter.warningUnknownCharsetTitle=??: ?????? (${charset})
 DarknetConnectionsToadlet.activityInserts=??: ??${totalSenders}????, 
${CHKhandlers}?CHK???, ${SSKhandlers}?SSK???
@@ -86,10 +128,10 @@
 DarknetConnectionsToadlet.activityTitle=????
 DarknetConnectionsToadlet.add=??
 DarknetConnectionsToadlet.addPeerTitle=??????
-DarknetConnectionsToadlet.backedOff=???????:????????????,???????????.
+DarknetConnectionsToadlet.backedOff=???????: ????????????, ???????????.
 DarknetConnectionsToadlet.backedOffShort=???
 DarknetConnectionsToadlet.burstingShort=???
-DarknetConnectionsToadlet.busy=??:????????,??????????????????,??????????????.
+DarknetConnectionsToadlet.busy=??: ????????, ??????????????????, ?????????????.
 DarknetConnectionsToadlet.busyShort=??
 DarknetConnectionsToadlet.cancel=??
 DarknetConnectionsToadlet.cantFetchNoderefURL=??? ${url} ??????.?????.
@@ -100,49 +142,52 @@
 DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=????
 DarknetConnectionsToadlet.connected=???:??????????
 DarknetConnectionsToadlet.connectedShort=???
-DarknetConnectionsToadlet.disabled=???????:????????????????.
+DarknetConnectionsToadlet.darknetFnpPort=????(Darknet) FNP: ${port}/UDP 
(?????????, ???"??", ????; ???????????????)
+DarknetConnectionsToadlet.disabled=???????: ???????????????????.
 DarknetConnectionsToadlet.disabledShort=???
 DarknetConnectionsToadlet.disconnectingShort=???
 DarknetConnectionsToadlet.enterDescription=?????:
 DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=??????:????
 DarknetConnectionsToadlet.failedToAddNodeTitle=??????
-DarknetConnectionsToadlet.fcpPort=FCP: ${port}/tcp (?Frost,Thaw?Freenet???????)
-DarknetConnectionsToadlet.fileReference=??????????????:
+DarknetConnectionsToadlet.fcpPort=FCP: ${port}/TCP (? Frost, Thaw ? Freenet 
???????)
+DarknetConnectionsToadlet.fileReference=???????????????:
 DarknetConnectionsToadlet.fnpPort=FNP: ${port}/udp (???????;??????????????)
 DarknetConnectionsToadlet.forceRemove=????
 DarknetConnectionsToadlet.fproxyDisabled=FProxy???????)?????
-DarknetConnectionsToadlet.fproxyPort=FProxy: ${port}/tcp (?web????)
+DarknetConnectionsToadlet.fproxyPort=FProxy: ${port}/TCP (??????)
 DarknetConnectionsToadlet.fullTitle=${name}?${counts}???
 DarknetConnectionsToadlet.go=??
 DarknetConnectionsToadlet.idleTime=??????????????????
 DarknetConnectionsToadlet.idleTimeTitle=???????
 DarknetConnectionsToadlet.invalidSignature=??????????????(${error}).
 DarknetConnectionsToadlet.ipAddressTitle=??
+DarknetConnectionsToadlet.listenOnlyShort=???
 DarknetConnectionsToadlet.listeningShort=???
 DarknetConnectionsToadlet.myFriends=????
 DarknetConnectionsToadlet.myReferenceHeader=${linkref}??????${/linkref} 
(${linktext}????${/linktext})
-DarknetConnectionsToadlet.nameClickToMessage=????.????????????????????
+DarknetConnectionsToadlet.nameClickToMessage=????. ????????????????????
 DarknetConnectionsToadlet.nameTitle=??
-DarknetConnectionsToadlet.neverConnected=????:????????????????.
+DarknetConnectionsToadlet.neverConnected=????: ???????????????.
 DarknetConnectionsToadlet.neverConnectedShort=????
 DarknetConnectionsToadlet.noPeersFirstHalf=Freenet?????????????,???????.??
 DarknetConnectionsToadlet.noPeersSecondHalf=??,???????????????.
 DarknetConnectionsToadlet.noRefOrURL=???????????????URL. ?????.
-DarknetConnectionsToadlet.nodePortsTitle=????????
-DarknetConnectionsToadlet.notConnected=???:?????,??????????????????.
+DarknetConnectionsToadlet.nodePortsTitle=???????
+DarknetConnectionsToadlet.notConnected=???: ?????, ??????????????
 DarknetConnectionsToadlet.notConnectedShort=???
-DarknetConnectionsToadlet.pasteReference=???????????:
-DarknetConnectionsToadlet.privateNote=??????????
+DarknetConnectionsToadlet.opennetFnpPort=????(Opennet) FNP: ${port}/UDP 
(??????????, ???"???", ????; ??????????????)
+DarknetConnectionsToadlet.pasteReference=???????????:
+DarknetConnectionsToadlet.privateNote=???????????
 DarknetConnectionsToadlet.privateNoteTitle=????
 
DarknetConnectionsToadlet.referenceCopyWarning=???????${bold}????${/bold}??.??????${bold}????${/bold}.
 DarknetConnectionsToadlet.remove=???!
 DarknetConnectionsToadlet.removePeers=???????
 DarknetConnectionsToadlet.seedServersShort=??
 DarknetConnectionsToadlet.selectAction=-- ???? --
-DarknetConnectionsToadlet.sendMessageTitle=?????????
-DarknetConnectionsToadlet.sendMessageToPeers=???????????????
+DarknetConnectionsToadlet.sendMessageTitle=?????????
+DarknetConnectionsToadlet.sendMessageToPeers=???????????????
 DarknetConnectionsToadlet.statusTitle=??
-DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/tcp (??telnet????????)
+DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/TCP (?? telnet ????????)
 DarknetConnectionsToadlet.tooNewShort=??
 DarknetConnectionsToadlet.tooOldShort=??
 DarknetConnectionsToadlet.transferringRequests=????: ${senders}????, 
${receivers}????
@@ -154,110 +199,359 @@
 ExtOldAgeUserAlert.extTooOld=?? freenet-ext.jar ?????????, 
???????????????????: http://downloads.freenetproject.org/alpha/freenet-ext.jar.
 ExtOldAgeUserAlert.extTooOldShort=?? freenet-ext.jar ?????. ?????.
 ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext ??
+FProxyToadlet.abortToHomepage=?????? FProxy ??
+FProxyToadlet.alerts=???????
 FProxyToadlet.alertsTitle=??
+FProxyToadlet.backToFProxy=${link}???${/link}?? FProxy ??.
+FProxyToadlet.backToReferrer=${link}???${/link}??????.
 FProxyToadlet.config=??/??????
 FProxyToadlet.configTitle=??
 FProxyToadlet.dangerousContentTitle=????????
+FProxyToadlet.dangerousRSS=Freenet ??????????????? RSS ??. Freenet ?????? RSS 
??, ?? RSS ?????????(?????????, ??????????????????, ????????). Firefox 2.0 ? 
Internet Explorer 7.0 ???????? RSS ????, ??????????? "${type}".
+FProxyToadlet.dangerousRSSSubtitle=RSS ??????????
 FProxyToadlet.dangerousRSSTitle=???????? (RSS)
+FProxyToadlet.downloadInBackgroundToDisk=?????????????????
+FProxyToadlet.errorIsFatal=???????. ?????????????.
+FProxyToadlet.errorWithReason=??: ${error}
+FProxyToadlet.expectedKeyButGot=???? Freenet ??, ??????:
+FProxyToadlet.expectedMimeType=?? MIME ??: ${mime}
+FProxyToadlet.explanationTitle=??
+FProxyToadlet.fetchLargeFileAnywayAndDisplay=?????, ???????????????
+FProxyToadlet.fileInformationTitle=????
+FProxyToadlet.filenameLabel=??:
 FProxyToadlet.friends=??????
 FProxyToadlet.friendsTitle=??
 FProxyToadlet.goBack=?????
+FProxyToadlet.goBackToPrev=?????
 FProxyToadlet.homepage=??
+FProxyToadlet.invalidKeyTitle=??????
+FProxyToadlet.invalidKeyWithReason=??????: ${reason}
+FProxyToadlet.largeFile=??
+FProxyToadlet.largeFileExplanationAndOptions=??? Freenet ???????. 
????????????????????, ?? Freenet ?????????????. ???????:
+FProxyToadlet.mayChange=(???)
 FProxyToadlet.mimeType=MIME ???${mime}
-FProxyToadlet.openForce=?${link}??${/link}????? ${mime} ????????????????
+FProxyToadlet.notFoundTitle=???
+FProxyToadlet.openAsText=${link}???${/link}??????????? (???????, ??????????).
+FProxyToadlet.openForce=${link}???${/link}????? ${mime} ????????????????.
+FProxyToadlet.openForceDisk=${link}???${/link}????????????????.
+FProxyToadlet.openPossRSSAsPlainText=${link}???${/link}???????????(? IE7 ?? 
FF2 ?${bold}??????s${/bold}).
+FProxyToadlet.openPossRSSForceDisk=${link}???${/link}????????????????(????? 
Firefox 2.0.0, ${bold}??????????${/bold}, 2.0.1 ???????????).
+FProxyToadlet.openRSSAsRSS=${link}???${/link}?? RSS ?????? 
(?????????????${bold}????${/bold}, Freenet ???????? RSS ????).
+FProxyToadlet.openRSSForce=${link}????${/link}?? ${mime} ??????(? IE7 ?? FF2 
?${bold}??????${/bold}).
+FProxyToadlet.opennet=????????
 FProxyToadlet.opennetTitle=???
+FProxyToadlet.options=?????:
+FProxyToadlet.pathNotFound=???????.
 FProxyToadlet.pathNotFoundTitle=???????
+FProxyToadlet.plugins=???????
 FProxyToadlet.pluginsTitle=??
 FProxyToadlet.queue=????????
 FProxyToadlet.queueTitle=??
+FProxyToadlet.retryNow=????
+FProxyToadlet.sizeLabel=??:
 FProxyToadlet.sizeUnknown=??????
+FProxyToadlet.stats=??????
 FProxyToadlet.statsTitle=??
 FProxyToadlet.translationTitle=??
+FProxyToadlet.unableToRetrieve=Freenet ????????.
 FProxyToadlet.unknownMIMEType=MIME ??????
 FProxyToadlet.welcome=??
 FProxyToadlet.welcomeTitle=??
 FcpServer.allowedHosts=??????(????????)
 FcpServer.allowedHostsFullAccess=???????????
 
FcpServer.allowedHostsLong=??????????IP??????????????????????IP?????CIDR???IP????(?
 192.168.0.0/24)?
+FcpServer.assumeDownloadDDAIsAllowed=??????? DDA?
+FcpServer.assumeDownloadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA 
??????? TestDDARequest ??.
+FcpServer.assumeUploadDDAIsAllowed=??????? DDA?
+FcpServer.assumeUploadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA 
??????? TestDDARequest ??.
+FcpServer.downloadsFileCanCreateCannotReadOrWrite=???????????
+FcpServer.downloadsFileExistsCannotReadOrWrite=???????????
+FcpServer.enablePersistentDownload=????????
+FcpServer.enablePersistentDownloadLong=????? FCP ???? 
+FcpServer.filenameToStorePData=??????????
+FcpServer.filenameToStorePDataLong=?????????????
+FcpServer.intervalBetweenWrites=???????????????
+FcpServer.intervalBetweenWritesLong=???????????????.
 FcpServer.isEnabled=??FCP???
+FcpServer.isEnabledLong=???? Freenet ?????(FCP)???
 FcpServer.portNumber=FCP?
+FcpServer.ssl=?? SSL?
+FcpServer.sslLong=??? FCP ?????? SSL
+FileOffer.commentLabel=??:
+FileOffer.fileLabel=??:
+FileOffer.mimeLabel=MIME ??:
+FileOffer.senderLabel=???:
+FileOffer.sizeLabel=??:
 FirstTimeWizardToadlet.bandwidthLimit=????
 FirstTimeWizardToadlet.bandwidthLimitLong=?????????????????????
 FirstTimeWizardToadlet.bwlimitHigherSpeed=???
 FirstTimeWizardToadlet.bwlimitLowerSpeed=???
 FirstTimeWizardToadlet.chooseNodeName=????????
+FirstTimeWizardToadlet.chooseNodeNameLong=?????????????(???????, 
????????????). ?????????(???????????????)???????????. 
???(???????????????)???????. ???, ???????????????????????????, ????????????, 
??????????????????.
 FirstTimeWizardToadlet.clickContinue=??????
 FirstTimeWizardToadlet.congratz=????????
+FirstTimeWizardToadlet.congratzLong=??, ??????????? Freenet ???. 
????"??"???????????????, ????????????????. ???, Freenet ?????????, ???????. 
?????????????? Freenet. ?????? Freenet ??????.
 FirstTimeWizardToadlet.connectToStrangers=???????
-FirstTimeWizardToadlet.connectToStrangersLong=??????? Freenet 
???????????????????????????????????? 
Freenet????????????????????Freenet??????????????????????????????
+FirstTimeWizardToadlet.connectToStrangersLong=??????? Freenet 
???????????????????????????????????? Freenet??????????????? Freenet 
????????????????????????????????????
 FirstTimeWizardToadlet.continue=??
 FirstTimeWizardToadlet.continueEnd=???????Freenet?
+FirstTimeWizardToadlet.datastoreSize=??????
 
FirstTimeWizardToadlet.datastoreSizeLong=????????????????????????????????????????????????????????????????????????????????????
 FirstTimeWizardToadlet.enableOpennet=????????? Freenet ??
-FirstTimeWizardToadlet.fivePercentDisk=?? 5% ??????
+FirstTimeWizardToadlet.fivePercentDisk=(? 5% ???????)
 FirstTimeWizardToadlet.homepageTitle=Freenet ???????
 FirstTimeWizardToadlet.iDoTrust=???????? ${interface} (${ip}) ????
 FirstTimeWizardToadlet.isNetworkTrusted=???????????
+FirstTimeWizardToadlet.isNetworkTrustedLong=????????????? ??????, 
?????????????????????????????. ??????????, ????????????????????.
+FirstTimeWizardToadlet.memoryLimit=?????
 FirstTimeWizardToadlet.memoryLimitLong=???? Freenet 
??????????????????/???Freenet ??????????????????????????????????? 128MB ??????? 
1GB ??????????? 256MB??????????? Freenet ?????
 FirstTimeWizardToadlet.noNetworkIF=?????????
 FirstTimeWizardToadlet.noNetworkIFLong=Freenet ??????????????????????? Freenet?
 FirstTimeWizardToadlet.opennetNo=???????????????? Freenet ???????????????????
-FirstTimeWizardToadlet.opennetWarning=?? Freenet ?????????????????? Freenet 
?????????????????????????????????????????????Freenet ???????????????????????
+FirstTimeWizardToadlet.opennetWarning=?? Freenet ?????????????????? Freenet 
?????????????????????????????????????????????Freenet ??????????????????????
 FirstTimeWizardToadlet.opennetYes=???????????????????
 FirstTimeWizardToadlet.skipWizard=??????????????
+FirstTimeWizardToadlet.step1Title=Freenet ??????? - ??????
+FirstTimeWizardToadlet.step2Title=Freenet ??????! - ??????
 FirstTimeWizardToadlet.step3Title=Freenet ?????? - ????
 FirstTimeWizardToadlet.step4Title=Freenet ?????? - ??????
+FirstTimeWizardToadlet.step5Title=Freenet ??????! - ????
 FirstTimeWizardToadlet.step6Title=Freenet ?????? - ??????
+FirstTimeWizardToadlet.step7Title=Freenet ??????! - ??, ??????????
+FirstTimeWizardToadlet.tenPercentDisk=(? 10% ???????)
+FirstTimeWizardToadlet.warningTitle=??!
+FirstTimeWizardToadlet.welcomeInfoboxContent1=Freenet ????????????. 
??????????????????????????.
 FirstTimeWizardToadlet.welcomeInfoboxTitle=???? Freenet ???????
+FirstTimeWizardToadlet.memory.128M=128 ???(MiB) - ??????
+FirstTimeWizardToadlet.memory.192M=192 ???(MiB) - ??????
+FirstTimeWizardToadlet.memory.256M=256 ???(MiB) - ?????? 1GB ??
+FirstTimeWizardToadlet.memory.512M=512 ???(MiB) - ?????????
+FirstTimeWizardToadlet.memory.64M=64 ???(MiB) - ?????????
 GIFFilter.invalidHeader=????????? GIF ??.
 GIFFilter.invalidHeaderTitle=??????
-GIFFilter.notGif=????????????? GIF ?. ???????????, ?????????????????, 
?????????.
+GIFFilter.notGif=????????????? GIF ?. ???????????, ?????????????????, 
?????????.
 GIFFilter.tooShort=? GIF ???????????.
 GIFFilter.tooShortTitle=????
+GenericReadFilterCallback.couldNotParseAbsoluteFreenetURI=???????? Freenet URI
+GenericReadFilterCallback.couldNotParseFormURIWithError=???????? URI ??: 
${error}
+GenericReadFilterCallback.couldNotParseRelativeFreenetURI=???????? Freenet URI
+GenericReadFilterCallback.couldNotParseURIWithError=???????? URI: ${error}
+GenericReadFilterCallback.invalidFormURI=????? URI: ??????
+GenericReadFilterCallback.invalidFormURIAttemptToEscape=????????
 GenericReadFilterCallback.malformedAbsoluteURL=?????? URL ???${error}
 GenericReadFilterCallback.malformedRelativeURL=?????? URL ???${error}
+GenericReadFilterCallback.protocolNotEscaped=????????: ${protocol}
+HTMLFilter.couldNotParseStyle=???????????
+HTMLFilter.deletedUnknownStyle=???????
+HTMLFilter.failedToParseLabel=HTML ???????????
+HTMLFilter.tooManyNestedStyleOrScriptTags=????????????? - ?????????????
+HTMLFilter.tooManyNestedStyleOrScriptTagsLong=?? </style> ????? - 
?????????????, ?????????, ???????????? - ????????????????
+HTMLFilter.unknownTag=????? ${tag}
+IPDetectorPluginManager.connectionProblems=????:
+IPDetectorPluginManager.forwardPortShortMaybeForwarded=?? UDP ? ${port} ???? 
(?????????).
+IPDetectorPluginManager.forwardPortShortNotForwarded=?? UDP ? ${port} ???? 
(???????).
+IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=?? UDP ? ${port1} ? 
${port2} ???? (?????????).
+IPDetectorPluginManager.forwardTwoPortsShortNotForwarded=?? UDP ? ${port1} and 
${port2} ???? (???????).
+IPUndetectedUserAlert.detecting=Freenet ??????????. ????????????, ???????...
+IPUndetectedUserAlert.detectingShort=Freenet ??????????.
+IPUndetectedUserAlert.detectingWithConfigLink=Freenet ??????????. 
????????????, ???????, ???????${link}??${/link}???????.
+IPUndetectedUserAlert.suggestForwardPort=??, ??????????????? ${port} ?(UDP), 
????????????????.
+IPUndetectedUserAlert.suggestForwardTwoPorts=??, ??????????????? ${port1} ? 
${port2} ?(UDP), ????????????????.
+IPUndetectedUserAlert.unknownAddress=Freenet 
?????????????(????????(NAT)?????????). ???????????????, 
??????????????????????????????. ????????????, Freenet ??????????????. 
??????????, ?'???????????'${link}????${/link}???????.
+IPUndetectedUserAlert.unknownAddressShort=Freenet ???????????. ?????????.
+IPUndetectedUserAlert.unknownAddressTitle=??????
+IPUndetectedUserAlert.unknownAddressWithConfigLink=Freenet 
?????????????(??????(NAT)???????????). ???????????????, 
??????????????????????????????. ????????????, Freenet ??????????????. 
??????????, ?'???????????'${link}????${/link}???????.
 InsertException.shortError.10=???
 InsertException.shortError.3=????
 IntOption.parseError=??????????? 32 ??? : ${val}
-JPEGFilter.notJpeg=?????????????JPEG????????????????????????????????????
+InvalidAddressOverrideUserAlert.unknownAddress=Freenet ?????? 
ipAddressOverride ??????, ????????????????, IPv4 ??, ?? IPv6 ?????(IPv6 
??????????????????).
+InvalidAddressOverrideUserAlert.unknownAddressShort=???? ipAddressOverride 
???. ???????.
+InvalidAddressOverrideUserAlert.unknownAddressTitle=?????????
+InvalidAddressOverrideUserAlert.unknownAddressWithConfigLink=Freenet ?????? 
ipAddressOverride ??????, ????????????????, IPv4 ??, ?? IPv6 ?????(IPv6 
??????????????????). ?????"????????"??${link}????${/link}
+JPEGFilter.notJpeg=????????????? JPEG ????????????????????????????????????
 JPEGFilter.tooShort=???????????JPEG???
 JPEGFilter.tooShortTitle=????
+KnownUnsafeContentTypeException.title=???????: ${type}
+LocalFileInsertToadlet.checkPathExist=???????????.
+LocalFileInsertToadlet.checkPathIsDir=??????????????.
+LocalFileInsertToadlet.checkPathReadable=????????????????????????.
+LocalFileInsertToadlet.dirAccessDenied=???????
+LocalFileInsertToadlet.dirCannotBeRead=?????? "${path}"
 LocalFileInsertToadlet.fileHeader=??
 LocalFileInsertToadlet.insert=??
+LocalFileInsertToadlet.listing=????: ${path}
+LocalFileInsertToadlet.listingTitle=${path} ???
 LocalFileInsertToadlet.sizeHeader=??
-LogConfigHandler.minLoggingPriority=??????????
-LogConfigHandler.minLoggingPriorityLong=???????????. ??????????? debug, minor, 
normal ? error.
+LogConfigHandler.detaildPriorityThreshold=???????????
+LogConfigHandler.detaildPriorityThresholdLong=???????????, ??? freenet:normal, 
freenet.node:minor
+LogConfigHandler.dirName=????
+LogConfigHandler.dirNameLong=???????????
+LogConfigHandler.enabled=???????
+LogConfigHandler.enabledLong=?????????????
+LogConfigHandler.maxCachedBytes=????? RAM ???????
+LogConfigHandler.maxCachedBytesLong=???????????(RAM)???????
+LogConfigHandler.maxCachedLines=????? RAM ??????
+LogConfigHandler.maxCachedLinesLong=???????????(RAM)??????
+LogConfigHandler.maxZippedLogsSize=????????????
+LogConfigHandler.maxZippedLogsSizeLong=???????????????
+LogConfigHandler.minLoggingPriority=??????????
+LogConfigHandler.minLoggingPriorityLong=?????????????. ??????????? debug, 
minor, normal ? error.
+LogConfigHandler.rotationInterval=??????
+LogConfigHandler.rotationIntervalLong=????????? - ??????????????. 
????????????????(??????????), ????????????? maxZippedLogsSize ????????.
 LoggerHook.unrecognizedPriority=??????????: ${name}.
 LongOption.parseError=??????????? 64 ??? : ${val}
-MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ???????????"????"????????????, ????????)
+MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ???????????????(darknet)????????????, 
????????)
 MeaningfulNodeNameUserAlert.noNodeNickShort=????(??)????????
 MeaningfulNodeNameUserAlert.noNodeNickTitle=????(??)????????
+N2NTMToadlet.composingMessageLabel=????????????, ????????:
+N2NTMToadlet.delayed=???: ??????????????
+N2NTMToadlet.delayedTitle=???
+N2NTMToadlet.failed=?????????: ?????
+N2NTMToadlet.failedTitle=??
 N2NTMToadlet.friends=??
+N2NTMToadlet.noSuchFileOrCannotRead=??????: ???????, ??????.
+N2NTMToadlet.peerName=????
+N2NTMToadlet.peerNotFoundTitle=?????
+N2NTMToadlet.peerNotFoundWithHash=??????? \u201C${hash}\u201D ???.
 N2NTMToadlet.processingSend=???????????
+N2NTMToadlet.queued=?????: ?????, ?????????, ???????
+N2NTMToadlet.queuedTitle=?????
 N2NTMToadlet.returnToFriends=??????
+N2NTMToadlet.sendMessage=?????????
+N2NTMToadlet.sendMessageShort=????
+N2NTMToadlet.sendStatus=??????
+N2NTMToadlet.sent=????????
 N2NTMToadlet.sentTitle=??
+N2NTMToadlet.tooLong=?????????? 1024 ?????
 N2NTMToadlet.tooLongTitle=??
 N2NTMUserAlert.delete=??
-N2NTMUserAlert.header=??: ${from} (??? ${composed} | ??? ${sent} | ??>? 
${received})
+N2NTMUserAlert.header=??: ${from} (??? ${composed} | ??? ${sent} | ??? 
${received})
 N2NTMUserAlert.headerShort=?? ${from} ???
 N2NTMUserAlert.reply=??
 N2NTMUserAlert.title=?${peername}(${peer})?????????${number}
-Node.inBWLimit=?????????????
-Node.inBWLimitLong=???????????????; ??????????????; ?? -1 ?????????
+Node.acceptSeedConnections=???, ????????????????????, ????????????. 
??????????????????????, ?????????: ????????????????????(????????, 
????????"???"????).
+Node.acceptSeedConnectionsShort=???????
+Node.alwaysAllowLocalAddresses=???????????????????
+Node.alwaysAllowLocalAddressesLong=???, ???????????, ???????????????, 
?????????(???????)????. ????, ???????????????(??????????)??????. 
???????????????, ?????????????????? UDP ???????????, ?????.
+Node.buggyJVM=????? JVM ??(${version})?????. ????????, ?????? OutOfMemoryError 
??. ?????? Sun ???? Java 1.4.2_13 ?, 1.5.0_10 ?, ?? 1.6 ?(????). ???? 
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4855795 .
+Node.buggyJVMShort=Freenet ???? Java ?? ${version} ??????. ?????, ??????? Java 
?????????.
+Node.buggyJVMTitle=JVM ????
+Node.buggyJVMWithLink=????? JVM ??(${version})???${link}??${/link}. ????????, 
?????? OutOfMemoryError ??. ?????? Sun ???? Java 1.4.2_13 ?, 1.5.0_10 ?, ?? 1.6 
?(????).
+Node.databaseMemory=????????????
+Node.databaseMemoryLong=????????????????????. 0 ??????(????? 30% ??????)
+Node.disablePHTLSLong=Disable probabilistic HTL (???????, ???????????)
+Node.dropPacketEvery=????????
+Node.dropPacketEveryLong=???????. ???????????, ????????. 0 ??????????. ???????!
+Node.enableARKs=?? ARKs? (????!)
+Node.enableARKsLong=???? ARKs? (??????!).
+Node.enablePerNodeFailureTables=??????????????
+Node.enablePerNodeFailureTablesLong=?????? 10 ???????????????????
+Node.enableSwapQueueing=??????????? (????!)
+Node.enableSwapQueueingLong=???????????????? (??????!)
+Node.enableSwapping=??????? (????!)
+Node.enableSwappingLong=????????? (??????! ????????????).
+Node.enableULPRDataPropagation=?? ULRP ??????
+Node.enableULPRDataPropagationLong=????????????, ??????????????????? 
(????????????; ULPR)
+Node.extraPeerDir=????????
+Node.extraPeerDirLong=??????????????
+Node.forceBigShrink=????????
+Node.forceBigShrinkLong=?????????(?? 10%)???????(????????????). 
??????????????????, ?????????; ?????????????????.
+Node.inBWLimit=????????????
+Node.inBWLimitLong=???????????????; ??????????????; ?? -1 ?????????
+Node.java14ShortText=???????? Java 1.4 ?, ???? 1.5 ?.
+Node.java14Text=???? Java 1.4 ??? Freenet ??. ?????? 1.5 ?. ??????????????, 
?????????????????? Java ????.
+Node.java14Title=???? Java 1.4 ?
 Node.l10nLanguage=????????
 Node.l10nLanguageLong=?????????????????????????????
+Node.maxHTL=HTL ???
+Node.maxHTLLong=HTL ???(???????!)
+Node.maxOpennetPeers=????????????
+Node.maxOpennetPeersLong=????(Opennet)????????(??? 0 ? 20 ??, 
?????????????(darknet)?????)
+Node.mustBePositive=????????
+Node.nodeDir=????
+Node.nodeDirLong=????????(???????)?????
 Node.nodeName=??????
 Node.nodeNameLong=????????????????
+Node.notUsingSunVM=??????? Sun ??? JVM ?????: ${vendor} ${version}. ????????: 
??????????. ?????? http://www.java.com/getjava/ ?? Sun ??? Java ??.
+Node.notUsingSunVMShort=Freenet ????? Sun ??? Java ??????, ????????, ?????? 
Sun Java ??.
+Node.notUsingSunVMTitle=???? Sun ? JVM
+Node.notUsingWrapper=????????????. ????????. ???????????, ??????????, ???? JVM 
?????, ???????. ???????????????, ??????????.
+Node.notUsingWrapperShort=Freenet ??????????. ????????.
+Node.notUsingWrapperTitle=????????!
+Node.oneConnectionPerIP=??????????????
+Node.oneConnectionPerIPLong=???????????????????? ????????????????????, 
???????????????????, ???????????????. 
???????????????????(darknet)?????(opennet).
 Node.opennetEnabled=??????????(?????????????)?
-Node.opennetEnabledLong=??????????(???"????")? ??????, 
???????????????????????(?????"???", ???"??"). ????????????????, ?????????. 
?????????? Freenet ???, ???????????????("??"), ?????????.
+Node.opennetEnabledLong=??????????(???????(opennet))? ??????, 
???????????????????????(?????"???", ???"??"). ????????????????, ?????????. 
?????????? Freenet ???, ???????????????("??"), ?????????.
 Node.outBWLimit=?????????????
-Node.outBWLimitLong=?????????(???????); ????????????????
+Node.outBWLimitLong=?????????(???????); ????????????????
+Node.passOpennetPeersThroughDarknet=???????????????????
+Node.passOpennetPeersThroughDarknetLong=????, 
??????(opennet)??????(??????????)??????????(darknet)????. 
?????(??????????)??????????????????. ??????, ???????????, ???????????, 
?????????????????. ????????????????, ?????????????.
+Node.storeDirectory=????
+Node.storeDirectoryLong=???????????
 Node.storeSize=?????????
 Node.storeSizeLong=?????????
-NodeStats.mustBePercentValueNotFull=???????, ???? 0 ? 99 ??.
-NodeStats.valueTooLow=?????????????, ???????!
+Node.storeType=????(????)
+Node.storeTypeLong=??????. ????? bdb-index ?? ram (bdb-index ? 
BerkeleyDBFreenetStore ?????, ??????????????; ram ??????????????). 
?????????????, ?????????????????, ??? ram (??????????????)!
+Node.throttleLocalTraffic=???????
+Node.throttleLocalTrafficLong=???????????? ?????, 
???????(LAN)??????????????????.
+NodeClientCore.couldNotFindOrCreateDir=?????????
+NodeClientCore.downloadAllowedDirs=?????????
+NodeClientCore.downloadDir=??????
+NodeClientCore.downloadDirLong=??????????????
+NodeClientCore.fileForClientStats=????????????
+NodeClientCore.fileForClientStatsLong=??????????????(???????????)
+NodeClientCore.lazyResume=?????????????? (????????)
+NodeClientCore.lazyResumeLong=???????????????, ??????????????, 
????????????????. ???????, ??????????.
+NodeClientCore.maxUSKFetchers=??? USK ???????
+NodeClientCore.maxUSKFetchersLong=??? USK ???????
+NodeClientCore.maxUSKFetchersMustBeGreaterThanZero=?????
+NodeClientCore.movingTempDirOnTheFlyNotSupported=????????????????
+NodeClientCore.persistentTempDir=?????????
+NodeClientCore.persistentTempDirLong=?????????????
+NodeClientCore.startingUp=?? Freenet ???????????, ???????????????, 
?????????????.
+NodeClientCore.startingUpShort=Freenet ?????, ??????????, ?????????.
+NodeClientCore.startingUpTitle=Freenet ?????
+NodeClientCore.tempDir=??????
+NodeClientCore.tempDirLong=??????????
+NodeClientCore.uploadAllowedDirs=?????????
+NodeIPDectector.inclLocalAddress=???????????????
+NodeIPDectector.inclLocalAddressLong=???????????????????(????????????????). 
???????????????????? allowLocalAddresses=true (???????????????????), ?????????.
+NodeIPDectector.ipOverride=????????
+NodeIPDectector.ipOverrideLong=?????????(????????) - ?????????????*??*?(?????: 
???, ?? dyndns ??), ????????????, ????????????????.
+NodeIPDectector.tempAddressHint=???????????
+NodeIPDectector.tempAddressHintLong=??????????; ????????
+NodeIPDetector.maybeSymmetric=??????????????????(NAT)??. ?????????: 
?????????????????????, ??????????????????????.
+NodeIPDetector.maybeSymmetricShort=????: ???????????????(NAT)??.
+NodeIPDetector.maybeSymmetricTitle=????
+NodeIPDetector.unknownHostErrorInIPOverride=?????: ${error}
+NodeStat.aggressiveGC=AggressiveGC ???
+NodeStat.aggressiveGCLong=??????????? (GC) ?????????. ????????????, ??????! ?? 
-1 ??: ??? System.gc() ? System.runFinalization() ???????
+NodeStat.memCheck=???????
+NodeStat.memCheckLong=????????? (???????????, aggressiveGC ????????????!)
+NodeStat.statsPersister=???????????
+NodeStat.statsPersisterLong=???????????(?????????, ?????????????, ????????)
+NodeStat.threadLimit=????
+NodeStat.threadLimitLong=??????????????????, ???????.
+NodeStats.mustBePercentValueNotFull=????????, ???? 0 ? 99 ??.
+NodeStats.valueTooLow=????????, ??????, ???????!
+NodeUpdateManager.enabled=?????????
+NodeUpdateManager.enabledLong=???????????? Freenet ??. ??, ???????????, 
????????, ????????. ???????????????, ???????????.
+NodeUpdateManager.extURI=????????? freenet-ext.jar ????
+NodeUpdateManager.extURILong=????????? freenet-ext.jar ????
 NodeUpdateManager.installNewVersions=????????
-NodeUpdateManager.installNewVersionsLong=??????????????????? Freenet ??, 
???????
+NodeUpdateManager.installNewVersionsLong=???????????, ??????????? Freenet ???
+NodeUpdateManager.invalidExtURI=???????? URI: ${error}
+NodeUpdateManager.invalidRevocationURI=????????? URI: ${error}
+NodeUpdateManager.invalidUpdateURI=????????? URI: ${error}
+NodeUpdateManager.noUpdateWithoutWrapper=??????????, ??????????
+NodeUpdateManager.revocationURI=??????????????
+NodeUpdateManager.revocationURILong=????? URI. ????????????, ????????, 
??????????.
+NodeUpdateManager.updateCatastropheTitle=????????!
+NodeUpdateManager.updateFailed=????: ${reason}
+NodeUpdateManager.updateFailedShort=????: ${reason}
+NodeUpdateManager.updateFailedTitle=????!
+NodeUpdateManager.updateURI=????????????
+NodeUpdateManager.updateURILong=????????????
 NotEnoughNiceLevelsUserAlert.content=?????????????????????. ????????????????, 
??????????. ?????????????????! (? run.sh ??? PRIORITY ???, ??????) ??????? 
${available} ???????, ?????? ${required} ?.
 NotEnoughNiceLevelsUserAlert.short=???????????! ?????????????? Freenet.
 NotEnoughNiceLevelsUserAlert.title=???????????!
@@ -265,51 +559,130 @@
 OpennetConnectionsToadlet.peersListTitle=??????????(??????????????????)
 OpennetConnectionsToadlet.successTime=?????????????? CHK ???
 OpennetConnectionsToadlet.successTimeTitle=??????
+OpennetUserAlert.warning=Freenet ????????????. ????????????? Freenet, 
?????????????. ???????????????, ????????????????????, ????????????. ????? 10 
???????(??????????????, ???????????????), ???????????, ?? Freenet 
????????????????.
 OpennetUserAlert.warningShort=????????.
 OpennetUserAlert.warningTitle=??: ????????: ??????????
-PNGFilter.invalidHeader=????????????? PNG ?, ?????????? PNG ??. ???????????, 
?????????????????, ?????????.
+PNGFilter.invalidHeader=????????????? PNG ?, ?????????? PNG ??. ???????????, 
?????????????????, ?????????.
 PNGFilter.invalidHeaderTitle=??? PNG - ??????
-PluginToadlet.addPluginTitle=??plugin
-PluginToadlet.failedToLoadPluginTitle=Plugin????
-PluginToadlet.noWebInterfaceTitle=?plugin?????
-PluginToadlet.pluginList=Plugin??
-PluginToadlet.pluginListTitle=Plugin??
-PluginToadlet.pluginNameTitle=Plugin??
-PluginToadlet.pluginNotFoundTitle=????plugin
-PluginToadlet.unsupportedMethod=????method.
+PageMaker.modeAdvanced=??????
+PageMaker.modeAdvancedTooltip=????? Freenet ???????????????????
+PageMaker.modeSimple=??????
+PageMaker.modeSimpleTooltip=?????????????
+PeerManagerUserAlert.clockProblem=??? ${count} ???????, ??????????????? 24 
????. ??????????????. ??????????????????????????.
+PeerManagerUserAlert.clockProblemTitle=????
+PeerManagerUserAlert.connError=? ${count} ??????????????, ???????????, 
???????????.
+PeerManagerUserAlert.connErrorTitle=????????
+PeerManagerUserAlert.noConns=?????????????????, ??????. ?????????????; 
?????????, ??????????. ????????? 3 ?????, ???????? 5 ? 10 ?.
+PeerManagerUserAlert.noConnsTitle=???????
+PeerManagerUserAlert.noPeersDarknet=???????????, ????????. 
?????????????????(????????, ??????????, ????????????). ????????? 3 ??????, ???? 
5 ? 10 ?. ???????????(????; opennet), ?????????????.
+PeerManagerUserAlert.noPeersTestnet=???????????, ????????. 
?????????????????(????????, ??????????, ????????????). ????????? 3 ??????, ???? 
5 ? 10 ?. ???????????(????; opennet), ?????????????.
+PeerManagerUserAlert.noPeersTitle=????
+PeerManagerUserAlert.oneConn=????????. ?????????, ???????; ?????????, 
???????????????. ????"??"?????????, ???????????. ????????????? 3 ???(?? 5 ? 10 
????).
+PeerManagerUserAlert.onlyFewConnsTitle=?? ${count} ??????
+PeerManagerUserAlert.tooHighBwlimitDelayTime=????????????????(${delay}ms > 
${max}ms). ???????????, ??/????????, ????????.
+PeerManagerUserAlert.tooHighBwlimitDelayTimeTitle=bwlimitDelayTime ????
+PeerManagerUserAlert.tooHighPingTime=??????????????(${ping}ms > ${max}ms). 
???????????, ??/????????, ????????.
+PeerManagerUserAlert.tooHighPingTimeTitle=nodeAveragePingTime ????
+PeerManagerUserAlert.tooManyConns=????????(${count} > ${max}). 
??????????????????, ???????, ???????????????.
+PeerManagerUserAlert.tooManyConnsTitle=????????
+PeerManagerUserAlert.tooManyDisconnected=???????????(${count} > ${max}). 
?????????????????, ??????????????????????. ???"??"??????. ???, 
????????????????. ??????, ????????????????????????.
+PeerManagerUserAlert.tooManyDisconnectedTitle=????????
+PeerManagerUserAlert.tooManyNeverConnected=?????????(?? ${count} ?)???????. 
????????????????????????, ??????????.
+PeerManagerUserAlert.tooManyNeverConnectedTitle=???????????
+PeerManagerUserAlert.tooManyNeverConnectedWithLink=?????????(?? ${count} 
?)???????. ???????????${link}????${/link}?????????, ??????????.
+PeerManagerUserAlert.tooManyPeers=?????????(${count} > ${max}). 
???????????????????????, ???????????????. ????, ?????????????????????, 
??????????. ???"??"??????.
+PeerManagerUserAlert.tooManyPeersTitle=????????
+PeerManagerUserAlert.tooOldNeverConnectedPeers=?????????, ????????????????. 
???????, ???????????(??????????????).
+PeerManagerUserAlert.tooOldNeverConnectedPeersTitle=??????????
+PeerManagerUserAlert.twoConns=????????. ????????????, ??????????????. 
???"??"?????????, ???????????(????). ????????????? 3 ???(?? 5 ? 10 ????).
+PeersSayKeyBlownAlert.connectedSayBlownLabel=????????????????(?????????????????):
+PeersSayKeyBlownAlert.disconnectedSayBlownLabel=???????????????, ????????, 
????????????:
+PeersSayKeyBlownAlert.failedFetch=????????????. ?????????????, 
??????????????????, ???????????????. ??????????? Freenet ????????.
+PeersSayKeyBlownAlert.failedTransferSayBlownLabel=??????????????, ????????????:
+PeersSayKeyBlownAlert.fetching=?????????????????????.
+PeersSayKeyBlownAlert.intro=????????????????????! ??????????????????????, 
?????????????????(?????????)! ?????????????. ???????????????.
+PeersSayKeyBlownAlert.short=?????????????????!
+PeersSayKeyBlownAlert.titleWithCount=${count} ???: ????????!
+PluginManager.cannotSetOnceLoaded=??????????????
+PluginManager.loadedOnStartup=????????
+PluginManager.loadedOnStartupLong=?????, ???????????, ?????.
+PluginManager.loadedPlugins=????????
+PluginManager.loadedPluginsLong=??????, ?????????
+PluginManager.pluginLoadingFailed=????? ${name} ????
+PluginManager.pluginLoadingFailedShort=?????? ${name}!
+PluginManager.pluginLoadingFailedTitle=??????!
+PluginManager.pluginLoadingFailedWithMessage=????? ${name} ????: ${message}
+PluginManager.pluginReqNewerJVM=?? ${name} ??????? JVM ????. ?????? Sun Java 
1.5 ???? JVM, ???????.
+PluginManager.pluginReqNewerJVMTitle=?? ${name} ????? JVM ????.
+PluginToadlet.addPluginTitle=????
+PluginToadlet.failedToLoadPlugin=??????.
+PluginToadlet.failedToLoadPluginCheckClass=???????????. ??????????????, ?????? 
URL ??????.
+PluginToadlet.failedToLoadPluginTitle=??????
+PluginToadlet.internalNameTitle=????
+PluginToadlet.loadPluginCommand=????
+PluginToadlet.noWebInterface=???????????, ??????????.
+PluginToadlet.noWebInterfaceTitle=??????????
+PluginToadlet.pluginList=????
+PluginToadlet.pluginListTitle=????
+PluginToadlet.pluginNameTitle=????
+PluginToadlet.pluginNotFound=????????.
+PluginToadlet.pluginNotFoundTitle=??????
+PluginToadlet.returnToPluginsWithLinks=? ${link}??${/link} ????.
+PluginToadlet.unsupportedMethod=??????.
+PluginToadlet.unsupportedMethodTitle=??????
 PluginToadlet.visit=??
-PproxyToadlet.Load=??
+PproxyToadlet.Error=??
+PproxyToadlet.Load=??
 PproxyToadlet.cancel=??
-PproxyToadlet.classNameTitle=Class??
-PproxyToadlet.internalIDTitle=????
+PproxyToadlet.changeReloadOnStartup=??
+PproxyToadlet.classNameTitle=????
+PproxyToadlet.downloadNotAllowedFromRemoteServer=??????????????.
+PproxyToadlet.internalIDTitle=?????
 PproxyToadlet.loadOfficialPlugin=??????
-PproxyToadlet.loadOfficialPluginLabel=??????
-PproxyToadlet.loadOfficialPluginText=???????? Freenet ???????. 
????????????????, ????????.
-PproxyToadlet.loadOfficialPluginWarning=??: ?????????????????, ??? Freenet ??. 
?????????????, ?????. ?????????????, ??????????.
+PproxyToadlet.loadOfficialPluginLabel=??????
+PproxyToadlet.loadOfficialPluginText=?????? Freenet ???????. ????????????????, 
????????.
+PproxyToadlet.loadOfficialPluginWarning=??: ????????????????, ??? Freenet ??. 
?????????????, ?????. ?????????????, ??????????.
 PproxyToadlet.loadOtherPlugin=???????
-PproxyToadlet.loadOtherPluginText=?????????????? URL. ???????????????????, 
???????????????????. ???????????????????, ???????.
+PproxyToadlet.loadOtherPluginText=?????????????? URL. ???????????????????, 
???????????????????. ????????????????????, ????????.
 PproxyToadlet.loadOtherURLLabel=??? URL
 PproxyToadlet.loadPluginLabel=??Plugin:
-PproxyToadlet.noPlugins=??????plugins
+PproxyToadlet.noPlugins=????????
 PproxyToadlet.noVersion=?
-PproxyToadlet.pluginNotFoundReload=??????????plugin.
-PproxyToadlet.pluginNotFoundReloadTitle=?????Plugin(??)
-PproxyToadlet.pluginUnloaded=?plugin????
-PproxyToadlet.pluginUnloadedWithName=${name}??plugin????.
-PproxyToadlet.plugins=Plugins
-PproxyToadlet.pluginsWithNodeName=${name}?plugins
+PproxyToadlet.pluginDirectoryNotCreated=????????.
+PproxyToadlet.pluginNotDownloaded=??????.
+PproxyToadlet.pluginNotFoundReload=???????????.
+PproxyToadlet.pluginNotFoundReloadTitle=??????(??)
+PproxyToadlet.pluginStopping=?????
+PproxyToadlet.pluginUnloaded=??????
+PproxyToadlet.pluginUnloadedWithName=?????? ${name} ?.
+PproxyToadlet.plugins=??
+PproxyToadlet.pluginsWithNodeName=${name} ???
+PproxyToadlet.refreshOnStartup=?????????
 PproxyToadlet.reload=??
-PproxyToadlet.reloadPurgeWarning=?????????????????. ??????????????????, 
??????????!
-PproxyToadlet.returnToPluginPage=??plugin??
-PproxyToadlet.startedAtTitle=????
+PproxyToadlet.reloadExplanation=???????????????????.
+PproxyToadlet.reloadOnStartupShort=?????
+PproxyToadlet.reloadPluginTitle=????
+PproxyToadlet.reloadPurgeWarning=?????????????. ???????????????, ??????????!
+PproxyToadlet.reloadWarning=?????????????!
+PproxyToadlet.returnToPluginPage=??????
+PproxyToadlet.startedAtTitle=????
+PproxyToadlet.startingPluginName=????
+PproxyToadlet.startingPluginStatus=????
+PproxyToadlet.startingPluginTime=????
+PproxyToadlet.startingPluginsTitle=?????
+PproxyToadlet.unauthorized=??????????.
+PproxyToadlet.unauthorizedTitle=????
 PproxyToadlet.unload=??
-PproxyToadlet.unloadPluginTitle=???plugin?
-PproxyToadlet.unloadPluginWithName=??????${name}??
+PproxyToadlet.unloadPluginTitle=???????
+PproxyToadlet.unloadPluginWithName=?????? ${name} ??
+PproxyToadlet.unloadPurge=????????
 PproxyToadlet.versionTitle=??
+PproxyToadlet.startingPluginStatus.downloading=??????
+PproxyToadlet.startingPluginStatus.starting=???
 QueueToadlet.DUinProgress=???????? (${size})
 QueueToadlet.DinProgress=???????? (${size})
 QueueToadlet.UinProgress=???????? (${size})
-QueueToadlet.change=???
+QueueToadlet.change=??
 QueueToadlet.completedDU=?????????? (${size})
 QueueToadlet.completedDinDownloadDirectory=???????????????? (${size})
 QueueToadlet.completedDinTempDirectory=???????????????? (${size})
@@ -319,26 +692,40 @@
 QueueToadlet.completedUDirectory=???????? (${size})
 QueueToadlet.delete=??
 QueueToadlet.download=??
+QueueToadlet.downloadFiles=????
+QueueToadlet.downloadFilesInstructions=??????????????????(??????)
 QueueToadlet.downloadSucceeded=?? ${origlink}${filename}${/origlink} ???????. 
?${link}???${/link}????  (${size}).
 QueueToadlet.downloadSucceededTitle=????: ${filename}
+QueueToadlet.enqueuedFailure=?? ${number} ?????????:
+QueueToadlet.enqueuedSuccessfully=?? ${number} ???????????:
 QueueToadlet.errorAccessDenied=????: ????!
+QueueToadlet.errorNoKeyToD=??????????.
 QueueToadlet.failedD=????? (${size})
 QueueToadlet.failedDU=????????? (${size})
 QueueToadlet.failedU=??????? (${size})
 QueueToadlet.fileName=??
-QueueToadlet.identifier=??
+QueueToadlet.files=??
+QueueToadlet.globalQueueIsEmpty=?????????
+QueueToadlet.identifier=???
 QueueToadlet.insertAs=???:
 QueueToadlet.insertFile=????
 QueueToadlet.insertFileBrowseLabel=?????????
+QueueToadlet.insertFileCompressLabel=??
 QueueToadlet.insertFileInsertFileLabel=????
 QueueToadlet.insertFileLabel=??????????(???!)
+QueueToadlet.insertFileResetForm=????
 QueueToadlet.key=??
 QueueToadlet.legend=??
 QueueToadlet.mimeType=MIME ??
 QueueToadlet.none=?
-QueueToadlet.persistence=??
+QueueToadlet.notLoadedYet=??????????????. ?????.
+QueueToadlet.notLoadedYetTitle=??????
+QueueToadlet.panicButton=????
+QueueToadlet.panicButtonConfirmation=??????????????!
+QueueToadlet.persistence=???
 QueueToadlet.persistenceForever=??
 QueueToadlet.persistenceNone=?
+QueueToadlet.persistenceReboot=??
 QueueToadlet.persistenceRebootr=??
 QueueToadlet.priority=???
 QueueToadlet.priority0=??
@@ -358,52 +745,129 @@
 QueueToadlet.title=${nodeName}?????
 QueueToadlet.totalSize=????
 QueueToadlet.unknown=??
+QueueToadlet.uploadSucceeded=?? ${filename} (?? ${size}) ??????? Freenet ?. 
?${link}???${/link} ????.
+QueueToadlet.uploadSucceededTitle=????: ${filename}
+QueueToadlet.warningUnsafeContent=???????
 QueueToadlet.wipD=???: ?? (${size})
 QueueToadlet.wipDU=???: ???? (${size})
 QueueToadlet.wipU=???: ?? (${size})
+RequestStarterGroup.schedulerCHKInserts=????????(CHK ??)
+RequestStarterGroup.schedulerCHKRequests=????????(CHK ??)
+RequestStarterGroup.schedulerLong=?????????????.
+RequestStarterGroup.schedulerSSKInserts=????????(SSK ??)
+RequestStarterGroup.schedulerSSKRequests=????????(SSK ??)
 RevocationKeyFoundUserAlert.text=??????????????????????. ????????????????????! 
??, ?????????????, ???"???"?????????. ?????????????????????. ???????????????. 
?????: ${message}.
 RevocationKeyFoundUserAlert.title=????????????!
+SSL.enable=??? SSL ????
+SSL.enableLong=??? SSL ????
+SSL.keyPass=??????
+SSL.keyPassLong=??????
+SSL.keyStore=???????????
+SSL.keyStoreLong=???????????
+SSL.keyStorePass=????????
+SSL.keyStorePassLong=????????
+SSL.version=SSL ??
+SSL.versionLong=SSL ??, ????? SSLv3 ?? TLSv1 (???? SSLv3)
 ShortOption.parseError=????????????????: ${error}
+SimpleToadletServer.advancedMode=?????????
+SimpleToadletServer.advancedModeLong=????????????????????. ???????????.
 SimpleToadletServer.cssName=??????
-SimpleToadletServer.cssNameLong=?? Freenet ?????????
+SimpleToadletServer.cssNameLong=?? Freenet ???????
+SimpleToadletServer.cssOverride=???? CSS ?????(??!)
+SimpleToadletServer.cssOverrideCantRead=??????? CSS ???: ${filename}
+SimpleToadletServer.cssOverrideLong=???????????? CSS ????????. ??: CSS ??????, 
??????? CSS ????! ???????. (?????? CSS ?? devl at freenetproject 
???????????????? ;))
+SimpleToadletServer.cssOverrideNotInUploads=?????????: ?? ${filename} 
???????????!
+SimpleToadletServer.doRobots=? robots.txt ???????
+SimpleToadletServer.doRobotsLong=???? /robots.txt ?? google, ????, ?? wget 
?????
+SimpleToadletServer.enableInlinePrefetch=?????????????
+SimpleToadletServer.enableInlinePrefetchLong=???????????????????, ??????????. 
??????.
+SimpleToadletServer.enableJS=? FProxy ?? Javascript?
+SimpleToadletServer.enableJSLong=???? FProxy ?? Javascript "????". ??????????. 
???, ????????, freesite ????? Javascript.
+SimpleToadletServer.enablePersistentConnections=?????? HTTP ??? (???????)
+SimpleToadletServer.enablePersistentConnectionsLong=?????????, 
??????????????????? HTTP ??, ????????.
+SimpleToadletServer.enabled=???? FProxy?
+SimpleToadletServer.enabledLong=????? FProxy ???? HTTP ??
+SimpleToadletServer.illegalCSSName=CSS ???????????!
+SimpleToadletServer.panicButton=?????????
+SimpleToadletServer.panicButtonLong=???????'????', ????????????????, ?????????.
+SimpleToadletServer.port=FProxy ????
+SimpleToadletServer.ssl=?? SSL?
+SimpleToadletServer.sslLong=??? FProxy ??? SSL
+StartupToadlet.entropyErrorContent=?????????... Freenet ???????????.
+StartupToadlet.entropyErrorTitle=????!
+StartupToadlet.isStartingUp=???????, ???.
+StartupToadlet.title=Freenet ?????
 StaticToadlet.pathInvalidChars=??? URI ??????????.
 StaticToadlet.pathNotFound=????????.
 StaticToadlet.pathNotFoundTitle=??????
-StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
-StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
+StatisticsToadlet.ackOnlyBytes=???????: ${total}
+StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
? CHK ???, ${SSKhandlers} ? SSK ???
+StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
? CHK ???, ${SSKhandlers} ? SSK ???
+StatisticsToadlet.adminBytes=????: ${initial} ?????, ${changedIP} ?????????, 
${disconn} ?????, ${routingStatus} ???????
 StatisticsToadlet.allocMemory=Java ??????: ${memory}
+StatisticsToadlet.announceBytes=????: ${total}
+StatisticsToadlet.authBytes=????: ?? ${total}
 StatisticsToadlet.bandwidthTitle=??
 StatisticsToadlet.cpus=???CPU??: ${count}
+StatisticsToadlet.debuggingBytes=????: ${netColoring} ?????, ${ping} ? ping, 
${probe} ?????, ${routed} ???????.
+StatisticsToadlet.fullTitle=${name} ?????
 StatisticsToadlet.getLogs=?????????
 StatisticsToadlet.inputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.insertOutput=????(?????): CHK ${chk} SSK ${ssk}.
 StatisticsToadlet.javaVersion=Java ??: ${version}
-StatisticsToadlet.jeDumpButton=????JE??
+StatisticsToadlet.jeDumpButton=?? JE ??
 StatisticsToadlet.jvmInfoTitle=JVM??
 StatisticsToadlet.jvmVendor=JVM ???? ${vendor}
 StatisticsToadlet.jvmVersion=JVM??: ${version}
 StatisticsToadlet.maxMemory=Java ?????: ${memory}
+StatisticsToadlet.noRequests=?????????????.
+StatisticsToadlet.nodeToNodeBytes=?????: ${total}
+StatisticsToadlet.offerReplys=????????: ${chk} ? CHK, ${ssk} ? SSK.
+StatisticsToadlet.offeredKeyOutput=????: ???? ${total}, ???? ${offered}
 StatisticsToadlet.osArch=????????: ${arch}
 StatisticsToadlet.osName=??????: ${name}
 StatisticsToadlet.osVersion=??????: ${version}
 StatisticsToadlet.outputRate=????: ?? ${rate} (???? ${max})
 StatisticsToadlet.payloadOutput=????: ${total} (?? ${rate}) (${percent}%)
 StatisticsToadlet.peerStatsTitle=????
+StatisticsToadlet.priority=???
+StatisticsToadlet.requestOutput=????(?????): CHK ${chk} SSK ${ssk}.
+StatisticsToadlet.resendBytes=????: ${total}
+StatisticsToadlet.routingDisabled=??????(??????????, ????????????)
+StatisticsToadlet.routingDisabledShort=??????
+StatisticsToadlet.running=???
 StatisticsToadlet.statisticGatheringTitle=????
-StatisticsToadlet.threadDumpButton=????????
+StatisticsToadlet.swapOutput=????: ${total}.
+StatisticsToadlet.threadDumpButton=??????
 StatisticsToadlet.threads=??????: ${running}/${max}
+StatisticsToadlet.threadsByPriority=?????????
 StatisticsToadlet.totalInput=????: ${total} (?? ${rate})
 StatisticsToadlet.totalOutput=????: ${total} (?? ${rate})
-StatisticsToadlet.transferringRequests=????: ?? ${senders}, ?? ${receivers}
+StatisticsToadlet.totalOverhead=???????: ?? ${rate} (${percent}%).
+StatisticsToadlet.transferringRequests=??????: ${senders} ?????, ${receivers} 
?????
+StatisticsToadlet.unaccountedBytes=????: ${total} (${percent}%)
+StatisticsToadlet.uomBytes=??????: ${total}
 StatisticsToadlet.usedMemory=Java ??????: ${memory}
 StatisticsToadlet.versionTitle=??????
+StatisticsToadlet.waiting=???
 SymlinkerToadlet.symlinks=ToadletServer??????
+TestnetHandler.cannotEnableDisableOnTheFly=?????????????(testnet)??; 
????????????
+TestnetHandler.enable=????????(testnet)???(??!)
+TestnetHandler.enableLong=?????????(testnet)??(??!). ???????????????????????, 
??????????????.
+TestnetHandler.port=????(Testnet)????
+TestnetHandler.portLong=????(Testnet)???? (-1 = listenPort+1000)
 TextModeClientInterfaceServer.allowedHosts=??????
+TextModeClientInterfaceServer.allowedHostsLong=????????????????????. 
???????????: ???, ???????, ??? CIDR ???????(?? 192.168.0.0/24).
 TextModeClientInterfaceServer.bindTo=??????
 TextModeClientInterfaceServer.bindToLong=?????IP??
 TextModeClientInterfaceServer.enableInputOutput=???stdout/stdin?
+TextModeClientInterfaceServer.enableInputOutputLong=???????????????????????? 
(??????????? telnet ??????, ???????? socket ????)
 TextModeClientInterfaceServer.enabled=??????
 TextModeClientInterfaceServer.enabledLong=?????????????
+TextModeClientInterfaceServer.ssl=?? SSL?
+TextModeClientInterfaceServer.sslLong=???????????????? SSL
 TextModeClientInterfaceServer.telnetPortNumber=?????
+TextModeClientInterfaceServer.telnetPortNumberLong=???????????? TCP ????
 TimeSkewDetectedUserAlert.shortText=???????????????. Freenet ?????????!
 TimeSkewDetectedUserAlert.text=?????????????????. ?????. ??????????, ????????. 
?????????????????, ??????, ????????.
 TimeSkewDetectedUserAlert.title=???????!
@@ -414,17 +878,26 @@
 Toadlet.internalErrorTitle=????
 Toadlet.no=?
 Toadlet.nodeHomepage=????
-Toadlet.notSupportedTitle=???
+Toadlet.notSupportedTitle=???
 Toadlet.notSupportedWithClass=?????????? Freenet (${class}) ???????.
 Toadlet.ok=?
 Toadlet.permRedirectWithReason=????: ${reason}
 Toadlet.returnToNodeHomepage=??????
 Toadlet.returnToPrevPage=?????
+Toadlet.returnToQueuepage=??????
 Toadlet.tempRedirectWithReason=????: ${reason}
-Toadlet.unauthorized=??????????.
+Toadlet.unauthorized=???????????.
 Toadlet.unauthorizedTitle=????
 Toadlet.yes=?
-TranslationToadlet.bracketRemoveOverride=(???????!)
+ToadletContextImpl.cannotParseContentLength=????????: ${error}
+ToadletContextImpl.cannotParseContentLengthWithError=????????: ${error}
+ToadletContextImpl.headersLineTooLong=???????????????
+ToadletContextImpl.methodNotAllowed=HTTP ?????
+ToadletContextImpl.noContentLengthInPOST=? POST ???????????
+ToadletContextImpl.noSuchToadlet=???????? Toadlet
+ToadletContextImpl.parseErrorWithError=????: ${error}
+ToadletContextImpl.uriParseErrorTitle=URI ????
+TranslationToadlet.bracketRemoveOverride=(????????!)
 TranslationToadlet.bracketTranslateIt=(?????????!)
 TranslationToadlet.bracketUpdateTranslation=(??????)
 TranslationToadlet.confirmRemoveOverride=????????????:(${key} - ${value})??
@@ -435,81 +908,120 @@
 TranslationToadlet.originalVersionLabel=?????(????)
 TranslationToadlet.reEdit=????????
 TranslationToadlet.remove=??
+TranslationToadlet.removeOverrideTitle=???????
+TranslationToadlet.removeOverrideWarningTitle=????????????!
 TranslationToadlet.returnToTranslations=??????
 TranslationToadlet.showEverything=????,???????????
 TranslationToadlet.translationKeyLabel=????
 TranslationToadlet.translationUpdateTitle=????
 TranslationToadlet.translationUpdatedTitle=??????!
 TranslationToadlet.updateTranslationCommand=??????!
-UnknownContentTypeException.explanation=?? Freenet ??????? MIME ??. ????, 
?????????????????????, ????????. ???, ?????????????????????, ?????????????; 
??????????, ???????????, ???????????(???????????????, ???????????????). 
???????, ??????????????????, ?????? script ???????????????.
+UnknownContentTypeException.explanation=?? Freenet ??????? MIME ??. ????, 
?????????????????????, ????????. ???, ?????????????????????, ?????????????; 
??????????, ???????????, ???????????(???????????????, ???????????????). 
???????, ????????????????, ?????? script ???????????????.
 UnknownContentTypeException.title=??????????????: ${type}
-UpdatedVersionAvailableUserAlert.armed=?????????????????Freenet???,??????.
+UpdateDeployContext.cannotUpdateNoExtJar=??? wrapper.conf ????? 
freenet-ext.jar (??????? freenet.jar: ${mainFilename})
+UpdateDeployContext.cannotUpdateNoJars=??? wrapper.conf ??? Freenet ??? jar ??
+UpdateDeployContext.cannotUpdateNoMainJar=??? wrapper.conf ????? freenet.jar 
(??????? freenet-ext.jar: ${extFilename})
+UpdateDeployContext.updateCatastrophe=??????: ??????? ${old}, ???????? ${new} 
??? ${old}, ??*???????*! ???????? ${new} ??? ${old} ???????.
+UpdateDeployContext.updateFailedCannotDeleteOldConfig=??????? ${old}, 
??????????????. ??????.
+UpdateDeployContext.updateFailedNonStandardConfig=???????????????????: ???? 
main=${main} ext=${ext} - ????????! ???????????, ????? wrapper.conf ??.
+UpdatedVersionAvailableUserAlert.alsoDownloadedNewExtJar=????????? Freenet 
????, ??? ${version}
+UpdatedVersionAvailableUserAlert.armed=?????????? Freenet ????????,??????.
+UpdatedVersionAvailableUserAlert.clickToUpdateASAP=??????, ?????????????.
 UpdatedVersionAvailableUserAlert.clickToUpdateNow=????????????????.
-UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????????Freenet????,???${version}.
-UpdatedVersionAvailableUserAlert.downloadedNewJar=?????????????Freenet??,???${version}.
-UpdatedVersionAvailableUserAlert.fetchingNewNode=???????????????Freenet??(???? 
${nodeVersion}).
-UpdatedVersionAvailableUserAlert.notLatest=??????????????????.
-UpdatedVersionAvailableUserAlert.title=Freenet????????????
+UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????? Freenet ????, 
??? ${version}.
+UpdatedVersionAvailableUserAlert.downloadedNewJar=?????????? Freenet ??, ??? 
${version}.
+UpdatedVersionAvailableUserAlert.fetchingNewBoth=????????? Freenet ?? (????? 
${nodeVersion}, ??????? ${extVersion}).
+UpdatedVersionAvailableUserAlert.fetchingNewExt=????????? Freenet ?? (? 
${extVersion} ?????? jar ??).
+UpdatedVersionAvailableUserAlert.fetchingNewNode=??????????? Freenet ?? (????? 
${nodeVersion}).
+UpdatedVersionAvailableUserAlert.finalCheck=???????????????????? (??: 
${count}/${max}, ????????: ${time}).
+UpdatedVersionAvailableUserAlert.notLatest=?????????????????.
+UpdatedVersionAvailableUserAlert.shortArmed=????????? Freenet ??, ?????????.
+UpdatedVersionAvailableUserAlert.shortNotReadyNotArmed=????????? Freenet ??, 
?????????????.
+UpdatedVersionAvailableUserAlert.shortReadyNotArmed=?????????? Freenet ??, 
?????????????.
+UpdatedVersionAvailableUserAlert.title=???? Freenet ??????
 UpdatedVersionAvailableUserAlert.updateASAPButton=????
-UpdatedVersionAvailableUserAlert.updateASAPQuestion=????????????????????????
+UpdatedVersionAvailableUserAlert.updateASAPQuestion=?????????????????, ????????
 UpdatedVersionAvailableUserAlert.updateNowButton=????!
 UserAlert.apply=??
 UserAlert.hide=??
 UserAlert.reset=??
 UserAlertManager.alertsOnAlertsPage=| ??${link}????${/link}??????.
 UserAlertManager.alertsTitle=?????
-UserAlertManager.clickForMore=?????????????????, ??????.
-UserAlertManager.criticalErrorCountLabel=????:
+UserAlertManager.clickForMore=????????????????, ??????.
+UserAlertManager.criticalErrorCountLabel=????:
 UserAlertManager.dumpEventsButton=???????
 UserAlertManager.errorCountLabel=??:
 UserAlertManager.minorCountLabel=??:
 UserAlertManager.totalLabel=??:
 UserAlertManager.warningCountLabel=??:
 UserAlertsToadlet.titleWithName=${name} ?????
-WelcomeToadlet.activityTitle=????
+WelcomeToadlet.activityTitle=????
 WelcomeToadlet.alertsSummary=??????
 WelcomeToadlet.arkFetchCount=ARK???: ${total}
 WelcomeToadlet.confirmAddBookmarkSubTitle=??????
-WelcomeToadlet.confirmExternalLinkTitle=???????
-WelcomeToadlet.confirmExternalLinkWithURL=??????????????${url}???????? Freenet 
???????????????????????????????
+WelcomeToadlet.confirmAddBookmarkTitle=????
+WelcomeToadlet.confirmAddBookmarkWithKey=???????? ${key} ??????, ?????????:
+WelcomeToadlet.confirmExternalLinkSubTitle=??????
+WelcomeToadlet.confirmExternalLinkTitle=??: ????
+WelcomeToadlet.confirmExternalLinkWithURL=??????????????${url}????????? 
Freenet ???????????????????????????????
+WelcomeToadlet.confirmFIN=?????????? Frost ???
+WelcomeToadlet.databaseStatsSubTitle=?????
+WelcomeToadlet.databaseStatsTitle=?? JE ??
 WelcomeToadlet.disabledAlert=????
 WelcomeToadlet.extVersion=Freenet-ext ????:${build} r${rev}
 WelcomeToadlet.extVersionWithRecommended=Freenet-ext ????:${build} 
(??????${recbuild}) ????:${rev}
 WelcomeToadlet.fetch=??
 WelcomeToadlet.fetchKeyLabel=????
-WelcomeToadlet.finInsertSuccessWithKey=??????????? ${key} ?
+WelcomeToadlet.finInsertSuccessWithKey=????????? ${key}.
+WelcomeToadlet.finInsertedTitle=??
+WelcomeToadlet.finTitle=?? Frost ????
+WelcomeToadlet.fromHeader=??
+WelcomeToadlet.goToExternalLink=???????
 WelcomeToadlet.homepageFullTitleWithName=${name} ? Freenet FProxy ??
 WelcomeToadlet.ieWarning=?????????Internet Explorer?????????????????
+WelcomeToadlet.ieWarningTitle=??????!
 WelcomeToadlet.insertCount=??: ${total}
-WelcomeToadlet.insertFailedTitle=????
-WelcomeToadlet.insertSucceededTitle=??????
-WelcomeToadlet.insertedTitle=????
-WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?????? key 
${link}${name}${/link}?
+WelcomeToadlet.insertFailedTitle=????
+WelcomeToadlet.insertFailedWithMessage=?????, ?????: ${message}
+WelcomeToadlet.insertSucceededTitle=????
+WelcomeToadlet.insertedTitle=??
+WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?? ${link}${name}${/link} 
???????.
 WelcomeToadlet.keyRequestLabel=??:
+WelcomeToadlet.messageHeader=??
 WelcomeToadlet.nodeUpdateConfirm=????????Freenet????
 WelcomeToadlet.nodeUpdateConfirmTitle=??????
+WelcomeToadlet.post=??
 WelcomeToadlet.privateKeyHeader=??
 WelcomeToadlet.publicKeyHeader=??
-WelcomeToadlet.requestCount=??: ${total}
+WelcomeToadlet.requestCount=??: ${total}
 WelcomeToadlet.restart=??
 WelcomeToadlet.restartConfirm=??????????Freenet????
 WelcomeToadlet.restartConfirmTitle=????
 WelcomeToadlet.restartNode=????
-WelcomeToadlet.restarting=??????????????,?????????????.?????Freenet.
-WelcomeToadlet.restartingTitle=?Freenet???????.
+WelcomeToadlet.restarting=?????????????, ?????????????. ?????Freenet.
+WelcomeToadlet.restartingTitle=Freenet ???????.
 WelcomeToadlet.shutdown=??
 WelcomeToadlet.shutdownConfirm=???????? Freenet ????
 WelcomeToadlet.shutdownConfirmTitle=????
+WelcomeToadlet.shutdownDone=Freenet ???????.
 WelcomeToadlet.shutdownNode=????
 WelcomeToadlet.splitfileErrorLabel=??????
+WelcomeToadlet.subjectHeader=??
+WelcomeToadlet.targetBoardHeader=?????
 WelcomeToadlet.testnetWarningTitle=??(????)??
 WelcomeToadlet.thanks=???? Freenet.
-WelcomeToadlet.transferringRequestCount=????: ${total}
+WelcomeToadlet.threadDumpNotUsingWrapper=???????????, ????????????!
+WelcomeToadlet.threadDumpSubTitle=????????
+WelcomeToadlet.threadDumpTitle=??????
+WelcomeToadlet.threadDumpWithFilename=????????, ????? ${filename} ?????.
+WelcomeToadlet.transferringRequestCount=??????: ${total}
 WelcomeToadlet.update=??
 
WelcomeToadlet.updating=?Freenet??????,???????????.?????????????????,?????????????.
 WelcomeToadlet.updatingTitle=?????
+WelcomeToadlet.uriWouldHaveBeen=URI ???: ${uri}
 WelcomeToadlet.version=Freenet ??:${fullVersion} ????:${build} r${rev}
 WelcomeToadlet.versionHeader=???????
-WrapperConfig.wrapper.java.maxmemory.long=Freenet ???????. ???????????, 
Freenet ?????????; ?????????????, ????????. ?????????? Freenet ??????.
+WelcomeToadlet.writtenDatabaseStats=????????????????????????
+WrapperConfig.wrapper.java.maxmemory.long=Freenet ???????. ???????????, 
Freenet ?????????; ??????????????, ????????. ?????????? Freenet ??????.
 WrapperConfig.wrapper.java.maxmemory.short=?????(???MiB)
 End

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties 
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties 
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -1,3 +1,14 @@
+Announcer.announceAlertIntro=Freenet ??????? - ???????????. ????????, 
????????. ??????? Freenet ????????, ????????, ????? 24 ??????.
+Announcer.announceAlertNoSeednodes=??? seednodes.fref ??, 
????????????????(opennet)?. ?????????, ??? 
http://downloads.freenetproject.org/alpha/opennet/ ???????.
+Announcer.announceAlertShort=???????????, ????????.
+Announcer.announceAlertTitle=?????
+Announcer.announceDetails=??????? ${recentSentAnnouncements} ?????, ??? 
${runningAnnouncements} ??????, ????? ${addedNodes} ???(??? ${refusedNodes} 
??????). ??????? ${connectedSeednodes} ???????, ???????? 
${disconnectedSeednodes} ?????.
+Announcer.announceDisabledTooOld=?????????, ???????? Freenet ????. ?????????, 
????????????. ???????????(????????????????, ???????).
+Announcer.announceDisabledTooOldShort=??????????, ???? Freenet ?????. 
?????????.
+Announcer.announceDisabledTooOldTitle=???????(????)
+Announcer.announceLoading=Freenet ?????????, ?????????????. ??????????????.
+Announcer.coolingOff=????? ${time} ???, ??????????????????????, ?????????????, 
??????????.
+Bookmark.noName=??
 BookmarkEditorToadlet.addBookmark=????
 BookmarkEditorToadlet.addCategory=????
 BookmarkEditorToadlet.addDefaultBookmarks=??????????.
@@ -3,5 +14,5 @@
 BookmarkEditorToadlet.addNewBookmark=??????
 BookmarkEditorToadlet.addNewCategory=?????
-BookmarkEditorToadlet.addedNewBookmark=??????????.
+BookmarkEditorToadlet.addedNewBookmark=??????????.
 BookmarkEditorToadlet.addedNewBookmarkTitle=???????
 BookmarkEditorToadlet.bookmarkDoesNotExist="${bookmark}"???????.
@@ -24,41 +35,58 @@
 BookmarkEditorToadlet.editBookmarkTitle=????
 BookmarkEditorToadlet.editCategoryTitle=????
 BookmarkEditorToadlet.error=??
-BookmarkEditorToadlet.hasAnActivelinkLabel=? freesite ?????????
+BookmarkEditorToadlet.hasAnActivelinkLabel=?? freesite ?????????
 BookmarkEditorToadlet.invalidKey=???Freenet??.
 BookmarkEditorToadlet.invalidKeyTitle=????
-BookmarkEditorToadlet.invalidKeyWithReason=???Freenet??.
+BookmarkEditorToadlet.invalidKeyWithReason=??? Freenet ??.
 BookmarkEditorToadlet.keyLabel=??:
 BookmarkEditorToadlet.moveDown=??
 BookmarkEditorToadlet.moveUp=??
 BookmarkEditorToadlet.myBookmarksTitle=????
 BookmarkEditorToadlet.nameLabel=??:
 BookmarkEditorToadlet.paste=??
-BookmarkEditorToadlet.pasteOrCancel=??????????????,??????.
+BookmarkEditorToadlet.pasteOrCancel=????????????, ??????.
 BookmarkEditorToadlet.pasteTitle=??/??
 BookmarkEditorToadlet.save=??
 BookmarkEditorToadlet.title=?????
 BookmarkEditorToadlet.urlDecodeError=URL????
+BookmarkItem.bookmarkUpdated=???????? ${name} ?????? ${edition} ?.
+BookmarkItem.bookmarkUpdatedShort=?????? freesite ????: ${name}
+BookmarkItem.bookmarkUpdatedTitle=??????: ${name}
+BookmarkItem.bookmarkUpdatedWithLink=???????? ${link}${name}${/link} ?????? 
${edition} ?.
+BookmarkItem.deleteBookmarkUpdateNotification=????
+BookmarkItem.unnamedBookmark=?????
 BookmarkManager.list=????
+BookmarkManager.listLong=?????? freesite ??
+BookmarkManager.malformedBookmark=???????
 BooleanOption.parseError=????????: ${val} - ??? true ? false
-BuildOldAgeUserAlert.tooOld=?????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
??????????????)
-BuildOldAgeUserAlert.tooOldShort=??????? Freenet ??????, ???????????????! 
?????!
-BuildOldAgeUserAlert.tooOldTitle=?????
+BuildOldAgeUserAlert.tooOld=????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
???????????????)
+BuildOldAgeUserAlert.tooOldShort=????? Freenet ????????, ???????????????! 
?????!
+BuildOldAgeUserAlert.tooOldTitle=????
+CSSTokenizerFilter.supplementalCharsNotSupported=??????? 0xFFFF ? UCS-4 ??!
 ClockProblemDetectedUserAlert.shortText=??????????, Freenet ??????.
 ClockProblemDetectedUserAlert.text=Freenet ?????????(?????)????. 
??????????????, Freenet ??????.
-ClockProblemDetectedUserAlert.title=??????.
+ClockProblemDetectedUserAlert.title=??????.
+ConfigToadlet.appliedFailureExceptions=?????????, ?????????:
+ConfigToadlet.appliedFailureTitle=??????
 ConfigToadlet.appliedSuccess=??????????.
 ConfigToadlet.appliedTitle=???????
 ConfigToadlet.apply=??
 ConfigToadlet.configNavTitle=????
 ConfigToadlet.contributeTranslation=????????
+ConfigToadlet.defaultIs=???: '${default}'.
+ConfigToadlet.false=?
 ConfigToadlet.fullTitle=${name} ? Freenet ????
+ConfigToadlet.modeAdvanced=??????
+ConfigToadlet.modeSimple=??????
 ConfigToadlet.possibilitiesTitle=??
 ConfigToadlet.reset=??
 ConfigToadlet.returnToNodeConfig=??????
 ConfigToadlet.shortTitle=??
 ConfigToadlet.title=Freenet ????
-ConfigToadlet.wrapper=??
+ConfigToadlet.true=?
+ConfigToadlet.wrapper=????
+ConfigToadlet.wrapperSettingsTitle=??????
 ConfigurablePersister.doesNotExistCannotCreate=?????????????.
 ConfigurablePersister.existsCannotReadWrite=??????????????
 ConnectionsToadlet.nodeStatus.BACKED OFF=???
@@ -73,12 +101,25 @@
 ConnectionsToadlet.nodeStatus.LISTEN ONLY=???
 ConnectionsToadlet.nodeStatus.LISTENING=???
 ConnectionsToadlet.nodeStatus.NEVER CONNECTED=????
+ConnectionsToadlet.nodeStatus.ROUTING DISABLED=?????
 ConnectionsToadlet.nodeStatus.TOO NEW=??
 ConnectionsToadlet.nodeStatus.TOO OLD=??
 ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=????
+ConnectivityToadlet.addressTitle=??
+ConnectivityToadlet.byIPTitle=${ip} ?????????? - ${status} (??????? 
${tunnelLength})
+ConnectivityToadlet.byPortTitle=${port} ????????? - ${status} (??????? 
${tunnelLength})
+ConnectivityToadlet.connectivity=??????
 ConnectivityToadlet.connectivityTitle=??
+ConnectivityToadlet.firstReceiveLeadTime=?????????
+ConnectivityToadlet.firstSendLeadTime=?????????
+ConnectivityToadlet.local=??
+ConnectivityToadlet.localRemoteTitle=??/??
+ConnectivityToadlet.noreply=????
+ConnectivityToadlet.remote=??
+ConnectivityToadlet.sentReceivedTitle=??/?????
 ConnectivityToadlet.summaryTitle=??
-ContentDataFilter.unknownCharset=?????????????????. ????????????????, 
????????????.
+ConnectivityToadlet.title=${nodeName} ???????
+ContentDataFilter.unknownCharset=?????????????????. ????????????????, 
????????????.
 ContentDataFilter.unknownCharsetTitle=?????!
 ContentDataFilter.warningUnknownCharsetTitle=??: ?????? (${charset})
 DarknetConnectionsToadlet.activityInserts=??: ??${totalSenders}????, 
${CHKhandlers}?CHK???, ${SSKhandlers}?SSK???
@@ -86,63 +127,66 @@
 DarknetConnectionsToadlet.activityTitle=????
 DarknetConnectionsToadlet.add=??
 DarknetConnectionsToadlet.addPeerTitle=??????
-DarknetConnectionsToadlet.backedOff=???????:????????????,???????????.
+DarknetConnectionsToadlet.backedOff=???????: ????????????, ???????????.
 DarknetConnectionsToadlet.backedOffShort=???
 DarknetConnectionsToadlet.burstingShort=???
-DarknetConnectionsToadlet.busy=??:????????,??????????????????,??????????????.
+DarknetConnectionsToadlet.busy=??: ????????, ??????????????????, ?????????????.
 DarknetConnectionsToadlet.busyShort=??
 DarknetConnectionsToadlet.cancel=??
 DarknetConnectionsToadlet.cantFetchNoderefURL=??? ${url} ??????.?????.
 DarknetConnectionsToadlet.cantParseTryAgain=????????????:(${error}).?????.
 
DarknetConnectionsToadlet.cantParseWrongEnding=?????????:???????????End??,???????????:${end}
-DarknetConnectionsToadlet.clockProblemShort=????
+DarknetConnectionsToadlet.clockProblemShort=????
 DarknetConnectionsToadlet.confirmRemoveNodeTitle=???
 DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=????
 DarknetConnectionsToadlet.connected=???:??????????
 DarknetConnectionsToadlet.connectedShort=???
-DarknetConnectionsToadlet.disabled=???????:????????????????.
+DarknetConnectionsToadlet.darknetFnpPort=????(Darknet) FNP: ${port}/UDP 
(?????????, ???"??", ????; ???????????????)
+DarknetConnectionsToadlet.disabled=???????: ???????????????????.
 DarknetConnectionsToadlet.disabledShort=???
 DarknetConnectionsToadlet.disconnectingShort=???
 DarknetConnectionsToadlet.enterDescription=?????:
 DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=??????:????
 DarknetConnectionsToadlet.failedToAddNodeTitle=??????
-DarknetConnectionsToadlet.fcpPort=FCP: ${port}/tcp (?Frost,Thaw?Freenet???????)
-DarknetConnectionsToadlet.fileReference=??????????????:
+DarknetConnectionsToadlet.fcpPort=FCP: ${port}/TCP (? Frost, Thaw ? Freenet 
???????)
+DarknetConnectionsToadlet.fileReference=???????????????:
 DarknetConnectionsToadlet.fnpPort=FNP: ${port}/udp (???????;??????????????)
 DarknetConnectionsToadlet.forceRemove=????
 DarknetConnectionsToadlet.fproxyDisabled=FProxy???????)?????
-DarknetConnectionsToadlet.fproxyPort=FProxy: ${port}/tcp (?web????)
+DarknetConnectionsToadlet.fproxyPort=FProxy: ${port}/TCP (??????)
 DarknetConnectionsToadlet.fullTitle=${name}?${counts}???
 DarknetConnectionsToadlet.go=??
 DarknetConnectionsToadlet.idleTime=??????????????????
 DarknetConnectionsToadlet.idleTimeTitle=???????
 DarknetConnectionsToadlet.invalidSignature=??????????????(${error}).
 DarknetConnectionsToadlet.ipAddressTitle=??
+DarknetConnectionsToadlet.listenOnlyShort=???
 DarknetConnectionsToadlet.listeningShort=???
 DarknetConnectionsToadlet.myFriends=????
 DarknetConnectionsToadlet.myReferenceHeader=${linkref}??????${/linkref} 
(${linktext}????${/linktext})
-DarknetConnectionsToadlet.nameClickToMessage=????.????????????????????
+DarknetConnectionsToadlet.nameClickToMessage=????. ????????????????????
 DarknetConnectionsToadlet.nameTitle=??
-DarknetConnectionsToadlet.neverConnected=????:????????????????.
+DarknetConnectionsToadlet.neverConnected=????: ???????????????.
 DarknetConnectionsToadlet.neverConnectedShort=????
 DarknetConnectionsToadlet.noPeersFirstHalf=Freenet?????????????,???????.??
 DarknetConnectionsToadlet.noPeersSecondHalf=??,???????????????.
 DarknetConnectionsToadlet.noRefOrURL=???????????????URL. ?????.
-DarknetConnectionsToadlet.nodePortsTitle=????????
-DarknetConnectionsToadlet.notConnected=???:?????,??????????????????.
+DarknetConnectionsToadlet.nodePortsTitle=???????
+DarknetConnectionsToadlet.notConnected=???: ?????, ??????????????
 DarknetConnectionsToadlet.notConnectedShort=???
-DarknetConnectionsToadlet.pasteReference=???????????:
-DarknetConnectionsToadlet.privateNote=??????????
+DarknetConnectionsToadlet.opennetFnpPort=????(Opennet) FNP: ${port}/UDP 
(??????????, ???"???", ????; ??????????????)
+DarknetConnectionsToadlet.pasteReference=???????????:
+DarknetConnectionsToadlet.privateNote=???????????
 DarknetConnectionsToadlet.privateNoteTitle=????
 
DarknetConnectionsToadlet.referenceCopyWarning=???????${bold}????${/bold}??.??????${bold}????${/bold}.
 DarknetConnectionsToadlet.remove=???!
 DarknetConnectionsToadlet.removePeers=???????
 DarknetConnectionsToadlet.seedServersShort=??
 DarknetConnectionsToadlet.selectAction=-- ???? --
-DarknetConnectionsToadlet.sendMessageTitle=?????????
-DarknetConnectionsToadlet.sendMessageToPeers=???????????????
+DarknetConnectionsToadlet.sendMessageTitle=?????????
+DarknetConnectionsToadlet.sendMessageToPeers=???????????????
 DarknetConnectionsToadlet.statusTitle=??
-DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/tcp (??telnet????????)
+DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/TCP (?? telnet ????????)
 DarknetConnectionsToadlet.tooNewShort=??
 DarknetConnectionsToadlet.tooOldShort=??
 DarknetConnectionsToadlet.transferringRequests=????: ${senders}????, 
${receivers}????
@@ -154,110 +198,359 @@
 ExtOldAgeUserAlert.extTooOld=?? freenet-ext.jar ?????????, 
???????????????????: http://downloads.freenetproject.org/alpha/freenet-ext.jar.
 ExtOldAgeUserAlert.extTooOldShort=?? freenet-ext.jar ?????. ?????.
 ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext ??
+FProxyToadlet.abortToHomepage=?????? FProxy ??
+FProxyToadlet.alerts=???????
 FProxyToadlet.alertsTitle=??
+FProxyToadlet.backToFProxy=${link}???${/link}?? FProxy ??.
+FProxyToadlet.backToReferrer=${link}???${/link}??????.
 FProxyToadlet.config=??/??????
 FProxyToadlet.configTitle=??
 FProxyToadlet.dangerousContentTitle=????????
+FProxyToadlet.dangerousRSS=Freenet ??????????????? RSS ??. Freenet ?????? RSS 
??, ?? RSS ?????????(?????????, ??????????????????, ????????). Firefox 2.0 ? 
Internet Explorer 7.0 ???????? RSS ????, ??????????? "${type}".
+FProxyToadlet.dangerousRSSSubtitle=RSS ??????????
 FProxyToadlet.dangerousRSSTitle=???????? (RSS)
+FProxyToadlet.downloadInBackgroundToDisk=?????????????????
+FProxyToadlet.errorIsFatal=???????. ?????????????.
+FProxyToadlet.errorWithReason=??: ${error}
+FProxyToadlet.expectedKeyButGot=???? Freenet ??, ??????:
+FProxyToadlet.expectedMimeType=?? MIME ??: ${mime}
+FProxyToadlet.explanationTitle=??
+FProxyToadlet.fetchLargeFileAnywayAndDisplay=?????, ??????????????
+FProxyToadlet.fileInformationTitle=????
+FProxyToadlet.filenameLabel=??:
 FProxyToadlet.friends=??????
 FProxyToadlet.friendsTitle=??
 FProxyToadlet.goBack=?????
+FProxyToadlet.goBackToPrev=?????
 FProxyToadlet.homepage=??
+FProxyToadlet.invalidKeyTitle=??????
+FProxyToadlet.invalidKeyWithReason=??????: ${reason}
+FProxyToadlet.largeFile=??
+FProxyToadlet.largeFileExplanationAndOptions=??? Freenet ???????. 
????????????????????, ?? Freenet ?????????????. ???????:
+FProxyToadlet.mayChange=(???)
 FProxyToadlet.mimeType=MIME ???${mime}
-FProxyToadlet.openForce=?${link}??${/link}????? ${mime} ????????????????
+FProxyToadlet.notFoundTitle=???
+FProxyToadlet.openAsText=${link}???${/link}??????????? (???????, ??????????).
+FProxyToadlet.openForce=${link}???${/link}????? ${mime} ????????????????.
+FProxyToadlet.openForceDisk=${link}???${/link}????????????????.
+FProxyToadlet.openPossRSSAsPlainText=${link}???${/link}???????????(? IE7 ?? 
FF2 ?${bold}??????s${/bold}).
+FProxyToadlet.openPossRSSForceDisk=${link}???${/link}????????????????(????? 
Firefox 2.0.0, ${bold}??????????${/bold}, 2.0.1 ???????????).
+FProxyToadlet.openRSSAsRSS=${link}???${/link}?? RSS ?????? 
(?????????????${bold}????${/bold}, Freenet ???????? RSS ????).
+FProxyToadlet.openRSSForce=${link}????${/link}?? ${mime} ??????(? IE7 ?? FF2 
?${bold}??????${/bold}).
+FProxyToadlet.opennet=????????
 FProxyToadlet.opennetTitle=???
+FProxyToadlet.options=?????:
+FProxyToadlet.pathNotFound=???????.
 FProxyToadlet.pathNotFoundTitle=???????
+FProxyToadlet.plugins=???????
 FProxyToadlet.pluginsTitle=????
 FProxyToadlet.queue=????????
 FProxyToadlet.queueTitle=??
+FProxyToadlet.retryNow=????
+FProxyToadlet.sizeLabel=??:
 FProxyToadlet.sizeUnknown=??????
+FProxyToadlet.stats=??????
 FProxyToadlet.statsTitle=??
 FProxyToadlet.translationTitle=??
+FProxyToadlet.unableToRetrieve=Freenet ????????.
 FProxyToadlet.unknownMIMEType=MIME ??????
 FProxyToadlet.welcome=??
 FProxyToadlet.welcomeTitle=??
 FcpServer.allowedHosts=??????(????????)
 FcpServer.allowedHostsFullAccess=???????????
 
FcpServer.allowedHostsLong=???????????IP???????????????????????IP?????CIDR???IP????(?
 192.168.0.0/24)?
+FcpServer.assumeDownloadDDAIsAllowed=??????? DDA?
+FcpServer.assumeDownloadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA 
??????? TestDDARequest ??.
+FcpServer.assumeUploadDDAIsAllowed=??????? DDA?
+FcpServer.assumeUploadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA 
??????? TestDDARequest ??.
+FcpServer.downloadsFileCanCreateCannotReadOrWrite=???????????
+FcpServer.downloadsFileExistsCannotReadOrWrite=???????????
+FcpServer.enablePersistentDownload=????????
+FcpServer.enablePersistentDownloadLong=????? FCP ???? Persistence=forever. 
??????????????????????; ???????????, ???????????????.
+FcpServer.filenameToStorePData=??????????
+FcpServer.filenameToStorePDataLong=??????????????
+FcpServer.intervalBetweenWrites=???????????????
+FcpServer.intervalBetweenWritesLong=???????????????.
 FcpServer.isEnabled=??FCP???
+FcpServer.isEnabledLong=???? Freenet ?????(FCP)???
 FcpServer.portNumber=FCP?
+FcpServer.ssl=?? SSL?
+FcpServer.sslLong=??? FCP ?????? SSL
+FileOffer.commentLabel=??:
+FileOffer.fileLabel=??:
+FileOffer.mimeLabel=MIME ??:
+FileOffer.senderLabel=???:
+FileOffer.sizeLabel=??:
 FirstTimeWizardToadlet.bandwidthLimit=????
 FirstTimeWizardToadlet.bandwidthLimitLong=???????????????????????
 FirstTimeWizardToadlet.bwlimitHigherSpeed=???
 FirstTimeWizardToadlet.bwlimitLowerSpeed=???
 FirstTimeWizardToadlet.chooseNodeName=????????
+FirstTimeWizardToadlet.chooseNodeNameLong=?????????????(???????, 
????????????). ?????????(???????????????)???????????. 
???(???????????????)???????. ???, ????????????????????????????, ????????????, 
??????????????????.
 FirstTimeWizardToadlet.clickContinue=??????
 FirstTimeWizardToadlet.congratz=????????
+FirstTimeWizardToadlet.congratzLong=??, ??????????? Freenet ???. 
????"??"???????????????, ????????????????. ???, Freenet ?????????, ???????. 
?????????????? Freenet. ?????? Freenet ??????.
 FirstTimeWizardToadlet.connectToStrangers=???????
-FirstTimeWizardToadlet.connectToStrangersLong=??????? Freenet 
???????????????????????????????????? 
Freenet????????????????????Freenet??????????????????????????????
+FirstTimeWizardToadlet.connectToStrangersLong=??????? Freenet 
???????????????????????????????????? Freenet??????????????? Freenet 
????????????????????????????????????
 FirstTimeWizardToadlet.continue=??
 FirstTimeWizardToadlet.continueEnd=???????Freenet?
+FirstTimeWizardToadlet.datastoreSize=??????
 
FirstTimeWizardToadlet.datastoreSizeLong=???????????????????????????????????????????????????????????????????????????????????
 FirstTimeWizardToadlet.enableOpennet=????????? Freenet ??
-FirstTimeWizardToadlet.fivePercentDisk=?? 5% ??????
+FirstTimeWizardToadlet.fivePercentDisk=(? 5% ???????)
 FirstTimeWizardToadlet.homepageTitle=Freenet ???????
 FirstTimeWizardToadlet.iDoTrust=???????? ${interface} (${ip}) ????
 FirstTimeWizardToadlet.isNetworkTrusted=???????????
+FirstTimeWizardToadlet.isNetworkTrustedLong=????????????? ??????, 
??????????????????????????????. ??????????, ????????????????????.
+FirstTimeWizardToadlet.memoryLimit=??????
 FirstTimeWizardToadlet.memoryLimitLong=???? Freenet 
????????????????????/???Freenet ??????????????????????????????????????? 128MB 
??????? 1GB ????????????? 256MB??????????? Freenet ?????
 FirstTimeWizardToadlet.noNetworkIF=?????????
 FirstTimeWizardToadlet.noNetworkIFLong=Freenet ??????????????????????? Freenet?
 FirstTimeWizardToadlet.opennetNo=???????????????? Freenet ???????????????????
-FirstTimeWizardToadlet.opennetWarning=?? Freenet ?????????????????? Freenet 
?????????????????????????????????????????????Freenet ???????????????????????
+FirstTimeWizardToadlet.opennetWarning=?? Freenet ?????????????????? Freenet 
?????????????????????????????????????????????Freenet ??????????????????????
 FirstTimeWizardToadlet.opennetYes=???????????????????
 FirstTimeWizardToadlet.skipWizard=??????????????
+FirstTimeWizardToadlet.step1Title=Freenet ??????? - ??????
+FirstTimeWizardToadlet.step2Title=Freenet ??????! - ??????
 FirstTimeWizardToadlet.step3Title=Freenet ?????? - ????
 FirstTimeWizardToadlet.step4Title=Freenet ?????? - ??????
+FirstTimeWizardToadlet.step5Title=Freenet ??????! - ????
 FirstTimeWizardToadlet.step6Title=Freenet ?????? - ????????
+FirstTimeWizardToadlet.step7Title=Freenet ??????! - ??, ??????????
+FirstTimeWizardToadlet.tenPercentDisk=(? 10% ???????)
+FirstTimeWizardToadlet.warningTitle=??!
+FirstTimeWizardToadlet.welcomeInfoboxContent1=Freenet ????????????. 
??????????????????????????.
 FirstTimeWizardToadlet.welcomeInfoboxTitle=???? Freenet ???????
+FirstTimeWizardToadlet.memory.128M=128 ?????(MiB) - ??????
+FirstTimeWizardToadlet.memory.192M=192 ?????(MiB) - ??????
+FirstTimeWizardToadlet.memory.256M=256 ?????(MiB) - ?????? 1GB ???
+FirstTimeWizardToadlet.memory.512M=512 ?????(MiB) - ??????????
+FirstTimeWizardToadlet.memory.64M=64 ?????(MiB) - ?????????
 GIFFilter.invalidHeader=????????? GIF ??.
 GIFFilter.invalidHeaderTitle=??????
 GIFFilter.notGif=????????????? GIF ?. ???????????, ?????????????????, 
?????????.
 GIFFilter.tooShort=? GIF ???????????.
 GIFFilter.tooShortTitle=????
+GenericReadFilterCallback.couldNotParseAbsoluteFreenetURI=???????? Freenet URI
+GenericReadFilterCallback.couldNotParseFormURIWithError=???????? URI ??: 
${error}
+GenericReadFilterCallback.couldNotParseRelativeFreenetURI=???????? Freenet URI
+GenericReadFilterCallback.couldNotParseURIWithError=???????? URI: ${error}
+GenericReadFilterCallback.invalidFormURI=????? URI: ??????
+GenericReadFilterCallback.invalidFormURIAttemptToEscape=????????
 GenericReadFilterCallback.malformedAbsoluteURL=?????? URL ???${error}
 GenericReadFilterCallback.malformedRelativeURL=?????? URL ???${error}
+GenericReadFilterCallback.protocolNotEscaped=????????: ${protocol}
+HTMLFilter.couldNotParseStyle=???????????
+HTMLFilter.deletedUnknownStyle=???????
+HTMLFilter.failedToParseLabel=HTML ???????????
+HTMLFilter.tooManyNestedStyleOrScriptTags=????????????? - ?????????????
+HTMLFilter.tooManyNestedStyleOrScriptTagsLong=?? </style> ????? - 
?????????????, ?????????, ???????????? - ????????????????
+HTMLFilter.unknownTag=????? ${tag}
+IPDetectorPluginManager.connectionProblems=????:
+IPDetectorPluginManager.forwardPortShortMaybeForwarded=?? UDP ? ${port} ???? 
(?????????).
+IPDetectorPluginManager.forwardPortShortNotForwarded=?? UDP ? ${port} ???? 
(???????).
+IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=?? UDP ? ${port1} ? 
${port2} ???? (?????????).
+IPDetectorPluginManager.forwardTwoPortsShortNotForwarded=?? UDP ? ${port1} and 
${port2} ???? (???????).
+IPUndetectedUserAlert.detecting=Freenet ??????????. ????????????, ???????...
+IPUndetectedUserAlert.detectingShort=Freenet ??????????.
+IPUndetectedUserAlert.detectingWithConfigLink=Freenet ??????????. 
????????????, ???????, ???????${link}??${/link}???????.
+IPUndetectedUserAlert.suggestForwardPort=??, ??????????????? ${port} ?(UDP), 
????????????????.
+IPUndetectedUserAlert.suggestForwardTwoPorts=??, ??????????????? ${port1} ? 
${port2} ?(UDP), ????????????????.
+IPUndetectedUserAlert.unknownAddress=Freenet 
??????????????(????????(NAT)?????????). ???????????????, 
??????????????????????????????. ????????????, Freenet ??????????????. 
??????????, ?'????????????'${link}????${/link}???????.
+IPUndetectedUserAlert.unknownAddressShort=Freenet ????????????. ?????????.
+IPUndetectedUserAlert.unknownAddressTitle=??????
+IPUndetectedUserAlert.unknownAddressWithConfigLink=Freenet 
??????????????(??????(NAT)???????????). ???????????????, 
??????????????????????????????. ????????????, Freenet ??????????????. 
??????????, ?'????????????'${link}????${/link}???????.
 InsertException.shortError.10=???
 InsertException.shortError.3=????
 IntOption.parseError=??????????? 32 ???? : ${val}
-JPEGFilter.notJpeg=?????????????JPEG????????????????????????????????????
+InvalidAddressOverrideUserAlert.unknownAddress=Freenet ?????? 
ipAddressOverride ??????, ?????????????????, IPv4 ??, ?? IPv6 ?????(IPv6 
??????????????????).
+InvalidAddressOverrideUserAlert.unknownAddressShort=???? ipAddressOverride 
???. ???????.
+InvalidAddressOverrideUserAlert.unknownAddressTitle=?????????
+InvalidAddressOverrideUserAlert.unknownAddressWithConfigLink=Freenet ?????? 
ipAddressOverride ??????, ?????????????????, IPv4 ??, ?? IPv6 ?????(IPv6 
??????????????????). ?????"?????????"??${link}????${/link}
+JPEGFilter.notJpeg=????????????? JPEG ????????????????????????????????????
 JPEGFilter.tooShort=???????????JPEG???
 JPEGFilter.tooShortTitle=????
+KnownUnsafeContentTypeException.title=???????: ${type}
+LocalFileInsertToadlet.checkPathExist=???????????.
+LocalFileInsertToadlet.checkPathIsDir=??????????????.
+LocalFileInsertToadlet.checkPathReadable=????????????????????????.
+LocalFileInsertToadlet.dirAccessDenied=???????
+LocalFileInsertToadlet.dirCannotBeRead=?????? "${path}"
 LocalFileInsertToadlet.fileHeader=??
 LocalFileInsertToadlet.insert=??
+LocalFileInsertToadlet.listing=????: ${path}
+LocalFileInsertToadlet.listingTitle=${path} ???
 LocalFileInsertToadlet.sizeHeader=??
-LogConfigHandler.minLoggingPriority=??????????
-LogConfigHandler.minLoggingPriorityLong=???????????. ??????????? debug, minor, 
normal ? error.
+LogConfigHandler.detaildPriorityThreshold=???????????
+LogConfigHandler.detaildPriorityThresholdLong=???????????, ??? freenet:normal, 
freenet.node:minor
+LogConfigHandler.dirName=????
+LogConfigHandler.dirNameLong=??????????
+LogConfigHandler.enabled=???????
+LogConfigHandler.enabledLong=?????????????
+LogConfigHandler.maxCachedBytes=????? RAM ????????
+LogConfigHandler.maxCachedBytesLong=????????????(RAM)????????
+LogConfigHandler.maxCachedLines=????? RAM ??????
+LogConfigHandler.maxCachedLinesLong=????????????(RAM)??????
+LogConfigHandler.maxZippedLogsSize=????????????
+LogConfigHandler.maxZippedLogsSizeLong=???????????????
+LogConfigHandler.minLoggingPriority=??????????
+LogConfigHandler.minLoggingPriorityLong=?????????????. ??????????? debug, 
minor, normal ? error.
+LogConfigHandler.rotationInterval=??????
+LogConfigHandler.rotationIntervalLong=????????? - ??????????????. 
???????????????(??????????), ????????????? maxZippedLogsSize ???????.
 LoggerHook.unrecognizedPriority=??????????: ${name}.
 LongOption.parseError=??????????? 64 ???? : ${val}
-MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ???????????"????"????????????, ????????)
+MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ???????????????(darknet)????????????, 
????????)
 MeaningfulNodeNameUserAlert.noNodeNickShort=????(??)????????
 MeaningfulNodeNameUserAlert.noNodeNickTitle=????(??)????????
+N2NTMToadlet.composingMessageLabel=????????????, ????????:
+N2NTMToadlet.delayed=???: ??????????????
+N2NTMToadlet.delayedTitle=???
+N2NTMToadlet.failed=?????????: ?????
+N2NTMToadlet.failedTitle=??
 N2NTMToadlet.friends=??
+N2NTMToadlet.noSuchFileOrCannotRead=??????: ???????, ??????.
+N2NTMToadlet.peerName=????
+N2NTMToadlet.peerNotFoundTitle=?????
+N2NTMToadlet.peerNotFoundWithHash=??????? \u201C${hash}\u201D ???.
 N2NTMToadlet.processingSend=???????????
+N2NTMToadlet.queued=?????: ?????, ?????????, ???????
+N2NTMToadlet.queuedTitle=?????
 N2NTMToadlet.returnToFriends=??????
+N2NTMToadlet.sendMessage=?????????
+N2NTMToadlet.sendMessageShort=????
+N2NTMToadlet.sendStatus=??????
+N2NTMToadlet.sent=????????
 N2NTMToadlet.sentTitle=??
+N2NTMToadlet.tooLong=?????????? 1024 ?????
 N2NTMToadlet.tooLongTitle=??
 N2NTMUserAlert.delete=??
-N2NTMUserAlert.header=??: ${from} (??? ${composed} | ??? ${sent} | ??>? 
${received})
+N2NTMUserAlert.header=??: ${from} (??? ${composed} | ??? ${sent} | ??? 
${received})
 N2NTMUserAlert.headerShort=?? ${from} ???
 N2NTMUserAlert.reply=??
 N2NTMUserAlert.title=?${peername}(${peer})?????????${number}
-Node.inBWLimit=??????????????
+Node.acceptSeedConnections=???, ????????????????????, ????????????. 
??????????????????????, ?????????: ????????????????????(????????, 
????????"???"????).
+Node.acceptSeedConnectionsShort=???????
+Node.alwaysAllowLocalAddresses=???????????????????
+Node.alwaysAllowLocalAddressesLong=???, ???????????, ???????????????, 
?????????(???????)????. ????, ???????????????(??????????)??????. 
???????????????, ?????????????????? UDP ???????????, ?????.
+Node.buggyJVM=????? JVM ??(${version})?????. ?????????, ?????? 
OutOfMemoryError ??. ?????? Sun ???? Java 1.4.2_13 ?, 1.5.0_10 ?, ?? 1.6 
?(????). ???? http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4855795 .
+Node.buggyJVMShort=Freenet ???? Java ?? ${version} ??????. ?????, ??????? Java 
?????????.
+Node.buggyJVMTitle=JVM ????
+Node.buggyJVMWithLink=????? JVM ??(${version})???${link}??${/link}. ?????????, 
?????? OutOfMemoryError ??. ?????? Sun ???? Java 1.4.2_13 ?, 1.5.0_10 ?, ?? 1.6 
?(????).
+Node.databaseMemory=?????????????
+Node.databaseMemoryLong=?????????????????????. 0 ??????(????? 30% ???????)
+Node.disablePHTLSLong=Disable probabilistic HTL (???????, ???????????)
+Node.dropPacketEvery=????????
+Node.dropPacketEveryLong=???????. ???????????, ????????. 0 ??????????. ???????!
+Node.enableARKs=?? ARKs? (????!)
+Node.enableARKsLong=???? ARKs? (??????!).
+Node.enablePerNodeFailureTables=??????????????
+Node.enablePerNodeFailureTablesLong=?????? 10 ???????????????????
+Node.enableSwapQueueing=??????????? (????!)
+Node.enableSwapQueueingLong=???????????????? (??????!)
+Node.enableSwapping=??????? (????!)
+Node.enableSwappingLong=????????? (??????! ????????????).
+Node.enableULPRDataPropagation=?? ULRP ??????
+Node.enableULPRDataPropagationLong=????????????, ??????????????????? 
(????????????; ULPR)
+Node.extraPeerDir=????????
+Node.extraPeerDirLong=??????????????
+Node.forceBigShrink=????????
+Node.forceBigShrinkLong=?????????(?? 10%)???????(????????????). 
??????????????????, ?????????; ?????????????????.
+Node.inBWLimit=?????????????
 Node.inBWLimitLong=????????????????; ??????????????; ?? -1 ?????????
+Node.java14ShortText=???????? Java 1.4 ?, ???? 1.5 ?.
+Node.java14Text=???? Java 1.4 ??? Freenet ??. ?????? 1.5 ?. ??????????????, 
?????????????????? Java ????.
+Node.java14Title=???? Java 1.4 ?
 Node.l10nLanguage=????????
 Node.l10nLanguageLong=?????????????????????????????
+Node.maxHTL=HTL ???
+Node.maxHTLLong=HTL ???(???????!)
+Node.maxOpennetPeers=????????????
+Node.maxOpennetPeersLong=????(Opennet)????????(??? 0 ? 20 ??, 
?????????????(darknet)?????)
+Node.mustBePositive=????????
+Node.nodeDir=????
+Node.nodeDirLong=????????(???????)?????
 Node.nodeName=??????
 Node.nodeNameLong=????????????????
+Node.notUsingSunVM=??????? Sun ??? JVM ?????: ${vendor} ${version}. ????????: 
??????????. ?????? http://www.java.com/getjava/ ?? Sun ??? Java ??.
+Node.notUsingSunVMShort=Freenet ????? Sun ??? Java ???????, ????????, ?????? 
Sun Java ??.
+Node.notUsingSunVMTitle=???? Sun ? JVM
+Node.notUsingWrapper=????????????. ????????. ???????????, ??????????, ???? JVM 
?????, ???????. ???????????????, ??????????.
+Node.notUsingWrapperShort=Freenet ??????????. ????????.
+Node.notUsingWrapperTitle=????????!
+Node.oneConnectionPerIP=??????????????
+Node.oneConnectionPerIPLong=???????????????????? ????????????????????, 
???????????????????, ???????????????. 
???????????????????(darknet)?????(opennet).
 Node.opennetEnabled=??????????(?????????????)?
-Node.opennetEnabledLong=??????????(???"????")? ??????, 
???????????????????????(?????"???", ???"??"). ????????????????, ?????????. 
?????????? Freenet ???, ???????????????("??"), ?????????.
+Node.opennetEnabledLong=??????????(???????(opennet))? ??????, 
???????????????????????(?????"???", ???"??"). ????????????????, ?????????. 
?????????? Freenet ???, ???????????????("??"), ?????????.
 Node.outBWLimit=??????????????
 Node.outBWLimitLong=?????????(????????); ????????????????
+Node.passOpennetPeersThroughDarknet=???????????????????
+Node.passOpennetPeersThroughDarknetLong=????, 
??????(opennet)??????(??????????)??????????(darknet)????. 
?????(??????????)??????????????????. ??????, ???????????, ???????????, 
?????????????????. ????????????????, ?????????????.
+Node.storeDirectory=????
+Node.storeDirectoryLong=???????????
 Node.storeSize=?????????
 Node.storeSizeLong=?????????
-NodeStats.mustBePercentValueNotFull=???????, ???? 0 ? 99 ??.
-NodeStats.valueTooLow=?????????????, ???????!
+Node.storeType=????(????)
+Node.storeTypeLong=??????. ????? bdb-index ?? ram (bdb-index ? 
BerkeleyDBFreenetStore ?????, ??????????????; ram ???????????????). 
?????????????, ??????????????????, ??? ram (??????????????)!
+Node.throttleLocalTraffic=???????
+Node.throttleLocalTrafficLong=???????????? ?????, 
???????(LAN)??????????????????.
+NodeClientCore.couldNotFindOrCreateDir=?????????
+NodeClientCore.downloadAllowedDirs=?????????
+NodeClientCore.downloadDir=??????
+NodeClientCore.downloadDirLong=??????????????
+NodeClientCore.fileForClientStats=????????????
+NodeClientCore.fileForClientStatsLong=??????????????(???????????)
+NodeClientCore.lazyResume=?????????????? (?????????)
+NodeClientCore.lazyResumeLong=???????????????, ???????????????, 
????????????????. ???????, ???????????.
+NodeClientCore.maxUSKFetchers=??? USK ???????
+NodeClientCore.maxUSKFetchersLong=??? USK ???????
+NodeClientCore.maxUSKFetchersMustBeGreaterThanZero=?????
+NodeClientCore.movingTempDirOnTheFlyNotSupported=????????????????
+NodeClientCore.persistentTempDir=?????????
+NodeClientCore.persistentTempDirLong=?????????????
+NodeClientCore.startingUp=?? Freenet ???????????, ???????????????, 
?????????????.
+NodeClientCore.startingUpShort=Freenet ?????, ??????????, ?????????.
+NodeClientCore.startingUpTitle=Freenet ?????
+NodeClientCore.tempDir=??????
+NodeClientCore.tempDirLong=??????????
+NodeClientCore.uploadAllowedDirs=?????????
+NodeIPDectector.inclLocalAddress=???????????????
+NodeIPDectector.inclLocalAddressLong=???????????????????(????????????????). 
???????????????????? allowLocalAddresses=true (???????????????????), ?????????.
+NodeIPDectector.ipOverride=?????????
+NodeIPDectector.ipOverrideLong=??????????(????????) - 
???????????????*??*?(???????: ???, ?? dyndns ??), ????????????, 
????????????????.
+NodeIPDectector.tempAddressHint=????????????
+NodeIPDectector.tempAddressHintLong=??????????; ????????
+NodeIPDetector.maybeSymmetric=??????????????????(NAT)??. ?????????: 
?????????????????????, ???????????????????????.
+NodeIPDetector.maybeSymmetricShort=????: ???????????????(NAT)??.
+NodeIPDetector.maybeSymmetricTitle=????
+NodeIPDetector.unknownHostErrorInIPOverride=?????: ${error}
+NodeStat.aggressiveGC=AggressiveGC ???
+NodeStat.aggressiveGCLong=??????????? (GC) ?????????. ????????????, ??????! ?? 
-1 ??: ??? System.gc() ? System.runFinalization() ???????
+NodeStat.memCheck=???????
+NodeStat.memCheckLong=????????? (??????????, aggressiveGC ????????????!)
+NodeStat.statsPersister=???????????
+NodeStat.statsPersisterLong=???????????(?????????, ?????????????, ????????)
+NodeStat.threadLimit=?????
+NodeStat.threadLimitLong=???????????????????, ???????.
+NodeStats.mustBePercentValueNotFull=????????, ???? 0 ? 99 ??.
+NodeStats.valueTooLow=????????, ??????, ???????!
+NodeUpdateManager.enabled=?????????
+NodeUpdateManager.enabledLong=???????????? Freenet ??. ??, ???????????, 
????????, ????????. ???????????????, ???????????.
+NodeUpdateManager.extURI=????????? freenet-ext.jar ????
+NodeUpdateManager.extURILong=????????? freenet-ext.jar ????
 NodeUpdateManager.installNewVersions=????????
-NodeUpdateManager.installNewVersionsLong=??????????????????? Freenet ??, 
???????
+NodeUpdateManager.installNewVersionsLong=???????????, ??????????? Freenet ???
+NodeUpdateManager.invalidExtURI=???????? URI: ${error}
+NodeUpdateManager.invalidRevocationURI=????????? URI: ${error}
+NodeUpdateManager.invalidUpdateURI=????????? URI: ${error}
+NodeUpdateManager.noUpdateWithoutWrapper=??????????, ??????????
+NodeUpdateManager.revocationURI=??????????????
+NodeUpdateManager.revocationURILong=????? URI. ????????????, ????????, 
??????????.
+NodeUpdateManager.updateCatastropheTitle=????????!
+NodeUpdateManager.updateFailed=????: ${reason}
+NodeUpdateManager.updateFailedShort=????: ${reason}
+NodeUpdateManager.updateFailedTitle=????!
+NodeUpdateManager.updateURI=????????????
+NodeUpdateManager.updateURILong=????????????
 NotEnoughNiceLevelsUserAlert.content=?????????????????????. ????????????????, 
??????????. ?????????????????! (? run.sh ??? PRIORITY ???, ??????) ??????? 
${available} ???????, ?????? ${required} ?.
 NotEnoughNiceLevelsUserAlert.short=???????????! ?????????????? Freenet.
 NotEnoughNiceLevelsUserAlert.title=???????????!
@@ -265,51 +558,130 @@
 OpennetConnectionsToadlet.peersListTitle=??????????(??????????????????)
 OpennetConnectionsToadlet.successTime=?????????????? CHK ???
 OpennetConnectionsToadlet.successTimeTitle=??????
+OpennetUserAlert.warning=Freenet ????????????. ????????????? Freenet, 
?????????????. ???????????????, ????????????????????, ????????????. ????? 10 
???????(??????????????, ???????????????), ???????????, ?? Freenet 
????????????????.
 OpennetUserAlert.warningShort=????????.
 OpennetUserAlert.warningTitle=??: ????????: ??????????
 PNGFilter.invalidHeader=????????????? PNG ?, ?????????? PNG ??. ???????????, 
?????????????????, ?????????.
 PNGFilter.invalidHeaderTitle=??? PNG - ??????
-PluginToadlet.addPluginTitle=??plugin
-PluginToadlet.failedToLoadPluginTitle=Plugin????
-PluginToadlet.noWebInterfaceTitle=?plugin?????
-PluginToadlet.pluginList=Plugin??
-PluginToadlet.pluginListTitle=Plugin??
-PluginToadlet.pluginNameTitle=Plugin??
-PluginToadlet.pluginNotFoundTitle=????plugin
-PluginToadlet.unsupportedMethod=????method.
+PageMaker.modeAdvanced=??????
+PageMaker.modeAdvancedTooltip=????? Freenet ???????????????????
+PageMaker.modeSimple=??????
+PageMaker.modeSimpleTooltip=??????????????
+PeerManagerUserAlert.clockProblem=??? ${count} ???????, ??????????????? 24 
????. ?????????????. ??????????????????????????.
+PeerManagerUserAlert.clockProblemTitle=????
+PeerManagerUserAlert.connError=? ${count} ??????????????, ???????????, 
???????????.
+PeerManagerUserAlert.connErrorTitle=????????
+PeerManagerUserAlert.noConns=?????????????????, ??????. ?????????????; 
?????????, ??????????. ????????? 3 ?????, ???????? 5 ? 10 ?.
+PeerManagerUserAlert.noConnsTitle=???????
+PeerManagerUserAlert.noPeersDarknet=???????????, ????????. 
?????????????????(????????, ??????????, ????????????). ????????? 3 ??????, ???? 
5 ? 10 ?. ???????????(????; opennet), ?????????????.
+PeerManagerUserAlert.noPeersTestnet=???????????, ????????. 
?????????????????(????????, ??????????, ????????????). ????????? 3 ??????, ???? 
5 ? 10 ?. ???????????(????; opennet), ?????????????.
+PeerManagerUserAlert.noPeersTitle=????
+PeerManagerUserAlert.oneConn=????????. ?????????, ???????; ?????????, 
???????????????. ????"??"?????????, ???????????. ????????????? 3 ???(?? 5 ? 10 
????).
+PeerManagerUserAlert.onlyFewConnsTitle=?? ${count} ??????
+PeerManagerUserAlert.tooHighBwlimitDelayTime=????????????????(${delay}ms > 
${max}ms). ???????????, ??/????????, ????????.
+PeerManagerUserAlert.tooHighBwlimitDelayTimeTitle=bwlimitDelayTime ????
+PeerManagerUserAlert.tooHighPingTime=??????????????(${ping}ms > ${max}ms). 
???????????, ??/????????, ????????.
+PeerManagerUserAlert.tooHighPingTimeTitle=nodeAveragePingTime ????
+PeerManagerUserAlert.tooManyConns=????????(${count} > ${max}). 
??????????????????, ???????, ???????????????.
+PeerManagerUserAlert.tooManyConnsTitle=????????
+PeerManagerUserAlert.tooManyDisconnected=???????????(${count} > ${max}). 
?????????????????, ??????????????????????. ???"??"??????. ???, 
????????????????. ??????, ????????????????????????.
+PeerManagerUserAlert.tooManyDisconnectedTitle=????????
+PeerManagerUserAlert.tooManyNeverConnected=?????????(?? ${count} ?)???????. 
????????????????????????, ??????????.
+PeerManagerUserAlert.tooManyNeverConnectedTitle=???????????
+PeerManagerUserAlert.tooManyNeverConnectedWithLink=?????????(?? ${count} 
?)???????. ???????????${link}????${/link}?????????, ??????????.
+PeerManagerUserAlert.tooManyPeers=?????????(${count} > ${max}). 
???????????????????????, ???????????????. ????, ?????????????????????, 
??????????. ???"??"??????.
+PeerManagerUserAlert.tooManyPeersTitle=????????
+PeerManagerUserAlert.tooOldNeverConnectedPeers=?????????, ????????????????. 
???????, ???????????(??????????????).
+PeerManagerUserAlert.tooOldNeverConnectedPeersTitle=??????????
+PeerManagerUserAlert.twoConns=????????. ????????????, ??????????????. 
???"??"?????????, ???????????(????). ????????????? 3 ???(?? 5 ? 10 ????).
+PeersSayKeyBlownAlert.connectedSayBlownLabel=????????????????(?????????????????):
+PeersSayKeyBlownAlert.disconnectedSayBlownLabel=???????????????, ????????, 
????????????:
+PeersSayKeyBlownAlert.failedFetch=????????????. ?????????????, 
??????????????????, ???????????????. ??????????? Freenet ????????.
+PeersSayKeyBlownAlert.failedTransferSayBlownLabel=??????????????, ????????????:
+PeersSayKeyBlownAlert.fetching=?????????????????????.
+PeersSayKeyBlownAlert.intro=????????????????????! ??????????????????????, 
?????????????????(?????????)! ?????????????. ???????????????.
+PeersSayKeyBlownAlert.short=?????????????????!
+PeersSayKeyBlownAlert.titleWithCount=${count} ???: ????????!
+PluginManager.cannotSetOnceLoaded=??????????????
+PluginManager.loadedOnStartup=????????
+PluginManager.loadedOnStartupLong=?????, ???????????, ?????.
+PluginManager.loadedPlugins=????????
+PluginManager.loadedPluginsLong=??????, ?????????
+PluginManager.pluginLoadingFailed=????? ${name} ????
+PluginManager.pluginLoadingFailedShort=?????? ${name}!
+PluginManager.pluginLoadingFailedTitle=??????!
+PluginManager.pluginLoadingFailedWithMessage=????? ${name} ????: ${message}
+PluginManager.pluginReqNewerJVM=?? ${name} ??????? JVM ????. ?????? Sun Java 
1.5 ???? JVM, ???????.
+PluginManager.pluginReqNewerJVMTitle=?? ${name} ????? JVM ????.
+PluginToadlet.addPluginTitle=????
+PluginToadlet.failedToLoadPlugin=??????.
+PluginToadlet.failedToLoadPluginCheckClass=???????????. ????????????????, 
?????? URL ??????.
+PluginToadlet.failedToLoadPluginTitle=??????
+PluginToadlet.internalNameTitle=????
+PluginToadlet.loadPluginCommand=????
+PluginToadlet.noWebInterface=???????????, ??????????.
+PluginToadlet.noWebInterfaceTitle=??????????
+PluginToadlet.pluginList=????
+PluginToadlet.pluginListTitle=????
+PluginToadlet.pluginNameTitle=????
+PluginToadlet.pluginNotFound=????????.
+PluginToadlet.pluginNotFoundTitle=??????
+PluginToadlet.returnToPluginsWithLinks=? ${link}??${/link} ????.
+PluginToadlet.unsupportedMethod=??????.
+PluginToadlet.unsupportedMethodTitle=??????
 PluginToadlet.visit=??
+PproxyToadlet.Error=??
 PproxyToadlet.Load=??
 PproxyToadlet.cancel=??
-PproxyToadlet.classNameTitle=Class??
-PproxyToadlet.internalIDTitle=????
+PproxyToadlet.changeReloadOnStartup=??
+PproxyToadlet.classNameTitle=????
+PproxyToadlet.downloadNotAllowedFromRemoteServer=????????????????.
+PproxyToadlet.internalIDTitle=?????
 PproxyToadlet.loadOfficialPlugin=??????
 PproxyToadlet.loadOfficialPluginLabel=??????
 PproxyToadlet.loadOfficialPluginText=???????? Freenet ???????. 
????????????????, ????????.
 PproxyToadlet.loadOfficialPluginWarning=??: ?????????????????, ??? Freenet ??. 
?????????????, ?????. ?????????????, ??????????.
 PproxyToadlet.loadOtherPlugin=???????
-PproxyToadlet.loadOtherPluginText=?????????????? URL. ???????????????????, 
???????????????????. ???????????????????, ???????.
+PproxyToadlet.loadOtherPluginText=?????????????? URL. ???????????????????, 
???????????????????. ????????????????????, ????????.
 PproxyToadlet.loadOtherURLLabel=??? URL
 PproxyToadlet.loadPluginLabel=??Plugin:
-PproxyToadlet.noPlugins=??????plugins
+PproxyToadlet.noPlugins=????????
 PproxyToadlet.noVersion=?
-PproxyToadlet.pluginNotFoundReload=??????????plugin.
-PproxyToadlet.pluginNotFoundReloadTitle=?????Plugin(????)
-PproxyToadlet.pluginUnloaded=?plugin????
-PproxyToadlet.pluginUnloadedWithName=${name}??plugin????.
-PproxyToadlet.plugins=Plugins
-PproxyToadlet.pluginsWithNodeName=${name}?plugins
+PproxyToadlet.pluginDirectoryNotCreated=????????.
+PproxyToadlet.pluginNotDownloaded=????????.
+PproxyToadlet.pluginNotFoundReload=???????????.
+PproxyToadlet.pluginNotFoundReloadTitle=??????(????)
+PproxyToadlet.pluginStopping=?????
+PproxyToadlet.pluginUnloaded=??????
+PproxyToadlet.pluginUnloadedWithName=?????? ${name} ?.
+PproxyToadlet.plugins=????
+PproxyToadlet.pluginsWithNodeName=${name} ?????
+PproxyToadlet.refreshOnStartup=???????????
 PproxyToadlet.reload=????
+PproxyToadlet.reloadExplanation=???????????????????.
+PproxyToadlet.reloadOnStartupShort=?????
+PproxyToadlet.reloadPluginTitle=??????
 PproxyToadlet.reloadPurgeWarning=?????????????????. ??????????????????, 
??????????!
-PproxyToadlet.returnToPluginPage=??plugin??
-PproxyToadlet.startedAtTitle=????
+PproxyToadlet.reloadWarning=?????????????!
+PproxyToadlet.returnToPluginPage=????????
+PproxyToadlet.startedAtTitle=????
+PproxyToadlet.startingPluginName=????
+PproxyToadlet.startingPluginStatus=????
+PproxyToadlet.startingPluginTime=????
+PproxyToadlet.startingPluginsTitle=?????
+PproxyToadlet.unauthorized=??????????.
+PproxyToadlet.unauthorizedTitle=????
 PproxyToadlet.unload=??
-PproxyToadlet.unloadPluginTitle=???plugin?
-PproxyToadlet.unloadPluginWithName=??????${name}??
+PproxyToadlet.unloadPluginTitle=???????
+PproxyToadlet.unloadPluginWithName=?????? ${name} ??
+PproxyToadlet.unloadPurge=??????????
 PproxyToadlet.versionTitle=??
+PproxyToadlet.startingPluginStatus.downloading=??????
+PproxyToadlet.startingPluginStatus.starting=???
 QueueToadlet.DUinProgress=???????? (${size})
 QueueToadlet.DinProgress=???????? (${size})
 QueueToadlet.UinProgress=???????? (${size})
-QueueToadlet.change=???
+QueueToadlet.change=??
 QueueToadlet.completedDU=?????????? (${size})
 QueueToadlet.completedDinDownloadDirectory=???????????????? (${size})
 QueueToadlet.completedDinTempDirectory=???????????????? (${size})
@@ -319,26 +691,40 @@
 QueueToadlet.completedUDirectory=???????? (${size})
 QueueToadlet.delete=??
 QueueToadlet.download=??
+QueueToadlet.downloadFiles=????
+QueueToadlet.downloadFilesInstructions=??????????????????(??????)
 QueueToadlet.downloadSucceeded=?? ${origlink}${filename}${/origlink} ???????. 
?${link}???${/link}????  (${size}).
 QueueToadlet.downloadSucceededTitle=????: ${filename}
+QueueToadlet.enqueuedFailure=?? ${number} ?????????:
+QueueToadlet.enqueuedSuccessfully=?? ${number} ???????????:
 QueueToadlet.errorAccessDenied=????: ????!
+QueueToadlet.errorNoKeyToD=??????????.
 QueueToadlet.failedD=????? (${size})
 QueueToadlet.failedDU=????????? (${size})
 QueueToadlet.failedU=??????? (${size})
 QueueToadlet.fileName=??
-QueueToadlet.identifier=??
+QueueToadlet.files=??
+QueueToadlet.globalQueueIsEmpty=?????????
+QueueToadlet.identifier=???
 QueueToadlet.insertAs=???:
 QueueToadlet.insertFile=????
 QueueToadlet.insertFileBrowseLabel=?????????
+QueueToadlet.insertFileCompressLabel=??
 QueueToadlet.insertFileInsertFileLabel=????
 QueueToadlet.insertFileLabel=??????????(???!)
+QueueToadlet.insertFileResetForm=????
 QueueToadlet.key=??
 QueueToadlet.legend=??
 QueueToadlet.mimeType=MIME ??
 QueueToadlet.none=?
-QueueToadlet.persistence=??
+QueueToadlet.notLoadedYet=??????????????. ?????.
+QueueToadlet.notLoadedYetTitle=??????
+QueueToadlet.panicButton=????
+QueueToadlet.panicButtonConfirmation=??????????????!
+QueueToadlet.persistence=???
 QueueToadlet.persistenceForever=??
 QueueToadlet.persistenceNone=?
+QueueToadlet.persistenceReboot=??
 QueueToadlet.persistenceRebootr=??
 QueueToadlet.priority=???
 QueueToadlet.priority0=??
@@ -358,52 +744,129 @@
 QueueToadlet.title=${nodeName}?????
 QueueToadlet.totalSize=????
 QueueToadlet.unknown=??
+QueueToadlet.uploadSucceeded=?? ${filename} (?? ${size}) ??????? Freenet ?. 
?${link}???${/link} ????.
+QueueToadlet.uploadSucceededTitle=????: ${filename}
+QueueToadlet.warningUnsafeContent=???????
 QueueToadlet.wipD=???: ?? (${size})
 QueueToadlet.wipDU=???: ???? (${size})
 QueueToadlet.wipU=???: ?? (${size})
+RequestStarterGroup.schedulerCHKInserts=????????(CHK ??)
+RequestStarterGroup.schedulerCHKRequests=????????(CHK ??)
+RequestStarterGroup.schedulerLong=?????????????.
+RequestStarterGroup.schedulerSSKInserts=????????(SSK ??)
+RequestStarterGroup.schedulerSSKRequests=????????(SSK ??)
 RevocationKeyFoundUserAlert.text=??????????????????????. ????????????????????! 
??, ?????????????, ???"???"????????. ?????????????????????. ???????????????. 
?????: ${message}.
 RevocationKeyFoundUserAlert.title=????????????!
+SSL.enable=??? SSL ????
+SSL.enableLong=??? SSL ????
+SSL.keyPass=??????
+SSL.keyPassLong=??????
+SSL.keyStore=??????????
+SSL.keyStoreLong=??????????
+SSL.keyStorePass=????????
+SSL.keyStorePassLong=????????
+SSL.version=SSL ??
+SSL.versionLong=SSL ??, ????? SSLv3 ?? TLSv1 (???? SSLv3)
 ShortOption.parseError=???????????????: ${error}
+SimpleToadletServer.advancedMode=?????????
+SimpleToadletServer.advancedModeLong=????????????????????. ???????????.
 SimpleToadletServer.cssName=??????
 SimpleToadletServer.cssNameLong=?? Freenet ?????????
+SimpleToadletServer.cssOverride=???? CSS ?????(??!)
+SimpleToadletServer.cssOverrideCantRead=??????? CSS ???: ${filename}
+SimpleToadletServer.cssOverrideLong=???????????? CSS ????????. ??: CSS ??????, 
??????? CSS ????! ???????. (?????? CSS ?? devl at freenetproject 
????????????????? ;))
+SimpleToadletServer.cssOverrideNotInUploads=?????????: ?? ${filename} 
???????????!
+SimpleToadletServer.doRobots=? robots.txt ???????
+SimpleToadletServer.doRobotsLong=???? /robots.txt ?? google, ????, ?? wget 
?????
+SimpleToadletServer.enableInlinePrefetch=?????????????
+SimpleToadletServer.enableInlinePrefetchLong=???????????????????, ??????????. 
??????.
+SimpleToadletServer.enableJS=? FProxy ?? Javascript?
+SimpleToadletServer.enableJSLong=???? FProxy ?? Javascript "????". ??????????. 
???, ????????, freesite ????? Javascript.
+SimpleToadletServer.enablePersistentConnections=?????? HTTP ??? (???????)
+SimpleToadletServer.enablePersistentConnectionsLong=?????????, 
??????????????????? HTTP ??, ????????.
+SimpleToadletServer.enabled=???? FProxy?
+SimpleToadletServer.enabledLong=????? FProxy ???? HTTP ??
+SimpleToadletServer.illegalCSSName=CSS ???????????!
+SimpleToadletServer.panicButton=?????????
+SimpleToadletServer.panicButtonLong=???????'????', ????????????????, ?????????.
+SimpleToadletServer.port=FProxy ???
+SimpleToadletServer.ssl=?? SSL?
+SimpleToadletServer.sslLong=??? FProxy ??? SSL
+StartupToadlet.entropyErrorContent=?????????... Freenet ???????????.
+StartupToadlet.entropyErrorTitle=????!
+StartupToadlet.isStartingUp=???????, ???.
+StartupToadlet.title=Freenet ?????
 StaticToadlet.pathInvalidChars=??? URI ??????????.
 StaticToadlet.pathNotFound=????????.
 StaticToadlet.pathNotFoundTitle=??????
-StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
-StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
+StatisticsToadlet.ackOnlyBytes=???????: ${total}
+StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
? CHK ???, ${SSKhandlers} ? SSK ???
+StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
? CHK ???, ${SSKhandlers} ? SSK ???
+StatisticsToadlet.adminBytes=?????: ${initial} ?????, ${changedIP} ?????????, 
${disconn} ?????, ${routingStatus} ???????
 StatisticsToadlet.allocMemory=Java ???????: ${memory}
+StatisticsToadlet.announceBytes=????: ${total}
+StatisticsToadlet.authBytes=????: ?? ${total}
 StatisticsToadlet.bandwidthTitle=??
 StatisticsToadlet.cpus=???CPU??: ${count}
+StatisticsToadlet.debuggingBytes=?????: ${netColoring} ?????, ${ping} ? ping, 
${probe} ?????, ${routed} ???????.
+StatisticsToadlet.fullTitle=${name} ?????
 StatisticsToadlet.getLogs=?????????
 StatisticsToadlet.inputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.insertOutput=????(?????): CHK ${chk} SSK ${ssk}.
 StatisticsToadlet.javaVersion=Java ??: ${version}
-StatisticsToadlet.jeDumpButton=????JE??
+StatisticsToadlet.jeDumpButton=?? JE ??
 StatisticsToadlet.jvmInfoTitle=JVM??
 StatisticsToadlet.jvmVendor=JVM ???? ${vendor}
 StatisticsToadlet.jvmVersion=JVM??: ${version}
 StatisticsToadlet.maxMemory=Java ??????: ${memory}
+StatisticsToadlet.noRequests=?????????????.
+StatisticsToadlet.nodeToNodeBytes=?????: ${total}
+StatisticsToadlet.offerReplys=????????: ${chk} ? CHK, ${ssk} ? SSK.
+StatisticsToadlet.offeredKeyOutput=????: ???? ${total}, ???? ${offered}
 StatisticsToadlet.osArch=????????: ${arch}
 StatisticsToadlet.osName=??????: ${name}
 StatisticsToadlet.osVersion=??????: ${version}
 StatisticsToadlet.outputRate=????: ?? ${rate} (???? ${max})
 StatisticsToadlet.payloadOutput=????: ${total} (?? ${rate}) (${percent}%)
 StatisticsToadlet.peerStatsTitle=????
+StatisticsToadlet.priority=???
+StatisticsToadlet.requestOutput=????(?????): CHK ${chk} SSK ${ssk}.
+StatisticsToadlet.resendBytes=?????: ${total}
+StatisticsToadlet.routingDisabled=??????(??????????, ????????????)
+StatisticsToadlet.routingDisabledShort=??????
+StatisticsToadlet.running=???
 StatisticsToadlet.statisticGatheringTitle=????
-StatisticsToadlet.threadDumpButton=?????????
+StatisticsToadlet.swapOutput=????: ${total}.
+StatisticsToadlet.threadDumpButton=???????
 StatisticsToadlet.threads=???????: ${running}/${max}
+StatisticsToadlet.threadsByPriority=??????????
 StatisticsToadlet.totalInput=????: ${total} (?? ${rate})
 StatisticsToadlet.totalOutput=????: ${total} (?? ${rate})
-StatisticsToadlet.transferringRequests=????: ?? ${senders}, ?? ${receivers}
+StatisticsToadlet.totalOverhead=???????: ?? ${rate} (${percent}%).
+StatisticsToadlet.transferringRequests=??????: ${senders} ?????, ${receivers} 
?????
+StatisticsToadlet.unaccountedBytes=????: ${total} (${percent}%)
+StatisticsToadlet.uomBytes=??????: ${total}
 StatisticsToadlet.usedMemory=Java ???????: ${memory}
 StatisticsToadlet.versionTitle=??????
+StatisticsToadlet.waiting=???
 SymlinkerToadlet.symlinks=ToadletServer??????
+TestnetHandler.cannotEnableDisableOnTheFly=?????????????(testnet)??; 
????????????
+TestnetHandler.enable=????????(testnet)???(??!)
+TestnetHandler.enableLong=?????????(testnet)??(??!). ???????????????????????, 
??????????????.
+TestnetHandler.port=????(Testnet)???
+TestnetHandler.portLong=????(Testnet)??? (-1 = listenPort+1000)
 TextModeClientInterfaceServer.allowedHosts=??????
+TextModeClientInterfaceServer.allowedHostsLong=??????????????????????. 
???????????: ????, ????????, ??? CIDR ???????(?? 192.168.0.0/24).
 TextModeClientInterfaceServer.bindTo=??????
 TextModeClientInterfaceServer.bindToLong=?????IP??
 TextModeClientInterfaceServer.enableInputOutput=???stdout/stdin?
+TextModeClientInterfaceServer.enableInputOutputLong=???????????????????????? 
(??????????? telnet ??????, ???????? socket ????)
 TextModeClientInterfaceServer.enabled=??????
 TextModeClientInterfaceServer.enabledLong=?????????????
+TextModeClientInterfaceServer.ssl=?? SSL?
+TextModeClientInterfaceServer.sslLong=???????????????? SSL
 TextModeClientInterfaceServer.telnetPortNumber=?????
+TextModeClientInterfaceServer.telnetPortNumberLong=???????????? TCP ????
 TimeSkewDetectedUserAlert.shortText=???????????????. Freenet ?????????!
 TimeSkewDetectedUserAlert.text=?????????????????. ?????. ??????????, ????????. 
?????????????????, ??????, ????????.
 TimeSkewDetectedUserAlert.title=???????!
@@ -420,11 +883,20 @@
 Toadlet.permRedirectWithReason=????: ${reason}
 Toadlet.returnToNodeHomepage=??????
 Toadlet.returnToPrevPage=?????
+Toadlet.returnToQueuepage=??????
 Toadlet.tempRedirectWithReason=????: ${reason}
-Toadlet.unauthorized=??????????.
+Toadlet.unauthorized=???????????.
 Toadlet.unauthorizedTitle=????
 Toadlet.yes=?
-TranslationToadlet.bracketRemoveOverride=(???????!)
+ToadletContextImpl.cannotParseContentLength=????????: ${error}
+ToadletContextImpl.cannotParseContentLengthWithError=????????: ${error}
+ToadletContextImpl.headersLineTooLong=???????????????
+ToadletContextImpl.methodNotAllowed=HTTP ?????
+ToadletContextImpl.noContentLengthInPOST=? POST ???????????
+ToadletContextImpl.noSuchToadlet=???????? Toadlet
+ToadletContextImpl.parseErrorWithError=????: ${error}
+ToadletContextImpl.uriParseErrorTitle=URI ????
+TranslationToadlet.bracketRemoveOverride=(????????!)
 TranslationToadlet.bracketTranslateIt=(?????????!)
 TranslationToadlet.bracketUpdateTranslation=(??????)
 TranslationToadlet.confirmRemoveOverride=????????????:(${key} - ${value})??
@@ -435,6 +907,8 @@
 TranslationToadlet.originalVersionLabel=????(????)
 TranslationToadlet.reEdit=????????
 TranslationToadlet.remove=??
+TranslationToadlet.removeOverrideTitle=???????
+TranslationToadlet.removeOverrideWarningTitle=????????????!
 TranslationToadlet.returnToTranslations=??????
 TranslationToadlet.showEverything=????,??????????
 TranslationToadlet.translationKeyLabel=????
@@ -443,15 +917,29 @@
 TranslationToadlet.updateTranslationCommand=??????!
 UnknownContentTypeException.explanation=?? Freenet ??????? MIME ??. ????, 
?????????????????????, ????????. ???, ?????????????????????, ?????????????; 
??????????, ???????????, ???????????(???????????????, ???????????????). 
???????, ?????????????????, ?????? script ???????????????.
 UnknownContentTypeException.title=??????????????: ${type}
-UpdatedVersionAvailableUserAlert.armed=?????????????????Freenet???,??????.
+UpdateDeployContext.cannotUpdateNoExtJar=??? wrapper.conf ????? 
freenet-ext.jar (??????? freenet.jar: ${mainFilename})
+UpdateDeployContext.cannotUpdateNoJars=??? wrapper.conf ??? Freenet ??? jar ?
+UpdateDeployContext.cannotUpdateNoMainJar=??? wrapper.conf ????? freenet.jar 
(??????? freenet-ext.jar: ${extFilename})
+UpdateDeployContext.updateCatastrophe=??????: ??????? ${old}, ???????? ${new} 
??? ${old}, ??*???????*! ???????? ${new} ??? ${old} ???????.
+UpdateDeployContext.updateFailedCannotDeleteOldConfig=??????? ${old}, 
??????????????. ??????.
+UpdateDeployContext.updateFailedNonStandardConfig=???????????????????: ???? 
main=${main} ext=${ext} - ????????! ???????????, ????? wrapper.conf ??.
+UpdatedVersionAvailableUserAlert.alsoDownloadedNewExtJar=????????? Freenet 
????, ??? ${version}
+UpdatedVersionAvailableUserAlert.armed=?????????? Freenet ????????,??????.
+UpdatedVersionAvailableUserAlert.clickToUpdateASAP=??????, ?????????????.
 UpdatedVersionAvailableUserAlert.clickToUpdateNow=????????????????.
-UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????????Freenet????,???${version}.
-UpdatedVersionAvailableUserAlert.downloadedNewJar=?????????????Freenet??,???${version}.
-UpdatedVersionAvailableUserAlert.fetchingNewNode=???????????????Freenet??(???? 
${nodeVersion}).
-UpdatedVersionAvailableUserAlert.notLatest=??????????????????.
-UpdatedVersionAvailableUserAlert.title=Freenet????????????
+UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????? Freenet ????, 
??? ${version}.
+UpdatedVersionAvailableUserAlert.downloadedNewJar=?????????? Freenet ??, ??? 
${version}.
+UpdatedVersionAvailableUserAlert.fetchingNewBoth=????????? Freenet ?? (????? 
${nodeVersion}, ??????? ${extVersion}).
+UpdatedVersionAvailableUserAlert.fetchingNewExt=????????? Freenet ?? (? 
${extVersion} ?????? jar ?).
+UpdatedVersionAvailableUserAlert.fetchingNewNode=??????????? Freenet ?? (????? 
${nodeVersion}).
+UpdatedVersionAvailableUserAlert.finalCheck=???????????????????? (??: 
${count}/${max}, ????????: ${time}).
+UpdatedVersionAvailableUserAlert.notLatest=?????????????????.
+UpdatedVersionAvailableUserAlert.shortArmed=????????? Freenet ??, ?????????.
+UpdatedVersionAvailableUserAlert.shortNotReadyNotArmed=????????? Freenet ??, 
?????????????.
+UpdatedVersionAvailableUserAlert.shortReadyNotArmed=?????????? Freenet ??, 
?????????????.
+UpdatedVersionAvailableUserAlert.title=???? Freenet ??????
 UpdatedVersionAvailableUserAlert.updateASAPButton=????
-UpdatedVersionAvailableUserAlert.updateASAPQuestion=????????????????????????
+UpdatedVersionAvailableUserAlert.updateASAPQuestion=?????????????????, ????????
 UpdatedVersionAvailableUserAlert.updateNowButton=????!
 UserAlert.apply=??
 UserAlert.hide=??
@@ -459,57 +947,80 @@
 UserAlertManager.alertsOnAlertsPage=| ??${link}????${/link}??????.
 UserAlertManager.alertsTitle=?????
 UserAlertManager.clickForMore=?????????????????, ??????.
-UserAlertManager.criticalErrorCountLabel=????:
+UserAlertManager.criticalErrorCountLabel=????:
 UserAlertManager.dumpEventsButton=???????
 UserAlertManager.errorCountLabel=??:
 UserAlertManager.minorCountLabel=??:
 UserAlertManager.totalLabel=??:
 UserAlertManager.warningCountLabel=??:
 UserAlertsToadlet.titleWithName=${name} ?????
-WelcomeToadlet.activityTitle=????
+WelcomeToadlet.activityTitle=????
 WelcomeToadlet.alertsSummary=??????
 WelcomeToadlet.arkFetchCount=ARK???: ${total}
 WelcomeToadlet.confirmAddBookmarkSubTitle=??????
-WelcomeToadlet.confirmExternalLinkTitle=???????
-WelcomeToadlet.confirmExternalLinkWithURL=??????????????${url}???????? Freenet 
???????????????????????????????
+WelcomeToadlet.confirmAddBookmarkTitle=????
+WelcomeToadlet.confirmAddBookmarkWithKey=???????? ${key} ??????, ?????????:
+WelcomeToadlet.confirmExternalLinkSubTitle=??????
+WelcomeToadlet.confirmExternalLinkTitle=??: ????
+WelcomeToadlet.confirmExternalLinkWithURL=??????????????${url}????????? 
Freenet ???????????????????????????????
+WelcomeToadlet.confirmFIN=?????????? Frost ???
+WelcomeToadlet.databaseStatsSubTitle=?????
+WelcomeToadlet.databaseStatsTitle=?? JE ??
 WelcomeToadlet.disabledAlert=????
 WelcomeToadlet.extVersion=Freenet-ext ????:${build} r${rev}
 WelcomeToadlet.extVersionWithRecommended=Freenet-ext ????:${build} 
(??????${recbuild}) ????:${rev}
 WelcomeToadlet.fetch=??
 WelcomeToadlet.fetchKeyLabel=????
-WelcomeToadlet.finInsertSuccessWithKey=??????????? ${key} ?
+WelcomeToadlet.finInsertSuccessWithKey=????????? ${key}.
+WelcomeToadlet.finInsertedTitle=??
+WelcomeToadlet.finTitle=?? Frost ????
+WelcomeToadlet.fromHeader=??
+WelcomeToadlet.goToExternalLink=???????
 WelcomeToadlet.homepageFullTitleWithName=${name} ? Freenet FProxy ??
 WelcomeToadlet.ieWarning=?????????Internet Explorer?????????????????
+WelcomeToadlet.ieWarningTitle=??????!
 WelcomeToadlet.insertCount=??: ${total}
-WelcomeToadlet.insertFailedTitle=????
-WelcomeToadlet.insertSucceededTitle=??????
-WelcomeToadlet.insertedTitle=????
-WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?????? key 
${link}${name}${/link}?
+WelcomeToadlet.insertFailedTitle=????
+WelcomeToadlet.insertFailedWithMessage=?????, ?????: ${message}
+WelcomeToadlet.insertSucceededTitle=????
+WelcomeToadlet.insertedTitle=??
+WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?? ${link}${name}${/link} 
???????.
 WelcomeToadlet.keyRequestLabel=??:
+WelcomeToadlet.messageHeader=??
 WelcomeToadlet.nodeUpdateConfirm=????????Freenet????
 WelcomeToadlet.nodeUpdateConfirmTitle=??????
+WelcomeToadlet.post=??
 WelcomeToadlet.privateKeyHeader=????
 WelcomeToadlet.publicKeyHeader=????
-WelcomeToadlet.requestCount=??: ${total}
+WelcomeToadlet.requestCount=??: ${total}
 WelcomeToadlet.restart=??
 WelcomeToadlet.restartConfirm=??????????Freenet????
 WelcomeToadlet.restartConfirmTitle=????
 WelcomeToadlet.restartNode=????
-WelcomeToadlet.restarting=??????????????,?????????????.?????Freenet.
-WelcomeToadlet.restartingTitle=?Freenet???????.
+WelcomeToadlet.restarting=?????????????, ?????????????. ?????Freenet.
+WelcomeToadlet.restartingTitle=Freenet ???????.
 WelcomeToadlet.shutdown=??
 WelcomeToadlet.shutdownConfirm=???????? Freenet ????
 WelcomeToadlet.shutdownConfirmTitle=????
+WelcomeToadlet.shutdownDone=Freenet ???????.
 WelcomeToadlet.shutdownNode=????
 WelcomeToadlet.splitfileErrorLabel=??????
+WelcomeToadlet.subjectHeader=??
+WelcomeToadlet.targetBoardHeader=?????
 WelcomeToadlet.testnetWarningTitle=??(????)??
 WelcomeToadlet.thanks=???? Freenet.
-WelcomeToadlet.transferringRequestCount=????: ${total}
+WelcomeToadlet.threadDumpNotUsingWrapper=???????????, ?????????????!
+WelcomeToadlet.threadDumpSubTitle=?????????
+WelcomeToadlet.threadDumpTitle=???????
+WelcomeToadlet.threadDumpWithFilename=?????????, ????? ${filename} ?????.
+WelcomeToadlet.transferringRequestCount=??????: ${total}
 WelcomeToadlet.update=??
 
WelcomeToadlet.updating=?Freenet??????,???????????.?????????????????,?????????????.
 WelcomeToadlet.updatingTitle=?????
+WelcomeToadlet.uriWouldHaveBeen=URI ???: ${uri}
 WelcomeToadlet.version=Freenet ??:${fullVersion} ????:${build} r${rev}
 WelcomeToadlet.versionHeader=???????
-WrapperConfig.wrapper.java.maxmemory.long=Freenet ????????. ???????????, 
Freenet ??????????; ?????????????, ????????. ?????????? Freenet ??????.
+WelcomeToadlet.writtenDatabaseStats=???????????????????????
+WrapperConfig.wrapper.java.maxmemory.long=Freenet ????????. ???????????, 
Freenet ??????????; ??????????????, ????????. ?????????? Freenet ??????.
 WrapperConfig.wrapper.java.maxmemory.short=??????(?????MiB)
 End

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java     
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java     
2008-07-07 15:51:48 UTC (rev 20999)
@@ -592,8 +592,7 @@
                        processJFKMessage2(payload, 4, pn, replyTo, true, 
setupType);
                } else if(packetType == 3) {
                        // Phase 4
-                       if(!processJFKMessage4(payload, 4, pn, replyTo, false, 
true, setupType, true))
-                               processJFKMessage4(payload, 4, pn, replyTo, 
false, true, setupType, false);
+                       processJFKMessage4(payload, 4, pn, replyTo, false, 
true, setupType);
                } else {
                        Logger.error(this, "Invalid phase "+packetType+" for 
anonymous-initiator (we are the responder)");
                }
@@ -695,8 +694,7 @@
                                 * using the same keys as in the previous 
message.
                                 * The signature is non-message recovering
                                 */
-                               if(!processJFKMessage4(payload, 3, pn, replyTo, 
oldOpennetPeer, false, -1, true))
-                                       processJFKMessage4(payload, 3, pn, 
replyTo, oldOpennetPeer, false, -1, false);
+                               processJFKMessage4(payload, 3, pn, replyTo, 
oldOpennetPeer, false, -1);
                        }
                } else {
                        Logger.error(this, "Decrypted auth packet but unknown 
negotiation type "+negType+" from "+replyTo+" possibly from "+pn);
@@ -1238,7 +1236,7 @@
         * @param pn The PeerNode we are talking to. Cannot be null as we are 
the initiator.
         * @param replyTo The Peer we are replying to.
         */
-       private boolean processJFKMessage4(byte[] payload, int inputOffset, 
PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, 
int setupType, boolean bothNoderefs)
+       private boolean processJFKMessage4(byte[] payload, int inputOffset, 
PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, 
int setupType)
        {
                final long t1 = System.currentTimeMillis();
                if(logMINOR) Logger.minor(this, "Got a JFK(4) message, 
processing it - "+pn.getPeer());
@@ -1256,13 +1254,11 @@
                        HASH_LENGTH + // HMAC of the cyphertext
                        (c.getBlockSize() >> 3) + // IV
                        Node.SIGNATURE_PARAMETER_LENGTH * 2 + // the signature
-                       (bothNoderefs ? pn.jfkMyRef.length : 0) + // my 
reference
                        8+ // bootID
                        1; // znoderefR

                if(payload.length - inputOffset < expectedLength + 3) {
-                       if(!bothNoderefs)
-                               Logger.error(this, "Packet too short from 
"+pn.getPeer()+": "+payload.length+" after decryption in JFK(4), should be 
"+(expectedLength + 3));
+                       Logger.error(this, "Packet too short from 
"+pn.getPeer()+": "+payload.length+" after decryption in JFK(4), should be 
"+(expectedLength + 3));
                        return false;
                }
                byte[] jfkBuffer = pn.getJFKBuffer();
@@ -1307,11 +1303,11 @@
                byte[] data = new byte[decypheredPayload.length - 
decypheredPayloadOffset];
                System.arraycopy(decypheredPayload, decypheredPayloadOffset, 
data, 0, decypheredPayload.length - decypheredPayloadOffset);
                long bootID = Fields.bytesToLong(data);
-               if(data.length - (bothNoderefs ? pn.jfkMyRef.length : 0) - 8 < 
0) {
-                       Logger.error(this, "No space for hisRef: 
bothNoderefs="+bothNoderefs+" data.length="+data.length+" 
myRef.length="+(pn.jfkMyRef==null?0:pn.jfkMyRef.length)+" orig data length 
"+(payload.length-inputOffset));
+               if(data.length - 8 < 0) {
+                       Logger.error(this, "No space for hisRef: 
data.length="+data.length+" 
myRef.length="+(pn.jfkMyRef==null?0:pn.jfkMyRef.length)+" orig data length 
"+(payload.length-inputOffset));
                        return false;
                }
-               byte[] hisRef = new byte[data.length - (bothNoderefs ? 
pn.jfkMyRef.length : 0) - 8];
+               byte[] hisRef = new byte[data.length - 8];
                System.arraycopy(data, 8, hisRef, 0, hisRef.length);

                // verify the signature
@@ -1329,10 +1325,7 @@
                byte[] messageHash = SHA256.digest(locallyGeneratedText);
                if(!DSA.verify(pn.peerPubKey, remoteSignature, new 
NativeBigInteger(1, messageHash), false)) {
                        String error = "The signature verification has failed!! 
JFK(4) -"+pn.getPeer()+" message hash "+HexUtil.bytesToHex(messageHash)+" 
length "+locallyGeneratedText.length+" hisRef "+hisRef.length+" hash 
"+Fields.hashCode(hisRef)+" myRef "+pn.jfkMyRef.length+" hash 
"+Fields.hashCode(pn.jfkMyRef)+" boot ID "+bootID;
-                       if(bothNoderefs)
-                               Logger.normal(this, error);
-                       else
-                               Logger.error(this, error);
+                       Logger.error(this, error);
                        return false;
                }


Modified: branches/saltedhashstore/freenet/src/freenet/node/Node.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-07-07 
15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-07-07 
15:51:48 UTC (rev 20999)
@@ -33,6 +33,7 @@

 import freenet.client.FetchContext;
 import freenet.clients.http.SimpleToadletServer;
+import freenet.clients.http.StartupToadlet;
 import freenet.config.EnumerableOptionCallback;
 import freenet.config.FreenetFilePersistentConfig;
 import freenet.config.InvalidConfigValueException;
@@ -40,6 +41,7 @@
 import freenet.config.PersistentConfig;
 import freenet.config.SubConfig;
 import freenet.crypt.DSAPublicKey;
+import freenet.crypt.DiffieHellman;
 import freenet.crypt.RandomSource;
 import freenet.crypt.SHA256;
 import freenet.crypt.Yarrow;
@@ -119,6 +121,7 @@
 import freenet.support.io.FileUtil;
 import freenet.support.io.NativeThread;
 import freenet.support.transport.ip.HostnameSyntaxException;
+import java.net.URI;

 /**
  * @author amphibian
@@ -606,11 +609,11 @@
         * @param config The Config object for this node.
         * @param random The random number generator for this node. Passed in 
because we may want
         * to use a non-secure RNG for e.g. one-JVM live-code simulations. 
Should be a Yarrow in
-        * a production node.
+        * a production node. Yarrow will be used if that parameter is null
         * @param the loggingHandler
         * @throws NodeInitException If the node initialization fails.
         */
-        Node(PersistentConfig config, RandomSource random, 
LoggingConfigHandler lc, NodeStarter ns, Executor executor) throws 
NodeInitException {
+        Node(PersistentConfig config, RandomSource r, LoggingConfigHandler lc, 
NodeStarter ns, Executor executor) throws NodeInitException {
                // Easy stuff
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                String tmp = "Initializing Node using Freenet Build 
#"+Version.buildNumber()+" r"+Version.cvsRevision+" and freenet-ext Build 
#"+NodeStarter.extBuildNumber+" r"+NodeStarter.extRevisionNumber+" with 
"+System.getProperty("java.vendor")+" JVM version 
"+System.getProperty("java.version")+" running on 
"+System.getProperty("os.arch")+' '+System.getProperty("os.name")+' 
'+System.getProperty("os.version");
@@ -622,16 +625,30 @@
                if(logConfigHandler != lc)
                        logConfigHandler=lc;
                startupTime = System.currentTimeMillis();
-               // Will be set up properly afterwards
-               L10n.setLanguage(L10n.FALLBACK_DEFAULT);
                SimpleFieldSet oldConfig = config.getSimpleFieldSet();
                // Setup node-specific configuration
                SubConfig nodeConfig = new SubConfig("node", config);
+               
                int sortOrder = 0;

+               // l10n stuffs
+               nodeConfig.register("l10n", 
Locale.getDefault().getLanguage().toLowerCase(), sortOrder++, false, true, 
+                               "Node.l10nLanguage",
+                               "Node.l10nLanguageLong",
+                               new L10nCallback());
+               
+               try {
+                       L10n.setLanguage(nodeConfig.getString("l10n"));
+               } catch (MissingResourceException e) {
+                       try {
+                               
L10n.setLanguage(nodeConfig.getOption("l10n").getDefault());
+                       } catch (MissingResourceException e1) {
+                               L10n.setLanguage(L10n.FALLBACK_DEFAULT);
+                       }
+               }
+               
                // FProxy config needs to be here too
                SubConfig fproxyConfig = new SubConfig("fproxy", config);
-
                try {
                        toadlets = new SimpleToadletServer(fproxyConfig, new 
ArrayBucketFactory(), executor);
                        fproxyConfig.finishedInitialization();
@@ -646,14 +663,18 @@
                        e4.printStackTrace();
                        throw new 
NodeInitException(NodeInitException.EXIT_COULD_NOT_START_FPROXY, "Could not 
start FProxy: "+e4);
                }
-               
+
+               // Setup RNG if needed : DO NOT USE IT BEFORE THAT POINT!
+               this.random = (r == null ? new Yarrow() : r);
+               DiffieHellman.init(random);
+               byte buffer[] = new byte[16];
+               random.nextBytes(buffer);
+               this.fastWeakRandom = new MersenneTwister(buffer);
+               toadlets.getStartupToadlet().setIsPRNGReady();
+
                nodeNameUserAlert = new MeaningfulNodeNameUserAlert(this);
                recentlyCompletedIDs = new LRUQueue();
                this.config = config;
-               this.random = random;
-               byte buffer[] = new byte[16];
-               random.nextBytes(buffer);
-               this.fastWeakRandom = new MersenneTwister(buffer);
                cachedPubKeys = new LRUHashtable();
                lm = new LocationManager(random, this);

@@ -1627,23 +1648,7 @@
                });

                disableHangCheckers = 
nodeConfig.getBoolean("disableHangCheckers");
-               
-               // l10n stuffs
-               nodeConfig.register("l10n", 
Locale.getDefault().getLanguage().toLowerCase(), sortOrder++, false, true, 
-                               "Node.l10nLanguage",
-                               "Node.l10nLanguageLong",
-                               new L10nCallback());
-               
-               try {
-                       L10n.setLanguage(nodeConfig.getString("l10n"));
-               } catch (MissingResourceException e) {
-                       try {
-                               
L10n.setLanguage(nodeConfig.getOption("l10n").getDefault());
-                       } catch (MissingResourceException e1) {
-                               L10n.setLanguage(L10n.FALLBACK_DEFAULT);
-                       }
-               }
-               
+                               
                nodeConfig.finishedInitialization();
                writeNodeFile();


Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java  
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java  
2008-07-07 15:51:48 UTC (rev 20999)
@@ -23,103 +23,96 @@
 import freenet.support.SimpleFieldSet;
 import freenet.support.LoggerHook.InvalidThresholdException;
 import freenet.support.io.NativeThread;
-       

 /**
  *  @author nextgens
  *
  *  A class to tie the wrapper and the node (needed for self-restarting 
support)
  */
-public class NodeStarter implements WrapperListener
-{
-    private Node node;
+public class NodeStarter implements WrapperListener {
+
+       private Node node;
        private static LoggingConfigHandler logConfigHandler;
        public final static int RECOMMENDED_EXT_BUILD_NUMBER = 20;
-       
        /*
        (File.separatorChar == '\\') &&
        
(System.getProperty("os.arch").toLowerCase().matches("(i?[x0-9]86_64|amd64)")) 
? 6 : 2;
-       */
+        */
        public static int extBuildNumber;
        public static String extRevisionNumber;
        private FreenetFilePersistentConfig cfg;

-    /*---------------------------------------------------------------
-     * Constructors
-     *-------------------------------------------------------------*/
-    private NodeStarter(){}
-    
-    public NodeStarter get(){
-       return this;
-    }
+       /*---------------------------------------------------------------
+        * Constructors
+        *-------------------------------------------------------------*/
+       private NodeStarter() {
+       }

-    /*---------------------------------------------------------------
-     * WrapperListener Methods
-     *-------------------------------------------------------------*/
-    /**
-     * The start method is called when the WrapperManager is signaled by the 
-     * native wrapper code that it can start its application.  This
-     * method call is expected to return, so a new thread should be launched
-     * if necessary.
-     *
-     * @param args List of arguments used to initialize the application.
-     *
-     * @return Any error code if the application should exit on completion
-     *         of the start method.  If there were no problems then this
-     *         method should return null.
-     */
-    public Integer start( String[] args )
-    {
-       if(args.length>1) {
-               System.out.println("Usage: $ java freenet.node.Node 
<configFile>");
-               return new Integer(-1);
-       }
-       
-       getExtBuild();
-       
-       File configFilename;
-       if(args.length == 0) {
-               System.out.println("Using default config filename freenet.ini");
-               configFilename = new File("freenet.ini");
-       } else
-               configFilename = new File(args[0]);
-       
-       // set Java's DNS cache not to cache forever, since many people
-       // use dyndns hostnames
-       java.security.Security.setProperty("networkaddress.cache.ttl" , "0");
-       java.security.Security.setProperty("networkaddress.cache.negative.ttl" 
, "0");
-       
-       try{
-               cfg = 
FreenetFilePersistentConfig.constructFreenetFilePersistentConfig(configFilename);
 
-       }catch(IOException e){
-               System.out.println("Error : "+e);
-               e.printStackTrace();
-               return new Integer(-1);
-       }
-       
-       // First, set up logging. It is global, and may be shared between 
several nodes.
-       SubConfig loggingConfig = new SubConfig("logger", cfg);
-       
-       PooledExecutor executor = new PooledExecutor();
-       
-       try {
-               logConfigHandler = new LoggingConfigHandler(loggingConfig, 
executor);
-       } catch (InvalidConfigValueException e) {
-               System.err.println("Error: could not set up logging: 
"+e.getMessage());
-               e.printStackTrace();
-               return new Integer(-2);
-       }
+       public NodeStarter get() {
+               return this;
+       }

-       executor.start();
-       
-       // Prevent timeouts for a while. The DiffieHellman init for example 
could take some time on a very slow system.
-       WrapperManager.signalStarting(500000);
-       
-       // Setup RNG
-       RandomSource random = new Yarrow();
-       
-       DiffieHellman.init(random);
-        
+       /*---------------------------------------------------------------
+        * WrapperListener Methods
+        *-------------------------------------------------------------*/
+       /**
+        * The start method is called when the WrapperManager is signaled by 
the 
+        *      native wrapper code that it can start its application.  This
+        *      method call is expected to return, so a new thread should be 
launched
+        *      if necessary.
+        *
+        * @param args List of arguments used to initialize the application.
+        *
+        * @return Any error code if the application should exit on completion
+        *         of the start method.  If there were no problems then this
+        *         method should return null.
+        */
+       public Integer start(String[] args) {
+               if(args.length > 1) {
+                       System.out.println("Usage: $ java freenet.node.Node 
<configFile>");
+                       return new Integer(-1);
+               }
+
+               getExtBuild();
+
+               File configFilename;
+               if(args.length == 0) {
+                       System.out.println("Using default config filename 
freenet.ini");
+                       configFilename = new File("freenet.ini");
+               } else
+                       configFilename = new File(args[0]);
+
+               // set Java's DNS cache not to cache forever, since many people
+               // use dyndns hostnames
+               java.security.Security.setProperty("networkaddress.cache.ttl", 
"0");
+               
java.security.Security.setProperty("networkaddress.cache.negative.ttl", "0");
+
+               try {
+                       cfg = 
FreenetFilePersistentConfig.constructFreenetFilePersistentConfig(configFilename);
+               } catch(IOException e) {
+                       System.out.println("Error : " + e);
+                       e.printStackTrace();
+                       return new Integer(-1);
+               }
+
+               // First, set up logging. It is global, and may be shared 
between several nodes.
+               SubConfig loggingConfig = new SubConfig("logger", cfg);
+
+               PooledExecutor executor = new PooledExecutor();
+
+               try {
+                       logConfigHandler = new 
LoggingConfigHandler(loggingConfig, executor);
+               } catch(InvalidConfigValueException e) {
+                       System.err.println("Error: could not set up logging: " 
+ e.getMessage());
+                       e.printStackTrace();
+                       return new Integer(-2);
+               }
+
+               executor.start();
+
+               // Prevent timeouts for a while. The DiffieHellman init for 
example could take some time on a very slow system.
+               WrapperManager.signalStarting(500000);
+
                // Thread to keep the node up.
                // JVM deadlocks losing a lock when two threads of different 
types (daemon|app)
                // are contended for the same lock. So make USM daemon, and use 
useless to keep the JVM
@@ -127,53 +120,55 @@
                // 
http://forum.java.sun.com/thread.jspa?threadID=343023&messageID=2942637 - last 
message
                Runnable useless =
                        new Runnable() {
-                       public void run() {
-                               while(true)
-                                       try {
-                                               Thread.sleep(60*60*1000);
-                                       } catch (InterruptedException e) {
-                                               // Ignore
-                                       } catch (Throwable t) {
+
+                               public void run() {
+                                       while(true) {
                                                try {
-                                                       Logger.error(this, 
"Caught "+t, t);
-                                               } catch (Throwable t1) {
+                                                       Thread.sleep(60 * 60 * 
1000);
+                                               } catch(InterruptedException e) 
{
                                                        // Ignore
+                                               } catch(Throwable t) {
+                                                       try {
+                                                               
Logger.error(this, "Caught " + t, t);
+                                                       } catch(Throwable t1) {
+                                                               // Ignore
+                                                       }
                                                }
                                        }
-                       }
-               };
+                               }
+                       };
                NativeThread plug = new NativeThread(useless, "Plug", 
NativeThread.MAX_PRIORITY, false);
                // Not daemon, but doesn't do anything.
                // Keeps the JVM alive.
                // DO NOT do anything in the plug thread, if you do you risk 
the EvilJVMBug.
                plug.setDaemon(false);
                plug.start();
-               
+
                // Initialize SSL
-       SubConfig sslConfig = new SubConfig("ssl", cfg);
-       SSL.init(sslConfig);
-               
-       try {
-               node = new Node(cfg, random, logConfigHandler,this, executor);
-               node.start(false);
-               System.out.println("Node initialization completed.");
-       } catch (NodeInitException e) {
-               System.err.println("Failed to load node: "+e.getMessage());
-               e.printStackTrace();
-               System.exit(e.exitCode);
-       }
-       
+               SubConfig sslConfig = new SubConfig("ssl", cfg);
+               SSL.init(sslConfig);
+
+               try {
+                       node = new Node(cfg, null, logConfigHandler, this, 
executor);
+                       node.start(false);
+                       System.out.println("Node initialization completed.");
+               } catch(NodeInitException e) {
+                       System.err.println("Failed to load node: " + 
e.getMessage());
+                       e.printStackTrace();
+                       System.exit(e.exitCode);
+               }
+
                return null;
-    }
+       }

-    private void getExtBuild() {
-       try{
-               extBuildNumber = ExtVersion.buildNumber;
+       private void getExtBuild() {
+               try {
+                       extBuildNumber = ExtVersion.buildNumber;
                        extRevisionNumber = ExtVersion.cvsRevision;
-                       String builtWithMessage = "freenet.jar built with 
freenet-ext.jar Build #"+extBuildNumber+" r"+extRevisionNumber;
+                       String builtWithMessage = "freenet.jar built with 
freenet-ext.jar Build #" + extBuildNumber + " r" + extRevisionNumber;
                        Logger.normal(this, builtWithMessage);
                        System.out.println(builtWithMessage);
-               extBuildNumber = ExtVersion.buildNumber();
+                       extBuildNumber = ExtVersion.buildNumber();
                        if(extBuildNumber == -42) {
                                extBuildNumber = ExtVersion.extBuildNumber();
                                extRevisionNumber = 
ExtVersion.extRevisionNumber();
@@ -190,145 +185,142 @@
                                System.err.println(revisionMessage);
                                extRevisionNumber = "INVALID";
                        }
-       }catch(Throwable t){     
-               // Compatibility code ... will be removed
-               Logger.error(this, "Unable to get the version of your 
freenet-ext file : it's probably corrupted!");
-               System.err.println("Unable to get the version of your 
freenet-ext file : it's probably corrupted!");
-               System.err.println(t.getMessage());
-               extRevisionNumber = "INVALID";
-               extBuildNumber = -1;
-       }
+               } catch(Throwable t) {
+                       // Compatibility code ... will be removed
+                       Logger.error(this, "Unable to get the version of your 
freenet-ext file : it's probably corrupted!");
+                       System.err.println("Unable to get the version of your 
freenet-ext file : it's probably corrupted!");
+                       System.err.println(t.getMessage());
+                       extRevisionNumber = "INVALID";
+                       extBuildNumber = -1;
+               }
        }

        /**
-     * Called when the application is shutting down.  The Wrapper assumes that
-     *  this method will return fairly quickly.  If the shutdown code code
-     *  could potentially take a long time, then 
WrapperManager.signalStopping()
-     *  should be called to extend the timeout period.  If for some reason,
-     *  the stop method can not return, then it must call
-     *  WrapperManager.stopped() to avoid warning messages from the Wrapper.
-     *
-     * @param exitCode The suggested exit code that will be returned to the OS
-     *                 when the JVM exits.
-     *
-     * @return The exit code to actually return to the OS.  In most cases, this
-     *         should just be the value of exitCode, however the user code has
-     *         the option of changing the exit code if there are any problems
-     *         during shutdown.
-     */
-    public int stop( int exitCode )
-    {
-       System.err.println("Shutting down with exit code "+exitCode);
-       node.park();
-       // see #354
-       WrapperManager.signalStopping(120000);
-        
-        return exitCode;
-    }
-    
-    public void restart(){
-       WrapperManager.restart();
-    }
-    
-    /**
-     * Called whenever the native wrapper code traps a system control signal
-     *  against the Java process.  It is up to the callback to take any actions
-     *  necessary.  Possible values are: WrapperManager.WRAPPER_CTRL_C_EVENT, 
-     *    WRAPPER_CTRL_CLOSE_EVENT, WRAPPER_CTRL_LOGOFF_EVENT, or 
-     *    WRAPPER_CTRL_SHUTDOWN_EVENT
-     *
-     * @param event The system control signal.
-     */
-    public void controlEvent( int event )
-    {
-        if (WrapperManager.isControlledByNativeWrapper()) {
-            // The Wrapper will take care of this event
-        } else {
-            // We are not being controlled by the Wrapper, so
-            //  handle the event ourselves.
-            if ((event == WrapperManager.WRAPPER_CTRL_C_EVENT) ||
-                (event == WrapperManager.WRAPPER_CTRL_CLOSE_EVENT) ||
-                (event == WrapperManager.WRAPPER_CTRL_SHUTDOWN_EVENT)){
-                WrapperManager.stop(0);
-            }
-        }
-    }
-    
-    /*---------------------------------------------------------------
-     * Main Method
-     *-------------------------------------------------------------*/
-    public static void main( String[] args )
-    {
-        // Start the application.  If the JVM was launched from the native
-        //  Wrapper then the application will wait for the native Wrapper to
-        //  call the application's start method.  Otherwise the start method
-        //  will be called immediately.
-        WrapperManager.start( new NodeStarter(), args );
-    }
+        * Called when the application is shutting down.  The Wrapper assumes 
that
+        *  this method will return fairly quickly.  If the shutdown code code
+        *  could potentially take a long time, then 
WrapperManager.signalStopping()
+        *  should be called to extend the timeout period.  If for some reason,
+        *  the stop method can not return, then it must call
+        *  WrapperManager.stopped() to avoid warning messages from the Wrapper.
+        *
+        * @param exitCode The suggested exit code that will be returned to the 
OS
+        *                 when the JVM exits.
+        *
+        * @return The exit code to actually return to the OS.  In most cases, 
this
+        *         should just be the value of exitCode, however the user code 
has
+        *         the option of changing the exit code if there are any 
problems
+        *         during shutdown.
+        */
+       public int stop(int exitCode) {
+               System.err.println("Shutting down with exit code " + exitCode);
+               node.park();
+               // see #354
+               WrapperManager.signalStopping(120000);

-    /**
-     * VM-specific init.
-     * Not Node-specific; many nodes may be created later.
-     * @param testName The name of the test instance.
-     */
+               return exitCode;
+       }
+
+       public void restart() {
+               WrapperManager.restart();
+       }
+
+       /**
+        * Called whenever the native wrapper code traps a system control signal
+        *  against the Java process.  It is up to the callback to take any 
actions
+        *  necessary.  Possible values are: 
WrapperManager.WRAPPER_CTRL_C_EVENT, 
+        *    WRAPPER_CTRL_CLOSE_EVENT, WRAPPER_CTRL_LOGOFF_EVENT, or 
+        *    WRAPPER_CTRL_SHUTDOWN_EVENT
+        *
+        * @param event The system control signal.
+        */
+       public void controlEvent(int event) {
+               if(WrapperManager.isControlledByNativeWrapper()) {
+                       // The Wrapper will take care of this event
+               } else
+                       // We are not being controlled by the Wrapper, so
+                       //  handle the event ourselves.
+                       if((event == WrapperManager.WRAPPER_CTRL_C_EVENT) ||
+                               (event == 
WrapperManager.WRAPPER_CTRL_CLOSE_EVENT) ||
+                               (event == 
WrapperManager.WRAPPER_CTRL_SHUTDOWN_EVENT))
+                               WrapperManager.stop(0);
+       }
+
+       /*---------------------------------------------------------------
+        * Main Method
+        *-------------------------------------------------------------*/
+       public static void main(String[] args) {
+               // Start the application.  If the JVM was launched from the 
native
+               //  Wrapper then the application will wait for the native 
Wrapper to
+               //  call the application's start method.  Otherwise the start 
method
+               //  will be called immediately.
+               WrapperManager.start(new NodeStarter(), args);
+       }
+
+       /**
+        * VM-specific init.
+        * Not Node-specific; many nodes may be created later.
+        * @param testName The name of the test instance.
+        */
        public static RandomSource globalTestInit(String testName, boolean 
enablePlug, int logThreshold, String details) throws InvalidThresholdException {
-               
+
                File dir = new File(testName);
                if((!dir.mkdir()) && ((!dir.exists()) || (!dir.isDirectory()))) 
{
                        System.err.println("Cannot create directory for test");
                        System.exit(NodeInitException.EXIT_TEST_ERROR);
                }
-               
-        Logger.setupStdoutLogging(logThreshold, details);
-               
-       // set Java's DNS cache not to cache forever, since many people
-       // use dyndns hostnames
-       java.security.Security.setProperty("networkaddress.cache.ttl" , "0");
-       java.security.Security.setProperty("networkaddress.cache.negative.ttl" 
, "0");
-               
-       // Setup RNG
-       RandomSource random = new Yarrow();
-       
-       DiffieHellman.init(random);
-        
-       if(enablePlug) {
-       
-               // Thread to keep the node up.
-               // JVM deadlocks losing a lock when two threads of different 
types (daemon|app)
-               // are contended for the same lock. So make USM daemon, and use 
useless to keep the JVM
-               // up.
-               // 
http://forum.java.sun.com/thread.jspa?threadID=343023&messageID=2942637 - last 
message
-               Runnable useless =
-                       new Runnable() {
-                       public void run() {
-                               while(true)
-                                       try {
-                                               Thread.sleep(60*60*1000);
-                                       } catch (InterruptedException e) {
-                                               // Ignore
-                                       } catch (Throwable t) {
-                                               try {
-                                                       Logger.error(this, 
"Caught "+t, t);
-                                               } catch (Throwable t1) {
-                                                       // Ignore
+
+               Logger.setupStdoutLogging(logThreshold, details);
+
+               // set Java's DNS cache not to cache forever, since many people
+               // use dyndns hostnames
+               java.security.Security.setProperty("networkaddress.cache.ttl", 
"0");
+               
java.security.Security.setProperty("networkaddress.cache.negative.ttl", "0");
+
+               // Setup RNG
+               RandomSource random = new Yarrow();
+
+               DiffieHellman.init(random);
+
+               if(enablePlug) {
+
+                       // Thread to keep the node up.
+                       // JVM deadlocks losing a lock when two threads of 
different types (daemon|app)
+                       // are contended for the same lock. So make USM daemon, 
and use useless to keep the JVM
+                       // up.
+                       // 
http://forum.java.sun.com/thread.jspa?threadID=343023&messageID=2942637 - last 
message
+                       Runnable useless =
+                               new Runnable() {
+
+                                       public void run() {
+                                               while(true) {
+                                                       try {
+                                                               Thread.sleep(60 
* 60 * 1000);
+                                                       } 
catch(InterruptedException e) {
+                                                               // Ignore
+                                                       } catch(Throwable t) {
+                                                               try {
+                                                                       
Logger.error(this, "Caught " + t, t);
+                                                               } 
catch(Throwable t1) {
+                                                                       // 
Ignore
+                                                               }
+                                                       }
                                                }
                                        }
-                       }
-               };
-               Thread plug = new Thread(useless, "Plug");
-               // Not daemon, but doesn't do anything.
-               // Keeps the JVM alive.
-               // DO NOT do anything in the plug thread, if you do you risk 
the EvilJVMBug.
-               plug.setDaemon(false);
-               plug.start();
-       }
-       
-       FNPPacketMangler.LOG_UNMATCHABLE_ERROR = true;
-       DNSRequester.DISABLE = true;
-               
+                               };
+                       Thread plug = new Thread(useless, "Plug");
+                       // Not daemon, but doesn't do anything.
+                       // Keeps the JVM alive.
+                       // DO NOT do anything in the plug thread, if you do you 
risk the EvilJVMBug.
+                       plug.setDaemon(false);
+                       plug.start();
+               }
+
+               FNPPacketMangler.LOG_UNMATCHABLE_ERROR = true;
+               DNSRequester.DISABLE = true;
+
                return random;
        }
-       
+
        /**
         * Create a test node.
         * @param port The node port number. Each test node must have a 
different port
@@ -339,21 +331,21 @@
         * @throws NodeInitException If the node cannot start up for some 
reason, most
         * likely a config problem.
         */
-       public static Node createTestNode(int port, String testName, boolean 
doClient, 
-                       boolean doSwapping, boolean disableProbabilisticHTLs, 
short maxHTL,
-                       int dropProb, RandomSource random, Executor executor, 
int threadLimit, 
-                       long storeSize, boolean ramStore, boolean 
enableSwapping, boolean enableARKs, 
-                       boolean enableULPRs, boolean 
enablePerNodeFailureTables, 
-                       boolean enableSwapQueueing, boolean 
enablePacketCoalescing, 
-                       int outputBandwidthLimit) throws NodeInitException {
-               
+       public static Node createTestNode(int port, String testName, boolean 
doClient,
+               boolean doSwapping, boolean disableProbabilisticHTLs, short 
maxHTL,
+               int dropProb, RandomSource random, Executor executor, int 
threadLimit,
+               long storeSize, boolean ramStore, boolean enableSwapping, 
boolean enableARKs,
+               boolean enableULPRs, boolean enablePerNodeFailureTables,
+               boolean enableSwapQueueing, boolean enablePacketCoalescing,
+               int outputBandwidthLimit) throws NodeInitException {
+
                File baseDir = new File(testName);
                File portDir = new File(baseDir, Integer.toString(port));
                if((!portDir.mkdir()) && ((!portDir.exists()) || 
(!portDir.isDirectory()))) {
                        System.err.println("Cannot create directory for test");
                        System.exit(NodeInitException.EXIT_TEST_ERROR);
                }
-               
+
                // Set up config for testing
                SimpleFieldSet configFS = new SimpleFieldSet(false); // only 
happens once in entire simulation
                if(outputBandwidthLimit > 0) {
@@ -362,7 +354,7 @@
                } else {
                        // Even with throttleLocalTraffic=false, requests still 
count in NodeStats.
                        // So set outputBandwidthLimit to something insanely 
high.
-                       configFS.put("node.outputBandwidthLimit", 16*1024*1024);
+                       configFS.put("node.outputBandwidthLimit", 16 * 1024 * 
1024);
                        configFS.put("node.throttleLocalTraffic", false);
                }
                configFS.put("node.listenPort", port);
@@ -383,7 +375,7 @@
                configFS.put("node.includeLocalAddressesInNoderefs", true);
                configFS.put("node.enableARKs", false);
                configFS.put("node.load.threadLimit", threadLimit);
-               if(ramStore) 
+               if(ramStore)
                        configFS.putSingle("node.storeType", "ram");
                configFS.put("storeSize", storeSize);
                configFS.put("node.disableHangCheckers", true);
@@ -393,14 +385,14 @@
                configFS.put("node.enableULPRDataPropagation", enableULPRs);
                configFS.put("node.enablePerNodeFailureTables", 
enablePerNodeFailureTables);
                configFS.put("node.enablePacketCoalescing", 
enablePacketCoalescing);
-               
+
                PersistentConfig config = new PersistentConfig(configFS);
-               
-               Node node=new Node(config, random, null, null, executor);
-               
+
+               Node node = new Node(config, random, null, null, executor);
+
                //All testing environments connect the nodes as they want, even 
if the old setup is restored, it is not desired.
                node.peers.removeAllPeers();
-               
+
                return node;
        }
 }

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
       2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
       2008-07-07 15:51:48 UTC (rev 20999)
@@ -122,15 +122,15 @@
                 return;
             }

-            double nextValue=next.getLocation();
-                       
+           double nextValue=next.getLocation();
+
             if(logMINOR) Logger.minor(this, "Routing request to "+next);
             nodesRoutedTo.add(next);

-            if(Location.distance(target, nextValue, true) > 
Location.distance(target, nearestLoc, true)) {
-                htl = node.decrementHTL((hasForwarded ? next : source), htl);
-                if(logMINOR) Logger.minor(this, "Backtracking: 
target="+target+" next="+nextValue+" closest="+nearestLoc+" so htl="+htl);
-            }
+           if(Location.distance(target, nextValue, true) > 
Location.distance(target, nearestLoc, true)) {
+                   htl = node.decrementHTL((hasForwarded ? next : source), 
htl);
+                   if(logMINOR) Logger.minor(this, "Backtracking: 
target="+target+" next="+nextValue+" closest="+nearestLoc+" so htl="+htl);    
+           }

             Message req = createDataRequest();


Modified: branches/saltedhashstore/freenet/src/freenet/node/Version.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-07-07 15:51:48 UTC (rev 20999)
@@ -24,17 +24,17 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 1152;
+       private static final int buildNumber = 1153;

        /** Oldest build of Fred we will talk to */
        private static final int oldLastGoodBuild = 1145;
-       private static final int newLastGoodBuild = 1152;
+       private static final int newLastGoodBuild = 1153;
        static final long transitionTime;

        static {
                final Calendar _cal = 
Calendar.getInstance(TimeZone.getTimeZone("GMT"));
                // year, month - 1 (or constant), day, hour, minute, second
-               _cal.set( 2008, Calendar.JUNE, 15, 0, 0, 0 );
+               _cal.set( 2008, Calendar.JULY, 9, 0, 0, 0 );
                transitionTime = _cal.getTimeInMillis();
        }


Modified: 
branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPutBase.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPutBase.java    
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPutBase.java    
2008-07-07 15:51:48 UTC (rev 20999)
@@ -247,7 +247,7 @@
        private void trySendGeneratedURIMessage(FCPConnectionOutputHandler 
handler) {
                FCPMessage msg;
                synchronized(this) {
-                       msg = new URIGeneratedMessage(generatedURI, identifier);
+                       msg = new URIGeneratedMessage(generatedURI, identifier, 
client.isGlobalQueue);
                }
                if(handler != null)
                        handler.queue(msg);

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/fcp/PersistentGet.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/fcp/PersistentGet.java    
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/node/fcp/PersistentGet.java    
2008-07-07 15:51:48 UTC (rev 20999)
@@ -58,6 +58,8 @@
                fs.putSingle("URI", uri.toString(false, false));
                fs.put("Verbosity", verbosity);
                fs.putSingle("ReturnType", 
ClientGetMessage.returnTypeString(returnType));
+               fs.putSingle("Persistence", 
ClientRequest.persistenceTypeString(persistenceType));
+               // FIXME PersistenceType is backward compatibility cruft, 
everything else uses Persistence
                fs.putSingle("PersistenceType", 
ClientRequest.persistenceTypeString(persistenceType));
                if(returnType == ClientGetMessage.RETURN_TYPE_DISK) {
                        fs.putSingle("Filename", targetFile.getAbsolutePath());

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/fcp/URIGeneratedMessage.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/node/fcp/URIGeneratedMessage.java  
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/node/fcp/URIGeneratedMessage.java  
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -11,16 +11,19 @@

        private final FreenetURI uri;
        private final String identifier;
+       private final boolean global;

-       public URIGeneratedMessage(FreenetURI uri, String identifier) {
+       public URIGeneratedMessage(FreenetURI uri, String identifier, boolean 
global) {
                this.uri = uri;
                this.identifier = identifier;
+               this.global = global;
        }

        public SimpleFieldSet getFieldSet() {
                SimpleFieldSet fs = new SimpleFieldSet(true);
                fs.putSingle("URI", uri.toString());
                fs.putSingle("Identifier", identifier);
+               fs.put("Global", global);
                return fs;
        }


Modified: 
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
  2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
  2008-07-07 15:51:48 UTC (rev 20999)
@@ -127,18 +127,17 @@
         * /alerts/[ anchor pointing to the real alert].
         */
        public HTMLNode createAlertsShort(String title, boolean advancedMode, 
boolean drawDumpEventsForm) {
-               UserAlert[] alerts = getAlerts();
+               UserAlert[] currentAlerts = getAlerts();
                short maxLevel = Short.MAX_VALUE;
                int events = 0;
-               for(int i=0;i<alerts.length;i++) {
-                       boolean isValid = alerts[i].isValid();
-                       short level = alerts[i].getPriorityClass();
-                       if(isValid) {
-                               if(level < maxLevel) maxLevel = level;
-                               if(alerts[i].isEventNotification()) events++;
-                       }
+               for(int i=0;i<currentAlerts.length;i++) {
+                       if (!currentAlerts[i].isValid())
+                               continue;
+                       short level = currentAlerts[i].getPriorityClass();
+                       if(level < maxLevel) maxLevel = level;
+                       if(currentAlerts[i].isEventNotification()) events++;
                }
-               if(events == 0)
+               if(maxLevel == Short.MAX_VALUE)
                        return new HTMLNode("#", "");
                if(events < 2) drawDumpEventsForm = false;
                HTMLNode boxNode = new HTMLNode("div", "class", "infobox 
infobox-"+getAlertLevelName(maxLevel)+" infobox-summary-status-box");
@@ -148,8 +147,8 @@
                        contentNode.addChild("p", "class", "click-for-more", 
l10n("clickForMore"));
                HTMLNode alertsNode = contentNode.addChild("ul", "class", 
"alert-summary");
                int totalNumber = 0;
-               for (int i = 0; i < alerts.length; i++) {
-                       UserAlert alert = alerts[i];
+               for (int i = 0; i < currentAlerts.length; i++) {
+                       UserAlert alert = currentAlerts[i];
                        if (!alert.isValid())
                                continue;
                        HTMLNode listItem = alertsNode.addChild("li", "class", 
"alert-summary-text-"+getAlertLevelName(alert.getPriorityClass()));
@@ -160,11 +159,11 @@
                        HTMLNode dumpFormNode = contentNode.addChild("form", 
new String[] { "action", "method" }, new String[] { "/", "post" 
}).addChild("div");
                        dumpFormNode.addChild("input", new String[] { "type", 
"name", "value" }, new String[] { "hidden", "formPassword", core.formPassword 
});
                        StringBuffer sb = new StringBuffer();
-                       for(int i=0;i<alerts.length;i++) {
-                               if(!alerts[i].isEventNotification()) continue;
+                       for(int i=0;i<currentAlerts.length;i++) {
+                               if(!currentAlerts[i].isEventNotification()) 
continue;
                                if(sb.length() != 0)
                                        sb.append(",");
-                               sb.append(alerts[i].anchor());
+                               sb.append(currentAlerts[i].anchor());
                        }
                        dumpFormNode.addChild("input", new String[] { "type", 
"name", "value" }, new String[] { "hidden", "events", sb.toString() });
                        dumpFormNode.addChild("input", new String[] { "type", 
"name", "value" }, new String[] { "submit", "dismiss-events", 
l10n("dumpEventsButton") });

Modified: 
branches/saltedhashstore/freenet/src/freenet/support/LibraryLoader.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/LibraryLoader.java     
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/support/LibraryLoader.java     
2008-07-07 15:51:48 UTC (rev 20999)
@@ -25,13 +25,16 @@
                } else 
if(System.getProperty("os.arch").toLowerCase().matches("(ppc)")) {
                        arch = "ppc";
                } else {
+                       // We want to try the i386 libraries if the 
architecture is unknown
+                       // Wrappers MUST fallback to "plain java" 
implementation if loading native libraries fails
                        arch = "i386";
                }

                return arch;
        }

-       public static void loadNative(String path, String libraryName) {
+       public static boolean loadNative(String path, String libraryName) {
+               boolean success = false;
                final boolean isWindows = File.pathSeparatorChar == ';';
                final String prefix = (isWindows ? ".dll" : 
((System.getProperty("os.name")).toLowerCase().startsWith("mac") ? ".jnilib" : 
".so"));
                final String libraryNameWithPrefix = (isWindows ? "" : "lib") + 
libraryName;
@@ -43,6 +46,7 @@
                if (nativeLib.exists()) {
                        System.out.println("Attempting to load the NativeThread 
library ["+libraryName+']');
                        System.loadLibrary(libraryName);
+                       success = true;
                } else {
                        try {
                                // Get the resource
@@ -68,10 +72,13 @@
                                // Finally, load the dll
                                System.out.println("Attempting to load the 
"+libraryName+" library ["+resource+']');
                                System.load(temporaryLib.getPath());
+                               success = true;
                        } catch(Throwable e) {
                                System.err.println("Caught the following 
exception attempting to load "+resourceName);
                                e.printStackTrace();
                        }
                }
+
+               return success;
        }
 }

Modified: 
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucket.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucket.java  
    2008-07-07 15:31:05 UTC (rev 20998)
+++ 
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucket.java  
    2008-07-07 15:51:48 UTC (rev 20999)
@@ -15,7 +15,7 @@
 public class BucketChainBucket implements Bucket {

        private final Vector buckets;
-       private long bucketSize;
+       public final long bucketSize;
        private long size;
        private boolean freed;
        private boolean readOnly;
@@ -41,6 +41,14 @@
                        list[i].free();
                }
        }
+       
+       /** Equivalent to free(), but don't free the underlying buckets. */
+       public void clear() {
+               synchronized(this) {
+                       size = 0;
+                       buckets.clear();
+               }
+       }

        public synchronized Bucket[] getBuckets() {
                return (Bucket[]) buckets.toArray(new Bucket[buckets.size()]);
@@ -164,6 +172,7 @@
                        if(freed) throw new IOException("Freed");
                        size = 0;
                        list = getBuckets();
+                       buckets.clear();
                }
                for(int i=0;i<list.length;i++) {
                        list[i].free();
@@ -189,7 +198,8 @@
                                }
                                if(bucketLength == bucketSize) {
                                        curBucketStream.close();
-                                       curBucketStream = 
makeBucketOutputStream(bucketNo++);
+                                       curBucketStream = 
makeBucketOutputStream(++bucketNo);
+                                       bucketLength = 0;
                                }
                                curBucketStream.write(c);
                                bucketLength++;
@@ -218,7 +228,8 @@
                                if(length <= 0) return;
                                if(bucketLength == bucketSize) {
                                        curBucketStream.close();
-                                       curBucketStream = 
makeBucketOutputStream(bucketNo++);
+                                       curBucketStream = 
makeBucketOutputStream(++bucketNo);
+                                       bucketLength = 0;
                                }
                                if(bucketLength + length > bucketSize) {
                                        int split = (int) (bucketSize - 
bucketLength);
@@ -243,6 +254,9 @@

        protected OutputStream makeBucketOutputStream(int i) throws IOException 
{
                Bucket bucket = bf.makeBucket(bucketSize);
+               buckets.add(bucket);
+               if(buckets.size() != i+1)
+                       throw new IllegalStateException("Added bucket, size 
should be "+(i+1)+" but is "+buckets.size());
                buckets.set(i, bucket);
                return bucket.getOutputStream();
        }

Added: 
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucketFactory.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucketFactory.java
                               (rev 0)
+++ 
branches/saltedhashstore/freenet/src/freenet/support/io/BucketChainBucketFactory.java
       2008-07-07 15:51:48 UTC (rev 20999)
@@ -0,0 +1,22 @@
+package freenet.support.io;
+
+import java.io.IOException;
+
+import freenet.support.api.Bucket;
+import freenet.support.api.BucketFactory;
+
+public class BucketChainBucketFactory implements BucketFactory {
+       
+       final BucketFactory factory;
+       final int blockSize;
+
+       public BucketChainBucketFactory(BucketFactory bucketFactory, int 
block_size) {
+               this.factory = bucketFactory;
+               this.blockSize = block_size;
+       }
+
+       public Bucket makeBucket(long size) throws IOException {
+               return new BucketChainBucket(blockSize, factory);
+       }
+
+}

Modified: 
branches/saltedhashstore/freenet/src/freenet/support/io/BucketTools.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/io/BucketTools.java    
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/support/io/BucketTools.java    
2008-07-07 15:51:48 UTC (rev 20999)
@@ -334,13 +334,28 @@
         * and the data written to them.
         * 
         * Note that this method will allocate a buffer of size splitSize.
+        * @param freeData 
         * @throws IOException If there is an error creating buckets, reading 
from
         * the provided bucket, or writing to created buckets.
         */
-       public static Bucket[] split(Bucket origData, int splitSize, 
BucketFactory bf) throws IOException {
+       public static Bucket[] split(Bucket origData, int splitSize, 
BucketFactory bf, boolean freeData) throws IOException {
                if(origData instanceof FileBucket) {
+                       if(freeData) {
+                               Logger.error(BucketTools.class, "Asked to free 
data when splitting a FileBucket ?!?!? Not freeing as this would clobber the 
split result...");
+                       }
                        return ((FileBucket)origData).split(splitSize);
                }
+               if(origData instanceof BucketChainBucket) {
+                       BucketChainBucket data = (BucketChainBucket)origData;
+                       if(data.bucketSize == splitSize) {
+                               Bucket[] buckets = data.getBuckets();
+                               if(freeData)
+                                       data.clear();
+                               return buckets;
+                       } else {
+                               Logger.error(BucketTools.class, "Incompatible 
split size splitting a BucketChainBucket: his split size is "+data.bucketSize+" 
but mine is "+splitSize+" - we will copy the data, but this suggests a bug", 
new Exception("debug"));
+                       }
+               }
                long length = origData.size();
                if(length > ((long)Integer.MAX_VALUE) * splitSize)
                        throw new IllegalArgumentException("Way too big!: 
"+length+" for "+splitSize);
@@ -374,6 +389,8 @@
                        else
                                is.close();
                }
+               if(freeData)
+                       origData.free();
                return buckets;
        }


Modified: 
branches/saltedhashstore/freenet/src/freenet/support/io/NativeThread.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/io/NativeThread.java   
2008-07-07 15:31:05 UTC (rev 20998)
+++ branches/saltedhashstore/freenet/src/freenet/support/io/NativeThread.java   
2008-07-07 15:51:48 UTC (rev 20999)
@@ -39,11 +39,9 @@
        static {
                Logger.minor(NativeThread.class, "Running init()");
                // Loading the NativeThread library isn't useful on macos
-               _loadNative = 
("Linux".equalsIgnoreCase(System.getProperty("os.name"))) && 
(NodeStarter.extBuildNumber > 18);
-               Logger.debug(NativeThread.class, "Run init(): should 
loadNative="+_loadNative);
-               if(_loadNative) {
-                       //System.loadLibrary("NativeThread");
-                       LibraryLoader.loadNative("/freenet/support/io/", 
"NativeThread");
+               boolean maybeLoadNative = 
("Linux".equalsIgnoreCase(System.getProperty("os.name"))) && 
(NodeStarter.extBuildNumber > 18);
+               Logger.debug(NativeThread.class, "Run init(): should 
loadNative="+maybeLoadNative);
+               if(maybeLoadNative && 
LibraryLoader.loadNative("/freenet/support/io/", "NativeThread")) {
                        NATIVE_PRIORITY_BASE = getLinuxPriority();
                        NATIVE_PRIORITY_RANGE = 20 - NATIVE_PRIORITY_BASE;
                        System.out.println("Using the NativeThread 
implementation (base nice level is "+NATIVE_PRIORITY_BASE+')');
@@ -53,6 +51,7 @@
                        HAS_PLENTY_NICE_LEVELS = NATIVE_PRIORITY_RANGE 
>=JAVA_PRIORITY_RANGE;
                        if(!(HAS_ENOUGH_NICE_LEVELS && HAS_THREE_NICE_LEVELS))
                                System.err.println("WARNING!!! The JVM has been 
niced down to a level which won't allow it to schedule threads properly! LOWER 
THE NICE LEVEL!!");
+                       _loadNative = true;
                } else {
                        // unused anyway
                        NATIVE_PRIORITY_BASE = 0;
@@ -60,6 +59,7 @@
                        HAS_THREE_NICE_LEVELS = true;
                        HAS_ENOUGH_NICE_LEVELS = true;
                        HAS_PLENTY_NICE_LEVELS = true;
+                       _loadNative = false;
                }
                Logger.minor(NativeThread.class, "Run init(): _loadNative = 
"+_loadNative);
        }
@@ -118,7 +118,7 @@
                        /* The user has reniced freenet or we didn't use the 
PacketSender to create the thread
                         * either ways it's bad for us.
                         * 
-                        * Let's diable the renicing as we can't rely on it 
anymore.
+                        * Let's disable the renicing as we can't rely on it 
anymore.
                         */
                        _disabled = true;
                        Logger.error(this, "Freenet has detected it has been 
reniced : THAT'S BAD, DON'T DO IT! Nice level detected statically: 
"+NATIVE_PRIORITY_BASE+" actual nice level: "+realPrio+" on "+this);


Reply via email to