Can you see where the -DAP_DEBUG comes from, e.g. by grepping
/usr/local/httpd-2.4.12/bin/ap* for AP_DEBUG?

I think that symbol is not supposed to find its way into the mod_perl
build options, but it's obviously getting picked up somewhere and
slipping through...


On 9 April 2015 at 15:05, Jie Gao <j....@sydney.edu.au> wrote:
> Hi Steve
>
> httpd is configured with "--enable-maintainer-mode".
>
> For mod_perl:
>
>     /usr/local/bin/perl Makefile.PL MP_APXS=/usr/local/httpd-2.4.12/bin/apxs 
> MP_APR_CONFIG=/usr/local/httpd-2.4.12/bin/apr-1-config
>
> and I found the following line in the resultant Makefile:
>
> CCFLAGS =   -D_REENTRANT -D_GNU_SOURCE -fPIC -fwrapv -fno-strict-aliasing 
> -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE 
> -D_FILE_OFFSET_BITS=64 -DMOD_PERL -DMP_COMPAT_1X -DLINUX -D_REENTRANT 
> -D_GNU_SOURCE -DAP_DEBUG
>
>
>
> Regards,
>
> Jie
>
> * Steve Hay <steve.m....@googlemail.com> wrote:
>
>> Date: Thu, 9 Apr 2015 14:29:44 +0100
>> From: Steve Hay <steve.m....@googlemail.com>
>> To: Jie Gao <j....@sydney.edu.au>
>> CC: "modperl@perl.apache.org" <modperl@perl.apache.org>, mod_perl Dev
>>  <d...@perl.apache.org>
>> Subject: Re: Trunk: APR.so won't load
>>
>> Sorry for the slow reply.
>>
>> I cannot reproduce the problem here on Windows. Your example module
>> loads up fine with all the "use APR" lines uncommented.
>>
>> The build system (and the means by which APR::* should be loadable
>> without mod_perl.so being loaded) is different on Windows, but I did
>> notice this:
>>
>> ap_strchr seems to only be used in xs\Apache2\Module\Apache2__Module.h
>> but when I run Module.c through the preprocessor I find that ap_strchr
>> gets changed to strchr, and the latter is simply imported from the C
>> run-time library.
>>
>> I guess that's down to this code in httpd.h:
>>
>> #ifdef AP_DEBUG
>>
>> #undef strchr
>> # define strchr(s, c)  ap_strchr(s,c)
>> #undef strrchr
>> # define strrchr(s, c) ap_strrchr(s,c)
>> #undef strstr
>> # define strstr(s, c)  ap_strstr(s,c)
>>
>> #else
>>
>> /** use this instead of strchr */
>> # define ap_strchr(s, c)     strchr(s, c)
>> /** use this instead of strchr */
>> # define ap_strchr_c(s, c)   strchr(s, c)
>> /** use this instead of strrchr */
>> # define ap_strrchr(s, c)    strrchr(s, c)
>> /** use this instead of strrchr */
>> # define ap_strrchr_c(s, c)  strrchr(s, c)
>> /** use this instead of strrstr*/
>> # define ap_strstr(s, c)     strstr(s, c)
>> /** use this instead of strrstr*/
>> # define ap_strstr_c(s, c)   strstr(s, c)
>>
>> #endif
>>
>> so presumably I do not have AP_DEBUG defined for my build (even though
>> it was a debug build).
>>
>> It looks like AP_DEBUG should not be defined, even in maintainer mode,
>> according to an old Changes entry:
>>
>> remove -DAP_HAVE_DESIGNATED_INITIALIZER and -DAP_DEBUG from
>> MP_MAINTAINER mode to avoid collisions [Joe Orton]
>>
>> but do you somehow have AP_DEBUG defined somewhere, which causes the
>> replacement of ap_strchr with strchr to not happen for you?
>>
>>
>> On 27 March 2015 at 09:14, Jie Gao <j....@sydney.edu.au> wrote:
>> > Hi All
>> >
>> > I had some more time looking into this, and here's some info I can provide.
>> >
>> > --------------------------------------------------------------------------
>> >
>> > # readelf -a 
>> > /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so
>> > ELF Header:
>> >   Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
>> >   Class:                             ELF64
>> >   Data:                              2's complement, little endian
>> >   Version:                           1 (current)
>> >   OS/ABI:                            UNIX - System V
>> >   ABI Version:                       0
>> >   Type:                              DYN (Shared object file)
>> >   Machine:                           Advanced Micro Devices X86-64
>> >   Version:                           0x1
>> >   Entry point address:               0x1cb0
>> >   Start of program headers:          64 (bytes into file)
>> >   Start of section headers:          15480 (bytes into file)
>> >   Flags:                             0x0
>> >   Size of this header:               64 (bytes)
>> >   Size of program headers:           56 (bytes)
>> >   Number of program headers:         6
>> >   Size of section headers:           64 (bytes)
>> >   Number of section headers:         29
>> >   Section header string table index: 26
>> >
>> > Section Headers:
>> >   [Nr] Name              Type             Address           Offset
>> >        Size              EntSize          Flags  Link  Info  Align
>> >   [ 0]                   NULL             0000000000000000  00000000
>> >        0000000000000000  0000000000000000           0     0     0
>> >
>> > [ Lines removed for clarity ]
>> >
>> > Dynamic section at offset 0x36f8 contains 27 entries:
>> >   Tag        Type                         Name/Value
>> >  0x0000000000000001 (NEEDED)             Shared library: 
>> > [libaprutil-1.so.0]
>> >  0x0000000000000001 (NEEDED)             Shared library: [libexpat.so.1]
>> >  0x0000000000000001 (NEEDED)             Shared library: [libapr-1.so.0]
>> >  0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
>> >  0x0000000000000001 (NEEDED)             Shared library: [libcrypt.so.1]
>> >  0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
>> >  0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
>> >  0x000000000000000f (RPATH)              Library rpath: 
>> > [/usr/local/httpd-2.4.12/lib:/lib/../lib64]
>> >
>> > [ Lines removed for clarity ]
>> >
>> > Relocation section '.rela.plt' at offset 0x1300 contains 61 entries:
>> >   Offset          Info           Type           Sym. Value    Sym. Name + 
>> > Addend
>> > 000000203930  000200000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_mg_get 
>> > + 0
>> > 000000203938  000300000007 R_X86_64_JUMP_SLO 0000000000000000 
>> > Perl_sv_setiv + 0
>> > 000000203940  000400000007 R_X86_64_JUMP_SLO 0000000000000000 
>> > Perl_sv_bless + 0
>> > 000000203948  000500000007 R_X86_64_JUMP_SLO 0000000000000000 apr_strerror 
>> > + 0
>> > 000000203950  000600000007 R_X86_64_JUMP_SLO 0000000000000000 
>> > Perl_require_pv + 0
>> > 000000203958  000700000007 R_X86_64_JUMP_SLO 0000000000000000 Perl_warn + 0
>> > 000000203960  000800000007 R_X86_64_JUMP_SLO 0000000000000000 
>> > PerlIO_printf + 0
>> > 000000203968  000900000007 R_X86_64_JUMP_SLO 0000000000000000 ap_strchr + 0
>> >
>> > [ Lines removed for clarity ]
>> >
>> > Symbol table '.dynsym' contains 86 entries:
>> >    Num:    Value          Size Type    Bind   Vis      Ndx Name
>> >      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
>> >      1: 00000000000018b8     0 SECTION LOCAL  DEFAULT    9
>> >      2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Perl_mg_get
>> >      3: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Perl_sv_setiv
>> >      4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Perl_sv_bless
>> >      5: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND apr_strerror
>> >      6: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Perl_require_pv
>> >      7: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Perl_warn
>> >      8: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PerlIO_printf
>> >      9: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND ap_strchr
>> >
>> >
>> > [ Lines removed for clarity ]
>> >
>> > Symbol table '.symtab' contains 143 entries:
>> >    Num:    Value          Size Type    Bind   Vis      Ndx Name
>> >      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
>> >      1: 0000000000000190     0 SECTION LOCAL  DEFAULT    1
>> >
>> > [ Lines removed for clarity ]
>> >
>> >     69: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND ap_strchr
>> >
>> >
>> > [ Lines removed for clarity ]
>> >
>> > --------------------------------------------------------------------------
>> >
>> > It seems that ap_strchr is not defined anywhere outside httpd, and not in
>> > any of the shared libs. This seems to create the problem when building
>> > a module with mod_perl or outside the mod_perl source.
>> >
>> > I find a somewhat related change by Stas in the past in the Changes file:
>> >
>> > bug reports generating code: [Stas]
>> > - add (apr|apu)-config linking info
>> > - show the full path to the config file used to get the data for the
>> >   report
>> >
>> > The APR and APR::* family of modules can now be used without having
>> > to load mod_perl.so. On *nix, this is done by compiling the needed
>> > functions from the appropriate sources used to build mod_perl.so
>> > into APR.so, and then arranging for APR::* to 'use APR ()'. On Win32,
>> > a static library of needed functions is built, and APR/APR::*
>> > then link into this library [Stas, Joe Schaefer, Randy Kobes]
>> >
>> >
>> > I hope this helps resolve this issue in any way.
>> >
>> >
>> >
>> >
>> >
>> > Regards,
>> >
>> > Jie
>> >
>> > * Jie Gao <j....@sydney.edu.au> wrote:
>> >
>> >> Date: Sun, 1 Mar 2015 17:30:45 +1100
>> >> From: Jie Gao <j....@sydney.edu.au>
>> >> To: "modperl@perl.apache.org" <modperl@perl.apache.org>, mod_perl Dev
>> >>  <d...@perl.apache.org>
>> >> Subject: Trunk: APR.so won't load
>> >> User-Agent: Mutt/1.5.21 (2010-09-15)
>> >>
>> >> I have got the source code from the trunk, "make test" mostly passed 
>> >> except for
>> >> a threading issue, but I installed it anyway.
>> >>
>> >> Tried to load a test module, but it fails with the following error:
>> >>
>> >> #     Error:  Can't load 
>> >> '/usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so'
>> >>  for module APR: 
>> >> /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/auto/APR/APR.so:
>> >>  undefined symbol: ap_strchr at 
>> >> /usr/local/lib/perl5/5.20.2/x86_64-linux-thread-multi/DynaLoader.pm line 
>> >> 193.
>> >> #  at 
>> >> /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi/APR/Table.pm
>> >>  line 23.
>> >>
>> >> The following test module loads OK, but fails if I uncomment any of the 
>> >> "use APR::*" lines:
>> >>
>> >> #-------------------------------------------------------------------------
>> >>
>> >> package mytest::mytestmodule;
>> >>
>> >> use 5.010001;
>> >> use strict;
>> >> use warnings;
>> >> use Carp;
>> >> $SIG{__DIE__} = \&Carp::confess;
>> >>
>> >> use mod_perl2;
>> >> use Apache2::Connection();
>> >> use Apache2::RequestRec();
>> >> use Apache2::SubRequest();
>> >> use Apache2::Access();
>> >> use Apache2::RequestUtil();
>> >> use Apache2::Response();
>> >> use Apache2::Log();
>> >> use Apache2::Util();
>> >> use Apache2::Const ("-compile", qw(:common :methods :satisfy :auth 
>> >> MODE_READBYTES));
>> >> use Apache2::URI();
>> >> use Apache2::Filter ();
>> >> #use APR::Const ("-compile", qw(:common SUCCESS BLOCK_READ));
>> >> use IO::Socket qw(SOCK_STREAM);
>> >> use Data::Dumper;
>> >> use AnyDBM_File ();
>> >> #use APR::Brigade ();
>> >> #use APR::Bucket ();
>> >> #use APR::Base64 ();
>> >> #use APR::Table ();
>> >> #use APR::URI ();
>> >> use URI::Escape::XS qw/uri_escape uri_unescape/;
>> >> #use Apache2::MPM();
>> >>
>> >> our $VERSION = '1.0.1';
>> >>
>> >> 1;
>> >> __END__
>> >>
>> >> #-------------------------------------------------------------------------
>> >>
>> >> -------------8<---------- Start Bug Report ------------8<----------
>> >> 1. Problem Description:
>> >>
>> >>   [DESCRIBE THE PROBLEM HERE]
>> >>
>> >> 2. Used Components and their Configuration:
>> >>
>> >> *** mod_perl version 2.000009
>> >>
>> >> *** using /usr/local/src/mod_perl-2.0/lib/Apache2/BuildConfig.pm
>> >>
>> >> *** Makefile.PL options:
>> >>   MP_APR_CONFIG  => /usr/local/httpd-2.4.12/bin/apr-1-config
>> >>   MP_APR_LIB     => aprext
>> >>   MP_APXS        => /usr/local/httpd-2.4.12/bin/apxs
>> >>   MP_COMPAT_1X   => 1
>> >>   MP_GENERATE_XS => 1
>> >>   MP_LIBNAME     => mod_perl
>> >>   MP_USE_DSO     => 1
>> >>
>> >>
>> >> *** /usr/local/httpd-2.4.12/bin/httpd -V
>> >> Server version: Apache/2.4.12 (Unix)
>> >> Server built:   Feb 27 2015 20:05:23
>> >> Server's Module Magic Number: 20120211:41
>> >> Server loaded:  APR 1.5.1, APR-UTIL 1.5.4
>> >> Compiled using: APR 1.5.1, APR-UTIL 1.5.4
>> >> Architecture:   64-bit
>> >> Server MPM:     worker
>> >>   threaded:     yes (fixed thread count)
>> >>     forked:     yes (variable process count)
>> >> Server compiled with....
>> >>  -D APR_HAS_SENDFILE
>> >>  -D APR_HAS_MMAP
>> >>  -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
>> >>  -D APR_USE_SYSVSEM_SERIALIZE
>> >>  -D APR_USE_PTHREAD_SERIALIZE
>> >>  -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
>> >>  -D APR_HAS_OTHER_CHILD
>> >>  -D AP_HAVE_RELIABLE_PIPED_LOGS
>> >>  -D DYNAMIC_MODULE_LIMIT=256
>> >>  -D HTTPD_ROOT="/usr/local/httpd-2.4.12"
>> >>  -D SUEXEC_BIN="/usr/local/httpd-2.4.12/bin/suexec"
>> >>
>> >>
>> >> *** /usr/bin/ldd /usr/local/httpd-2.4.12/bin/httpd
>> >>         linux-vdso.so.1 =>  (0x00007fffcefff000)
>> >>         libpcre.so.0 => /lib64/libpcre.so.0 (0x000000327f400000)
>> >>         libaprutil-1.so.0 => 
>> >> /usr/local/httpd-2.4.12/lib/libaprutil-1.so.0 (0x00007f3ba864c000)
>> >>         libexpat.so.1 => /lib64/libexpat.so.1 (0x0000003281c00000)
>> >>         libapr-1.so.0 => /usr/local/httpd-2.4.12/lib/libapr-1.so.0 
>> >> (0x00007f3ba8417000)
>> >>         librt.so.1 => /lib64/librt.so.1 (0x000000327dc00000)
>> >>         libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000036c2400000)
>> >>         libpthread.so.0 => /lib64/libpthread.so.0 (0x000000327d400000)
>> >>         libc.so.6 => /lib64/libc.so.6 (0x000000327d000000)
>> >>         /lib64/ld-linux-x86-64.so.2 (0x000000327cc00000)
>> >>         libfreebl3.so => /lib64/libfreebl3.so (0x00000036c2800000)
>> >>         libdl.so.2 => /lib64/libdl.so.2 (0x000000327d800000)
>> >>
>> >>
>> >> *** (apr|apu)-config linking info
>> >>
>> >>  -L/usr/local/httpd-2.4.12/lib -laprutil-1     -lexpat
>> >>  -L/usr/local/httpd-2.4.12/lib -lapr-1 -lrt -lcrypt  -lpthread
>> >>
>> >>
>> >>
>> >> *** /usr/local/bin/perl -V
>> >> Summary of my perl5 (revision 5 version 20 subversion 2) configuration:
>> >>
>> >>   Platform:
>> >>     osname=linux, osvers=2.6.32-504.8.1.el6.x86_64, 
>> >> archname=x86_64-linux-thread-multi
>> >>     uname='linux xxx.xxx.xxx.xx 2.6.32-504.8.1.el6.x86_64 #1 smp fri dec 
>> >> 19 12:09:25 est 2014 x86_64 x86_64 x86_64 gnulinux '
>> >>     config_args='-Dusethreads -Dprefix=/usr/local -des -A ccflags=-fPIC'
>> >>     hint=recommended, useposix=true, d_sigaction=define
>> >>     useithreads=define, usemultiplicity=define
>> >>     use64bitint=define, use64bitall=define, uselongdouble=undef
>> >>     usemymalloc=n, bincompat5005=undef
>> >>   Compiler:
>> >>     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fPIC -fwrapv 
>> >> -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include 
>> >> -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
>> >>     optimize='-O2',
>> >>     cppflags='-D_REENTRANT -D_GNU_SOURCE -fPIC -fwrapv 
>> >> -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
>> >>     ccversion='', gccversion='4.4.7 20120313 (Red Hat 4.4.7-11)', 
>> >> gccosandvers=''
>> >>     intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
>> >>     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
>> >>     ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', 
>> >> lseeksize=8
>> >>     alignbytes=8, prototype=define
>> >>   Linker and Libraries:
>> >>     ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
>> >>     libpth=/usr/local/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib 
>> >> /lib64 /usr/lib64 /usr/local/lib64
>> >>     libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
>> >>     perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
>> >>     libc=libc-2.12.so, so=so, useshrplib=false, libperl=libperl.a
>> >>     gnulibc_version='2.12'
>> >>   Dynamic Linking:
>> >>     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
>> >>     cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib 
>> >> -fstack-protector'
>> >>
>> >>
>> >> Characteristics of this binary (from libperl):
>> >>   Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
>> >>                         PERL_DONT_CREATE_GVSV
>> >>                         PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
>> >>                         PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
>> >>                         PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
>> >>                         USE_64_BIT_ALL USE_64_BIT_INT USE_ITHREADS
>> >>                         USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
>> >>                         USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO
>> >>                         USE_PERL_ATOF USE_REENTRANT_API
>> >>   Built under linux
>> >>   Compiled at Feb 25 2015 15:58:55
>> >>   %ENV:
>> >>     PERL_LWP_USE_HTTP_10="1"
>> >>   @INC:
>> >>     /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux-thread-multi
>> >>     /usr/local/lib/perl5/site_perl/5.20.2
>> >>     /usr/local/lib/perl5/5.20.2/x86_64-linux-thread-multi
>> >>     /usr/local/lib/perl5/5.20.2
>> >>     /usr/local/lib/perl5/site_perl/5.18.2
>> >>     /usr/local/lib/perl5/site_perl/5.18.0
>> >>     /usr/local/lib/perl5/site_perl
>> >>     .
>> >>
>> >> *** Packages of interest status:
>> >>
>> >> Apache2            : -
>> >> Apache2::Request   : -
>> >> CGI                : 3.65
>> >> ExtUtils::MakeMaker: 6.98
>> >> LWP                : 5.837
>> >> mod_perl           : -
>> >> mod_perl2          : 2.000009
>> >>
>> >>
>> >> 3. This is the core dump trace: (if you get a core dump):
>> >>
>> >>   [CORE TRACE COMES HERE]
>> >>
>> >> This report was generated by bin/mp2bug on Sun Mar  1 06:21:21 2015 GMT.
>> >>
>> >> -------------8<---------- End Bug Report --------------8<----------
>> >>
>> >> # ls -al /usr/local/httpd-2.4.12/lib/
>> >> total 4108
>> >> drwxr-xr-x.  4 root root    4096 Feb 27 20:07 .
>> >> drwxr-xr-x. 15 root root    4096 Feb 27 20:07 ..
>> >> -rw-r--r--.  1 root root    9262 Feb 27 20:07 apr.exp
>> >> drwxr-xr-x.  2 root root    4096 Feb 27 20:07 apr-util-1
>> >> -rw-r--r--.  1 root root    5272 Feb 27 20:07 aprutil.exp
>> >> -rw-r--r--.  1 root root 1685642 Feb 27 20:07 libapr-1.a
>> >> -rwxr-xr-x.  1 root root     969 Feb 27 20:07 libapr-1.la
>> >> lrwxrwxrwx.  1 root root      17 Feb 27 20:07 libapr-1.so -> 
>> >> libapr-1.so.0.5.1
>> >> lrwxrwxrwx.  1 root root      17 Feb 27 20:07 libapr-1.so.0 -> 
>> >> libapr-1.so.0.5.1
>> >> -rwxr-xr-x.  1 root root  858051 Feb 27 20:07 libapr-1.so.0.5.1
>> >> -rw-r--r--.  1 root root 1022024 Feb 27 20:07 libaprutil-1.a
>> >> -rwxr-xr-x.  1 root root    1045 Feb 27 20:07 libaprutil-1.la
>> >> lrwxrwxrwx.  1 root root      21 Feb 27 20:07 libaprutil-1.so -> 
>> >> libaprutil-1.so.0.5.4
>> >> lrwxrwxrwx.  1 root root      21 Feb 27 20:07 libaprutil-1.so.0 -> 
>> >> libaprutil-1.so.0.5.4
>> >> -rwxr-xr-x.  1 root root  589222 Feb 27 20:07 libaprutil-1.so.0.5.4
>> >> drwxr-xr-x.  2 root root    4096 Feb 27 20:07 pkgconfig
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> Regards,
>> >>
>> >>
>> >> Jie.
>> >>
>> >>
>> >>

Reply via email to