# ----------------------------------------------------------------------------- # Unicode::Japanese # Unicode::Japanese::PurePerl # ----------------------------------------------------------------------------- # $Id: Japanese.pm,v 1.66 2004/01/16 11:16:41 hio Exp $ # ----------------------------------------------------------------------------- package Unicode::Japanese::PurePerl; # methods of Unicode::Japanese::PurePerl are # below ones of Unicode::Japanese. # ----------------------------------------------------------------------------- # Unicode::Japanese # ----------------------------------------------------------------------------- package Unicode::Japanese; use strict; use vars qw($VERSION $PurePerl $xs_loaderror); $VERSION = '0.19'; # `use bytes' and `use Encode' if on perl-5.8.0 or later. my $evalerr_bak = $@; my $diehook_bak = $SIG{__DIE__}; local($SIG{__DIE__}) = 'DEFAULT'; $] >= 5.008 ? eval 'use bytes;use Encode;' : undef $@; defined($diehook_bak) and $SIG{__DIE__} = $diehook_bak; $@ && die $@; $@ = $evalerr_bak; # ----------------------------------------------------------------------------- # import # sub import { my $pkg = shift; my @na; foreach(@_) { $_ eq 'PurePerl' and $PurePerl=1, next; if( $_ eq 'no_I18N_Japanese' ) { $^H &= ~0x0f00_0000; package Unicode::Japanese::PurePerl; $^H &= ~0x0f00_0000; package Unicode::Japanese; next; } push(@na,$_); } if( @na ) { #use Carp; #croak("invalid parameter (".join(',',@na).")"); } } # ----------------------------------------------------------------------------- # DESTROY # sub DESTROY { } # ----------------------------------------------------------------------------- # load_xs. # loading xs-subs. # this method is called from new (through new=>_init_table=>load_xs) # sub load_xs { #print STDERR "load_xs\n"; if( $PurePerl ) { #print STDERR "PurePerl mode\n"; $xs_loaderror = 'disabled'; return; } #print STDERR "XS mode\n"; my $use_xs; LoadXS: { #print STDERR "* * bootstrap...\n"; eval q { use strict; require DynaLoader; use vars qw(@ISA); @ISA = qw(DynaLoader); local($SIG{__DIE__}) = 'DEFAULT'; Unicode::Japanese->bootstrap($VERSION); }; #print STDERR "* * try done.\n"; #undef @ISA; if( $@ ) { #print STDERR "failed.\n"; #print STDERR "$@\n"; $use_xs = 0; $xs_loaderror = $@; undef $@; last LoadXS; } #print STDERR "succeeded.\n"; $use_xs = 1; eval q { #print STDERR "over riding _s2u,_u2s\n"; do_memmap(); #print STDERR "memmap done\n"; END{ do_memunmap(); } #print STDERR "binding xsubs done.\n"; }; if( $@ ) { #print STDERR "error on last part of load XS.\n"; $xs_loaderror = $@; CORE::die($@); } #print STDERR "done.\n"; } if( $@ ) { $xs_loaderror = $@; CORE::die("Cannot Load Unicode::Japanese either XS nor PurePerl\n$@"); } if( !$use_xs ) { #print STDERR "no xs.\n"; eval q { sub do_memmap($){} sub do_memunmap($){} }; } $xs_loaderror = '' if( !defined($xs_loaderror) ); #print STDERR "load_xs done.\n"; } # ----------------------------------------------------------------------------- # Unicode::Japanese->new(); # ----------------------------------------------------------------------------- # $unijp = Unicode::Japanese->new([$str,[$icode]]); # sub new { my $pkg = shift; my $this = {}; if( defined($pkg) ) { bless $this, $pkg; $this->_init_table; }else { bless $this; $this->_init_table; } @_ and $this->set(@_); $this; } # ----------------------------------------------------------------------------- # _got_undefined_subroutine # die with message 'undefiend subroutine'. # sub _got_undefined_subroutine { my $subname = pop; CORE::die "Undefined subroutine \&$subname called.\n"; } # ----------------------------------------------------------------------------- # AUTOLOAD # AUTOLOAD of Unicode::Japanese. # imports PurePerl methods. # AUTOLOAD { # load pure perl subs. use vars qw($AUTOLOAD); my ($pkg,$subname) = $AUTOLOAD =~ /^(.*)::(\w+)$/ or got_undefined_subroutine($AUTOLOAD); no strict 'refs'; my $ppsubname = "$pkg\:\:PurePerl\:\:$subname"; my $sub = \&$ppsubname; *$AUTOLOAD = $sub; goto &$sub; } # ----------------------------------------------------------------------------- # Unicode::Japanese::PurePerl # ----------------------------------------------------------------------------- package Unicode::Japanese::PurePerl; use vars qw(%CHARCODE %ESC %RE); use vars qw(@J2S @S2J @S2E @E2S @U2T %T2U %S2U %U2S); %CHARCODE = ( UNDEF_EUC => "\xa2\xae", UNDEF_SJIS => "\x81\xac", UNDEF_JIS => "\xa2\xf7", UNDEF_UNICODE => "\x20\x20", ); %ESC = ( JIS_0208 => "\e\$B", JIS_0212 => "\e\$(D", ASC => "\e\(B", KANA => "\e\(I", E_JSKY_START => "\e\$", E_JSKY_END => "\x0f", ); %RE = ( ASCII => '[\x00-\x7f]', EUC_0212 => '\x8f[\xa1-\xfe][\xa1-\xfe]', EUC_C => '[\xa1-\xfe][\xa1-\xfe]', EUC_KANA => '\x8e[\xa1-\xdf]', JIS_0208 => '\e\$\@|\e\$B|\e&\@\e\$B', JIS_0212 => "\e" . '\$\(D', JIS_ASC => "\e" . '\([BJ]', JIS_KANA => "\e" . '\(I', SJIS_DBCS => '[\x81-\x9f\xe0-\xef\xfa-\xfc][\x40-\x7e\x80-\xfc]', SJIS_KANA => '[\xa1-\xdf]', UTF8 => '[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5}', BOM2_BE => '\xfe\xff', BOM2_LE => '\xff\xfe', BOM4_BE => '\x00\x00\xfe\xff', BOM4_LE => '\xff\xfe\x00\x00', UTF32_BE => '\x00[\x00-\x10][\x00-\xff]{2}', UTF32_LE => '[\x00-\xff]{2}[\x00-\x10]\x00', E_IMODEv1 => '\xf8[\x9f-\xfc]|\xf9[\x40-\x49\x72-\x7e\x80-\xb0]', E_IMODEv2 => '\xf9[\xb1-\xfc]', E_IMODE => '\xf8[\x9f-\xfc]|\xf9[\x40-\x49\x72-\x7e\x80-\xfc]', E_JSKY1 => '[EFGOPQ]', E_JSKY1v1 => '[EFG]', E_JSKY1v2 => '[OPQ]', E_JSKY2 => '[\!-z]', E_DOTI => '\xf0[\x40-\x7e\x80-\xfc]|\xf1[\x40-\x7e\x80-\xd6]|\xf2[\x40-\x7e\x80-\xab\xb0-\xd5\xdf-\xfc]|\xf3[\x40-\x7e\x80-\xfa]|\xf4[\x40-\x4f\x80\x84-\x8a\x8c-\x8e\x90\x94-\x96\x98-\x9c\xa0-\xa4\xa8-\xaf\xb4\xb5\xbc-\xbe\xc4\xc5\xc8\xcc]', E_JSKY_START => quotemeta($ESC{E_JSKY_START}), E_JSKY_END => quotemeta($ESC{E_JSKY_END}), ); $RE{E_JSKY} = $RE{E_JSKY_START} . $RE{E_JSKY1} . $RE{E_JSKY2} . '+' . $RE{E_JSKY_END}; $RE{E_JSKYv1} = $RE{E_JSKY_START} . $RE{E_JSKY1v1} . $RE{E_JSKY2} . '+' . $RE{E_JSKY_END}; $RE{E_JSKYv2} = $RE{E_JSKY_START} . $RE{E_JSKY1v2} . $RE{E_JSKY2} . '+' . $RE{E_JSKY_END}; use vars qw($s2u_table $u2s_table); use vars qw($ei2u1 $ei2u2 $ed2u $ej2u1 $ej2u2); use vars qw($eu2i1 $eu2i2 $eu2d $eu2j1 $eu2j2); use vars qw(%_h2zNum %_z2hNum %_h2zAlpha %_z2hAlpha %_h2zSym %_z2hSym %_h2zKanaK %_z2hKanaK %_h2zKanaD %_z2hKanaD %_hira2kata %_kata2hira); use vars qw($FH $TABLE $HEADLEN $PROGLEN); # ----------------------------------------------------------------------------- # AUTOLOAD # AUTOLOAD of Unicode::Japanese::PurePerl. # load PurePerl methods from embeded data. # AUTOLOAD { use strict; use vars qw($AUTOLOAD); #print STDERR "AUTOLOAD... $AUTOLOAD\n"; my $save = $@; my @BAK = @_; my $subname = $AUTOLOAD; $subname =~ s/^Unicode\:\:Japanese\:\:(?:PurePerl\:\:)?//; #print "subs..\n",join("\n",keys %$TABLE,''); # check if(!defined($TABLE->{$subname}{offset})) { _init_table(); if( !defined($TABLE->{$subname}{offset}) ) { if( substr($AUTOLOAD,-9) eq '::DESTROY' ) { { no strict; *$AUTOLOAD = sub {}; } $@ = $save; @_ = @BAK; goto &$AUTOLOAD; } CORE::die "Undefined subroutine \&$AUTOLOAD called.\n"; } } if($TABLE->{$subname}{offset} == -1) { CORE::die "Double loaded \&$AUTOLOAD. It has some error.\n"; } seek($FH, $PROGLEN + $HEADLEN + $TABLE->{$subname}{offset}, 0) or die "Can't seek $subname. [$!]\n"; my $sub; read($FH, $sub, $TABLE->{$subname}{length}) or die "Can't read $subname. [$!]\n"; if( $]>=5.008 ) { $sub = 'use bytes;'.$sub; } CORE::eval($sub); if ($@) { CORE::die $@; } $DB::sub = $AUTOLOAD; # Now debugger know where we are. # evaled $TABLE->{$subname}{offset} = -1; $@ = $save; @_ = @BAK; goto &$AUTOLOAD; } # ----------------------------------------------------------------------------- # Unicode::Japanese::PurePerl->new() # sub new { goto &Unicode::Japanese::new; } # ----------------------------------------------------------------------------- # DESTROY # sub DESTROY { } # ----------------------------------------------------------------------------- # gensym # sub gensym { package Unicode::Japanese::Symbol; no strict; $genpkg = "Unicode::Japanese::Symbol::"; $genseq = 0; my $name = "GEN" . $genseq++; my $ref = \*{$genpkg . $name}; delete $$genpkg{$name}; $ref; } # ----------------------------------------------------------------------------- # _init_table # sub _init_table { if(!defined($HEADLEN)) { $FH = gensym; my $file = "Unicode/Japanese.pm"; OPEN: { foreach my $path (@INC) { my $mypath = $path; $mypath =~ s#/$##; if (-f "$mypath/$file") { open($FH,"$mypath/$file") || CORE::die; binmode($FH); last OPEN; } } CORE::die "Can't find Japanese.pm in \@INC\n"; } local($/) = "\n"; my $line; while($line = <$FH>) { last if($line =~ m/^__DATA__/); } $PROGLEN = tell($FH); read($FH, $HEADLEN, 4) or die "Can't read table. [$!]\n"; $HEADLEN = unpack('N', $HEADLEN); read($FH, $TABLE, $HEADLEN) or die "Can't seek table. [$!]\n"; $TABLE = eval $TABLE; if($@) { die "Internal Error. [$@]\n"; } if(!defined($TABLE)) { die "Internal Error.\n"; } $HEADLEN += 4; # load xs. Unicode::Japanese::load_xs(); } } # ----------------------------------------------------------------------------- # _getFile # load embeded file data. # sub _getFile { my $this = shift; my $file = shift; exists($TABLE->{$file}) or die "no such file [$file]\n"; #print STDERR "_getFile($file, $TABLE->{$file}{offset}, $TABLE->{$file}{length})\n"; seek($FH, $PROGLEN + $HEADLEN + $TABLE->{$file}{offset}, 0) or die "Can't seek $file. [$!]\n"; my $data; read($FH, $data, $TABLE->{$file}{length}) or die "Can't read $file. [$!]\n"; $data; } # ----------------------------------------------------------------------------- # use_I18N_Japanese # copy from I18N::Japanese in jperl-5.5.3 # sub use_I18N_Japanese { shift; if( @_ ) { my $bits = 0; foreach( @_ ) { $bits |= 0x1000000 if $_ eq 're'; $bits |= 0x2000000 if $_ eq 'tr'; $bits |= 0x4000000 if $_ eq 'format'; $bits |= 0x8000000 if $_ eq 'string'; } $^H |= $bits; }else { $^H |= 0x0f00_0000; } } # ----------------------------------------------------------------------------- # no_I18N_Japanese # copy from I18N::Japanese in jperl-5.5.3 # sub no_I18N_Japanese { shift; if( @_ ) { my $bits = 0; foreach( @_ ) { $bits |= 0x1000000 if $_ eq 're'; $bits |= 0x2000000 if $_ eq 'tr'; $bits |= 0x4000000 if $_ eq 'format'; $bits |= 0x8000000 if $_ eq 'string'; } $^H &= ~$bits; }else { $^H &= ~0x0f00_0000; } } 1; =head1 NAME Unicode::Japanese - Japanese Character Encoding Handler =head1 SYNOPSIS use Unicode::Japanese; # convert utf8 -> sjis print Unicode::Japanese->new($str)->sjis; # convert sjis -> utf8 print Unicode::Japanese->new($str,'sjis')->get; # convert sjis (imode_EMOJI) -> utf8 print Unicode::Japanese->new($str,'sjis-imode')->get; # convert ZENKAKU (utf8) -> HANKAKU (utf8) print Unicode::Japanese->new($str)->z2h->get; =head1 DESCRIPTION Module for conversion among Japanese character encodings. =head2 FEATURES =over 2 =item * The instance stores internal strings in UTF-8. =item * Supports both XS and Non-XS. Use XS for high performance, or No-XS for ease to use (only by copying Japanese.pm). =item * Supports conversion between ZENKAKU and HANKAKU. =item * Safely handles "EMOJI" of the mobile phones (DoCoMo i-mode, ASTEL dot-i and J-PHONE J-Sky) by mapping them on Unicode Private Use Area. =item * Supports conversion of the same image of EMOJI between different mobile phone's standard mutually. =item * Considers Shift_JIS(SJIS) as MS-CP932. (Shift_JIS on MS-Windows (MS-SJIS/MS-CP932) differ from generic Shift_JIS encodings.) =item * On converting Unicode to SJIS (and EUC-JP/JIS), those encodings that cannot be converted to SJIS (except "EMOJI") are escaped in "&#dddd;" format. "EMOJI" on Unicode Private Use Area is going to be '?'. When converting strings from Unicode to SJIS of mobile phones, any characters not up to their standard is going to be '?' =item * On perl-5.8.0 and later, setting of utf-8 flag is performed properly. utf8() method returns utf-8 `bytes' string and getu() method returns utf-8 `char' string. get() method returns utf-8 `bytes' string in current release. in future, the behavior of get() maybe change. sjis(), jis(), utf8(), etc.. methods return bytes string. The input of new, set, and a getcode method is not asked about utf8/bytes. =back =head1 METHODS =over 4 =item $s = Unicode::Japanese->new($str [, $icode [, $encode]]) Creates a new instance of Unicode::Japanese. If arguments are specified, passes through to set method. =item $s->set($str [, $icode [, $encode]]) =over 2 =item $str: string =item $icode: character encodings, may be omitted (default = 'utf8') =item $encode: ASCII encoding, may be omitted. =back Set a string in the instance. If '$icode' is omitted, string is considered as UTF-8. To specify a encodings, choose from the following; 'jis', 'sjis', 'euc', 'utf8', 'ucs2', 'ucs4', 'utf16', 'utf16-ge', 'utf16-le', 'utf32', 'utf32-ge', 'utf32-le', 'ascii', 'binary', 'sjis-imode', 'sjis-doti', 'sjis-jsky'. '&#dddd' will be converted to "EMOJI", when specified 'sjis-imode' or 'sjis-doti'. For auto encoding detection, you MUST specify 'auto' so as to call getcode() method automatically. For ASCII encoding, only 'base64' may be specified. With it, the string will be decoded before storing. To decode binary, specify 'binary' as the encoding. =item $str = $s->get =over 2 =item $str: string (UTF-8) =back Gets a string with UTF-8. return `bytes' string in current release, this behavior will be changed. utf8() method for `character' string or getu() method for `bytes' string seems better. =item $str = $s->getu =over 2 =item $str: string (UTF-8) =back Gets a string with UTF-8. On perl-5.8.0 and later, return value is with utf-8 flag. =item $code = $s->getcode($str) =over 2 =item $str: string =item $code: character encoding name =back Detects the character encodings of I<$str>. Notice: This method detects B encoding of the string in the instance but I<$str>. Character encodings are distinguished by the following algorithm: (In case of PurePerl) =over 4 =item 1 If BOM of UTF-32 is found, the encoding is utf32. =item 2 If BOM of UTF-16 is found, the encoding is utf16. =item 3 If it is in proper UTF-32BE, the encoding is utf32-be. =item 4 If it is in proper UTF-32LE, the encoding is utf32-le. =item 5 Without NON-ASCII characters, the encoding is ascii. (control codes except escape sequences has been included in ASCII) =item 6 If it includes ISO-2022-JP(JIS) escape sequences, the encoding is jis. =item 7 If it includes "J-PHONE EMOJI", the encoding is sjis-sky. =item 8 If it is in proper EUC-JP, the encoding is euc. =item 9 If it is in proper SJIS, the encoding is sjis. =item 10 If it is in proper SJIS and "EMOJI" of i-mode, the encoding is sjis-imode. =item 11 If it is in proper SJIS and "EMOJI" of dot-i,the encoding is sjis-doti. =item 12 If it is in proper UTF-8, the encoding is utf8. =item 13 If none above is true, the encoding is unknown. =back (In case of XS) =over 4 =item 1 If BOM of UTF-32 is found, the encoding is utf32. =item 2 If BOM of UTF-16 is found, the encoding is utf16. =item 3 String is checked by State Transition if it is applicable for any listed encodings below. ascii / euc-jp / sjis / jis / utf8 / utf32-be / utf32-le / sjis-jsky / sjis-imode / sjis-doti =item 4 The listed order below is applied for a final determination. utf32-be / utf32-le / ascii / jis / euc-jp / sjis / sjis-jsky / sjis-imode / sjis-doti / utf8 =item 5 If none above is true, the encoding is unknown. =back Regarding the algorithm, pay attention to the following: =over 2 =item * UTF-8 is occasionally detected as SJIS. =item * Can NOT detect UCS2 automatically. =item * Can detect UTF-16 only when the string has BOM. =item * Can detect "EMOJI" when it is stored in binary, not in "&#dddd;" format. (If only stored in "&#dddd;" format, getcode() will return incorrect result. In that case, "EMOJI" will be crashed.) =back Because each of XS and PurePerl has a different algorithm, A result of the detection would be possibly different. In case that the string is SJIS with escape characters, it would be considered as SJIS on PurePerl. However, it can't be detected as S-JIS on XS. This is because by using Algorithm, the string can't be distinguished between SJIS and SJIS-Jsky. This exclusion of escape characters on XS from the detection is suppose to be the same for EUC-JP. =item $str = $s->conv($ocode, $encode) =over 2 =item $ocode: output character encoding (Choose from 'jis', 'sjis', 'euc', 'utf8', 'ucs2', 'ucs4', 'utf16', 'binary') =item $encode: encoding, may be omitted. =item $str: string =back Gets a string converted to I<$ocode>. For ASCII encoding, only 'base64' may be specified. With it, the string encoded in base64 will be returned. On perl-5.8.0 and later, return value is not with utf-8 flag, and is bytes string. =item $s->tag2bin Replaces the substrings "&#dddd;" in the string with the binary entity they mean. =item $s->z2h Converts ZENKAKU to HANKAKU. =item $s->h2z Converts HANKAKU to ZENKAKU. =item $s->hira2kata Converts HIRAGANA to KATAKANA. =item $s->kata2hira Converts KATAKANA to HIRAGANA. =item $str = $s->jis $str: string (JIS) Gets the string converted to ISO-2022-JP(JIS). =item $str = $s->euc $str: string (EUC-JP) Gets the string converted to EUC-JP. =item $str = $s->utf8 $str: `bytes' string (UTF-8) Gets the string converted to UTF-8. On perl-5.8.0 and later, return value is not with utf-8 flag, and is bytes string. =item $str = $s->ucs2 $str: string (UCS2) Gets the string converted to UCS2. =item $str = $s->ucs4 $str: string (UCS4) Gets the string converted to UCS4. =item $str = $s->utf16 $str: string (UTF-16) Gets the string converted to UTF-16(big-endian). BOM is not added. =item $str = $s->sjis $str: string (SJIS) Gets the string converted to Shift_JIS(MS-SJIS/MS-CP932). =item $str = $s->sjis_imode $str: string (SJIS/imode_EMOJI) Gets the string converted to SJIS for i-mode. This method is alias of sjis_imode2 on VERSION 0.15. =item $str = $s->sjis_imode1 $str: string (SJIS/imode_EMOJI) Gets the string converted to SJIS for i-mode. $str includes only basic pictgraphs, and is without extended pictgraphs. =item $str = $s->sjis_imode2 $str: string (SJIS/imode_EMOJI) Gets the string converted to SJIS for i-mode. $str includes both basic pictgraphs, and extended ones. =item $str = $s->sjis_doti $str: string (SJIS/dot-i_EMOJI) Gets the string converted to SJIS for dot-i. =item $str = $s->sjis_jsky $str: string (SJIS/J-SKY_EMOJI) Gets the string converted to SJIS for j-sky. This method is alias of sjis_jsky2 on VERSION 0.15. =item $str = $s->sjis_jsky1 $str: string (SJIS/J-SKY_EMOJI) Gets the string converted to SJIS for j-sky. $str includes from Page 1 to Page 3. =item $str = $s->sjis_jsky $str: string (SJIS/J-SKY_EMOJI) Gets the string converted to SJIS for j-sky. $str includes from Page 1 to Page 6. =item @str = $s->strcut($len) =over 2 =item $len: number of characters =item @str: strings =back Splits the string by length(I<$len>). On perl-5.8.0 and later, each element in return array is with utf-8 flag. =item $len = $s->strlen $len: `visual width' of the string Gets the length of the string. This method has been offered to substitute for perl build-in length(). ZENKAKU characters are assumed to have lengths of 2, regardless of the coding being SJIS or UTF-8. =item $s->join_csv(@values); @values: data array Converts the array to a string in CSV format, then stores into the instance. In the meantime, adds a newline("\n") at the end of string. =item @values = $s->split_csv; @values: data array Splits the string, accounting it is in CSV format. Each newline("\n") is removed before split. on perl-5.8.0 and later, utf-8 flag of return value depends on icode of set method. if $s contains binary, return value is bytes too. if $s contains any string, return value is with utf-8 flag. =back =head1 DESCRIPTION OF UNICODE MAPPING =over 2 =item SJIS Mapped as MS-CP932. Mapping table in the following URL is used. ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT If a character cannot be mapped to SJIS from Unicode, it will be converted to &#dddd; format. Also, any unmapped character will be converted into "?" when converting to SJIS for mobile phones. =item EUC-JP/JIS Converted to SJIS and then mapped to Unicode. Any non-SJIS character in the string will not be mapped correctly. =item DoCoMo i-mode Portion of involving "EMOJI" in F800 - F9FF is maapped to U+0FF800 - U+0FF9FF. =item ASTEL dot-i Portion of involving "EMOJI" in F000 - F4FF is mapped to U+0FF000 - U+0FF4FF. =item J-PHONE J-SKY "J-SKY EMOJI" are mapped down as follows: "\e\$"(\x1b\x24) escape sequences, the first byte, the second byte and "\x0f". With sequential "EMOJI"s of identical first bytes, it may be compressed by arranging only the second bytes. 4500 - 47FF is mapped to U+0FFB00 - U+0FFDFF, accounting the first and the second bytes make one EMOJI character. Unicode::Japanese will compress "J-SKY_EMOJI" automatically when the first bytes of a sequence of "EMOJI" are identical. =back =head1 PurePerl mode use Unicode::Japanese qw(PurePerl); If module was loaded with 'PurePerl' keyword, it works on Non-XS mode. =head1 BUGS =over 2 =item * EUC-JP, JIS strings cannot be converted correctly when they include non-SJIS characters because they are converted to SJIS before being converted to UTF-8. =item * Some characters of CP932 not in standard Shift_JIS (ex; not in Joyo Kanji) will not be detected and converted. When string include such non-standard Shift_JIS, they will not detected as SJIS. Also, getcode() and all convert method will not work correctly. =item * When using XS, character encoding detection of EUC-JP and SJIS(included all EMOJI) strings when they include "\e" will fail. Also, getcode() and all convert method will not work. =item * The Japanese.pm file will collapse if sent via ASCII mode of FTP, as it has a trailing binary data. =back =head1 AUTHOR INFORMATION Copyright 2001-2002 SANO Taku (SAWATARI Mikage) and YAMASHINA Hio. All right reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Bug reports and comments to: mikage@cpan.org. Thank you. =head1 CREDITS Thanks very much to: NAKAYAMA Nao SUGIURA Tatsuki & Debian JP Project =cut __DATA__ h{'utf16'=>{'length'=>187,'offset'=>0},'joinCsv'=>{'length'=>644,'offset'=>187},'_decodeBase64'=>{'length'=>609,'offset'=>831},'z2hNum'=>{'length'=>284,'offset'=>1440},'_utf16le_utf16'=>{'length'=>179,'offset'=>2966},'kata2hira'=>{'length'=>1242,'offset'=>1724},'_u2si2'=>{'length'=>1621,'offset'=>3145},'z2hAlpha'=>{'length'=>836,'offset'=>4766},'jcode/emoji2/eu2i.dat'=>{'length'=>8192,'offset'=>204120},'splitCsv'=>{'length'=>465,'offset'=>5602},'jcode/emoji2/eu2i2.dat'=>{'length'=>8192,'offset'=>214360},'_ucs4_utf8'=>{'length'=>936,'offset'=>6067},'h2zSym'=>{'length'=>316,'offset'=>7003},'sjis_jsky1'=>{'length'=>70,'offset'=>7319},'h2z'=>{'length'=>114,'offset'=>7389},'_s2j3'=>{'length'=>355,'offset'=>7503},'_u2s'=>{'length'=>2209,'offset'=>7858},'sjis'=>{'length'=>177,'offset'=>10067},'_u2si1'=>{'length'=>1620,'offset'=>10244},'_sj2u1'=>{'length'=>1144,'offset'=>11864},'tag2bin'=>{'length'=>328,'offset'=>13008},'z2hSym'=>{'length'=>583,'offset'=>13336},'_utf16_utf8'=>{'length'=>769,'offset'=>13919},'ucs2'=>{'length'=>183,'offset'=>14688},'jcode/emoji2/ei2u2.dat'=>{'length'=>2048,'offset'=>212312},'h2zNum'=>{'length'=>174,'offset'=>14871},'_si2u1'=>{'length'=>1228,'offset'=>15045},'h2zKanaK'=>{'length'=>979,'offset'=>16273},'strlen'=>{'length'=>360,'offset'=>17252},'_utf8_utf16'=>{'length'=>950,'offset'=>17612},'sjis_jsky2'=>{'length'=>70,'offset'=>18562},'jcode/emoji2/ei2u.dat'=>{'length'=>2048,'offset'=>202072},'getcode'=>{'length'=>1776,'offset'=>18632},'sjis_imode2'=>{'length'=>71,'offset'=>20408},'_j2s2'=>{'length'=>382,'offset'=>20479},'_validate_utf8'=>{'length'=>70,'offset'=>20861},'h2zKanaD'=>{'length'=>810,'offset'=>20931},'z2hKanaK'=>{'length'=>979,'offset'=>21741},'h2zAlpha'=>{'length'=>264,'offset'=>22720},'_utf16_utf16'=>{'length'=>300,'offset'=>22984},'_ucs2_utf8'=>{'length'=>549,'offset'=>23284},'set'=>{'length'=>2980,'offset'=>23833},'_sj2u2'=>{'length'=>1503,'offset'=>26813},'jcode/emoji2/ed2u.dat'=>{'length'=>5120,'offset'=>269656},'_utf32_ucs4'=>{'length'=>312,'offset'=>28316},'sjis_imode1'=>{'length'=>71,'offset'=>28628},'utf8'=>{'length'=>164,'offset'=>28699},'_s2e'=>{'length'=>244,'offset'=>29137},'h2zKana'=>{'length'=>185,'offset'=>28952},'z2hKana'=>{'length'=>89,'offset'=>28863},'_si2u2'=>{'length'=>1227,'offset'=>31154},'_u2sj1'=>{'length'=>1773,'offset'=>29381},'_u2sj2'=>{'length'=>1774,'offset'=>32381},'jcode/s2u.dat'=>{'length'=>48573,'offset'=>153499},'conv'=>{'length'=>1781,'offset'=>34155},'sjis_doti'=>{'length'=>188,'offset'=>35936},'_e2s'=>{'length'=>202,'offset'=>36124},'_utf16be_utf16'=>{'length'=>71,'offset'=>36326},'jcode/emoji2/eu2j.dat'=>{'length'=>20480,'offset'=>225624},'jcode/emoji2/ej2u2.dat'=>{'length'=>3072,'offset'=>246104},'hira2kata'=>{'length'=>1242,'offset'=>36397},'euc'=>{'length'=>175,'offset'=>37639},'_j2s3'=>{'length'=>337,'offset'=>37814},'jcode/emoji2/ej2u.dat'=>{'length'=>3072,'offset'=>222552},'ucs4'=>{'length'=>183,'offset'=>38151},'_sd2u'=>{'length'=>1221,'offset'=>38334},'sjis_doti1'=>{'length'=>69,'offset'=>39555},'_s2j'=>{'length'=>272,'offset'=>39624},'_s2e2'=>{'length'=>446,'offset'=>39896},'z2hKanaD'=>{'length'=>498,'offset'=>40342},'_u2sd'=>{'length'=>1616,'offset'=>40840},'jcode/emoji2/eu2j2.dat'=>{'length'=>20480,'offset'=>249176},'jcode/emoji2/eu2d.dat'=>{'length'=>8192,'offset'=>274776},'jcode/u2s.dat'=>{'length'=>85504,'offset'=>67995},'_utf8_ucs2'=>{'length'=>672,'offset'=>42456},'join_csv'=>{'length'=>92,'offset'=>43128},'_s2u'=>{'length'=>988,'offset'=>43220},'_utf32le_ucs4'=>{'length'=>178,'offset'=>44208},'sjis_jsky'=>{'length'=>189,'offset'=>44386},'sjis_imode'=>{'length'=>192,'offset'=>45110},'_e2s2'=>{'length'=>535,'offset'=>44575},'_s2j2'=>{'length'=>376,'offset'=>45302},'jis'=>{'length'=>179,'offset'=>45678},'_utf8_ucs4'=>{'length'=>1424,'offset'=>46598},'_encodeBase64'=>{'length'=>741,'offset'=>45857},'get'=>{'length'=>162,'offset'=>48022},'z2h'=>{'length'=>114,'offset'=>48184},'getu'=>{'length'=>266,'offset'=>48298},'split_csv'=>{'length'=>195,'offset'=>48564},'_loadConvTable'=>{'length'=>17980,'offset'=>48759},'strcut'=>{'length'=>1009,'offset'=>66739},'_utf32be_ucs4'=>{'length'=>70,'offset'=>67748},'_j2s'=>{'length'=>177,'offset'=>67818}}# ----------------------------------------------------------------------------- # $bytes_utf16 = $unijp->utf16(); # sub utf16 { my $this = shift; $this->_utf8_utf16($this->{str}); } sub joinCsv { my $this = shift; my $list; if(ref($_[0]) eq 'ARRAY') { $list = shift; if( $]>=5.008 ) { $list = [ @$list ]; foreach(@$list) { Encode::_utf8_off($_); } } } elsif(!ref($_[0])) { $list = [ @_ ]; if( $]>=5.008 ) { foreach(@$list) { Encode::_utf8_off($_); } } } else { my $ref = ref($_[0]); die "String->joinCsv, Param[1] is not ARRAY/ARRRAY-ref. [$ref]\n"; } my $text; $text = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @$list; $this->{str} = $text."\n"; $this->{icode} = 'binary'; $this; } sub _decodeBase64 { local($^W) = 0; # unpack("u",...) gives bogus warning in 5.00[123] my $this = shift; my $str = shift; my $res = ""; $str =~ tr|A-Za-z0-9+=/||cd; # remove non-base64 chars if (length($str) % 4) { warn("Length of base64 data not a multiple of 4"); } $str =~ s/=+$//; # remove padding $str =~ tr|A-Za-z0-9+/| -_|; # convert to uuencoded format while ($str =~ /(.{1,60})/gs) { my $len = chr(32 + length($1)*3/4); # compute length byte $res .= unpack("u", $len . $1 ); # uudecode } $res; } sub z2hNum { my $this = shift; if(!defined(%_z2hNum)) { $this->_loadConvTable; } $this->{str} =~ s/(\xef\xbc\x90|\xef\xbc\x91|\xef\xbc\x92|\xef\xbc\x93|\xef\xbc\x94|\xef\xbc\x95|\xef\xbc\x96|\xef\xbc\x97|\xef\xbc\x98|\xef\xbc\x99)/$_z2hNum{$1}/eg; $this; } sub kata2hira { my $this = shift; if(!defined(%_kata2hira)) { $this->_loadConvTable; } $this->{str} =~ s/(\xe3\x82\xa1|\xe3\x82\xa2|\xe3\x82\xa3|\xe3\x82\xa4|\xe3\x82\xa5|\xe3\x82\xa6|\xe3\x82\xa7|\xe3\x82\xa8|\xe3\x82\xa9|\xe3\x82\xaa|\xe3\x82\xab|\xe3\x82\xac|\xe3\x82\xad|\xe3\x82\xae|\xe3\x82\xaf|\xe3\x82\xb0|\xe3\x82\xb1|\xe3\x82\xb2|\xe3\x82\xb3|\xe3\x82\xb4|\xe3\x82\xb5|\xe3\x82\xb6|\xe3\x82\xb7|\xe3\x82\xb8|\xe3\x82\xb9|\xe3\x82\xba|\xe3\x82\xbb|\xe3\x82\xbc|\xe3\x82\xbd|\xe3\x82\xbe|\xe3\x82\xbf|\xe3\x83\x80|\xe3\x83\x81|\xe3\x83\x82|\xe3\x83\x83|\xe3\x83\x84|\xe3\x83\x85|\xe3\x83\x86|\xe3\x83\x87|\xe3\x83\x88|\xe3\x83\x89|\xe3\x83\x8a|\xe3\x83\x8b|\xe3\x83\x8c|\xe3\x83\x8d|\xe3\x83\x8e|\xe3\x83\x8f|\xe3\x83\x90|\xe3\x83\x91|\xe3\x83\x92|\xe3\x83\x93|\xe3\x83\x94|\xe3\x83\x95|\xe3\x83\x96|\xe3\x83\x97|\xe3\x83\x98|\xe3\x83\x99|\xe3\x83\x9a|\xe3\x83\x9b|\xe3\x83\x9c|\xe3\x83\x9d|\xe3\x83\x9e|\xe3\x83\x9f|\xe3\x83\xa0|\xe3\x83\xa1|\xe3\x83\xa2|\xe3\x83\xa3|\xe3\x83\xa4|\xe3\x83\xa5|\xe3\x83\xa6|\xe3\x83\xa7|\xe3\x83\xa8|\xe3\x83\xa9|\xe3\x83\xaa|\xe3\x83\xab|\xe3\x83\xac|\xe3\x83\xad|\xe3\x83\xae|\xe3\x83\xaf|\xe3\x83\xb0|\xe3\x83\xb1|\xe3\x83\xb2|\xe3\x83\xb3)/$_kata2hira{$1}/eg; $this; } sub _utf16le_utf16 { my $this = shift; my $str = shift; my $result = ''; foreach my $ch (unpack('v*', $str)) { $result .= pack('n', $ch); } $result; } sub _u2si2 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($u2s_table)) { $u2s_table = $this->_getFile('jcode/u2s.dat'); } if(!defined($eu2i2)) { $eu2i2 = $this->_getFile('jcode/emoji2/eu2i2.dat'); } my $c1; my $c2; my $c3; my $c4; my $c5; my $c6; my $c; my $ch; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5})|(.)/ defined($2) ? '?' : ((length($1) == 1) ? $1 : (length($1) == 2) ? ( ($c1,$c2) = unpack("C2", $1), $ch = (($c1 & 0x1F)<<6)|($c2 & 0x3F), $c = substr($u2s_table, $ch * 2, 2), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 3) ? ( ($c1,$c2,$c3) = unpack("C3", $1), $ch = (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F), ( ($ch <= 0x9fff) ? $c = substr($u2s_table, $ch * 2, 2) : ($ch >= 0xf900 and $ch <= 0xffff) ? ( $c = substr($u2s_table, ($ch - 0xf900 + 0xa000) * 2, 2), (($c =~ tr,\0,,d)==2 and $c = "\0\0"), ) : ( $c = '?' ) ), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 4) ? ( ($c1,$c2,$c3,$c4) = unpack("C4", $1), $ch = (($c1 & 0x07)<<18)|(($c2 & 0x3F)<<12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F), ( ($ch >= 0x0ff000 and $ch <= 0x0fffff) ? ( $c = substr($eu2i2, ($ch - 0x0ff000) * 2, 2), $c =~ tr,\0,,d, ($c eq '') ? '?' : $c ) : '?' ) ) : '?' ) /eg; $str; } sub z2hAlpha { my $this = shift; if(!defined(%_z2hAlpha)) { $this->_loadConvTable; } $this->{str} =~ s/(\xef\xbc\xa1|\xef\xbc\xa2|\xef\xbc\xa3|\xef\xbc\xa4|\xef\xbc\xa5|\xef\xbc\xa6|\xef\xbc\xa7|\xef\xbc\xa8|\xef\xbc\xa9|\xef\xbc\xaa|\xef\xbc\xab|\xef\xbc\xac|\xef\xbc\xad|\xef\xbc\xae|\xef\xbc\xaf|\xef\xbc\xb0|\xef\xbc\xb1|\xef\xbc\xb2|\xef\xbc\xb3|\xef\xbc\xb4|\xef\xbc\xb5|\xef\xbc\xb6|\xef\xbc\xb7|\xef\xbc\xb8|\xef\xbc\xb9|\xef\xbc\xba|\xef\xbd\x81|\xef\xbd\x82|\xef\xbd\x83|\xef\xbd\x84|\xef\xbd\x85|\xef\xbd\x86|\xef\xbd\x87|\xef\xbd\x88|\xef\xbd\x89|\xef\xbd\x8a|\xef\xbd\x8b|\xef\xbd\x8c|\xef\xbd\x8d|\xef\xbd\x8e|\xef\xbd\x8f|\xef\xbd\x90|\xef\xbd\x91|\xef\xbd\x92|\xef\xbd\x93|\xef\xbd\x94|\xef\xbd\x95|\xef\xbd\x96|\xef\xbd\x97|\xef\xbd\x98|\xef\xbd\x99|\xef\xbd\x9a)/$_z2hAlpha{$1}/eg; $this; } sub splitCsv { my $this = shift; my $text = $this->{str}; my @field; chomp($text); while ($text =~ m/"([^"\\]*(?:(?:\\.|\"\")[^"\\]*)*)",?|([^,]+),?|,/g) { my $field = defined($1) ? $1 : (defined($2) ? $2 : ''); $field =~ s/["\\]"/"/g; push(@field, $field); } push(@field, '') if($text =~ m/,$/); if( $]>=5.008 && $this->{icode} ne 'binary' ) { foreach(@field) { Encode::_utf8_on($_); } } \@field; } sub _ucs4_utf8 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } my $result = ''; for my $uc (unpack("N*", $str)) { $result .= ($uc < 0x80) ? chr($uc) : ($uc < 0x800) ? chr(0xC0 | ($uc >> 6)) . chr(0x80 | ($uc & 0x3F)) : ($uc < 0x10000) ? chr(0xE0 | ($uc >> 12)) . chr(0x80 | (($uc >> 6) & 0x3F)) . chr(0x80 | ($uc & 0x3F)) : ($uc < 0x200000) ? chr(0xF0 | ($uc >> 18)) . chr(0x80 | (($uc >> 12) & 0x3F)) . chr(0x80 | (($uc >> 6) & 0x3F)) . chr(0x80 | ($uc & 0x3F)) : ($uc < 0x4000000) ? chr(0xF8 | ($uc >> 24)) . chr(0x80 | (($uc >> 18) & 0x3F)) . chr(0x80 | (($uc >> 12) & 0x3F)) . chr(0x80 | (($uc >> 6) & 0x3F)) . chr(0x80 | ($uc & 0x3F)) : chr(0xFC | ($uc >> 30)) . chr(0x80 | (($uc >> 24) & 0x3F)) . chr(0x80 | (($uc >> 18) & 0x3F)) . chr(0x80 | (($uc >> 12) & 0x3F)) . chr(0x80 | (($uc >> 6) & 0x3F)) . chr(0x80 | ($uc & 0x3F)); } $result; } sub h2zSym { my $this = shift; if(!defined(%_h2zSym)) { $this->_loadConvTable; } $this->{str} =~ s/(\x20|\x21|\x22|\x23|\x24|\x25|\x26|\x27|\x28|\x29|\x2a|\x2b|\x2c|\x2d|\x2e|\x2f|\x3a|\x3b|\x3c|\x3d|\x3e|\x3f|\x40|\x5b|\x5c|\x5d|\x5e|_|\x60|\x7b|\x7c|\x7d|\x7e)/$_h2zSym{$1}/eg; $this; } sub sjis_jsky1 { my $this = shift; $this->_u2sj1($this->{str}); } sub h2z { my $this = shift; $this->h2zKana; $this->h2zNum; $this->h2zAlpha; $this->h2zSym; $this; } sub _s2j3 { my $this = shift; my $c = shift; my ($c1, $c2) = unpack('CC', $c); if (0x9f <= $c2) { $c1 = $c1 * 2 - ($c1 >= 0xe0 ? 0xe0 : 0x60); $c2 += 2; } else { $c1 = $c1 * 2 - ($c1 >= 0xe0 ? 0xe1 : 0x61); $c2 += 0x60 + ($c2 < 0x7f); } $S2J[unpack('n', $c)] = pack('CC', $c1 - 0x80, $c2 - 0x80); } # ----------------------------------------------------------------------------- # utf8 ==> sjis/絵文字 # sub _u2s { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($u2s_table)) { $u2s_table = $this->_getFile('jcode/u2s.dat'); } my $c1; my $c2; my $c3; my $c4; my $c5; my $c6; my $c; my $ch; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5})|(.)/ defined($2) ? '?' : ( $U2S{$1} or ($U2S{$1} = ((length($1) == 1) ? $1 : (length($1) == 2) ? ( ($c1,$c2) = unpack("C2", $1), $ch = (($c1 & 0x1F)<<6)|($c2 & 0x3F), $c = substr($u2s_table, $ch * 2, 2), # UTF-3バイト(U+0x80-U+07FF)からsjis-1バイトへのマッピングはないので\0を削除は必要はない ($c eq "\0\0") ? '&#' . $ch . ';' : $c ) : (length($1) == 3) ? ( ($c1,$c2,$c3) = unpack("C3", $1), $ch = (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F), ( ($ch <= 0x9fff) ? $c = substr($u2s_table, $ch * 2, 2) : ($ch >= 0xf900 and $ch <= 0xffff) ? ( $c = substr($u2s_table, ($ch - 0xf900 + 0xa000) * 2, 2), (($c =~ tr,\0,,d)==2 and $c = "\0\0"), ) : ( $c = '&#' . $ch . ';' ) ), ($c eq "\0\0") ? '&#' . $ch . ';' : $c ) : (length($1) == 4) ? ( ($c1,$c2,$c3,$c4) = unpack("C4", $1), $ch = (($c1 & 0x07)<<18)|(($c2 & 0x3F)<<12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F), ( ($ch >= 0x0ff000 and $ch <= 0x0fffff) ? '?' : '&#' . $ch . ';' ) ) : (length($1) == 5) ? (($c1,$c2,$c3,$c4,$c5) = unpack("C5", $1), $ch = (($c1 & 0x03) << 24)|(($c2 & 0x3F) << 18)| (($c3 & 0x3f) << 12)|(($c4 & 0x3f) << 6)| ($c5 & 0x3F), '&#' . $ch . ';' ) : ( ($c1,$c2,$c3,$c4,$c5,$c6) = unpack("C6", $1), $ch = (($c1 & 0x03) << 30)|(($c2 & 0x3F) << 24)| (($c3 & 0x3f) << 18)|(($c4 & 0x3f) << 12)| (($c5 & 0x3f) << 6)|($c6 & 0x3F), '&#' . $ch . ';' ) ) ) ) /eg; $str; } # ----------------------------------------------------------------------------- # $bytes_sjis = $unijp->sjis(); # sub sjis { my $this = shift; $this->_u2s($this->{str}); } sub _u2si1 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($u2s_table)) { $u2s_table = $this->_getFile('jcode/u2s.dat'); } if(!defined($eu2i1)) { $eu2i1 = $this->_getFile('jcode/emoji2/eu2i.dat'); } my $c1; my $c2; my $c3; my $c4; my $c5; my $c6; my $c; my $ch; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5})|(.)/ defined($2) ? '?' : ((length($1) == 1) ? $1 : (length($1) == 2) ? ( ($c1,$c2) = unpack("C2", $1), $ch = (($c1 & 0x1F)<<6)|($c2 & 0x3F), $c = substr($u2s_table, $ch * 2, 2), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 3) ? ( ($c1,$c2,$c3) = unpack("C3", $1), $ch = (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F), ( ($ch <= 0x9fff) ? $c = substr($u2s_table, $ch * 2, 2) : ($ch >= 0xf900 and $ch <= 0xffff) ? ( $c = substr($u2s_table, ($ch - 0xf900 + 0xa000) * 2, 2), (($c =~ tr,\0,,d)==2 and $c = "\0\0"), ) : ( $c = '?' ) ), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 4) ? ( ($c1,$c2,$c3,$c4) = unpack("C4", $1), $ch = (($c1 & 0x07)<<18)|(($c2 & 0x3F)<<12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F), ( ($ch >= 0x0ff000 and $ch <= 0x0fffff) ? ( $c = substr($eu2i1, ($ch - 0x0ff000) * 2, 2), $c =~ tr,\0,,d, ($c eq '') ? '?' : $c ) : '?' ) ) : '?' ) /eg; $str; } sub _sj2u1 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($s2u_table)) { $s2u_table = $this->_getFile('jcode/s2u.dat'); } if(!defined($ej2u1)) { $ej2u1 = $this->_getFile('jcode/emoji2/ej2u.dat'); } my $l; my $j1; my $uc; $str =~ s/($RE{SJIS_KANA}|$RE{SJIS_DBCS}|$RE{E_JSKYv1}|[\x00-\xff])/ (length($1) <= 2) ? ( $l = (unpack('n', $1) or unpack('C', $1)), ( ($l >= 0xa1 and $l <= 0xdf) ? ( $uc = substr($s2u_table, ($l - 0xa1) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0x8100 and $l <= 0x9fff) ? ( $uc = substr($s2u_table, ($l - 0x8100 + 0x3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xe000 and $l <= 0xffff) ? ( $uc = substr($s2u_table, ($l - 0xe000 + 0x1f3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l < 0x80) ? chr($l) : '?' ) ) : ( $l = $1, $l =~ s,^$RE{E_JSKY_START}($RE{E_JSKY1v1}),,o, $j1 = $1, $uc = '', $l =~ s!($RE{E_JSKY2})!$uc .= substr($ej2u1, (unpack('n', $j1 . $1) - 0x4500) * 4, 4), ''!ego, $uc =~ tr,\0,,d, $uc ) /eg; $str; } # ----------------------------------------------------------------------------- # tag2bin # sub tag2bin { my $this = shift; $this->{str} =~ s/\&(\#\d+|\#x[a-f0-9A-F]+);/ (substr($1, 1, 1) eq 'x') ? $this->_ucs4_utf8(pack('N', hex(substr($1, 2)))) : $this->_ucs4_utf8(pack('N', substr($1, 1))) /eg; $this; } sub z2hSym { my $this = shift; if(!defined(%_z2hSym)) { $this->_loadConvTable; } $this->{str} =~ s/(\xe3\x80\x80|\xef\xbc\x8c|\xef\xbc\x8e|\xef\xbc\x9a|\xef\xbc\x9b|\xef\xbc\x9f|\xef\xbc\x81|\xef\xbd\x80|\xef\xbc\xbe|\xef\xbc\xbf|\xef\xbc\x8f|\xef\xbd\x9e|\xef\xbd\x9c|\xe2\x80\x99|\xe2\x80\x9d|\xef\xbc\x88|\xef\xbc\x89|\xef\xbc\xbb|\xef\xbc\xbd|\xef\xbd\x9b|\xef\xbd\x9d|\xef\xbc\x8b|\xef\xbc\x8d|\xef\xbc\x9d|\xef\xbc\x9c|\xef\xbc\x9e|\xef\xbf\xa5|\xef\xbc\x84|\xef\xbc\x85|\xef\xbc\x83|\xef\xbc\x86|\xef\xbc\x8a|\xef\xbc\xa0)/$_z2hSym{$1}/eg; $this; } sub _utf16_utf8 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } my $result = ''; my $sa; foreach my $uc (unpack("n*", $str)) { ($uc >= 0xd800 and $uc <= 0xdbff and $sa = $uc and next); ($uc >= 0xdc00 and $uc <= 0xdfff and ($uc = ((($sa - 0xd800) << 10)|($uc - 0xdc00))+0x10000)); $result .= $U2T[$uc] ? $U2T[$uc] : ($U2T[$uc] = ($uc < 0x80) ? chr($uc) : ($uc < 0x800) ? chr(0xC0 | ($uc >> 6)) . chr(0x80 | ($uc & 0x3F)) : ($uc < 0x10000) ? chr(0xE0 | ($uc >> 12)) . chr(0x80 | (($uc >> 6) & 0x3F)) . chr(0x80 | ($uc & 0x3F)) : chr(0xF0 | ($uc >> 18)) . chr(0x80 | (($uc >> 12) & 0x3F)) . chr(0x80 | (($uc >> 6) & 0x3F)) . chr(0x80 | ($uc & 0x3F))); } $result; } # ----------------------------------------------------------------------------- # $bytes_ucs2 = $unijp->ucs2(); # sub ucs2 { my $this = shift; $this->_utf8_ucs2($this->{str}); } sub h2zNum { my $this = shift; if(!defined(%_h2zNum)) { $this->_loadConvTable; } $this->{str} =~ s/(0|1|2|3|4|5|6|7|8|9)/$_h2zNum{$1}/eg; $this; } sub _si2u1 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($s2u_table)) { $s2u_table = $this->_getFile('jcode/s2u.dat'); } if(!defined($ei2u1)) { $ei2u1 = $this->_getFile('jcode/emoji2/ei2u.dat'); } $str =~ s/(\&\#(\d+);)/ ($2 >= 0xf800 and $2 <= 0xf9ff) ? pack('n', $2) : $1 /eg; my $l; my $uc; $str =~ s/($RE{SJIS_KANA}|$RE{SJIS_DBCS}|$RE{E_IMODEv1}|[\x00-\xff])/ $S2U{$1} or ($S2U{$1} = ( $l = (unpack('n', $1) or unpack('C', $1)), ( ($l >= 0xa1 and $l <= 0xdf) ? ( $uc = substr($s2u_table, ($l - 0xa1) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0x8100 and $l <= 0x9fff) ? ( $uc = substr($s2u_table, ($l - 0x8100 + 0x3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xf800 and $l <= 0xf9ff) ? ( $uc = substr($ei2u1, ($l - 0xf800) * 4, 4), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xe000 and $l <= 0xffff) ? ( $uc = substr($s2u_table, ($l - 0xe000 + 0x1f3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l < 0x80) ? chr($l) : '?' ) ) )/eg; $str; } sub h2zKanaK { my $this = shift; if(!defined(%_h2zKanaK)) { $this->_loadConvTable; } $this->{str} =~ s/(\xef\xbd\xa1|\xef\xbd\xa2|\xef\xbd\xa3|\xef\xbd\xa4|\xef\xbd\xa5|\xef\xbd\xa6|\xef\xbd\xa7|\xef\xbd\xa8|\xef\xbd\xa9|\xef\xbd\xaa|\xef\xbd\xab|\xef\xbd\xac|\xef\xbd\xad|\xef\xbd\xae|\xef\xbd\xaf|\xef\xbd\xb0|\xef\xbd\xb1|\xef\xbd\xb2|\xef\xbd\xb3|\xef\xbd\xb4|\xef\xbd\xb5|\xef\xbd\xb6|\xef\xbd\xb7|\xef\xbd\xb8|\xef\xbd\xb9|\xef\xbd\xba|\xef\xbd\xbb|\xef\xbd\xbc|\xef\xbd\xbd|\xef\xbd\xbe|\xef\xbd\xbf|\xef\xbe\x80|\xef\xbe\x81|\xef\xbe\x82|\xef\xbe\x83|\xef\xbe\x84|\xef\xbe\x85|\xef\xbe\x86|\xef\xbe\x87|\xef\xbe\x88|\xef\xbe\x89|\xef\xbe\x8a|\xef\xbe\x8b|\xef\xbe\x8c|\xef\xbe\x8d|\xef\xbe\x8e|\xef\xbe\x8f|\xef\xbe\x90|\xef\xbe\x91|\xef\xbe\x92|\xef\xbe\x93|\xef\xbe\x94|\xef\xbe\x95|\xef\xbe\x96|\xef\xbe\x97|\xef\xbe\x98|\xef\xbe\x99|\xef\xbe\x9a|\xef\xbe\x9b|\xef\xbe\x9c|\xef\xbe\x9d|\xef\xbe\x9e|\xef\xbe\x9f)/$_h2zKanaK{$1}/eg; $this; } sub strlen { my $this = shift; my $ch_re = '[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5}'; my $length = 0; foreach my $c(split(/($ch_re)/,$this->{str})) { next if(length($c) == 0); $length += ((length($c) >= 3) ? 2 : 1); } return $length; } sub _utf8_utf16 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } my $c1; my $c2; my $c3; my $c4; my $uc; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5})/ $T2U{$1} or ($T2U{$1} = ((length($1) == 1) ? pack("n", unpack("C", $1)) : (length($1) == 2) ? (($c1,$c2) = unpack("C2", $1), pack("n", (($c1 & 0x1F)<<6)|($c2 & 0x3F))) : (length($1) == 3) ? (($c1,$c2,$c3) = unpack("C3", $1), pack("n", (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F))) : (length($1) == 4) ? (($c1,$c2,$c3,$c4) = unpack("C4", $1), ($uc = ((($c1 & 0x07) << 18)|(($c2 & 0x3F) << 12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F)) - 0x10000), (($uc < 0x100000) ? pack("nn", (($uc >> 10) | 0xd800), (($uc & 0x3ff) | 0xdc00)) : "\0?")) : "\0?") ); /eg; $str; } sub sjis_jsky2 { my $this = shift; $this->_u2sj2($this->{str}); } # ----------------------------------------------------------------------------- # $code = Unicode::Japanese->getcode($str); # sub getcode { my $this = shift; my $str = shift; if( $]>=5.008 ) { Encode::_utf8_off($str); } my $l = length($str); if((($l % 4) == 0) and ($str =~ m/^(?:$RE{BOM4_BE}|$RE{BOM4_LE})/o)) { return 'utf32'; } if((($l % 2) == 0) and ($str =~ m/^(?:$RE{BOM2_BE}|$RE{BOM2_LE})/o)) { return 'utf16'; } my $str2; if(($l % 4) == 0) { $str2 = $str; 1 while($str2 =~ s/^(?:$RE{UTF32_BE})//o); if($str2 eq '') { return 'utf32-be'; } $str2 = $str; 1 while($str2 =~ s/^(?:$RE{UTF32_LE})//o); if($str2 eq '') { return 'utf32-le'; } } if($str !~ m/[\e\x80-\xff]/) { return 'ascii'; } if($str =~ m/$RE{JIS_0208}|$RE{JIS_0212}|$RE{JIS_ASC}|$RE{JIS_KANA}/o) { return 'jis'; } if($str =~ m/(?:$RE{E_JSKY})/o) { return 'sjis-jsky'; } $str2 = $str; 1 while($str2 =~ s/^(?:$RE{ASCII}|$RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C})//o); if($str2 eq '') { return 'euc'; } $str2 = $str; 1 while($str2 =~ s/^(?:$RE{ASCII}|$RE{SJIS_DBCS}|$RE{SJIS_KANA})//o); if($str2 eq '') { return 'sjis'; } my $str3; $str3 = $str2; 1 while($str3 =~ s/^(?:$RE{ASCII}|$RE{SJIS_DBCS}|$RE{SJIS_KANA}|$RE{E_IMODE})//o); if($str3 eq '') { return 'sjis-imode'; } $str3 = $str2; 1 while($str3 =~ s/^(?:$RE{ASCII}|$RE{SJIS_DBCS}|$RE{SJIS_KANA}|$RE{E_DOTI})//o); if($str3 eq '') { return 'sjis-doti'; } $str2 = $str; 1 while($str2 =~ s/^(?:$RE{UTF8})//o); if($str2 eq '') { return 'utf8'; } return 'unknown'; } sub sjis_imode2 { my $this = shift; $this->_u2si2($this->{str}); } sub _j2s2 { my $this = shift; my $esc = shift; my $str = shift; if($esc eq $RE{JIS_0212}) { $str =~ s/../$CHARCODE{UNDEF_SJIS}/g; } elsif($esc !~ m/^$RE{JIS_ASC}/) { $str =~ tr/\x21-\x7e/\xa1-\xfe/; if($esc =~ m/^$RE{JIS_0208}/) { $str =~ s/($RE{EUC_C})/ $J2S[unpack('n', $1)] or $this->_j2s3($1) /geo; } } $str; } sub _validate_utf8 { my $pkg = shift; my $str = shift; $str; } sub h2zKanaD { my $this = shift; if(!defined(%_h2zKanaD)) { $this->_loadConvTable; } $this->{str} =~ s/(\xef\xbd\xb3\xef\xbe\x9e|\xef\xbd\xb6\xef\xbe\x9e|\xef\xbd\xb7\xef\xbe\x9e|\xef\xbd\xb8\xef\xbe\x9e|\xef\xbd\xb9\xef\xbe\x9e|\xef\xbd\xba\xef\xbe\x9e|\xef\xbd\xbb\xef\xbe\x9e|\xef\xbd\xbc\xef\xbe\x9e|\xef\xbd\xbd\xef\xbe\x9e|\xef\xbd\xbe\xef\xbe\x9e|\xef\xbd\xbf\xef\xbe\x9e|\xef\xbe\x80\xef\xbe\x9e|\xef\xbe\x81\xef\xbe\x9e|\xef\xbe\x82\xef\xbe\x9e|\xef\xbe\x83\xef\xbe\x9e|\xef\xbe\x84\xef\xbe\x9e|\xef\xbe\x8a\xef\xbe\x9e|\xef\xbe\x8a\xef\xbe\x9f|\xef\xbe\x8b\xef\xbe\x9e|\xef\xbe\x8b\xef\xbe\x9f|\xef\xbe\x8c\xef\xbe\x9e|\xef\xbe\x8c\xef\xbe\x9f|\xef\xbe\x8d\xef\xbe\x9e|\xef\xbe\x8d\xef\xbe\x9f|\xef\xbe\x8e\xef\xbe\x9e|\xef\xbe\x8e\xef\xbe\x9f)/$_h2zKanaD{$1}/eg; $this; } sub z2hKanaK { my $this = shift; if(!defined(%_z2hKanaK)) { $this->_loadConvTable; } $this->{str} =~ s/(\xe3\x80\x81|\xe3\x80\x82|\xe3\x83\xbb|\xe3\x82\x9b|\xe3\x82\x9c|\xe3\x83\xbc|\xe3\x80\x8c|\xe3\x80\x8d|\xe3\x82\xa1|\xe3\x82\xa2|\xe3\x82\xa3|\xe3\x82\xa4|\xe3\x82\xa5|\xe3\x82\xa6|\xe3\x82\xa7|\xe3\x82\xa8|\xe3\x82\xa9|\xe3\x82\xaa|\xe3\x82\xab|\xe3\x82\xad|\xe3\x82\xaf|\xe3\x82\xb1|\xe3\x82\xb3|\xe3\x82\xb5|\xe3\x82\xb7|\xe3\x82\xb9|\xe3\x82\xbb|\xe3\x82\xbd|\xe3\x82\xbf|\xe3\x83\x81|\xe3\x83\x83|\xe3\x83\x84|\xe3\x83\x86|\xe3\x83\x88|\xe3\x83\x8a|\xe3\x83\x8b|\xe3\x83\x8c|\xe3\x83\x8d|\xe3\x83\x8e|\xe3\x83\x8f|\xe3\x83\x92|\xe3\x83\x95|\xe3\x83\x98|\xe3\x83\x9b|\xe3\x83\x9e|\xe3\x83\x9f|\xe3\x83\xa0|\xe3\x83\xa1|\xe3\x83\xa2|\xe3\x83\xa3|\xe3\x83\xa4|\xe3\x83\xa5|\xe3\x83\xa6|\xe3\x83\xa7|\xe3\x83\xa8|\xe3\x83\xa9|\xe3\x83\xaa|\xe3\x83\xab|\xe3\x83\xac|\xe3\x83\xad|\xe3\x83\xaf|\xe3\x83\xb2|\xe3\x83\xb3)/$_z2hKanaK{$1}/eg; $this; } sub h2zAlpha { my $this = shift; if(!defined(%_h2zAlpha)) { $this->_loadConvTable; } $this->{str} =~ s/(A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)/$_h2zAlpha{$1}/eg; $this; } sub _utf16_utf16 { my $this = shift; my $str = shift; if($str =~ s/^\xfe\xff//) { $str = $this->_utf16be_utf16($str); } elsif($str =~ s/^\xff\xfe//) { $str = $this->_utf16le_utf16($str); } else { $str = $this->_utf16be_utf16($str); } $str; } # ----------------------------------------------------------------------------- # Unicode 内 相互変換 # sub _ucs2_utf8 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } my $result = ''; for my $uc (unpack("n*", $str)) { $result .= $U2T[$uc] ? $U2T[$uc] : ($U2T[$uc] = ($uc < 0x80) ? chr($uc) : ($uc < 0x800) ? chr(0xC0 | ($uc >> 6)) . chr(0x80 | ($uc & 0x3F)) : chr(0xE0 | ($uc >> 12)) . chr(0x80 | (($uc >> 6) & 0x3F)) . chr(0x80 | ($uc & 0x3F))); } $result; } # ----------------------------------------------------------------------------- # $unijp->set($str,[$icode,[$encode]]); # sub set { my $this = shift; my $str = shift; my $icode = shift; my $encode = shift; if(ref($str)) { die "String->set, Param[1] is Ref.\n"; } if(ref($icode)) { die "String->set, Param[2] is Ref.\n"; } if(ref($encode)) { die "String->set, Param[3] is Ref.\n"; } if( $]>=5.008 ) { Encode::_utf8_off($str); } if(defined($encode)) { if($encode eq 'base64') { $str = $this->_decodeBase64($str); } else { die "String->set, Param[3] encode name error.\n"; } } if(!defined($icode)) { # omitted then 'utf8' $this->{str} = $this->_validate_utf8($str); $this->{icode} = 'utf8'; } else { $icode = lc($icode); if($icode eq 'auto') { $icode = $this->getcode($str); if($icode eq 'unknown') { $icode = 'binary'; } } if($icode eq 'utf8') { $this->{str} = $this->_validate_utf8($str); } elsif($icode eq 'ucs2') { $this->{str} = $this->_ucs2_utf8($str); } elsif($icode eq 'ucs4') { $this->{str} = $this->_ucs4_utf8($str); } elsif($icode eq 'utf16-be') { $this->{str} = $this->_utf16_utf8($this->_utf16be_utf16($str)); } elsif($icode eq 'utf16-le') { $this->{str} = $this->_utf16_utf8($this->_utf16le_utf16($str)); } elsif($icode eq 'utf16') { $this->{str} = $this->_utf16_utf8($this->_utf16_utf16($str)); } elsif($icode eq 'utf32-be') { $this->{str} = $this->_ucs4_utf8($this->_utf32be_ucs4($str)); } elsif($icode eq 'utf32-le') { $this->{str} = $this->_ucs4_utf8($this->_utf32le_ucs4($str)); } elsif($icode eq 'utf32') { $this->{str} = $this->_ucs4_utf8($this->_utf32_ucs4($str)); } elsif($icode eq 'jis') { $this->{str} = $this->_s2u($this->_j2s($str)); } elsif($icode eq 'euc') { $this->{str} = $this->_s2u($this->_e2s($str)); } elsif($icode eq 'sjis') { $this->{str} = $this->_s2u($str); } elsif($icode eq 'sjis-imode') { $this->{str} = $this->_si2u2($str); } elsif($icode eq 'sjis-imode1') { $this->{str} = $this->_si2u1($str); } elsif($icode eq 'sjis-imode2') { $this->{str} = $this->_si2u2($str); } elsif($icode eq 'sjis-doti') { $this->{str} = $this->_sd2u($str); } elsif($icode eq 'sjis-doti1') { $this->{str} = $this->_sd2u($str); } elsif($icode eq 'sjis-jsky') { $this->{str} = $this->_sj2u2($str); } elsif($icode eq 'sjis-jsky1') { $this->{str} = $this->_sj2u1($str); } elsif($icode eq 'sjis-jsky2') { $this->{str} = $this->_sj2u2($str); } elsif($icode eq 'ascii') { $this->{str} = $str; } elsif($icode eq 'binary') { $this->{str} = $str; } else { use Carp; croak "icode error [$icode]"; } $this->{icode} = $icode; } $this; } sub _sj2u2 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($s2u_table)) { $s2u_table = $this->_getFile('jcode/s2u.dat'); } if(!defined($ej2u1)) { $ej2u1 = $this->_getFile('jcode/emoji2/ej2u.dat'); } if(!defined($ej2u2)) { $ej2u2 = $this->_getFile('jcode/emoji2/ej2u2.dat'); } my $l; my $j1; my $uc; $str =~ s/($RE{SJIS_KANA}|$RE{SJIS_DBCS}|$RE{E_JSKY}|[\x00-\xff])/ (length($1) <= 2) ? ( $l = (unpack('n', $1) or unpack('C', $1)), ( ($l >= 0xa1 and $l <= 0xdf) ? ( $uc = substr($s2u_table, ($l - 0xa1) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0x8100 and $l <= 0x9fff) ? ( $uc = substr($s2u_table, ($l - 0x8100 + 0x3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xe000 and $l <= 0xffff) ? ( $uc = substr($s2u_table, ($l - 0xe000 + 0x1f3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l < 0x80) ? chr($l) : '?' ) ) : ( $l = $1, ( $l =~ s,^$RE{E_JSKY_START}($RE{E_JSKY1v1}),,o ? ( $j1 = $1, $uc = '', $l =~ s!($RE{E_JSKY2})!$uc .= substr($ej2u1, (unpack('n', $j1 . $1) - 0x4500) * 4, 4), ''!ego, $uc =~ tr,\0,,d, $uc ) : ( $l =~ s,^$RE{E_JSKY_START}($RE{E_JSKY1v2}),,o, $j1 = $1, $uc = '', $l =~ s!($RE{E_JSKY2})!$uc .= substr($ej2u2, (unpack('n', $j1 . $1) - 0x4f00) * 4, 4), ''!ego, $uc =~ tr,\0,,d, $uc ) ) ) /eg; $str; } sub _utf32_ucs4 { my $this = shift; my $str = shift; if($str =~ s/^\x00\x00\xfe\xff//) { $str = $this->_utf32be_ucs4($str); } elsif($str =~ s/^\xff\xfe\x00\x00//) { $str = $this->_utf32le_ucs4($str); } else { $str = $this->_utf32be_ucs4($str); } $str; } sub sjis_imode1 { my $this = shift; $this->_u2si1($this->{str}); } # ----------------------------------------------------------------------------- # $bytes_utf8 = $unijp->utf8(); # sub utf8 { my $this = shift; $this->{str}; } sub z2hKana { my $this = shift; $this->z2hKanaD; $this->z2hKanaK; $this; } # ----------------------------------------------------------------------------- # h2z/z2h Kana # sub h2zKana { my $this = shift; $this->h2zKanaD; $this->h2zKanaK; $this; } sub _s2e { my $this = shift; my $str = shift; if( $]>=5.008 ) { Encode::_utf8_off($str); } $str =~ s/($RE{SJIS_DBCS}|$RE{SJIS_KANA})/ $S2E[unpack('n', $1) or unpack('C', $1)] or $this->_s2e2($1) /geo; $str; } sub _u2sj1 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($u2s_table)) { $u2s_table = $this->_getFile('jcode/u2s.dat'); } if(!defined($eu2j1)) { $eu2j1 = $this->_getFile('jcode/emoji2/eu2j.dat'); } my $c1; my $c2; my $c3; my $c4; my $c5; my $c6; my $c; my $ch; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5})|(.)/ defined($2) ? '?' : ((length($1) == 1) ? $1 : (length($1) == 2) ? ( ($c1,$c2) = unpack("C2", $1), $ch = (($c1 & 0x1F)<<6)|($c2 & 0x3F), $c = substr($u2s_table, $ch * 2, 2), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 3) ? ( ($c1,$c2,$c3) = unpack("C3", $1), $ch = (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F), ( ($ch <= 0x9fff) ? $c = substr($u2s_table, $ch * 2, 2) : ($ch >= 0xf900 and $ch <= 0xffff) ? ( $c = substr($u2s_table, ($ch - 0xf900 + 0xa000) * 2, 2), (($c =~ tr,\0,,d)==2 and $c = "\0\0"), ) : ( $c = '?' ) ), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 4) ? ( ($c1,$c2,$c3,$c4) = unpack("C4", $1), $ch = (($c1 & 0x07)<<18)|(($c2 & 0x3F)<<12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F), ( ($ch >= 0x0ff000 and $ch <= 0x0fffff) ? ( $c = substr($eu2j1, ($ch - 0x0ff000) * 5, 5), $c =~ tr,\0,,d, ($c eq '') ? '?' : $c ) : '?' ) ) : '?' ) /eg; 1 while($str =~ s/($RE{E_JSKY_START})($RE{E_JSKY1})($RE{E_JSKY2}+)$RE{E_JSKY_END}$RE{E_JSKY_START}\2($RE{E_JSKY2})($RE{E_JSKY_END})/$1$2$3$4$5/o); $str; } sub _si2u2 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($s2u_table)) { $s2u_table = $this->_getFile('jcode/s2u.dat'); } if(!defined($ei2u2)) { $ei2u2 = $this->_getFile('jcode/emoji2/ei2u2.dat'); } $str =~ s/(\&\#(\d+);)/ ($2 >= 0xf800 and $2 <= 0xf9ff) ? pack('n', $2) : $1 /eg; my $l; my $uc; $str =~ s/($RE{SJIS_KANA}|$RE{SJIS_DBCS}|$RE{E_IMODE}|[\x00-\xff])/ $S2U{$1} or ($S2U{$1} = ( $l = (unpack('n', $1) or unpack('C', $1)), ( ($l >= 0xa1 and $l <= 0xdf) ? ( $uc = substr($s2u_table, ($l - 0xa1) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0x8100 and $l <= 0x9fff) ? ( $uc = substr($s2u_table, ($l - 0x8100 + 0x3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xf800 and $l <= 0xf9ff) ? ( $uc = substr($ei2u2, ($l - 0xf800) * 4, 4), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xe000 and $l <= 0xffff) ? ( $uc = substr($s2u_table, ($l - 0xe000 + 0x1f3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l < 0x80) ? chr($l) : '?' ) ) )/eg; $str; } sub _u2sj2 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($u2s_table)) { $u2s_table = $this->_getFile('jcode/u2s.dat'); } if(!defined($eu2j2)) { $eu2j2 = $this->_getFile('jcode/emoji2/eu2j2.dat'); } my $c1; my $c2; my $c3; my $c4; my $c5; my $c6; my $c; my $ch; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5})|(.)/ defined($2) ? '?' : ((length($1) == 1) ? $1 : (length($1) == 2) ? ( ($c1,$c2) = unpack("C2", $1), $ch = (($c1 & 0x1F)<<6)|($c2 & 0x3F), $c = substr($u2s_table, $ch * 2, 2), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 3) ? ( ($c1,$c2,$c3) = unpack("C3", $1), $ch = (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F), ( ($ch <= 0x9fff) ? $c = substr($u2s_table, $ch * 2, 2) : ($ch >= 0xf900 and $ch <= 0xffff) ? ( $c = substr($u2s_table, ($ch - 0xf900 + 0xa000) * 2, 2), (($c =~ tr,\0,,d)==2 and $c = "\0\0"), ) : ( $c = '?' ) ), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 4) ? ( ($c1,$c2,$c3,$c4) = unpack("C4", $1), $ch = (($c1 & 0x07)<<18)|(($c2 & 0x3F)<<12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F), ( ($ch >= 0x0ff000 and $ch <= 0x0fffff) ? ( $c = substr($eu2j2, ($ch - 0x0ff000) * 5, 5), $c =~ tr,\0,,d, ($c eq '') ? '?' : $c ) : '?' ) ) : '?' ) /eg; 1 while($str =~ s/($RE{E_JSKY_START})($RE{E_JSKY1})($RE{E_JSKY2}+)$RE{E_JSKY_END}$RE{E_JSKY_START}\2($RE{E_JSKY2})($RE{E_JSKY_END})/$1$2$3$4$5/o); $str; } # ----------------------------------------------------------------------------- # $bytes_str = $unijp->conv($ocode,[$encode]); # sub conv { my $this = shift; my $ocode = shift; my $encode = shift; my (@option) = @_; my $res; if(!defined($ocode)) { use Carp; croak(qq(String->conv, Param[1] is undef.)); } elsif($ocode eq 'utf8') { $res = $this->utf8; } elsif($ocode eq 'euc') { $res = $this->euc; } elsif($ocode eq 'jis') { $res = $this->jis; } elsif($ocode eq 'sjis') { $res = $this->sjis; } elsif($ocode eq 'sjis-imode') { $res = $this->sjis_imode; } elsif($ocode eq 'sjis-imode1') { $res = $this->sjis_imode1; } elsif($ocode eq 'sjis-imode2') { $res = $this->sjis_imode2; } elsif($ocode eq 'sjis-doti') { $res = $this->sjis_doti; } elsif($ocode eq 'sjis-doti1') { $res = $this->sjis_doti; } elsif($ocode eq 'sjis-jsky') { $res = $this->sjis_jsky; } elsif($ocode eq 'sjis-jsky1') { $res = $this->sjis_jsky1; } elsif($ocode eq 'sjis-jsky2') { $res = $this->sjis_jsky2; } elsif($ocode eq 'ucs2') { $res = $this->ucs2; } elsif($ocode eq 'ucs4') { $res = $this->ucs4; } elsif($ocode eq 'utf16') { $res = $this->utf16; } elsif($ocode eq 'binary') { $res = $this->{str}; } else { use Carp; croak(qq(String->conv, Param[1] "$ocode" is error.)); } if(defined($encode)) { if($encode eq 'base64') { $res = $this->_encodeBase64($res, @option); } else { use Carp; croak(qq(String->conv, Param[2] "$encode" encode name error.)); } } $res; } # ----------------------------------------------------------------------------- # $bytes_doti = $unijp->sjis_doti(); # sub sjis_doti { my $this = shift; $this->_u2sd($this->{str}); } sub _e2s { my $this = shift; my $str = shift; $str =~ s/($RE{EUC_KANA}|$RE{EUC_0212}|$RE{EUC_C})/ $E2S[unpack('n', $1) or unpack('N', "\0" . $1)] or $this->_e2s2($1) /geo; $str; } sub _utf16be_utf16 { my $this = shift; my $str = shift; $str; } sub hira2kata { my $this = shift; if(!defined(%_hira2kata)) { $this->_loadConvTable; } $this->{str} =~ s/(\xe3\x81\x81|\xe3\x81\x82|\xe3\x81\x83|\xe3\x81\x84|\xe3\x81\x85|\xe3\x81\x86|\xe3\x81\x87|\xe3\x81\x88|\xe3\x81\x89|\xe3\x81\x8a|\xe3\x81\x8b|\xe3\x81\x8c|\xe3\x81\x8d|\xe3\x81\x8e|\xe3\x81\x8f|\xe3\x81\x90|\xe3\x81\x91|\xe3\x81\x92|\xe3\x81\x93|\xe3\x81\x94|\xe3\x81\x95|\xe3\x81\x96|\xe3\x81\x97|\xe3\x81\x98|\xe3\x81\x99|\xe3\x81\x9a|\xe3\x81\x9b|\xe3\x81\x9c|\xe3\x81\x9d|\xe3\x81\x9e|\xe3\x81\x9f|\xe3\x81\xa0|\xe3\x81\xa1|\xe3\x81\xa2|\xe3\x81\xa3|\xe3\x81\xa4|\xe3\x81\xa5|\xe3\x81\xa6|\xe3\x81\xa7|\xe3\x81\xa8|\xe3\x81\xa9|\xe3\x81\xaa|\xe3\x81\xab|\xe3\x81\xac|\xe3\x81\xad|\xe3\x81\xae|\xe3\x81\xaf|\xe3\x81\xb0|\xe3\x81\xb1|\xe3\x81\xb2|\xe3\x81\xb3|\xe3\x81\xb4|\xe3\x81\xb5|\xe3\x81\xb6|\xe3\x81\xb7|\xe3\x81\xb8|\xe3\x81\xb9|\xe3\x81\xba|\xe3\x81\xbb|\xe3\x81\xbc|\xe3\x81\xbd|\xe3\x81\xbe|\xe3\x81\xbf|\xe3\x82\x80|\xe3\x82\x81|\xe3\x82\x82|\xe3\x82\x83|\xe3\x82\x84|\xe3\x82\x85|\xe3\x82\x86|\xe3\x82\x87|\xe3\x82\x88|\xe3\x82\x89|\xe3\x82\x8a|\xe3\x82\x8b|\xe3\x82\x8c|\xe3\x82\x8d|\xe3\x82\x8e|\xe3\x82\x8f|\xe3\x82\x90|\xe3\x82\x91|\xe3\x82\x92|\xe3\x82\x93)/$_hira2kata{$1}/eg; $this; } # ----------------------------------------------------------------------------- # $bytes_eucjp = $unijp->euc(); # sub euc { my $this = shift; $this->_s2e($this->sjis); } sub _j2s3 { my $this = shift; my $c = shift; my ($c1, $c2) = unpack('CC', $c); if ($c1 % 2) { $c1 = ($c1>>1) + ($c1 < 0xdf ? 0x31 : 0x71); $c2 -= 0x60 + ($c2 < 0xe0); } else { $c1 = ($c1>>1) + ($c1 < 0xdf ? 0x30 : 0x70); $c2 -= 2; } $J2S[unpack('n', $c)] = pack('CC', $c1, $c2); } # ----------------------------------------------------------------------------- # $bytes_ucs4 = $unijp->ucs4(); # sub ucs4 { my $this = shift; $this->_utf8_ucs4($this->{str}); } sub _sd2u { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($s2u_table)) { $s2u_table = $this->_getFile('jcode/s2u.dat'); } if(!defined($ed2u)) { $ed2u = $this->_getFile('jcode/emoji2/ed2u.dat'); } $str =~ s/(\&\#(\d+);)/ ($2 >= 0xf000 and $2 <= 0xf4ff) ? pack('n', $2) : $1 /eg; my $l; my $uc; $str =~ s/($RE{SJIS_KANA}|$RE{SJIS_DBCS}|$RE{E_DOTI}|[\x00-\xff])/ $S2U{$1} or ($S2U{$1} = ( $l = (unpack('n', $1) or unpack('C', $1)), ( ($l >= 0xa1 and $l <= 0xdf) ? ( $uc = substr($s2u_table, ($l - 0xa1) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0x8100 and $l <= 0x9fff) ? ( $uc = substr($s2u_table, ($l - 0x8100 + 0x3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xf000 and $l <= 0xf4ff) ? ( $uc = substr($ed2u, ($l - 0xf000) * 4, 4), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xe000 and $l <= 0xffff) ? ( $uc = substr($s2u_table, ($l - 0xe000 + 0x1f3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l < 0x80) ? chr($l) : '?' ) ) )/eg; $str; } sub sjis_doti1 { my $this = shift; $this->_u2sd($this->{str}); } # ----------------------------------------------------------------------------- # conversion methods (private). # sub _s2j { my $this = shift; my $str = shift; $str =~ s/((?:$RE{SJIS_DBCS}|$RE{SJIS_KANA})+)/ $this->_s2j2($1) . $ESC{ASC} /geo; $str; } sub _s2e2 { my $this = shift; my $c = shift; my ($c1, $c2) = unpack('CC', $c); if (0xa1 <= $c1 && $c1 <= 0xdf) { $c2 = $c1; $c1 = 0x8e; } elsif (0x9f <= $c2) { $c1 = $c1 * 2 - ($c1 >= 0xe0 ? 0xe0 : 0x60); $c2 += 2; } else { $c1 = $c1 * 2 - ($c1 >= 0xe0 ? 0xe1 : 0x61); $c2 += 0x60 + ($c2 < 0x7f); } $S2E[unpack('n', $c) or unpack('C', $1)] = pack('CC', $c1, $c2); } sub z2hKanaD { my $this = shift; if(!defined(%_z2hKanaD)) { $this->_loadConvTable; } $this->{str} =~ s/(\xe3\x82\xac|\xe3\x82\xae|\xe3\x82\xb0|\xe3\x82\xb2|\xe3\x82\xb4|\xe3\x82\xb6|\xe3\x82\xb8|\xe3\x82\xba|\xe3\x82\xbc|\xe3\x82\xbe|\xe3\x83\x80|\xe3\x83\x82|\xe3\x83\x85|\xe3\x83\x87|\xe3\x83\x89|\xe3\x83\x90|\xe3\x83\x91|\xe3\x83\x93|\xe3\x83\x94|\xe3\x83\x96|\xe3\x83\x97|\xe3\x83\x99|\xe3\x83\x9a|\xe3\x83\x9c|\xe3\x83\x9d|\xe3\x83\xb4)/$_z2hKanaD{$1}/eg; $this; } sub _u2sd { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($u2s_table)) { $u2s_table = $this->_getFile('jcode/u2s.dat'); } if(!defined($eu2d)) { $eu2d = $this->_getFile('jcode/emoji2/eu2d.dat'); } my $c1; my $c2; my $c3; my $c4; my $c5; my $c6; my $c; my $ch; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5})|(.)/ defined($2) ? '?' : ((length($1) == 1) ? $1 : (length($1) == 2) ? ( ($c1,$c2) = unpack("C2", $1), $ch = (($c1 & 0x1F)<<6)|($c2 & 0x3F), $c = substr($u2s_table, $ch * 2, 2), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 3) ? ( ($c1,$c2,$c3) = unpack("C3", $1), $ch = (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F), ( ($ch <= 0x9fff) ? $c = substr($u2s_table, $ch * 2, 2) : ($ch >= 0xf900 and $ch <= 0xffff) ? ( $c = substr($u2s_table, ($ch - 0xf900 + 0xa000) * 2, 2), (($c =~ tr,\0,,d)==2 and $c = "\0\0"), ) : ( $c = '?' ) ), ($c eq "\0\0") ? '?' : $c ) : (length($1) == 4) ? ( ($c1,$c2,$c3,$c4) = unpack("C4", $1), $ch = (($c1 & 0x07)<<18)|(($c2 & 0x3F)<<12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F), ( ($ch >= 0x0ff000 and $ch <= 0x0fffff) ? ( $c = substr($eu2d, ($ch - 0x0ff000) * 2, 2), $c =~ tr,\0,,d, ($c eq '') ? '?' : $c ) : '?' ) ) : '?' ) /eg; $str; } sub _utf8_ucs2 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } my $c1; my $c2; my $c3; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5}|(.))/ defined($2)?"\0$2": $T2U{$1} or ($T2U{$1} = ((length($1) == 1) ? pack("n", unpack("C", $1)) : (length($1) == 2) ? (($c1,$c2) = unpack("C2", $1), pack("n", (($c1 & 0x1F)<<6)|($c2 & 0x3F))) : (length($1) == 3) ? (($c1,$c2,$c3) = unpack("C3", $1), pack("n", (($c1 & 0x0F)<<12)|(($c2 & 0x3F)<<6)|($c3 & 0x3F))) : "\0?")) /eg; $str; } sub join_csv { my $sub = \&joinCsv; local($^W) = 0; *join_csv = $sub; goto &$sub; } # ----------------------------------------------------------------------------- # sjis/絵文字 => utf8 # sub _s2u { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } if(!defined($s2u_table)) { $s2u_table = $this->_getFile('jcode/s2u.dat'); } my $l; my $uc; $str =~ s/($RE{SJIS_KANA}|$RE{SJIS_DBCS}|[\x00-\xff])/ $S2U{$1} or ($S2U{$1} = ( $l = (unpack('n', $1) or unpack('C', $1)), ( ($l >= 0xa1 and $l <= 0xdf) ? ( $uc = substr($s2u_table, ($l - 0xa1) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0x8100 and $l <= 0x9fff) ? ( $uc = substr($s2u_table, ($l - 0x8100 + 0x3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l >= 0xe000 and $l <= 0xfcff) ? ( $uc = substr($s2u_table, ($l - 0xe000 + 0x1f3f) * 3, 3), $uc =~ tr,\0,,d, $uc ) : ($l < 0x80) ? chr($l) : '?' ) ) )/eg; $str; } sub _utf32le_ucs4 { my $this = shift; my $str = shift; my $result = ''; foreach my $ch (unpack('V*', $str)) { $result .= pack('N', $ch); } $result; } # ----------------------------------------------------------------------------- # $bytes_jsky = $unijp->sjis_jsky(); # sub sjis_jsky { my $this = shift; $this->_u2sj2($this->{str}); } sub _e2s2 { my $this = shift; my $c = shift; my ($c1, $c2) = unpack('CC', $c); if ($c1 == 0x8e) { # SS2 $E2S[unpack('n', $c)] = chr($c2); } elsif ($c1 == 0x8f) { # SS3 $E2S[unpack('N', "\0" . $c)] = $CHARCODE{UNDEF_SJIS}; } else { #SS1 or X0208 if ($c1 % 2) { $c1 = ($c1>>1) + ($c1 < 0xdf ? 0x31 : 0x71); $c2 -= 0x60 + ($c2 < 0xe0); } else { $c1 = ($c1>>1) + ($c1 < 0xdf ? 0x30 : 0x70); $c2 -= 2; } $E2S[unpack('n', $c)] = pack('CC', $c1, $c2); } } # ----------------------------------------------------------------------------- # $bytes_imode = $unijp->sjis_imode(); # sub sjis_imode { my $this = shift; $this->_u2si2($this->{str}); } sub _s2j2 { my $this = shift; my $str = shift; $str =~ s/((?:$RE{SJIS_DBCS})+|(?:$RE{SJIS_KANA})+)/ my $s = $1; if($s =~ m,^$RE{SJIS_KANA},) { $s =~ tr,\xa1-\xdf,\x21-\x5f,; $ESC{KANA} . $s } else { $s =~ s!($RE{SJIS_DBCS})! $S2J[unpack('n', $1)] or $this->_s2j3($1) !geo; $ESC{JIS_0208} . $s; } /geo; $str; } # ----------------------------------------------------------------------------- # $bytes_iso2022jp = $unijp->jis(); # sub jis { my $this = shift; $this->_s2j($this->sjis); } # ----------------------------------------------------------------------------- # encode/decode sub _encodeBase64 { my $this = shift; my $str = shift; my $eol = shift; my $res = ""; $eol = "\n" unless defined $eol; pos($str) = 0; # ensure start at the beginning while ($str =~ /(.{1,45})/gs) { $res .= substr(pack('u', $1), 1); chop($res); } $res =~ tr|` -_|AA-Za-z0-9+/|; # `# help emacs # fix padding at the end my $padding = (3 - length($str) % 3) % 3; $res =~ s/.{$padding}$/'=' x $padding/e if $padding; # break encoded string into lines of no more than 76 characters each if (length $eol) { $res =~ s/(.{1,76})/$1$eol/g; } $res; } sub _utf8_ucs4 { my $this = shift; my $str = shift; if(!defined($str)) { return ''; } my $c1; my $c2; my $c3; my $c4; my $c5; my $c6; $str =~ s/([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5}|(.))/ defined($2) ? "\0\0\0$2" : (length($1) == 1) ? pack("N", unpack("C", $1)) : (length($1) == 2) ? (($c1,$c2) = unpack("C2", $1), pack("N", (($c1 & 0x1F) << 6)|($c2 & 0x3F))) : (length($1) == 3) ? (($c1,$c2,$c3) = unpack("C3", $1), pack("N", (($c1 & 0x0F) << 12)|(($c2 & 0x3F) << 6)| ($c3 & 0x3F))) : (length($1) == 4) ? (($c1,$c2,$c3,$c4) = unpack("C4", $1), pack("N", (($c1 & 0x07) << 18)|(($c2 & 0x3F) << 12)| (($c3 & 0x3f) << 6)|($c4 & 0x3F))) : (length($1) == 5) ? (($c1,$c2,$c3,$c4,$c5) = unpack("C5", $1), pack("N", (($c1 & 0x03) << 24)|(($c2 & 0x3F) << 18)| (($c3 & 0x3f) << 12)|(($c4 & 0x3f) << 6)| ($c5 & 0x3F))) : (($c1,$c2,$c3,$c4,$c5,$c6) = unpack("C6", $1), pack("N", (($c1 & 0x03) << 30)|(($c2 & 0x3F) << 24)| (($c3 & 0x3f) << 18)|(($c4 & 0x3f) << 12)| (($c5 & 0x3f) << 6)|($c6 & 0x3F))) /eg; $str; } # ----------------------------------------------------------------------------- # $bytes_utf8 = $unijp->get(); # sub get { my $this = shift; $this->{str}; } sub z2h { my $this = shift; $this->z2hKana; $this->z2hNum; $this->z2hAlpha; $this->z2hSym; $this; } # ----------------------------------------------------------------------------- # $chars_utf8 = $unijp->getu(); # sub getu { my $this = shift; my $str = $this->{str}; if( $]>=5.008 && $this->{icode} ne 'binary' ) { Encode::_utf8_on($str); } $str; } # ----------------------------------------------------------------------------- # split/join Csv # sub split_csv { my $sub = \&splitCsv; local($^W) = 0; *split_csv = $sub; goto &$sub; } sub _loadConvTable { %_h2zNum = ( "0" => "\xef\xbc\x90", "1" => "\xef\xbc\x91", "2" => "\xef\xbc\x92", "3" => "\xef\xbc\x93", "4" => "\xef\xbc\x94", "5" => "\xef\xbc\x95", "6" => "\xef\xbc\x96", "7" => "\xef\xbc\x97", "8" => "\xef\xbc\x98", "9" => "\xef\xbc\x99", ); %_z2hNum = ( "\xef\xbc\x90" => "0", "\xef\xbc\x91" => "1", "\xef\xbc\x92" => "2", "\xef\xbc\x93" => "3", "\xef\xbc\x94" => "4", "\xef\xbc\x95" => "5", "\xef\xbc\x96" => "6", "\xef\xbc\x97" => "7", "\xef\xbc\x98" => "8", "\xef\xbc\x99" => "9", ); %_h2zAlpha = ( "A" => "\xef\xbc\xa1", "B" => "\xef\xbc\xa2", "C" => "\xef\xbc\xa3", "D" => "\xef\xbc\xa4", "E" => "\xef\xbc\xa5", "F" => "\xef\xbc\xa6", "G" => "\xef\xbc\xa7", "H" => "\xef\xbc\xa8", "I" => "\xef\xbc\xa9", "J" => "\xef\xbc\xaa", "K" => "\xef\xbc\xab", "L" => "\xef\xbc\xac", "M" => "\xef\xbc\xad", "N" => "\xef\xbc\xae", "O" => "\xef\xbc\xaf", "P" => "\xef\xbc\xb0", "Q" => "\xef\xbc\xb1", "R" => "\xef\xbc\xb2", "S" => "\xef\xbc\xb3", "T" => "\xef\xbc\xb4", "U" => "\xef\xbc\xb5", "V" => "\xef\xbc\xb6", "W" => "\xef\xbc\xb7", "X" => "\xef\xbc\xb8", "Y" => "\xef\xbc\xb9", "Z" => "\xef\xbc\xba", "a" => "\xef\xbd\x81", "b" => "\xef\xbd\x82", "c" => "\xef\xbd\x83", "d" => "\xef\xbd\x84", "e" => "\xef\xbd\x85", "f" => "\xef\xbd\x86", "g" => "\xef\xbd\x87", "h" => "\xef\xbd\x88", "i" => "\xef\xbd\x89", "j" => "\xef\xbd\x8a", "k" => "\xef\xbd\x8b", "l" => "\xef\xbd\x8c", "m" => "\xef\xbd\x8d", "n" => "\xef\xbd\x8e", "o" => "\xef\xbd\x8f", "p" => "\xef\xbd\x90", "q" => "\xef\xbd\x91", "r" => "\xef\xbd\x92", "s" => "\xef\xbd\x93", "t" => "\xef\xbd\x94", "u" => "\xef\xbd\x95", "v" => "\xef\xbd\x96", "w" => "\xef\xbd\x97", "x" => "\xef\xbd\x98", "y" => "\xef\xbd\x99", "z" => "\xef\xbd\x9a", ); %_z2hAlpha = ( "\xef\xbc\xa1" => "A", "\xef\xbc\xa2" => "B", "\xef\xbc\xa3" => "C", "\xef\xbc\xa4" => "D", "\xef\xbc\xa5" => "E", "\xef\xbc\xa6" => "F", "\xef\xbc\xa7" => "G", "\xef\xbc\xa8" => "H", "\xef\xbc\xa9" => "I", "\xef\xbc\xaa" => "J", "\xef\xbc\xab" => "K", "\xef\xbc\xac" => "L", "\xef\xbc\xad" => "M", "\xef\xbc\xae" => "N", "\xef\xbc\xaf" => "O", "\xef\xbc\xb0" => "P", "\xef\xbc\xb1" => "Q", "\xef\xbc\xb2" => "R", "\xef\xbc\xb3" => "S", "\xef\xbc\xb4" => "T", "\xef\xbc\xb5" => "U", "\xef\xbc\xb6" => "V", "\xef\xbc\xb7" => "W", "\xef\xbc\xb8" => "X", "\xef\xbc\xb9" => "Y", "\xef\xbc\xba" => "Z", "\xef\xbd\x81" => "a", "\xef\xbd\x82" => "b", "\xef\xbd\x83" => "c", "\xef\xbd\x84" => "d", "\xef\xbd\x85" => "e", "\xef\xbd\x86" => "f", "\xef\xbd\x87" => "g", "\xef\xbd\x88" => "h", "\xef\xbd\x89" => "i", "\xef\xbd\x8a" => "j", "\xef\xbd\x8b" => "k", "\xef\xbd\x8c" => "l", "\xef\xbd\x8d" => "m", "\xef\xbd\x8e" => "n", "\xef\xbd\x8f" => "o", "\xef\xbd\x90" => "p", "\xef\xbd\x91" => "q", "\xef\xbd\x92" => "r", "\xef\xbd\x93" => "s", "\xef\xbd\x94" => "t", "\xef\xbd\x95" => "u", "\xef\xbd\x96" => "v", "\xef\xbd\x97" => "w", "\xef\xbd\x98" => "x", "\xef\xbd\x99" => "y", "\xef\xbd\x9a" => "z", ); %_h2zSym = ( "\x20" => "\xe3\x80\x80", "\x21" => "\xef\xbc\x81", "\x22" => "\xe2\x80\x9d", "\x23" => "\xef\xbc\x83", "\x24" => "\xef\xbc\x84", "\x25" => "\xef\xbc\x85", "\x26" => "\xef\xbc\x86", "\x27" => "\xe2\x80\x99", "\x28" => "\xef\xbc\x88", "\x29" => "\xef\xbc\x89", "\x2a" => "\xef\xbc\x8a", "\x2b" => "\xef\xbc\x8b", "\x2c" => "\xef\xbc\x8c", "\x2d" => "\xef\xbc\x8d", "\x2e" => "\xef\xbc\x8e", "\x2f" => "\xef\xbc\x8f", "\x3a" => "\xef\xbc\x9a", "\x3b" => "\xef\xbc\x9b", "\x3c" => "\xef\xbc\x9c", "\x3d" => "\xef\xbc\x9d", "\x3e" => "\xef\xbc\x9e", "\x3f" => "\xef\xbc\x9f", "\x40" => "\xef\xbc\xa0", "\x5b" => "\xef\xbc\xbb", "\x5c" => "\xef\xbf\xa5", "\x5d" => "\xef\xbc\xbd", "\x5e" => "\xef\xbc\xbe", "_" => "\xef\xbc\xbf", "\x60" => "\xef\xbd\x80", "\x7b" => "\xef\xbd\x9b", "\x7c" => "\xef\xbd\x9c", "\x7d" => "\xef\xbd\x9d", "\x7e" => "\xef\xbd\x9e", ); %_z2hSym = ( "\xe3\x80\x80" => "\x20", "\xef\xbc\x8c" => "\x2c", "\xef\xbc\x8e" => "\x2e", "\xef\xbc\x9a" => "\x3a", "\xef\xbc\x9b" => "\x3b", "\xef\xbc\x9f" => "\x3f", "\xef\xbc\x81" => "\x21", "\xef\xbd\x80" => "\x60", "\xef\xbc\xbe" => "\x5e", "\xef\xbc\xbf" => "_", "\xef\xbc\x8f" => "\x2f", "\xef\xbd\x9e" => "\x7e", "\xef\xbd\x9c" => "\x7c", "\xe2\x80\x99" => "\x27", "\xe2\x80\x9d" => "\x22", "\xef\xbc\x88" => "\x28", "\xef\xbc\x89" => "\x29", "\xef\xbc\xbb" => "\x5b", "\xef\xbc\xbd" => "\x5d", "\xef\xbd\x9b" => "\x7b", "\xef\xbd\x9d" => "\x7d", "\xef\xbc\x8b" => "\x2b", "\xef\xbc\x8d" => "\x2d", "\xef\xbc\x9d" => "\x3d", "\xef\xbc\x9c" => "\x3c", "\xef\xbc\x9e" => "\x3e", "\xef\xbf\xa5" => "\x5c", "\xef\xbc\x84" => "\x24", "\xef\xbc\x85" => "\x25", "\xef\xbc\x83" => "\x23", "\xef\xbc\x86" => "\x26", "\xef\xbc\x8a" => "\x2a", "\xef\xbc\xa0" => "\x40", ); %_h2zKanaK = ( "\xef\xbd\xa1" => "\xe3\x80\x82", "\xef\xbd\xa2" => "\xe3\x80\x8c", "\xef\xbd\xa3" => "\xe3\x80\x8d", "\xef\xbd\xa4" => "\xe3\x80\x81", "\xef\xbd\xa5" => "\xe3\x83\xbb", "\xef\xbd\xa6" => "\xe3\x83\xb2", "\xef\xbd\xa7" => "\xe3\x82\xa1", "\xef\xbd\xa8" => "\xe3\x82\xa3", "\xef\xbd\xa9" => "\xe3\x82\xa5", "\xef\xbd\xaa" => "\xe3\x82\xa7", "\xef\xbd\xab" => "\xe3\x82\xa9", "\xef\xbd\xac" => "\xe3\x83\xa3", "\xef\xbd\xad" => "\xe3\x83\xa5", "\xef\xbd\xae" => "\xe3\x83\xa7", "\xef\xbd\xaf" => "\xe3\x83\x83", "\xef\xbd\xb0" => "\xe3\x83\xbc", "\xef\xbd\xb1" => "\xe3\x82\xa2", "\xef\xbd\xb2" => "\xe3\x82\xa4", "\xef\xbd\xb3" => "\xe3\x82\xa6", "\xef\xbd\xb4" => "\xe3\x82\xa8", "\xef\xbd\xb5" => "\xe3\x82\xaa", "\xef\xbd\xb6" => "\xe3\x82\xab", "\xef\xbd\xb7" => "\xe3\x82\xad", "\xef\xbd\xb8" => "\xe3\x82\xaf", "\xef\xbd\xb9" => "\xe3\x82\xb1", "\xef\xbd\xba" => "\xe3\x82\xb3", "\xef\xbd\xbb" => "\xe3\x82\xb5", "\xef\xbd\xbc" => "\xe3\x82\xb7", "\xef\xbd\xbd" => "\xe3\x82\xb9", "\xef\xbd\xbe" => "\xe3\x82\xbb", "\xef\xbd\xbf" => "\xe3\x82\xbd", "\xef\xbe\x80" => "\xe3\x82\xbf", "\xef\xbe\x81" => "\xe3\x83\x81", "\xef\xbe\x82" => "\xe3\x83\x84", "\xef\xbe\x83" => "\xe3\x83\x86", "\xef\xbe\x84" => "\xe3\x83\x88", "\xef\xbe\x85" => "\xe3\x83\x8a", "\xef\xbe\x86" => "\xe3\x83\x8b", "\xef\xbe\x87" => "\xe3\x83\x8c", "\xef\xbe\x88" => "\xe3\x83\x8d", "\xef\xbe\x89" => "\xe3\x83\x8e", "\xef\xbe\x8a" => "\xe3\x83\x8f", "\xef\xbe\x8b" => "\xe3\x83\x92", "\xef\xbe\x8c" => "\xe3\x83\x95", "\xef\xbe\x8d" => "\xe3\x83\x98", "\xef\xbe\x8e" => "\xe3\x83\x9b", "\xef\xbe\x8f" => "\xe3\x83\x9e", "\xef\xbe\x90" => "\xe3\x83\x9f", "\xef\xbe\x91" => "\xe3\x83\xa0", "\xef\xbe\x92" => "\xe3\x83\xa1", "\xef\xbe\x93" => "\xe3\x83\xa2", "\xef\xbe\x94" => "\xe3\x83\xa4", "\xef\xbe\x95" => "\xe3\x83\xa6", "\xef\xbe\x96" => "\xe3\x83\xa8", "\xef\xbe\x97" => "\xe3\x83\xa9", "\xef\xbe\x98" => "\xe3\x83\xaa", "\xef\xbe\x99" => "\xe3\x83\xab", "\xef\xbe\x9a" => "\xe3\x83\xac", "\xef\xbe\x9b" => "\xe3\x83\xad", "\xef\xbe\x9c" => "\xe3\x83\xaf", "\xef\xbe\x9d" => "\xe3\x83\xb3", "\xef\xbe\x9e" => "\xe3\x82\x9b", "\xef\xbe\x9f" => "\xe3\x82\x9c", ); %_z2hKanaK = ( "\xe3\x80\x81" => "\xef\xbd\xa4", "\xe3\x80\x82" => "\xef\xbd\xa1", "\xe3\x83\xbb" => "\xef\xbd\xa5", "\xe3\x82\x9b" => "\xef\xbe\x9e", "\xe3\x82\x9c" => "\xef\xbe\x9f", "\xe3\x83\xbc" => "\xef\xbd\xb0", "\xe3\x80\x8c" => "\xef\xbd\xa2", "\xe3\x80\x8d" => "\xef\xbd\xa3", "\xe3\x82\xa1" => "\xef\xbd\xa7", "\xe3\x82\xa2" => "\xef\xbd\xb1", "\xe3\x82\xa3" => "\xef\xbd\xa8", "\xe3\x82\xa4" => "\xef\xbd\xb2", "\xe3\x82\xa5" => "\xef\xbd\xa9", "\xe3\x82\xa6" => "\xef\xbd\xb3", "\xe3\x82\xa7" => "\xef\xbd\xaa", "\xe3\x82\xa8" => "\xef\xbd\xb4", "\xe3\x82\xa9" => "\xef\xbd\xab", "\xe3\x82\xaa" => "\xef\xbd\xb5", "\xe3\x82\xab" => "\xef\xbd\xb6", "\xe3\x82\xad" => "\xef\xbd\xb7", "\xe3\x82\xaf" => "\xef\xbd\xb8", "\xe3\x82\xb1" => "\xef\xbd\xb9", "\xe3\x82\xb3" => "\xef\xbd\xba", "\xe3\x82\xb5" => "\xef\xbd\xbb", "\xe3\x82\xb7" => "\xef\xbd\xbc", "\xe3\x82\xb9" => "\xef\xbd\xbd", "\xe3\x82\xbb" => "\xef\xbd\xbe", "\xe3\x82\xbd" => "\xef\xbd\xbf", "\xe3\x82\xbf" => "\xef\xbe\x80", "\xe3\x83\x81" => "\xef\xbe\x81", "\xe3\x83\x83" => "\xef\xbd\xaf", "\xe3\x83\x84" => "\xef\xbe\x82", "\xe3\x83\x86" => "\xef\xbe\x83", "\xe3\x83\x88" => "\xef\xbe\x84", "\xe3\x83\x8a" => "\xef\xbe\x85", "\xe3\x83\x8b" => "\xef\xbe\x86", "\xe3\x83\x8c" => "\xef\xbe\x87", "\xe3\x83\x8d" => "\xef\xbe\x88", "\xe3\x83\x8e" => "\xef\xbe\x89", "\xe3\x83\x8f" => "\xef\xbe\x8a", "\xe3\x83\x92" => "\xef\xbe\x8b", "\xe3\x83\x95" => "\xef\xbe\x8c", "\xe3\x83\x98" => "\xef\xbe\x8d", "\xe3\x83\x9b" => "\xef\xbe\x8e", "\xe3\x83\x9e" => "\xef\xbe\x8f", "\xe3\x83\x9f" => "\xef\xbe\x90", "\xe3\x83\xa0" => "\xef\xbe\x91", "\xe3\x83\xa1" => "\xef\xbe\x92", "\xe3\x83\xa2" => "\xef\xbe\x93", "\xe3\x83\xa3" => "\xef\xbd\xac", "\xe3\x83\xa4" => "\xef\xbe\x94", "\xe3\x83\xa5" => "\xef\xbd\xad", "\xe3\x83\xa6" => "\xef\xbe\x95", "\xe3\x83\xa7" => "\xef\xbd\xae", "\xe3\x83\xa8" => "\xef\xbe\x96", "\xe3\x83\xa9" => "\xef\xbe\x97", "\xe3\x83\xaa" => "\xef\xbe\x98", "\xe3\x83\xab" => "\xef\xbe\x99", "\xe3\x83\xac" => "\xef\xbe\x9a", "\xe3\x83\xad" => "\xef\xbe\x9b", "\xe3\x83\xaf" => "\xef\xbe\x9c", "\xe3\x83\xb2" => "\xef\xbd\xa6", "\xe3\x83\xb3" => "\xef\xbe\x9d", ); %_h2zKanaD = ( "\xef\xbd\xb3\xef\xbe\x9e" => "\xe3\x83\xb4", "\xef\xbd\xb6\xef\xbe\x9e" => "\xe3\x82\xac", "\xef\xbd\xb7\xef\xbe\x9e" => "\xe3\x82\xae", "\xef\xbd\xb8\xef\xbe\x9e" => "\xe3\x82\xb0", "\xef\xbd\xb9\xef\xbe\x9e" => "\xe3\x82\xb2", "\xef\xbd\xba\xef\xbe\x9e" => "\xe3\x82\xb4", "\xef\xbd\xbb\xef\xbe\x9e" => "\xe3\x82\xb6", "\xef\xbd\xbc\xef\xbe\x9e" => "\xe3\x82\xb8", "\xef\xbd\xbd\xef\xbe\x9e" => "\xe3\x82\xba", "\xef\xbd\xbe\xef\xbe\x9e" => "\xe3\x82\xbc", "\xef\xbd\xbf\xef\xbe\x9e" => "\xe3\x82\xbe", "\xef\xbe\x80\xef\xbe\x9e" => "\xe3\x83\x80", "\xef\xbe\x81\xef\xbe\x9e" => "\xe3\x83\x82", "\xef\xbe\x82\xef\xbe\x9e" => "\xe3\x83\x85", "\xef\xbe\x83\xef\xbe\x9e" => "\xe3\x83\x87", "\xef\xbe\x84\xef\xbe\x9e" => "\xe3\x83\x89", "\xef\xbe\x8a\xef\xbe\x9e" => "\xe3\x83\x90", "\xef\xbe\x8a\xef\xbe\x9f" => "\xe3\x83\x91", "\xef\xbe\x8b\xef\xbe\x9e" => "\xe3\x83\x93", "\xef\xbe\x8b\xef\xbe\x9f" => "\xe3\x83\x94", "\xef\xbe\x8c\xef\xbe\x9e" => "\xe3\x83\x96", "\xef\xbe\x8c\xef\xbe\x9f" => "\xe3\x83\x97", "\xef\xbe\x8d\xef\xbe\x9e" => "\xe3\x83\x99", "\xef\xbe\x8d\xef\xbe\x9f" => "\xe3\x83\x9a", "\xef\xbe\x8e\xef\xbe\x9e" => "\xe3\x83\x9c", "\xef\xbe\x8e\xef\xbe\x9f" => "\xe3\x83\x9d", ); %_z2hKanaD = ( "\xe3\x82\xac" => "\xef\xbd\xb6\xef\xbe\x9e", "\xe3\x82\xae" => "\xef\xbd\xb7\xef\xbe\x9e", "\xe3\x82\xb0" => "\xef\xbd\xb8\xef\xbe\x9e", "\xe3\x82\xb2" => "\xef\xbd\xb9\xef\xbe\x9e", "\xe3\x82\xb4" => "\xef\xbd\xba\xef\xbe\x9e", "\xe3\x82\xb6" => "\xef\xbd\xbb\xef\xbe\x9e", "\xe3\x82\xb8" => "\xef\xbd\xbc\xef\xbe\x9e", "\xe3\x82\xba" => "\xef\xbd\xbd\xef\xbe\x9e", "\xe3\x82\xbc" => "\xef\xbd\xbe\xef\xbe\x9e", "\xe3\x82\xbe" => "\xef\xbd\xbf\xef\xbe\x9e", "\xe3\x83\x80" => "\xef\xbe\x80\xef\xbe\x9e", "\xe3\x83\x82" => "\xef\xbe\x81\xef\xbe\x9e", "\xe3\x83\x85" => "\xef\xbe\x82\xef\xbe\x9e", "\xe3\x83\x87" => "\xef\xbe\x83\xef\xbe\x9e", "\xe3\x83\x89" => "\xef\xbe\x84\xef\xbe\x9e", "\xe3\x83\x90" => "\xef\xbe\x8a\xef\xbe\x9e", "\xe3\x83\x91" => "\xef\xbe\x8a\xef\xbe\x9f", "\xe3\x83\x93" => "\xef\xbe\x8b\xef\xbe\x9e", "\xe3\x83\x94" => "\xef\xbe\x8b\xef\xbe\x9f", "\xe3\x83\x96" => "\xef\xbe\x8c\xef\xbe\x9e", "\xe3\x83\x97" => "\xef\xbe\x8c\xef\xbe\x9f", "\xe3\x83\x99" => "\xef\xbe\x8d\xef\xbe\x9e", "\xe3\x83\x9a" => "\xef\xbe\x8d\xef\xbe\x9f", "\xe3\x83\x9c" => "\xef\xbe\x8e\xef\xbe\x9e", "\xe3\x83\x9d" => "\xef\xbe\x8e\xef\xbe\x9f", "\xe3\x83\xb4" => "\xef\xbd\xb3\xef\xbe\x9e", ); %_hira2kata = ( "\xe3\x81\x81" => "\xe3\x82\xa1", "\xe3\x81\x82" => "\xe3\x82\xa2", "\xe3\x81\x83" => "\xe3\x82\xa3", "\xe3\x81\x84" => "\xe3\x82\xa4", "\xe3\x81\x85" => "\xe3\x82\xa5", "\xe3\x81\x86" => "\xe3\x82\xa6", "\xe3\x81\x87" => "\xe3\x82\xa7", "\xe3\x81\x88" => "\xe3\x82\xa8", "\xe3\x81\x89" => "\xe3\x82\xa9", "\xe3\x81\x8a" => "\xe3\x82\xaa", "\xe3\x81\x8b" => "\xe3\x82\xab", "\xe3\x81\x8c" => "\xe3\x82\xac", "\xe3\x81\x8d" => "\xe3\x82\xad", "\xe3\x81\x8e" => "\xe3\x82\xae", "\xe3\x81\x8f" => "\xe3\x82\xaf", "\xe3\x81\x90" => "\xe3\x82\xb0", "\xe3\x81\x91" => "\xe3\x82\xb1", "\xe3\x81\x92" => "\xe3\x82\xb2", "\xe3\x81\x93" => "\xe3\x82\xb3", "\xe3\x81\x94" => "\xe3\x82\xb4", "\xe3\x81\x95" => "\xe3\x82\xb5", "\xe3\x81\x96" => "\xe3\x82\xb6", "\xe3\x81\x97" => "\xe3\x82\xb7", "\xe3\x81\x98" => "\xe3\x82\xb8", "\xe3\x81\x99" => "\xe3\x82\xb9", "\xe3\x81\x9a" => "\xe3\x82\xba", "\xe3\x81\x9b" => "\xe3\x82\xbb", "\xe3\x81\x9c" => "\xe3\x82\xbc", "\xe3\x81\x9d" => "\xe3\x82\xbd", "\xe3\x81\x9e" => "\xe3\x82\xbe", "\xe3\x81\x9f" => "\xe3\x82\xbf", "\xe3\x81\xa0" => "\xe3\x83\x80", "\xe3\x81\xa1" => "\xe3\x83\x81", "\xe3\x81\xa2" => "\xe3\x83\x82", "\xe3\x81\xa3" => "\xe3\x83\x83", "\xe3\x81\xa4" => "\xe3\x83\x84", "\xe3\x81\xa5" => "\xe3\x83\x85", "\xe3\x81\xa6" => "\xe3\x83\x86", "\xe3\x81\xa7" => "\xe3\x83\x87", "\xe3\x81\xa8" => "\xe3\x83\x88", "\xe3\x81\xa9" => "\xe3\x83\x89", "\xe3\x81\xaa" => "\xe3\x83\x8a", "\xe3\x81\xab" => "\xe3\x83\x8b", "\xe3\x81\xac" => "\xe3\x83\x8c", "\xe3\x81\xad" => "\xe3\x83\x8d", "\xe3\x81\xae" => "\xe3\x83\x8e", "\xe3\x81\xaf" => "\xe3\x83\x8f", "\xe3\x81\xb0" => "\xe3\x83\x90", "\xe3\x81\xb1" => "\xe3\x83\x91", "\xe3\x81\xb2" => "\xe3\x83\x92", "\xe3\x81\xb3" => "\xe3\x83\x93", "\xe3\x81\xb4" => "\xe3\x83\x94", "\xe3\x81\xb5" => "\xe3\x83\x95", "\xe3\x81\xb6" => "\xe3\x83\x96", "\xe3\x81\xb7" => "\xe3\x83\x97", "\xe3\x81\xb8" => "\xe3\x83\x98", "\xe3\x81\xb9" => "\xe3\x83\x99", "\xe3\x81\xba" => "\xe3\x83\x9a", "\xe3\x81\xbb" => "\xe3\x83\x9b", "\xe3\x81\xbc" => "\xe3\x83\x9c", "\xe3\x81\xbd" => "\xe3\x83\x9d", "\xe3\x81\xbe" => "\xe3\x83\x9e", "\xe3\x81\xbf" => "\xe3\x83\x9f", "\xe3\x82\x80" => "\xe3\x83\xa0", "\xe3\x82\x81" => "\xe3\x83\xa1", "\xe3\x82\x82" => "\xe3\x83\xa2", "\xe3\x82\x83" => "\xe3\x83\xa3", "\xe3\x82\x84" => "\xe3\x83\xa4", "\xe3\x82\x85" => "\xe3\x83\xa5", "\xe3\x82\x86" => "\xe3\x83\xa6", "\xe3\x82\x87" => "\xe3\x83\xa7", "\xe3\x82\x88" => "\xe3\x83\xa8", "\xe3\x82\x89" => "\xe3\x83\xa9", "\xe3\x82\x8a" => "\xe3\x83\xaa", "\xe3\x82\x8b" => "\xe3\x83\xab", "\xe3\x82\x8c" => "\xe3\x83\xac", "\xe3\x82\x8d" => "\xe3\x83\xad", "\xe3\x82\x8e" => "\xe3\x83\xae", "\xe3\x82\x8f" => "\xe3\x83\xaf", "\xe3\x82\x90" => "\xe3\x83\xb0", "\xe3\x82\x91" => "\xe3\x83\xb1", "\xe3\x82\x92" => "\xe3\x83\xb2", "\xe3\x82\x93" => "\xe3\x83\xb3", ); %_kata2hira = ( "\xe3\x82\xa1" => "\xe3\x81\x81", "\xe3\x82\xa2" => "\xe3\x81\x82", "\xe3\x82\xa3" => "\xe3\x81\x83", "\xe3\x82\xa4" => "\xe3\x81\x84", "\xe3\x82\xa5" => "\xe3\x81\x85", "\xe3\x82\xa6" => "\xe3\x81\x86", "\xe3\x82\xa7" => "\xe3\x81\x87", "\xe3\x82\xa8" => "\xe3\x81\x88", "\xe3\x82\xa9" => "\xe3\x81\x89", "\xe3\x82\xaa" => "\xe3\x81\x8a", "\xe3\x82\xab" => "\xe3\x81\x8b", "\xe3\x82\xac" => "\xe3\x81\x8c", "\xe3\x82\xad" => "\xe3\x81\x8d", "\xe3\x82\xae" => "\xe3\x81\x8e", "\xe3\x82\xaf" => "\xe3\x81\x8f", "\xe3\x82\xb0" => "\xe3\x81\x90", "\xe3\x82\xb1" => "\xe3\x81\x91", "\xe3\x82\xb2" => "\xe3\x81\x92", "\xe3\x82\xb3" => "\xe3\x81\x93", "\xe3\x82\xb4" => "\xe3\x81\x94", "\xe3\x82\xb5" => "\xe3\x81\x95", "\xe3\x82\xb6" => "\xe3\x81\x96", "\xe3\x82\xb7" => "\xe3\x81\x97", "\xe3\x82\xb8" => "\xe3\x81\x98", "\xe3\x82\xb9" => "\xe3\x81\x99", "\xe3\x82\xba" => "\xe3\x81\x9a", "\xe3\x82\xbb" => "\xe3\x81\x9b", "\xe3\x82\xbc" => "\xe3\x81\x9c", "\xe3\x82\xbd" => "\xe3\x81\x9d", "\xe3\x82\xbe" => "\xe3\x81\x9e", "\xe3\x82\xbf" => "\xe3\x81\x9f", "\xe3\x83\x80" => "\xe3\x81\xa0", "\xe3\x83\x81" => "\xe3\x81\xa1", "\xe3\x83\x82" => "\xe3\x81\xa2", "\xe3\x83\x83" => "\xe3\x81\xa3", "\xe3\x83\x84" => "\xe3\x81\xa4", "\xe3\x83\x85" => "\xe3\x81\xa5", "\xe3\x83\x86" => "\xe3\x81\xa6", "\xe3\x83\x87" => "\xe3\x81\xa7", "\xe3\x83\x88" => "\xe3\x81\xa8", "\xe3\x83\x89" => "\xe3\x81\xa9", "\xe3\x83\x8a" => "\xe3\x81\xaa", "\xe3\x83\x8b" => "\xe3\x81\xab", "\xe3\x83\x8c" => "\xe3\x81\xac", "\xe3\x83\x8d" => "\xe3\x81\xad", "\xe3\x83\x8e" => "\xe3\x81\xae", "\xe3\x83\x8f" => "\xe3\x81\xaf", "\xe3\x83\x90" => "\xe3\x81\xb0", "\xe3\x83\x91" => "\xe3\x81\xb1", "\xe3\x83\x92" => "\xe3\x81\xb2", "\xe3\x83\x93" => "\xe3\x81\xb3", "\xe3\x83\x94" => "\xe3\x81\xb4", "\xe3\x83\x95" => "\xe3\x81\xb5", "\xe3\x83\x96" => "\xe3\x81\xb6", "\xe3\x83\x97" => "\xe3\x81\xb7", "\xe3\x83\x98" => "\xe3\x81\xb8", "\xe3\x83\x99" => "\xe3\x81\xb9", "\xe3\x83\x9a" => "\xe3\x81\xba", "\xe3\x83\x9b" => "\xe3\x81\xbb", "\xe3\x83\x9c" => "\xe3\x81\xbc", "\xe3\x83\x9d" => "\xe3\x81\xbd", "\xe3\x83\x9e" => "\xe3\x81\xbe", "\xe3\x83\x9f" => "\xe3\x81\xbf", "\xe3\x83\xa0" => "\xe3\x82\x80", "\xe3\x83\xa1" => "\xe3\x82\x81", "\xe3\x83\xa2" => "\xe3\x82\x82", "\xe3\x83\xa3" => "\xe3\x82\x83", "\xe3\x83\xa4" => "\xe3\x82\x84", "\xe3\x83\xa5" => "\xe3\x82\x85", "\xe3\x83\xa6" => "\xe3\x82\x86", "\xe3\x83\xa7" => "\xe3\x82\x87", "\xe3\x83\xa8" => "\xe3\x82\x88", "\xe3\x83\xa9" => "\xe3\x82\x89", "\xe3\x83\xaa" => "\xe3\x82\x8a", "\xe3\x83\xab" => "\xe3\x82\x8b", "\xe3\x83\xac" => "\xe3\x82\x8c", "\xe3\x83\xad" => "\xe3\x82\x8d", "\xe3\x83\xae" => "\xe3\x82\x8e", "\xe3\x83\xaf" => "\xe3\x82\x8f", "\xe3\x83\xb0" => "\xe3\x82\x90", "\xe3\x83\xb1" => "\xe3\x82\x91", "\xe3\x83\xb2" => "\xe3\x82\x92", "\xe3\x83\xb3" => "\xe3\x82\x93", ); } # ----------------------------------------------------------------------------- # strcut, strlen # sub strcut { my $this = shift; my $cutlen = shift; if(ref($cutlen)) { die "String->strcut, Param[1] is Ref.\n"; } if($cutlen =~ m/\D/) { die "String->strcut, Param[1] must be NUMERIC.\n"; } my $ch_re = '[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3}|[\xf8-\xfb][\x80-\xbf]{4}|[\xfc-\xfd][\x80-\xbf]{5}'; my $result; my $line = ''; my $linelength = 0; foreach my $c (split(/($ch_re)/, $this->{str})) { next if(length($c) == 0); if($linelength + (length($c) >= 3 ? 2 : 1) > $cutlen) { $line ne '' and push(@$result, $line); $line = ''; $linelength = 0; } $linelength += (length($c) >= 3 ? 2 : 1); $line .= $c; } push(@$result, $line); if( $]>=5.008 && $this->{icode} ne 'binary' ) { foreach(@$result) { Encode::_utf8_on($_); } } $result; } sub _utf32be_ucs4 { my $this = shift; my $str = shift; $str; } sub _j2s { my $this = shift; my $str = shift; $str =~ s/($RE{JIS_0208}|$RE{JIS_0212}|$RE{JIS_ASC}|$RE{JIS_KANA})([^\e]*)/ $this->_j2s2($1, $2) /geo; $str; }   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~N}L~F@ABCDEGHIJKLMNOPQRSTUVWXYZ[\]^_`pqrstuwxyz{|}~v]\efghdcTUVWXYZ[\]鈿鉋鉐銜銖銓銛鉚鋏銹a@ABCDEFGHIJKLMNOPQRS@ABVXYZqrstuvwxyzklJKTU@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~E[RSei`cakjdlfn_mbgh~rsopqutオOs^NuLOTvVRhT\]jiSlYmwedtWMCNOPx`LQfAZC渚R]CgT俯SVUDNWErWMCoU褄Zq{狹|[リ芻Yl`X^\]テUT_PbBXC@AlDaEHFmGI`KJVMNLQPORSDUTWVXYZ[b[eZ\}]cS_`ZaTbc~feg竚h`ijkハdnlmyopq~ustrvwexyyz蝪{}}f~MonYghOUnc絡hiw[JNjuE葭kMル橄l壱mkx誤nC\PmTK謐opp~X}qQyFofrbp@カjEihegD@fNizCuatBv@]PDCiAENFGLKNMJwSOHISBYXOPUR[VWTZQ`ea\fPxhA^b[c_igridcmkpjnlkorwutQqsRv}{|~\XxydXdlc}y\nVBymzR^C_{詩}|Wuキ|xgYhUomndmps蓁[OgVvクt_zDz@DA@DJWdBEWiFGonKLIWHPpQORPNPMVWSKkUXwYT}ZQ[_\^ケ]kda`bcefhgildjmnqopqrEstuyFGvwwxyz{}~FvウG@XタqコG{QehxQ@JRヒqAレKsArWjニwRZxsR剥簿幎BHIbJFsztAXyNKcHLXM{xNfpLf@CDB_FEAGHILJKMNUOPMQTョU|VOoWX^YJeZK[\]_`abSRc`FVjdeefihgamkjlk]ponqrzsOtJSKEuuYZzwyOxv|{|v}}P~pb蹇サ蹉IxY{f蹐蹌yS詩zD蹤危踪蹠QTdSc|J蹣e^蹕譱@ABCYDEF[G鈑HKILJM}NQZOVPc}RSWTRe蹶ZcS]d_fba[YUXS`qg@hminAE\kwlgjUp}Jqso{フ~xPv|{uzrt@||TyT[wdf}~`Kg蹲hrgE蹼TQ躁PdBohi躇^FC[xU庭q~sUhG~|klホafzV{U|{躄V躓耶躔f躙t尣G躊EWWN躡躬謐Ai軆qg躱躾b軅\A軈@BCjDFGHgXIJ軋J]\L軛KLN]MNO{DQpSVURTWロZmXY[\軼aYt^nf`f]cb}ged_kigms軻軾uAt^_Mpoqnvljrhト`輊hIxZz}ji{j輅y|~K軫jVO~[BH輕_IXoAk^輙|OyT|P輜Y\l輟W~輛M輦k@輌迯輻h@wKGFEBDCIELHJ輹轅MQNORSTU~WVY\\[]V^`_abc~cdefgihw}cjlBkmnopqsrtiuEkvaBwxy轂z|{~}CXi注`ャ轌]r轆D轉Bv。@轎AgDj轗mk^FhlY_Q\轢CZ轜O櫛@AUtBiW[D~CYEaknQH`瓊FIXGNpシanMJHBYスRAQ@NIRKHkEDMGFLCKOPUTVYbSLWQZX][^aZG\`_JMdhfNObcgemmjil呀n譖PoqprsDワQFutRxY{vzy_恪F}G~|wBTSRVWUマFo蠅nMYRzWCZ燹燿爍爐爨爛爭爬ン袱爲u「爻爼爿牀v牆Sq牋÷呀橿犂犁犇]犒犖[犧犢\謹死犲狆狄_狒狢狎狡K狠T倏猊狷呀彼]猯猴L猝猖PQ猩猥猾獏b獗默獪l獰_獨獵獸聳玳`珎獻aX逗Hb珥c玻]楳瓏J瑯珞I琅KMLN琥i珸琺瑟琲琿l瑙瑕O瑩蝣瑁瑰璢瑜瑣瑪P瑶瑾Q珮璋」璞璧瓊Z@ZA≡BCDFGErIHRKJLMONQPr[RYSp瘁TcRb\j聲UV[YXEW\Z{L^l_]壤`aSfc諱bEidehgDa`^jklnmuv聲prt]usセoqaxwy、z|{s}~瓠o瓣S瓧T瓩IFc瓮瓲瓰H瓸瓱瓷甄WUVX甃甅甌甎甍M甕u~mv甓甦甞X甬甼宦畍畊畛畩畚畆當畫^畧畭畸畤疆疇Z畴疊疔疚r疉疂疣疥疝疳痂痃疽疵u疸疼疱痙痊痒痍痣痞痾痿求釶mZ痰痺痲痳瘍\umCjv{瘟]^d瘠_瘢瘡瘴V瘧Oq瘤瘰怐癈瘻m癨癢・癩癜癪癘已癡A@癧CBDbFEG瘋瘉IH`ヲミJV_FSPOcLNj_MKI[QRh\TSdfTUWXHYZ[G\Hb]d`a`^_HbcBdetgfiljmke籵msonnpqrntuvwy{xzA|Eq~M}g鰲鰍蓁痹v金hGj[^|ア癶J}y發M憫b鰍}盒皃皋皓皙皎皖皈皀盂皸盖盍Z皰盞皺皹皚k皴\蘯烽盻z盡盧盪眈ツ亭窒眇U眸睫睇眦眛睨眄嘯狽睚睾睛睥睿瞎睹瞋謔瞠瞑瞰瞹瞞瞻瞿瞼眥瞽矇矍矗H矚矜eSl砒矼矣硎砌矮碎硅礪砠硴碆硼碌碚W碵碣碪f碯磆磋磔碾碼nI@g磅C[RBムh眼AfaFGaIHIgDJmEoMQLUni冴ROPNKGWTVSp宴Xepa[_档Zbfj壯\odY]^]qgchjmilk裔nuovrネtqwpcDks{~|z`}x@qJrDUyJ[@Zs磧磚磽磴礒礇礑礙礬祠礫祀rul諠祟祕祚祺祓r祿禊齋禧禝t禪QA`禺禮禳秉秕禹H秬秡秣K稍稈稘稙稠稟禀|sVl稾メ稻稷ァ穃k寃穉穡穢穩ィ穰^龝穽穹窈窗窕激鉇窩窶窰竈竅E竄窿W邃竇竍竊]竕I竓竏b竝站mnx气_w笏竦笂竡竭E竢笆笳E\e笊r笘笞笙笵E]BA笨tDCorTHIGFJB昶NOKLMpUQGPSRcVWVXZ^[Y^\]d_`acbefgbhゥLvijPklmnop邃qノrsCwMtquw巡vDxzy|{}~FナHmcF|c寇pv冷s筺筧筰箍筴筥筍笄筌笋筵t`筅rw筝箙箒x筱箚篁箋箜箟筬冷篋箘篌筮箏簍篥ye篝簔p簇篆H簓篏z籠簧篩簑簀篦G篳箴簗篷簟籟籥篶簷籘{t籵籐籃簪籏籤K籌籖籀簽Nェf粤粮籔|粃粫粐粳~粲u籬W粢粨粱粭粡DH@糀鬻粽チ簣糢糜糅糂U糒粹糘糯@糶ヌB}C糴~簫糲nJPQDNFHRGKLOEEIFdOVTmSUWX[Y≦Z妹M\a`Abh]_^PAdc畉efgsi|驟jkl痳qrm\naopztwsuvヨx`ua{^|}~g懊IwXI紂絅Z紊紕絳絋絎絮紲紿絖絨絲紮紵綮經絏絣絽綛Ia綏紜絛綺綉綣緇綵綫綽y緜總綢綯綸綰綟Os緘pX緝q聤t緞\緻縒縊縣緡緲縱U繦縉喝縢縅繆縻縋縵繃刔縹縷縲縺T繧繝矼繪繩臱蓆繞繚繙繼纃繻J緕A纎辮繿纈纉纓纔纐續繽纒纖莎纜氤A@CBDPEFGvHeIJKK`LoMONePQRSTUVpWXYGZ[\]vu`_P^LabcKidfehi蝉g]frmwllkFlbYjopn_FsaUv醇rw諞tuqNbzxk倅yz_{~|@}dyuモwTッx罅c秧罌罍罎]罐网Q罕罔罘罟罠J罨罧罩罸L羂羆羃羈蟺羌羔^羞羶羝羣羚羯e羲羹羮羸Lvn紋嚀台翕翔M翦\翊f裝Gd翩聒Go耆^飜翹ソq耋耒w耄耘耙耡耜耿耨耻聆聘聚ヘ聟q聢聨聳N聲z聰聽聹聶肓肅聿肆肄肛冐肬肚肭HH胛胝胥胙xユ胄胚脉H脛脩胱胯@DA脣BCJE帛GIFLRKMNQPOSRUTVWYXgZ諛[]^_\`ヤaORb]cfイedygri晏hqkm竍jlpnPorySsAutx`wv{zyQ|}~DhォCJ_HIv}Rq仙t脾r仙∝ATi辯N腑x腓V^熈隋腆B瘍腱蝓腮ky腥Kユ腦膈腴JI芙韃援亥膤膕膣WM腟ラ膓膩膰@xY膽S膵膾sXs臀臂膺A臍臉刧U゙z臙臘|臈臚臟V臧臠y_臾臻臺X舁與舂舅舍舊舐舖舩゚舫舸d募艀B艝j艙艘滕nt遏遐艟艤艚艨逎逾b遉艱艪舮艢n艫隨遖遞芻遘S艾芫芍芬遨苡遶艸遯苳艷芒豗z遽邁geCL苒芟苟句鼇邂K范莓苺邏N邵邯邊邉邱邀苻seI苞扈|鄒鄲K苹@B鄙鄂郤AC郢dB苜^EDF茆BtK酊bGHLJ鄰IO酖ZMNLPV酘YXLQRUW酣ZTS酥^_`]\[db酩caefh酳酲嚠gsiljkmopqtruwvxMy第zJ[寰壽{|}~t}{hj~宙@w怦茖A茴zG珞@茲Ku荀茹茱邗B荅膃荐醫茗茯茫茘莅褂莪YW莖莢茣莟G荼絆莇Jエ_莵d荳荵k莠莊莨萓菴莉菫菎菽萃菘I醯P萋醪菁菷萍醵萇菠菲萢醴醺釀釁萠莽r萸蔆菻v萪x萼C蕚蒭葷葫蒄葮蒂葩葆萬f萵葹葯蓊葢蒹蒿蒟蓙蓍蒻B蓐蓖蓆C{蔡蒡az蔗蓴jo蔘蓿p蔬蔟蔔z{蔕釉^釋蓼蕀蕣@BACDEFHGI鱆HQJKZOLM{a`N跚OPRSUQT釟VWXYZ\[^a]_`b驩cd釛e]nfgyhwmljkiwnopqsrxtvRuxyz}|~{釼痩[釵釶E蕁蘂蕋蕕薀薤薈薑薊薨蕭薔T薛磑S@育藪蕷蕾薜薐藉D釿薺鈞薹珠藐藏藕藝藥藜藹LN鈬蘊藾鈕蘓藺濶蘆蘢蘚乕I虔蘿蘰虍~蚓虱虧鈑蚰蚶蚯蚪蛆蚌k蛄蚋蚩蚣蠣蛞蛔蚫h蛉驩蛟驇V蛯蛛蛬L蜒蜆蜈蜀蜃蛻蜊蜑蜉P蜴蜿守跚蝸蝟蜚蜩蜻蜷ー蝴蝎蝌蝠蝗蝨DCEL@AB鉗QJ鉞FKHG{LMNI蜥OSTRQWPUVYX[\]hZ^鉉_`ab芽cdュefghki[jlmnpqosotuv鉤w獎瘧xzy{|}~Cl@V聊蓚鉅s軣醉s~躰輒輓X^Yabceilu邨郛醂釐釖釡鉅I鋺錏ij{C|D^OPQRSTUVWXFGH`abcdefghijklmnopqrstuvwxym_nOQMobp`銷P鋩鐔¥就鐔o修鐔ワ拾鐔э秀鐔鐔鐔鐔鐔鐔鐔鐔逸襲鐔駕蹴鐔器週鐔駈酬鐔醐醜鐔削住鐔種十鐔常戎鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓鐓????????????????????????????????????????????????????????????????鐚鐚誌鐚鐚鐚卒鐔即鐚常殖鐚帥純障篁錫鐚鐚種ワモ鐚鐚鐚誌悉鐔鐔鐚鐚賊?歎鐚鐚鐚р癌属霞鰍鐃ワ鐃鐃¥鐚鐚鐚鐚則≠鰍霞盾錫祉???????????????????р鐃≒???????????モ≠盾汲???????謂‖??????????????????????????????????????????????????????????????????????????????????????鐚鐚鐚鐚鐚鐚鐚鐚鐚鐚???????鐚¥滋鐚o爾鐚ワ痔鐚э示鐚鐚鐚鐚鐚鐚鐚鐚逸識鐚駕竺鐚器宍鐚駈七鐚醐執鐚???????鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔鐔????<≪cゃャс違宴蚊潟眼泣吟激吾鴻冴祉若純障帥??????????????????????????????????????????????????????????????????????????????<≪cゃャс違宴蚊潟眼泣吟激吾鴻冴祉若純障帥?<≪cゃャс違宴蚊潟眼泣????????痢裡里離陸律率立????????留硫粒隆竜龍侶慮旅虜了亮僚両凌?????????????????????????????????????????????????????????????????????????????????????????????????????????弌丐丕个丱丶丼丿乂乖乘亂亅豫亊???????????????舒弍于亞亟亠亢亰亳亶从仍仄仆?仂仗?????????????も癌錫b鰍獅撃垂謂モ呉?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????≠≒bもモр謂奄霞鰍≠≒bもモр?≪с吟c祉。?????????<ゃャс宴蚊鴻障純錫≠モ垂汲??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????篋紲水紮狗∵笈腥≧献薇究ф≧怨紮脂4腟∝蕎藪膕茴桁綺究罅鋌ヤ篏箴峨し紮紲絨井罎榊亥Щ膓膩茵h阪私篋ュ臥脾筝紕掩頃悟┣薜医遵≦紮糸蕋我繰よ???????????????????????????????????????????????????????????????????∫育糸勀靸処薺腦坂腆惹研罨薜糸Дゥ羌篋画馿≦九医襲恰羂御崖羇腥頑沿荅羔牙薈茗莇我ュ?医絎翫散ゥ吚何羲睡区藉紂惹ュ劫ぎ絅ュ綽惹堺┴罨ф雁膺茱藉藉藥絏≧糸絮区罅句>篆阪御羝腥割篁篏篌巡勝篏喝紊鎏絎九∞倶羃括胼胼丞┝膊沿決茯峨莢菴篆絣肢ヨ処乗蕕薈篁篌茹e紂紕綮糸辱∽???????????????????????????????????????????????????????????????????薛罌井儀亥腟笈ヨ拷莢怨上喝喝网羔腆茵荅臥ァ薨御規薤f粋綮≧号惹御紫牙∈腥荀茹莎莠i絖絏恰ソ蕁蕁膃罔?罘炊狗羹峨井羇紙羯茲莉筝薜劫嚱罔咲腴臥藉∵援殴箙鞘絲у兄紮絎絎絲綛峨更ff丈∽罅罍堺丈羆羲∽羹亥g腴睡∞亜膩膽句唇荀活莢∫ラ蕕筝後絏後ゥ弱鴬膺茣蕁蕁篌篌怨阪絳絲絏絽綛上堺∽罍罍???????????????????????????????????????????????????????????????????罘絽井羂羆順睡絖g膣緇処頥莢頑儀荵莠蕋∫薔寂遵絋絎罨榊腑臂肢取井ャ罅罘荅亥ф級翫∵筝箙篁篌後綣ユ?醇羆我械悟腥句膃膣膤丞畿хサ絮綏羝荐沿御胼薛篋篋篋箴箴腴九怨九≦水û紜絣≦七綵罘羈梧潔♂翠薊篁医絨罐絮我サ罅膕ゅ綏冗ゆf順雁胼順膩壕茵粋茗壕箙九ュ榊荳薈薈薈傑亥阪九筝我у絮???????????????????????????????????????????????????????????????????腦羃頑宗腦膕膵井峨荐臂よ≦茴腑篆上Û絅綵√究倶фイ堺罅羝腮順鎧腟膓膵臀荐荅h荵初藏梧薇?羶罅罨羆堺腥雁茵荐f篁九劫ュ弱後eу絆綮堺我御恰我罔順隋腟合荀茗莖∵i級咲薑藕後ウ綛糸痔羝羣憟決茫咲箙ゅ弱阪絖ゅ訓綺綣ф御羚膤茴頑∴∴佈茯莊潔蕁ч篋篋篌上┓緇緇≧罌ф腆茯茯よ潔箙薇篋や充箴劫上e???????????????????????????????????????????????????????????????????√ソ絖絖絎鎴ュ熊綏桁晃綺綺綺桁ァ紙贋≧罕羆羇羌羝羣牙隋腮睡膣膣腟膓沿沿茵茵∴莢∵骸級援翠守ら?薤蕭藉糸垸紕傑莟莉藝劫糸順潔藥羲亥綽醇薨莨惹ら篁医ゅ⊂紿号掩祁膣肴薛篋篏綉綏綏紙括荅茖綺ф球紂絋糸医秋。醇恰初腑膣域茖莠ゅ臀莢≦翫堺翫峨主薹坂丈窮膈膣∫罅藪膃劫???????????????????????????????????????????????????????????????????絲倶罧肴薇藪炊筝絮掩fg膾莅莖檎罧篁篁篌坂戎阪夔兂e紕紮紮紮水絮絽絽綽絖醇罩?罩紙腑腱膤悟膣∵活荅荅荅茯茫莖莖蕋惹篋篌寂絖絲堺罨≧羃紫丞順脾腓肴活莨羆藕水顑藉腴肴燦絎筝偌桁け絆絎ゆ羚炊乗蟹絎膀我頑絮∴膰絨莎腓丞茗荵阪虻主級ュ綣掩剛源絎掩腮莇i薤絲炊罔合喬???????????????????????????????????????????????????????????????????絎絨怨篆丈寛腱腱腟膵膺茵茱画莵頑鹿演篁篏緇羆羝g研紊絎炊腑膰膕紂丞肴菴遺絣紙ョ腴h薈水緇罐罧羞?羣羹ょ丞綏♂級羝綺句臀我梧決後絅喝鏅らゅ桁怨絅絋上┝絎球絨鎞絨綺綺綮綵井炊傑倶丈□罔罔究下羔羝羚主х隋腓腑ョО腴膃膕х換茵茖活荐取荅活院莖ら冗筝筝筝箙医翫絳√幻丈≧羌句括h梧臥檎怨顔???????????????????????????????????????????????????????????????????罎罧膵決画Е蕋莨怨飴篌娯拭箴球紲絲絲綽井罍网羌御訓括合腑腱膣活h荀荐肴昆莨臥篋坂紂球絨絨処荐菴i膃ヨ√喝ィ?劫絽ユィ羂雁∞膺茵育蕭經綉井∵協罎茖丈阪娯九√緇ф炊贋贋2罩f牙膕乗紕域処タ茯茯茫腮糸賢ユ括膠膰乗莢莎よ掘莵腆・荐腦膀茯腟区篁絎e絨綏井贋羌羇羹醇腥睡膩???????????????????????????????????????????????????????????????????膵臂肴壕荅莖莊級檎潔藪羲悟九胼膵括紂絏ェ丈醇腓腑腱膕膣腟荐顔脂♂у球√紕絅遵絮ゅf恰炊サ?劫沓罕罕醇ヤ悟膤膩靛∴取肢莎育薑鍽笈篆翫恰羝莇渇篆絮莖靛茴倶絖絖絨篁紊紊羆域上絋ユ井究薈薑篏絲乗絏怨遣緇贋炊外羯粋茴莢檎藥薇篁e伾ぇ膃蕁薹号у絎羃∽侵∵御茫乗後ц後???????????????????????????????????????????????????????????????????篏莨医オ怨圭腴莨炊莪欠檎罔処遺弦「罩羞≧腴膊膓肢処茯e綣丈罟罧窮決ょュ医ユ堺雁臀頑薤括腴合?腱腦九∞筝篁峨綽醇惹掩絵茵決┿渇罔ц莢筝絲球絽喝綣綣球繍緇贋我∽羹榊肴頑壕梧区粋莇莊渇潔薐ュ贋羃莖ョ恰乾紜罎罕菴初紂エ罕私羲莨肢膓顔罎炊衆紕桁膣i挟篋篏球莢ゅ絽綺綺綮桁究堺罌羆腆胼腮膩荐茫莵???????????????????????????????????????????????????????????????????檎藜羈ユ∽究惨膃羣阪峨捷よ菴後゛紊絮綺羞紫莢取拶蕁剛罧炊庄育糸球絋絮緇羝∞肢莖初ョ阪綺絅贋?紂紂絅絎絣九惹掩罌惹羞羚羔綵腑欠膈膈膤腟怨域hよ茗莟荼狗薑育絨ф羇括ヨ頑絣藉水緇恰合g睡ゆ茯罘≦悟罎翫薐区絲後丑羃莟絅e箙茗咲罐∫Υ膰桁罐荵f篋絨弱菴莖劫賛ヤ抗???????????????????????????????????????????????????????????????????絋絨翠篁糸綽茯羶∞Π腑√ц援怨拘綽究紙膕箙綮寂∽羶膣処活粋床荀ゅ郡荀傑晦羇丞句翫臀笈薤篆喝肴而劫罌?罐括ょ処卸紕画睡Гц篌ュ閿順膕区菴羲膰ォ薈藝順援_膊梧膈罠綛∴∽咲蕭篌臀井膈ラ芥阪ら寂軸ゅ絽炊鮎羆膵莢膀蕋醇ょ絋綺綵惹我号罸羈牙腆腱膩臀決ヨ←茯壕音翠蕋罔膂後絨上小罸窮臂???????????????????????????????????????????????????????????????????藜紙腮合蕭綵偒綣弱∝惹:紮紵膣乗篆球終罔羂傑∝エ茵荅莟劫腱画薜綵羌莢ц紙銀篁紊紿絲絽綺倶?ф羌句茘莢莖莎顔箴罩∴絨罐蘂肴篌緇綛胼壕荀羞球羃娯藪糸翫恰ゆ絅膕膤膣井筝篏球球綛e抗綣筝初膠渇糸腆уョヨ膊鎀膀膩莨肴箴水紲綣篆罩茖莠腥紜罸膂粋d晋怨絎絣医劾經綺掩ф丈号???????????????????????????????????????????????????????????????????羈羈∞合牙見活茲荐莟蕋初崖薺箙鋋≦絋絽遵綽炊贋罍膣∴茗莢莢翠冗峨紜我雁х腥羃≧綛絅膺糸∞?脾薛藝糸絋号ф罸罕綛藪冗罅篋篆e号羃菴箴膵藝推∽羲恰薛綏括絏絲羚腮絋膕羂紊∝∞ч機罎紿水ュ醇菴潔薐翫И羯罍膓睡桑∫査御─絋絖罸牙恐我藥√翠絨ゆ紫云莢医句箙九肴狗綣ョ√綵合荐活活羃合???????????????????????????????????????????????????????????????????茫莠後篏絎ュ構羚ф句欠援茖茯級紊篋篏筝茯莠翠綛弱絎劫左寱罐罕羇羣句腦臂荀茗∴ラ初丈罨?羃羌雁膺惹臂肴8ヨア守傑腟∴初箙怨球罨羶荀у鎡ユ罌∵頯♂∫後腴ュ羌羣隋膕腴蘊箴倶篋篋筝≦絲罌羔主腮膤ц茫守級膩羞活莠i藝紂羔膣蕁篁や雫箴桁怨矯イ腓取顔潔狗藝藹∽罩翫g茖綮羲g膂丞郡???????????????????????????????????????????????????????????????????i薛罠莖莊峨翫綮綣罐惹羌羲∝主乗藝胼画荅掩莖薹俄篋薜荅罎羚丞????????????????????????????????????????????綣筝筝筝筝延原筝寂舷箙箙箙篋篋莟篋綣篋篋篋篋篋≫紺篋割唆篁篁篁篁篁篁篁篁篁篁隙篏篌遺篏篏篏篏銀箴鋐篏私秋篏遺篏箴箴篆篆篆篆篆篆篆篆篆や織ュ篌篆九≦篆鞘侵後翫???????????????????????????????????????????????????????????????????喝ュe劫球≦阪桁弱糸水∝後ゅ√喝怨峨医球遵?医球上у喝劫翫喝水遵怨莨莨у弱球e蕋喝球後劫後e怨喝後筝紊糸桁ヲ・ョーカ膂主寯遵弱九球怨桁医糸九√後ュ???????????????????????????????????????????????????????????????????ゅ上弱ュ遵阪√劫e後喝糸上弱ゅ桁上遵劫翫九峨?ゅュ九翫弱劫水桁後糸≦水喝ゅ医e紂峨≦、紂紂井紂遵々紜紜劫紜紜阪紜糸後〓紕紕紕紕紕紕紕ュ紕ゅ紕紕阪9紕糸弱遵紊紊紊罌紊ュが紊紊峨じ紊丞絅絅絅絅絅絅√絅уガ絅???????????????????????????????????????????????????????????????????絅後絋篏箴絋eΣ紮紮紮絋紮紮紲ュ紲紲紲紲紿紿紿紲球╋紿√紵紵弱上絆紵遵e絆絆絆絆阪糸絳絳絳峨絳絳九上絖絖絖絖絖絖絖ュ絖医喝球御絖阪?絎絎絎後絲絲絲絲絲ゅ絲√絲ュ絲医九喝絨絨絨絨絨絨√姶絨後姐絮絮絮絮絮絮鎕怨卯絮箙√蔚絮劫絏絏絋絏絏糸俺絏弱卸絣絏上絣絣絣遵該絣絛絣經經經綉經經經經經√經經綉綉綉綉綉綉喝偽絛絛絛絛√絛絛絛遵絛桁脅綏綏綏綏綏綏綏綏峨卦絽絽絽絽絽絽九厳綛綛綛綛綛綛綛綛√垢綛綛球攻綛咲瑳綛水綮綮綮綮綮???????????????????????????????????????????????????????????????????綮綮e綮綮綮√察綮綮綮綮怨山綮医惨綮後讃綣綣綵綵綣綣綣綣綣綣後綵綵綵綣綵綵綵綵綵≦臭綵喝酬緇緇綵水緇緇緇緇緇緇緇緇緇緇弱綽糸燭綽後娠綽喝真≧?掩堺傑fゆфф≧御翫唇醇究倶傑贋堺≧紙掩丈ф炊惹贋醇恰傑贋ユ掩究傑堺臀号f倶堺贋炊醇惹丈???????????????????????????????????????????????????????????????????≧井我恰f惹丈紙炊掩ф究丈ォ倶」オ?セf嚱贋倶ф倶ユ惹紙掩ц≧f倶贋我堺醇ゆf贋究傑倶悟我御莅傑≧掩我紙恰究倶贋ゆф∽井号丈???????????????????????????????????????????????????????????????????御炊井究傑ч御炊倶御傑fゆ井惹≧傑贋恰御ゆ∽号ф罅罅罅我?罌恰罅罅f〃罅炊罌閄罌罌罌罌罟罌号ヾ罌究罌堺閄罅丈罍罎罍罎∽う罍≧罍罍罍ф罎倶罎罍罍fぅ罍号罍罎罎罎罎fぁ罍罐号シ罐罐御カ罐罐丈ギ罎号ゴ罎醇罎井ァ罐罐网罐网我Ξ罕网炊罕网丈絲罕罕网紙网ф┏网网网网网贋罕罔罔罕炊罕号Р罕ф网掩罕罔罕罔罔罠罔f罘罔罘我╋罘御罘∽罘罘罔御│罟罟罟罟罟∽???????????????????????????????????????????????????????????????????罟罟紙罠罟御恰罠罠罠罟罠罠罠紙罠堺罨薔掩罨御欠罨拷罩罩罩罩罩罩罩罩罩≧御号炊罧罧罧罧罧罧罧ゆ罧罧罧我掩恰傑惹罸罸罸罸罸罸恰?藝丈羂羂羂羂ゆ娃羆羆羆∽迂羃羃羃羃羃羆丈烏羆恰羃羈羈掩羃醇羈羈羃羃掩仮羃堺羈羈羈羇茵羇倶勧羇醇憾羇羇究干羇羇羌f羌ゆ羌号羔羔羶ゆ羞号羝羔究羞羔御羞羞羞羞羞羞羞堺羞ゆ羞羞羝羚羝羝羚我羝丈牽羚羝羚倶羝羚羝堺羝ゆ賛羝羝御羣羣羯羣傑羣醇痕羯羣我羯羣闒ユ羣羹羲羯羯御讃羲炊参羲掩晒羲我???????????????????????????????????????????????????????????????????羲丈羯傑羹堺集羮羮羹羹羶恰臭羮羹惹羮羮羶羹羮恰升羮≧召羮号羮羶羶羶羶羶羶掩信羶羶榊闞丞羹雁亥丞牙g援悟括?順ョ∝紫合丞х窮主合睡亥牙紫主睡雁丞∝х合牙∝∞合桁雁ョ丞騌亥悟窮紫榊ウサョ∝ョ夝牙榊睡亥g句丞х???????????????????????????????????????????????????????????????????gх牙亥援悟欠主ょх悟句雁ョg括窮順悟主援g丞?主亥榊牙括х∞∝ょ雁亥紫∞∝х亥牙句悟主亥雁悟合榊∞ョх紫ょョ欠悟ョ睡丞合亥句合睡主順紫g主腓腓隋腆隋雁隋主腆腆g窮→腆脾脾脾脾腆丞⊆脾脾脾???????????????????????????????????????????????????????????????????脾х脾順4腓腓腓腓腓腓腑腑腑腑腑腑腑腑榊タ胼胼胼ч胼胼胼括合榊腱腱хК腱∞В腮腮腮腮腮腮胼腮援┿腮丞┠腥腥腥腥∞∝蘊腥亥合順腦腦腦腦腦腴腦?腦句腴腦翠腴腴腴腴霱腴腴腴腴腴∞∝腴腴亥膃霳膃膃括膃膃膃窮膃句膈榊膈膃膈膈膈窮ョ雁х亥援膈膊膊膊膊膊膊膊膊膊靁膊膀膀膀膀靃雁膀膀膂膂膀膀ョ膂膂膂膀括欠膂膀句娃膂х葵膂膂欠茜膂順膠膠膠靏膠膠膠膠ょ膠ョ卯膠窮膕膕ょ沖膕∝黄膕∞襖膕括臆膕援荻膕合化膤膤膤膤膤膤膤∫紫劾膤牙慨膤句該膣???????????????????????????????????????????????????????????????????膣膣膣膣腟腟膣膣牙歓膣窮腟括腟腟牙季腟腟靚g膓腟膓靚順膓榊峡膓g教膩膓順叫膰順侠膓膩膓悟膓亥膩膩ょ膩紫群膩∞膰膰g検膰膰援膰膰膰∝膵膰紫元膰合膰?膰牙減膵х膵膵膵膵膵合巧膵膵主校膾膩膵処小膵睡膾膾膾膾膾膾膾膾膾膾膽悟失臀臀臀臀臀臀臀臀臀臀臀臀臀臀х集臂臂臂臂臂臂臂臂臂臂臂g少臂牙捷臂臂句掌茘援膺膺膺膺膺∞職膺膺括森蕋∴粋肢∵活画域区壕処粋ヨ沿h???????????????????????????????????????????????????????????????????乗取沿ヨ頑よh域笈乗梧処肴ц肴肢乗梧活?∵沿決梧乗肢∴h頑活肴肢壕笈頑画沿壕ェ「h取オ活笈ィ吧ű恡埈兓∵ス梧嶒取決壕笈∵壕粋肢∴∴粋頑取h???????????????????????????????????????????????????????????????????よ決乗肴壕ヨ壕乗肴∵域粋箙ц沿h区域h?肢壕頑粋決肢ヨ梧頑h∵処活肢画乗区決∵∴沿区壕ц肢茵茵茵茵茵∵゛茴茵乗茵笈―茴笈_茴茴茴茴茴茴∵茴よ域⊃茴沿茖茖茖茖茖茖壕茖取4茖茖画茲茲茲茱茲茲ヨお茲茱茱茲肢ざ茲梧茲茱茱???????????????????????????????????????????????????????????????????茱茱よキ茱茱茱頑シ茱乗荀荀荀荀荀∴Ι荀荀荀荀画肴処粋茹茹茹茹цТ茹梧荐荐荐荐荐荐ヨ╋荅荅荅荅荅荅取荅荅∵茯茯茯茯∴茯ヨ茯茯h茫茫茫茫茫活?茫よ沿茫茫∵決茫茗茗茗茫∴茗茗茗茗渇茗茗茗乗茘茘茘顑茘茘茘茘茘茘茘茘茘頑処莅莅莅莅莅莅莅莪肴莪粋莟莟莟莟莟∵卯莟梧浦莢莢莢莢莢莢莢莟取莢莢莢処臆莢活荻莢区莖莖よ械莖莖処該莖肢茣茣茣茣顢茣藹茣莖茣茣莎ц記莎沿騎莇莇莊莇乗矯莊顦莊莊莊莊莊莊莊莊h啓荼荼莊粋荼荼荼莵荼笈鍵荼頑???????????????????????????????????????????????????????????????????莵莵莵莵莵莵莵よ荼莵h莵区慌莵取荳荳荳荳荳荳荳荳荳荳荳∴根荳域荳沿詐荵荵荵荵荵h纂荵肢捌荵乗莠莠莠莠莠莠莠莠莠莠莠活嫉莠壕莉莠乗莉莉莉莉莉?莉∵州莉よ莨莨h将莨莨決菴ヨ植菴菴菴顔菴壕榛♂ч狗級壕晋冗狗臥初演級∫ゆ臥育iラ渇臥∫級顔咲♂守級狗翠ら翠拷潔咲???????????????????????????????????????????????????????????????????∫i咲級脂守ーャュケラら狗級♂咲∫育級潔初守冗翠?ч守脂拷冗羶狗♂ラ∫♂潔臥ч演臥育顔狗檎拷茱拷ら育拷初冗ら演拷守咲i渇顔藹牙狗級檎ら♂潔初蕁馹蕁蕁蕁???????????????????????????????????????????????????????????????????蕁演ヾ蕁渇→蘂蘂演狗蕋蕋蕋蕋蕕蕕蕕蕕蕕蕕♂蕕蕕ら蕕蕕蕕初ぞ薀薀薀薀薀薀薀薀薀薤薤薤ラΝ薤薤守薈薈薈薈薈薈薈演Р薈脂Ц薑薑駔薈∫薑薑潔薊薊薊?薑冗薊薊薊薊薊∫ラら薊薊薨薨育守蕭駜蕭蕭蕭蕭蕭∫i蕭蕭蕭蕭顔演潔脂薔薔薔薔∫iラч薔薔薔薔薔臥薛薛駧薛薛薛薛顔藪藪藪藪藪藪藪藪顔薇藪拷薇駫薇薇i∫ら薇♂虻薇臥演育薜薜薜薜薜薜薜薜薜薜薜薜ラ阿薜♂旭蕷薜臥薜冗蕷蕷ч蔚蕷檎皆薐薐育藉薐藉藉藉藉藏藉i薺藉藉薺藉翠款薺薺???????????????????????????????????????????????????????????????????薺薺薺ら薺薺薺臥藏藏薺薺咲藏ら匡藏臥薹藏脂狂藏咲薹騂薹薹薹檎窪薹薹薹初藐藐藕級更藕初藝藝藝藝藝藝藝藝ラ懇藝檎昏藝♂藥藥騌藥藥藥藥藥藥ラ雑藥?藥顔散藥潔珊藥脂纂藥初藜潔藜♂蒔藜冗藹藹藹i藹藹♂拾藹ч習藹藹潔讐藹狗蘊蘊罕ゅ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????膾茲篆紙掩号糸筝篁>纂篌篌篌剛箴箴箴箴篆≫真医翫ゅ上ゅ峨イ鍜水ュ鍜?鍜紜紜峨絅絅絅絅eΔ絋阪絲絲絲絨絏絏阪概經у鍜綉綉絛後狭綏綣≦軸綵у招綽我傑井喁紙ゆユ鍜恰我炊堺錣紙罅罍鍜罐鍜网罕∽┛罘罘罘恰丈∽ゆ羂炊羃羆羈羇羔羌羔羔羞闋御群羞惹弦羚羝ф玄羣炊羮究慎鍜丞???????????????????????????????????????????????????????????????????丞わ欠スg喂∝鍜∞隋ょ〆腓逸鍜鍜胼鍜胼腴腴э腴膊鍜腟腟膓欠膩膵臀臂¥∵粋嚷頑?鍜逸鍜∴茖笈荐決壕ц乗鍜∵区茘粋外莖頑莎駈┌荵鍜わ┘ч鍜чらラ咲守拷чч潔檎ч鍜чラ♂誌┬翠育、夣演錻鍜渇脂蕁蕁ワ┴鍜蕕э━薤薊蕭蕭薛級臥駪演脂薺育徽鍜藐藥??謂奄霞鰍癌汲金撃呉刻植鐃わ鐚???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????謂奄霞鰍癌汲金撃呉高≠≒bもモр鐃鐃わ鐚奄≠窮茲篆紙掩号糸筝篁>纂篌篌篌剛箴箴箴箴篆≫真医翫?ゅ上ゅ峨イ鍜水ュ鍜鍜紜紜峨絅絅絅絅eΔ絋阪絲絲絲絨絏絏阪概經у鍜綉綉絛後狭綏綣≦軸綵у招綽我傑井喁紙ゆユ鍜恰我炊堺錣紙罅罍鍜罐鍜网罕∽┛罘罘罘恰丈∽ゆ羂炊羃羆羈羇羔羌???????????????????????????????????????????????????????????????????羔羔羞闋御群羞惹弦羚羝ф玄羣炊羮究慎鍜丞援丞わ欠スg喂∝鍜∞隋ょ〆腓逸鍜?鍜胼鍜胼腴腴э腴膊鍜腟腟膓欠膩膵臀臂¥∵粋嚷頑鍜逸鍜∴茖笈荐決壕ц乗鍜∵区茘粋外莖頑莎駈┌荵鍜わ┘ч鍜чらラ咲守拷чч潔檎ч鍜чラ♂誌┬翠育、夣演錻鍜渇脂蕁蕁ワ┴鍜蕕э━薤薊蕭???????????????????????????????????????????????????????????????????蕭薛級臥駪演脂薺育徽鍜藐藥???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽鷽鷽◆鷽□鷽■鷽△鷽▲鷽▽鷽▼鷽※鷽〒鷽→鷽←鷽↑鷽↓鷽〓鷽鷽鰯植遠植回植鞄植寄植挙植虞植兼植佼植酷植朔植雌植首植藷植杖植嵩殖鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%殖‰殖s殖ん殖ン殖鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽0鷽1鷽2鷽3鷽4鷽5鷽6鷽7鷽8鷽9鷽朔殖雌殖???????????????????????????????????????????????????????????????????鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽??????鷽鷽鷽??鷽鷽鷽???鷽鷽鷽鷽???????????????????鷽ゲ鷽コ鷽ゴ鷽サ鷽ザ鷽シ鷽ジ鷽ス鷽ズ鷽セ鷽ゼ鷽ソ鷽ゾ?鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽Α鷽Β鷽Γ鷽Δ鷽Ε鷽Ζ鷽Η鷽Θ鷽Ι鷽Κ鷽Λ鷽Μ鷽Ν鷽Ξ鷽Ο鷽Π???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????10111210cZxNEw`}Sn????????E???因汚悔F???????H???????????????????????潜遭?蒸著??偬迄?囗囗咢劍???恫崩??戀?????????????揮堅腰遇鋸公?利???????癢璋§‡??~??????銹???????????????????????????????????????????????????????????????????髦陌?????????????????????笘笘??因蝌蔕蔕児t????^磔踐???R?褻????ww??程????????????????????????????Q}???????????????燔??????????V??????????tH~??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????10???????????????{?~?????????NG???????????????????????????????????????????????????????????????????`abcdefghijklmnopqrstuvwxy?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????序据?G?????葺?CD???攪I?????????????????????w?????????????????????????????????????????????????????????????????H??u???????????{|????????机^C???銹??~????~??撕I??EW???????????褻褻劍磋?广恋鬻鬻???燔w??????}褻?尨????????E?????????偬?R?s????????????t?貯G??@ ?璋癢?10‡因汚?葺迄???尾??遭?堅遇公錯????????H???????????????F??????☆????????????譏??????Ez{??UP?鋸???滾?陂頽髦鴕齪@??姻?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????§‡x因汚怪釜揮鋸遇堅公腰錯侍授序蒸据潜遭鐸著程祷賑曝尾葺崩迄柳利恋偬劍咢囗奚尨广恫戀攪暘椈樢沽滾燔璋癢磋笘鬻纔胯苻蔕蝌褻譏踐逖銹陂頽髦鴕齪???????????????????????????????????????????????????????????????????@ABCDEFGHI??????PQR??UVW???[\]^???????????????????rstuvwxyz{|}~?☆¶y????????Q?w?R??????????????NG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????wr???????????????????????暘燔??磋???VSQ???????????x尸???????????尾恋??賑葺曝?崩遭?????????????????????????????????????????????椈囗j????????尨???广??笙P?~☆H????????????????????????????????????????????????????????????????????????????????銹頽陂髯UP?z{\???T|wc????攪I?因汚???????i???????????????????????????????????????????????????????????????????????????????????????暘序???????????????????W??????????????????????????????????????????????????????????磋蔕蝎t???公鋸遇???杉G著授H???????????????H?????恫戈}???偬咢?囗‡☆C??F??E??????????????????????????????????????????????????????????????????????????????????E???????`aABn????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽鷽鷽◆鷽□鷽■鷽△鷽▲鷽▽鷽▼鷽※鷽〒鷽→鷽←鷽↑鷽↓鷽〓鷽鷽鰯植遠植回植鞄植寄植挙植虞植兼植佼植酷植朔植雌植首植藷植杖植嵩殖鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%殖‰殖s殖ん殖ン殖鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽0鷽1鷽2鷽3鷽4鷽5鷽6鷽7鷽8鷽9鷽朔殖雌殖???????????????????????????????????????????????????????????????????鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽??????鷽鷽鷽??鷽鷽鷽???鷽鷽鷽鷽???????????????????鷽ゲ鷽コ鷽ゴ鷽サ鷽ザ鷽シ鷽ジ鷽ス鷽ズ鷽セ鷽ゼ鷽ソ鷽ゾ?鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽Α鷽Β鷽Γ鷽Δ鷽Ε鷽Ζ鷽Η鷽Θ鷽Ι鷽Κ鷽Λ鷽Μ鷽Ν鷽Ξ鷽Ο鷽Π鷽Ρ鷽Σ鷽Τ鷽Υ鷽Φ鷽Χ鷽Ψ鷽Ω鷽酷職朔職雌職首職藷職杖職嵩色鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽А鷽Б鷽В鷽Г鷽Д鷽Е鷽Ё鷽Ж鷽З鷽И鷽Й鷽К鷽Л鷽М鷽Н鷽О鷽П鷽Р鷽С鷽Т鷽У鷽Ф鷽Х鷽Ц鷽Ч鷽Ш鷽Щ鷽Ъ???????????????????????????????????????????????????????????????????10111210cZxNEw`鎗}Sn???????E???因汚悔F?????H???褶????????????????潜遭?蒸著濁?偬迄奘髯頽囗咢劍???恫崩??戀????????????揮堅腰遇鋸功?利??????笘癢璋§‡?磔~??????銹???????????????????????????????????????????????????????????????????髦陌??????????????????笘笘?潜因蝌蔕蔕児t児??^磔踐????褻??尨?樹w??程?????????????????????????杉煎桜}???????????????燔胱?????????V?????????tH~囮咸??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????戈戈戈???????????????????????????????????????????????????????????????????????????????????????????????????10???????????????{?~?????????姻???????????????????????????????????????????????????????????????????`abcdefghijklmnopqrstuvwxy?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????序据?G桜????葺?CD???攪I?????????????????????w?????????????????????????????????????????????????????????????????檐H??u??????????{|????????机^C??銹咸譎~?鎗?~??撕I?EW????庠椈????褻褻劍磋?糯沽恋鬻鬻???燔w?締????}褻?尨???????踟E???????褶尨?偬??s??f?????????t?貯G??@ ?璋癢?10‡因汚?葺迄???尾?鐸遭?堅隅堅錯????????H????苹?銹奘???F????☆吏??????????柳譏???棘??Ez{??UP?鋸???滾?陂頽髦鴕齪@??姻?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????§‡x因汚怪釜揮鋸遇堅公腰錯侍授序蒸据潜遭鐸著程祷賑曝尾葺崩迄柳利恋偬劍咢囗奚尨广恫戀攪暘椈樢沽滾燔璋癢磋笘鬻纔胯苻蔕蝌褻譏踐逖銹陂頽髦鴕齪???????????????????????????????????????????????????????????????????@ABCDEFGHI??????PQR??UVW???[\]^???????????????????rstuvwxyz{|}~?咸☆¶y姻甥悔鎌机漁隅嫌功甑桜児樹徐譲杉煎鎗濁貯締等肉漠微蕗庖侭薮吏憐偸劔咸囮奘尸庠恙戈撕暝棘檐泗漿燎璞癨磔笙糯纖胱苹蔔蝎褶譎踟逋銷陌顆髯鴒齷??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????wr吏?????杉????????????暘燔??磋???VS???????????x尸???????????尾恋??賑葺曝侭笘崩遭????????????????????????????????????????????棘頽j????纖????尨??广??笙P功~☆H貯???????????????????????????????????????????????????????????????????????????銹頽陂髯UP?z{\???T|璞wc????攪I?因汚??姻庠???i???????????????????????????????????????????????憐偸?????????????????????????????????????暘序??????????????????W?????????????????????????????????????????????????????????釜磋蔕蝎t児¶?公鋸遇?嫌杉G著授H??????????????H煎潜締据?薮纔恫戈}???偬咢劔陂囗‡☆C??F??E?咸???????????????????????????????????????????????????????????????????????????E???????`aABn?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽%尻‰尻s尻ん尻ン尻鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯尻遠尻回尻鞄尻寄尻挙尻虞尻兼尻佼尻酷尻朔尻雌尻首尻藷尻杖尻嵩伸鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%伸‰伸s伸ん伸ン伸鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯伸遠伸回伸鞄伸寄伸挙伸虞伸兼伸佼伸酷伸??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽亜鷽唖鷽娃鷽阿鷽哀鷽愛鷽挨鷽姶鷽逢鷽葵鷽茜鷽穐鷽悪鷽握鷽渥鷽旭鷽葦鷽芦鷽鯵鷽梓鷽圧鷽斡鷽扱鷽宛鷽姐鷽虻鷽飴鷽絢鷽綾鷽鮎鷽或鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽院鷽陰鷽隠鷽韻鷽吋鷽右鷽宇鷽烏鷽羽鷽迂鷽雨鷽卯鷽鵜鷽窺鷽丑鷽碓鷽臼鷽渦鷽嘘鷽唄鷽欝鷽蔚鷽鰻鷽姥鷽厩鷽浦??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽粥鷽刈鷽苅鷽瓦鷽乾鷽侃鷽冠鷽寒鷽刊鷽勘鷽勧鷽巻鷽喚鷽堪鷽姦鷽完鷽官鷽寛鷽干鷽幹鷽患鷽感鷽慣鷽憾鷽換鷽敢鷽柑鷽桓鷽棺鷽款鷽歓鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽機鷽帰鷽毅鷽気鷽汽鷽畿鷽祈鷽季鷽稀鷽紀鷽徽鷽規鷽記鷽貴鷽起鷽軌鷽輝鷽飢鷽騎鷽鬼鷽亀鷽偽鷽儀鷽妓鷽宜鷽戯?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$FE$F<$F=$F>$F?$F@$FA$FB$FC$FD101112$F<$F=$F>$F?$F@$FA$FB$FC$FD10$FMZxNE$FLp`}Sn$Gs$Gp???$G:$E)?$Gr?$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fk$Fg?$Fh$Fi$Fj$Go?$Gt$G9$E*???$GS???$GP$E9???????$G$$G%??$G!$G"$EZ??$E,$Gn$E:$Ez$Ey$G>$F!$G?$G=$F"??$Gc$Ev$E@?$Gg$Gg$Gd$Ge$Gc???$G\$Ex$Eg?$ED?$G]???$G[???$El$ES$EM$ET$EV$EU?$G6$G8?$G5$G4$G3$G3?$Eo$GZ$Ep$Gc??$Eu$EA$EC$Em$Er?$Ew$F(?$Gj$Gi$Gk$Gh$E]?$F[$FZ???$FQ$FP$FO$FN$G0$G1$G2$G#$E<$GB$GB$F,$F-???????????????????????????????????????????????????????????????????$F/$F.!!!?????$G^$E0???$G&??$G&????$G'$E^?????$E>$E>???$GT$G*$G*$G)$G)?$G+$G,$G,???$G($E/?$EJ$EH$G^?$EF$E-??$Eh$Eh???$Es?$E#$E#$E4??$GV$GX????????????????????$E3??????$E.$GU$EO$G_$Ed?$E6?????????$Ga?$Eb$EE$E2???$Gk????????$Gz??$Gf???$Gg???tH~?$Gw$Gx$Gy??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$E5$E5$E5$E5?????????????????????????????????????????????????????????????????????????????????????????????????$F0$FE??$FE$F<$F=$F>$F?$F@$FA$FB$FC$FD10???????????????{?~?????????$FmNG$FF$FG???????????????????????????????????????????????????????????????????`abcdefghijklmnopqrstuvwxy?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$G$$G%???$Ez$Ez?$G<$ER??$En???$Et$Eq$F*???$Gl????$FV$FX$FW$FY???$F2$GA??$F)?$GB$F1??????????????$E#??????????????????????????????????????????????????????????????????$Fr$GA$G@p$F[$FZ$F]$F\??$Gd$Eb?$E]?????????{|$FR$FS????????$FW$FX$Gj$G6?$Gl??$G"$F,$Gd??~????$Gh~?$FT$FU$Gg?$Gv$FV$FY$GU?$Gr?$E7$E7??$G!$Fn$Fo$E>?$G)???$Eh$Eh$Ge$G($Gk?$Eh$En$Eh$Eh$Eh???$EE$Gi$E#$G]?$GV??????$E4$G_$Eh$Eh?$E^$Ez???$E!???$E8$Gr???$Ee?$FP$FQ$Eh?$E2?$Gc$Eh???$E#???$G)?????$G*????$G+?$G=$G<??$G>@ ??$F($F*$F)$F<$F=$F>$F?$F@$FA$FB$FC$FD10?$Gh$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fg$Fh$Fi$Fj$Fk$Et$Ev$Eq$Eo$Ep$Ek?$Em$GZ??$Ey$G??$G8$G5$G3$ER$ED??$G]????$EP??$GS$GP$E;??$Gf??$G9??$E@$Gt?$G:$E)?$Go$Gu?$E+??$Gw$Gy$Gx?$E\$Gy$E($E%$GC$GB?$E=?$El$GB$G#$E,??$E:?$G0???$FF$E<$G.$EJ$G\?$G^$Ga?$G^?$E3?$Ez$F6$EF??$F3$E[?$G4???????$F.$F-$F/??$G1$G2????$FE$Fm?$GB?$E(????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$Gj$Gi$Gk$Gh$E]???$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fg$Fh$Fi$Fj?$G6$G4$G5$G8$G3?$ER?$G>?$G?$Ez$Ez$Ey$F"$G=$GV$GX$Es$Eu$Em$Et$Ex$Ev$GZ$Eo$En$Eq$Gc$Ge$Gd$Gg$E@$E^?$G\$G]$FV$ED$G^???$EE?$F($G($E>$Eh?$E2$E2$G)$G*$Eh$EJ?$EF$F,$F.$F-$F/??$G0$G1$G2$FX$FW?$G'?$F*??????????????????????????????????????????????????????????????????????$Gl?$Gr$Go$G<$GS$FY??????????????????$ON?????????????????????$E$$E#$G+$E#??$F5$F6$FI$G_???$E4$F2?$F1$F0p$F<$F=$F>$F?$F@$FA$FB$FC$FD$FE$GB$GB$GC$GB$Gw$Gy$Gx$Gx?$FV$G^$EC?$G#$E/$Gy$G-??$FX$E\$GA!?!!?$E($E(?``$Fm??$G&???$G3??$EO$G,$E#??$E.$GT??e???$E($E($Gy?$E&$G.$E%?$Gw??$Gx?NG?$Fn?$E5?$Fo$Fr$FK$FJ?$Ew?$G[$E0?????$E8$GP?$Gf$Gg????$Gu$G9??$G:$E+$Gd?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$E!$E"$E#$E$$E%$E&$E'$E($E)$E*$E+$E,$E-$E.$E/$E0$E1$E2$E3$E4$E5$E6$E7$E8$E9$E:$E;$E<$E=$E>$E?$E@$EA$EB$EC$ED$EE$EF$EG$EH$EI$EJ$EK$EL$EM$EN$EO$EP$EQ$ER$ES$ET$EU$EV$EW$EX$EY$EZ$E[$E\$E]$E^$E_$E`$Ea$Eb$Ec$Ed$Ee$Ef$Eg$Eh$Ei$Ej$Ek$El$Em$En$Eo$Ep$Eq$Er$Es$Et$Eu$Ev$Ew$Ex$Ey$Ez??????????????????????????????????????$Eh???????$E`$G^$Gg$Ggj????????$Eb??$E^$G'???????$E>??$G^$GB$GB$GB$GB$GB$GB$GB?$E(~$Gy$G@$GAe????????????????????????????????????????????????????????????????????????$F!$F"$F#$F$$F%$F&$F'$F($F)$F*$F+$F,$F-$F.$F/$F0$F1$F2$F3$F4$F5$F6$F7$F8$F9$F:$F;$F<$F=$F>$F?$F@$FA$FB$FC$FD$FE$FF$FG$FH$FI$FJ$FK$FL$FM$FN$FO$FP$FQ$FR$FS$FT$FU$FV$FW$FX$FY$FZ$F[$F\$F]$F^$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fg$Fh$Fi$Fj$Fk$Fl$Fm$Fn$Fo$Fp$Fq$Fr$Fs$Ft$Fu$Fv$Fw$Fx$Fy$Fz??????????????????????????????????????$E(?????$Gx??????????????$Gy???????????????????????$Ez????$ED?$G??????????????????$E9?$Gm$Ef??????????????????????????????????????????????????????$G!$G"$G#$G$$G%$G&$G'$G($G)$G*$G+$G,$G-$G.$G/$G0$G1$G2$G3$G4$G5$G6$G7$G8$G9$G:$G;$G<$G=$G>$G?$G@$GA$GB$GC$GD$GE$GF$GG$GH$GI$GJ$GK$GL$GM$GN$GO$GP$GQ$GR$GS$GT$GU$GV$GW$GX$GY$GZ$G[$G\$G]$G^$G_$G`$Ga$Gb$Gc$Gd$Ge$Gf$Gg$Gh$Gi$Gj$Gk$Gl$Gm$Gn$Go$Gp$Gq$Gr$Gs$Gt$Gu$Gv$Gw$Gx$Gy$Gz????????????????????????????????????????????$G]??????????????????$EZ?????$G9?$G9????$E+$E)?$Gr???????`aABn???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽%信‰信s信ん信ン信鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯信遠信回信鞄信寄信挙信虞信兼信佼信酷信朔信雌信首信藷信杖信嵩侵鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%侵‰侵s侵ん侵ン侵鷽鷽鷽鷽鷽鷽鷽???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽押鷽旺鷽横鷽欧鷽殴鷽王鷽翁鷽襖鷽鴬鷽鴎鷽黄鷽岡鷽沖鷽荻鷽億鷽屋鷽憶鷽臆鷽桶??鷽俺鷽卸鷽恩鷽温鷽穏鷽音鷽下鷽化鷽仮鷽何鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽魁鷽晦鷽械鷽海鷽灰鷽界鷽皆鷽絵鷽芥鷽蟹鷽開鷽階????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽供鷽侠鷽僑鷽兇鷽競鷽共鷽凶鷽協鷽匡鷽卿鷽叫鷽喬鷽境鷽峡鷽強鷽彊鷽怯鷽恐鷽恭鷽挟鷽教鷽橋鷽況鷽狂鷽狭鷽矯鷽胸鷽脅鷽興鷽蕎鷽郷鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$FE$F<$F=$F>$F?$F@$FA$FB$FC$FD101112$F<$F=$F>$F?$F@$FA$FB$FC$FD10$FMZxNE$FLp`$O5}Sn$Gs$Gp$QL?$QM$G:$E)$QN$Gr$QO$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fk$Fg?$Fh$Fi$Fj$Go$QF$Gt$Q@$E*???$GS?$O$$O%$GP$Pg$Of$Oe?$Og???$G$$G%??$G!$G"$Q:?$Ph$E,$Gn$E:$PN$Ey$G>$F!$PU$G=$F"??$Gc$Ev$E@$O`$O+$Gg$Gd$Ge$Gc?$Od?$G\$Ex$Eg?$ED?$Q'???$G[???$El$ES$EM$ET$EV$EU?$G6$G8$PJ$G5$G4$G3$G3?$Eo$GZ$Ep$Gc??$Eu$EA$EC$Em$Er?$Ew$F($O.$Gj$Gi$Gk$Gh$E]?$F[$FZ???$FQ$FP$FO$FN$G0$G1$G2$G#$E<$GB$GB$F,$F-???????????????????????????????????????????????????????????????????$F/$F.!!!?????$G^$E0$QE$PY?$G&??$G&????$G'$E^?$O"$O8$Q#$O8$E>$OC???$GT$G*$G*$G)$G)?$G+$G,$G,???$G($E/?$EJ$EH$O*?$EF$E-??$O!$Eh?$O3?$Es?$E#$E#$E4??$GV$GX$P]$Q&??????????????????$E3$O1?????$E.$GU$EO$G_$Ed?$E6???$OZ?????$Ga?$O7$EE$E2$O<??$Gk??$O]?????$Gz??$Gf???$O,?$O2?tH~$P($P5$Gx$P6??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$E5$E5$E5$E5?????????????????????????????????????????????????????????????????????????????????????????????????$F0$FE??$FE$F<$F=$F>$F?$F@$FA$FB$FC$FD10???????????????{?~$OR?????????$FmNG$FF$FG???????????????????????????????????????????????????????????????????`abcdefghijklmnopqrstuvwxy?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~??????????????????????????????????????????????????????????????????????????$QV$QV?????????????????????????????????????????????????????????$QQ???$G$$G%??$PT$Ez$Ez?$G<$ER$Ob?$En???$Et$O)$F*?$Pc$P\$Gl?$OO???$FV$FX$FW$FY???$F2$OW??$F)?$GB$F1??????????????$E#?????????????$P;????????????????????????????????????????????????????$Fr$OW$OVp$F[$FZ$F]$F\??$Gd$O7?$E]?????????{|$OO$FR$FS????????$FW$FX$Gj$G6?$Gl$OE?$G"$F,$Gd?$QW~????$Gh$OS?$FT$FU$Gg?$P4$OO$FV$FY$GU?$Gr$Pk$E7$E7$QC?$G!$Fn$Fo$OC?$G)??$Q,$O!$O!$Ge$G($Gk$PK$Eh$En$Eh$Eh$Eh?$O3?$EE$Gi$E#$Q'?$GV$O$?????$E4$G_$O!$O!?$O:$Ez???$E!???$E8$QJ???$Ee?$FP$FQ$O!?$E2?$Gc$Eh$PO??$E#???$G)?????$G*????$G+?$G=$G<??$G>@ ?$O.$F($F*$F)$F<$F=$F>$F?$F@$FA$FB$FC$FD10$Pc$Gh$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fg$Fh$Fi$Fj$Fk$Et$Ev$O)$Eo$Ep$Ek?$Em$GZ??$Ey$PU?$G8$G5$G3$ER$ED??$Q'?$Q)??$EP??$GS$GP$E;$Q+$Oh$Gf??$G9$Og$Ob$E@$Gt$QL$G:$E)$QQ$Go$Gu?$E+$O'$O%$P5$P6$Gx$Q:$E\$OT$E($E%$GC$GB$OO$O1$E=?$El$OI$G#$E,?$QV$E:$O5?$G0$OP??$FF$E<$G.$EJ$G\?$G^$Ga?$O*$O<$E3$O>$Ez$F6$EF$O9?$F3$E[?$G4$PJ????$O4$Ok$F.$F-$F/$P9$P;$G1$G2????$FE$Fm?$GB?$OQ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$Gj$Gi$Gk$Gh$E]$Pc?$P\$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fg$Fh$Fi$Fj?$G6$G4$G5$G8$G3$PJ$ER?$G>$PT$PU$Ez$PN$Ey$F"$G=$GV$GX$Es$Eu$Em$Et$Ex$Ev$GZ$Eo$En$O)$Gc$Ge$Gd$Gg$E@$E^$O?$G\$Q'$FV$ED$O*???$EE$O.$F($G($OC$Eh$O4$E2$E2$G)$G*$O!$EJ?$EF$F,$F.$F-$F/$P9$P;$G0$G1$G2$FX$FW$QV$G'?$F*??????????????????????????????????????????????????????????????????????$Gl?$Gr$Go$G<$GS$FY??????$OD??????$Pk????$ON?????????????????????$E$$E#$G+$E#??$F5$F6$FI$G_???$E4$F2?$F1$F0p$F<$F=$F>$F?$F@$FA$FB$FC$FD$FE$GB$GB$GC$GB$P5$P6$Gx$P'?$FV$G^$EC?$G#$ON$E/$OT$G-$O1?$FX$E\$OW!?!!?$OQ$E($OP``$Fm??$G&?$O<?$G3$OE?$EO$G,$E#??$E.$GT??$OX???$P!$P!$Gy?$E&$G.$E%$P%$P5$P&?$Gx$P(NG?$Fn$QW$E5$O5?$Fo$Fr$FK$FJ?$Ew$P^$G[$E0?$O$?$Oe?$E8$GP$Ob$Gf$O+$Om$OY?$QC$Gu$G9??$G:$E+$Gd?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$E!$E"$E#$E$$E%$E&$E'$P!$E)$E*$E+$E,$E-$E.$E/$E0$E1$E2$E3$E4$E5$E6$E7$E8$Pg$E:$E;$E<$E=$E>$E?$E@$EA$EB$EC$ED$EE$EF$EG$EH$EI$EJ$EK$EL$EM$EN$EO$EP$EQ$ER$ES$ET$EU$EV$EW$EX$EY$Q:$E[$E\$E]$E^$E_$O)$Ea$O7$Ec$Ed$Ee$Pj$Eg$Eh$Ei$Ej$Ek$El$Em$En$Eo$Ep$O)$Er$Es$Et$Eu$Ev$Ew$Ex$Ey$Ez??????????????????????????????????????$O!$O"$O#$O$$O%$O&$O'$O($O)$O*$O+$O,$O-$O.$O/$O0$O1$O2$O3$O4$O5$O6$O7$O8$O9$O:$O;$O<$O=$O>$O?$O@$OA$OB$OC$OD$OE$OF$OG$OH$OI$OJ$OK$OL$OM$ON$OO$OP$OQ$OR$OS$OT$OU$OV$OW$OX$OY$OZ$O[$O\$O]$O^$O_$O`$Oa$Ob$Oc$Od$Oe$Of$Og$Oh$Oi$Oj$Ok$Ol$Om???????????????????????????????????????????????????$F!$F"$F#$F$$F%$F&$F'$F($F)$F*$F+$F,$F-$F.$F/$F0$F1$F2$F3$F4$F5$F6$F7$F8$F9$F:$F;$F<$F=$F>$F?$F@$FA$FB$FC$FD$FE$FF$FG$FH$FI$FJ$FK$FL$FM$FN$FO$FP$FQ$FR$FS$FT$FU$FV$FW$FX$FY$FZ$F[$F\$F]$F^$F_$F`$Fa$Fb$Fc$Fd$Fe$Ff$Fg$Fh$Fi$Fj$Fk$Fl$Fm$Fn$Fo$Fp$Fq$Fr$Fs$Ft$Fu$Fv$Fw$Fx$Fy$Fz??????????????????????????????????????$P!$P"$P#$P$$P%$P&$P'$P($P)$P*$P+$P,$P-$P.$P/$P0$P1$P2$P3??$P6$P7$P8$P9$P:$P;$P<$P=$P>$P?$P@$PA$PB$PC$PD$PE$PF$PG$PH$PI$PJ$PK$PL$PM$PN$PO$PP$PQ$PR$PS$PT$PU$PV$PW$PX$PY$PZ$P[$P\$P]$P^$P_$P`$Pa$Pb$Pc$Pd$Pe$Pf$Pg$Ph$Pi$Pj$Pk$Pl????????????????????????????????????????????????????$G!$G"$G#$G$$G%$G&$G'$G($G)$G*$G+$G,$G-$G.$G/$G0$G1$G2$G3$G4$G5$G6$G7$G8$G9$G:$G;$G<$G=$G>$PU$OV$OW$GB$GC$GD$GE$GF$GG$GH$GI$GJ$GK$GL$GM$GN$GO$GP$GQ$GR$GS$GT$GU$GV$GW$GX$GY$GZ$G[$G\$Q'$G^$G_$G`$Ga$Gb$Gc$Gd$Ge$Gf$Gg$Gh$Gi$Gj$Gk$Gl$Pi$Gn$Go$Gp$Gq$Gr$Gs$Gt$Gu$P4$P5$Gx$P6$Gz??????????????????????????????????????$Q!$Q"$Q#$Q$$Q%$Q&$Q'$Q($Q)$Q*$Q+$Q,$Q-$Q.$Q/$Q0$Q1$Q2$Q3$Q4$Q5$Q6$Q7$Q8$Q9$Q:$Q;$Q<$Q=$Q>$Q?$Q@$QA$QB$QC$QD$QE$QF$QG$QH$QI$QJ$QK$QL$QM$QN$QO$QP$QQ$QR$QS$QT$QU$QV$QW$QX$QY??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌首藷?鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌首藷杖嵩鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌???????????????????????????????????????????????????????????????????鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌首藷?鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌首藷杖嵩鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽?????????????????????????????????????????????????????????????????????????????????????????????????????????鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌首藷?鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽????鷽鰯遠回鞄寄挙虞兼佼酷朔雌首藷杖嵩鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽?????????鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌???????????????????????????????????????????????????????????????????鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんン鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鰯遠回鞄寄挙虞兼佼酷朔雌首藷?鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽。鷽「鷽」鷽、鷽・鷽ヲ鷽ァ鷽ィ鷽ゥ鷽ェ鷽ォ鷽ャ鷽ュ鷽ョ鷽ッ鷽ー鷽ア鷽イ鷽ウ鷽エ鷽オ鷽カ鷽キ鷽ク鷽ケ鷽コ鷽サ鷽シ鷽ス鷽セ鷽ソ鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽%‰sんンήѓ鷽鷽Ÿÿ鷽鷽鷽鷽佬偭冎勩呏喭囜埰奆媠?????????????????????????????????????????????????????????????????????鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽鷽????????????????????????????????????????????????鷽???鷽鷽鷽鷽鷽鷽鷽?鷽鷽鷽?鷽???鷽鷽鷽?鷽鷽鷽鷽鷽???鷽鷽%‰s???鷽鷽鷽鷽鷽鷽鷽鷽????鷽寄??????鷽首藷?????鷽鷽??鷽???鷽???????????????????????????????????????????????????????????????????????????????????????????????????????????????????@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫???????????????????????????????????????????????????????????????????@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏?????????????????????????????????????????????????????????????????????????????????????????????????????????@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩????魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌?????????鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾???????????????????????????????????????????????????????????????????@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲?????????????????????????????????????????????????????????????????????@ABCDEFGHIJKLMNO????????????????????????????????????????????????????????????堯槇遙瑤???????岐??????儒諸?????梯?????????????????????????????????????????????????????????H_韜韭??雎餞鯆?韈?????????鯰|O????????槇堯鞳靂m?顋雎??鰔???韆~隹鰉駻遙顳?s??????^?e?餝?yy雋n餾?z幵zzz趣|餤鞴鰌霓???`??颯yy飃W??????sk?颱?韵韶y}餠?雉z?w????e?{{?餔d???h?隗??隍@ ?鞣鞦MNOPQRSTUV韆uvwxyz{|~}隰靫靹?靼鞏靱?隧陬隕?靉靠靨霆??霓霤????p????馥??隴mpq????駻騁駸?騁???顏O?D霰顆頷陝?E陦b?頸???鱇頽?q霍?I餡?s餬?Ez?u??UP??靤靜??????A顫@?矢頡????魏鰡?顆??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鞳鞴餾韆韈?uvwxyz{|~?靂靤靠靉靦靜g隍隕陲陬險隗~靺鞏雕隰靱靫雉雋雎隹隴W?霍霓霆s?霎?餤鞣鞦n^z?餠餠edyqpu顋A顫@?矢頤頡堯槇EV`??????????????????????????????????????????????????????????????????????s遙????????w???饌????ON?m???????????????????ch???ID颯韲???魃_魘魴鮓鮃鮑鮖鮗鮟鮠魑顆?顏駻騁駸??I鞋頷o騁頸?堯?CB????``鰡??O?餬S靨?颪i?w顴b?隧雋?????騁?顏???駻??駸駲鰰}??Lb??瑤齏鞨?霖J???馥隸???????p?雎???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????c?顏??q?陝v顴oJ頷餠L飄??陦?頽?^?隴鞆?鞋霆餤u?rnq??霽VS颪??霹霾靆靄?????韈W鞋餞餞?颱颱??z???霰鞏靫靹鞐~靺隰鞨雕陬??????????????????????????????????????yY????s隸駟j鞣??駝|?b?餞Z?WV餬??????^??I顆顆顆顆顆顆顆??鰓~騁OH雋?飫??饅??隶??襍?????????????????????????????????????????????????????????隘險?????鞦?顋顫A@魃UP??\???MNOPQRSTU魏鱇鰲TID齔^W頌頏韵韶槇堯遙韭韜?uvwxyz{|~}?鰡?????i???????????????????????????????????????????????????駲?????????????騁??????????????????靜???陲????霆隕???L?????????????????????????????????????????????????????????????????頷OVnedhi頸??頸頤頡靦靤靠靂?靉p陲隗隍隕H顆???????????????b顳顴?靱霖霍霓I颯?餡?雉雎雋馥隹韆鞴鞳餾?陟l?sk?駻駻駸騁饕????????????????????????????????????????[??霓??????????????????????????K?q?s?mort?`aABnE?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????