<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://50.77.162.165/mediawiki/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Safe Serialization Under Mutual Suspicion/&quot;Reversing&quot; Evaluation - Revision history</title>
		<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;action=history</link>
		<description>Revision history for this page on the wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.15.5-7</generator>
		<lastBuildDate>Thu, 23 Apr 2026 03:25:49 GMT</lastBuildDate>
		<item>
			<title>Zarutian at 02:39, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=1634&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=1634&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- todo: when wikification of other pages of this paper has been done then fix their links here --~~~~ --&amp;gt;&lt;br /&gt;
As we've seen, we make serializers, unserializers, and other transformers&lt;br /&gt;
like expression simplifiers by composing a recognizer with a builder.&lt;br /&gt;
The interface between the two is the DEBuilder API, explained in [http://www.erights.org/data/serial/jhu-paper/data-e-manual.html Appendix A: The Data-E Manual].&lt;br /&gt;
Since most of the API is a straightforward reflection of the Data-E grammar productions, if you wish, you may safely skip these details and proceed here by example.&lt;br /&gt;
&lt;br /&gt;
== Evaluating Data-E ==&lt;br /&gt;
The semantics of Data-E are defined by the semantics of its evaluation as an &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;#009000&amp;quot;&amp;gt;E&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; program.&lt;br /&gt;
We could unserialize using the full &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;#009000&amp;quot;&amp;gt;E&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; evaluator.&lt;br /&gt;
However, this is inefficient both as an implementation and as an explanation.&lt;br /&gt;
Instead, here is the Data-E evaluator as a builder, implementing exactly this subset of &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;#009000&amp;quot;&amp;gt;E&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;'s semantics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pragma.syntax(&amp;quot;0.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def deSubgraphKit {&lt;br /&gt;
    to makeBuilder(scope) :near {&lt;br /&gt;
&lt;br /&gt;
        # The index of the next temp variable&lt;br /&gt;
&lt;br /&gt;
        var nextTemp := 0&lt;br /&gt;
&lt;br /&gt;
        # The frame of temp variables&lt;br /&gt;
        def temps := [].diverge()&lt;br /&gt;
&lt;br /&gt;
        # The type returned by &amp;amp;quot;internal&amp;amp;quot; productions and passed as arguments to represent&lt;br /&gt;
&lt;br /&gt;
        # built subtrees.&lt;br /&gt;
        def Node := any&lt;br /&gt;
&lt;br /&gt;
        # The type returned by the builder as a whole.&lt;br /&gt;
        def Root := any&lt;br /&gt;
&lt;br /&gt;
        # DEBuilderOf is a parameterized type constructor.&lt;br /&gt;
&lt;br /&gt;
        def deSubgraphBuilder implements DEBuilderOf(Node, Root) {&lt;br /&gt;
            to getNodeType() :near { Node }&lt;br /&gt;
            to getRootType() :near { Root }&lt;br /&gt;
&lt;br /&gt;
            /** Called at the end with the reconstructed root to obtain the value to return. */&lt;br /&gt;
            to buildRoot(root :Node)        :Root  { root }&lt;br /&gt;
&lt;br /&gt;
            /** A literal evaluates to its value. */&lt;br /&gt;
            to buildLiteral(value)          :Node  { value }&lt;br /&gt;
&lt;br /&gt;
            /** A free variable's name is looked up in the scope. */&lt;br /&gt;
            to buildImport(varName :String) :Node  { scope[varName] }&lt;br /&gt;
&lt;br /&gt;
            /** A temporary variable's index is looked up in the temps frame. */&lt;br /&gt;
            to buildIbid(tempIndex :int)    :Node  { temps[tempIndex] }&lt;br /&gt;
&lt;br /&gt;
            /** Perform the  described call. */&lt;br /&gt;
            to buildCall(rec :Node, verb :String, args :Node[]) :Node {&lt;br /&gt;
                # E.call(..) is E's reflective invocation construct. For example, E.call(2, &amp;amp;quot;add&amp;amp;quot;, [3])&lt;br /&gt;
                # performs the same call as 2.add(3).&lt;br /&gt;
                &amp;lt;u&amp;gt;E.call(rec, verb, args)&amp;lt;/u&amp;gt;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Called prior to building the right-hand side of a defexpr, to allocate and bind the&lt;br /&gt;
             * next two temp variables to a promise and its resolver.&lt;br /&gt;
&lt;br /&gt;
             * &lt;br /&gt;
             * @return the index of the temp holding the promise. The temp holding the&lt;br /&gt;
             *               resolver is understood to be this plus one.&lt;br /&gt;
             */&lt;br /&gt;
            to buildPromise() :int {&lt;br /&gt;
                def promIndex := nextTemp&lt;br /&gt;
                nextTemp += 2&lt;br /&gt;
                def [prom,res] := Ref.promise()&lt;br /&gt;
                temps[promIndex] := prom&lt;br /&gt;
                temps[promIndex+1] := res&lt;br /&gt;
                promIndex&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * Called once the right-hand side of a defexpr is built, use the resolver to resolve&lt;br /&gt;
             * the value of the promise.&lt;br /&gt;
             * &lt;br /&gt;
             * @return the value of the right-hand side.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            to buildDefrec(resIndex :int, rValue :Node) :Node {&lt;br /&gt;
                temps[resIndex].resolve(rValue)&lt;br /&gt;
                rValue&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # ... buildDefine is an optimization of buildDefrec for known non-cyclic cases.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    # ... other useful tools &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
As we see, the &amp;lt;tt&amp;gt;E.call(..)&amp;lt;/tt&amp;gt; underlined above is where all the object construction is done.&lt;br /&gt;
All the rest is plumbing to hook the up the references among these objects.&lt;br /&gt;
&lt;br /&gt;
The only extra parameter to the above code, in addition to those specified by the DEBuilder API, is the &amp;lt;tt&amp;gt;scope&amp;lt;/tt&amp;gt; parameter to &amp;lt;tt&amp;gt;makeBuilder(..)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Typically, we will express unserialization-time policy choices using only this hook.&lt;br /&gt;
With a bit of pre-planning at serialization time, this can be a surprisingly powerful hook, and will often prove adequate.&lt;br /&gt;
&lt;br /&gt;
== Unevaluating to Data-E ==&lt;br /&gt;
{| width=&amp;quot;30%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;12&amp;quot; align=&amp;quot;right&amp;quot; bgcolor=&amp;quot;#FFFFE8&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Because the keys of a unscope table may be arbitrary values, including unresolved promises, it needs to be the special kind of map called a &amp;lt;tt&amp;gt;CycleBreaker&amp;lt;/tt&amp;gt;.&lt;br /&gt;
For present purposes, we can ignore this issue.&lt;br /&gt;
|}&lt;br /&gt;
We are now ready for the heart of serialization -- the Data-E subgraph recognizer.&lt;br /&gt;
It has two parameters for expressing policy -- the &amp;lt;span class=&amp;quot;defvar&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;uncallerList&amp;lt;/tt&amp;gt;&amp;lt;/span&amp;gt; and the &amp;lt;span class=&amp;quot;defvar&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;unscopeMap&amp;lt;/tt&amp;gt;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Since we are evaling &amp;amp;quot;in reverse&amp;amp;quot;, we need the inverse of a scope, which we call an &amp;lt;i&amp;gt;unscope&amp;lt;/i&amp;gt;.&lt;br /&gt;
An unscope maps from arbitrary values to a description of the &amp;amp;quot;variable name&amp;amp;quot; presumed to hold that reference.&lt;br /&gt;
In the unscope table passed in as &amp;lt;tt&amp;gt;unscopeMap&amp;lt;/tt&amp;gt;, each description is a normal variable name string, as would be used to look the value up in a scope.&lt;br /&gt;
On each &amp;lt;tt&amp;gt;recognize(..)&amp;lt;/tt&amp;gt;, the &amp;amp;quot;&amp;lt;tt&amp;gt;.diverge()&amp;lt;/tt&amp;gt;&amp;amp;quot; makes a private copy of the &amp;lt;tt&amp;gt;unscopeMap&amp;lt;/tt&amp;gt; we put in the variable &amp;lt;tt&amp;gt;unscope&amp;lt;/tt&amp;gt;, which we use from there.&lt;br /&gt;
This private unscope table gets additional mappings from values to integers representing temporary variable indices.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;uncallerList&amp;lt;/tt&amp;gt; is used to obtain a portrayal of each object, as we explain below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
def makeUnevaler(uncallerList, unscopeMap) :near {&lt;br /&gt;
    def unevaler {&lt;br /&gt;
        to recognize(root, builder) :(def Root := builder.getRootType()) {&lt;br /&gt;
&lt;br /&gt;
            def Node := builder.getNodeType()&lt;br /&gt;
&lt;br /&gt;
            def uncallers := uncallerList.snapshot()&lt;br /&gt;
            def unscope := unscopeMap.diverge()&lt;br /&gt;
&lt;br /&gt;
            # forward declaration &lt;br /&gt;
&lt;br /&gt;
            def generate&lt;br /&gt;
&lt;br /&gt;
            /** traverse an uncall portrayal */&lt;br /&gt;
            def genCall(rec, verb :String, args :any[]) :Node {&lt;br /&gt;
                def recExpr := generate(rec)&lt;br /&gt;
                var argExprs := []&lt;br /&gt;
                for arg in args {&lt;br /&gt;
                    argExprs := argExprs.with(generate(arg))&lt;br /&gt;
                }&lt;br /&gt;
                builder.buildCall(recExpr, verb, argExprs)&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /** When we're past all the variable manipulation. */&lt;br /&gt;
&lt;br /&gt;
            def genObject(obj) :Node {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;12&amp;quot; align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFFFE8&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Below we see another bit of &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;#009000&amp;quot;&amp;gt;E&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; syntax.&lt;br /&gt;
In the pattern-match expression, there is a subexpression on the left of the &amp;amp;quot;&amp;lt;tt&amp;gt;=~&amp;lt;/tt&amp;gt;&amp;amp;quot; operator, like &amp;amp;quot;&amp;lt;tt&amp;gt;obj&amp;lt;/tt&amp;gt;&amp;amp;quot; below, and a sub-pattern on the right.&lt;br /&gt;
The subexpression is evaluated  to a specimen, and the pattern is asked to try matching the specimen.&lt;br /&gt;
If it succeeds, the pattern-match expression returns &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt;, and any bindings defined by the match are available in the successor scope -- here, the body of the &amp;lt;tt class=&amp;quot;keyword&amp;quot;&amp;gt;if&amp;lt;/tt&amp;gt;'s then-part.&lt;br /&gt;
When this pattern is a variable declaration, like &amp;amp;quot;&amp;lt;span class=&amp;quot;defvar&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;tt&amp;gt;  :int&amp;lt;/tt&amp;gt;&amp;amp;quot;, the pattern matches if the specimen is compatible with the declared type (i.e., is successfully coerced by the guard).&lt;br /&gt;
This gives us, in effect, a type-case.&lt;br /&gt;
This last test below is passed by &amp;amp;quot;bare twine&amp;amp;quot;, which for present purposes just means &amp;amp;quot;String&amp;amp;quot;.&lt;br /&gt;
These are all the types that can be represented literally in &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;#009000&amp;quot;&amp;gt;E&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; and in Data-E.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
                if (obj =~ i :int)     { return builder.buildLiteral(i) }&lt;br /&gt;
                if (obj =~ f :float64) { return builder.buildLiteral(f) }&lt;br /&gt;
                if (obj =~ c :char)    { return builder.buildLiteral(c) }&lt;br /&gt;
                if (obj =~ twine :Twine &amp;amp;amp;&amp;amp;amp; twine.isBare()) {&lt;br /&gt;
                    return builder.buildLiteral(twine)&lt;br /&gt;
                }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;12&amp;quot; align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFFFE8&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
To the right of the &amp;amp;quot;&amp;lt;tt&amp;gt;=~&amp;lt;/tt&amp;gt;&amp;amp;quot; below is a list pattern.&lt;br /&gt;
A list pattern is written as a list of subpatterns.&lt;br /&gt;
It matches a specimen list of the same length if and only if each subpattern matches the corresponding element of the specimen list.&lt;br /&gt;
An uncaller should respond to &amp;lt;tt&amp;gt;.optUncall(obj)&amp;lt;/tt&amp;gt; with either null or a list of three elements, so the following tests that the resulting specimen wasn't null, and if it wasn't, binds these three elements to variables named &amp;lt;tt class=&amp;quot;defvar&amp;quot;&amp;gt;rec&amp;lt;/tt&amp;gt;, &amp;lt;tt class=&amp;quot;defvar&amp;quot;&amp;gt;verb&amp;lt;/tt&amp;gt;, and &amp;lt;tt class=&amp;quot;defvar&amp;quot;&amp;gt;args&amp;lt;/tt&amp;gt; [ref destructuring-bind].&lt;br /&gt;
More on the meaning of this uncall-triple &amp;lt;a href=&amp;quot;#uncalling&amp;quot;&amp;gt;below&amp;lt;/a&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
                for uncaller in uncallers {&lt;br /&gt;
                    if (&amp;lt;u&amp;gt;uncaller.optUncall(obj)&amp;lt;/u&amp;gt; =~ [rec, verb, args]) {&lt;br /&gt;
                        return genCall(rec, verb, args)&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                throw(`Can't uneval ${E.toQuote(obj)}`)&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /** Build a use-occurrence of a variable. */&lt;br /&gt;
&lt;br /&gt;
            def genVarUse(varID :(String | int)) :Node {&lt;br /&gt;
                if (varID =~ varName :String) {&lt;br /&gt;
                    builder.buildImport(varName)&lt;br /&gt;
                } else {&lt;br /&gt;
                    builder.buildIbid(varID)&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /**&lt;br /&gt;
             * The internal recursive routine that will traverse the&lt;br /&gt;
             * subgraph and build a Data-E Node while manipulating the&lt;br /&gt;
             * above state.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            # &amp;amp;quot;bind&amp;amp;quot; resolves a forward declaration&lt;br /&gt;
            bind generate(obj) :Node {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;12&amp;quot; align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFFFE8&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
The &amp;amp;quot;&amp;lt;tt&amp;gt;:notNull&amp;lt;/tt&amp;gt;&amp;amp;quot; declaration below accepts any value except null.&lt;br /&gt;
The call &amp;lt;tt&amp;gt;map.fetch(key,func)&amp;lt;/tt&amp;gt; returns the value associated with &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt; if one is found, or &amp;lt;tt&amp;gt;func()&amp;lt;/tt&amp;gt; otherwise.&lt;br /&gt;
The expression &amp;lt;tt&amp;gt;thunk{}&amp;lt;/tt&amp;gt; evaluates to a no argument function that return &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Since the values of the unscope are Strings or ints, we can use &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; to detect whether &amp;lt;tt&amp;gt;obj&amp;lt;/tt&amp;gt; was found.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
                if (unscope.fetch(obj, thunk{}) =~ varID :notNull) {&lt;br /&gt;
                    return genVarUse(varID)&lt;br /&gt;
                }&lt;br /&gt;
                def promIndex := builder.buildPromise()&lt;br /&gt;
                unscope[obj] := promIndex&lt;br /&gt;
                def rValue := genObject(obj)&lt;br /&gt;
                builder.buildDefrec(promIndex+1, rValue)&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            builder.buildRoot(generate(root))&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
During traversal, for every reference a subgraph recognizer already associates with a variable, whether from the original &amp;lt;tt&amp;gt;unscopeMap&amp;lt;/tt&amp;gt; argument or because it has already been traversed, it builds a reference to that variable.&lt;br /&gt;
Otherwise, it first builds a new pair of temporary variables for a promise and its resolver, and associates the promise variable as naming the new reference.&lt;br /&gt;
In that context, it then builds code to generate a reconstruction of that reference.&lt;br /&gt;
Finally, using &amp;lt;tt&amp;gt;defrec&amp;lt;/tt&amp;gt; it builds code to resolve the previously generated promise to the reconstructed value.&lt;br /&gt;
&lt;br /&gt;
== Traversal as Uncalling ==&lt;br /&gt;
{| width=&amp;quot;30%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;12&amp;quot; align=&amp;quot;right&amp;quot; bgcolor=&amp;quot;#FFFFE8&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
The triple returned by an uncaller is very similar in structure and purpose to [http://java.sun.com/j2se/1.4.1/docs/api/java/beans/Statement.html java.beans.Statement] and its role in the serialization performed by the [http://java.sun.com/j2se/1.4.1/docs/api/java/beans/XMLEncoder.html XMLEncoder].&lt;br /&gt;
To be explained in [http://www.erights.org/data/serial/jhu-paper/related.html Related Work].&lt;br /&gt;
&lt;br /&gt;
Should the &amp;lt;tt&amp;gt;uncallerList&amp;lt;/tt&amp;gt; ever need to become long, efficiency would demand a lookup scheme other than linear search, such as the type-based dispatch of [http://java.sun.com/j2se/1.4.1/docs/api/java/beans/PersistenceDelegate.html PersistenceDelegate], to determine which uncallers are applicable.&lt;br /&gt;
We assume here only that any optimization is equivalent to linear search in resolving which uncaller to use when several are applicable.&lt;br /&gt;
|}&lt;br /&gt;
Once again, most of the code above is plumbing, to hook references up correctly.&lt;br /&gt;
The actual traversal step where objects are &amp;amp;quot;taken apart&amp;amp;quot; -- the inverse of the builder's &amp;lt;tt&amp;gt;E.call(..)&amp;lt;/tt&amp;gt; step -- is the underlined call to each &amp;lt;tt&amp;gt;uncaller&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Each &amp;lt;tt&amp;gt;uncaller&amp;lt;/tt&amp;gt; returns either null, indicating a failure to portray the object, or a triple corresponding to the three arguments to &amp;lt;tt&amp;gt;E.call(..)&amp;lt;/tt&amp;gt; -- a receiver, a verb (message name), and a list of arguments.&lt;br /&gt;
Such a triple portrays the object for purpose of reconstruction.&lt;br /&gt;
It says that a reconstruction of the object would be an &amp;lt;tt&amp;gt;E.call(..)&amp;lt;/tt&amp;gt; performed in the reconstructing context using (a reconstruction of) the receiver, the verb, and (reconstructions of) the arguments.&lt;br /&gt;
The &amp;lt;tt&amp;gt;uncallerList&amp;lt;/tt&amp;gt; functions as a search path -- each uncaller is tried until one succeeds or the list is exhausted.&lt;br /&gt;
If none succeed, then the recognition as a whole is terminated with a thrown exception.&lt;br /&gt;
&lt;br /&gt;
The default &amp;lt;tt&amp;gt;uncallerList&amp;lt;/tt&amp;gt; consists of the &amp;lt;tt&amp;gt;minimalUncaller&amp;lt;/tt&amp;gt; shown below and the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;[minimalUncaller, &amp;amp;lt;import&amp;amp;gt;]&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;minimalUncaller&amp;lt;/tt&amp;gt; simply asks an object to provide its own portrayal.&lt;br /&gt;
Our [http://www.erights.org/data/serial/jhu-paper/deconstructing.html#genCounter earlier] &amp;lt;tt&amp;gt;generationCounter&amp;lt;/tt&amp;gt; is an example of an object that overrides &amp;lt;tt&amp;gt;__optUncall()&amp;lt;/tt&amp;gt; to provide its own self portrait.&lt;br /&gt;
We say that such an object is &amp;lt;i&amp;gt;transparent&amp;lt;/i&amp;gt; -- it provides this portrayal to any of its clients. &lt;br /&gt;
The &amp;lt;tt&amp;gt;minimalUncaller&amp;lt;/tt&amp;gt; can only portray transparent objects.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
def minimalUncaller implements Uncaller {&lt;br /&gt;
    to optUncall(obj) :nullOk[__Portrayal] {&lt;br /&gt;
        if (Ref.isNear(obj)) {&lt;br /&gt;
            obj.__optUncall()&lt;br /&gt;
        } else # ... we can ignore the non-Near cases for now&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Other uncallers are for portraying non-transparent objects.&lt;br /&gt;
Some, such as the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt;, are a special category of uncaller called a Loader.&lt;br /&gt;
These also have a &amp;lt;tt&amp;gt;.get(String)&amp;lt;/tt&amp;gt; method that acts as the inverse of their &amp;lt;tt&amp;gt;.optUncall(..)&amp;lt;/tt&amp;gt; method.&lt;br /&gt;
For example, since [http://www.erights.org/javadoc/java/lang/StringBuffer.html &amp;lt;tt&amp;gt;StringBuffer&amp;lt;/tt&amp;gt;] is a [http://www.erights.org/elib/legacy/api-legend.html safe class], it can be imported using the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
? pragma.syntax(&amp;amp;quot;0.8&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
? def makeStringBuffer := &amp;amp;lt;import:java.lang.makeStringBuffer&amp;amp;gt;&lt;br /&gt;
# value: &amp;amp;lt;makeStringBuffer&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
As explained [http://www.erights.org/data/serial/jhu-paper/deconstructing.html#uri-exprs earlier], the above code uses the URI-expression.&lt;br /&gt;
It is just syntactic shorthand for:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
? def makeStringBuffer := import__uriGetter.get(&amp;amp;quot;java.lang.makeStringBuffer&amp;amp;quot;)&lt;br /&gt;
# value: &amp;amp;lt;makeStringBuffer&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
The resulting object is a &amp;lt;i&amp;gt;maker&amp;lt;/i&amp;gt; -- its protocol consists of (the enabled subset of) the public constructors and static methods of the class &amp;lt;tt&amp;gt;StringBuffer&amp;lt;/tt&amp;gt;.&lt;br /&gt;
That's why we name it &amp;lt;tt&amp;gt;makeStringBuffer&amp;lt;/tt&amp;gt; -- it acts mostly as a function for making &amp;lt;tt&amp;gt;StringBuffer&amp;lt;/tt&amp;gt;s.&lt;br /&gt;
&lt;br /&gt;
Going the other way&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
? &amp;amp;lt;import&amp;amp;gt;.optUncall(makeStringBuffer)&lt;br /&gt;
# value: [&amp;amp;lt;import&amp;amp;gt;, &amp;amp;quot;get&amp;amp;quot;, [&amp;amp;quot;java.lang.makeStringBuffer&amp;amp;quot;]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
So we see that the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt; is in effect saying&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;In order to reconstruct &amp;lt;tt&amp;gt;makeStringBuffer&amp;lt;/tt&amp;gt;, send the &amp;amp;quot;&amp;lt;tt&amp;gt;.get&amp;lt;/tt&amp;gt;&amp;amp;quot; message to me, the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt;, with the string &amp;lt;tt&amp;gt;&amp;amp;quot;&amp;lt;span class=&amp;quot;litchars&amp;quot;&amp;gt;java.lang.makeStringBuffer&amp;lt;/span&amp;gt;&amp;amp;quot;&amp;lt;/tt&amp;gt; as argument.&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Loaders will normally follow this pattern, varying only the contents of the string argument.&lt;br /&gt;
&lt;br /&gt;
Putting all this together, and remembering that &amp;lt;tt&amp;gt;deSrcKit&amp;lt;/tt&amp;gt; will depict using the URI-expression shorthand when it can, we have&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
? def makeSurgeon := &amp;amp;lt;elib:serial.makeSurgeon&amp;amp;gt;&lt;br /&gt;
? def surgeon := makeSurgeon.withSrcKit(&amp;amp;quot;de: &amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
? surgeon.serialize(makeStringBuffer)&lt;br /&gt;
# value: &amp;amp;quot;de: &amp;amp;lt;import:java.lang.makeStringBuffer&amp;amp;gt;&amp;amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;makeStringBuffer&amp;lt;/tt&amp;gt; reconstructed by these means isn't necessarily equivalent to the original.&lt;br /&gt;
Rather, &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt; embodies the policy choice that the reconstruction should be whatever object is importable &amp;lt;i&amp;gt;by the same name&amp;lt;/i&amp;gt; in the reconstruction context.&lt;br /&gt;
If this context represents a different version of the system, in which the object imported by this name acts differently, this policy choice would have us live with the consequences, including the possible failure to reconstruct.&lt;br /&gt;
This is often the right engineering decision, and corresponds closely to the decisions built into other serialization systems, such as JOSS's handling of classes [ref Shapiro].&lt;br /&gt;
&lt;br /&gt;
We now have all the basic ingredients needed to explain and address the security issues raised by serialization.&lt;br /&gt;
&lt;br /&gt;
= Corresponding Concepts in Conventional Serialization =&lt;br /&gt;
In our terminology, like Data-E, JOSS also solicits from each object not its depiction, but its portrayal in terms of other objects.&lt;br /&gt;
Mallet can only claim to have a reference to Alice by producing a reference to Alice, which he can only do if he actually has such a reference.&lt;br /&gt;
If an object simply implements &amp;lt;tt&amp;gt;Serializable&amp;lt;/tt&amp;gt; and does nothing else, then its internal implementation doubles as its self-portrait.&lt;br /&gt;
However, an object can offer a &amp;lt;i&amp;gt;nominated replacement&amp;lt;/i&amp;gt; -- another object to be serialized in its stead, whose portrayal thereby serves as the original object's self-portrait.&lt;br /&gt;
The serializer may use the nominated replacement. &lt;br /&gt;
Or it may appoint its own replacement, by overriding the [http://www.erights.org/javadoc/java/io/ObjectOutputStream.html#replaceObject(java.lang.Object) &amp;lt;tt&amp;gt;replaceObject(..)&amp;lt;/tt&amp;gt;] method of &amp;lt;tt&amp;gt;ObjectOutputStream&amp;lt;/tt&amp;gt;, just as our serializer can appoint its own portrayal by adding an uncaller to the uncaller list.&lt;br /&gt;
The resulting depiction is a literal picture only of the graph of appointed replacements.&lt;br /&gt;
&lt;br /&gt;
JOSS provides similar flexibility during unserialization, with objects offering a &amp;lt;i&amp;gt;nominated resolution&amp;lt;/i&amp;gt; to take their place in the unserialized graph, with the unserializer potentially substituting an &amp;lt;i&amp;gt;appointed resolution&amp;lt;/i&amp;gt;.&lt;br /&gt;
Given cyclic graphs and the non-redirectability of Java references, this &amp;lt;i&amp;gt;cannot&amp;lt;/i&amp;gt; be implemented correctly in Java.&lt;br /&gt;
Using promises, we can easily implement the equivalent correctly in &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;#009000&amp;quot;&amp;gt;E&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; for Data-E (and likewise in any other object-capability language with delayed references), but we haven't yet needed this flexibility during unserialization.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is wikified from [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:39:11 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian:&amp;#32;last paragraph</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3455&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3455&amp;oldid=prev</guid>
			<description>&lt;p&gt;last paragraph&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:36, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 315:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 315:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Or it may appoint its own replacement, by overriding the [http://www.erights.org/javadoc/java/io/ObjectOutputStream.html#replaceObject(java.lang.Object) &amp;lt;tt&amp;gt;replaceObject(..)&amp;lt;/tt&amp;gt;] method of &amp;lt;tt&amp;gt;ObjectOutputStream&amp;lt;/tt&amp;gt;, just as our serializer can appoint its own portrayal by adding an uncaller to the uncaller list.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Or it may appoint its own replacement, by overriding the [http://www.erights.org/javadoc/java/io/ObjectOutputStream.html#replaceObject(java.lang.Object) &amp;lt;tt&amp;gt;replaceObject(..)&amp;lt;/tt&amp;gt;] method of &amp;lt;tt&amp;gt;ObjectOutputStream&amp;lt;/tt&amp;gt;, just as our serializer can appoint its own portrayal by adding an uncaller to the uncaller list.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The resulting depiction is a literal picture only of the graph of appointed replacements.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The resulting depiction is a literal picture only of the graph of appointed replacements.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;JOSS provides similar flexibility during unserialization, with objects offering a &amp;lt;i&amp;gt;nominated resolution&amp;lt;/i&amp;gt; to take their place in the unserialized graph, with the unserializer potentially substituting an &amp;lt;i&amp;gt;appointed resolution&amp;lt;/i&amp;gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Given cyclic graphs and the non-redirectability of Java references, this &amp;lt;i&amp;gt;cannot&amp;lt;/i&amp;gt; be implemented correctly in Java.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Using promises, we can easily implement the equivalent correctly in &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;#009000&amp;quot;&amp;gt;E&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; for Data-E (and likewise in any other object-capability language with delayed references), but we haven't yet needed this flexibility during unserialization.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:50 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:36:53 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian at 02:34, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3454&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3454&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:34, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 308:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 308:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Corresponding Concepts in Conventional Serialization =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Corresponding Concepts in Conventional Serialization =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;In our terminology, like Data-E, JOSS also solicits from each object not its depiction, but its portrayal in terms of other objects.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Mallet can only claim to have a reference to Alice by producing a reference to Alice, which he can only do if he actually has such a reference.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;If an object simply implements &amp;lt;tt&amp;gt;Serializable&amp;lt;/tt&amp;gt; and does nothing else, then its internal implementation doubles as its self-portrait.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;However, an object can offer a &amp;lt;i&amp;gt;nominated replacement&amp;lt;/i&amp;gt; -- another object to be serialized in its stead, whose portrayal thereby serves as the original object's self-portrait.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The serializer may use the nominated replacement. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Or it may appoint its own replacement, by overriding the [http://www.erights.org/javadoc/java/io/ObjectOutputStream.html#replaceObject(java.lang.Object) &amp;lt;tt&amp;gt;replaceObject(..)&amp;lt;/tt&amp;gt;] method of &amp;lt;tt&amp;gt;ObjectOutputStream&amp;lt;/tt&amp;gt;, just as our serializer can appoint its own portrayal by adding an uncaller to the uncaller list.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The resulting depiction is a literal picture only of the graph of appointed replacements.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:50 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:34:23 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian at 02:30, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3453&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3453&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:30, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 304:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 304:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If this context represents a different version of the system, in which the object imported by this name acts differently, this policy choice would have us live with the consequences, including the possible failure to reconstruct.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If this context represents a different version of the system, in which the object imported by this name acts differently, this policy choice would have us live with the consequences, including the possible failure to reconstruct.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is often the right engineering decision, and corresponds closely to the decisions built into other serialization systems, such as JOSS's handling of classes [ref Shapiro].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is often the right engineering decision, and corresponds closely to the decisions built into other serialization systems, such as JOSS's handling of classes [ref Shapiro].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;We now have all the basic ingredients needed to explain and address the security issues raised by serialization.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;= Corresponding Concepts in Conventional Serialization =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:50 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:30:13 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian at 02:28, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3452&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3452&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:28, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 300:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 300:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# value: &amp;amp;quot;de: &amp;amp;lt;import:java.lang.makeStringBuffer&amp;amp;gt;&amp;amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# value: &amp;amp;quot;de: &amp;amp;lt;import:java.lang.makeStringBuffer&amp;amp;gt;&amp;amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Note that the &amp;lt;tt&amp;gt;makeStringBuffer&amp;lt;/tt&amp;gt; reconstructed by these means isn't necessarily equivalent to the original.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Rather, &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt; embodies the policy choice that the reconstruction should be whatever object is importable &amp;lt;i&amp;gt;by the same name&amp;lt;/i&amp;gt; in the reconstruction context.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;If this context represents a different version of the system, in which the object imported by this name acts differently, this policy choice would have us live with the consequences, including the possible failure to reconstruct.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;This is often the right engineering decision, and corresponds closely to the decisions built into other serialization systems, such as JOSS's handling of classes [ref Shapiro].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:50 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:28:54 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian:&amp;#32;removing spans</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3451&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3451&amp;oldid=prev</guid>
			<description>&lt;p&gt;removing spans&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:26, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 294:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 294:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Putting all this together, and remembering that &amp;lt;tt&amp;gt;deSrcKit&amp;lt;/tt&amp;gt; will depict using the URI-expression shorthand when it can, we have&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Putting all this together, and remembering that &amp;lt;tt&amp;gt;deSrcKit&amp;lt;/tt&amp;gt; will depict using the URI-expression shorthand when it can, we have&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;&lt;/del&gt;? &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;&lt;/del&gt;def&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;defvar&amp;quot;&amp;gt;&lt;/del&gt;makeSurgeon&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt; &lt;/del&gt;:= &amp;amp;lt;elib:serial.makeSurgeon&amp;amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;? def makeSurgeon := &amp;amp;lt;elib:serial.makeSurgeon&amp;amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;&lt;/del&gt;? &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;&lt;/del&gt;def&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;defvar&amp;quot;&amp;gt;&lt;/del&gt;surgeon&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt; &lt;/del&gt;:= makeSurgeon.withSrcKit(&amp;amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;span class=&amp;quot;litchars&amp;quot;&amp;gt;&lt;/del&gt;de: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&lt;/del&gt;&amp;amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;? def surgeon := makeSurgeon.withSrcKit(&amp;amp;quot;de: &amp;amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;&lt;/del&gt;? &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&lt;/del&gt;surgeon.serialize(makeStringBuffer)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;? surgeon.serialize(makeStringBuffer)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;&lt;/del&gt;# value: &amp;amp;quot;de: &amp;amp;lt;import:java.lang.makeStringBuffer&amp;amp;gt;&amp;amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# value: &amp;amp;quot;de: &amp;amp;lt;import:java.lang.makeStringBuffer&amp;amp;gt;&amp;amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;codE&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;code&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:50 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:26:28 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian at 02:24, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3450&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3450&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:24, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 293:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 293:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Putting all this together, and remembering that &amp;lt;tt&amp;gt;deSrcKit&amp;lt;/tt&amp;gt; will depict using the URI-expression shorthand when it can, we have&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Putting all this together, and remembering that &amp;lt;tt&amp;gt;deSrcKit&amp;lt;/tt&amp;gt; will depict using the URI-expression shorthand when it can, we have&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;? &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;defvar&amp;quot;&amp;gt;makeSurgeon&amp;lt;/span&amp;gt; := &amp;amp;lt;elib:serial.makeSurgeon&amp;amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;? &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;defvar&amp;quot;&amp;gt;surgeon&amp;lt;/span&amp;gt; := makeSurgeon.withSrcKit(&amp;amp;quot;&amp;lt;span class=&amp;quot;litchars&amp;quot;&amp;gt;de: &amp;lt;/span&amp;gt;&amp;amp;quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;? &amp;lt;/span&amp;gt;surgeon.serialize(makeStringBuffer)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;span class=&amp;quot;stdout&amp;quot;&amp;gt;# value: &amp;amp;quot;de: &amp;amp;lt;import:java.lang.makeStringBuffer&amp;amp;gt;&amp;amp;quot;&amp;lt;/span&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&amp;gt;&amp;lt;/codE&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:51 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:24:39 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian at 02:22, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3449&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3449&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:22, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 292:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 292:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Loaders will normally follow this pattern, varying only the contents of the string argument.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Loaders will normally follow this pattern, varying only the contents of the string argument.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Putting all this together, and remembering that &amp;lt;tt&amp;gt;deSrcKit&amp;lt;/tt&amp;gt; will depict using the URI-expression shorthand when it can, we have&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:51 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:22:53 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian at 02:19, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3448&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3448&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:19, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 290:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 290:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;i&amp;gt;In order to reconstruct &amp;lt;tt&amp;gt;makeStringBuffer&amp;lt;/tt&amp;gt;, send the &amp;amp;quot;&amp;lt;tt&amp;gt;.get&amp;lt;/tt&amp;gt;&amp;amp;quot; message to me, the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt;, with the string &amp;lt;tt&amp;gt;&amp;amp;quot;&amp;lt;span class=&amp;quot;litchars&amp;quot;&amp;gt;java.lang.makeStringBuffer&amp;lt;/span&amp;gt;&amp;amp;quot;&amp;lt;/tt&amp;gt; as argument.&amp;lt;/i&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;i&amp;gt;In order to reconstruct &amp;lt;tt&amp;gt;makeStringBuffer&amp;lt;/tt&amp;gt;, send the &amp;amp;quot;&amp;lt;tt&amp;gt;.get&amp;lt;/tt&amp;gt;&amp;amp;quot; message to me, the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt;, with the string &amp;lt;tt&amp;gt;&amp;amp;quot;&amp;lt;span class=&amp;quot;litchars&amp;quot;&amp;gt;java.lang.makeStringBuffer&amp;lt;/span&amp;gt;&amp;amp;quot;&amp;lt;/tt&amp;gt; as argument.&amp;lt;/i&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Loaders will normally follow this pattern, varying only the contents of the string argument.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:51 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:19:02 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
		<item>
			<title>Zarutian at 02:17, 30 January 2008</title>
			<link>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3447&amp;oldid=prev</link>
			<guid>http://50.77.162.165/mediawiki/index.php?title=Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation&amp;diff=3447&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:17, 30 January 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 287:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 287:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;So we see that the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt; is in effect saying&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;So we see that the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt; is in effect saying&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;blockquote&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;i&amp;gt;In order to reconstruct &amp;lt;tt&amp;gt;makeStringBuffer&amp;lt;/tt&amp;gt;, send the &amp;amp;quot;&amp;lt;tt&amp;gt;.get&amp;lt;/tt&amp;gt;&amp;amp;quot; message to me, the &amp;lt;tt&amp;gt;import__uriGetter&amp;lt;/tt&amp;gt;, with the string &amp;lt;tt&amp;gt;&amp;amp;quot;&amp;lt;span class=&amp;quot;litchars&amp;quot;&amp;gt;java.lang.makeStringBuffer&amp;lt;/span&amp;gt;&amp;amp;quot;&amp;lt;/tt&amp;gt; as argument.&amp;lt;/i&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/blockquote&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is part wikified from the original [http://www.erights.org/data/serial/jhu-paper/recog-n-build.html Part 2: &amp;quot;Reversing&amp;quot; Evaluation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-23 03:25:51 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 30 Jan 2008 02:17:50 GMT</pubDate>			<dc:creator>Zarutian</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Safe_Serialization_Under_Mutual_Suspicion/%22Reversing%22_Evaluation</comments>		</item>
	</channel>
</rss>