\e$B%k$G$O!"0J2<$N$h$&$J4X?t$,Dj5A$5$l$F$$$^$9!#\e(B
@defun riece-make-identity prefix &optional server
-\e$BBg0hI=5-$r:n$j=P$7$^$9!#\e(Bserver \e$B$,>JN,$5$l$?>l9g$K$O!"\e(Briece-find-server-name \e$B$r;H$C$F<hF@$7$?%5!<%PL>$r;H$$$^$9\e(B
+\e$BBg0hI=5-$r:n@.$7$^$9!#\e(Bserver \e$B$,>JN,$5$l$?>l9g$K$O!"\e(B
+riece-find-server-name \e$B$r;H$C$F<hF@$7$?%5!<%PL>$r;H$$$^$9\e(B
@end defun
@defun riece-identity-prefix identity
@defun riece-identity-server identity
\e$BBg0hI=5-$+$i%5!<%P$r=|$/ItJ,$rJV$7$^$9\e(B
@end defun
+
+@defun riece-identity-canonicalize-prefix prefix
+\e$BBg0hI=5-$N%5!<%PL>$r=|$/ItJ,$r@55,2=$7$^$9!#$9$J$o$A!"\e(B
+@var{prefix} \e$B$rA4$F>.J8;z$KD>$7$?>e$G!"\e(BRFC2812 2.2 \e$B$K$J$i$$!"\e(B
+@samp{[]\~} \e$B$N$=$l$>$l$NJ8;z$r\e(B @samp{@{@}|^} \e$B$KCV$-49$($^$9!#\e(B
+@end defun
-@defun riece-identity-equal a b
+@defun riece-identity-equal ident1 ident2
\e$BFs$D$NBg0hI=5-$,F1Ey$+D4$Y$^$9!#\e(B
@end defun
-@defun riece-identity-equal-safe a b
+@defun riece-identity-equal-safe ident1 ident2
@code{riece-identity-equal} \e$B$H0l=o$G$9$,!"0z?t$H$7$FM?$($i$l$?J8;zNs$K%5!<\e(B
\e$B%PL>$,IU2C$5$l$F$$$J$1$l$P!"IU2C$7$F$+$i8!::$r9T$$$^$9!#\e(B
@end defun
+@defun riece-identity-equal-no-server ident1 ident2
+\e$BFs$D$NBg0hI=5-$N%5!<%P0J30$NItJ,$,F1Ey$+D4$Y$^$9!#\e(B
+@end defun
+
+@defun riece-identity-member elt list
+\e$BBg0hI=5-\e(B @var{elt} \e$B$,\e(B @var{list} \e$B$K4^$^$l$k$+8!::$7$^$9!#\e(B
+@end defun
+
+@defun riece-identity-member-safe elt list
+@code{riece-identity-member} \e$B$H0l=o$G$9$,!"0z?t$K%5!<%PL>$,IU2C$5$l$F$$\e(B
+\e$B$J$1$l$P!"IU2C$7$F$+$i8!::$r9T$$$^$9!#\e(B
+@end defun
+
+@defun riece-identity-member-no-server elt list
+@code{riece-identity-member} \e$B$H0l=o$G$9$,!"Bg0hI=5-$N%5!<%P0J30$NItJ,$@\e(B
+\e$B$1$r8!::$7$^$9!#\e(B
+@end defun
+
@subsection Channel and user management
IRC \e$B$N%A%c%s%M%k$H%f!<%6$O4pK\E*$KC1$J$k%Y%/%?!<$H$7$FI=8=$5$l$F$$$^$9!#\e(B
JOIN \e$B$d\e(B PART \e$B$H$$$C$?FCJL$JA`:n$O!"$3$l$i$N%*%V%8%'%/%H$K$O7k$S$D$1$^$;\e(B