[Webfunds-commits] html/guide params_classes.png payment_classes.png token_classes.png Makefile token.html token_money.sda token_classes.jpg

Ian Grigg iang@cypherpunks.ai
Mon, 2 Apr 2001 00:24:02 -0400 (AST)


iang        01/04/02 00:24:02

  Modified:    guide    Makefile token.html token_money.sda
  Added:       guide    params_classes.png payment_classes.png
                        token_classes.png
  Removed:     guide    token_classes.jpg
  Log:
  updated status of token project

Revision  Changes    Path
1.9       +3 -1      html/guide/Makefile

Index: Makefile
===================================================================
RCS file: /home/webfunds/cvsroot/html/guide/Makefile,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Makefile	2000/12/05 20:50:09	1.8
+++ Makefile	2001/04/02 04:24:00	1.9
@@ -7,7 +7,9 @@
 	cvs.a \
 	design.a \
 	token.a \
-	token_classes.a \
+	payment_classes.o \
+	token_classes.o \
+	params_classes.o \
 	joincvs.a \
 	wfwin32.a \
 	access.a \



1.4       +116 -25   html/guide/token.html

Index: token.html
===================================================================
RCS file: /home/webfunds/cvsroot/html/guide/token.html,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- token.html	2000/12/05 20:50:10	1.3
+++ token.html	2001/04/02 04:24:00	1.4
@@ -11,7 +11,7 @@
 to WebFunds.
 </p>
 
-<h2> Choices </h2>
+<h2> Conceptual Choices </h2>
 
 There are fundamentally two choices:
 
@@ -23,7 +23,7 @@
 
 Each is discussed below.
 
-<h2> Separate Wallet within WebFunds </h2>
+<h2> 1. Separate Wallet within WebFunds </h2>
 
 <p>
 The most obvious way to add token money
@@ -95,8 +95,10 @@
 
 And, of course, all the associated server side code.
 
-<h2> SOX Request </h2>
+<h2> 2. SOX Request </h2>
 
+<h3> Introduction </h3>
+
 <p>
 A more subtle way to add tokens is to expand SOX.   The most
 important reason for this is that it already provides 99% of
@@ -108,8 +110,9 @@
 <p>
 Components required include
 </p>
+
 <ul><li>
-    Withdrawal Request (this is implemented currently as
+    Withdrawal Request (this is implemented currently as DepositRequest)
   </li><li>
     wallet storage method for coins (not implemented)
   </li><li>
@@ -232,32 +235,115 @@
 desirable to impose idempotency on the protocol, in that
 each request can be repeated as an expected event.
 
-<h3> Structure of Token Money within SOX </h3>
+<h2> 3. Structure of Token Money within SOX </h2>
 
+<h3> Payments </h3>
 <p>
 To facilitate the addition of other close forms of
 payment such as Token money to SOX, payments now have
 the following structure:
 </p>
 
-<img alt="Token Clases UML" SRC="token_classes.jpg" width=500 height=500>
+<img alt="Payment Clases UML" SRC="payment_classes.png" width=500>
 <p align="center">
-<b>Figure 1.  Token Classes (UML)</b>
+<b>Figure 1.  Payment Classes (UML)</b>
 
 <p>
 In order to add a token money method,
-an extended version of <code>Token.java</code>
-needs to be written.  The only one implemented at the time
-of writing is <code>RandomToken.java</code>
-so simply copy that and start hacking.
+an extended version of <code>webfunds.token.BaseToken</code>
+needs to be written within the token package.
+(At the time of writing, only
+<code>webfunds.token.chaum</code>
+and
+<code>webfunds.token.random</code>
+have been partially written.)
 </p>
 
 <p>
-Additionally, <code>PaymentFactory.java</code>
+Additionally, <code>webfunds.sox.PaymentFactory</code>
 specifies various factory methods for converting
 and processing.  Read and modify that to suit.
 </p>
 
+<h3> Tokens </h3>
+
+<p>
+Now let us turn our attention to the
+<code>webfunds.token</code>
+package.
+The
+<code>webfunds.sox.TokenPayment</code>
+class
+is basically a container for
+<code>BaseTokens</code>,
+which is the core class in the tokens package.
+That latter class is an abstract class, further refined with
+these four abstract class:
+</p>
+
+<ul><li>
+    <code>TokenBuilder</code>
+    is the class used for the client to initially create
+    a <i>proto-token</i>.
+  </li><li>
+    <code>TokenSigner</code>
+    is received by the Mint and is signed according to the
+    protocol expressed within.
+  </li><li>
+    <code>TokenSpender</code>
+    is sent back to the client as a fully signed token, ready
+    for valuable exchange.
+  </li><li>
+    <code>TokenDead</code>
+    is that which results when the token is spent and is
+    recorded as a spent token, for the purposes of closure
+    of the state machine.
+</li></ul>
+
+<img alt="Token Clases UML" SRC="token_classes.png" width=500>
+<p align="center">
+<b>Figure 2.  Token Classes (UML)</b>
+
+<p>
+Alongside the above set is a separate set of paramaters classes:
+</p>
+
+<ul><li>
+    <code>AbstractParams</code>
+    is a superclass for an encodable Paramaters class
+    (not extended by a concrete token implementation).
+  </li><li>
+    <code>AbstractPrivateParams</code>
+    is extended from the above <code>AbstractParams</code> in order
+    to sign tokens.
+  </li><li>
+    <code>AbstractPublicParams</code>
+    is extended from <code>AbstractParams</code> and
+    is made available to the client somehow so that the each
+    phase can be conducted.
+  </li><li>
+    <code>ParamsPair</code>
+    is the class used by the server-side Mint to create
+    the necessary keys or mathematical entities for one
+    token series (that is, one contract, value, series intersection).
+    It has methods to extract the private and public parts that
+    are the concrete <code>AbstractPrivateParams</code> and
+    <code>AbstractPublicParams</code> objects.
+</li></ul>
+
+<img alt="Paramater Clases UML" SRC="params_classes.png" width=500>
+<p align="center">
+<b>Figure 3.  Paramater Classes (UML)</b>
+
+
+<p>
+A concrete token implementation will extend from each of the above
+Token Classes and the Paramater Classes,
+thus resulting in seven classes.
+It in envisaged that each implementation
+will be packaged as <code>webfunds.token.<i>name</i></code>.
+</p>
+
 <h3> WebFunds Withdrawal </h3>
 
 <p>
@@ -268,33 +354,35 @@
 <h3> Depositing User Coins </h3>
 
 <p>
-Once the withdrawal is done, a payment is returned that
-carries the coins in an array of <code>Token</code> objects.
+Once the withdrawal is done, a <code>TokenPayment</code> is returned that
+carries the tokens in an array of <code>BaseToken</code> objects.
 That payment can now be treated like any other payment,
 and sent or deposited.
 </p>
 
 <p>
-At the moment, that's all you can do as there is not
-coin database.
+At the moment, that's all you can do as there is no
+client-side token database.
 </p>
 
-<h2> Server-Side </h2>
+<h2> 4. Server-Side </h2>
 
 For any method there will be the following server side
 components, all of which combined make up a Mint.
 
 <ul><li>
     A double-spending database.  This is currently
-    implemented using existing DBs and indexing off
-    the applicable <code>webfunds.sox.Token.getUniqueId</code>
+    implemented using existing DBs.  The unique identifier
+    of each token is acquired from
+    the applicable <code>webfunds.token.TokenSigner.getUniqueId</code>
     method.
   </li><li>
     The coin production unit.  This is the module that
     signs the accepted proto-token, and handles the various
     state aspects of the blinded withdrawal protocol.
     This is all implemented with calls into the
-    <code>Token</code> class.
+    <code>webfunds.token.TokenSigner</code>
+    class.
 </li></ul>
 
 <p>
@@ -302,10 +390,10 @@
 up of accounts and permitting token money to be accessed.
 </p>
 
-<h2> Project Status </h2>
+<h2> 5. Project Status </h2>
 
 <p>
-As of 05 December 2000, status is:
+As of 01 April 2001, status is:
 </p>
 
 <blockquote>
@@ -314,16 +402,19 @@
     <dd>Written, evolving to suite other parts.
         Lacks coin DB.
     <dt><b>Frontend</b>
-    <dd>Written, untested.
+    <dd>Written and tested for earlier generations.
     <dt><b>Backend</b>
-    <dd>Not touched as yet.
+    <dd>written and tested for earlier generations.
     <dt><b>Tokens</b>
-    <dd>Only Random
+    <dd>Currently in 3rd generation model,
+        with most of Chaum done, params for Random done.
 </dl>
 </blockquote>
 
 <p>
 This project advances on an any-idle-sunday basis.
+We are currently importing our 3rd generation model
+of token layout.
 </p>
 
 </body></html>



1.1                  html/guide/params_classes.png

Index: params_classes.png
===================================================================
PNG


^#&8q 0ߟ~}'+.0ALЁ'WJf'.V޳|?_mNʼXZ3X-||^Mm~/%#՚&!}0ALЁG&hI=a¯Q~erg'(*s$<>Az~!=~fz<l=@"zj
zn;,G&JS.VD'-YDMsT2OP]L9_A/eh9'|y2WPEmmTEg*<6O

?Z<s[(U/ϓ}c
jc'P>h*d/[NL(o>]Et}.o{A3nUЩ
5#c]g)o]v^}	j|
j|&h'/+wY]~ZׇTuޟEtbOFf!JUЅ:"Jkrѵ5Ośk	R>7ݜo
:;'Ï'?ܙkETAtOx>`<<G踂*ٝ::\lTPWp4x858bU~b6zT*(}zdȠUT|xBOVe?mW'iꄯ_~%	:`\;O[+][O8AZZ}'OǼ`=ljok%}
d=Lm0h:}Cgw[ͻBn7#1f'ĘW3~B;g5XHS=\zNp]Փw.zϯy=~~z){OC#z>:>;視s+Õ~~ƁP=ԢzNp:uTT(w32:6nʨ꡺Ko؋Z=h|#Pf,Kg2߀qzz)wtz:-ɨGt]:!t&P3LL+gҙT@Vϐ3Kg2ƹgҙ~.w*z/Vt&PCҙtZ@TOJRhD9u+գt*գt:*գtr.Z<W:___ӿWeU.Ne%- N~|ß^B)#E0L\@@,7u׼4[@E]x,rգtnj
Uɢ*Q=J'
Q:ٵs.[:)TG/{4{z
O=4c-G=<S2vjb寞Jg~^럮{U@<V`K-PY=,Y*_@٪̬Y7Kukp婞br,U3TO9j?r6խVOnjPحyzF:MUj^=JgY*_Cy9
stz2_;%iҙ-kh:]=Oc֟1
ZKg=yb.?|YZ6X賴L7덨{w_?9WM5ύ*/?ׯw`_Tש~ZM䴒?DwZ?鼆;X,7SCSr'yQ-74b0jZ>Xú1	\r?=||l]>6z%6זM9*XS2F9s-gv,LCb\{;$֛gG<pL#?|QM'm=d{H#TשS=\z.x—Gu1t<[MEJ).R:\tHpᢾK'r6r5t.\6/%Lzç
.t\:ػ:6~>[~xͧ҉oo$zÇOtֿ7_ֿC_Y~2zQt⿻s;ߺ{ށZ:TtHp"EJ).R:\t!s^Өߵ>JP:vFR@ߥ}wS=Nu3yIZ:d?t
yěƮOCuNV3ßM-^Kg2i\~t&o.W:G
_LFtYLzcWOOQAO3;ptS:"5ݔΤ7G鈜Q:~߲CO#rALz<H3X^:&z<MH3)x.IS<vKgș<Τ[3jLFKg﴾A3vLKg鄦z+7D+IJGtҙtitDN_*I_,:
VJGtҙDsOɑdu%=O#r>VO3b/3+xΤ"PtDNi"u#6,੟:-JGDt<SyS:EbSiʹV
SYn R]jsRym񍽮ȣ
MStJX!fQydݪ:Ͻc{[fh83
[mO9w4X=S}JGZM^0(KSS.uTztDN^O9ytD	WR[ytDO]CSS>rg|z<KMbS\lN|*#S	nTT`ꔌ皓)X~uS='-'t&6g<n-TO-ON	kq"gozjO)98H񟮗{s<:F΢)/g锏FP='wZ²Nhn&իpdN2`LWOIyJd4UVOə:e>zlK'C٢Ͷ8*VOɖ:e>~)2zħ.P=wKXU74z'u^Z=U@*gϐٓ!u1fRzSf?2FL˞tp<<K:Ү*0LJ^u3)Y=ϕ)+n&T5u!_7y_~0.3d/|iD\L,O?ͼZRT]3pt
w<\Ilyh;]s7ڃWQi{3Ѕ6u3w:ڳYZ:tJp"EJ).R:w}}
׫
b7+yXƱ9)gԵYO?[30}g^9Iss/65mσjG|}t9<7c)ŬW	ZSbs{G03H6WzSF[:Q7z	DQ`3`~W%wios\'ݫx6Y8c?F7ۻugo#b\^'x]2v{mS^:l.Ƈz6gtR~8?<{d禆8uHp"EJ).R:\tHpᢿֿ$Z#5NWM~C;4&wPJ;@ir(M
"w:rsiI%t zZ w13S9 tF%z*;1BglK輁
;ۄΫ0A輐cNH輖)F!KWBYB!w'Wc8kU
#0Չ;^;Äwm<^lLAM95ˤ=qf*l)tA\lf0>g5sU3<캼6SQe8:k#t.
XdͯGR9\CD)CGDO1sGPI4`*=)FCuP#th'wMqUa #th
7;B9Z>w=sGѳq"zfNˡ봳DϤi9t N|z̝7xi><rGK,žrgYKj]Ǥk*&w:#}6󘫏;tۜϟGU"XSVrY{at;/	^~Wܛ4'Kۢ8tN9C6c%Xf6/zҫyCzEz"=+9;Dgi7wF
Q?&IL^=y'yG;CI'}/t.?#}8tz!<}F=j(wmNFoN!5t~ym=MHyR`S?w~_BG%3RTΝaBGS˫g詙;N{g詖;ciKg
9I~*;iҧcҹ#t(i4zN#q:5v=r1
̝C'[~䲹eC/~Cy=;`}gz	YΤr-q^׿y9y*!OE.Z
I]چ
e"gv/?<g!z=o*>-pkY5SaO|[.#"x̎ϟ oN_WτZv9 V	61j#D-(bs7*S_BSio^[l.i)<8 z鲬γ_VBNeg?>CHe`NQg߇gO}־ylw/ƫrOdJp%	tdU{{Ϙluzx[/<1r"'eSSjO=3
	(%tP:@QB(J
55Yu	cHf8
NlU+\+X\e=@٥Aӄi͞4;:@1Bg}m%tBfL4;y{hsp:14;:t8 +WN@%A
m4;y7tjxihs8EKC'z764;1tDuhHsB'b8A}
mT	ާ?
}=!,V}عhvnzQQۈi2LpߋB'ﮩa/ٹ-cCzK)mlY.Xp|l)֖e;v8iv.{EoͼXDde@3T$6~aq5@]Έ֋>ivR:D8<}4&#9Ⱥ`	Sak빧
ۜYbOqH9s)9k	tW
x}X~i1{lñ%Fڜ;v{H)N|x4;:E
}hv"	mMqqB'`Bk4;AB.94HlWh͡YB'-
>t94N>toޖЅCGC4;K}N[Vpq؄tNǡx#&NmkN5ttA4tmsC]Nm;
/t9еB'0.b
a^^t:ohs8F!N/gגћ,t{ur'=Sj0L-wy_xAVOo%ilXK݄mN\/ȝMlv	`橜.fC0#tؙ_qpvx|B?7qY{aGF$k/ebܙLSKڜ,yy58YbBt:6ƅ<]	j:^ǛpdH{BVxK??ZjNsz_T#9<LL, imѩS9,sM!w^	Srgf9t^&w^	W㽢;9w4:÷9Q.[nwFC'0FIrgfE=D4x]UF-N`s,i#qxy|\er.{yi+tϯS9Y9wPxi(tϬS9y6wJH'3wkvZ	@s:X6e;$`
6:#MKO/	;VE0wF:Ȫ:#90N)=٩:üQ]Xrgmu:
H_-+:9SNNN	/i\k^"+8wjN˓jN_YB6GdHN\:w"[ZQS"t
/~ۏk?e[_:6ab 65fHЧy<tZnsZMi۩ҝN;[T⨹tQ]4;φND
n<2Zof7kv:-ix05hmnajYnSq3)4a`;Ȯ<:k=[iױ<Ny`
N's-a#I|]_	s#o7f($
6s͔D;TY~8<lIy];Ky͗a#΅NjZX26PߢSղ>JT|A /SrOw:Nm2܉?
{"'6G|lm,cwd{v{])~svKG
+I<dKdʘ߳/~FכﴳϘ՞X >$$ÅI&Al^XOvNj>_Gc<E{*D
˔8eG'.N>=>P:@QB(J
C_:᜹`4=&MtAhqN-"u4=MTa4Zա	%ZZŁ:nxB-0>{#Pv0F=\xٸ*0w`W??7'xceh^itBm0iwAzѡ:F84:4BM0MIav0m:<݁:tOCRڝ'uF|1@Ezzѡ/EC4:HUuF~iw<;ס'NP^nht;
BzaH4uF|סu݁GuhFs:Këhw!zᅴ;-ZNCs4:;
B^zڢс;
B.zс%w,:Bk.߁:4A{;p^4:݁;:TсLCMH݁k:Tс;p^:4:p;
Yz*M4:с,iu(J|Ru(Giw^B4:u(A@^it
vu^GdNL.94H:/N4H+ht;4E3>Pvvuj4:@]ZFQ___)}?=ƕL{S;TFi4NԦF?y\eNԢF)˽8&%i*:C&^(rZbZxZ`_>0ږ];1e!e|:fW%׬l^β^RZ[x8lR䚨؜C
P^gN9ه][#ȏւv!壨Ulm\ݡ$4:-H߉j҅-Ls[<ך(ZݡN4:={HO^䉎ą5cP^om*X~znzǹP^c-/.^_{vwmgtįWyiN<M+N]=zy_nZ^៭tYյ}v:*<QsH#iuѩro&>Kڮ2^S;
N4:\:

kwz9M]Hh^N_4:\yLy'w^NGt9ܧauRit:!#N:I4:ڝ~uitzQ;tJvGzNΡ
kiw٥i9Ty'w^gF}N;`/:4:s:6x^ȝ	itZˡ}:qN:LCG"GG8htˡS|{hwZ/N4:ΟO	N:I`\3<N:FrFvAou4:
r:7̝[^G sxiu4:q:ʝ^Gs@3$F)Ng<ڝ^httlFS׻zN;΁C:hw*zQi.NCS[zN#|hxƠݩFN}:`y:8xN%
hts:u<qbFu4:9OG;ehtr:
tJSF.sO;OTt@ΣFu4:9MEzNFrY:];ܔ22{w2КxǓxNO\s!7вMi0z53s9q.˝3\\Ph|n&.ɥ^Gs֝-+9v'{C&mlƃ~E޼}:'$Θ_Qy۶ݱu4:
2x3 Tqv@=-rk ars
oǜFq͹czr-sf]+ڔq9\`=â?59{/9x펫z?%)j~g|@KR
`9

c


1.1                  html/guide/payment_classes.png

Index: payment_classes.png
===================================================================
PNG


jV
/.|VgiFO<ƼZ}n/-:wr\Y>U]U-En{WU;վf=~>4ԨZܲyXv5}U\Mbekug{KV>|YVw(Wf_xݥ^x_+;b>=?/Y^c3lzfGK4+0ϵnV>&T[/-h;PkWnyrO1-{—L+&z7ȠWKSW`tsrO5Oizp>z@QfrTG+bLGޖjqS2?槽酟l^yx
MŅ_|[kn-.m,XTW?oqޞ~%QEn/o YV~*nͪyVoEz&;6~6U~^h~)$_tik=;ߍ1{~A,|#·לk-Ovxs+uWzr,>%,ЩMg]z~dGeGo0[
Nݏu_xP]8G^vu{"foԸprykOK+5-vv7;rn/{;DrͽpkbݧY9pDXO*3-֬\֫M7ŭoo_VRRRj98=m
]Z٥|S͹7i룧>|7L.7h?ˑ7=κ/,rk
Vy<ٷxE>w1uyj.jN,ǥϔ;i|?a
'9>>Lex("[_|k7߯\Ps3u?.u?.u?~b8xq[jG+LaoxkGQο*V}XCaj.8渏uo͇GݏݺkFp`-v
5Zxaxo4f:s3!-}Zε8r#Qّ>·\ftYe-,ܿi뼦'Ӊt
tc̠EǥǥǥǥǥǥPלkz|ꞛ|Ex8ћE^SW|G݇zoGGt)ZxGϞ]㟹ow#u_֢q	<aՆ/K7[
|@݇_a/VykwO_z
`[kYto_^\uf`}oKwM}M=jN\U_͕
đzt	*5s)u?.u?mu!(?8Z7VG,\D7H5oі9~myzuQom)}SoYW?ݱޙVX]'}!:6*G_ qBNN,؆q)Ntg5r}W.cIc e7
YVޫL/aco6!y>#ѷS93_>%};GC
e"/ioL|Zd+qqqqqqqT\%ث\U܍L7~>oYRϏ͍.PD^zUz~k~s@Z͍{>õw-~
pknoxՋ}9{"vo^վu޲m=wRRgzQޒ'u?2u;wi_]jѺs[Qgj.@.;KthF~u
q}9?_ǥǥǥz?d/-~u?.u/)Vd?^W3u?.u˟'ǥǥǥǥO]?<[*cw5>{CN|G٢kO'FU>mO3܃,ʏ9Rp~$Mj(5qqZ\0GqwuM}?<G- 
߳V_Ti	)
Bįz*)m |^/0=MQx'u_+
ŞBwM9/tFǥǥǥǥǥǥǥǥs[/qgiwSR%{|&><>@uHx!9-8;wTX筎o7a3sw?>u_Rv[o}u#_|oRU}y7We}YA Wh!o~uAE??\7T?$rJ_sL\ۀzUF-mzҸuڋn抌[Qhкc5܂ܦkcĺc
܃{fcЈu/?{9(u(/5Jݓ!ECԽp_4Dݳi7rѕlst5:{
lju?K
Zjk.Wy+LWv6Ac߾VhonZ?Vcк,R97vsFa2h_ZPRRRRRRRRRR=hˇ{{oB?nk\wH3G޹?jC#p`Tv7XK+yx8buHmB̧,ܿO
S#a8~ή]$l`Co	\CCX9u۬R`lYׄt4rzD55O|1Is)a~7ؿ?4p¦<hYe2{0#;,!k+74W+<l/{R8/D#OI/<\Cnv'N;=cU7kl
k.YUͤj&cՙV.t=a;a0a0a0a	{֏?F>v|%/{ş#/֙		a\{H?N؟CV?G)/nc&"'F؟,pW˘{m6m6n4JgG9~SF	ټ[gH~f_şLA/P/1DϛW,ϑoa
$HG	قWE		l;8?mw7'aTC	HVIIV	_C؟ƺOm~6SXzϟOlt	M$p=}64~wSdq:@O	`a	#\ڟ!B80IT*wG_K+yx8bua?P!qG}XU'"G|[r=~m{cY!\8\5j4`gMf_ְ:զ7y\PQWy,zݞZy
OGDiKiZ:"UӟTC5xV
dاGGC!jzLAF>6~rS{dJ^0UҰUۚn(-5JOc@˘,FSh
X`yRYOKGf]`un
q'UJgq̕OI#1<B:'4K;kx#b盶#lfZvuF#L#ƋQ3s,ҾFZ=]Zm|-~lU6
s=]0`77Ř?\,g`4WrOqanG*Wr;(̴F\K9~acW?=w\!\-WOKw=iR=/ ՟K."žI0aOr啯¤M\];ꀰEWr~0!} y\y9ž洐i;IÀ=mq
=-qžH4G	=OZNM)žg|÷@(1a3;^rraϓ#=Gp=￟.Bj{{{]c"#ݥN|iLp*ϟO;m:rr#Dcs]	{4Gb!4cQ(_-
羸&U9}
/Y9j'aOӟ	prO~kbDpr|Bz`'7pZD^# mYnw_8W}&.a8#9Y~bxz. mvpž7)ĭ'Dػ^83?%j>ηiՎ>{.<0=cH͍b@s(Ç_-fQ@Ya+þd1Syzs͌*g<	{{{{{?|jMX	{gp	]݄=r|/_S?\x*[{=+>R3=1T?	{jg[ꐈܖĄM9k{V7n5{JGf=H{w_?_سv\i_س nzi =Ei~aT_?-|S~?-|2̺9,{|>=xYS(_`k't]	ѵ픤R%Ckۜ	q5uot'a?scԾ87hG,GT~~8
{)a?c	R(ڌI?A~:aQE-o\Awo}ϚY¾[ba'1OLF̳JwESCCSIwBSOw"z@wESCpIHp=Gp=Gp=\
{D˗N	{{ΧOwu^=}ʄp OcH@F?Mm,KS&]AUyNg鿋?)DQx]ȉvB/r#iEϟ?uX>aoP&I4ZH0,m[8a0a0a0a0a0Z~SҗFsmd߶}}Gp=Gp=Gp=Gp=Gp}~W
~cpq"0	ÜHp>I{Nч0ϷDIy x}ҩa9-hsUNv\΂hWBO4>3M#?7	Hn	5Ϸi[}
G.qtC7aq_6oPwg1
a0a0ar>"=BhfE/rP,O]6DщqZHz]$7H/MG?GW-r?
VyT؅yi1һӋSKADaIs,a_k놛ki+Kx5~zceXU ڸ+CT*sv^tHWI+C0mV;nY~][u}u)GcFkfQ3
;<Kدm'>`!5_!P֬";a?:$T?a?:? a0a0a0a0a0a0a0a<p	~y=0a\ǏKm||%/{
W3a	1Mba=Csa2 [ $k	ӈz"Y嘷ay_	M.	{6H_kcy#_7GlߴI؟- 7D֌MmRG.w{
	f
iT68ybiF?Crۨ
((MpPNJ
)9$G̷GXe!>b,;eBtqi~hدrC=<qSl9!O`S]=Oraϭ@؟L}( q=G؟* qz
	{y,aqz;	8A#is^wpamNPO!!RIYA}ۮw!ϝ?t0a0ai"쿾?ËRM}Ju
{:׆'iϩ;
(~;/R:5~Ctr#?/ ڕ@Ǯ
08 .
L
tض[!OSk{oӶ\nGE=98.x^y"0Mg m\σlZ}#txO7ʧo?c;vxpx")7w^)gYž7)muѷa/
5Z8saOVhw0w&W$i_{?+iڎR[®B⽗{=.ͮڑlKNQo+g}_ا9_My !蕶1>: I>#wL.Zm/Ӵ+5<$yF5k$OFk؈rEr d_}z[';l6v+5?}QܩK
ٹ~JVp#?mw_[=gwŸ6[YHS
pwݴv~֋NEC
_G8w-֫jZ-թΚ,;/w&?s
G>]6mM;Ŏhv~*gs>
7)T\!wOr/a?
#y]0aO4/"a8ži؟Np=Ұ{aaIܔ	{Z?Ržvy\)t'|W /sO%y粭~^Xy%iΑ4~OF\3ҹvFp=N5?Kp=-0Y#a8žϻ9W0aB6žh@Nž'M-<&EՄ=-<CcA#a8#a8žƿ7O	{s2ȥ=0a0aϏ?.E~t a8#a8#a8#a8#a8ž}}}ks!iqx@V&yw䔾fχ=xH4,kqGK{=Icr	tx4}|Xš99<>0<11ÁžW瑣Szi̗'R3flEnnZOӬ~ӝLᗶ0ѐY
VzxG{vsL.yw(9 GⷅBa
5s+q9L'¿#a8#a8#9Sx&,駗gqz1Ns(ϚLWKubNs.wMDDp=]kǬcW\ϦAgGžnM~/^]_LXtŸ|++uaH
,>rc|\![Q 3O7ޥ\"\ṣ{1aF幛sҟʓ{]L3*{)iO~x?e(]^(a3q.	{T~Ɣi>fF>&uÝ=Gp=Gp=Gp=Gp=Gp=Gp=Gp=Gp=Gp=EZ:{{g?~L|u	cFgGb3{y*o8/ԁd	~aO>5Fh{=oӾgE#1Cؓ쁽'k#C#_سn#
=ngԺ߹{6EyOEgE./::UžmP	_SHOtfleHؓN 	_Sέ=/YT,'!}Tiw{y8=rOͽ/I^#_سR}˄/)np_{͐{d	Yg	_S}Sz|ayAžeKm[ǡg;up/i4տ'O~t[#KGw]	5깔ޛD؏TTa'iK	AUCp=8#?:w}ES#j"tNأU?a?S=7$`O󸚰-n >=G؏Taaϓ!B)~
A~DR}ʩށEZÉR}[{5~BwN2'%a8¾gm^=GwK'Gp}z
=GA'$;ʄ}z"¾7R==Gwy;j{TO%a'a8¾R=AZjH0a0aVz.2kެXEp=Gp=Gp=Gp=Gp=Gp=\=4E%Z~ґ{{{{>\X<9a?4§?}C8a?OxCNt"M#rxt~5^<=X֩Y{j8=v/;J̗	PNaƙ2B1ҁG\.WDZncZ
㚯N'=Q4ZMi>2_3Z)a?¾6AC
o[TaRjiW˰۴:DEJ*cEaadUҧoMM^89
9س]
)#oگP
.;#
XY{N_7ɞvO/п|gD5/:pGǬ/mjlkY${NVyEnw=
.ӣwu|H4f1sJ
{^z 3,ɾ7it%(ל?c#/gǕ+̇E}'SiڸYm!7ڧ3@̇dߧ>Y6lLaq".F}v
O({}*g4u?6]\đ)XO\0`§V\³9x`C8Sg?1iȋ?|SJ%
˦i݋D@x BVNs>7J(G8G
zKcfG.#773tn,[ݿ-t:V@FLөWƠɾү
rNz;7XBar#W:
 ?O$wR׬+K2¶+|0,WKXoLO7wr[{B81~ѕCszݐw]
C%{&?;;e1kfH[lWv.]͒΅k-kܭ=ѭo۴ȅREg%Ǽ-ް#WM/7M].W&uziOY;Ԟ8UMI/"p4>=s=
={أdf=o!@${h2`MOgI
iQdgmu^{IX@/R=0ʑy#
2ܦrs:2paNl,q^Cf͚:ξɦ?HbswIT(F9~U*\Z̋Zsޅ~XUaF-Ͽ=Ю99}>g~쭧ӣM\{EMRB=5Y,䎳ȟ-/ad.::Vp#lxe!O/snJa+4˽ɖ1J'R>S8d@LI
5~zm}.|4m/%Z
oL~k	PWԥF=pHg:	dWفߓe;#;
WȺ{"{3&~${`13^Zdl#HI#g#%FY& kE${^>ץX7x_5X!k/ҥ"=!'3] %ҥ>Ȓ'}ut7N5.fIC~+M6I@Ld=4;Idf"#׳*VodGi֟E~${2&&'Z\nK_d\$m⏶i=EVG#GH04SGq;X'di%F$cR=GH0@>a -gW$WXQ?WygG;V7I0M҃dz^My 7ՠdӬ${L_CI04~f=[_~C>3:$ӟE>}72&a:ʧW=tE?B;^II	9=@
${x#o9QH1hחdMX%Ë@
z&dzd$${xD<`+=L#;n=L!Cdz &I.8d/&5${hgE2=p"へ${hId
$Bʗ${hN/H:98HI


1.1                  html/guide/token_classes.png

Index: token_classes.png
===================================================================
PNG


nFE՝USCx"{^SOix*:tåv֣eGߧS>Zş?/Jk[TzJ=]^R7nµțqN_Ly=b.Q1zS]xpцEtZDފMt]w'cI%+ޭ^]sE7;ܪYa[SS7cNwzzJV0J
RY'{j7O
2$B7Եq{=KFt@ViQtw.B7M"t$M<ܸ&OAv|b{^'l9>FYv4*GSzco}:?wnOn/sy=6P?wԦ~x?YcУ==W2
O%
7R*pW;?&o^t{/L?߅߶
Uᗸe_GWswEVԀm`K}F̓~&zjPGy1@S	74e6IwnߢQ]]ξxu.lTc7M4O4ߙ`2G~ZgysfA<AM4OD<AM4mO<uF޷Z4$6#}wb]wvgCƐYmx
L+Uhv't$o0
9͹.޻GbR䟫^ֈ'h"x&	'h"x&	'h"ix}LOdgPdx[{0A<GR$䱿yxys0M+X'_vܶγO3ӵOX.m?U.|lg:I(~;zOhZJ^K!e4f(Bb<5
&#e2OJKΦ)st1er;~HيʦS$!e(:Sb[)+4&k0R&i}fHK~O˦ɯǺBjp<-sAtg
I0u`'SШ^v'OnʬhBH
v8rxH
edžTxLvNv
!/ܻCBj@9cDHu5sG:TxbտFRil0RmiT
nd22'ttt=.M0]Ej^?
&8iH?ˑdmBjx­3OPӤ~Bx^_|}kvoit<a:4OD<AM4OD<A?z翇`\̛z{KpK(Ium|wd2l⮹q}QذIFF3M*jaE]mh[9:39(IZ;_acܮ:*@Y)>/7Y-)-	vD#kkj^o	4dKOC'u޺f9(愧-lbi3r~wf!|2!RAX%S=n>'.;y8M.07CHf.0c
LD[=Joa=:n
fKkh˜*vғ`8{ozooLZNSs[thM7X#N4OD<AM4OD<AM???'30S-|}VF)kyy
O
s%ʳ3TcAzz*,2aׇg݊8
0~h.SCuR6iGԐ_,w6"sͩF"G%Y0}"I"=ՐT'Y<k
/CY(B$)u'YSDM͘"C$)U{s妅ę%C$)%ӱe]u#=EBj߲6L.AFzh:Mw֙E@zˤ)jޖߚ4C$B~5I2Q:HRbT4fo<$[ً7d{"Iel(f/"X#C$M)j
Z&C$viΥS I9JOM6GhaI'=-V4;&t<ILLQKnܪ8I-f"+ec$lzZh.*VIjvbZ{,9L$IvM;~O,<Y>IvHLQ;lc}2ԱtZ$=-<tv:MRӧm>[ZjA(bIjabf"[]⹖IR8Wחڰxnu,&NOfnEnr31y;==Sm'Q&>,Ge),#={hHA_F}~G7ôg跔[ْIEcx
+
q_>L#͋bZBfƨt$Rv@27*ޮiFVfs )sՓ$D
-ZKae;,z>^nﺑ$YfSi)̪
"
ԱN\w߮T~O&B$T2'<x
*RqvRoUh=x\i)-*mLLwĺL
uZ:[z$bJry%|t\!S|oGtd%C%-]“H>owՍ)Uu^3¾Q1ފ-ܭ*GhiyCZiG(

&iᤧR䦿pY4F/"ͤnHOrt57o%fMZ)18ғ'&.;IOM;#S) =e잛BŤ&=IO)[هN_T[Dz77BklEygShܴ˔NG:=ovM+/sdH=sSh̆T0&=]M3mk˺Wn"1`ctl;+nQJOnZi;eiankwEnZri';mMK&&lexnZ\Z8F2[sniܴvbڧ|bvln
.oZG/5sX&iܴs
|biܴ0pY>=-LLoCR)BF/ur&uZ5=-=bnf?Jo-VM{3!c˺ziܴUbxS4!*Xz;7mPdX+=͝B'X-&Mtg5Ӭië9rq=/NYsSݶWDGsYswOo<=Mz7=͝*&3Z&MOM15l}i&f8pbOMF&te8r 7Sk[?F
cE(uNܘEcޣn[^M"M
˼ 47E/	2OvëEX@St${׻A	<a'_o=YKxsW<LLe^=yMׅqf!:%‚<3!ZN2at9it_6Z{Z
~o}vzx8_\ӇzN_oa³H7{{$n$44XrrxW7f^Tcx$Ga;KS~~ؿꢧqr^˙+Dܴ̎#R'3FQM
9*'`Vț,8^t9a
]BEv	mIQ9r?<Vk	3p]NmXls
rW.HT	a"TN̏E$Ű@;Oa%h5h		%Dxڭ0)*'Wd7̰Ly
XF%>3eni.¼0[.)IT4C쨟`S7on{'1jO0	]LwP]BX8ccQ9'e盌NQZlЖ%S?*'@
Nf44;w1IP9-j&-a
-'L	
Q6uC7u9)œ@&tq'}OZ`	$;Etܡ	fQ9ACM-p2w~ATNA7/Lr&
OP?*'<BN↧v0*q'perB
:`bmOQ?a*'f2N~BgTN㹞pZS7O	"5č+n񞨟n0<Q?)*'$Q3
ӆ(Z~B#TN9Iq(OPGCMqC(~"*'&qXOPA14ppOx	L&pc8NO}P?x~B*}1dN'SPiGLsaG,~v(aQOCP?FfX7<UZ?;rwĀ(,OCP;rZCMfqc87	*Q3SnqprZeq8A'TNKf
O~RfB4mQ9imqt6Dj0jO6Q?mins0G|N<nx&&P$Q?-iJLb	B->;꧅Q9͇	w/iITN3fNE4P9́;ǎCVB*	0Դ
So|G{~i|ⳣ2O~i0	6G4`bq:r9'"mCOP9ji
TN
#KPTnoȐgRh3iNĞW$ҡ(`~KuaK)oGYI;nNתrZ9 3F~\\FB%#Y%Vfd(l7BX]+\Qymې[䁊l]m,IONʤ|'[դrZd^uR:織U$.KfwgvzVJbUx6n[[~WT7Y,u8~	,.E@#o!qw$2^eft7aX۪Iy^z|[o퍰.qlQ&L#'RP4%kMIe<
&o{̶淊efMKZa;+Zxia#1*!^X	`l؜16Lb޻=P:cӔK~|jg{